feat: 工程验收部分功能新增以及BUG修改

This commit is contained in:
kun 2023-08-14 18:16:53 +08:00
parent c726db1c01
commit 6be37ebd32
11 changed files with 428 additions and 276 deletions

View File

@ -94,3 +94,7 @@ export const noticeDetailMyPost = (params: { noticeId: string }) => {
export const noticeReadMyPost = (params: { noticeId: string }) => {
return http.post(BASEURL + `/xmgl/notice/read`, params);
};
// 查询工程的单体工程信息
export const singleEngineer = (params: any) => {
return http.post(BASEURL + `/project/engineering/querySingle`, params);
};

View File

@ -517,3 +517,26 @@ export const applyTimeAdd = (params: any) => {
export const subItemDetailAdd = (params: any) => {
return http.post(BASEURL + `/project/investmentPaymentDetail/add`, params);
};
// 工程验收
// 验收计划分页列表
export const acceptancePlanPage = (params: any) => {
return http.post(BASEURL + `/project/checkAcceptPlan/page`, params);
};
// 验收计划新增
export const acceptancePlanAdd = (params: any) => {
return http.post(BASEURL + `/project/checkAcceptPlan/add`, params);
};
// 验收计划编辑
export const acceptancePlanEdit = (params: any) => {
return http.post(BASEURL + `/project/checkAcceptPlan/edit`, params);
};
// 验收计划删除
export const acceptancePlanDelete = (params: any) => {
return http.post(BASEURL + `/project/checkAcceptPlan/delete`, params);
};
// 验收申请分页列表
export const acceptanceApplyPage = (params: any) => {
return http.post(BASEURL + `/project/checkAcceptApply/page`, params);
};

View File

@ -29,6 +29,8 @@ export const GlobalStore = defineStore({
// language
language: "",
path: null,
// 工程Sn
engineeringSn: "",
// themeConfig
themeConfig: {
// 当前页面是否全屏

View File

@ -15,6 +15,7 @@ export interface GlobalState {
openDropdown: boolean | null;
path: string | null;
isManager: string | null;
engineeringSn: string;
}
/* themeConfigProp */

View File

@ -406,6 +406,8 @@ const childrenConfirm = async (formEl: FormInstance | undefined, form: any) => {
return;
}
}
form.overdueIssueFile = JSON.stringify(form.overdueIssueFile);
form.annexFile = JSON.stringify(form.annexFile);
if (form.id) {
if (newTitle.value == "编辑子项") {
form.parentId = parentObj.value.parentId;
@ -441,13 +443,13 @@ const uploadFileSuccess = (response: any) => {
};
const uploadSuccess1 = (response: any) => {
ElMessage.success("上传成功");
childrenFormData.value.overdueIssueFile = response.result.url;
fileList1.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
childrenFormData.value.overdueIssueFile = { name: response.result.originalFilename, url: response.result.url };
fileList1.value = [{ name: response.result.originalFilename, url: response.result.url }];
};
const uploadSuccess = (response: any) => {
ElMessage.success("上传成功");
childrenFormData.value.annexFile = response.result.url;
fileList.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
childrenFormData.value.annexFile = { name: response.result.originalFilename, url: response.result.url };
fileList.value = [{ name: response.result.originalFilename, url: response.result.url }];
};
const onRemove1: UploadProps["onRemove"] = (file, uploadFiles) => {
childrenFormData.value.overdueIssueFile = "";
@ -516,8 +518,8 @@ const handleEditItem = async (row: any) => {
newTitle.value = "编辑";
}
childrenFormData.value = { ...row };
fileList.value = row.annexFile ? [{ name: "文件", url: row.annexFile }] : [];
fileList1.value = row.overdueIssueFile ? [{ name: "文件", url: row.overdueIssueFile }] : [];
fileList.value = row.annexFile ? [{ ...JSON.parse(row.annexFile) }] : [];
fileList1.value = row.overdueIssueFile ? [{ ...JSON.parse(row.overdueIssueFile) }] : [];
childrenVisible.value = true;
};
onMounted(() => {

View File

@ -297,9 +297,7 @@ const searchForm = ref({
});
const onDowmload = (key: string) => {
if (childrenFormData.value[key]) {
ElMessageBox.confirm("确认下载数据?", "温馨提示", { type: "warning" }).then(() =>
useDownload(exportApp, "附件文件", { fileUrl: childrenFormData.value[key] })
);
window.open(baseUrl + "/xmgl/file/preview?fileUrl=" + JSON.parse(childrenFormData.value[key]).url);
} else {
ElMessage.error("暂无可下载文件");
}
@ -316,7 +314,7 @@ const handleCurrentChange = (val: any) => {
const uploadSuccess = (response: any) => {
ElMessage.success("上传成功");
childrenFormData.value.annexFile = response.result.url;
fileList.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
fileList.value = [{ name: response.result.originalFilename, url: response.result.url }];
};
const onRemove: UploadProps["onRemove"] = (file, uploadFiles) => {
childrenFormData.value.annexFile = "";
@ -329,10 +327,10 @@ const handleEditItem = async (row: any) => {
newTitle.value = "查看";
childrenFormData.value = { ...row };
if (row.annexFile) {
fileList.value = [{ name: "文件", url: row.annexFile }];
fileList.value = [{ ...JSON.parse(row.annexFile) }];
}
if (row.overdueIssueFile) {
fileList1.value = [{ name: "文件", url: row.overdueIssueFile }];
fileList1.value = [{ ...JSON.parse(row.overdueIssueFile) }];
}
childrenVisible.value = true;
};

View File

@ -9,27 +9,43 @@
</el-icon>
</div>
</template>
<div class="search-select">
<span style="margin: 0 10px 2px 0px">验收阶段</span>
<el-input style="width: 200px" v-model="allForm.stage" clearable placeholder="请输入" />
<span style="margin: 0 10px 2px 10px">类型</span>
<el-select style="width: 200px" v-model="allForm.type" clearable placeholder="请选择">
<el-option v-for="item in typeList" :key="item.dictLabel" :label="item.dictValue" :value="item.dictLabel" />
</el-select>
<span style="margin: 0 10px 2px 20px">备注</span>
<el-input style="width: 200px" v-model="allForm.remark" clearable placeholder="请输入" />
</div>
<!-- 验收内容 -->
<div class="detail-table">
<div class="content-title">验收计划</div>
<div class="content-title">验收内容</div>
<div class="content-button"><el-button class="addButtonStyle" @click="addPlan">新增</el-button></div>
<div class="table">
<el-table
:data="recordData"
class="el-table"
height="300"
:row-style="{ height: '40px' }"
:header-cell-style="{ backgroundColor: '#F5F7FA', textAlign: 'center', height: '40px' }"
:cell-style="{ textAlign: 'center', height: '40px' }"
>
<el-table-column type="index" label="序号" width="100" />
<el-table-column prop="type1" label="类型">
<el-table-column prop="type1" label="类型" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<el-select style="width: 120px" v-model="row.type1" clearable placeholder="请选择" v-if="!row.id">
<el-option v-for="item in typeList" :key="item.dictLabel" :label="item.dictValue" :value="item.dictLabel" />
</el-select>
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type2" label="单体工程">
<el-table-column prop="type2" label="单体工程" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<el-select v-if="!row.id" style="width: 100%" v-model="row.type1" clearable placeholder="请选择">
<el-option v-for="item in singleEngineerList" :key="item.singleId" :label="item.name" :value="item.singleId" />
</el-select>
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
@ -47,42 +63,61 @@
<span v-else>{{ row.type3 }}</span>
</template>
</el-table-column>
<el-table-column prop="type4" label="起始标识">
<el-table-column prop="type4" label="起始标识" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type5" label="截止标识">
<el-table-column prop="type5" label="截止标识" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type6" label="验收负责人">
<el-table-column prop="type6" label="验收负责人" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type7" label="负责人电话">
<el-table-column prop="type7" label="负责人电话" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type8" label="状态">
<el-table-column prop="type8" label="状态" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column prop="type9" label="备注">
<el-table-column prop="type9" label="备注" width="150">
<template #default="{ row }">
<el-input v-model="row.type1" v-if="!row.id" />
<span v-else>{{ row.type1 }}</span>
</template>
</el-table-column>
<el-table-column align="center" width="300" label="操作">
<template #default="scope">
<el-button type="primary" v-if="scope.row.id" link @click="handleEditItem(scope.row)">
<img src="@/assets/images/tableIcon/updateIcon.png" alt="" class="configureIcon" />
<span>编辑</span>
</el-button>
<el-button v-if="scope.row.id" type="danger" link :icon="Delete" @click="handleDeleteItem(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
<template #empty>
<div class="table-empty">
<slot name="empty">
<img src="@/assets/images/notData.png" alt="notData" />
<div>暂无数据</div>
</slot>
</div>
</template>
</el-table>
</div>
<!-- <div class="operation-btn" v-if="basicData?.state != 4">
@ -91,15 +126,140 @@
<el-button type="primary" @click="allSubmit">全部整改完成,提交审核</el-button>
</div> -->
</div>
<!-- 资料附件 -->
<div class="detail-table">
<div class="content-title">资料附件</div>
<div class="table">
<el-table
:data="documentData"
border
height="300"
class="el-table"
:row-style="{ height: '40px', textAlign: 'center' }"
:header-cell-style="{ height: '40px', backgroundColor: '#e1eeff', textAlign: 'center' }"
:cell-style="{ height: '40px', textAlign: 'center' }"
>
<el-table-column type="index" label="序号" width="200" />
<el-table-column prop="name" label="附件名称">
<template #default="{ row, $index }">
<el-input class="test" v-model="row.type1" />
</template>
</el-table-column>
<el-table-column prop="floorNum" label="操作">
<template #default="{ row, $index }">
<el-upload
accept=".mpp"
:headers="headers"
:action="`${baseUrl}` + '/project/projectSubItem/importMpp'"
:on-success="uploadFileSuccess"
multiple
:limit="1"
:show-file-list="false"
>
<el-button type="primary" link>上传附件</el-button>
</el-upload>
</template>
</el-table-column>
<el-table-column fixed="right">
<template #header>
<el-button type="primary" round @click="addEngineeringSingle"> 添加 </el-button>
</template>
<template #default="{ row }">
<el-button type="danger" link @click="removeEngineeringSingle(row)">删除</el-button>
</template>
</el-table-column>
<template #empty>
<div class="table-empty">
<slot name="empty">
<img src="@/assets/images/notData.png" alt="notData" />
<div>暂无数据</div>
</slot>
</div>
</template>
</el-table>
</div>
<!-- <div class="operation-btn" v-if="basicData?.state != 4">
<el-button type="info" style="margin-right: 98px">驳回,请尽快整改</el-button>
<el-button type="primary">整改完成,全部合格</el-button>
<el-button type="primary" @click="allSubmit">全部整改完成,提交审核</el-button>
</div> -->
</div>
<!-- 驳回原因 -->
<div class="back-reason" v-if="title == '驳回'">
<div class="content-title">驳回原因</div>
<div class="form-content">
<el-input v-model="allForm.textValue" :rows="4" type="textarea" placeholder="请输入" />
</div>
</div>
<!-- 现场检查 -->
<div class="detail-table" v-if="title == '检查'">
<div class="content-title">现场检查</div>
<div class="table">
<el-table
:data="checkData"
class="el-table"
height="300"
:row-style="{ height: '40px' }"
:header-cell-style="{ backgroundColor: '#F5F7FA', textAlign: 'center', height: '40px' }"
:cell-style="{ textAlign: 'center', height: '40px' }"
>
<el-table-column type="index" label="序号" width="100" />
<el-table-column prop="type1" label="监督员" width="150" />
<el-table-column prop="type1" label="检查时间" width="150" />
<el-table-column prop="type1" label="施工单位" width="150" />
<el-table-column prop="type1" label="监理单位" width="150" />
<el-table-column prop="type1" label="项目经理" width="150" />
<el-table-column prop="type1" label="总监理工程师" width="150" />
<el-table-column prop="type1" label="状态" width="150" />
<el-table-column align="center" width="300" label="操作">
<template #default="scope">
<el-button type="primary" v-if="scope.row.id" link @click="handleEditItem(scope.row)">
<img src="@/assets/images/tableIcon/look.png" alt="" class="configureIcon" />
<span>编辑</span>
</el-button>
</template>
</el-table-column>
<template #empty>
<div class="table-empty">
<slot name="empty">
<img src="@/assets/images/notData.png" alt="notData" />
<div>暂无数据</div>
</slot>
</div>
</template>
</el-table>
</div>
</div>
<template #footer>
<div>
<el-button type="primary" @click="visible1 = false" v-if="title != '新增'">关闭</el-button>
<el-button type="primary" @click="confirm()">提交申请</el-button>
</div>
</template>
</el-dialog>
<transformInfo v-model:detailsDialog="detailsDialog" :relativeId="relativeId" @confirm="confirmReform"></transformInfo>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, watch, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, UploadProps } from "element-plus";
import { ElMessage } from "element-plus";
import { relativeInfo, timeLineData, submitReform, submitAll } from "@/api/modules/project";
import { Delete } from "@element-plus/icons-vue";
import { jxj_User } from "@/api/types";
import { useHandleData } from "@/hooks/useHandleData";
import { GlobalStore } from "@/stores";
import transformInfo from "../../../qualitySupervision/components/transformInfo.vue";
import { getDicList } from "@/api/modules/jxjview";
import { singleEngineer } from "@/api/modules/common";
const singleEngineerList = ref([]);
const typeList = ref([]);
const detailsDialog = ref(false);
const checkData = ref([]);
const globalStore = GlobalStore();
const headers = ref({ Authorization: "Bearer " + globalStore.token });
const documentData = ref<any>([]);
const baseUrl = import.meta.env.VITE_API_URL;
const props = defineProps({
dialogVisible: Boolean,
@ -115,12 +275,44 @@ const basicData = ref(); // 基础信息
const dialogStyle = ref({
"min-width": "824px"
});
const reformInfo = ref({
solveBy: "",
solveTime: "",
solveDesc: "",
solveImage: []
const allForm = ref({
stage: "",
type: null,
remark: "",
textValue: ""
});
//
const confirmReform = () => {};
const confirm = async () => {};
const getSingleEngineerData = async () => {
const res = await singleEngineer({ engineeringSn: globalStore.engineeringSn });
singleEngineerList.value = res.result;
console.log(res);
};
const getDicMainList = async () => {
//
const { result } = await getDicList({ dictType: "check_accept_type" });
typeList.value.length = 0;
typeList.value.push(...result);
};
//
const uploadFileSuccess = (response: any) => {
console.log(response);
};
const removeEngineeringSingle = (row: any) => {
// const i = form.value.engineeringSingles?.indexOf(row);
// i != null && form.value.engineeringSingles?.splice(i, 1);
};
const addEngineeringSingle = () => {
documentData.value.push({
type1: "",
type2: ""
});
};
//
const handleDeleteItem = async (params: jxj_User.ResUserList) => {
// await useHandleData(deleteBigItem, { id: params.id }, `${params.name}`);
};
const addPlan = () => {
recordData.value.push({
type1: "",
@ -134,6 +326,10 @@ const addPlan = () => {
type9: ""
});
};
//
const handleEditItem = async (row: any) => {
console.log(row);
};
//
const allSubmit = async () => {
const res = await submitAll({ id: basicData.value.id });
@ -160,15 +356,6 @@ const getInfo = async () => {
console.log(recordData);
};
const timelineList = ref([{ name: 1 }]);
//
const getTimeLineList = async () => {
const res = await timeLineData({ inspectQuestionId: recordRowData.value.id });
res.result.map(item => {
item.solveImage = eval(item.solveImage);
});
timelineList.value = res.result;
};
const auditVisible = ref(false);
// visibleel-dialog
watch(
@ -176,7 +363,7 @@ watch(
(n, o) => {
visible1.value = n;
if (n) {
getInfo();
// getInfo();
} else {
emits("confirm");
}
@ -186,7 +373,10 @@ watch(
watch(visible1, (n, o) => {
emits("update:dialogVisible", n);
});
onMounted(() => {});
onMounted(() => {
getDicMainList();
getSingleEngineerData();
});
</script>
<style lang="scss" scoped>
@ -230,8 +420,12 @@ onMounted(() => {});
color: #a8abb2;
}
}
.search-select {
@include flex;
box-shadow: none;
}
.detail-table {
height: 391px;
// height: 391px;
margin-top: 18px;
.content-title {
@include title;
@ -246,6 +440,14 @@ onMounted(() => {});
:deep(.el-table) {
height: 100%;
}
.table-empty {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
flex-direction: column;
color: #999;
}
}
.operation-btn {
display: flex;
@ -254,5 +456,15 @@ onMounted(() => {});
margin-top: 20px;
}
}
.back-reason {
// height: 391px;
margin-top: 18px;
.content-title {
@include title;
}
.form-content {
margin-top: 20px;
}
}
}
</style>

View File

@ -31,7 +31,7 @@
{{ row.examineState === 1 ? "待审核" : row.examineState === 2 ? "审核驳回" : "审核通过" }}
</template>
<template #state="{ row }">
<span :class="row.state === 1 ? '' : 'redText'">{{ row.state == 1 ? "在线" : "离线" }}</span>
<span>{{ row.state == 1 ? "已验收" : "未验收" }}</span>
</template>
</ProTable>
</div>
@ -54,11 +54,13 @@ import { ref, reactive, onMounted } from "vue";
import { ElMessage } from "element-plus";
import { ColumnProps } from "@/components/ProTable/interface";
import ProTable from "@/components/ProTable/index.vue";
import { getDustManagementPage } from "@/api/modules/enterpriseApi";
import { acceptanceApplyPage } from "@/api/modules/project";
import { getRelevanceList } from "@/api/modules/common";
import engineeringEngDrawer from "@/components/engineeringEngDrawer/index.vue";
import allEngineering from "@/components/allEngineering/index.vue";
import detailsDialog from "./components/detailsDialog.vue";
import { GlobalStore } from "@/stores";
const globalStore = GlobalStore();
const newTitle = ref("新增");
const relativeId = ref();
const dialogVisible = ref(false);
@ -73,13 +75,13 @@ const columns: ColumnProps[] = [
{ type: "index", label: "序号", width: 80 },
// prop
{ prop: "engineeringName", label: "验收阶段", search: { el: "input" } },
{ prop: "stage", label: "验收阶段", search: { el: "input" } },
{ prop: "name", label: "工程名称" },
{ prop: "state", label: "单体工程" },
{ prop: "code", label: "单体工程" },
{ prop: "code", label: "类型" },
{ prop: "code", label: "备注" },
{ prop: "code", label: "状态" },
{ prop: "state", label: "状态" },
{ prop: "operation", label: "操作", fixed: "right" }
];
@ -112,7 +114,7 @@ const getTableList = (params: any) => {
} else {
return { result: { current: "1", pages: "1", records: [], size: "10", total: "0" } };
}
return getDustManagementPage(newParams);
return acceptanceApplyPage(newParams);
};
//
const handleAddItem = () => {
@ -127,12 +129,14 @@ const getengineering = async () => {
engList.value = res.result;
if (res.result && res.result.length > 0) {
initParam.engineeringSn = res.result[0].engineeringSn;
globalStore.engineeringSn = res.result[0].engineeringSn;
}
console.log(res);
};
//
const onUpdate = async row => {
initParam.engineeringSn = row.engineeringSn;
globalStore.engineeringSn = row.engineeringSn;
ElMessage.success("页面已更新");
};

View File

@ -17,7 +17,7 @@
<el-button class="addButtonStyle" @click="handleEditItem(1)">新增</el-button>
</template>
<template #operation="{ row }">
<el-button type="primary" link @click="downloadTemp">
<el-button type="primary" link @click="downloadTemp(row)">
<img src="@/assets/images/tableIcon/下载附件.png" alt="" class="configureIcon" />
<span>资料下载</span>
</el-button>
@ -32,65 +32,65 @@
{{ row.examineState === 1 ? "待审核" : row.examineState === 2 ? "审核驳回" : "审核通过" }}
</template>
<template #state="{ row }">
<span :class="row.state === 1 ? '' : 'redText'">{{ row.state == 1 ? "在线" : "离线" }}</span>
<span>{{ row.state == 1 ? "已验收" : "未验收" }}</span>
</template>
</ProTable>
</div>
<!-- 新增验收计划 -->
<el-dialog class="imgDialog" :title="newTitle" width="40%" v-model="planVisible" show-close>
<el-form class="diaForm" :model="planFormData" ref="ruleFormRef" label-width="160px">
<el-form-item label="验收阶段:" prop="name">
<el-input v-model="planFormData.name" placeholder="请输入" />
<el-form class="diaForm" :model="planFormData" :rules="rules" ref="ruleFormRef" label-width="160px">
<el-form-item label="验收阶段:" prop="stage">
<el-input v-model="planFormData.stage" placeholder="请输入" />
</el-form-item>
<el-form-item label="类型:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
</el-form-item>
<el-form-item label="单体工程:" prop="unit">
<el-select disabled style="width: 100%" v-model="planFormData.state" clearable placeholder="请选择">
<el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value" />
<el-form-item label="类型:" prop="type">
<el-select style="width: 100%" v-model="planFormData.type" clearable placeholder="请选择">
<el-option v-for="item in typeList" :key="item.dictLabel" :label="item.dictValue" :value="item.dictLabel" />
</el-select>
</el-form-item>
<el-form-item label="计划验收日期:" prop="planStartTime">
<el-form-item label="单体工程:" prop="singleId">
<el-select style="width: 100%" v-model="planFormData.singleId" clearable placeholder="请选择">
<el-option v-for="item in singleEngineerList" :key="item.singleId" :label="item.name" :value="item.singleId" />
</el-select>
</el-form-item>
<el-form-item label="计划验收日期:" prop="planCheckDate">
<el-date-picker
style="width: 100%"
v-model="planFormData.planStartTime"
v-model="planFormData.planCheckDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="datetime"
disabled
type="date"
placeholder="请选择时间"
/>
</el-form-item>
<el-form-item label="起始标识:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
<el-form-item label="起始标识:" prop="startFlag">
<el-input v-model="planFormData.startFlag" placeholder="请输入" />
</el-form-item>
<el-form-item label="截止标识:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
<el-form-item label="截止标识:" prop="endFlag">
<el-input v-model="planFormData.endFlag" placeholder="请输入" />
</el-form-item>
<el-form-item label="验收负责人:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
<el-form-item label="验收负责人:" prop="headPerson">
<el-input v-model="planFormData.headPerson" placeholder="请输入" />
</el-form-item>
<el-form-item label="负责人电话:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
<el-form-item label="负责人电话:" prop="headPersonPhone">
<el-input v-model="planFormData.headPersonPhone" placeholder="请输入" />
</el-form-item>
<el-form-item label="状态:" prop="buildAddress">
<el-radio-group v-model="planFormData.buildAddress">
<el-form-item label="状态:" prop="state">
<el-radio-group v-model="planFormData.state">
<el-radio label="1" size="large">已验收</el-radio>
<el-radio label="2" size="large">未验收</el-radio>
<el-radio label="0" size="large">未验收</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="实际验收完成日期:" prop="planEndTime">
<el-form-item label="实际验收完成日期:" prop="completeDate">
<el-date-picker
style="width: 100%"
v-model="planFormData.planEndTime"
v-model="planFormData.completeDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="datetime"
disabled
type="date"
placeholder="请选择时间"
/>
</el-form-item>
<el-form-item label="验收资料:" prop="overdueIssueFile">
<el-form-item label="验收资料:" prop="fileUrl">
<el-upload
ref="upload"
:headers="headers"
@ -98,17 +98,16 @@
class="upload-demo"
:action="`${baseUrl}` + '/xmgl/file/upload'"
:on-remove="onRemove"
disabled
multiple
:limit="1"
:on-success="uploadSuccess"
style="width: 100%"
>
<el-button class="uploadBtn" type="primary" @click="onDowmload('overdueIssueFile')">点击上传</el-button>
<el-button class="uploadBtn" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item label="备注:" prop="buildAddress">
<el-input v-model="planFormData.buildAddress" placeholder="请输入" />
<el-form-item label="备注:" prop="remark">
<el-input v-model="planFormData.remark" placeholder="请输入" />
</el-form-item>
</el-form>
<template #footer>
@ -126,7 +125,7 @@
<script setup lang="tsx" name="acceptancePlan">
import { ref, reactive, onMounted } from "vue";
import { ElMessage, UploadProps } from "element-plus";
import { ElMessage, ElMessageBox, UploadProps } from "element-plus";
import type { FormInstance } from "element-plus";
import { ColumnProps } from "@/components/ProTable/interface";
import { Delete } from "@element-plus/icons-vue";
@ -134,33 +133,41 @@ import { jxj_User } from "@/api/types";
import { GlobalStore } from "@/stores";
import { useHandleData } from "@/hooks/useHandleData";
import ProTable from "@/components/ProTable/index.vue";
import {
getDustManagementPage,
addDustManagement,
editDustManagement,
deleteDustManagement,
getengineeringList
} from "@/api/modules/enterpriseApi";
import { getRelevanceList } from "@/api/modules/common";
import DialogForm from "@/components/DialogForm/index.vue";
import AMap from "@/components/AMap/AMap.vue";
import { acceptancePlanPage, acceptancePlanAdd, acceptancePlanEdit, acceptancePlanDelete } from "@/api/modules/project";
import { getRelevanceList, singleEngineer } from "@/api/modules/common";
import engineeringEngDrawer from "@/components/engineeringEngDrawer/index.vue";
import allEngineering from "@/components/allEngineering/index.vue";
import { useDownload } from "@/hooks/useDownload";
import { getDicList } from "@/api/modules/jxjview";
const typeList = ref([]);
const rules = ref({
headPersonPhone: [
{
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
message: "请输入合法手机号",
trigger: "blur"
}
]
});
const singleEngineerList = ref([]);
const ruleFormRef = ref();
const baseUrl = import.meta.env.VITE_API_URL;
const fileList1 = ref([]);
const globalStore = GlobalStore();
const headers = ref({ Authorization: "Bearer " + globalStore.token });
const statusList = ref([
{ label: "未开始", value: 1 },
{ label: "进行中", value: 2 },
{ label: "已完成", value: 3 },
{ label: "逾期未开始", value: 4 },
{ label: "逾期进行中", value: 5 },
{ label: "逾期已完成", value: 6 }
]);
const planFormData = ref({});
const planFormData = ref({
stage: "",
type: "",
singleId: "",
planCheckDate: null,
startFlag: "",
endFlag: "",
headPerson: "",
headPersonPhone: "",
state: "1",
completeDate: null,
fileUrl: "",
remark: ""
});
const planVisible = ref(false);
const newTitle = ref("新增验收计划");
const visible = ref(false);
@ -172,133 +179,52 @@ const title = ref("");
const proTable = ref();
const engDrawer = ref();
interface formData {
name?: string;
code?: string;
hardwareId?: string;
engineeringSn?: string;
lat?: number | undefined;
lng?: number | undefined;
position?: string;
priority: number;
}
const records = ref({});
const formData = ref<formData>({
name: "",
code: "",
hardwareId: "",
priority: 1,
engineeringSn: "",
lat: undefined,
lng: undefined,
position: ""
});
//
const columns: ColumnProps[] = [
{ type: "index", label: "序号", width: 80 },
// prop
{ prop: "engineeringName", label: "验收阶段", search: { el: "input" } },
{ prop: "stage", label: "验收阶段", search: { el: "input" } },
{ prop: "name", label: "类型" },
{ prop: "state", label: "单体工程" },
{ prop: "code", label: "计划验收日期" },
{ prop: "code", label: "起始标识" },
{ prop: "code", label: "截止标识" },
{ prop: "code", label: "验收负责人" },
{ prop: "code", label: "负责人电话" },
{ prop: "code", label: "状态" },
{ prop: "code", width: 150, label: "实际验收完成日期" },
{ prop: "code", label: "备注" },
{ prop: "type", label: "类型" },
{ prop: "singleProject", label: "单体工程" },
{ prop: "planCheckDate", label: "计划验收日期", width: 150 },
{ prop: "startFlag", label: "起始标识" },
{ prop: "endFlag", label: "截止标识" },
{ prop: "headPerson", label: "验收负责人" },
{ prop: "headPersonPhone", label: "负责人电话" },
{ prop: "state", label: "状态" },
{ prop: "completeDate", label: "实际验收完成日期", width: 150 },
{ prop: "remark", label: "备注" },
{ prop: "operation", width: 240, label: "操作", fixed: "right" }
];
//
const formConfig = reactive({
formItemConfig: [
{
label: "设备名称",
prop: "name",
type: "input"
},
{
label: "设备编码",
prop: "code",
type: "input",
disabled: true
},
{
label: "显示排序",
prop: "priority",
type: "number"
},
{
label: "所属工程",
prop: "engineeringSn",
type: "select",
data: []
},
{
label: "经纬度",
prop: "position",
type: "input",
mapIcon: true
}
],
rules: {
name: [
{
required: true,
message: "请输入设备名称",
trigger: "blur"
}
],
code: [
{
required: true,
message: "请输入设备编码",
trigger: "blur"
}
],
priority: [
{
required: true,
message: "请输入排序",
trigger: "blur"
}
],
position: [
{
required: true,
message: "请输入经纬度",
trigger: "change"
}
],
engineeringSn: [
{
required: true,
message: "请选择所属工程",
trigger: "blur"
}
]
}
});
// ProTable()
const initParam = reactive({
engineeringSn: ""
});
const getDicMainList = async () => {
//
const { result } = await getDicList({ dictType: "check_accept_type" });
typeList.value.length = 0;
typeList.value.push(...result);
};
//
const confirm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
await formEl.validate((valid, fields) => {
await formEl.validate(async (valid, fields) => {
if (valid) {
planFormData.value.engineeringSn = initParam.engineeringSn;
if (planFormData.value.id) {
const res = await acceptancePlanEdit({ ...planFormData.value });
ElMessage.success("编辑成功");
} else {
const res = await acceptancePlanAdd({ ...planFormData.value });
ElMessage.success("新增成功");
}
proTable.value.getTableList();
planVisible.value = false;
} else {
console.log("error submit!", fields);
ElMessage({
showClose: true,
message: "请完善表单信息!",
@ -308,26 +234,21 @@ const confirm = async (formEl: FormInstance | undefined) => {
});
};
const onRemove: UploadProps["onRemove"] = (file, uploadFiles) => {
// childrenFormData.value.annexFile = "";
// fileList.value = reactive([]);
planFormData.value.fileUrl = "";
fileList1.value = reactive([]);
};
const uploadSuccess = (response: any) => {
// ElMessage.success("");
// childrenFormData.value.annexFile = response.result.url;
// fileList.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
};
const onDowmload = (key: string) => {
// if (childrenFormData.value[key]) {
// ElMessageBox.confirm("?", "", { type: "warning" }).then(() =>
// useDownload(exportApp, "", { fileUrl: childrenFormData.value[key] })
// );
// } else {
// ElMessage.error("");
// }
planFormData.value.fileUrl = response.result.url;
fileList1.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
};
//
const downloadTemp = () => {
// useDownload(parameter.value.tempApi, `${parameter.value.title}`);
const downloadTemp = (row: any) => {
if (row.fileUrl) {
window.open(baseUrl + "/xmgl/file/preview?fileUrl=" + row.fileUrl);
} else {
ElMessage.error("暂无可下载文件");
}
};
// dataCallback list && total && pageNum && pageSize
// hooks/useTable.ts
@ -350,7 +271,7 @@ const getTableList = (params: any) => {
} else {
return { result: { current: "1", pages: "1", records: [], size: "10", total: "0" } };
}
return getDustManagementPage(newParams);
return acceptancePlanPage(newParams);
};
//
@ -358,59 +279,39 @@ const handleEditItem = async (index: number, row: any) => {
if (index === 1) {
newTitle.value = "新增验收计划";
planFormData.value = reactive({
name: "",
code: "",
hardwareId: "",
priority: 1,
engineeringSn: "",
lat: undefined,
lng: undefined,
position: ""
stage: "",
type: "",
singleId: "",
planCheckDate: null,
startFlag: "",
endFlag: "",
headPerson: "",
headPersonPhone: "",
state: "1",
completeDate: null,
fileUrl: "",
remark: ""
});
} else {
newTitle.value = "编辑验收计划";
planFormData.value = reactive({ ...row });
if (row.fileUrl) {
fileList1.value = [{ name: "文件", url: row.fileUrl }];
}
}
planVisible.value = true;
};
//
const handleDeleteItem = async (params: jxj_User.ResUserList) => {
await useHandleData(deleteDustManagement, { id: params.id }, `删除【${params.name}`);
await useHandleData(acceptancePlanDelete, { id: params.id }, `删除【${params.stage}`);
proTable.value.getTableList();
};
//
const saveItem = async (form: any) => {
if (form.id) {
const res = await editDustManagement(form);
proTable.value.getTableList();
ElMessage.success("编辑成功");
} else {
const res = await addDustManagement(form);
ElMessage.success("新增成功");
proTable.value.getTableList();
}
visible.value = false;
const getSingleEngineerData = async () => {
const res = await singleEngineer({ engineeringSn: initParam.engineeringSn });
singleEngineerList.value = res.result;
console.log(res);
};
const getAddress = async (e: any) => {
formData.value.lng = e.lng;
formData.value.lat = e.lat;
formData.value.position = "经度:" + e.lng + "" + "维度:" + e.lat;
isOpen.value = false;
ElMessage.success("获取经纬度成功");
};
const getNameList = async () => {
const res = await getengineeringList({});
formConfig.formItemConfig[3].data = res.result.map(item => {
return {
label: item.engineeringName,
value: item.engineeringSn
};
});
};
const getengineering = async () => {
// let newParams = JSON.parse(JSON.stringify(params));
const res = await getRelevanceList();
@ -418,6 +319,7 @@ const getengineering = async () => {
if (res.result && res.result.length > 0) {
initParam.engineeringSn = res.result[0].engineeringSn;
}
getSingleEngineerData();
console.log(res);
};
//
@ -428,7 +330,7 @@ const onUpdate = async row => {
onMounted(async () => {
getengineering();
getNameList();
getDicMainList();
});
</script>
<style lang="scss" scoped>

View File

@ -400,6 +400,8 @@ const childrenConfirm = async (formEl: FormInstance | undefined, form: any) => {
return;
}
}
form.overdueIssueFile = JSON.stringify(form.overdueIssueFile);
form.annexFile = JSON.stringify(form.annexFile);
if (form.id) {
if (newTitle.value == "编辑子项") {
form.parentId = parentObj.value.parentId;
@ -434,14 +436,15 @@ const uploadFileSuccess = (response: any) => {
}
};
const uploadSuccess1 = (response: any) => {
console.log(response);
ElMessage.success("上传成功");
childrenFormData.value.overdueIssueFile = response.result.url;
fileList1.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
childrenFormData.value.overdueIssueFile = { name: response.result.originalFilename, url: response.result.url };
fileList1.value = [{ name: response.result.originalFilename, url: response.result.url }];
};
const uploadSuccess = (response: any) => {
ElMessage.success("上传成功");
childrenFormData.value.annexFile = response.result.url;
fileList.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
childrenFormData.value.annexFile = { name: response.result.originalFilename, url: response.result.url };
fileList.value = [{ name: response.result.originalFilename, url: response.result.url }];
};
const onRemove1: UploadProps["onRemove"] = (file, uploadFiles) => {
childrenFormData.value.overdueIssueFile = "";
@ -510,8 +513,8 @@ const handleEditItem = async (row: any) => {
newTitle.value = "编辑";
}
childrenFormData.value = { ...row };
fileList.value = row.annexFile ? [{ name: "文件", url: row.annexFile }] : [];
fileList1.value = row.overdueIssueFile ? [{ name: "文件", url: row.overdueIssueFile }] : [];
fileList.value = row.annexFile ? [{ ...JSON.parse(row.annexFile) }] : [];
fileList1.value = row.overdueIssueFile ? [{ ...JSON.parse(row.overdueIssueFile) }] : [];
childrenVisible.value = true;
};
onMounted(() => {

View File

@ -294,6 +294,7 @@ const confirm = async (formEl: FormInstance | undefined, form: any) => {
if (!formEl) return;
await formEl.validate(async (valid, fields) => {
if (valid) {
formData.value.engineeringSn = searchSn.value;
if (formData.value.id) {
const res = await videoDataEdit(form);
ElMessage.success("编辑成功");