From 7e810cf016d1b637b693eeca4a4d8447083c68e2 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期四, 07 八月 2025 14:59:34 +0800 Subject: [PATCH] 修改 --- src/views/work/qualityInfo/infrastructureMng/repairRecord/components/editDialog.vue | 463 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 463 insertions(+), 0 deletions(-) diff --git a/src/views/work/qualityInfo/infrastructureMng/repairRecord/components/editDialog.vue b/src/views/work/qualityInfo/infrastructureMng/repairRecord/components/editDialog.vue new file mode 100644 index 0000000..b1ce2ca --- /dev/null +++ b/src/views/work/qualityInfo/infrastructureMng/repairRecord/components/editDialog.vue @@ -0,0 +1,463 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="state.title" + width="50%" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" > + <el-form-item v-if="state.isAdmin" label="企业:" prop="companyId"> + <el-select v-model="state.form.companyId" placeholder="请选择" :disabled="state.title =='查看'" clearable @change="getDeptList"> + <el-option + v-for="item in state.companyList" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-row> + <el-col :span="8"> + <el-form-item label="设备名称:" prop="deviceName"> + <el-input v-model.trim="state.form.deviceName" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="设备编号:" prop="number"> + <el-input v-model.trim="state.form.number" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="表单编号:" prop="formNumber"> + <el-input v-model.trim="state.form.formNumber" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="故障发生日期:" prop="faultDate"> + <el-date-picker + v-model="state.form.faultDate" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择故障发生日期" + :disabled="state.title =='查看'" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="要求维修日期:" prop="repairDate"> + <el-date-picker + v-model="state.form.repairDate" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择要求维修日期" + :disabled="state.title =='查看'" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="故障现象:" prop="failurePhenomenon"> + <el-input v-model.trim="state.form.failurePhenomenon" type="textarea" :autosize="{ minRows: 2 }" :readonly="state.title =='查看'"></el-input> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item label="设施操作/管理员:" prop="maintainUsers"> + <el-select clearable v-model="state.form.maintainUsers" :disabled="state.title =='查看'" value-key="userId" filterable multiple placeholder="设施操作/管理员" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="主管:" prop="managerId"> + <el-select clearable v-model="state.form.managerId" :disabled="state.title =='查看'" filterable placeholder="主管" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item.userId" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="故障原因及排除方法:" prop="faultCause"> + <el-input v-model.trim="state.form.faultCause" type="textarea" :autosize="{ minRows: 2 }" :readonly="state.title =='查看'"></el-input> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item label="维修方式:" prop="maintenanceMethod"> + <el-radio-group v-model="state.form.maintenanceMethod" :disabled="state.title =='查看'"> + <el-radio :label="1">内部维修</el-radio> + <el-radio :label="2">委外维修</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="委外地点:" prop="outsourcingLocation"> + <el-input v-model.trim="state.form.outsourcingLocation" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="维修工时:" prop="repairTime"> + <el-input v-model.trim="state.form.repairTime" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="停机时间:" prop="downTime"> + <el-date-picker + v-model="state.form.downTime" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择停机时间" + :disabled="state.title =='查看'" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="更换材料:" prop="replaceMaterials"> + <el-input v-model.trim="state.form.replaceMaterials" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="金额(元):" prop="money"> + <el-input v-model.trim="state.form.money" :disabled="state.title =='查看'"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="维修员:" prop="repairUsers"> + <el-select clearable v-model="state.form.repairUsers" :disabled="state.title =='查看'" value-key="userId" filterable multiple placeholder="维修员" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="设备科主管:" prop="deviceManagerId"> + <el-select clearable v-model="state.form.deviceManagerId" :disabled="state.title =='查看'" filterableplaceholder="设备科主管" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item.userId" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="备注:" prop="remark"> + <el-input v-model.trim="state.form.remark" type="textarea" :autosize="{ minRows: 2 }" :readonly="state.title =='查看'"></el-input> + </el-form-item> + <el-form-item label="设施管理部门验收确认:" prop="acceptanceConfirmation"> + <el-input v-model.trim="state.form.acceptanceConfirmation" type="textarea" :autosize="{ minRows: 2 }" :readonly="state.title =='查看'"></el-input> + </el-form-item> + <el-form-item label="编制:" prop="establishmentId"> + <el-select clearable v-model="state.form.establishmentId" :disabled="state.title =='查看'" filterable placeholder="编制人" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item.userId" + /> + </el-select> + </el-form-item> + <el-form-item label="审核:" prop="processId"> + <el-select clearable v-model="state.form.processId" :disabled="state.title =='查看'" filterable placeholder="审核人" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item.userId" + /> + </el-select> + </el-form-item> + <el-form-item label="批准:" prop="approvalId"> + <el-select clearable v-model="state.form.approvalId" :disabled="state.title =='查看'" filterable placeholder="批准人" style="width: 100%"> + <el-option + v-for="item in state.userList" + :key="item.userId" + :label="item.name" + :value="item.userId" + /> + </el-select> + </el-form-item> + </el-form> + <template #footer v-if="state.title !='查看'"> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script setup> +import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue' +import {ElMessage} from "element-plus"; +import {Base64} from "js-base64" +import {getToken} from "@/utils/auth"; +import { + addInternalAuditCheck, getInternalAuditCheckInfo, + updateInternalAuditCheck +} from "@/api/innerReview/meetingReview"; +import {getDepart} from "@/api/orgStructure/depart"; +import {listUser} from "@/api/system/user"; +import {getMaintenanceRecordDetail, updateMaintenanceRecord} from "@/api/infrastructureMng/ledger"; + +const emit = defineEmits(["getList"]); +const dialogVisible = ref(false) +const superRef = ref() + +const state = reactive({ + title: '', + form: { + id: null, + deviceName: '', + number: '', + formNumber: '', + faultDate: '', + repairDate: '', + failurePhenomenon: '', + maintainUsers: [], + managerId: null, + managerName: '', + faultCause: '', + maintenanceMethod: null, + outsourcingLocation: '', + repairTime: '', + downTime: '', + replaceMaterials: '', + money: '', + repairUsers: [], + annualMaintenanceRecordUsers: [], + deviceManagerId: null, + deviceManagerName: '', + remark: '', + acceptanceConfirmation: '', + establishmentId: null, + processId: null, + approvalId: null, + companyId: null + }, + formRules:{ + companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], + deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], + number: [{ required: true, message: '请填写编号', trigger: 'blur' }], + formNumber: [{ required: true, message: '请填写表单编号', trigger: 'blur' }], + faultDate: [{ required: true, message: '请选择故障发生日期', trigger: 'blur' }], + repairDate: [{ required: true, message: '请选择要求维修日期', trigger: 'blur' }], + failurePhenomenon: [{ required: true, message: '请填写故障现象', trigger: 'blur' }], + maintainUsers: [{ required: true, message: '请选择设施操作/管理员', trigger: 'blur' }], + managerId: [{ required: true, message: '请选择主管', trigger: 'blur' }], + faultCause: [{ required: true, message: '请填写故障原因及排除方法', trigger: 'blur' }], + maintenanceMethod: [{ required: true, message: '请选择维修方式', trigger: 'blur' }], + establishmentId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], + processId: [{ required: true, message: '请选择审核人', trigger: 'blur' }], + approvalId: [{ required: true, message: '请选择批准人', trigger: 'blur' }] + }, + isAdmin: false, + companyList: [], + oldRecordUsers: [], + userList: [] +}) +onMounted(() => { + +}); + +const openDialog = async (type, value,companyId, isAdmin, companyList) => { + state.isAdmin = isAdmin + if(isAdmin){ + state.companyList = companyList + } + await getUserList(companyId) + state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' + state.form.companyId = companyId + if(state.title == '编辑'||state.title == '查看'){ + await getInfo(value.id) + } + dialogVisible.value = true +} + + +const onSubmit = async () => { + const valid = await superRef.value.validate() + if(valid){ + const data = JSON.parse(JSON.stringify(state.form)) + data.maintainUsers = data.maintainUsers.map(i=>{ + return { + id: i.id || null, + annualMaintenanceRecordId: i.annualMaintenanceRecordId || null, + userId: i.userId, + userName: i.name, + userType: 1 + } + }) + data.repairUsers = data.repairUsers.map(i=>{ + return { + id: i.id || null, + annualMaintenanceRecordId: i.annualMaintenanceRecordId || null, + userId: i.userId, + userName: i.name, + userType: 2 + } + }) + data.annualMaintenanceRecordUsers = data.maintainUsers.concat(data.repairUsers) + data.managerName = state.userList.find(i=>i.userId == data.managerId)?.name + data.deviceManagerName = state.userList.find(i=>i.userId == data.deviceManagerId)?.name + data.establishmentName = state.userList.find(i=>i.userId == data.establishmentId)?.name + data.processName = state.userList.find(i=>i.userId == data.processId)?.name + data.approvalName = state.userList.find(i=>i.userId == data.approvalId)?.name + data.delRecordUserIds = state.oldRecordUsers.filter(oldItem => !data.annualMaintenanceRecordUsers.some(newItem => newItem.id === oldItem.id)).map(item => item.id) + delete data.maintainUsers + delete data.repairUsers + if(state.title == '新增'){ + delete data.id + const res = await updateMaintenanceRecord(data) + if(res.code == 200){ + ElMessage.success(res.message) + emit('getList') + handleClose() + dialogVisible.value = false; + }else{ + ElMessage.warning(res.message) + } + }else{ + const res = await updateMaintenanceRecord(data) + if(res.code == 200){ + ElMessage.success(res.message) + emit('getList') + handleClose() + dialogVisible.value = false; + }else{ + ElMessage.warning(res.message) + } + } + } +} + +const getInfo = async (id)=> { + const res = await getMaintenanceRecordDetail({id: id}) + if(res.code == 200){ + Object.keys(state.form).forEach(key => { + if (key in res.data) { + state.form[key] = res.data[key] + } + }) + state.oldRecordUsers = state.form.annualMaintenanceRecordUsers?.map(item=>{ + return { + id: item.id, + annualMaintenanceRecordId: item.annualMaintenanceRecordId, + userId: item.userId, + name: item.userName, + userType: item.userType + } + }) + state.form.maintainUsers = state.oldRecordUsers.filter(i=>i.userType == 1) + state.form.repairUsers = state.oldRecordUsers.filter(i=>i.userType == 2) + }else{ + ElMessage.warning(res.message) + } +} + +const getDeptList = async ()=>{ + state.form.maintainUsers = [] + state.form.managerId = null + state.form.repairUsers = [] + state.form.annualMaintenanceRecordUsers = [] + state.form.deviceManagerId = null + state.form.establishmentId = null + state.form.processId = null + state.form.approvalId = null + await getUserList(state.form.companyId) +} + +const getUserList = async (companyId)=> { + const res = await listUser({pageIndex: 1,pageSize: 999, companyId: companyId}) + if(res.code == 200){ + state.userList = res.data.list?res.data.list.map(item=>{ + const user = item.id + const {id, ...data} = item + return { + ...data, + userId: user + } + }):[] + }else{ + ElMessage.warning(res.message) + } +} + +const handleClose = () => { + state.form = { + id: null, + deviceName: '', + number: '', + formNumber: '', + faultDate: '', + repairDate: '', + failurePhenomenon: '', + maintainUsers: [], + managerId: null, + faultCause: '', + maintenanceMethod: null, + outsourcingLocation: '', + repairTime: '', + downTime: '', + replaceMaterials: '', + money: '', + repairUsers: [], + annualMaintenanceRecordUsers: [], + deviceManagerId: null, + deviceManagerName: '', + remark: '', + acceptanceConfirmation: '', + establishmentId: null, + processId: null, + approvalId: null, + companyId: null + } + state.fileList = [] + superRef.value.clearValidate(); + superRef.value.resetFields() + dialogVisible.value = false; +} + +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } +} +</style> -- Gitblit v1.9.2