From 9673c181dd7b3882cbde386422ffb9a2b1949693 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期一, 25 三月 2024 10:02:42 +0800 Subject: [PATCH] Default Changelist --- src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue | 915 +++++++ src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue | 31 src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 26 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 62 src/views/newHome/index.vue | 1 src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue | 783 ++++++ src/views/specialWorkSystem/specialIndex/index.vue | 207 src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue | 920 +++++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue | 796 ++++++ src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue | 62 src/api/specialWorkSystem/workApply/index.ts | 67 src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 188 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue | 5 src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue | 62 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue | 62 src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue | 742 +++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue | 706 +++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue | 788 ++++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue | 967 +++++++ src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue | 62 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue | 62 src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue | 5 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue | 66 src/api/specialWorkSystem/specialIndex/index.ts | 7 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue | 64 25 files changed, 7,297 insertions(+), 359 deletions(-) diff --git a/src/api/specialWorkSystem/specialIndex/index.ts b/src/api/specialWorkSystem/specialIndex/index.ts index da21744..b40b8fd 100644 --- a/src/api/specialWorkSystem/specialIndex/index.ts +++ b/src/api/specialWorkSystem/specialIndex/index.ts @@ -35,6 +35,13 @@ method: 'post', data: data }); + }, + getWorkWarning: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/statistic/work/warning`, + method: 'post', + data: data + }); } }; } diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts index 511d8d8..83b5d0d 100644 --- a/src/api/specialWorkSystem/workApply/index.ts +++ b/src/api/specialWorkSystem/workApply/index.ts @@ -81,9 +81,23 @@ data: data }); }, + modFireApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hot`, + method: 'post', + data: data + }); + }, submitSpaceApply: (data: object) => { return request({ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/confinedspace`, + method: 'post', + data: data + }); + }, + modSpaceApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/confinedspace`, method: 'post', data: data }); @@ -95,9 +109,23 @@ data: data }); }, + modHoistApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hoisting`, + method: 'post', + data: data + }); + }, submitGroundApply: (data: object) => { return request({ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/groundBreaking`, + method: 'post', + data: data + }); + }, + modGroundApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/groundBreaking`, method: 'post', data: data }); @@ -109,9 +137,23 @@ data: data }); }, + modBrokenApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/brokenCircuit`, + method: 'post', + data: data + }); + }, submitHeightApply: (data: object) => { return request({ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/hight`, + method: 'post', + data: data + }); + }, + modHeightApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hight`, method: 'post', data: data }); @@ -123,6 +165,13 @@ data: data }); }, + modPowerApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/temporaryPower`, + method: 'post', + data: data + }); + }, submitPlateApply: (data: object) => { return request({ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/blindPlatePlugging`, @@ -130,7 +179,14 @@ data: data }); }, - + modPlateApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/blindPlatePlugging`, + method: 'post', + data: data + }); + }, + // 所有记录列表 getApplyList: (data: object) => { return request({ @@ -156,6 +212,15 @@ }); }, + // 获取所有风险辨识 + getAllRiskIdentity: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/risk/manage/select`, + method: 'post', + data: data, + }); + }, + // 导出打印接口 postPrinting: (data: object) => { return request({ diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue index 29526a9..ddb5bb7 100644 --- a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue +++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue @@ -4,6 +4,14 @@ <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="type"> + <el-radio-group v-model="form.type"> + <el-radio :label="1">安全评价报告</el-radio> + <el-radio :label="2">安全三同时</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="报告名称" prop="name"> <el-input v-model.trim="form.name" placeholder="报告名称" clearable></el-input> </el-form-item> @@ -26,6 +34,14 @@ <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传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> @@ -55,10 +71,12 @@ isShowDialog: boolean; form: { uuid: string + type: null | number name: string remarks: string evaluateTime: string files: string + deleted: string } rules:{}, fileList: [], @@ -75,12 +93,15 @@ isShowDialog: false, form: { uuid: '', + type: 1, name: '', remarks: '', evaluateTime: '', - files: '' + files: '', + deleted: '0' }, rules:{ + type: [{ required: true, message: '请选择报告类型', trigger: 'blur'}], name: [{ required: true, message: '请填写报告名称', trigger: 'blur'}], remarks: [{ required: true, message: '请填写备注', trigger: 'blur'}], evaluateTime: [{ required: true, message: '请选择评价时间', trigger: 'blur'}] @@ -104,19 +125,23 @@ state.title = '新增上报'; state.form = { uuid: '', + type: 1, name: '', remarks: '', evaluateTime: '', - files: '' + files: '', + deleted: '0' } }else{ state.title = '重新上报'; state.form = { + type: 1, uuid: data.uuid, name: '', remarks: '', evaluateTime: '', - files: '' + files: '', + deleted: '0' } } state.fileList = [] diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue index bf72612..5cdcb9e 100644 --- a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue +++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue @@ -12,6 +12,11 @@ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column> <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column> <el-table-column prop="name" label="报告名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="type" label="报告类型" show-overflow-tooltip> + <template #default="scope"> + {{scope.row.type == 1 ? '安全评价报告':scope.row.type == 2 ? '安全三同时':'--'}} + </template> + </el-table-column> <el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column> <el-table-column prop="evaluateTime" label="评价时间" show-overflow-tooltip></el-table-column> <el-table-column prop="files" label="附件" show-overflow-tooltip> diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue index 5e11dcb..8de963d 100644 --- a/src/views/newHome/index.vue +++ b/src/views/newHome/index.vue @@ -362,6 +362,7 @@ // router.push({ // name: "warningScreen" // }); + window.open('http://39.104.85.193:8585/'); }; diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue new file mode 100644 index 0000000..aa9da97 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue @@ -0,0 +1,915 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="涉及相关单位(部门)" prop="workDetail.involvedDepIds"> + <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :props="depProps2" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="断路原因" prop="workDetail.bcReason"> + <el-input + v-model="form.workDetail.bcReason" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入断路原因" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="断路地段相关说明" prop="workDetail.bcExplain"> + <el-input + v-model="form.workDetail.bcExplain" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入断路地段相关说明并在右方上传示意图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="断路地段示意图" prop="workDetail.bcPath"> + <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> + <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="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {UploadProps} from "element-plus/es"; + import axios from "axios"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + equipmentDialog: boolean, + showDialog: boolean + props1:{}, + depProps:{}, + depProps2:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + tabLoading: Boolean, + dialogImageUrl: string | null, + imgLimit: number, + } + interface file { + url: string; + } + export default defineComponent({ + name: 'brokenDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 5, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + involvedDepIds: [], + bcReason: '', + bcExplain: '', + bcPath: [], + signUid: null + }, + remark: '' + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + depProps2:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false, + multiple: true + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.signUid": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.form.workDetail.involvedDepIds = row.workDetail.involvedDepIds.split(',').map(i=>Number(i)) + state.fileList = row.workDetail.bcPath.split(',').map(item => { + return { + url: item, + name: item.match(/specialWork9step\/(.*?)\?/)[1] + } + }) + state.form.workDetail.bcPath = row.workDetail.bcPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 5, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + involvedDepIds: [], + bcReason: '', + bcExplain: '', + bcPath: [], + signUid: null + }, + remark: '' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(5) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.join(',') + 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.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + // const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0' + if(rawFile.size / 1024 / 1024 > 2){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过2M。' + }); + return Promise.reject(false) + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name); + state.form.workDetail.bcPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + if (file && file.status === "success") { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将彻底删除该图片, 不可恢复,是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.bcPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath)) + fileList.map((item, index) => { + if (item.uid === file.uid) { + fileList.splice(index, 1) + state.form.workDetail.bcPath.splice(index, 1) + // 请求删除接口 + deletePic(list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }); + return result; + } + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue new file mode 100644 index 0000000..fdf1be0 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue @@ -0,0 +1,783 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="动火级别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <el-option + v-for="item in workLevelList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点及动火部位" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点及动火部位" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="动火方式" prop="workDetail.workMethod"> + <el-input + v-model="form.workDetail.workMethod" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入动火方式" + /> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="分析人" prop="analystUids"> + <el-select v-model="form.analystUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.content" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUpdated } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + workLevelList: Array<any>, + equipmentDialog: boolean, + tabLoading: boolean + showDialog: boolean + props1:{} + depProps:{} + safetyMeasureBasicList: [] + } + export default defineComponent({ + name: 'fireDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 1, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + workMethod: '' + }, + remark: '' + }, + workLevelList: [ + { + label: "一级动火作业", + value: 1 + }, + { + label: "二级动火作业", + value: 2 + }, + { + label: "特级动火作业", + value: 3 + } + ], + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }) + + onUpdated(()=>{ + console.log('false loading') + }) + + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key] + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + console.log(state.form,'form') + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 1, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + workMethod: '' + }, + remark: '' + } + state.showDialog = false + } + + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + + const findParent = ()=>{ + // 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 getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(1) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + // if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + // state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + // content, + // approvalDepBasicId: id, + // approvalUids: [], + // approvalType: null + // })) + // }else{ + // state.form.approvalDepBasicList = [] + // } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + 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] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + const transform2EObj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + state.form.riskIdentification = state.form.riskIdentification.join(',') + const {...data} = state.form + data.operatorUids = transform2Arr(data.operatorUids) + data.headUids = transform2Arr(data.headUids) + // data.analystUids = transformArr(data.analystUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2EObj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + openWorkSelect, + getSelected, + openDialog, + workSelectRef, + clearFile, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + position: relative; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue new file mode 100644 index 0000000..cfc65e5 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue @@ -0,0 +1,920 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业范围、内容、方式" prop="workDetail.gbDesc"> + <el-input + v-model="form.workDetail.gbDesc" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业范围、内容、方式(包括深度、面积)并在右方上传简图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业简图" prop="workDetail.gbPath"> + <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> + <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="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @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> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import {ElMessage, ElMessageBox, UploadProps, UploadUserFile} from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import axios from "axios"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + equipmentDialog: boolean, + showDialog: boolean + props1:{}, + depProps:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number + tabLoading: boolean + } + interface file { + url: string; + } + export default defineComponent({ + name: 'groundDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 4, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + gbDesc: '', + gbPath: [], + signUid: null + }, + remark: '' + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.gbDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.gbPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.signUid": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.fileList = row.workDetail.gbPath.split(',').map(item => { + return { + url: item, + name: item.match(/specialWork9step\/(.*?)\?/)[1] + } + }) + state.form.workDetail.gbPath = row.workDetail.gbPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 4, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + gbDesc: '', + gbPath: [], + signUid: null + }, + remark: '' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(4) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + 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] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + 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.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async(rawFile: any) => { + if(rawFile.size / 1024 / 1024 > 2){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过2M。' + }); + return Promise.reject(false) + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name) + state.form.workDetail.gbPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + if (file && file.status === "success") { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将彻底删除该图片,不可恢复,是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.gbPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath)) + fileList.map((item, index) => { + if (item.uid === file.uid) { + fileList.splice(index, 1) + state.form.workDetail.gbPath.splice(index, 1) + // 请求删除接口 + deletePic(list[index]) + } + }) + console.log(state.form.workDetail.gbPath, 'gbpath') + }) + .catch(() => { + reject(false); + }); + }); + return result; + } + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue new file mode 100644 index 0000000..40edfb2 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue @@ -0,0 +1,742 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="高处作业级别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <el-option + v-for="item in workLevelList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业高度(m)" prop="workDetail.hight"> + <el-input + v-model="form.workDetail.hight" + placeholder="请输入作业高度" + type="number" + /> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" filterable prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" filterable label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" filterable prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + workLevelList: Array<any>, + equipmentDialog: boolean, + showDialog: boolean + props1:{}, + depProps:{}, + safetyMeasureBasicList: [] + tabLoading: boolean + } + export default defineComponent({ + name: 'heightDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 6, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hight: '' + }, + remark: '' + }, + workLevelList: [ + { + label: "一级高处作业", + value: 4 + }, + { + label: "二级高处作业", + value: 5 + }, + { + label: "三级高处作业", + value: 6 + }, + { + label: "特级高处作业", + value: 7 + } + ], + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.hight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 6, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hight: '' + }, + remark: '' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(6) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + state.form.riskIdentification = state.form.riskIdentification.join(',') + const {...data} = state.form + data.operatorUids = transform2Arr(data.operatorUids) + data.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue new file mode 100644 index 0000000..dab9391 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue @@ -0,0 +1,796 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="吊装级别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <el-option + v-for="item in workLevelList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="吊物重量(t)" prop="workDetail.weightMass"> + <el-input + v-model="form.workDetail.weightMass" + placeholder="请输入吊物重量" + type="number" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="吊具名称" prop="workDetail.hoistingToolName"> + <el-input + v-model="form.workDetail.hoistingToolName" + placeholder="请输入吊具名称" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="吊装地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="吊装内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="司索人" prop="workDetail.solicitorUids"> + <el-select v-model="form.workDetail.solicitorUids" filterable multiple 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" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + workLevelList: Array<any> + equipmentDialog: boolean + showDialog: boolean + props1:{} + depProps:{} + safetyMeasureBasicList: [] + tabLoading: boolean + } + export default defineComponent({ + name: 'hoistDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 3, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hoistingToolName: '', + weightMass: '', + solicitorUids: [] + }, + remark:'' + }, + workLevelList: [ + { + label: "一级吊装作业", + value: 8 + }, + { + label: "二级吊装作业", + value: 9 + }, + { + label: "三级吊装作业", + value: 10 + } + ], + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.weightMass": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.solicitorUids": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.workDetail.solicitorUids = row.workDetail.solicitorUids.split(',').map(i=>Number(i)) + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 3, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hoistingToolName: '', + weightMass: '', + solicitorUids: [] + }, + remark:'' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(3) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + 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] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id:any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + 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.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue index 964fca9..ecea5c2 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue @@ -14,7 +14,7 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险研判报告记录附件" prop="judgePicturePath"> + <el-form-item label="风险研判报告记录附件"> <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> @@ -96,8 +96,7 @@ judgePicturePath: [] }, jsaFormRules: { - judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }], - judgePicturePath: [{ required: true, message: '请上传风险研判报告附件', trigger: 'blur' }] + judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }] }, fileList: [], imgLimit: 3, diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue new file mode 100644 index 0000000..6be01e2 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue @@ -0,0 +1,967 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业类别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <el-option + v-for="item in workLevelList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="设备管道名称" prop="workDetail.pipingName"> + <el-input + v-model="form.workDetail.pipingName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入设备管道名称" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="管道介质" prop="workDetail.media"> + <el-input + v-model="form.workDetail.media" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入管道介质" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="管道温度(℃)" prop="workDetail.temperature"> + <el-input + v-model="form.workDetail.temperature" + type="number" + placeholder="请输入管道温度" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="管道压力(kPa)" prop="workDetail.pressure"> + <el-input + v-model="form.workDetail.pressure" + type="number" + placeholder="请输入管道压力" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="盲板材质" prop="workDetail.bpMaterialQuality"> + <el-input + v-model="form.workDetail.bpMaterialQuality" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板材质" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="盲板规格" prop="workDetail.bpSpecification"> + <el-input + v-model="form.workDetail.bpSpecification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板规格" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="盲板编号" prop="workDetail.bpCode"> + <el-input + v-model="form.workDetail.bpCode" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板编号" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="盲板位置相关描述" prop="workDetail.bpLocationDesc"> + <el-input + v-model="form.workDetail.bpLocationDesc" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板位置相关描述并在右方上传位置图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="盲板位置示意图" prop="workDetail.bpLocationMapPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :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> + <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="operatorUids"> + <el-select v-model="form.operatorUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.opList" + :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-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编制人姓名" prop="workDetail.preparedByName"> + <el-input + v-model="form.workDetail.preparedByName" + placeholder="请输入编制人姓名" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编制时间" prop="workDetail.preparedTime"> + <el-date-picker + v-model="form.workDetail.preparedTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {UploadProps} from "element-plus/es"; + import axios from "axios"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + workLevelList: Array<any>, + equipmentDialog: boolean, + showDialog: boolean, + props1:{}, + depProps:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + imgLimit: number, + tabLoading: boolean + } + interface file { + url: string; + } + export default defineComponent({ + name: 'plateForm', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 8, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + pipingName: '', + bpCode: '', + media: '', + temperature: null, + pressure: null, + bpMaterialQuality: '', + bpSpecification: '', + bpLocationMapPath: [], + bpLocationDesc: '', + preparedByName: '', + preparedTime: '' + }, + remark: '' + }, + workLevelList: [ + { + label: "抽盲板作业", + value: 11 + }, + { + label: "堵盲板作业", + value: 12 + } + ], + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.pipingName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpCode": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.media": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.temperature": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.pressure": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpMaterialQuality": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpSpecification": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpLocationMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpLocationDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedByName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedTime": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.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, + name: item.match(/specialWork9step\/(.*?)\?/)[1] + } + }) + state.form.workDetail.bpLocationMapPath = row.workDetail.bpLocationMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 8, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + pipingName: '', + bpCode: '', + media: '', + temperature: null, + pressure: null, + bpMaterialQuality: '', + bpSpecification: '', + bpLocationMapPath: [], + bpLocationDesc: '', + preparedByName: '', + preparedTime: '' + }, + remark:'' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(8) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + 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] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id:any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + 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.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const getUploadUrl = async (rawFile: any) => { + // const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0' + if(rawFile.size / 1024 / 1024 > 2){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过2M。' + }); + return Promise.reject(false) + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name); + state.form.workDetail.bpLocationMapPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + if (file && file.status === "success") { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将彻底删除该图片,不可恢复,是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.bpLocationMapPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath)) + fileList.map((item, index) => { + if (item.uid === file.uid) { + fileList.splice(index, 1) + state.form.workDetail.bpLocationMapPath.splice(index, 1) + // 请求删除接口 + deletePic(list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }); + return result; + } + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + beforeRemove, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue new file mode 100644 index 0000000..f05b607 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue @@ -0,0 +1,788 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="电源接入点及许可用电功率" prop="workDetail.powerAccessPoint"> + <el-input + v-model="form.workDetail.powerAccessPoint" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入电源接入点及许可用电功率" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="工作电压" prop="workDetail.workingVoltage"> + <el-input + v-model="form.workDetail.workingVoltage" + type="number" + placeholder="请输入工作电压" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="用电设备名称及额定功率" prop="workDetail.equipmentAndPower"> + <el-input + v-model="form.workDetail.equipmentAndPower" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入用电设备名称及额定功率" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="用电人" prop="workDetail.electricityUids"> + <el-select v-model="form.workDetail.electricityUids" filterable multiple 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-row> + <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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="分析人" prop="analystUids"> + <el-select v-model="form.analystUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple filterable clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + equipmentDialog: boolean, + showDialog: boolean + props1:{}, + depProps:{}, + safetyMeasureBasicList: [] + tabLoading: boolean + } + export default defineComponent({ + name: 'powerDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + equipmentDialog: false, + showDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 7, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + powerAccessPoint: '', + workingVoltage: '', + equipmentAndPower: '', + electricityUids: [] + }, + remark: '' + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }) + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workingVoltage": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.equipmentAndPower": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.electricityUids": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.workDetail.electricityUids = row.workDetail.electricityUids.split(',').map(i=>Number(i)) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 7, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + powerAccessPoint: '', + workingVoltage: '', + equipmentAndPower: '', + electricityUids: [] + }, + remark: '' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(7) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // 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) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id:any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + 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.headUids = transform2Arr(data.headUids) + // data.analystUids = transformArr(data.analystUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue new file mode 100644 index 0000000..cd7a065 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue @@ -0,0 +1,706 @@ +<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="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="受限空间名称" prop="workDetail.csName"> + <el-input + v-model="form.workDetail.csName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入受限空间名称" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="原有介质名称" prop="workDetail.csOriginalName"> + <el-input + v-model="form.workDetail.csOriginalName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入受限空间原有介质名称" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </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 lists.spList.opList" + :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-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="分析人" prop="analystUids"> + <el-select v-model="form.analystUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- format="YYYY-MM-DD HH:mm"--> +<!-- value-format="YYYY-MM-DD HH:mm:00"--> +<!-- type="datetimerange"--> +<!-- range-separator="至"--> +<!-- start-placeholder="开始时间"--> +<!-- end-placeholder="结束时间"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" filterable clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </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-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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</el-button> + </div> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUnmounted} from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; +import {userApi} from "/@/api/systemManage/user"; + interface stateType { + form: Object, + equipmentDialog: boolean, + showDialog: boolean + props1:{}, + depProps:{}, + safetyMeasureBasicList: [] + tabLoading: boolean + } + export default defineComponent({ + name: 'spaceDialog', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + showDialog: false, + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + id: null, + workType: 2, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + csName: '', + csOriginalName: '' + }, + remark: '' + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.csOriginalName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + getBasicData() + }); + + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + + const openDialog = (row)=>{ + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key]; + } + }) + state.form.operatorUids = row.operatorList.map(i=>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) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUid = row.acceptUser.userId + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + state.form.lastApprover = row.lastApprover.userId + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 2, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + csName: '', + csOriginalName: '' + }, + remark: '' + } + state.showDialog = false + } + + const findParent = ()=>{ + state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId) + } + + function findTopLevelId(tree, targetId) { + let topLevelId = null; + function findIdRecursive(node) { + if (node.id === targetId) { + topLevelId = node.id; + return true; + } + if (node.children) { + for (const child of node.children) { + if (findIdRecursive(child)) { + topLevelId = node.id; + return true; + } + } + } + return false; + } + tree.forEach(node => findIdRecursive(node)); + return topLevelId; + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(2) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id:any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + state.form.riskIdentification = state.form.riskIdentification.join(',') + const {...data} = state.form + data.operatorUids = transform2Arr(data.operatorUids) + data.headUids = transform2Arr(data.headUids) + // data.analystUids = transformArr(data.analystUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUid = transform2Obj(data.acceptUid) + 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(',') + } + } else { + console.log('error submit!', fields) + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + openWorkSelect, + getSelected, + openDialog, + clearFile, + workSelectRef, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue index 8502469..7cfecd0 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -98,8 +98,8 @@ <span v-if="scope.row.status == -1">已废止</span> <el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">作废</el-button> <el-button v-if="scope.row.status !== -1" link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> -<!-- <el-button link type="success" size="small" :icon="Finished">修改</el-button>--> - <el-button v-if="scope.row.status == 1" link type="success" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button> + <el-button link type="primary" size="small" v-throttle :icon="Edit" @click="openEdit(scope.row)">修改</el-button> + <el-button link type="success" v-throttle v-if="scope.row.status == 0 || scope.row.status == 1" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button> <!-- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>--> </template> </el-table-column> @@ -122,13 +122,19 @@ <detail-log :type=dialogType :statusList=statusList :details = details></detail-log> <template #footer> <span class="dialog-footer"> - <el-button type="primary" @click="dialogDetails = false" - >确认</el-button - > + <el-button type="primary" @click="dialogDetails = false">确认</el-button> </span> </template> </el-dialog> <report-log ref="reportDialogRef" @refresh="getListByPage"></report-log> + <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> </div> </template> @@ -175,6 +181,7 @@ searPara: {} timeRange: Array<string>; dep4List: Array<type>; + lists: {} } interface type { id: number; @@ -188,13 +195,29 @@ name: 'myApply', components: { detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')), - reportLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue')) + reportLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.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')) }, setup() { const userInfo = useUserInfo(); const { userInfos } = storeToRefs(userInfo); const router = useRouter(); const reportDialogRef = ref(); + 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 state = reactive<stateType>({ pageIndex1: 1, pageSize1: 10, @@ -237,6 +260,15 @@ { id: 7, name: '临时用电作业' }, { id: 8, name: '盲板抽堵作业' } ], + lists: { + workerList: [], + departList: [], + departList2: [], + deviceList: [], + otherWorks: [], + spList: [], + riskList: [] + }, dep4List: [ {id:49,name:'电石事业部'}, {id:50,name:'电力事业部'}, @@ -290,6 +322,121 @@ } ] }); + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + spWorker() + getAll() + getAllDevice() + getAllRisks() + getOtherWork() + }); + + const openEdit = (row)=>{ + if(row.workType == 1){ + fireRef.value.openDialog(row) + } + if(row.workType == 2){ + spaceRef.value.openDialog(row) + } + if(row.workType == 3){ + hoistRef.value.openDialog(row) + } + if(row.workType == 4){ + groundRef.value.openDialog(row) + } + if(row.workType == 5){ + brokenRef.value.openDialog(row) + } + if(row.workType == 6){ + heightRef.value.openDialog(row) + } + if(row.workType == 7){ + powerRef.value.openDialog(row) + } + if(row.workType == 8){ + plateRef.value.openDialog(row) + } + } + + const spWorker = async ()=>{ + for(let id of ['17','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)) + } 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 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 giveTime = () => { if (state.timeRange && state.timeRange !== null) { state.searPara.startTime = state.timeRange[0]; @@ -321,12 +468,25 @@ if (res.data.code === '200') { 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) } else { ElMessage({ type: 'warning', message: res.data.msg }); } + }; + const getOtherWork = async () => { + let res = await workApplyApi().getOtherWork({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 recursion = (value: any) => { @@ -537,12 +697,6 @@ await initBackEndControlRoutes(); }; - // 页面载入时执行方法 - onMounted(() => { - getListByPage(); - getAllDepartment() - }); - return { View, Edit, @@ -552,6 +706,16 @@ Finished, Download, reportDialogRef, + fireRef, + plateRef, + spaceRef, + hoistRef, + groundRef, + brokenRef, + heightRef, + powerRef, + openEdit, + getAllDepartment, checkTicket, giveTime, reLoadData, diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue index f54fabe..f1f264d 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue @@ -56,15 +56,15 @@ </el-col> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> </el-row> @@ -84,15 +84,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 spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -188,12 +188,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -263,7 +265,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -344,7 +346,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -411,7 +413,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -736,10 +738,11 @@ // } state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.join(',') state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -764,6 +767,7 @@ 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) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue index 36c0196..6f9bb00 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -56,15 +56,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 spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -114,15 +114,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> @@ -178,12 +178,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -253,7 +255,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -379,7 +381,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -684,10 +686,12 @@ 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) { @@ -703,11 +707,12 @@ // if(Array.isArray(state.form.involveOtherWork)){ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2EObj(data.acceptUid) @@ -727,6 +732,7 @@ type: 'warning', message: res.data.msg }) + state.form.riskIdentification = state.form.riskIdentification.split(',') // state.form.involveOtherWork = state.form.involveOtherWork.split(',') } } else { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue index 399eec3..8ae195e 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue @@ -22,15 +22,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 lists.spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -85,15 +85,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> @@ -171,12 +171,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -246,7 +248,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -327,7 +329,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> <el-dialog v-model="dialogVisible"> @@ -394,7 +396,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -705,10 +707,11 @@ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -730,8 +733,9 @@ type: 'warning', message: res.data.msg }); - state.form.involveOtherWork = state.form.involveOtherWork.split(',') + // 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) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue index e8815a0..4b51329 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue @@ -55,15 +55,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 spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -90,15 +90,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12" class="valueSelect"> @@ -159,12 +159,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -204,7 +206,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -273,7 +275,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -329,7 +331,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -648,10 +650,11 @@ // if(Array.isArray(state.form.involveOtherWork)){ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -672,6 +675,7 @@ message: res.data.msg }); // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') } } else { console.log('error submit!', fields) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue index d3a2e52..595a6ed 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue @@ -65,15 +65,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 spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -130,15 +130,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> @@ -194,12 +194,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -269,7 +271,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -338,7 +340,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -395,7 +397,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -716,10 +718,11 @@ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -741,6 +744,7 @@ }); // 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) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue index fe6bcea..add6ecd 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue @@ -144,15 +144,15 @@ <el-row> <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 lists.spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> <el-col :span="12" class="valueSelect"> @@ -195,15 +195,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> @@ -267,12 +267,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -312,7 +314,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -381,7 +383,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -447,7 +449,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -785,10 +787,11 @@ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -812,6 +815,7 @@ }); // 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) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue index ddadf29..f1e4594 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue @@ -65,7 +65,7 @@ </el-col> <el-col :span="12"> <el-form-item label="用电人" prop="workDetail.electricityUids"> - <el-select v-model="form.workDetail.electricityUids" multiple clearable> + <el-select v-model="form.workDetail.electricityUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -79,15 +79,15 @@ <el-row> <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 lists.spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -145,20 +145,20 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="绑定执法仪" prop="cameraIds"> - <el-select v-model="form.cameraIds" multiple clearable> + <el-select v-model="form.cameraIds" multiple filterable clearable> <el-option v-for="item in lists.deviceList" :key="item.id" @@ -209,12 +209,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -284,7 +286,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -353,7 +355,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -409,7 +411,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -718,11 +720,12 @@ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -744,6 +747,7 @@ }); // 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) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue index 3ceadc7..8acd0fc 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue @@ -44,15 +44,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 lists.spList.opList"--> -<!-- :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 lists.spList.opList" + :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-form-item> </el-col> </el-row> @@ -114,15 +114,15 @@ <el-row> <el-col :span="12"> <el-form-item label="监护人" prop="guardianUids"> -<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>--> -<!-- <el-option--> -<!-- v-for="item in lists.spList.jhList"--> -<!-- :key="item.uid"--> -<!-- :label="item.realName"--> -<!-- :value="item.uid"--> -<!-- />--> -<!-- </el-select>--> - <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/> + <el-select v-model="form.guardianUids" multiple filterable clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> </el-form-item> </el-col> <el-col :span="12"> @@ -178,12 +178,14 @@ <el-row> <el-col :span="12"> <el-form-item label="风险辨识" prop="riskIdentification"> - <el-input - v-model="form.riskIdentification" - :autosize="{ minRows: 1 }" - type="textarea" - placeholder="请输入风险辨识" - /> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -223,7 +225,7 @@ <el-table-column prop="content" label="审批签字项目" align="center"/> <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-form-item label="" prop="acceptUid"> + <el-form-item label="" prop="acceptUid" label-width="0"> <el-radio-group v-model="scope.row.approvalType"> <el-radio :label="0">所有必签</el-radio> <el-radio :label="1">任一</el-radio> @@ -292,7 +294,7 @@ </div> </el-form> <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</el-button> </div> <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> </div> @@ -348,7 +350,7 @@ workDepId: null, workContent: '', workLocation: '', - riskIdentification: '', + riskIdentification: [], involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], @@ -655,11 +657,12 @@ // if(Array.isArray(state.form.involveOtherWork)){ // state.form.involveOtherWork = state.form.involveOtherWork.join(',') // } + state.form.riskIdentification = state.form.riskIdentification.join(',') const {depIdList,...data} = state.form - data.operatorUids = transformArr(data.operatorUids) + data.operatorUids = transform2Arr(data.operatorUids) data.headUids = transform2Arr(data.headUids) // data.analystUids = transformArr(data.analystUids) - data.guardianUids = transformArr(data.guardianUids) + data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) data.acceptUid = transform2Obj(data.acceptUid) @@ -680,6 +683,7 @@ message: res.data.msg }); // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') } } else { console.log('error submit!', fields) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue index 37b230b..fba0b5c 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue @@ -93,7 +93,8 @@ departList2: [], deviceList: [], otherWorks: [], - spList: [] + spList: [], + riskList: [] }, activeName: 'fire', allWorkers: [], @@ -139,11 +140,12 @@ // 页面载入时执行方法 onMounted(() => { - getAll(); - getAllDepartment(); - getAllDevice(); - getOtherWork(); + getAll() + getAllDepartment() + getAllDevice() + getOtherWork() spWorker() + getAllRisks() }); // 获取用户列表 @@ -240,6 +242,20 @@ } }; + // 获取设备列表 + 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 + }); + } + }; + return { ...toRefs(state), fire, diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue index dd9a486..d754f58 100644 --- a/src/views/specialWorkSystem/specialIndex/index.vue +++ b/src/views/specialWorkSystem/specialIndex/index.vue @@ -66,20 +66,20 @@ <div class="chart-tit"> <span class="tit">作业警报记录</span> <div class="filter-part"> - <el-switch - v-model="chartSearch4.type" - inline-prompt - style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66" - active-text="作业人" - inactive-text="监护人" - /> - <el-select :teleported="false" v-model="chartSearch4.period" size="small"> - <el-option label="近7天" value="week"/> - <el-option label="近30天" value="month"/> - <el-option label="近90天" value="season"/> - <el-option label="近1年" value="year"/> +<!-- <el-switch--> +<!-- v-model="chartSearch4.type"--> +<!-- inline-prompt--> +<!-- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"--> +<!-- active-text="作业人"--> +<!-- inactive-text="监护人"--> +<!-- />--> + <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"> + <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()"> <el-option v-for="item in workType1" :key="item.id" @@ -91,17 +91,17 @@ </div> <div class="chart"> <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> - <el-table-column property="name" label="姓名" align="center"/> - <el-table-column property="dep" label="所属部门" align="center"/> - <el-table-column property="warning" label="异常报警次数" align="center"/> - <el-table-column property="role" label="角色" align="center"/> - <el-table-column property="isCard" label="是否持证" align="center"> - <template #default="scope"> - <span>{{scope.row.isCard == 1?'是':'否'}}</span> - </template> - </el-table-column> + <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-column property="role" label="角色" align="center"/>--> +<!-- <el-table-column property="isCard" label="是否持证" align="center">--> +<!-- <template #default="scope">--> +<!-- <span>{{scope.row.isCard == 1?'是':'否'}}</span>--> +<!-- </template>--> +<!-- </el-table-column>--> </el-table> - <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button> +<!-- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>--> </div> <!-- <div class="chart" :id="slfx"></div>--> </div> @@ -423,9 +423,9 @@ depId: 1 }, chartSearch4: { - searchDep: null, startTime: '', - days: 30 + days: 30, + workType: 1 }, searchDep2: null, searchDep: null, @@ -485,29 +485,7 @@ ], pieData: [], squareData: [], - warningData: [ - { - name: '黄公子', - dep: '有机事业部', - warning: 69, - role: '作业人', - isCard: 1 - }, - { - name: '李飞飞', - dep: '有机事业部', - warning: 51, - role: '监护人', - isCard: 0 - }, - { - name: '黄公子', - dep: '有机事业部', - warning: 69, - role: '作业人', - isCard: 1 - } - ], + warningData: [], reviewForm: { advice: '' }, @@ -523,28 +501,34 @@ getTypePie() getWorkDep() getDepMonth() + getWarningList() }); const initTime =()=>{ state.chartSearch1.startTime = getPeriod(30) state.chartSearch2.startTime = getPeriod(30) + state.chartSearch4.startTime = getPeriod(30) state.endTime = formatDate(new Date()) } const getPeriod =(num)=> { const currentDate = new Date(); const startTime = new Date(); - startTime.setDate(currentDate.getDate() - num); + startTime.setDate(currentDate.getDate() - num - 1); return formatDate(startTime) } const formatDate =(date)=> { const year = date.getFullYear().toString(); const month = ('0' + (date.getMonth() + 1)).slice(-2); const day = ('0' + date.getDate()).slice(-2); - return `${year}-${month}-${day} 00:00:00`; + return `${year}-${month}-${day} 23:59:59`; } const changeTime1=(value:number)=>{ state.chartSearch1.startTime = getPeriod(value) - console.log(state.chartSearch1.startTime,state.endTime,'结束段') getTypePie() + } + const changeTime4=(value:number)=>{ + state.chartSearch4.startTime = getPeriod(value) + console.log(state.chartSearch4.startTime,state.endTime,'结束段') + getWarningList() } const changeDep1=()=>{ getTypePie() @@ -555,6 +539,9 @@ } const changeType2=()=>{ getWorkDep() + } + const changeType4=()=>{ + getWarningList() } const changeDep3=()=>{ getDepMonth() @@ -645,6 +632,22 @@ if (res.data.code === '200') { state.workData = JSON.parse(JSON.stringify(res.data.data)) state.totalSize = res.data.total + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + const getWarningList = async()=>{ + const data = { + startTime: state.chartSearch4.startTime, + endTime: state.endTime, + workType:state.chartSearch4.workType + } + let res = await specialIndexApi().getWorkWarning(data) + if (res.data.code === '200') { + state.warningData = JSON.parse(JSON.stringify(res.data.data)) } else { ElMessage({ type: 'warning', @@ -1033,9 +1036,11 @@ slfx, zyqs, changeTime1, + changeTime4, changeDep1, changeDep2, changeType2, + changeType4, changeDep3, toFullscreen, // handleReview, @@ -1156,57 +1161,57 @@ .chart{ width: 100%; height: 85%; + overflow-y: scroll; .el-table{ - height: 90% !important; - :deep(.el-table__inner-wrapper){ - height: 100% !important; - .el-table__header-wrapper { - height: 20% !important; - .el-table__header{ - height: 100% !important; - th{ - height: 100% !important; - padding: 0 0 !important; - .cell{ - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - } - } - } - .el-table__body-wrapper { - height: 80% !important; - .el-scrollbar__view{ - height: 100% !important; - .el-table__body{ - height: 100% !important; - tbody{ - height: 100% !important; - .el-table__row{ - height: 25% !important; - td{ - height: 25% !important; - padding: 0 0 !important; - .left-info{ - display: flex; - align-items: center; - } - .cell{ - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - .el-button{ - padding: 0 !important; - } - } - } - } - } - } - } - } + //:deep(.el-table__inner-wrapper){ + // height: 100% !important; + // .el-table__header-wrapper { + // height: 20% !important; + // .el-table__header{ + // height: 100% !important; + // th{ + // height: 100% !important; + // padding: 0 0 !important; + // .cell{ + // white-space: nowrap; + // overflow: hidden; + // text-overflow: ellipsis; + // } + // } + // } + // } + // .el-table__body-wrapper { + // height: 80% !important; + // .el-scrollbar__view{ + // height: 100% !important; + // .el-table__body{ + // height: 100% !important; + // tbody{ + // height: 100% !important; + // .el-table__row{ + // height: 25% !important; + // td{ + // height: 25% !important; + // padding: 0 0 !important; + // .left-info{ + // display: flex; + // align-items: center; + // } + // .cell{ + // white-space: nowrap; + // overflow: hidden; + // text-overflow: ellipsis; + // } + // .el-button{ + // padding: 0 !important; + // } + // } + // } + // } + // } + // } + // } + //} } } .el-radio-group{ -- Gitblit v1.9.2