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