From 77737f4e73f7267170b9b06fc73d1610c29c0661 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期二, 12 十一月 2024 13:18:35 +0800 Subject: [PATCH] 新增 --- src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue | 203 + src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 48 src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue | 323 +++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue | 5 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 101 src/views/newHome/index.vue | 3 src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue | 184 + src/api/dataUpload/contractorManage/index.ts | 63 src/views/specialWorkSystem/specialIndex/index.vue | 499 ++-- src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue | 198 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue | 187 + src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue | 89 src/views/specialWorkSystem/specialIndex/components/videoDetail.vue | 9 src/views/dataUpload/contractorManage/keyUserInfo/index.vue | 257 ++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue | 228 + src/api/specialWorkSystem/workApply/index.ts | 77 src/views/loginPage/component/accountLogin.vue | 5 src/router/index.ts | 5 src/layout/navBars/breadcrumb/user.vue | 5 src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 58 src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue | 15 src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue | 228 ++ src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue | 89 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue | 89 src/views/specialWorkSystem/process/zyjcgl/index.vue | 4 src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue | 69 src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue | 189 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue | 191 + src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue | 290 +++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue | 195 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue | 195 + src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue | 188 ++ src/views/dataUpload/contractorManage/userCertInfo/index.vue | 256 ++ src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue | 89 src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue | 4 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue | 89 src/views/dataUpload/contractorManage/projectInfo/index.vue | 234 ++ src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue | 89 src/views/specialWorkSystem/specialIndex/components/workRecord.vue | 14 src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue | 41 src/api/specialWorkSystem/specialIndex/index.ts | 2 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue | 131 42 files changed, 4,146 insertions(+), 1,092 deletions(-) diff --git a/src/api/dataUpload/contractorManage/index.ts b/src/api/dataUpload/contractorManage/index.ts index 62ce95e..83b2fdf 100644 --- a/src/api/dataUpload/contractorManage/index.ts +++ b/src/api/dataUpload/contractorManage/index.ts @@ -64,6 +64,69 @@ method: 'post', data: data }); + }, + getProjectInfoList: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project/list`, + method: 'post', + data: data + }); + }, + addProjectInfo: (data: Array<any>) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project`, + method: 'post', + data: data + }); + }, + delProjectInfo: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project/del`, + method: 'post', + data: data + }); + }, + getKeyUserInfoList: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/list`, + method: 'post', + data: data + }); + }, + addKeyUserInfo: (data: Array<any>) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel`, + method: 'post', + data: data + }); + }, + delKeyUserInfo: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/del`, + method: 'post', + data: data + }); + }, + getUserCertInfoList: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert/list`, + method: 'post', + data: data + }); + }, + addUserCertInfo: (data: Array<any>) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert`, + method: 'post', + data: data + }); + }, + delUserCertInfo: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert/del`, + method: 'post', + data: data + }); } }; } diff --git a/src/api/specialWorkSystem/specialIndex/index.ts b/src/api/specialWorkSystem/specialIndex/index.ts index b40b8fd..5b71079 100644 --- a/src/api/specialWorkSystem/specialIndex/index.ts +++ b/src/api/specialWorkSystem/specialIndex/index.ts @@ -4,7 +4,7 @@ return { analyseType: (data: object) => { return request({ - url: import.meta.env.VITE_API_URL + `/specialWork/analyse/everyType/dep`, + url: import.meta.env.VITE_API_URL + `/specialwork9step/statistic/everyType/dep`, method: 'post', data: data }); diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts index c00e5e5..932d1ee 100644 --- a/src/api/specialWorkSystem/workApply/index.ts +++ b/src/api/specialWorkSystem/workApply/index.ts @@ -200,7 +200,74 @@ data: data }); }, - + + renewalHot: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hot`, + method: 'post', + data: data + }); + }, + renewalConfinedspace: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/confinedspace`, + method: 'post', + data: data + }); + }, + + renewalHoisting: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hoisting`, + method: 'post', + data: data + }); + }, + + renewalGroundBreaking: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/groundBreaking`, + method: 'post', + data: data + }); + }, + renewalBrokenCircuit: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/brokenCircuit`, + method: 'post', + data: data + }); + }, + renewalHight: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hight`, + method: 'post', + data: data + }); + }, + + renewalTemporaryPower: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/temporaryPower`, + method: 'post', + data: data + }); + }, + renewalBlindPlatePlugging: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/blindPlatePlugging`, + method: 'post', + data: data + }); + }, + renewalOpenJob: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/openJob`, + method: 'post', + data: data + }); + }, + // 所有记录列表 getApplyList: (data: object) => { return request({ @@ -265,6 +332,14 @@ }); }, + // 查询特殊作业人员 + getOpList: () => { + return request({ + url: import.meta.env.VITE_API_URL + `/account/special/operator/list`, + method: 'get' + }); + }, + // 受限空间申请 postSpaceApply: (data: object) => { return request({ diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue index 1f01e1c..9c7cc17 100644 --- a/src/layout/navBars/breadcrumb/user.vue +++ b/src/layout/navBars/breadcrumb/user.vue @@ -346,7 +346,11 @@ if (!Cookies.get('token')) return false; const res = await menuApi.getMenuAdmin(Cookies.get('projectId') === null ? '' : Cookies.get('projectId')); if (res.data.code === '200') { + if(res.data.data && res.data.data[0]){ state.systemName = res.data.data[0].project.projectName; + }else{ + state.systemName = '' + } } else { console.log('有问题'); } @@ -354,7 +358,6 @@ const backToMenu = () => { router.push({ path: 'newMenu' }).then(()=>{ routeList.routesList.value = [] - console.log(routeList); }); }; // const toHome = () => { diff --git a/src/router/index.ts b/src/router/index.ts index c562cd5..5971416 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -83,7 +83,10 @@ } else if (token && to.path === '/newMenu') { next(); NProgress.done(); - } else { + } else if (token && (to.path === '/warningScreen' || to.path === '/screenPage')) { + next(); + NProgress.done(); + }else { const storesRoutesList = useRoutesList(pinia); const { routesList } = storeToRefs(storesRoutesList); if (routesList.value.length === 0) { diff --git a/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue new file mode 100644 index 0000000..5d9d9c7 --- /dev/null +++ b/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue @@ -0,0 +1,188 @@ +<template> + <div class="system-add-user-container"> + <el-dialog :title="title" v-model="isShowDialog" width="50%"> + <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="人员" prop="userId"> + <el-select v-model="form.userId" filterable placeholder="请选择人员" clearable> + <el-option v-for="(item,index) in userList" :key="index" :label="item.userName" :value="item.uuid"/> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="人员类型" prop="userType"> + <el-select v-model="form.userType" filterable placeholder="请选择类型" clearable> + <el-option v-for="(item,index) in userTypeList" :key="index" :label="item.name" :value="item.value"/> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="承包商" prop="contractorId"> + <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable> + <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true"> + <el-form-item label="删除状态" prop="deleted"> + <el-radio-group v-model="form.deleted"> + <el-radio label="0">未删除</el-radio> + <el-radio label="1">已删除</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button> + <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue'; +import {ElMessageBox, ElMessage, FormRules, FormInstance} from 'element-plus'; +import axios from "axios"; +import {contractorApi} from "/@/api/dataUpload/contractorManage"; +import Cookies from "js-cookie"; + +// 定义接口来定义对象的类型 +interface DataState { + title: string + isShowDialog: boolean + form: { + uuid: string + userType: null | number + userId: string + contractorId: string + deleted: string + } + rules:{} + contractorList: [] + userList: [] + userTypeList: Array<any> +} + +export default defineComponent({ + name: 'reportDialog', + props: ['types'], + setup(props, context) { + const formRef = ref() + const addFormRef = ref() + const state = reactive<DataState>({ + title: '', + isShowDialog: false, + form: { + uuid: '', + userType: null, + userId: '', + contractorId: '', + deleted: '0' + }, + rules:{ + userType: [{ required: true, message: '请选择人员类型', trigger: 'blur' }], + userId: [{ required: true, message: '请选择人员', trigger: 'blur' }], + contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }] + }, + contractorList: [], + userList: [], + userTypeList: props.types + }) + + // 页面加载时 + onMounted(() => { + + }) + // 打开弹窗 + const open = (type: string, data: object) => { + state.isShowDialog = true; + getDataList() + getUserList() + if (type === 'add') { + state.title = '新增上报'; + state.form = { + uuid: '', + userType: null, + userId: '', + contractorId: '', + deleted: '0' + } + }else{ + state.title = '重新上报'; + state.form = { + uuid: data.uuid, + userType: data.userType, + contractorId: data.contractorId, + userId: data.userId, + deleted: '0' + } + } + }; + + const getDataList = async ()=>{ + const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999}) + if(res.data.code == 200){ + state.contractorList = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + const getUserList = async ()=>{ + const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999}) + if(res.data.code == 200){ + state.userList = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 新增修改 + const onSubmit = async () => { + formRef.value.validate(async (valid:Boolean) => { + if(valid){ + const res = await contractorApi().addKeyUserInfo([state.form]) + if(res.data.code == 200){ + ElMessage({ + type:'success', + message:'数据上报成功' + }) + state.isShowDialog = false + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } + context.emit('refresh'); + }else{ + ElMessage({ + type:'warning', + message:'请完善基本信息' + }) + } + }) + } + + + return { + formRef, + addFormRef, + open, + onSubmit, + ...toRefs(state) + }; + } +}); +</script> diff --git a/src/views/dataUpload/contractorManage/keyUserInfo/index.vue b/src/views/dataUpload/contractorManage/keyUserInfo/index.vue new file mode 100644 index 0000000..2b20207 --- /dev/null +++ b/src/views/dataUpload/contractorManage/keyUserInfo/index.vue @@ -0,0 +1,257 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button> + </el-col> + </el-row> + <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column> + <el-table-column prop="contractorId" label="承包商id" show-overflow-tooltip></el-table-column> + <el-table-column prop="userName" label="人员名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="userType" label="人员类型" show-overflow-tooltip> + <template #default="scope"> + {{userTypeList.find(i=>i.value == scope.row.userType)?.name}} + </template> + </el-table-column> + <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column> + <el-table-column label="操作" width="140"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button> + <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> + </div> + </div> + </div> + </div> + <add-report ref="reportRef" :types="userTypeList" @refresh="getData"></add-report> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue' +import { ElMessageBox, ElMessage } from 'element-plus' +import { Plus } from '@element-plus/icons-vue' +import addReport from "./components/addReport.vue" +import {contractorApi} from "/@/api/dataUpload/contractorManage"; +import Cookies from "js-cookie"; +import axios from "axios"; +interface TableDataState { + reportData: [], + listQuery: { + pageIndex: number + pageSize: number + } + total: null | number + userList: [] + userTypeList: Array<any> +} + +export default defineComponent({ + name: 'projectInfo', + components: {addReport }, + setup() { + const reportRef= ref(); + const state = reactive<TableDataState>({ + reportData: [], + listQuery: { + pageIndex: 1, + pageSize: 10 + }, + total: null, + userList: [], + userTypeList: [ + { + name: '主要负责人', + value: 1 + }, + { + name: '安全管理人员', + value: 2 + }, + { + name: '特殊作业人员', + value: 3 + } + ] + }); + + // 页面加载时 + onMounted(async() => { + await getData() + await getUserList() + }); + + const getData = async ()=>{ + const res = await contractorApi().getKeyUserInfoList(state.listQuery) + if(res.data.code == 200){ + state.reportData = res.data.data + state.total = res.data.total + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + const openDialog=(type:string,data:object)=>{ + reportRef.value.open(type,data) + } + + const getUserList = async ()=>{ + const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999}) + if(res.data.code == 200){ + state.userList = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 删除用户 + const onRowDel = (row: Object) => { + ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + const res = await contractorApi().delKeyUserInfo({ids: [row.id]}) + if(res.data.code == 200){ + ElMessage({ + type: 'success', + message: '删除成功' + }) + await getData() + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + }) + .catch(() => {}); + }; + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.listQuery.pageSize = val; + getData() + }; + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.listQuery.pageIndex = val; + getData() + }; + + const viewPdf=(item: Object)=>{ + console.log(item.filePath,555) + window.open(item.filePath) + } + + return { + reportRef, + openDialog, + getData, + viewPdf, + onRowDel, + onHandleSizeChange, + onHandleCurrentChange, + ...toRefs(state) + }; + } +}); +</script> +<style lang="scss" scoped> +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } + .el-card { + border: 0; + } +} +</style> diff --git a/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue new file mode 100644 index 0000000..963eccb --- /dev/null +++ b/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue @@ -0,0 +1,323 @@ +<template> + <div class="system-add-user-container"> + <el-dialog :title="title" v-model="isShowDialog" width="50%"> + <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="项目名称" prop="projectName"> + <el-input v-model.trim="form.projectName" placeholder="项目名称" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="承包商" prop="contractorId"> + <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable> + <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="资质文件" prop="qualificationList"> + <el-button type="primary" style="margin-bottom: 10px" @click="addFile">新增</el-button> + <el-table :data="form.qualificationList" style="width: 100%" border> + <el-table-column prop="qulificationName" label="资质名称"></el-table-column> + <el-table-column prop="filePath" label="资质文件"></el-table-column> + <el-table-column fixed="right" label="操作"> + <template #default="scope"> + <el-button @click="delFile(scope.$index)" type="text" size="small">删除</el-button> + </template> + </el-table-column> + </el-table> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true"> + <el-form-item label="删除状态" prop="deleted"> + <el-radio-group v-model="form.deleted"> + <el-radio label="0">未删除</el-radio> + <el-radio label="1">已删除</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button> + <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button> + </span> + </template> + <el-dialog v-model="addVisible" @open="startAdd" width="30%"> + <el-form :model="addForm" label-width="170px" ref="addFormRef" :rules="addFormRules"> + <el-row :gutter="20"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="资质名称" prop="qulificationName"> + <el-input + v-model="addForm.qulificationName" + placeholder="请输入资质名称" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="资质文件" prop="filePath"> + <el-upload accept=".pdf" multiple :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> + <el-button size="small" type="primary">点击上传</el-button> + <div slot="tip" class="el-upload__tip">支持上传pdf,尺寸小于5M,最多可上传1份</div> +<!-- <template #tip>--> +<!-- <div class="el-upload__tip">上传图片尺寸小于4M,最多可上传1张</div>--> +<!-- </template>--> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="confirmAdd(addFormRef)">新增</el-button> + </span> + </template> + </el-dialog> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue'; +import {ElMessageBox, ElMessage, FormRules, FormInstance} from 'element-plus'; +import axios from "axios"; +import {contractorApi} from "/@/api/dataUpload/contractorManage"; +import Cookies from "js-cookie"; + +// 定义接口来定义对象的类型 +interface DataState { + title: string + isShowDialog: boolean + form: { + uuid: string + projectName: string + contractorId: string + qualificationList: Array<any> + deleted: string + } + rules:{} + addVisible: boolean + fileList: [], + uploadUrl: string, + header: {}, + imgDialog: boolean, + imageUrl: string + addForm: {} + contractorList: [] +} + +export default defineComponent({ + name: 'reportDialog', + setup(props, context) { + const formRef = ref() + const addFormRef = ref() + const checkList = (rule: any, value: any, callback: any) => { + if(state.form.qualificationList.length == 0){ + callback(new Error("请完善资质信息")) + } else { + callback(); + } + } + const state = reactive<DataState>({ + title: '', + isShowDialog: false, + form: { + uuid: '', + projectName: '', + contractorId: '', + qualificationList: [], + deleted: '0' + }, + rules:{ + projectName: [{ required: true, message: '请填写项目名称', trigger: 'blur' }], + contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }], + qualificationList: [{ required: true,validator: checkList, trigger: 'blur' }] + }, + contractorList: [], + addVisible: false, + fileList: [], + uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload', + header: { + uid: Cookies.get('uid'), + Authorization: Cookies.get('token') + }, + imgDialog: false, + imageUrl: '', + addForm: { + qulificationName: '', + filePath: '' + } + }) + + const checkFile = (rule: any, value: any, callback: any) => { + if(state.fileList.length == 0){ + callback(new Error("请上传附件")) + } else { + callback(); + } + } + + const addFormRules = reactive<FormRules>({ + qulificationName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + filePath: [{ required: true,validator: checkFile, trigger: 'blur' }] + }) + // 页面加载时 + onMounted(() => { + + }) + // 打开弹窗 + const open = (type: string, data: object) => { + state.isShowDialog = true; + getDataList() + if (type === 'add') { + state.title = '新增上报'; + state.form = { + uuid: '', + projectName: '', + contractorId: '', + qualificationList: [], + deleted: '0' + } + }else{ + state.title = '重新上报'; + state.form = { + uuid: data.uuid, + projectName: data.projectName, + contractorId: data.contractorId, + qualificationList: data.qualificationList, + deleted: '0' + } + } + }; + + const getDataList = async ()=>{ + const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999}) + if(res.data.code == 200){ + state.contractorList = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 新增修改 + const onSubmit = async () => { + formRef.value.validate(async (valid:Boolean) => { + if(valid){ + const res = await contractorApi().addProjectInfo([state.form]) + if(res.data.code == 200){ + ElMessage({ + type:'success', + message:'数据上报成功' + }) + state.isShowDialog = false + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } + context.emit('refresh'); + }else{ + ElMessage({ + type:'warning', + message:'请完善基本信息' + }) + } + }) + } + + const delFile = (index:number)=>{ + state.form.qualificationList.splice(index,1) + } + + const addFile = ()=>{ + state.addVisible = true + } + + const startAdd =()=>{ + state.addForm={ + qulificationName: '', + filePath: '', + } + state.fileList = [] + } + + const confirmAdd=async (formEl: FormInstance | undefined)=>{ + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + state.form.qualificationList.push(state.addForm) + state.addVisible = false + } else { + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + // 图片上传 + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + const picSize = async(rawFile: any) => { + if(rawFile.size / 1024 / 1024 > 5){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M' + }); + return false + } + } + + const handleAvatarSuccess = (res:any, uploadFile: any) => { + if(res){ + uploadFile.name = res + state.addForm.filePath = res + }else{ + ElMessage({ + type: 'warning', + message: '文件上传失败' + }) + } + } + + const handlePictureCardPreview = (uploadFile) => { + state.imageUrl = uploadFile.url + state.imgDialog = true; + } + + const handleRemove = (file, uploadFiles,type) => { + state.fileList = uploadFiles + } + + return { + formRef, + addFormRef, + addFormRules, + delFile, + startAdd, + showTip, + picSize, + addFile, + confirmAdd, + handleAvatarSuccess, + handlePictureCardPreview, + handleRemove, + open, + onSubmit, + ...toRefs(state) + }; + } +}); +</script> diff --git a/src/views/dataUpload/contractorManage/projectInfo/index.vue b/src/views/dataUpload/contractorManage/projectInfo/index.vue new file mode 100644 index 0000000..1905558 --- /dev/null +++ b/src/views/dataUpload/contractorManage/projectInfo/index.vue @@ -0,0 +1,234 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button> + </el-col> + </el-row> + <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column> + <el-table-column prop="projectName" label="项目名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="contractorId" label="承包商id" show-overflow-tooltip></el-table-column> + <el-table-column prop="qualificationList" label="当前项目承包商提供资质" show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" v-for="(item,index) in scope.row.qualificationList" @click="viewPdf(item)">{{item.qulificationName }}</el-button> + </template> + </el-table-column> +<!-- <el-table-column prop="qulificationName" label="资质名称" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="contractorType" label="资质文件" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="Deleted" label="删除状态" show-overflow-tooltip>--> +<!-- <template #default="scope">--> +<!-- {{scope.row.Deleted == 0?'未删除':scope.row.Deleted == 1?'已删除':'--'}}--> +<!-- </template>--> +<!-- </el-table-column>--> + <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column> + <el-table-column label="操作" width="140"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button> + <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> + </div> + </div> + </div> + </div> + <add-report ref="reportRef" @refresh="getData"></add-report> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue' +import { ElMessageBox, ElMessage } from 'element-plus' +import { Plus } from '@element-plus/icons-vue' +import addReport from "./components/addReport.vue" +import {contractorApi} from "/@/api/dataUpload/contractorManage"; +import Cookies from "js-cookie"; +import axios from "axios"; +interface TableDataState { + reportData: [], + listQuery: { + pageIndex: number + pageSize: number + } + total: null | number +} + +export default defineComponent({ + name: 'projectInfo', + components: {addReport }, + setup() { + const reportRef= ref(); + const state = reactive<TableDataState>({ + reportData: [], + listQuery: { + pageIndex: 1, + pageSize: 10 + }, + total: null + }); + + // 页面加载时 + onMounted(() => { + getData() + }); + + const getData = async ()=>{ + const res = await contractorApi().getProjectInfoList(state.listQuery) + if(res.data.code == 200){ + state.reportData = res.data.data + state.total = res.data.total + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + const openDialog=(type:string,data:object)=>{ + reportRef.value.open(type,data) + } + + // 删除用户 + const onRowDel = (row: Object) => { + ElMessageBox.confirm(`此操作将永久删除:“${row.projectName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + const res = await contractorApi().delProjectInfo({ids: [row.id]}) + if(res.data.code == 200){ + ElMessage({ + type: 'success', + message: '删除成功' + }) + await getData() + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + }) + .catch(() => {}); + }; + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.listQuery.pageSize = val; + getData() + }; + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.listQuery.pageIndex = val; + getData() + }; + + const viewPdf=(item: Object)=>{ + console.log(item.filePath,555) + window.open(item.filePath) + } + + return { + reportRef, + openDialog, + getData, + viewPdf, + onRowDel, + onHandleSizeChange, + onHandleCurrentChange, + ...toRefs(state) + }; + } +}); +</script> +<style lang="scss" scoped> +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } + .el-card { + border: 0; + } +} +</style> diff --git a/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue new file mode 100644 index 0000000..6180fec --- /dev/null +++ b/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue @@ -0,0 +1,290 @@ +<template> + <div class="system-add-user-container"> + <el-dialog :title="title" v-model="isShowDialog" width="50%"> + <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="证书名称" prop="certName"> + <el-input v-model.trim="form.certName" type="text" placeholder="证书名称" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="证书编号" prop="certNo"> + <el-input v-model.trim="form.certNo" type="text" placeholder="证书编号" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="发证机构" prop="issuingInstituion"> + <el-input v-model.trim="form.issuingInstituion" type="text" placeholder="证书名称" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="发证日期" prop="issuingTime"> + <el-date-picker v-model="form.issuingTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="有效期" prop="effectiveTime"> + <el-date-picker v-model="form.effectiveTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="复审日期" prop="reviewTime"> + <el-date-picker v-model="form.reviewTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="承包商重点人员" prop="keyPersonnelId"> + <el-select v-model="form.keyPersonnelId" filterable placeholder="请选择重点人员" clearable> + <el-option v-for="(item,index) in contractorUserList" :key="index" :label="item.userName" :value="item.uuid"/> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="证书照片路径" prop="filePath"> + <el-upload accept="image/*" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> + <el-button type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip">仅支持上传图片文件,尺寸小于5M,最多可上传1张</div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true"> + <el-form-item label="删除状态" prop="deleted"> + <el-radio-group v-model="form.deleted"> + <el-radio label="0">未删除</el-radio> + <el-radio label="1">已删除</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button> + <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import axios from "axios"; +import {workApplyApi} from "/@/api/specialWorkSystem/workApply"; +import {userApi} from '/@/api/systemManage/user' +import Cookies from "js-cookie"; +import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport"; +import {contractorApi} from "/@/api/dataUpload/contractorManage"; + +// 定义接口来定义对象的类型 +interface DataState { + title: string; + isShowDialog: boolean; + form: { + uuid: string + certName: string + certNo: string + issuingInstituion: string + issuingTime: string + effectiveTime: string + reviewTime: string + keyPersonnelId: string + filePath: string + deleted: string + } + rules:{}, + fileList: [], + contractorUserList: [] + uploadUrl: string, + header: {} +} + +export default defineComponent({ + name: 'reportDialog', + setup(props, context) { + const formRef = ref() + const checkFile = (rule: any, value: any, callback: any) => { + if(state.fileList.length == 0){ + callback(new Error("请上传证书照片")) + } else { + callback(); + } + } + const state = reactive<DataState>({ + title: '', + isShowDialog: false, + form: { + uuid: '', + certName: '', + certNo: '', + issuingInstituion: '', + issuingTime: '', + effectiveTime: '', + reviewTime: '', + keyPersonnelId: '', + filePath: '', + deleted: '0' + }, + rules:{ + certName: [{ required: true, message: '请选择证书名称', trigger: 'blur'}], + certNo: [{ required: true, message: '请填写证书编号', trigger: 'blur'}], + issuingInstituion: [{ required: true, message: '请填写发证机构', trigger: 'blur'}], + issuingTime: [{ required: true, message: '请选择发证日期', trigger: 'blur'}], + effectiveTime: [{ required: true, message: '请选择有效期', trigger: 'blur'}], + reviewTime: [{ required: true, message: '请选择复审期', trigger: 'blur'}], + keyPersonnelId: [{ required: true, message: '请选择重点人员', trigger: 'blur'}], + filePath: [{ required: true,validator: checkFile, trigger: 'blur' }] + }, + fileList: [], + contractorUserList: [], + uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload', + header: { + uid: Cookies.get('uid'), + Authorization: Cookies.get('token') + } + }) + + // 页面加载时 + onMounted(() => { + + }) + // 打开弹窗 + const open = (type: string, data: object) => { + state.isShowDialog = true + getUserList() + if (type === 'add') { + state.title = '新增上报' + state.form = { + uuid: '', + certName: '', + certNo: '', + issuingInstituion: '', + issuingTime: '', + effectiveTime: '', + reviewTime: '', + keyPersonnelId: '', + filePath: '', + deleted: '0' + } + state.fileList = [] + }else{ + state.title = '重新上报'; + Object.keys(state.form).forEach(key => { + if (Object.prototype.hasOwnProperty.call(data,key)) { + state.form[key] = JSON.parse(JSON.stringify(data))[key]; + } + }) + if(data.files !== ''){ + state.fileList = state.form.filePath.split(',').map((i,index) => { + return { + url: i, + name: '文件' + (index+1) + } + }) + }else{ + state.fileList = [] + } + // state.form = { + // type: 1, + // uuid: data.uuid, + // name: '', + // remarks: '', + // evaluateTime: '', + // files: '', + // deleted: '0' + // } + } + }; + + const getUserList = async ()=>{ + const res = await contractorApi().getKeyUserInfoList({pageIndex: 1, pageSize: 999}) + if(res.data.code == 200){ + state.contractorUserList = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 图片上传 + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + const picSize = async(rawFile: any) => { + if(rawFile.size / 1024 / 1024 > 5){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M' + }); + return false + } + } + + const handleAvatarSuccess = (res:any, uploadFile: any) => { + if(res){ + uploadFile.name = res + state.form.filePath = res + console.log(state.fileList,'list') + }else{ + ElMessage({ + type: 'warning', + message: '文件上传失败' + }) + } + } + + const handleRemove = (file, uploadFiles,type) => { + state.form.files = '' + } + + // 新增修改 + const onSubmit = async () => { + formRef.value.validate(async (valid:Boolean) => { + if(valid){ + const res = await contractorApi().addUserCertInfo([state.form]) + if(res.data.code == '200'){ + ElMessage({ + type:'success', + message:'数据上报成功' + }) + state.isShowDialog = false + state.fileList = [] + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } + context.emit('refresh'); + }else{ + ElMessage({ + type:'warning', + message:'请完善基本信息' + }) + } + }) + } + + return { + formRef, + showTip, + picSize, + handleAvatarSuccess, + handleRemove, + open, + onSubmit, + ...toRefs(state) + }; + } +}); +</script> diff --git a/src/views/dataUpload/contractorManage/userCertInfo/index.vue b/src/views/dataUpload/contractorManage/userCertInfo/index.vue new file mode 100644 index 0000000..fb670f6 --- /dev/null +++ b/src/views/dataUpload/contractorManage/userCertInfo/index.vue @@ -0,0 +1,256 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button> + </el-col> + </el-row> + <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column> + <el-table-column prop="certName" label="证书名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="certNo" label="证书编号" show-overflow-tooltip></el-table-column> + <el-table-column prop="issuingInstituion" label="发证机构" show-overflow-tooltip></el-table-column> + <el-table-column prop="issuingTime" label="发证日期" show-overflow-tooltip></el-table-column> + <el-table-column prop="effectiveTime" label="有效期" show-overflow-tooltip></el-table-column> + <el-table-column prop="reviewTime" label="复审日期" show-overflow-tooltip></el-table-column> + <el-table-column prop="keyPersonnelId" label="重点人员信息id" show-overflow-tooltip></el-table-column> + <el-table-column prop="filePath" label="证书" show-overflow-tooltip> + <template #default="scope"> + <el-button v-if="scope.row.filePath !== ''" size="small" text type="primary" @click="openFile(scope.row.filePath)">查看</el-button> + </template> + </el-table-column> + <el-table-column label="操作" width="140"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button> + <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> + </div> + </div> + </div> + </div> + <add-report ref="reportRef" @refresh="getData"></add-report> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue' +import { ElMessageBox, ElMessage } from 'element-plus' +import { Plus } from '@element-plus/icons-vue' +import addReport from "./components/addReport.vue" +import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport"; +import axios from "axios"; +import Cookies from "js-cookie"; +import {contractorApi} from "/@/api/dataUpload/contractorManage"; + +// 定义接口来定义对象的类型 +interface TableDataRow { + id: number|null + reportTime: string + name: string + remarks: string + evaluateTime: string + files: string +} +interface TableDataState { + reportData: [], + listQuery: { + searchParams: {} + pageIndex: number + pageSize: number + } + total: null | number +} + +export default defineComponent({ + name: 'judgeReport', + components: {addReport }, + setup() { + const reportRef= ref(); + const state = reactive<TableDataState>({ + reportData: [], + listQuery: { + searchParams: {}, + pageIndex: 1, + pageSize: 10 + }, + total: null + }); + + // 页面加载时 + onMounted(() => { + getData() + }); + + const getData = async ()=>{ + const res = await contractorApi().getUserCertInfoList(state.listQuery) + if(res.data.code == 200){ + state.reportData = res.data.data + state.total = res.data.total + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + const openDialog=(type:string,data:object)=>{ + reportRef.value.open(type,data) + } + + const openFile=(file: string)=>{ + // axios.get(file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ + // if (res) { + // const link = document.createElement('a') + // let blob = new Blob([res.data],{type: 'application/pdf'}) + // link.style.display = "none"; + // link.href = URL.createObjectURL(blob); // 创建URL + // window.open(link.href) + // } else { + // ElMessage({ + // type: 'warning', + // message: '文件读取失败' + // }); + // } + // }) + window.open(file) + } + + // 删除用户 + const onRowDel = (row: TableDataRow) => { + ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + const res = await contractorApi().delUserCertInfo({ids: [row.id]}) + if(res.data.code == '200'){ + ElMessage({ + type: 'success', + message: '删除成功' + }) + await getData() + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + }) + .catch(() => {}); + }; + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.listQuery.pageSize = val; + getData() + }; + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.listQuery.pageIndex = val; + getData() + }; + + return { + reportRef, + openFile, + openDialog, + getData, + onRowDel, + onHandleSizeChange, + onHandleCurrentChange, + ...toRefs(state) + }; + } +}); +</script> +<style lang="scss" scoped> +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } + .el-card { + border: 0; + } +} +</style> diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue index 5a1e9ca..39ec524 100644 --- a/src/views/loginPage/component/accountLogin.vue +++ b/src/views/loginPage/component/accountLogin.vue @@ -200,7 +200,9 @@ const onSignIn = async () => { state.loading.signIn = true; // 存储 token 到浏览器缓存 - let res = await useLoginApi().signIn(state.ruleForm); + const data = JSON.parse(JSON.stringify(state.ruleForm)) + data.password = Base64.encode(data.password) + let res = await useLoginApi().signIn(data); if (res.data.code === '200') { await userInfo.setUserInfos(res.data.data); Cookies.set('token', res.data.data.accessToken); @@ -210,6 +212,7 @@ // Session.set('token', res.data.data.accessToken); // Session.set('projectId', ''); // Session.set('uid', res.data.data.uid); + console.log(state.ruleForm,'form') if (state.saveCode) { localStorage.setItem('userCode', state.ruleForm.username) localStorage.setItem('userPassword', Base64.encode(state.ruleForm.password),) diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue index 96e8cd6..92339f7 100644 --- a/src/views/newHome/index.vue +++ b/src/views/newHome/index.vue @@ -368,13 +368,12 @@ const resolvedRoute = router.resolve(routePath); const fullPath = resolvedRoute.href window.open(fullPath, '_blank'); - // window.open(fullPath, '_blank'); // window.open('http://39.104.85.193:8585/'); }; const toDoublePrevent = () => { - window.open('http://117.190.40.54:6801/login'); + window.open('http://8.137.115.153:6801/login'); }; const toSmartFactory = () =>{ window.open('http://117.190.40.54:5522/#/login'); diff --git a/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue b/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue index bd13c15..0088649 100644 --- a/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue @@ -136,10 +136,10 @@ startTime: state.startTime1, endTime:state.endTime } - let res = await workApplyApi().getSbtjPie(data); + let res = await workApplyApi().getSbtjPie(data) if (res.data.code === '200') { if(res.data.data && res.data.data.length>0){ - const pieData = res.data.data.map(({workTypeDesc,count})=>({ name: workTypeDesc,value: count})) + const pieData = res.data.data.map(({workTypeDesc,count})=>({ name: workTypeDesc,value: count})).filter(i=>i.name !== '未知') initZyfb(pieData) } else{ diff --git a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue index 10d99b1..8764d1a 100644 --- a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue @@ -10,7 +10,7 @@ </div> <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px"> <span>负责人:</span> - <el-input v-model="searPara.headUserName" placeholder="负责人"/> + <el-input v-model.trim="searPara.headUserName" placeholder="负责人"/> </div> <div class="basic-line"> <span>事业部:</span> @@ -37,7 +37,7 @@ <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px"> <span>作业票编号:</span> <el-input - v-model="searPara.workPermitNo" + v-model.trim="searPara.workPermitNo" placeholder="请输入作业票编号" /> </div> @@ -113,6 +113,7 @@ <template #default="scope"> <!-- <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">作废</el-button>--> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button v-if="(scope.row.working?.workAllStatus == 3 || scope.row.working?.workAllStatus == 4 || scope.row.working?.workAllStatus == 5)&&!scope.row.renewalWorkApplyId" link type="primary" size="small" :icon="Edit" @click="continueRecord(scope.row)">一键续票</el-button> <!-- <el-button link type="success" size="small" :icon="Finished">修改</el-button>--> <!-- <el-button link type="success" size="small" :icon="Download">正式办票</el-button>--> <el-button link type="primary" size="small" :icon="Download" @click="downLoadRecord(scope.row)">作业票预览</el-button> @@ -220,6 +221,15 @@ </span> </template> </el-dialog> + <fire-dialog ref="fireRef" :lists="lists" @refresh="getListByPage"></fire-dialog> + <plate-dialog ref="plateRef" :lists="lists" @refresh="getListByPage"></plate-dialog> + <space-dialog ref="spaceRef" :lists="lists" @refresh="getListByPage"></space-dialog> + <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getListByPage"></hoist-dialog> + <ground-dialog ref="groundRef" :lists="lists" @refresh="getListByPage"></ground-dialog> + <broken-dialog ref="brokenRef" :lists="lists" @refresh="getListByPage"></broken-dialog> + <height-dialog ref="heightRef" :lists="lists" @refresh="getListByPage"></height-dialog> + <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog> + <open-dialog ref="openRef" :lists="lists" @refresh="getListByPage"></open-dialog> <!-- <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>--> <!-- <span>您确定要导出该条记录吗?</span>--> <!-- <template #footer>--> @@ -310,6 +320,7 @@ dep4List: Array<type>; searPara: {} timeRange: Array<string>; + lists: {} } interface type { id: number; @@ -322,13 +333,31 @@ export default defineComponent({ name: 'applys', components: { - detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')) + detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')), + fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')), + plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')), + spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')), + hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')), + groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')), + brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')), + heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')), + powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')), + openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue')) }, setup() { const userInfo = useUserInfo(); const { userInfos } = storeToRefs(userInfo); const router = useRouter(); const state = reactive<stateType>({ + lists: { + workerList: [], + departList: [], + departList2: [], + deviceList: [], + otherWorks: [], + spList: [], + riskList: [] + }, pageIndex1: 1, pageSize1: 10, totalSize1: 0, @@ -364,17 +393,21 @@ {id:49,name:'电石事业部'}, {id:50,name:'电力事业部'}, {id:48,name:'有机化工事业部'}, - {id:32,name:'甲醇事业部'} + {id:32,name:'甲醇事业部'}, + {id:10,name:'后勤中心'}, + {id:41,name:'安全环保部'}, + {id:46,name:'供销中心'}, + {id:47,name:'技术中心'} ], workType: [ - { id: 1, name: '动火作业' }, - { id: 2, name: '受限空间作业' }, - { id: 3, name: '吊装作业' }, - { id: 4, name: '动土作业' }, - { id: 5, name: '断路作业' }, - { id: 6, name: '高处作业' }, - { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } ], statusList: [ { @@ -448,7 +481,26 @@ ], timeRange: [] }); - + const fireRef = ref() + const plateRef = ref() + const spaceRef = ref() + const hoistRef = ref() + const groundRef = ref() + const brokenRef = ref() + const heightRef = ref() + const powerRef = ref() + const openRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + spWorker() + getOpList() + getAll() + getAllDevice() + getAllRisks() + getOtherWork() + }); const giveTime = () => { if (state.timeRange && state.timeRange !== null) { state.searPara.startTime = state.timeRange[0]; @@ -458,6 +510,36 @@ state.searPara.endTime = ''; } }; + + const continueRecord = (row)=>{ + if(row.workType == 1){ + fireRef.value.openDialog(row,'continue') + } + if(row.workType == 2){ + spaceRef.value.openDialog(row,'continue') + } + if(row.workType == 3){ + hoistRef.value.openDialog(row,'continue') + } + if(row.workType == 4){ + groundRef.value.openDialog(row,'continue') + } + if(row.workType == 5){ + brokenRef.value.openDialog(row,'continue') + } + if(row.workType == 6){ + heightRef.value.openDialog(row,'continue') + } + if(row.workType == 7){ + powerRef.value.openDialog(row,'continue') + } + if(row.workType == 8){ + plateRef.value.openDialog(row,'continue') + } + if(row.workType == 9){ + openRef.value.openDialog(row,'continue') + } + } // 刷新 const reLoadData = async () => { @@ -480,6 +562,8 @@ if (res.data.code === '200') { state.departmentList = JSON.parse(JSON.stringify(res.data.data)) recursion(state.departmentList); + state.lists.departList = state.departmentList + state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47) } else { ElMessage({ type: 'warning', @@ -538,6 +622,107 @@ return nameList.join(); } }; + + const spWorker = async ()=>{ + for(let id of ['18','19']){ + const res = await workApplyApi().getSpList({roleId: id}) + if(id == '18'){ + if (res.data.code === '200') { + state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + if(id == '19'){ + if (res.data.code === '200') { + state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + } + } + + const getOpList = async()=>{ + const res = await workApplyApi().getOpList() + if(res.data.code == '200'){ + if(res.data.data && res.data.data.length>0){ + state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{ + if(i.certList && i.certList.length>0){ + i.certList = i.certList.map(item=>{ + item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')' + item['uid'] = item.certNo + ',' + item.certExpiredAt + return item + }) + } + return i + }) + } + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 获取用户列表 + const getAll = async ()=>{ + const res = await workApplyApi().getAllUsers() + if (res.data.code === '200') { + state.lists.workerList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取设备列表 + const getAllDevice = async ()=>{ + const res = await workApplyApi().getAllDevices() + if (res.data.code === '200') { + state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 获取设备列表 + const getAllRisks = async ()=>{ + const res = await workApplyApi().getAllRiskIdentity() + if (res.data.code === '200') { + // state.allDevices = JSON.parse(JSON.stringify(res.data.data)) + state.lists.riskList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const getOtherWork = async () => { + let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}}) + if (res.data.code === '200') { + state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; // 关键词查询记录 const searchRecord = async () => { @@ -610,7 +795,6 @@ // 导出方法 const downLoadRecord = (row: any) => { // let res = await workApplyApi().postPrinting(data); - console.log(row,555) axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{ id: row.id},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ if (res) { const link = document.createElement('a') @@ -654,12 +838,6 @@ await initBackEndControlRoutes(); }; - // 页面载入时执行方法 - onMounted(() => { - getListByPage(); - getAllDepartment() - }); - return { View, Edit, @@ -668,6 +846,16 @@ Plus, Finished, Download, + fireRef, + plateRef, + spaceRef, + hoistRef, + groundRef, + brokenRef, + heightRef, + powerRef, + openRef, + continueRecord, giveTime, reLoadData, toApply, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue index 616cc6b..e576f8e 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -18,15 +18,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -346,11 +346,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -369,11 +370,14 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string equipmentDialog: boolean, showDialog: boolean props1:{}, depProps:{}, depProps2:{}, + cas2Props:{} safetyMeasureBasicList: [], zyList: [] fileList: Array<file>, @@ -399,6 +403,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 5, @@ -453,6 +459,13 @@ emitPath: false, multiple: true }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' + }, fileList: [], imgLimit: 3, uploadUrl: '', @@ -493,17 +506,48 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -512,7 +556,15 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + console.log(row.operatorList,'list') + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) + console.log(state.form.operatorUids,'id') state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -541,6 +593,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -660,6 +722,37 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' + } + }) + } + const transform2Arr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { @@ -700,36 +793,63 @@ state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modBrokenApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - state.form.workDetail.bcPath = [] - state.fileList = [] - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',') - state.form.workDetail.bcPath = state.form.workDetail.bcPath.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modBrokenApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.bcPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',') + state.form.workDetail.bcPath = state.form.workDetail.bcPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalBrokenCircuit(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.bcPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',') + state.form.workDetail.bcPath = state.form.workDetail.bcPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -838,6 +958,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue index ce336ee..74e16e9 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue @@ -158,7 +158,10 @@ <div class="d-cont" v-else>{{details.workDepName}}</div> </div> <div class="d-row"> - <div class="d-tit">作业人</div><div class="d-cont">{{details.operatorList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join('、')}}</div> + <div class="d-tit">作业人</div> + <div class="d-cont"> + {{details.operatorList.map(i=>{return i.userName + '(' + i.phone + (i.certificate ? `,证书编号:${i.certificate}`:'') + ')'}).join('、')}} + </div> </div> <div class="d-row" v-if="details.involveOtherWork && details.involveOtherWork !== ''"> <div class="d-tit">关联其他作业</div><div class="d-cont">{{details.involveOtherWork}}</div> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue index 3d1d4bd..9c43bdb 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -97,15 +97,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -344,11 +344,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -365,6 +366,8 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string workLevelList: Array<any>, fireWorkList: Array<any>, equipmentDialog: boolean, @@ -373,6 +376,7 @@ zyList: [] props1:{} depProps:{} + cas2Props: {} safetyMeasureBasicList: [] } export default defineComponent({ @@ -388,6 +392,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 1, @@ -484,6 +490,13 @@ value: 'depId', emitPath: false }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' + }, depProps:{ expandTrigger: 'hover', label: 'depName', @@ -526,14 +539,45 @@ console.log('false loading') }) const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } - const openDialog = (row)=>{ + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -542,7 +586,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key] } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -570,6 +620,16 @@ state.form.workDetail.other = state.form.workDetail.methodList[i] state.form.workDetail.methodList[i] = '其他' } + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -621,6 +681,26 @@ // state.form.applyDepId = state.form.depIdList[state.form.depIdList.length - 1] // state.form.seDepId = state.form.depIdList[0] state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } } // 获取基础数据 @@ -680,9 +760,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -731,7 +811,8 @@ return item }) data.workDetail.workMethod = data.workDetail.methodList.join(',') - data.operatorUids = transform2Arr(data.operatorUids) + // data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) @@ -739,25 +820,46 @@ data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2EObj(data.lastApprover) - const res = await workApplyApi().modFireApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }) - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modFireApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }) + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalHot(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }) + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -806,6 +908,7 @@ submitForm, findParent, openWorkSelect, + singleSelect, getSelected, openDialog, workSelectRef, @@ -822,7 +925,6 @@ <style scoped lang="scss"> .home-container { width: 100%; - height: 100vh; overflow: hidden; overflow-y: scroll; &::-webkit-scrollbar{ diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue index bb0cce6..8c378d1 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -43,15 +43,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -329,14 +329,15 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> <el-dialog v-model="dialogVisible"> <img w-full :src="dialogImageUrl" alt="Preview Image" /> </el-dialog> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -353,11 +354,14 @@ import axios from "axios"; import {userApi} from "/@/api/systemManage/user"; interface stateType { - form: Object, + form: Object + isDisabled: boolean + title: string equipmentDialog: boolean, showDialog: boolean props1:{}, depProps:{}, + cas2Props: {} safetyMeasureBasicList: [], zyList: [] fileList: Array<file>, @@ -383,6 +387,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 4, @@ -426,6 +432,13 @@ checkStrictly: true, emitPath: false }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' + }, fileList: [], imgLimit: 3, uploadUrl: '', @@ -463,18 +476,49 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -483,7 +527,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -511,6 +561,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -627,13 +687,33 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + const transformArr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -671,41 +751,64 @@ return } } - // if(Array.isArray(state.form.involveOtherWork)){ - // state.form.involveOtherWork = state.form.involveOtherWork.join(',') - // } state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modGroundApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - state.form.workDetail.gbPath = [] - state.fileList = [] - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modGroundApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.gbPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalGroundBreaking(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.gbPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -845,6 +948,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue index e99ba6e..ac98510 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -76,15 +76,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -275,11 +275,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -296,11 +297,14 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string workLevelList: Array<any>, equipmentDialog: boolean, showDialog: boolean props1:{}, depProps:{}, + cas2Props:{} safetyMeasureBasicList: [] zyList: [] tabLoading: boolean @@ -318,6 +322,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 6, @@ -376,6 +382,13 @@ multiple: true, checkStrictly: true, emitPath: false + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' } }); const ruleFormRef = ref<FormInstance>() @@ -407,17 +420,48 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -426,7 +470,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -447,6 +497,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -561,6 +621,37 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' + } + }) + } + const transform2Arr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { @@ -599,32 +690,55 @@ // } state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modHeightApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modHeightApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalHight(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -673,6 +787,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue index 6ec322f..c3a6f9b 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -86,15 +86,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -340,11 +340,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -361,11 +362,14 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string workLevelList: Array<any> equipmentDialog: boolean showDialog: boolean props1:{} depProps:{} + cas2Props: {} zyList: [] safetyMeasureBasicList: [] tabLoading: boolean @@ -383,6 +387,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 3, @@ -440,6 +446,13 @@ multiple: true, checkStrictly: true, emitPath: false + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' } }); const ruleFormRef = ref<FormInstance>() @@ -474,17 +487,48 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -493,7 +537,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -515,6 +565,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -632,13 +692,33 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + const transformArr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -682,33 +762,57 @@ state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modHoistApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modHoistApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalHoisting(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -727,6 +831,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue index 8ead0fe..b0350df 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue @@ -22,7 +22,7 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险研判报告记录附件"> + <el-form-item label="风险研判报告记录附件" prop="judgePicturePath"> <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl"> <el-icon><Plus /></el-icon> <template #tip> @@ -43,7 +43,7 @@ <div class="d-row"> <div class="d-tit">jsa风险研判结论</div><div class="d-cont">{{detail.judgeRecord}}</div> </div> - <div class="d-row"> + <div class="d-row" v-if="detail.judgeJsaCode && detail.judgeJsaCode !== ''"> <div class="d-tit">报告编号</div><div class="d-cont">{{detail.judgeJsaCode}}</div> </div> <div class="d-row"> @@ -99,6 +99,13 @@ setup(props: any, context: any) { const jsaFormRef = ref(); const approveLevelDialogRef = ref(); + const checkFile = (rule: any, value: any, callback: any) => { + if(state.fileList.length == 0){ + callback(new Error("请上传附件")) + } else { + callback(); + } + } const state = reactive<dataState>({ title: '', disabled: true, @@ -110,7 +117,8 @@ judgePicturePath: [] }, jsaFormRules: { - judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }] + judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }], + judgePicturePath: [{ required: true,validator: checkFile, trigger: 'blur' }] }, fileList: [], imgLimit: 3, @@ -284,6 +292,7 @@ getReport, submitApproveRule, showReportDialog, + checkFile, handlePreview, getUploadUrl, upload, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue index fb45479..9550fbe 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -43,15 +43,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -302,24 +302,11 @@ </el-form-item> </el-col> </el-row> -<!-- <el-row>--> -<!-- <el-col :span="12">--> -<!-- <el-form-item label="最终审批人" prop="lastApprover">--> -<!-- <el-select v-model="form.lastApprover" filterable clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.workerList"--> -<!-- :key="item.uid"--> -<!-- :label="item.username"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <el-dialog v-model="qpVisible" @open="startAdd"> <el-form :model="qpForm" label-width="170px" ref="qpFormRef" :rules="qpFormRules"> @@ -371,7 +358,7 @@ <img w-full :src="dialogImageUrl" alt="Preview Image" /> </el-dialog> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -391,6 +378,8 @@ interface stateType { showDialog: boolean form: Object, + isDisabled: boolean + title: string qpForm: Object, equipmentDialog: boolean, qpVisible: boolean @@ -398,6 +387,7 @@ props1:{}, depProps:{}, casProps:{} + cas2Props:{} safetyMeasureBasicList: [], fileList: Array<file>, uploadUrl: string, @@ -423,6 +413,8 @@ qpVisible: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 9, @@ -474,6 +466,13 @@ multiple: true, checkStrictly: true, emitPath: false + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' }, casProps: { expandTrigger: 'hover', @@ -557,7 +556,7 @@ getBasicData() }); - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ state.zyList = props.lists.spList.opList getBasicData() Object.keys(state.form).forEach(key => { @@ -565,7 +564,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key] } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -599,6 +604,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -678,12 +693,43 @@ } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ @@ -737,13 +783,33 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + const transformArr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -765,25 +831,6 @@ certificate: '', certExpiredAt: '', certTypeName: '' - } - } - - const singleSelect=(value,type)=>{ - let selected = value - if(selected.length>1){ - const temp = [] - for(let i of selected){ - const index = temp.findIndex(item => item[0] === i[0]); - if (index !== -1) { - temp[index] = i - }else{ - temp.push(i) - } - } - if(type == '作业人'){state.form.operatorUids = temp} - if(type == '监护人'){state.form.guardianUids = temp} - if(type == '确认人'){state.form.safetyMeasureUids = temp} - if(type == '结束人'){state.form.startOrEndUids = temp} } } @@ -809,36 +856,63 @@ state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modOpenApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }) - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - state.form.workDetail.sketchMapPath = [] - state.fileList = [] - state.form.workDetail.qpDetailList = [] - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modOpenApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }) + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.sketchMapPath = [] + state.fileList = [] + state.form.workDetail.qpDetailList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalOpenJob(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }) + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.sketchMapPath = [] + state.fileList = [] + state.form.workDetail.qpDetailList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { ElMessage({ diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue index 16ee8a3..653ebfc 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -181,15 +181,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -383,11 +383,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -406,11 +407,14 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string workLevelList: Array<any>, equipmentDialog: boolean, showDialog: boolean, props1:{}, depProps:{}, + cas2Props:{} safetyMeasureBasicList: [], zyList: [] fileList: Array<file>, @@ -434,6 +438,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 8, @@ -495,6 +501,13 @@ checkStrictly: true, emitPath: false }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' + }, fileList: [], imgLimit: 3, uploadUrl: '', @@ -538,18 +551,49 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -558,7 +602,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -574,7 +624,6 @@ })) state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - // state.form.lastApprover = row.lastApprover.userId state.fileList = row.workDetail.bpLocationMapPath.split(',').map(item => { return { url: item, @@ -582,11 +631,20 @@ } }) state.form.workDetail.bpLocationMapPath = row.workDetail.bpLocationMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) - console.log(state.fileList,state.form.workDetail.bpLocationMapPath,'854') if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -701,13 +759,33 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + const transformArr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -751,35 +829,61 @@ state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modPlateApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - state.form.workDetail.bpLocationMapPath = [] - state.fileList = [] - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modPlateApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.bpLocationMapPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalBlindPlatePlugging(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.bpLocationMapPath = [] + state.fileList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -884,6 +988,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue index 437d685..67ac77e 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -100,15 +100,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -355,11 +355,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -376,10 +377,13 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string equipmentDialog: boolean, showDialog: boolean props1:{}, depProps:{}, + cas2Props:{} safetyMeasureBasicList: [] zyList: [] tabLoading: boolean @@ -397,6 +401,8 @@ showDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 7, @@ -441,6 +447,13 @@ multiple: true, checkStrictly: true, emitPath: false + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' } }) const ruleFormRef = ref<FormInstance>() @@ -476,18 +489,50 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() + console.log(state.form.operatorUids,'ops1') state.zyList = props.lists.spList.opList getBasicData() Object.keys(state.form).forEach(key => { @@ -495,7 +540,15 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + console.log(row.operatorList,'list') + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) + console.log(state.form.operatorUids,'ops2') state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -517,6 +570,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -635,6 +698,37 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' + } + }) + } + const transform2Arr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { @@ -674,7 +768,7 @@ state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) @@ -682,26 +776,50 @@ data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modPowerApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modPowerApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalTemporaryPower(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -720,6 +838,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue index d5e9798..c810af8 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue @@ -1,7 +1,7 @@ <template> - <div class="home-container"> - <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false"> - <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> +<!-- <div class="home-container">--> + <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef"> <div class="homeCard"> <el-row> <el-col :span="12"> @@ -77,15 +77,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -294,11 +294,12 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</el-button> + <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </el-dialog> - </div> +<!-- </div>--> </template> <script lang="ts"> @@ -315,10 +316,13 @@ import {userApi} from "/@/api/systemManage/user"; interface stateType { form: Object, + isDisabled: boolean + title: string equipmentDialog: boolean, showDialog: boolean props1:{}, depProps:{}, + cas2Props: {} safetyMeasureBasicList: [] zyList: [] tabLoading: boolean @@ -336,6 +340,8 @@ equipmentDialog: false, safetyMeasureBasicList: [], zyList: [], + isDisabled: false, + title: '修改', form: { id: null, workType: 2, @@ -378,7 +384,14 @@ multiple: true, checkStrictly: true, emitPath: false - } + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' + }, }); const ruleFormRef = ref<FormInstance>() const applyRules = reactive<FormRules>({ @@ -412,18 +425,49 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } const getWorkerList = ()=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null + } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected } - const openDialog = (row)=>{ + const openDialog = (row,type)=>{ clearFile() state.zyList = props.lists.spList.opList getBasicData() @@ -432,7 +476,13 @@ state.form[key] = JSON.parse(JSON.stringify(row))[key]; } }) - state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.operatorUids = row.operatorList.map(i=>{ + if(i.certExpiredAt && i.certExpiredAt !==''){ + return [i.userId,i.certificate + ',' + i.certExpiredAt] + }else{ + return [i.userId] + } + }) state.form.headUids = row.headList.map(i=>i.userId) state.form.analystUids = row.analystList.map(i=>i.userId) state.form.guardianUids = row.guardianList.map(i=>i.userId) @@ -453,6 +503,16 @@ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ state.form.workDepIds.push(row.workDepId) + } + if(type == 'edit'){ + state.isDisabled = false + state.title = '修改' + }else{ + if(!state.form.id){ + state.form.id = row.workApplyId + } + state.isDisabled = true + state.title = '续票' } getWorkerList() state.showDialog = true @@ -554,6 +614,37 @@ return index === 0; } + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} + // if(type == '分析人'){state.form.analystUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' + } + }) + } + const transform2Arr = (arr: Array<any>)=>{ return arr.map((i)=>{ return { @@ -592,7 +683,7 @@ // } state.form.riskIdentification = state.form.riskIdentification.join(',') const {...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) @@ -600,25 +691,48 @@ data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) - const res = await workApplyApi().modSpaceApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - state.form.guardianUids = [] - state.form.involveOtherWork = [] - getBasicData() - clearFile() - context.emit('refresh') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - // state.form.involveOtherWork = state.form.involveOtherWork.split(',') - state.form.riskIdentification = state.form.riskIdentification.split(',') + if(state.title == '修改'){ + const res = await workApplyApi().modSpaceApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + }else{ + const res = await workApplyApi().renewalConfinedspace(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '续票成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } } } else { console.log('error submit!', fields) @@ -637,6 +751,7 @@ await initBackEndControlRoutes(); }; return { + singleSelect, renderMenu, getBasicData, getWorkerList, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue index 50bcae1..e036b00 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -376,6 +376,7 @@ getListByPage(); getAllDepartment() spWorker() + getOpList() getAll() getAllDevice() getAllRisks() @@ -384,47 +385,37 @@ const openEdit = (row)=>{ if(row.workType == 1){ - fireRef.value.openDialog(row) + fireRef.value.openDialog(row,'edit') } if(row.workType == 2){ - spaceRef.value.openDialog(row) + spaceRef.value.openDialog(row,'edit') } if(row.workType == 3){ - hoistRef.value.openDialog(row) + hoistRef.value.openDialog(row,'edit') } if(row.workType == 4){ - groundRef.value.openDialog(row) + groundRef.value.openDialog(row,'edit') } if(row.workType == 5){ - brokenRef.value.openDialog(row) + brokenRef.value.openDialog(row,'edit') } if(row.workType == 6){ - heightRef.value.openDialog(row) + heightRef.value.openDialog(row,'edit') } if(row.workType == 7){ - powerRef.value.openDialog(row) + powerRef.value.openDialog(row,'edit') } if(row.workType == 8){ - plateRef.value.openDialog(row) + plateRef.value.openDialog(row,'edit') } if(row.workType == 9){ - openRef.value.openDialog(row) + openRef.value.openDialog(row,'edit') } } const spWorker = async ()=>{ - for(let id of ['17','18','19']){ + for(let id of ['18','19']){ const res = await workApplyApi().getSpList({roleId: id}) - if(id == '17'){ - if (res.data.code === '200') { - state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)) - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } if(id == '18'){ if (res.data.code === '200') { state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data)) @@ -445,6 +436,29 @@ }); } } + } + } + + const getOpList = async()=>{ + const res = await workApplyApi().getOpList() + if(res.data.code == '200'){ + if(res.data.data && res.data.data.length>0){ + state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{ + if(i.certList && i.certList.length>0){ + i.certList = i.certList.map(item=>{ + item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')' + item['uid'] = item.certNo + ',' + item.certExpiredAt + return item + }) + } + return i + }) + } + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) } } @@ -520,7 +534,7 @@ state.departmentList = JSON.parse(JSON.stringify(res.data.data)) recursion(state.departmentList); state.lists.departList = JSON.parse(JSON.stringify(res.data.data)) - state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50) + state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47) } else { ElMessage({ type: 'warning', @@ -529,7 +543,7 @@ } }; const getOtherWork = async () => { - let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null}); + let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}}) if (res.data.code === '200') { state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data)) } else { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue index 27b96a1..104bca7 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue @@ -17,15 +17,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -483,35 +483,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -612,13 +588,44 @@ const openWorkSelect = ()=>{ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected @@ -685,9 +692,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -751,7 +758,7 @@ state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue index f9288e6..e28aa17 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -90,15 +90,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -345,7 +345,7 @@ </template> <script lang="ts"> - import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUpdated } from 'vue'; +import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUpdated, nextTick} from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import {useUserInfo} from "/@/stores/userInfo"; @@ -504,35 +504,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -557,8 +533,8 @@ } } nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', + uid: item.certNo +','+ item.certExpiredAt, + realName: '(' +item.certTypeName +' ' + item.certExpiredAt + ')', leaf: level >= 1 })) resolve(nodes) @@ -637,17 +613,49 @@ getBasicData() }) + onUpdated(()=>{ console.log('false loading') }) - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const openWorkSelect = ()=>{ @@ -721,9 +729,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -759,17 +767,15 @@ temp.push(i) } } - if(type == '作业人'){state.form.operatorUids = temp} + if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))} // if(type == '分析人'){state.form.analystUids = temp} if(type == '监护人'){state.form.guardianUids = temp} if(type == '确认人'){state.form.safetyMeasureUids = temp} if(type == '结束人'){state.form.startOrEndUids = temp} - console.log(value,state.form.operatorUids,55) } } const submitForm = async (formEl: FormInstance | undefined) => { - console.log(state.form.operatorUids,666) if (!formEl) return await formEl.validate(async (valid, fields) => { if (valid) { @@ -794,7 +800,8 @@ return item }) data.workDetail.workMethod = data.workDetail.methodList.join(',') - data.operatorUids = transform2Arr(data.operatorUids) + // data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue index bb9c260..d0fec06 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue @@ -42,15 +42,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" multiple filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -128,6 +128,20 @@ <div class="el-upload__tip">上传jpg/png图片尺寸小于2M,最多可上传3张</div> </template> </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容签字人" prop="workDetail.signUid"> + <el-select v-model="form.workDetail.signUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> </el-form-item> </el-col> </el-row> @@ -299,19 +313,19 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="签字人" prop="workDetail.signUid"> - <el-select v-model="form.workDetail.signUid" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> - </el-form-item> - </el-col> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="作业内容签字人" prop="workDetail.signUid">--> +<!-- <el-select v-model="form.workDetail.signUid" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> <!-- <el-col :span="12">--> <!-- <el-form-item label="最终审批人" prop="lastApprover">--> <!-- <el-select v-model="form.lastApprover" filterable clearable>--> @@ -325,7 +339,7 @@ <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> <!-- </el-form-item>--> <!-- </el-col>--> - </el-row> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -456,35 +470,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -583,13 +573,44 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ @@ -657,9 +678,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -722,7 +743,7 @@ state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue index 0ca2810..df2f5cd 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue @@ -75,15 +75,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -399,35 +399,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -527,13 +503,44 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ @@ -601,9 +608,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -665,7 +672,7 @@ // } state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue index 449a455..b39b6b4 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue @@ -97,15 +97,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -484,35 +484,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -608,13 +584,44 @@ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ @@ -686,9 +693,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -751,7 +758,7 @@ state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue index 94d244a..d5a5f10 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue @@ -42,15 +42,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -396,6 +396,7 @@ props1:{}, depProps:{}, casProps:{} + cas2Props:{} safetyMeasureBasicList: [], fileList: Array<file>, uploadUrl: string, @@ -470,6 +471,13 @@ multiple: true, checkStrictly: true, emitPath: false + }, + cas2Props: { + value: 'uid', + label: 'realName', + multiple: true, + checkStrictly: true, + children: 'certList' }, casProps: { expandTrigger: 'hover', @@ -588,13 +596,44 @@ state.form.workDetail.qpDetailList.splice(index,1) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ @@ -662,9 +701,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -730,7 +769,7 @@ state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue index 15fa75d..0e7ded9 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue @@ -180,15 +180,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -527,35 +527,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -661,13 +637,44 @@ const openWorkSelect = ()=>{ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected @@ -735,9 +742,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -800,7 +807,7 @@ state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue index 031d931..c9edd23 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue @@ -99,15 +99,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -472,35 +472,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -595,13 +571,44 @@ const openWorkSelect = ()=>{ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected @@ -668,9 +675,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -734,7 +741,7 @@ state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',') state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue index d026ece..bab6078 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue @@ -76,15 +76,15 @@ </el-col> <el-col :span="12"> <el-form-item label="作业人" prop="operatorUids"> - <el-select v-model="form.operatorUids" filterable multiple clearable> - <el-option - v-for="item in zyList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - /> - </el-select> - <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> +<!-- <el-select v-model="form.operatorUids" filterable multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in zyList"--> +<!-- :key="item.uid"--> +<!-- :label="item.realName"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> + <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/> </el-form-item> </el-col> </el-row> @@ -409,35 +409,11 @@ } }, cas2Props: { - expandTrigger: 'hover', value: 'uid', label: 'realName', multiple: true, - checkStrictly: false, - lazy: true, - async lazyLoad(node, resolve){ - const { value, level } = node - let nodes = [] - if(level == 0){ - nodes = props.lists.spList.opList - }else{ - let res = await userApi().getCtf({uid: value}) - if(res.data.code == 200){ - nodes = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - } - nodes=nodes.map(item => ({ - uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, - realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', - leaf: level >= 1 - })) - resolve(nodes) - } + checkStrictly: true, + children: 'certList' }, cas3Props: { expandTrigger: 'hover', @@ -531,13 +507,44 @@ const openWorkSelect = ()=>{ workSelectRef.value.openDialog(state.form.involveOtherWork) } - const getWorkerList = (val)=>{ - const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + const getWorkerList = ()=>{ + let idList:Array<any> = [] + for(let i of state.form.workDepIds){ + idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i))) + } + const depLists = [...new Set(idList)] + const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId)); if(filteredList && filteredList.length>0){ state.zyList = filteredList }else{ state.zyList = props.lists.spList.opList } + } + + const getListFromDep = (dep) =>{ + let depIds = [] + depIds.push(dep.depId) + if (Array.isArray(dep.children)) { + for (let child of dep.children) { + depIds = depIds.concat(getListFromDep(child)); + } + } + return depIds; + } + + const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{ + for(const i of DepList){ + if(i.depId === id){ + return i + } + if(Array.isArray(i.children)){ + const node:any = getIdListsFormDepId(i.children,id) + if(node){ + return node + } + } + } + return null } const getSelected = ()=>{ state.form.involveOtherWork = workSelectRef.value.selected @@ -605,9 +612,9 @@ return arr.map((i)=>{ return { uid: i[0], - certificate: i[1].split(',')[0], - certExpiredAt: i[1].split(',')[1], - certTypeName: i[1].split(',')[2] + certificate: i[1]?i[1].split(',')[0]:'', + certExpiredAt: i[1]?i[1].split(',')[1]:'', + certTypeName: '' } }) } @@ -670,7 +677,7 @@ // } state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transform2Arr(data.operatorUids) + data.operatorUids = transformArr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) data.guardianUids = transform2Arr(data.guardianUids) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue index 15a2e29..a74c29c 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue @@ -3,11 +3,11 @@ <el-row style="margin-bottom: 20px"> <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px"> <span>作业编号:</span> - <el-input v-model="searPara.workPermitNo" placeholder="作业编号"/> + <el-input v-model="searPara.searchParams.workPermitNo" placeholder="作业编号"/> </div> <div class="basic-line"> <span>作业类型:</span> - <el-select v-model="searPara.workType"> + <el-select v-model="searPara.searchParams.workType"> <el-option v-for="item in workType" :key="item.value" @@ -22,7 +22,7 @@ </div> </el-row> <el-table ref="TableRef" :data="otherWorks" style="width: 100%" border @selection-change="handleSelectionChange" :row-key="(row) => { return row.workApplyId }"> - <el-table-column type="selection" width="55" /> + <el-table-column type="selection" width="55" :reserve-selection="true"/> <!-- <el-table-column type="index" label="序号" width="60" />--> <el-table-column prop="workTypeDesc" label="作业类型" show-overflow-tooltip></el-table-column> <el-table-column prop="workLevelDesc" label="作业等级" show-overflow-tooltip></el-table-column> @@ -37,6 +37,7 @@ <!-- </template>--> <!-- </el-table-column>--> </el-table> + <el-pagination style="margin-top: 20px;display: flex;justify-content: right" v-model:currentPage="searPara.pageIndex" v-model:page-size="searPara.pageSize" :page-sizes="[10]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> <template #footer> <span class="dialog-footer"> <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button> @@ -58,6 +59,7 @@ title: string isShowDialog: boolean searPara: object + totalSize: number otherWorks: [] workType: Array<any> selected: Array<any> @@ -73,9 +75,14 @@ title: '', isShowDialog: false, searPara: { - workPermitNo: '', - workType: null + pageSize: 10, + pageIndex: 1, + searchParams: { + workPermitNo: '', + workType: null + } }, + totalSize: 0, otherWorks: [], selected: [], workType: [ @@ -122,6 +129,7 @@ }; const refreshTableSelection = (works) => { + state.selected = works if (TableRef.value) { for (let i = 0; i < state.otherWorks.length; i++) { if (works.includes(state.otherWorks[i].workApplyId)){ @@ -138,6 +146,7 @@ let res = await workApplyApi().getOtherWork(state.searPara); if (res.data.code === '200') { state.otherWorks = JSON.parse(JSON.stringify(res.data.data)) + state.totalSize = res.data.total } else { ElMessage({ type: 'warning', @@ -149,8 +158,12 @@ const clearSearch = ()=>{ state.searPara = { - workPermitNo: '', - workType: null + pageSize: 10, + pageIndex: 1, + searchParams: { + workPermitNo: '', + workType: null + } } getData() } @@ -161,17 +174,31 @@ } const onSubmit = ()=>{ + console.log(state.selected,'sel') context.emit('refreshWorks') state.selected = [] clearSearch() state.isShowDialog = false } + // 分页改变 + const handleSizeChange = (val: number) => { + state.searPara.pageSize = val; + getData() + }; + // 分页改变 + const handleCurrentChange = (val: number) => { + state.searPara.pageIndex = val; + getData() + }; + // 页面加载时 onMounted(() => {}); return { userRef, TableRef, + handleSizeChange, + handleCurrentChange, handleSelectionChange, openDialog, getData, diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue index 19a277c..041edbc 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue @@ -150,6 +150,7 @@ getAllDevice() getOtherWork() spWorker() + getOpList() getAllRisks() }); @@ -168,18 +169,18 @@ }; const spWorker = async ()=>{ - for(let id of ['17','18','19']){ + for(let id of ['18','19']){ const res = await workApplyApi().getSpList({roleId: id}) - if(id == '17'){ - if (res.data.code === '200') { - state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)) - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // if(id == '17'){ + // if (res.data.code === '200') { + // state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)) + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + // } if(id == '18'){ if (res.data.code === '200') { state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data)) @@ -203,6 +204,29 @@ } } + const getOpList = async()=>{ + const res = await workApplyApi().getOpList() + if(res.data.code == '200'){ + if(res.data.data && res.data.data.length>0){ + state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{ + if(i.certList && i.certList.length>0){ + i.certList = i.certList.map(item=>{ + item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')' + item['uid'] = item.certNo + ',' + item.certExpiredAt + return item + }) + } + return i + }) + } + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + // 获取部门列表 const getAllDepartment = async () => { let res = await teamManageApi().getAllDepartment(); @@ -221,7 +245,7 @@ // 获取相关作业列表 const getOtherWork = async () => { - let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null}); + let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}}) if (res.data.code === '200') { state.otherWorks = JSON.parse(JSON.stringify(res.data.data)) state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data)) diff --git a/src/views/specialWorkSystem/process/zyjcgl/index.vue b/src/views/specialWorkSystem/process/zyjcgl/index.vue index 3c93feb..48aa856 100644 --- a/src/views/specialWorkSystem/process/zyjcgl/index.vue +++ b/src/views/specialWorkSystem/process/zyjcgl/index.vue @@ -48,8 +48,8 @@ </template> </el-table-column> <el-table-column property="info" label="描述" show-overflow-tooltip width="200" align="center"/> - <el-table-column property="operatorUname" label="分析人" align="center"/> - <el-table-column property="operationTime" label="分析时间" width="180" align="center"/> + <el-table-column property="operatorUname" label="检查人" align="center"/> + <el-table-column property="operationTime" label="登记时间" width="180" align="center"/> <!-- <el-table-column property="mcResultName" label="物资检查" width="180" align="center">--> <!-- <template #default="scope">--> <!-- <span :class="scope.row.mcResultName == '不合格' ? 'red': ''">{{ scope.row.mcResultName== null?'-':scope.row.mcResultName}}</span>--> diff --git a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue index 523d929..d3d490d 100644 --- a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue +++ b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue @@ -5,7 +5,7 @@ <!-- </div>--> <div class="info"> <div class="left-info"> - <template v-for="item in videoData.approvalDeviceList"> + <template v-for="item in videoData.workApprovalDeviceList"> <iframe class="video-cont" :src="'http://36.108.169.10:8088/808gps/open/player/video.html?lang=zh&devIdno=' + item.deviceNo + '&&account=gtxh&password=000000'"></iframe> </template> <div class="chart-area"> @@ -37,11 +37,7 @@ <el-table-column property="operationTime" label="检查填报时间" align="center"/> <el-table-column property="checkContent" label="检查内容" align="center"/> <el-table-column property="info" label="描述" align="center"/> - <el-table-column property="checkContent" label="是否合格" align="center"> -<!-- <template #default="scope">--> -<!-- <span>{{scope.row.isGood == 0?'合格':'不合格'}}</span>--> -<!-- </template>--> - </el-table-column> + <el-table-column property="checkResultDesc" label="是否合格" align="center"/> </el-table> </div> </div> @@ -189,7 +185,6 @@ const recordRef = ref() const openDialog = (row)=>{ state.videoData = row - console.log(state.videoData.approvalDeviceList,'data') state.title = row.workTypeDesc + '编号' + row.workPermitNo + '实时监测详情' state.videoDetailDialog = true } diff --git a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue index 25b7d7e..26ff22d 100644 --- a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue +++ b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue @@ -11,20 +11,20 @@ <!-- </el-steps>--> <div class="item" v-for="(item,index) in data" :key="index"> <div class="marker"> - <div class="dot"></div> + <div class="dot" :class="item.operationTitle == '作业验收'?'greenDot':''"></div> <div class="line"></div> </div> <div class="content"> - <div class="tit">{{item.operationTitle}}<span>{{index == data.length - 1 ? '[进行中]': '[已完成]'}}</span></div> + <div class="tit">{{item.operationTitle}}<span :class="item.operationTitle == '作业验收'?'green':''">{{item.operationTitle == '作业验收'?'[已完成]':(index == data.length - 1 ? '[进行中]': '[已完成]')}}</span></div> <div>{{item.operationUtype}}:{{item.operationUname}}</div> <div>操作时间:{{item.operationTime}}</div> <div>操作内容:{{item.content}}</div> <div>操作意见:{{item.approvalOpinions}}</div> <div v-if="item.fileUrl" style="display: flex;align-items: flex-start">附件内容: - <el-image v-for="(i,index) in item.fileUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> + <el-image v-for="(i,index) in item.fileUrl.split(',')" :key="index" :preview-src-list="item.fileUrl.split(',')" :initial-index="0" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> </div> <div v-if="item.signUrl" style="display: flex;align-items: flex-start">签字图片: - <el-image v-for="(i,index) in item.signUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> + <el-image v-for="(i,index) in item.signUrl.split(',')" :key="index" :preview-src-list="item.signUrl.split(',')" :initial-index="0" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> </div> </div> </div> @@ -162,10 +162,16 @@ .line{ display: none; } + .greenDot{ + background: #13ce66; + } .tit{ span{ color: #409eff; } + .green{ + color: #13ce66; + } } } } diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue index 08ce261..cb681d5 100644 --- a/src/views/specialWorkSystem/specialIndex/index.vue +++ b/src/views/specialWorkSystem/specialIndex/index.vue @@ -15,24 +15,6 @@ </el-button> </div> <div class="topChart"> -<!-- <div class="chart-item">--> -<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> -<!-- <div class="chart-tit">--> -<!-- <span class="tit">各事业部关联作业分析</span>--> -<!-- <div class="filter-part">--> -<!-- <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>--> -<!-- <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()">--> -<!-- <el-option--> -<!-- v-for="item in workType1"--> -<!-- :key="item.id"--> -<!-- :label="item.name"--> -<!-- :value="item.id"--> -<!-- />--> -<!-- </el-select>--> -<!-- </div>--> -<!-- </div>--> -<!-- <div class="chart" :id="slfx"></div>--> -<!-- </div>--> <div class="chart-item"> <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> <div class="chart-tit"> @@ -60,48 +42,7 @@ </el-radio-group> </div> </div> -<!-- <div class="topChart">--> -<!-- <div class="chart-item">--> -<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> -<!-- <div class="chart-tit">--> -<!-- <span class="tit">关联作业趋势图</span>--> -<!-- <div class="filter-part filter-part2">--> -<!-- <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>--> -<!-- </div>--> -<!-- </div>--> -<!-- <div class="chart" :id="zyqs"></div>--> -<!-- </div>--> -<!-- <div class="chart-item">--> -<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> -<!-- <div class="chart-tit">--> -<!-- <span class="tit">作业警报记录</span>--> -<!-- <div class="filter-part">--> -<!-- <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)">--> -<!-- <el-option label="近7天" :value="7"/>--> -<!-- <el-option label="近30天" :value="30"/>--> -<!-- <el-option label="近90天" :value="90"/>--> -<!-- <el-option label="近1年" :value="365"/>--> -<!-- </el-select>--> -<!-- <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()">--> -<!-- <el-option--> -<!-- v-for="item in workType1"--> -<!-- :key="item.id"--> -<!-- :label="item.name"--> -<!-- :value="item.id"--> -<!-- />--> -<!-- </el-select>--> -<!-- </div>--> -<!-- </div>--> -<!-- <div class="chart">--> -<!-- <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }">--> -<!-- <el-table-column property="operatorUname" label="姓名" align="center"/>--> -<!-- <el-table-column property="deptName" label="所属部门" align="center"/>--> -<!-- <el-table-column property="warningCount" label="异常报警次数" align="center"/>--> -<!-- </el-table>--> -<!-- </div>--> -<!-- </div>--> -<!-- </div>--> - <div> + <div class="homeCard"> <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> <el-row> @@ -157,16 +98,16 @@ <span style="white-space: nowrap">作业票编号:</span> <div class="grid-content topInfo"> <el-input - v-model="searchParams.workPermitNo" + v-model.trim="searchParams.workPermitNo" placeholder="请输入作业票编号" size="small" /> </div> </el-col> <el-col :span="4" style="display:flex;align-items: center"> - <span style="white-space: nowrap">申请单位:</span> + <span style="white-space: nowrap">申请事业部:</span> <div class="grid-content topInfo"> - <el-cascader :teleported="false" v-model="searchParams.applyDepId" @change="changeDep4()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + <el-cascader :teleported="false" v-model="searchParams.seDepId" @change="changeDep4()" :options="depList" :props="casProps" :show-all-levels="false" size="small"/> </div> </el-col> <el-button type="primary" style="margin-left: 20px" @click="searchRecord" size="small">查询</el-button> @@ -253,11 +194,11 @@ </el-table-column> <el-table-column property="workTypeDesc" label="作业类型" align="center"/> <el-table-column property="workLevelDesc" label="作业等级" align="center"/> - <el-table-column property="abortReason" label="中止原因" align="center"> - <template #default="scope"> - <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span> - </template> - </el-table-column> +<!-- <el-table-column property="abortReason" label="中止原因" align="center">--> +<!-- <template #default="scope">--> +<!-- <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span>--> +<!-- </template>--> +<!-- </el-table-column>--> <el-table-column property="workAllStatusDesc" label="作业状态" align="center"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> @@ -265,6 +206,7 @@ v-if="scope.row.workAllStatus == -1|| scope.row.workAllStatus == 1 || scope.row.workAllStatus == 3 || scope.row.workAllStatus == 7" type="primary" size="small" :icon="VideoPlay" @click="openVideo(scope.row)">查看监控视频</el-button> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row.workApplyId)">查看记录</el-button> + <el-button v-if="(scope.row.workAllStatus == 3 || scope.row.workAllStatus == 4 || scope.row.workAllStatus == 5)&&!scope.row.renewalWorkApplyId" link type="primary" size="small" :icon="Edit" @click="continueRecord(scope.row)">一键续票</el-button> <el-button link type="primary" size="small" :icon="View" @click="viewTicket(scope.row)">查看作业票</el-button> <el-button link type="primary" size="small" :icon="Download" @click="downLoadTicket(scope.row)">导出作业票</el-button> <!-- <el-button link type="primary" size="small" :icon="FolderChecked" @click="handleReview(scope.row)">验收</el-button>--> @@ -276,7 +218,6 @@ </div> </div> </div> - </div> <el-dialog v-model="dialogDetails" title="作业申请详情" center> <!-- <fire v-if="dialogType == 1" :details = details></fire>--> <!-- <space v-else-if="dialogType == 2" :details = details></space>--> @@ -314,11 +255,20 @@ <!-- </el-dialog>--> <video-detail ref="videoRef"></video-detail> <Work-record ref="recordRef"></Work-record> + <fire-dialog ref="fireRef" :lists="lists" @refresh="getMydepList"></fire-dialog> + <plate-dialog ref="plateRef" :lists="lists" @refresh="getMydepList"></plate-dialog> + <space-dialog ref="spaceRef" :lists="lists" @refresh="getMydepList"></space-dialog> + <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getMydepList"></hoist-dialog> + <ground-dialog ref="groundRef" :lists="lists" @refresh="getMydepList"></ground-dialog> + <broken-dialog ref="brokenRef" :lists="lists" @refresh="getMydepList"></broken-dialog> + <height-dialog ref="heightRef" :lists="lists" @refresh="getMydepList"></height-dialog> + <power-dialog ref="powerRef" :lists="lists" @refresh="getMydepList"></power-dialog> + <open-dialog ref="openRef" :lists="lists" @refresh="getMydepList"></open-dialog> </div> </template> <script lang="ts"> -import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue'; +import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent, nextTick} from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import { useUserInfo } from '/@/stores/userInfo'; @@ -338,6 +288,8 @@ import WorkRecord from "/@/views/specialWorkSystem/specialIndex/components/workRecord.vue"; import { BorderBox10 as DvBorderBox10 } from '@kjgl77/datav-vue3' import {productionDeviceApi} from "/@/api/doublePreventSystem/productionDevice"; +import {ElMessageBox} from "element-plus/es"; +import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport"; // 定义接口来定义对象的类型 interface stateType { @@ -366,6 +318,7 @@ workType1: Array<type>; dialogType: number | null; departmentList: Array<any>; + depList: Array<any>; departmentRecursionList: Array<DepartmentState>; reviewForm: object; reviewRules: object; @@ -375,6 +328,7 @@ endTime:string pieData: Array<status> squareData: Array<status> + lists: {} } interface type { id: number | null; @@ -398,14 +352,15 @@ components: { VideoDetail, WorkRecord, - // fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue')), - // space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), - // hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), - // ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue')), - // broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), - // height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue')), - // power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue')), - // plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue')) + fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')), + plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')), + spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')), + hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')), + groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')), + brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')), + heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')), + powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')), + openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue')) }, setup() { const userInfo = useUserInfo() @@ -429,10 +384,11 @@ startTime: '', endTime: '', workAllStatus: null, - applyDepId: null + seDepId: null }, dialogReview: false, departmentList: [], + depList: [], departmentRecursionList: [], searchStatus: null, endTime: '', @@ -503,12 +459,40 @@ value: -1 }, { - name: '开始', + name: '作业中(监护中)', value: 1 }, { - name: '结束', - value: 2 + name: '待验收', + value: 3 + }, + { + name: '验收不合格', + value: 4 + }, + { + name: '已验收', + value: 5 + }, + { + name: '作业前气体分析不合格', + value: 6 + }, + { + name: '审批未通过', + value: 7 + }, + { + name: '作业中止', + value: 8 + }, + { + name: '取消', + value: 15 + }, + { + name: '废止', + value: 16 } ], pieData: [], @@ -519,7 +503,16 @@ }, reviewRules:{ advice: [{ required: true, message: '请填写验收意见', trigger: 'blur' }] - } + }, + lists: { + workerList: [], + departList: [], + departList2: [], + deviceList: [], + otherWorks: [], + spList: [], + riskList: [] + }, }); // 页面载入时执行方法 onMounted(() => { @@ -527,10 +520,24 @@ getMydepList() getAllDepartment(); getTypePie() - getWorkDep() getDepMonth() getWarningList() + spWorker() + getOpList() + getAll() + getAllDevice() + getAllRisks() + getOtherWork() }); + const fireRef = ref() + const plateRef = ref() + const spaceRef = ref() + const hoistRef = ref() + const groundRef = ref() + const brokenRef = ref() + const heightRef = ref() + const powerRef = ref() + const openRef = ref() const initTime =()=>{ state.chartSearch1.startTime = getPeriod(30) state.chartSearch2.startTime = getPeriod(30) @@ -562,15 +569,6 @@ getTypePie() } - const changeDep2=()=>{ - getWorkDep() - } - const changeType2=()=>{ - getWorkDep() - } - const changeType4=()=>{ - getWarningList() - } const changeDep3=()=>{ getDepMonth() } @@ -594,14 +592,45 @@ getMydepList() getAllDepartment(); getTypePie() - getWorkDep() getDepMonth() } + + const continueRecord = (row)=>{ + if(row.workType == 1){ + fireRef.value.openDialog(row,'continue') + } + if(row.workType == 2){ + spaceRef.value.openDialog(row,'continue') + } + if(row.workType == 3){ + hoistRef.value.openDialog(row,'continue') + } + if(row.workType == 4){ + groundRef.value.openDialog(row,'continue') + } + if(row.workType == 5){ + brokenRef.value.openDialog(row,'continue') + } + if(row.workType == 6){ + heightRef.value.openDialog(row,'continue') + } + if(row.workType == 7){ + powerRef.value.openDialog(row,'continue') + } + if(row.workType == 8){ + plateRef.value.openDialog(row,'continue') + } + if(row.workType == 9){ + openRef.value.openDialog(row,'continue') + } + } + const getTypePie = async ()=>{ const data = { startTime: state.chartSearch1.startTime, endTime:state.endTime, - depId:state.chartSearch1.depId + depId:state.chartSearch1.depId, + type: null } let res = await specialIndexApi().analyseType(data); if (res.data.code === '200') { @@ -615,26 +644,7 @@ }); } } - const getWorkDep = async ()=>{ - const data = { - // startTime: state.chartSearch2.startTime, - // endTime: state.endTime, - depId:state.chartSearch2.depId, - type: state.chartSearch2.type - } - let res = await specialIndexApi().analyseAllWork(data); - if (res.data.code === '200') { - state.squareData = JSON.parse(JSON.stringify(res.data.data)) - let names = state.squareData.map(i=>i.name) - let vals = state.squareData.map(i=>i.value) - initSlfx(names,vals) - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const getDepMonth = async ()=>{ let res = await specialIndexApi().analyseDepMonth(state.chartSearch3.depId); if (res.data.code === '200') { @@ -672,6 +682,7 @@ } const getWarningList = async()=>{ const data = { + startTime: state.chartSearch4.startTime, endTime: state.endTime, workType:state.chartSearch4.workType @@ -687,6 +698,7 @@ } } type EChartsOption = echarts.EChartsOption + const initZyfb =()=>{ let dom = document.getElementById(zyfb.value); let myChart = echarts.init(dom); @@ -741,7 +753,12 @@ shadowColor: 'rgba(0, 0, 0, 0.5)' }, }, - data: state.pieData + data: state.pieData.map(i=>{ + return { + name: i.workTypeDesc, + value: i.count + } + }).filter(i=>i.name !== '未知') } ] } @@ -751,55 +768,7 @@ myChart.resize(); }); } - const initSlfx =(names:Array<string>,vals:Array<any>)=>{ - let dom = document.getElementById(slfx.value); - let myChart = echarts.init(dom); - let option: EChartsOption; - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - xAxis: [ - { - type: 'category', - data: names, - axisTick: { - alignWithLabel: true - }, - axisLabel: { - color: state.themeColor - } - } - ], - yAxis: [ - { - type: 'value' - } - ], - series: [ - { - name: 'Direct', - type: 'bar', - barWidth: '60%', - data: vals, - } - ] - } - option && myChart.setOption(option); - window.addEventListener("resize",function (){ - myChart.resize(); - }); - } const initZyqs =(names:Array<string>,vals:Array<any>)=>{ let dom = document.getElementById(zyqs.value); let myChart = echarts.init(dom); @@ -863,7 +832,10 @@ let res = await teamManageApi().getAllDepartment(); if (res.data.code === '200') { state.departmentList = JSON.parse(JSON.stringify(res.data.data)) - // recursion(state.departmentList); + state.depList = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47) + recursion(state.departmentList); + state.lists.departList = state.departmentList + state.lists.departList2 = state.depList } else { ElMessage({ type: 'warning', @@ -872,30 +844,16 @@ } }; - // 分页获取列表 - // const getListByPage = async () => { - // const dateRange = JSON.parse(JSON.stringify(state.searchDate)) - // if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')} - // const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} }; - // let res = await workApplyApi().getApplyList(data); - // if (res.data.code === '200') { - // state.workData = JSON.parse(JSON.stringify(res.data.data)); - // state.workData = state.workData.map((item) => { - // if (item.operators == null || item.operators == []) { - // item.operators = []; - // } else { - // item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname); - // } - // return item; - // }); - // state.totalSize1 = res.data.total; - // } else { - // ElMessage({ - // type: 'warning', - // message: res.data.msg - // }); - // } - // }; + const recursion = (value: any) => { + for (let i of value) { + if (i.children.length !== 0) { + state.departmentRecursionList.push(i); + recursion(i.children); + } else { + state.departmentRecursionList.push(i); + } + } + }; // 关键词查询记录 const searchRecord = async () => { @@ -911,7 +869,7 @@ startTime: '', endTime: '', workAllStatus: null, - applyDepId: null + seDepId: null } state.searchDate = [] state.pageIndex = 1 @@ -927,49 +885,7 @@ getMydepList() }; - // 查看记录 - // const viewDetail = (row: any) => { - // state.dialogType = row.workType - // state.details = JSON.parse(JSON.stringify(row)); - // if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ - // state.details.workDetail.otherSpecialWork=[] - // } - // else { - // const a = state.details.workDetail.otherSpecialWork - // state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { - // return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name; - // }); - // } - // if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ - // state.details.workDetail.involvedDepIds=[] - // } - // else { - // const a = state.details.workDetail.involvedDepIds - // state.details.workDetail.involvedDepIds = a.split(',').map((item) => { - // return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; - // }); - // } - // if(state.details.workDetail.csDepId){ - // state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; - // } - // if(state.details.workDetail.operationDepId){ - // state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; - // } - // if(state.details.workDetail.gbPath){ - // state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') - // } - // if(state.details.workDetail.bcPath){ - // state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') - // } - // if(state.details.workDetail.bpLocationMapPath){ - // state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') - // } - // state.dialogDetails = true; - // }; - // const handleReview = (row: object)=>{ - // state.dialogReview = true - // } const openVideo = (row:object)=>{ videoRef.value.openDialog(row) } @@ -985,6 +901,7 @@ } axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{id: row.workApplyId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ if (res) { + console.log(res.data,888) const link = document.createElement('a') let blob = new Blob([res.data],{type: 'application/pdf'}) link.style.display = "none"; @@ -1021,6 +938,107 @@ } }) } + + const spWorker = async ()=>{ + for(let id of ['18','19']){ + const res = await workApplyApi().getSpList({roleId: id}) + if(id == '18'){ + if (res.data.code === '200') { + state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + if(id == '19'){ + if (res.data.code === '200') { + state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + } + } + + const getOpList = async()=>{ + const res = await workApplyApi().getOpList() + if(res.data.code == '200'){ + if(res.data.data && res.data.data.length>0){ + state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{ + if(i.certList && i.certList.length>0){ + i.certList = i.certList.map(item=>{ + item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')' + item['uid'] = item.certNo + ',' + item.certExpiredAt + return item + }) + } + return i + }) + } + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + + // 获取用户列表 + const getAll = async ()=>{ + const res = await workApplyApi().getAllUsers() + if (res.data.code === '200') { + state.lists.workerList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取设备列表 + const getAllDevice = async ()=>{ + const res = await workApplyApi().getAllDevices() + if (res.data.code === '200') { + state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 获取设备列表 + const getAllRisks = async ()=>{ + const res = await workApplyApi().getAllRiskIdentity() + if (res.data.code === '200') { + // state.allDevices = JSON.parse(JSON.stringify(res.data.data)) + state.lists.riskList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const getOtherWork = async () => { + let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}}) + if (res.data.code === '200') { + state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; // const submitReview = async (formEl: FormInstance | undefined) => { // if (!formEl) return @@ -1070,12 +1088,20 @@ zyfb, slfx, zyqs, + fireRef, + plateRef, + spaceRef, + hoistRef, + groundRef, + brokenRef, + heightRef, + powerRef, + openRef, + getMydepList, + continueRecord, changeTime1, changeTime4, changeDep1, - changeDep2, - changeType2, - changeType4, changeDep3, changeDep4, toFullscreen, @@ -1102,7 +1128,7 @@ <style scoped lang="scss"> $homeNavLengh: 8; .home-container { - height: calc(100vh - 144px); + height: calc(100vh - 144px) !important; position: relative; box-sizing: border-box; overflow: hidden; @@ -1284,7 +1310,6 @@ .main-card { width: 100%; - height: 100%; .cardTop { display: flex; align-items: center; -- Gitblit v1.9.2