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/maintainRecord/components/editDialog.vue | 553 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 553 insertions(+), 0 deletions(-) diff --git a/src/views/work/qualityInfo/infrastructureMng/maintainRecord/components/editDialog.vue b/src/views/work/qualityInfo/infrastructureMng/maintainRecord/components/editDialog.vue new file mode 100644 index 0000000..a5e1985 --- /dev/null +++ b/src/views/work/qualityInfo/infrastructureMng/maintainRecord/components/editDialog.vue @@ -0,0 +1,553 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="state.title" + width="75%" + :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="deviceNumber"> + <el-input v-model.trim="state.form.deviceNumber" :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-row> + + <el-table :data="state.maintainList" :border="true" class="customedTable" :span-method="objectSpanMethod" style="margin-bottom: 30px"> + <el-table-column label="保养内容" align="center" width="100"> + <template #default="scope"> + 保养内容 + </template> + </el-table-column> + <el-table-column label="标准" prop="standard" align="center"> + <template #default="scope"> + <p style="margin: 0;text-align: left">{{scope.row.standard}}</p> + </template> + </el-table-column> + <el-table-column label="保养等级" prop="level" align="center"/> + <el-table-column label="结论" prop="conclusion" align="center"> + <template #default="scope"> + <el-input + v-model.trim="scope.row.conclusion" + size="large" + type="textarea" + style="width: 100%" + :readonly="state.title =='查看'" + > + </el-input> + </template> + </el-table-column> + <el-table-column label="整改措施" prop="rectificationMeasures" align="center"> + <template #default="scope"> + <el-input + v-model.trim="scope.row.rectificationMeasures" + size="large" + type="textarea" + style="width: 100%" + :readonly="state.title =='查看'" + > + </el-input> + </template> + </el-table-column> + </el-table> + <el-form-item label="设备保养验收结论:" prop="conclusion"> + <el-input v-model.trim="state.form.conclusion" type="textarea" :autosize="{ minRows: 2 }" :readonly="state.title =='查看'"></el-input> + </el-form-item> + 一级保养 + <el-row> + <el-col :span="6"> + <el-form-item label="操作工:" prop="operatorsOne"> + <el-select clearable v-model="state.form.operatorsOne" :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="6"> + <el-form-item label="日期:" prop="operateDateOne"> + <el-date-picker + v-model="state.form.operateDateOne" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择日期" + :disabled="state.title =='查看'" + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="检查:" prop="checkersOne"> + <el-select clearable v-model="state.form.checkersOne" :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="6"> + <el-form-item label="日期:" prop="checkDateOne"> + <el-date-picker + v-model="state.form.checkDateOne" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择日期" + :disabled="state.title =='查看'" + /> + </el-form-item> + </el-col> + </el-row> + 二级保养 + <el-row> + <el-col :span="6"> + <el-form-item label="操作工:" prop="operatorsTwo"> + <el-select clearable v-model="state.form.operatorsTwo" :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="6"> + <el-form-item label="日期:" prop="operateDateTwo"> + <el-date-picker + v-model="state.form.operateDateTwo" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择日期" + :disabled="state.title =='查看'" + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="检查:" prop="checkersTwo"> + <el-select clearable v-model="state.form.checkersTwo" :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="6"> + <el-form-item label="日期:" prop="checkDateTwo"> + <el-date-picker + v-model="state.form.checkDateTwo" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择日期" + :disabled="state.title =='查看'" + /> + </el-form-item> + </el-col> + </el-row> + + </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 {getMaintenanceServiceDetail, updateMaintenanceService} from "@/api/infrastructureMng/ledger"; + +const emit = defineEmits(["getList"]); +const dialogVisible = ref(false) +const superRef = ref() +const checkFiles = (rule, value, callback) => { + if (state.fileList.length == 0) { + callback(new Error('请上传文件')) + } else { + callback() + } +} +const state = reactive({ + title: '', + form: { + id: null, + companyId: null, + deviceName: '', + deviceNumber: '', + number: '', + annualMaintenanceServiceContentList: [], + annualMaintenanceServiceUserList: [], + conclusion: '', + operatorsOne: [], + operateDateOne: '', + checkersOne: [], + checkDateOne: '', + operatorsTwo: [], + operateDateTwo: '', + checkersTwo: [], + checkDateTwo: '', + delServiceUserIds: [] + }, + oldServiceUsers: [], + maintainList: [ + { + id: null, + serviceType: 1, + standard: '1、设备内外清洁,无黄油、油垢、锈蚀,油质符合要求。', + level: '一、二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 2, + standard: '2、根据设备情况、进行部分零件拆解、清洗、修复。对各紧固零件进行检查、修复,各部配合间隙进行适当调整。', + level: '一、二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 3, + standard: '3、清洗毛毡、油线、滤油器;清理油路、管道、加足润滑油和润滑脂,补齐各种缺欠,保持无黄袍。', + level: '一、二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 4, + standard: '4、对设备所有二操纵机构,各种挡铁、限位开关调修至灵敏可靠,将各种防尘、防屑、装置清洗修复至完整好用。', + level: '一、二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 5, + standard: '5、各润滑部位进行全部清洗,结合换油周期进行换油,油质油量符合要求。', + level: '二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 6, + standard: '6、检查设备的技术状况,调整安装水平,根据设备的使用情况进行全部或部分解体检查、清洗,调整各部分的配合精度。', + level: '二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 7, + standard: '7、修复或更换磨损部件、零件,并为下一次二保或大修做好备件资料准备。', + level: '二级', + conclusion: '', + rectificationMeasures: '' + },{ + id: null, + serviceType: 8, + standard: '8、零部件完整,随机附件基本齐全并保管好。', + level: '二级', + conclusion: '', + rectificationMeasures: '' + } + ], + formRules:{ + companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], + deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], + deviceNumber: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], + number: [{ required: true, message: '请填写表单编号', trigger: 'blur' }] + }, + isAdmin: false, + companyList: [], + 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 objectSpanMethod = ({row, column, rowIndex, columnIndex,}) => { + if (columnIndex === 0) { + if (rowIndex === 0) { + return { + rowspan: state.maintainList.length, + colspan: 1 + } + } else { + return { + rowspan: 0, + colspan: 0 + } + } + } +} + +const onSubmit = async () => { + const valid = await superRef.value.validate(); + if(valid){ + const data = JSON.parse(JSON.stringify(state.form)) + data.operatorsOne = data.operatorsOne.map(i=>{ + return { + id: i.id || null, + annualMaintenanceServiceId: i.annualMaintenanceServiceId || null, + userId: i.userId, + userName: i.name, + userType: 1, + checkDate: data.operateDateOne + } + }) + data.checkersOne = data.checkersOne.map(i=>{ + return { + id: i.id || null, + annualMaintenanceServiceId: i.annualMaintenanceServiceId || null, + userId: i.userId, + userName: i.name, + userType: 2, + checkDate: data.checkDateOne + } + }) + data.operatorsTwo = data.operatorsTwo.map(i=>{ + return { + id: i.id || null, + annualMaintenanceServiceId: i.annualMaintenanceServiceId || null, + userId: i.userId, + userName: i.name, + userType: 3, + checkDate: data.operateDateTwo + } + }) + data.checkersTwo = data.checkersTwo.map(i=>{ + return { + id: i.id || null, + annualMaintenanceServiceId: i.annualMaintenanceServiceId || null, + userId: i.userId, + userName: i.name, + userType: 4, + checkDate: data.checkDateTwo + } + }) + data.annualMaintenanceServiceUserList = [...data.operatorsOne,...data.checkersOne,...data.operatorsTwo,...data.checkersTwo] + data.delServiceUserIds = state.oldServiceUsers.filter(i =>!data.annualMaintenanceServiceUserList.some(item=>item.id == i.id)).map(i=>i.id) + data.annualMaintenanceServiceContentList = state.maintainList.map(item=>{ + return { + id: item.id, + serviceType: item.serviceType, + conclusion: item.conclusion, + rectificationMeasures: item.rectificationMeasures + } + }) + delete data.operatorsOne + delete data.checkersOne + delete data.operatorsTwo + delete data.checkersTwo + delete data.operateDateOne + delete data.checkDateOne + delete data.operateDateTwo + delete data.checkDateTwo + if(state.title == '新增'){ + delete data.id + const res = await updateMaintenanceService(data) + if(res.code == 200){ + ElMessage.success(res.message) + emit('getList') + handleClose() + dialogVisible.value = false; + }else{ + ElMessage.warning(res.message) + } + }else{ + const res = await updateMaintenanceService(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 getMaintenanceServiceDetail({id: id}) + if(res.code == 200){ + Object.keys(state.form).forEach(key => { + if (key in res.data) { + state.form[key] = res.data[key] + } + }) + state.oldServiceUsers = state.form.annualMaintenanceServiceUserList?.map(item=>{ + return { + id: item.id, + annualMaintenanceServiceId: item.annualMaintenanceServiceId, + userId: item.userId, + name: item.userName, + userType: item.userType, + checkDate: item.checkDate.substring(0,10) + } + }) + state.form.operatorsOne = state.oldServiceUsers.filter(i=>i.userType == 1) + state.form.checkersOne = state.oldServiceUsers.filter(i=>i.userType == 2) + state.form.operatorsTwo = state.oldServiceUsers.filter(i=>i.userType == 3) + state.form.checkersTwo = state.oldServiceUsers.filter(i=>i.userType == 4) + state.form.operateDateOne = state.form.operatorsOne[0].checkDate || '' + state.form.checkDateOne = state.form.checkersOne[0].checkDate || '' + state.form.operateDateTwo = state.form.operatorsTwo[0].checkDate || '' + state.form.checkDateTwo = state.form.checkersTwo[0].checkDate || '' + state.maintainList = state.maintainList.map(item=>{ + return { + id: state.form.annualMaintenanceServiceContentList.find(i=>i.serviceType == item.serviceType)?.id, + serviceType: item.serviceType, + standard: item.standard, + level: item.level, + conclusion: state.form.annualMaintenanceServiceContentList.find(i=>i.serviceType == item.serviceType)?.conclusion, + rectificationMeasures: state.form.annualMaintenanceServiceContentList.find(i=>i.serviceType == item.serviceType)?.rectificationMeasures, + } + }) + }else{ + ElMessage.warning(res.message) + } +} + +const getDeptList = async ()=>{ + state.form.operatorsOne = [] + state.form.checkersOne = [] + state.form.operatorsTwo = [] + state.form.checkersTwo = [] + 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, + companyId: null, + deviceName: '', + deviceNumber: '', + number: '', + annualMaintenanceServiceContentList: [], + annualMaintenanceServiceUserList: [], + conclusion: '', + operatorsOne: [], + operateDateOne: '', + checkersOne: [], + checkDateOne: '', + operatorsTwo: [], + operateDateTwo: '', + checkersTwo: [], + checkDateTwo: '', + delServiceUserIds: [] + } + state.maintainList = state.maintainList.map(i=>{ + return { + serviceType: i.serviceType, + standard: i.standard, + level: i.level, + conclusion: '', + rectificationMeasures: '' + } + }) + 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> +<style lang="scss"> +.customedTable{ + .el-table__cell{ + padding: 2px 0 !important; + font-size: 14px !important; + } + .cell{ + padding: 0 2px !important; + font-size: 14px !important; + } +} +</style> -- Gitblit v1.9.2