fix: BUG修改

This commit is contained in:
kun 2023-08-01 19:15:43 +08:00
parent 9227d8c6fa
commit 8ad8940acb
18 changed files with 461 additions and 102 deletions

View File

@ -53,6 +53,10 @@ export const bigItemGovermentAll = (params: any) => {
export const bigItemGovermentEngList = (params: any) => {
return http.post(BASEURL + `/gov/projectSubItem/engineeringPage`, params);
};
// 分部分项审核(政务端)
export const bigItemGovermentAudit = (params: any) => {
return http.post(BASEURL + `/gov/projectSubItem/examine`, params);
};
// 投资支付管理(项目端)------
// 投资支付合同管理分页列表

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -96,7 +96,7 @@ const drawArea = () => {
});
//
var polygon = new BMapGL.Polygon(path, {
fillColor: "",
fillColor: "#060f2c",
strokeColor: "#fff",
strokeWeight: 2,
strokeOpacity: 0.5

View File

@ -1,8 +1,8 @@
<template>
<!-- <div class="main-content"> -->
<div class="orderBgc" v-if="screenValue == 0">
<div class="change-btn">
<el-button type="primary" @click="changeScreen">切换驾驶舱</el-button>
<div class="change-btn" @click="changeScreen">
<img src="@/assets/images/screenImg/change.png" alt="" />
</div>
<!-- <Map2D class="mapStyle" v-if="mapValue == 0"></Map2D> -->
<!-- <Map3DStyle class="mapStyle" v-if="mapValue == 1"></Map3DStyle> -->
@ -86,11 +86,17 @@ onMounted(async () => {
.change-btn {
position: absolute;
right: 0;
right: 10px;
top: 0;
z-index: 100;
:deep(.el-button) {
background-color: transparent;
width: 50px;
height: 50px;
border-radius: 50%;
background-color: #060f2c;
cursor: pointer;
img {
width: 60px;
height: 60px;
}
}
.mapStyle {

View File

@ -1,7 +1,7 @@
<template>
<div class="project">
<div class="change-btn">
<el-button type="primary" @click="changeScreen">切换驾驶舱</el-button>
<div class="change-btn" @click="changeScreen">
<img src="@/assets/images/screenImg/change.png" alt="" />
</div>
<div class="Leftcent">
<LeftcentView></LeftcentView>
@ -46,11 +46,17 @@ onMounted(async () => {
width: 100%;
.change-btn {
position: absolute;
right: 0;
right: 10px;
top: 0;
z-index: 100;
:deep(.el-button) {
background-color: transparent;
width: 50px;
height: 50px;
border-radius: 50%;
background-color: #060f2c;
cursor: pointer;
img {
width: 60px;
height: 60px;
}
}
.Leftcent {

View File

@ -752,6 +752,9 @@ watch(
color: #fff;
font-size: 20px;
border-top: 1px solid #0a769a;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
.date {
line-height: 21px;
border-left: 1px solid #0a769a;
@ -857,6 +860,9 @@ watch(
border-top: 1px solid #0a769a;
color: #fff;
font-size: 20px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
.grids {
height: 100%;
@ -904,6 +910,9 @@ watch(
height: 38px;
line-height: 38px;
font-size: 18px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}

View File

@ -52,6 +52,9 @@
:headers="headers"
:action="`${baseUrl}` + '/project/projectSubItem/importMpp'"
:on-success="uploadFileSuccess"
:data="{
engineeringSn: searchSn
}"
multiple
:limit="1"
style="margin-left: 20px"
@ -74,6 +77,11 @@
<el-table-column align="center" prop="realEndTime" label="实际完成日期" width="200"></el-table-column>
<el-table-column align="center" prop="commander" label="负责人" width="150"></el-table-column>
<el-table-column align="center" prop="completeRatio" width="200" label="完成比率(%)"></el-table-column>
<el-table-column align="center" label="审核状态" width="150">
<template #default="scope">
<span>{{ scope.row.approvalStatus == 0 ? "未审核" : scope.row.approvalStatus == 1 ? "审核通过" : "已驳回" }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="状态" width="150">
<template #default="scope">
<span>{{
@ -117,6 +125,14 @@
<img src="@/assets/images/tableIcon/updateIcon.png" alt="" class="configureIcon" />
<span>查看</span>
</el-button>
<el-button
v-auth="'sub_item_examine'"
v-if="scope.row.approvalStatus == 0"
type="primary"
link
@click="auditData(scope.row)"
><img src="@/assets/images/tableIcon/seal.png" alt="" class="configureIcon" /><span>审批</span></el-button
>
</template>
</el-table-column>
<template #empty>
@ -251,6 +267,20 @@
</div>
</template>
</el-dialog>
<!-- 审核 -->
<el-dialog title="审批" width="26%" v-model="aproveVisible" show-close>
<div style="display: flex; align-items: center">
<el-icon style="color: var(--el-menu-text-color); margin: 0 12px; font-size: 20px"><WarningFilled /></el-icon>
<span>是否通过审批?</span>
</div>
<template #footer>
<span class="dialog-footer">
<el-button class="hzCancelStyle" @click="reject">驳回</el-button>
<el-button type="primary" @click="onSubmit">通过</el-button>
</span>
</template>
</el-dialog>
</div>
</div>
</template>
@ -265,12 +295,46 @@ import { ElMessage, UploadProps } from "element-plus";
import changeTheme from "@/components/changeTheme/index.vue";
import { GlobalStore } from "@/stores";
import LeftMenu from "@/components/LeftMenu/LeftMenu.vue";
import { bigItemGovermentList, bigItemGovermentEngList, addEntBigItem, updateEntBigItem } from "@/api/modules/huizhou";
import {
bigItemGovermentList,
bigItemGovermentEngList,
bigItemGovermentAudit,
addEntBigItem,
updateEntBigItem,
deleteEntBigItem
} from "@/api/modules/huizhou";
import { jxj_User } from "@/api/types";
import { useHandleData } from "@/hooks/useHandleData";
const rules = reactive<FormRules>({
name: {
required: true,
message: "请输入",
trigger: "blur"
},
workload: {
required: true,
message: "请输入",
trigger: "blur"
},
completeRatio: {
required: true,
message: "请输入",
trigger: "blur"
},
state: {
required: true,
message: "请选择",
trigger: "change"
},
planStartTime: {
required: true,
message: "请选择",
trigger: "change"
},
planEndTime: {
required: true,
message: "请选择",
trigger: "change"
}
});
const ruleFormRef = ref();
@ -342,6 +406,42 @@ const searchForm = ref({
realEndTime_end: "",
timeRange: []
});
const aproveVisible = ref(false);
const rowId = ref("");
const form = ref({
title: "",
createTime: "",
startTime: "",
endTime: ""
});
// snsn
const searchSn = ref("");
//
const searchName = ref<string>("");
const reject = async () => {
await bigItemGovermentAudit({ id: rowId.value, approvalStatus: 2 });
ElMessage.success("已驳回");
aproveVisible.value = false;
getDataList();
};
const onSubmit = async () => {
await bigItemGovermentAudit({ id: rowId.value, approvalStatus: 1 });
ElMessage.success("通过成功");
aproveVisible.value = false;
getDataList();
};
//
const auditData = async (row: any) => {
rowId.value = row.id;
aproveVisible.value = true;
};
//
const handleDeleteItem = async (params: jxj_User.ResUserList) => {
await useHandleData(deleteEntBigItem, { id: params.id }, `删除【${params.name}`);
getDataList();
};
const handleAddSubItem = (row: any) => {
parentObj.value = row;
childrenFormData.value = reactive({
@ -379,6 +479,8 @@ const childrenConfirm = async (formEl: FormInstance | undefined, form: any) => {
if (!formEl) return;
await formEl.validate(async (valid, fields) => {
if (valid) {
form.engineeringSn = searchSn.value;
console.log(form);
if (form.id) {
if (newTitle.value == "编辑子项") {
form.parentId = parentObj.value.parentId;
@ -494,17 +596,6 @@ const getDataList = async () => {
}
console.log(res);
};
const form = ref({
title: "",
createTime: "",
startTime: "",
endTime: ""
});
// snsn
const searchSn = ref("");
//
const searchName = ref<string>("");
// div
const onSearch = async (params: any) => {
active.value === 0 ? (searchSn.value = params.projectSn) : (searchSn.value = params.engineeringSn);
@ -575,9 +666,9 @@ watch(
);
onMounted(async () => {
await getEngPage();
onSearch(records.value[0]);
searchSn.value = (records.value as any[])[0].projectSn;
searchName.value = (records.value as any[])[0].projectName;
onSearch(records.value[0]);
});
</script>

View File

@ -159,7 +159,7 @@ const onSearch = async (params: any) => {
} else {
searchSn.value = params.engineeringSn;
searchName.value = params.engineeringName;
otherParams.value.engineeringSn = params.projectSn;
otherParams.value.engineeringSn = params.engineeringSn;
}
proTable.value.getTableList();
};
@ -227,8 +227,11 @@ watch(
);
onMounted(async () => {
await getEngPage();
searchSn.value = records.value[0].projectSn;
searchName.value = records.value[0].projectName;
searchSn.value = records.value[0].engineeringSn;
searchName.value = records.value[0].engineeringName;
otherParams.value = {
engineeringSn: records.value[0].engineeringSn
};
onSearch(records.value[0]);
await sendIframeMessage({ obj: { path: route.path } }, 2, undefined);
});

View File

@ -387,9 +387,9 @@ watch(
);
onMounted(async () => {
await getEngPage();
onSearch(records.value[0]);
searchSn.value = records.value[0].projectSn;
searchName.value = records.value[0].projectName;
onSearch(records.value[0]);
await sendIframeMessage({ obj: { path: route.path } }, 2, undefined);
});
</script>

View File

@ -249,7 +249,7 @@ const formConfig = {
},
{
label: "节点负责人",
prop: "chargerNumber",
prop: "chargerName",
type: "input",
disabled: true
}
@ -400,7 +400,7 @@ const getTableList = (params: any) => {
// } else {
// newParams.engineeringSn = searchSn.value;
// }
newParams.projectSn = searchSn.value;
newParams.engineeringSn = searchSn.value;
if (!(newParams.projectSn || newParams.engineeringSn)) {
return;
}
@ -472,7 +472,7 @@ const handleItemDetail = async (row: any) => {
};
//
const saveItem = async (form: any) => {
form.projectSn = searchSn.value;
form.engineeringSn = searchSn.value;
if (form.id && title.value != "查看") {
// console.log(form.dictCode);
const res = await globalPlanGovermentEdit(form);
@ -507,9 +507,9 @@ watch(
onMounted(async () => {
getDicMainList();
await getEngPage();
onSearch(records.value[0]);
searchSn.value = (records.value as ResAiProjectPage[])[0].projectSn;
searchName.value = (records.value as ResAiProjectPage[])[0].projectName;
onSearch(records.value[0]);
});
</script>

View File

@ -27,9 +27,8 @@
<el-table-column type="index" label="序号" width="80"> </el-table-column>
<el-table-column prop="reportContent" label="汇报内容" align="left"> </el-table-column>
<el-table-column prop="totalAmount" label="总工程造价(元)">
<template #default="scope">
<template #default="scope" v-auth="'investment_apply_add'">
<el-input
disabled
v-if="scope.row.symbolSum && countData"
v-model.number="countData[scope.row.key]"
placeholder="请输入"
@ -75,7 +74,7 @@
<el-table
:data="recordItemData"
class="el-table"
height="100%"
height="350"
:row-style="{ height: '40px' }"
:header-cell-style="{ textAlign: 'center', height: '40px' }"
:cell-style="{ textAlign: 'center', height: '40px' }"
@ -150,7 +149,15 @@ import { onMounted, ref, watch, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, UploadProps } from "element-plus";
import { relativeInfo, timeLineData, submitReform, submitAll } from "@/api/modules/project";
import { payGovermentSubItemList, payGovermentSubItemCount, payGovermentSubItemDetail } from "@/api/modules/huizhou";
import {
payGovermentSubItemList,
payGovermentSubItemCount,
payGovermentSubItemDetail,
entPaySubItemAdd,
entPayCountAdd,
entPayCountEdit,
entSubItemDetailAdd
} from "@/api/modules/huizhou";
import { CirclePlus } from "@element-plus/icons-vue";
import DialogForm from "@/components/DialogForm/index.vue";
const addVisible = ref(false);
@ -415,7 +422,8 @@ const formData2 = ref({
const baseUrl = import.meta.env.VITE_API_URL;
const props = defineProps({
detailsDialog: Boolean,
relativeId: String
relativeId: String,
searchSn: String
});
const emits = defineEmits(["update:detailsDialog", "confirm"]);
const visible1 = ref(false);
@ -465,25 +473,44 @@ const openAdd2 = (row: object) => {
});
addVisible2.value = true;
};
// const submitCount = async () => {
// //
// console.log(countData.value);
// console.log(recordData.value);
// let isAdd = true;
// for (let i in countData.value) {
// if (i == "constructionCost" || i == "payment" || i == "advanceCharge" || i == "unPayment" || i == "applyPayment") {
// if (countData.value[i] || countData.value[i] != 0) {
// isAdd = false;
// break;
// }
// }
// }
// if (isAdd) {
// const res = await payCountAdd(countData.value);
// ElMessage.success("");
// getSubItemList();
// } else {
// const res = await payCountEdit(countData.value);
// ElMessage.success("");
// getSubItemList();
// }
// };
const submitCount = async () => {
//
console.log(countData.value);
console.log(recordData.value);
let isAdd = true;
for (let i in countData.value) {
if (i == "constructionCost" || i == "payment" || i == "advanceCharge" || i == "unPayment" || i == "applyPayment") {
if (countData.value[i] || countData.value[i] != 0) {
isAdd = false;
break;
}
}
}
if (isAdd) {
const res = await payCountAdd(countData.value);
let requestData = {
...countData.value,
investmentApplyId: props.relativeId,
engineeringSn: props.searchSn
};
if (!countData.value.id) {
const res = await entPayCountAdd(requestData);
ElMessage.success("新增成功");
getSubItemList();
} else {
const res = await payCountEdit(countData.value);
const res = await entPayCountEdit(requestData);
ElMessage.success("编辑成功");
getSubItemList();
}
@ -492,9 +519,10 @@ const submitCount = async () => {
const saveItem = async (form: any) => {
let requestData = {
investmentApplyId: props.relativeId,
...form
...form,
engineeringSn: props.searchSn
};
const res = await paySubItemAdd(requestData);
const res = await entPaySubItemAdd(requestData);
getSubItemList();
ElMessage.success("新增成功");
addVisible.value = false;
@ -505,7 +533,7 @@ const saveItem2 = async (form: any) => {
parentId: detailsData.value.id,
itemId: rowDetailId.value
};
const res = await subItemDetailAdd(requestData);
const res = await entSubItemDetailAdd(requestData);
getSubDetailList(rowDetailId.value);
ElMessage.success("新增成功");
addVisible2.value = false;

View File

@ -68,7 +68,7 @@
>
</DialogForm>
<!-- 投资支付详情 -->
<transformInfo1 v-model:detailsDialog="detailsDialog" :relativeId="relativeId"></transformInfo1>
<transformInfo1 v-model:detailsDialog="detailsDialog" :relativeId="relativeId" :searchSn="searchSn"></transformInfo1>
</div>
</div>
</div>
@ -104,6 +104,20 @@ const formConfig = {
type: "date",
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD"
},
{
label: "申报时段开始时间",
prop: "applyStartTime",
type: "date",
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD"
},
{
label: "申报时段结束时间",
prop: "applyEndTime",
type: "date",
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD"
}
],
rules: {
@ -120,7 +134,21 @@ const formConfig = {
message: "请选择",
trigger: "change"
}
]
],
applyStartTime: [
{
required: true,
message: "请选择",
trigger: "change"
}
],
applyEndTime: [
{
required: true,
message: "请选择",
trigger: "change"
}
],
}
};
const formData = ref({
@ -198,6 +226,7 @@ const onCurChange = async (params: number) => {
pages.value.total = +res.result.total;
};
const saveItem = async (form: any) => {
form.engineeringSn = searchSn.value;
if (form.id) {
const res = await applyTimeAdd(form);
proTable.value.getTableList();
@ -304,9 +333,9 @@ watch(
);
onMounted(async () => {
await getEngPage();
onSearch(records.value[0]);
searchSn.value = records.value[0].projectSn;
searchName.value = records.value[0].projectName;
onSearch(records.value[0]);
});
</script>
<style scoped lang="scss">

View File

@ -3,9 +3,9 @@
<el-dialog class="report" :title="title" style="min-width: 1680px" v-model="visible1" @close="closeMain">
<Steps class="steps" :datas="datas" :active="active" />
<!-- <keep-alive> -->
<component v-if="visible1" :is="Components[active]" @next="next" @prev="active--"></component>
<!-- </keep-alive> -->
<keep-alive>
<component :is="Components[active]" @next="next" @prev="active--"></component>
</keep-alive>
</el-dialog>
<!-- </div> -->
</template>

View File

@ -1,27 +1,27 @@
<template>
<el-dialog title="编辑工程信息" width="60%" v-model="visible1" show-close>
<el-dialog title="编辑项目信息" width="60%" v-model="visible1" show-close>
<div class="overview">
<div class="littleTitle">概况信息</div>
<el-form ref="formRef" :model="editFormData" label-width="150px" class="form" size="default">
<!-- <el-form-item label="项目名称:">
<el-input v-model="editProjectName" disabled />
</el-form-item> -->
<el-form-item label="工程名称:">
<el-form-item label="项目名称:">
<el-input v-model="editFormData.engineeringName" />
</el-form-item>
<div class="row">
<el-form-item label="工程编码:">
<el-form-item label="项目编码:">
<el-input v-model="editFormData.engineeringCode" />
</el-form-item>
<el-form-item label="工程造价(万元):">
<el-form-item label="项目造价(万元):">
<el-input v-model="editFormData.engineeringCost" />
</el-form-item>
</div>
<div class="row">
<el-form-item label="工程总面积(㎡):">
<el-form-item label="项目总面积(㎡):">
<el-input v-model="editFormData.engineeringArea" />
</el-form-item>
<el-form-item label="工程总长度m:">
<el-form-item label="项目总长度m:">
<el-input v-model="editFormData.engineeringLength" />
</el-form-item>
</div>
@ -62,7 +62,7 @@
</div>
<div class="littleTitle" style="margin-left: -10%">补录信息</div>
<div class="row">
<el-form-item label="是否重点工程:">
<el-form-item label="是否重点项目:">
<el-radio-group v-model="editFormData.isImportant">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
@ -70,7 +70,7 @@
</el-form-item>
</div>
<div class="row">
<el-form-item label="工程类别:">
<el-form-item label="项目类别:">
<el-select class="select" v-model="editFormData.engineeringType">
<el-option
v-for="item in engineeringTypeOptions"
@ -80,7 +80,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="工程用途:">
<el-form-item label="项目用途:">
<el-select class="select" v-model="editFormData.engineeringUse">
<el-option
v-for="item in engineeringPurpose"
@ -111,10 +111,10 @@
</el-form-item>
</div>
<div class="row">
<el-form-item label="安全监督工程状态:">
<el-form-item label="安全监督项目状态:">
<el-input v-model="editFormData.safetySupervisionState"> </el-input>
</el-form-item>
<el-form-item label="质量监督工程状态:">
<el-form-item label="质量监督项目状态:">
<el-input v-model="editFormData.qualitySupervisionState"> </el-input>
</el-form-item>
</div>
@ -174,7 +174,7 @@ const getDataDetail = async () => {
};
const data = await getDicList({ dictType: "engineering_type" });
engineeringTypeOptions.value = data.result;
const res = await getDicList({ dictType: "engineering_purpose" }); //
const res = await getDicList({ dictType: "engineering_purpose" }); //
engineeringPurpose.value = res.result;
};
watch(

View File

@ -73,12 +73,12 @@ const columns: ColumnProps[] = [
{ type: "index", label: "序号", width: 80 },
{
prop: "engineeringName",
label: "工程名称",
label: "项目名称",
search: { el: "input" }
},
{
prop: "engineeringCode",
label: "工程编号",
label: "项目编号",
search: { el: "input" }
},
// prop
@ -90,14 +90,14 @@ const columns: ColumnProps[] = [
},
{
prop: "engineeringType",
label: "工程类型",
label: "项目类型",
enum: DicTypeList.value,
search: { el: "select", props: { filterable: true } },
fieldNames: { label: "dictValue", value: "dictLabel" }
},
{
prop: "state",
label: "工程状态",
label: "项目状态",
enum: DicStatusList.value,
search: { el: "select", props: { filterable: true } },
fieldNames: { label: "dictValue", value: "dictLabel" }

View File

@ -171,29 +171,72 @@
</div>
<div class="situation">
<span>整改情况</span>
<el-button
class="btnStyle"
type="success"
@click="addSituation"
v-if="recordRowData.state === 1 || recordRowData.state === 4"
>新增整改记录</el-button
>
</div>
<div class="situation-step">
<el-timeline>
<el-timeline-item :timestamp="item.createTime" placement="top" v-for="(item, index) in timelineList" :key="index">
<div class="row">
<span>整改人:</span>
<span>{{ item.solveBy }}</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.solveBy" placeholder="请输入" />
</template>
<span v-else>{{ item.solveBy }}</span>
</div>
<div class="row">
<span>整改日期:</span>
<template v-if="item.type && item.type == 'insert'">
<el-date-picker
v-model="reformInfo.solveTime"
type="datetime"
style="width: 100%"
placeholder="请选择日期"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</template>
<span v-else>{{ item.solveTime }}</span>
</div>
<div class="row">
<span>措施建议:</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.recommend" type="textarea" :rows="2" placeholder="请输入" />
</template>
<span v-else>{{ item.recommend }}</span>
</div>
<div class="row">
<span>整改回复:</span>
<span>{{ item.solveDesc }}</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.solveDesc" type="textarea" :rows="2" placeholder="请输入" />
</template>
<span v-else>{{ item.solveDesc }}</span>
</div>
<div class="row">
<span>整改照片:</span>
<div class="imgList">
<el-image
:src="item2.url"
fit="fill"
v-for="(item2, index) in item.solveImage"
:key="index"
:preview-src-list="[item2.url]"
<div class="face-img" v-if="item.type && item.type == 'insert'">
<div class="imgList" v-if="reformInfo.solveImage.length > 0">
<img :src="item.url" class="face-avatar" v-for="(item, index) in reformInfo.solveImage" :key="index" />
</div>
<el-upload
class="face-uploader"
:action="`${baseUrl}` + '/xmgl/file/upload'"
:show-file-list="false"
:on-success="handleAvatarSuccess"
accept="image/jpg, image/jpeg, image/png"
>
</el-image>
<el-icon>
<plus />
</el-icon>
</el-upload>
</div>
<div class="imgList" v-else-if="Array.isArray(item.solveImage)">
<img :src="item2.url" alt="" v-for="(item2, index) in item.solveImage" :key="index" />
</div>
</div>
<div class="row" v-if="item.suggest">
@ -203,11 +246,15 @@
<div
class="status-name"
:style="{ color: item.examineState === 0 ? '#008BFF' : item.examineState === 1 ? '#30AC7C' : '#F64D31' }"
v-if="!item.type"
>
{{ item.examineState == 0 ? "待审核" : item.examineState == 1 ? "已通过" : "已驳回" }}
</div>
<div class="status-operate" v-if="item.examineState === 0">
<el-button type="primary" @click="singleAudit(item)">审核</el-button>
<!-- <div class="status-operate" v-if="item.examineState === 0">
<el-button type="primary" @click="auditVisible = true">审核</el-button>
</div> -->
<div class="status-operate" v-if="item.type">
<el-button class="btnStyle" type="primary" @click="submitForm">提交</el-button>
</div>
</el-timeline-item>
</el-timeline>
@ -236,6 +283,7 @@ import { onMounted, ref, watch, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, UploadProps } from "element-plus";
import { relativeInfo, timeLineData, singleOptionAudit, allOptionAudit } from "@/api/modules/goverment";
import { submitReform } from "@/api/modules/project";
const props = defineProps({
detailsDialog: Boolean,
relativeId: String
@ -253,6 +301,41 @@ const singleData = ref(); // 单个整改情况数据
const auditForm = ref({
content: ""
});
const timelineList = ref([{ name: 1 }]);
const reformInfo = ref({
solveBy: "",
solveTime: "",
solveDesc: "",
recommend: "",
solveImage: []
});
const baseUrl = import.meta.env.VITE_API_URL;
//
const submitForm = async () => {
reformInfo.value.solveImage = JSON.stringify(reformInfo.value.solveImage);
let requestData = {
...reformInfo.value,
inspectQuestionId: recordRowData.value.id
};
const res = await submitReform(requestData);
timelineList.value.shift();
getInfo();
getTimeLineList();
closeSecondary();
ElMessage.success("提交成功");
};
const addSituation = () => {
timelineList.value.unshift({
type: "insert"
});
};
//
const handleAvatarSuccess: UploadProps["onSuccess"] = (response, uploadFile) => {
console.log(response.result.url);
reformInfo.value.solveImage.push({
url: response.result.url
});
};
//
const singleAuditSubmit = async index => {
if (index == 1) {
@ -322,6 +405,14 @@ const rowClick = row => {
"min-width": "824px",
transform: "translateX(-170px)"
};
reformInfo.value = reactive({
solveBy: "",
solveTime: "",
solveDesc: "",
recommend: "",
solveImage: []
});
//
getTimeLineList();
};
//
@ -334,7 +425,6 @@ const getInfo = async () => {
});
console.log(recordData);
};
const timelineList = ref([{ name: 1 }]);
//
const getTimeLineList = async () => {
const res = await timeLineData({ inspectQuestionId: recordRowData.value.id });
@ -450,7 +540,8 @@ onMounted(() => {});
top: 0;
right: -460px;
width: 380px;
height: 650px;
// height: 650px;
height: calc(100% - 31px);
min-width: 420px;
background: var(--el-menu-bg-color);
box-shadow: 0px 4px 8px 0px rgba(48, 62, 100, 0.2);
@ -488,6 +579,11 @@ onMounted(() => {});
height: 53px;
margin-right: 15px;
}
img {
width: 95px;
height: 53px;
margin-right: 15px;
}
}
.face-img {
width: 100%;

View File

@ -166,29 +166,70 @@
</div>
<div class="situation">
<span>整改情况</span>
<el-button
class="btnStyle"
type="success"
@click="addSituation"
v-if="recordRowData.state === 1 || recordRowData.state === 4"
>新增整改记录</el-button
>
</div>
<div class="situation-step">
<el-timeline>
<el-timeline-item :timestamp="item.createTime" placement="top" v-for="(item, index) in timelineList" :key="index">
<div class="row">
<span>整改人:</span>
<span>{{ item.solveBy }}</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.solveBy" placeholder="请输入" v-if="item.type && item.type == 'insert'" />
</template>
<span v-else>{{ item.solveBy }}</span>
</div>
<div class="row">
<span>整改日期:</span>
<template v-if="item.type && item.type == 'insert'">
<el-date-picker
v-model="reformInfo.solveTime"
type="datetime"
style="width: 100%"
placeholder="请选择日期"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</template>
<span v-else>{{ item.solveTime }}</span>
</div>
<div class="row">
<span>措施建议:</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.recommend" type="textarea" :rows="2" placeholder="请输入" />
</template>
<span v-else>{{ item.recommend }}</span>
</div>
<div class="row">
<span>整改回复:</span>
<span>{{ item.solveDesc }}</span>
<template v-if="item.type && item.type == 'insert'">
<el-input v-model="reformInfo.solveDesc" type="textarea" :rows="2" placeholder="请输入" />
</template>
<span v-else>{{ item.solveDesc }}</span>
</div>
<div class="row">
<span>整改照片:</span>
<div class="imgList">
<el-image
:src="item2.url"
fit="fill"
v-for="(item2, index) in item.solveImage"
:key="index"
:preview-src-list="[item2.url]"
<div class="face-img" v-if="item.type && item.type == 'insert'">
<div class="imgList" v-if="reformInfo.solveImage.length > 0">
<img :src="item.url" class="face-avatar" v-for="(item, index) in reformInfo.solveImage" :key="index" />
</div>
<el-upload
class="face-uploader"
:action="`${baseUrl}` + '/xmgl/file/upload'"
:show-file-list="false"
:on-success="handleAvatarSuccess"
accept="image/jpg, image/jpeg, image/png"
>
</el-image>
<el-icon><plus /></el-icon>
</el-upload>
</div>
<div class="imgList" v-else-if="Array.isArray(item.solveImage)">
<img :src="item2.url" alt="" v-for="(item2, index) in item.solveImage" :key="index" />
</div>
</div>
<div class="row" v-if="item.suggest">
@ -198,11 +239,15 @@
<div
class="status-name"
:style="{ color: item.examineState === 0 ? '#008BFF' : item.examineState === 1 ? '#30AC7C' : '#F64D31' }"
v-if="!item.type"
>
{{ item.examineState == 0 ? "待审核" : item.examineState == 1 ? "已通过" : "已驳回" }}
</div>
<div class="status-operate" v-if="item.examineState === 0">
<el-button type="primary" @click="singleAudit(item)">审核</el-button>
<!-- <div class="status-operate" v-if="item.examineState === 0">
<el-button type="primary" @click="auditVisible = true">审核</el-button>
</div> -->
<div class="status-operate" v-if="item.type">
<el-button class="btnStyle" type="primary" @click="submitForm">提交</el-button>
</div>
</el-timeline-item>
</el-timeline>
@ -231,6 +276,7 @@ import { onMounted, ref, watch, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, UploadProps } from "element-plus";
import { relativeInfo, timeLineData, singleOptionAudit, allOptionAudit } from "@/api/modules/goverment";
import { submitReform } from "@/api/modules/project";
const baseUrl = import.meta.env.VITE_API_URL;
const props = defineProps({
detailsDialog: Boolean,
@ -247,13 +293,41 @@ const dialogStyle = ref({
});
const reformInfo = ref({
solveBy: "",
solveTime: "",
solveDesc: "",
recommend: "",
solveImage: []
});
const singleData = ref(); //
const auditForm = ref({
content: ""
});
//
const submitForm = async () => {
reformInfo.value.solveImage = JSON.stringify(reformInfo.value.solveImage);
let requestData = {
...reformInfo.value,
inspectQuestionId: recordRowData.value.id
};
const res = await submitReform(requestData);
timelineList.value.shift();
getTimeLineList();
closeSecondary();
getInfo();
ElMessage.success("提交成功");
};
//
const handleAvatarSuccess: UploadProps["onSuccess"] = (response, uploadFile) => {
console.log(response.result.url);
reformInfo.value.solveImage.push({
url: response.result.url
});
};
const addSituation = () => {
timelineList.value.unshift({
type: "insert"
});
};
//
const singleAuditSubmit = async index => {
if (index == 1) {
@ -324,6 +398,13 @@ const rowClick = row => {
"min-width": "824px",
transform: "translateX(-170px)"
};
reformInfo.value = reactive({
solveBy: "",
solveTime: "",
solveDesc: "",
recommend: "",
solveImage: []
});
getTimeLineList();
};
//
@ -451,7 +532,8 @@ onMounted(() => {});
top: 0;
right: -460px;
width: 380px;
height: 650px;
// height: 650px;
height: calc(100% - 31px);
min-width: 420px;
background: var(--el-menu-bg-color);
box-shadow: 0px 4px 8px 0px rgba(48, 62, 100, 0.2);
@ -489,6 +571,11 @@ onMounted(() => {});
height: 53px;
margin-right: 15px;
}
img {
width: 95px;
height: 53px;
margin-right: 15px;
}
}
.face-img {
width: 100%;

View File

@ -360,7 +360,7 @@ const onCurChange = async (params: number) => {
records.value = result.records;
pages.value.total = +result.total;
};
//
//
const handleDeleteItem = async (params: jxj_User.ResUserList) => {
await useHandleData(deleteEntBigItem, { id: params.id }, `删除【${params.name}`);
getDataList();