fix: BUG修改
This commit is contained in:
parent
9227d8c6fa
commit
8ad8940acb
@ -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);
|
||||
};
|
||||
|
||||
// 投资支付管理(项目端)------
|
||||
// 投资支付合同管理分页列表
|
||||
|
||||
BIN
src/assets/images/screenImg/change.png
Normal file
BIN
src/assets/images/screenImg/change.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
@ -96,7 +96,7 @@ const drawArea = () => {
|
||||
});
|
||||
// 创建区域掩膜实例
|
||||
var polygon = new BMapGL.Polygon(path, {
|
||||
fillColor: "",
|
||||
fillColor: "#060f2c",
|
||||
strokeColor: "#fff",
|
||||
strokeWeight: 2,
|
||||
strokeOpacity: 0.5
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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: ""
|
||||
});
|
||||
// 搜索用的项目sn或者工程sn
|
||||
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: ""
|
||||
});
|
||||
// 搜索用的项目sn或者工程sn
|
||||
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>
|
||||
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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" }
|
||||
|
||||
@ -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%;
|
||||
|
||||
@ -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%;
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user