From 83bbceeca584500a9902ce1677a3337990d9157a Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 26 五月 2023 17:00:08 +0800 Subject: [PATCH] 新特殊作业 --- src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 425 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 283 insertions(+), 142 deletions(-) diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue index 9d124d1..24af233 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -4,13 +4,13 @@ <div class="homeCard"> <el-row> <el-col :span="12"> - <el-form-item label="作业申请单位" prop="workDetail.involvedDepIds"> - <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :options="departList" :props="depProps" :show-all-levels="false"/> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :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"> + <el-select v-model="form.workLevel" clearable> <el-option v-for="item in workLevelList" :key="item.value" @@ -35,19 +35,19 @@ <el-col :span="12"> <el-form-item label="作业地点及动火部位" prop="workLocation"> <el-input - v-model="form.workContent" + v-model="form.workLocation" :autosize="{ minRows: 1 }" type="textarea" - placeholder="请输入作业内容" + placeholder="请输入作业地点及动火部位" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="动火方式" prop="workDetail.hotMethod"> + <el-form-item label="动火方式" prop="workDetail.workMethod"> <el-input - v-model="form.workDetail.hotMethod" + v-model="form.workDetail.workMethod" :autosize="{ minRows: 1 }" type="textarea" placeholder="请输入动火方式" @@ -55,8 +55,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="动火人级证书编号" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="作业人及证件编号" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -69,13 +69,13 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="作业单位" prop="workDetail.involvedDepIds"> - <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :props="depProps" :options="departList" :show-all-levels="false"/> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :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" multiple> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -88,8 +88,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="分析人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="分析人" prop="analystUids"> + <el-select v-model="form.analystUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -100,8 +100,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="关联其他特殊作业" prop="workDetail.otherSpecialWork"> - <el-select v-model="form.workDetail.otherSpecialWork" multiple> + <el-form-item label="关联其他特殊作业" prop="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> <el-option v-for="item in otherWorkList" :key="item.value" @@ -114,8 +114,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="分析人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -127,7 +127,7 @@ </el-col> <el-col :span="12"> <el-form-item label="绑定执法仪" prop="cameraIds"> - <el-select v-model="form.cameraIds" multiple> + <el-select v-model="form.cameraIds" multiple clearable> <el-option v-for="item in deviceList" :key="item.id" @@ -139,23 +139,34 @@ </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="workTimeLine"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> <el-date-picker - v-model="form.workTimeLine" + 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="结束时间" + type="datetime" + style="width: 100%" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="预计(整体)完成时间" prop="workTimeLine"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> <el-date-picker - v-model="form.workTimeLine" + v-model="form.expEndTime" format="YYYY-MM-DD HH:mm" value-format="YYYY-MM-DD HH:mm:00" type="datetime" @@ -166,9 +177,19 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="备注" prop="info"> + <el-form-item label="风险辨识" prop="riskIdentification"> <el-input - v-model="form.workContent" + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </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="请输入作业备注" @@ -176,26 +197,26 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-table :data="safeData" style="width: 100%" border> - <el-table-column type="index" label="序号" width="80px"/> - <el-table-column prop="name" label="安全措施"/> - <el-table-column prop="address" label="确认人"> - <template #default="scope"> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <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> +<!-- </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="info"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -206,34 +227,58 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-table :data="form.reviewData" style="width: 100%" border> - <el-table-column prop="item" label="审批签字项目"/> - <el-table-column prop="isCheck" label="是否必签"> +<!-- <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> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-radio-group v-model="scope.row.isCheck"> - <el-radio :label="1">所有必签</el-radio> - <el-radio :label="2">任一</el-radio> - <el-radio :label="3">非必签</el-radio> - </el-radio-group> + <el-form-item label="" prop="acceptUid"> + <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="names" label="审批人"> + <el-table-column prop="approvalUids" label="审批人" align="center"> <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> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in 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="info"> - <el-select v-model="form.operatorUids"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -244,8 +289,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="现场开始结束确认人" prop="info"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -279,79 +324,44 @@ workLevelList: Array<any>, otherWorkList: Array<any>, equipmentDialog: boolean, + props:{}, depProps:{}, - safeData: [] + safetyMeasureBasicList: [] } export default defineComponent({ name: 'fireForm', - components: { - - }, - props:['departList','workerList','deviceList'], + components: {}, + props:['departList','departList2','workerList','deviceList'], setup(props: any, context: any) { const userInfo = useUserInfo() const { userInfos } = storeToRefs(userInfo); const state = reactive<stateType>({ equipmentDialog: false, + safetyMeasureBasicList: [], form: { - operatorUids: [], - workType: 1, - workLevel: null, - workContent: '', - workLocation: '', - maBaseId: null, - hazardIdentification: '', + workType: 1, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], cameraIds: [], - workDetail:{ - hotMethod: '', - otherSpecialWork: [] - }, - receiveUids: [], - workTimeLine: [], - expStartTime: '', - expEndTime: '', - reviewData: [ - { - item: '作业负责人意见', - isCheck: null, - names: [] - }, - { - item: '车间主任意见', - isCheck: null, - names: [] - }, - { - item: '运营安环科意见', - isCheck: null, - names: [] - }, - { - item: '运营单位负责人意见', - isCheck: null, - names: [] - }, - { - item: '事业部安环科意见', - isCheck: null, - names: [] - }, - { - item: '事业部负责人审批意见', - isCheck: null, - names: [] - }, - { - item: '公司主要负责人审批意见', - isCheck: null, - names: [] - }, - { - item: '岗位当班班长验票情况', - isCheck: null, - names: [] - } - ] + workDetail: { + workMethod: '' + } }, workLevelList: [ { @@ -401,31 +411,154 @@ value: 8 } ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, depProps:{ expandTrigger: 'hover', label: 'depName', - value: 'depId' - }, - safeData: [] + value: 'depId', + checkStrictly: true, + emitPath: false + } }); const ruleFormRef = ref<FormInstance>() const applyRules = reactive<FormRules>({ - operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - hazardIdentification: [{ 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' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - "workDetail.hotMethod": [{ 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' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] }); // 页面载入时执行方法 onMounted(() => { - state.form.involvedDepIds = userInfos.value.depId - }); + getBasicData() + }); + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + 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 + }); + } + }; + + const getStartEndIds = ()=>{ + 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 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(',') + } + const res = await workApplyApi().submitFireApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + 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) => { @@ -435,6 +568,12 @@ }; return { renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, Search, ruleFormRef, applyRules, @@ -451,7 +590,7 @@ overflow: hidden; position: relative; overflow-y: scroll; - padding: 40px 0 100px; + padding: 0 0 120px; .homeCard{ width: 100%; padding: 20px; @@ -461,11 +600,13 @@ margin-bottom: 20px; } .applyBtn{ - position: absolute; + position: fixed; + left: 0; + bottom: 0; z-index: 999; width: 100%; background: #fff; - padding-top: 15px; + padding: 20px 0; box-shadow: 0 -3px 8px rgba(150,150,150,.1); display: flex; align-items: center; -- Gitblit v1.9.2