From dbb3445dc720a8f36b3424e73f2e02a6b0f9deb6 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期日, 27 四月 2025 11:31:57 +0800
Subject: [PATCH] art: 从沃克项目迁移设备管理代码到航宇

---
 src/views/eam/maintenance/modules/EamInspectionOrderModal.vue |  514 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 280 insertions(+), 234 deletions(-)

diff --git a/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue b/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue
index 4c49a93..61258e3 100644
--- a/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue
+++ b/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue
@@ -5,80 +5,70 @@
     :visible="visible"
     :confirmLoading="confirmLoading"
     switchFullscreen
+    centered
+    :mask-closable="false"
     @ok="handleOk"
     @cancel="handleCancel"
     cancelText="鍏抽棴">
 
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
+    <a-spin :spinning="spinning">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
         <a-row :gutter="24">
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="宸ュ崟鍙�">
-              <a-input placeholder="宸ュ崟鍙疯嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled />
+            <a-form-model-item prop="standardCode" label="宸ュ崟鍙�">
+              <a-input placeholder="宸ュ崟鍙疯嚜鍔ㄧ敓鎴�" v-model="model.orderNum" readOnly/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿">
+            <a-form-model-item prop="equipmentId" label="璁惧缂栧彿">
               <MaintenanceEquipmentSelect placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"
-                                          :maintenanceCategory="maintenanceCategory" :disabled="editable"
-                                          @autocompleteForm="autocompleteForm"></MaintenanceEquipmentSelect>
+                                          :maintenanceCategory="maintenanceCategory" :disabled="disabled"
+                                          @autocompleteForm="autocompleteForm"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="鏍囧噯鍚嶇О">
-              <a-input placeholder="璇疯緭鍏ユ爣鍑嗗悕绉�" disabled v-model="model.standardName" />
+            <a-form-model-item prop="standardName" label="鏍囧噯鍚嶇О">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.standardName"/>
             </a-form-model-item>
           </a-col>
         </a-row>
         <a-row :gutter="24">
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="鏍囧噯缂栫爜">
-              <a-input placeholder="璇疯緭鍏ユ爣鍑嗙紪鐮�" disabled v-model="model.standardCode" />
+            <a-form-model-item prop="standardCode" label="鏍囧噯缂栫爜">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.standardCode"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡">
-              <a-input-number v-model="model.maintenancePeriod" :min="1" :precision="0" disabled style="width: 100%" />
+            <a-form-model-item label="淇濆吇鍛ㄦ湡">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.maintenancePeriod" readOnly/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="鐐规浜�">
-              <j-dict-select-tag v-model="model.operator" placeholder="璇烽�夋嫨鐢ㄦ埛" dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
+            <a-form-model-item prop="operator" label="鐐规浜�">
+              <j-search-select-tag v-model="model.operator" placeholder="璇烽�夋嫨鐐规浜�" :disabled="!model.equipmentId"
+                                   :dictOptions="maintenanceOperatorOptions"/>
             </a-form-model-item>
           </a-col>
         </a-row>
 
         <a-row :gutter="24">
           <a-col :span="8">
-            <a-form-model-item label="鐐规鏃ユ湡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
-              <j-date placeholder="璇烽�夋嫨鐐规鏃ユ湡" v-model="model.inspectionDate" @change="expirationTimeFrom(model.inspectionDate)" style="width: 100%" />
+            <a-form-model-item label="鐐规鏃ユ湡" prop="inspectionDate">
+              <j-date :placeholder="!model.maintenancePeriod?'璇峰~鍐欎繚鍏诲懆鏈�':'璇烽�夋嫨鐐规鏃ユ湡'" v-model="model.inspectionDate"
+                      :disabled="!model.maintenancePeriod"
+                      @change="expirationTimeFrom(model.inspectionDate)" style="width: 100%"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item label="鐐规杩囨湡鏃堕棿" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="expirationTime">
-              <j-date placeholder="璇烽�夋嫨鐐规杩囨湡鏃堕棿" v-model="model.expirationTime" disabled style="width: 100%" />
-            </a-form-model-item>
-          </a-col>
-        </a-row>
-        <a-row :gutter="24">
-          <a-col :span="8">
-            <a-form-model-item
-              label="鐓х墖鏂囦欢"
-              :labelCol="labelCol"
-              :wrapperCol="wrapperCol"
-              prop="imageFiles">
-              <lx-upload :returnUrl="false"
-                         :multiple="false"
-                         v-model="model.imageFiles"
-                         biz="EamMaintenanceStandard">
-              </lx-upload>
+            <a-form-model-item label="鐐规杩囨湡鏃堕棿">
+              <j-date placeholder="閫夋嫨鐐规鏃ユ湡鍚庤嚜鍔ㄥ甫鍑�" v-model="model.expirationTime" disabled style="width: 100%"/>
             </a-form-model-item>
           </a-col>
         </a-row>
         <a-row :gutter="24">
           <a-col :span="24">
-            <a-form-model-item label="澶囨敞" :labelCol="{span:1}" :wrapperCol="{span:22}" prop="remark">
-              <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�" />
+            <a-form-model-item label="澶囨敞" :labelCol="{span:2}" :wrapperCol="{span:21}" prop="remark">
+              <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�"/>
             </a-form-model-item>
           </a-col>
         </a-row>
@@ -95,7 +85,7 @@
             :loading="detail.loading"
             :dataSource="detail.dataSource"
             :columns="detail.columns"
-            style="margin-top: 8px;" />
+            style="margin-top: 8px;"/>
         </a-row>
       </a-form-model>
     </a-spin>
@@ -103,215 +93,271 @@
 </template>
 
 <script>
-import { getAction, httpAction } from '@/api/manage'
-import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
-import { JVXETypes } from '@/components/jeecg/JVxeTable'
-import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
-import moment from 'dayjs'
+  import { getAction, httpAction } from '@/api/manage'
+  import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
+  import { JVXETypes } from '@/components/jeecg/JVxeTable'
+  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
+  import moment from 'dayjs'
 
-export default {
-  name: 'EamMaintenanceStandardModal',
-  mixins: [JVxeTableModelMixin],
-  components: {
-    MaintenanceEquipmentSelect
-  },
-  data() {
-    return {
-      title: '鎿嶄綔',
-      visible: false,
-      model: {},
-      editable: false,
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 5 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 16 }
-      },
-      confirmLoading: false,
-      validatorRules: {
-        standardName: [
-          { required: true, message: '璇疯緭鍏ユ爣鍑嗗悕绉�!' }
-        ],
-        maintenanceCategory: [
-          { required: true, message: '璇烽�夋嫨淇濆吇鍒嗙被!' }
-        ],
-        initialDate: [
-          { required: true, message: '璇烽�夋嫨鍒濆鏃ユ湡!' }
-        ],
-        maintenancePeriod: [
-          { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈燂紝鍗曚綅锛氬ぉ!' }
-        ],
-        equipmentId: [
-          { required: true, message: '璇烽�夋嫨璁惧!' }
-        ],
-      },
-      url: {
-        add: '/eam/eamInspectionOrder/add',
-        edit: '/eam/eamInspectionOrder/edit',
-        detail: '/eam/eamMaintenanceStandardDetail/queryList',
-        detailOrder: '/eam/eamInspectionOrderDetail/queryList'
-      },
-      maintenanceCategory: 'POINT_INSPECTION',
-      standardId:"",
-      standardType:false,
-      detail: {
-        loading: false,
-        dataSource: [],
-        columns: [
-          {
-            title: '搴忓彿',
-            key: 'itemCode',
-            type: JVXETypes.inputNumber,
-            width: '10%',
-            align:"center",
-            validateRules: [
-              {required : true, unique: true, message: '搴忓彿涓嶈兘閲嶅'}
-            ]
-          },
-          {
-            title: '淇濆吇椤�',
-            key: 'itemName',
-            type: JVXETypes.textarea,
-            width: '20%',
-            align:"center",
-            validateRules: [
-              {required : true, message: '淇濆吇椤逛笉鑳戒负绌猴紒'}
-            ]
-          },
-          {
-            title: '淇濆吇瑕佹眰',
-            key: 'itemDemand',
-            type: JVXETypes.textarea,
-            width: '30%',
-            align:"center",
-            validateRules: [
-              {required : true, message: "淇濆吇瑕佹眰涓嶈兘涓虹┖锛�"}
-            ]
-          },
-        ]
-      }
-    }
-  },
-  created() {
-  },
-  methods: {
-    add() {
-      this.model = {}
-      this.detail.dataSource = [];
-      this.visible = true
-      this.editable = false
-      this.standardType=false;
+  export default {
+    name: 'EamMaintenanceStandardModal',
+    mixins: [JVxeTableModelMixin],
+    components: {
+      MaintenanceEquipmentSelect
     },
-    edit(record) {
-      console.log(record)
-      this.model = Object.assign({}, record)
-      this.standardId=record.standardId
-      this.standardType=true;
-      this.visible = true
-      this.editable = true
-      this.detail.dataSource = []
-      if (record && record.referenceFile) {
-        let obj = JSON.parse(record.referenceFile)
-        this.model.fileList = [obj]
-      } else {
-        this.model.fieldList = []
-      }
-      this.loadDetailOrder(record.id)
-    },
-    close() {
-      this.$emit('close')
-      this.visible = false
-      this.$refs.form.clearValidate()
-    },
-    async handleOk() {
-      const that = this
-      let errMap = await that.$refs.editableDetailTable.validateTable()
-      if (errMap) {
-        this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
-        return
-      }
-      // 瑙﹀彂琛ㄥ崟楠岃瘉
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          let tableData = that.$refs.editableDetailTable.getTableData()
-          let removeData = that.$refs.editableDetailTable.getDeleteData()
-          that.model.tableDetailList = [...tableData]
-          that.model.removeDetailList = [...removeData]
-
-          that.confirmLoading = true
-          let httpurl = ''
-          let method = ''
-          if (!this.model.id) {
-            httpurl += this.url.add
-            method = 'post'
-          } else {
-            httpurl += this.url.edit
-            method = 'put'
-          }
-          this.model.standardId=this.standardId
-          httpAction(httpurl, this.model, method).then((res) => {
-            if (res.success) {
-              that.$message.success(res.message)
-              that.$emit('ok')
-              that.close()
-            } else {
-              that.$message.warning(res.message)
+    data() {
+      return {
+        title: '鎿嶄綔',
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 6 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 15 }
+        },
+        confirmLoading: false,
+        spinning: false,
+        disabled: false,
+        validatorRules: {
+          // standardName: [
+          //   { required: true, message: '璇疯緭鍏ユ爣鍑嗗悕绉�!' }
+          // ],
+          inspectionDate: [
+            { required: true, message: '璇烽�夋嫨鐐规鏃ユ湡!' }
+          ],
+          // maintenancePeriod: [
+          //   { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈燂紝鍗曚綅锛氬ぉ!' }
+          // ],
+          equipmentId: [
+            { required: true, message: '璇烽�夋嫨璁惧!' }
+          ]
+        },
+        url: {
+          add: '/eam/eamInspectionOrder/add',
+          edit: '/eam/eamInspectionOrder/edit',
+          detail: '/eam/eamMaintenanceStandardDetail/queryList',
+          detailOrder: '/eam/eamInspectionOrderDetail/queryList',
+          userSelect: '/eam/user_select/list'
+        },
+        maintenanceCategory: 'POINT_INSPECTION',
+        maintenanceOperatorOptions: [],
+        standardId: '',
+        standardType: false,
+        detail: {
+          loading: false,
+          dataSource: [],
+          columns: [
+            {
+              title: '搴忓彿',
+              key: 'itemCode',
+              type: JVXETypes.inputNumber,
+              width: '10%',
+              align: 'center',
+              validateRules: [
+                { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' }
+              ]
+            },
+            {
+              title: '淇濆吇椤�',
+              key: 'itemName',
+              type: JVXETypes.textarea,
+              width: '20%',
+              align: 'center',
+              validateRules: [
+                { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' }
+              ]
+            },
+            {
+              title: '淇濆吇瑕佹眰',
+              key: 'itemDemand',
+              type: JVXETypes.textarea,
+              width: '30%',
+              align: 'center',
+              validateRules: [
+                { required: true, message: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' }
+              ]
             }
-          }).finally(() => {
-            that.confirmLoading = false
-          })
-        } else {
-          return false
+          ]
         }
-      })
-    },
-    handleCancel() {
-      this.close()
-    },
-    autocompleteForm(selectObj) {
-      this.model.standardName = selectObj.standardName
-      this.model.maintenancePeriod=selectObj.maintenancePeriod
-      this.model.standardCode=selectObj.standardCode
-      if (!this.standardType) {
-        this.standardId=selectObj.id
-        this.loadDetail(selectObj.id)
       }
     },
-    expirationTimeFrom(date) {
-      //杩囨湡鏃堕棿鏄垵濮嬫椂闂�+淇濆吇鍛ㄦ湡
-      if (date && this.model.maintenancePeriod) {
-        // 杞崲涓烘椂闂存埑瀛楃涓诧紙鎴栨寚瀹氭牸寮忥級
-        this.model.expirationTime = moment(date)
-          .add(this.model.maintenancePeriod, 'days')
-          .format('YYYY-MM-DD')
-      } else {
-        this.model.expirationTime = null; // 娓呯┖鏃犳晥鍊�
-      }
+    created() {
     },
-    //鍔犺浇璇︽儏鏁版嵁
-    loadDetail(standardId) {
-      if (standardId) {
-        getAction(this.url.detail, { standardId: standardId }).then(res => {
-          if (res.success) {
-            this.detail.dataSource = [...res.result]
-            this.standardType=false;
+    methods: {
+      add() {
+        this.model = {}
+        this.detail.dataSource = []
+        this.visible = true
+        this.disabled = false
+        this.standardType = false
+      },
+
+      edit(record) {
+        this.model = Object.assign({}, record)
+        this.standardId = record.standardId
+        this.disabled = true
+        this.standardType = true
+        this.visible = true
+        this.detail.dataSource = []
+        if (record && record.referenceFile) {
+          let obj = JSON.parse(record.referenceFile)
+          this.model.fileList = [obj]
+        } else {
+          this.model.fieldList = []
+        }
+        this.loadDetailOrder(record.id)
+      },
+
+      async handleOk() {
+        const that = this
+        let errMap = await that.$refs.editableDetailTable.validateTable()
+        if (errMap) {
+          this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
+          return
+        }
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            let tableData = that.$refs.editableDetailTable.getTableData()
+            let removeData = that.$refs.editableDetailTable.getDeleteData()
+            that.model.tableDetailList = [...tableData]
+            that.model.removeDetailList = [...removeData]
+
+            that.confirmLoading = that.spinning = true
+            let httpurl = ''
+            let method = ''
+            if (!this.model.id) {
+              httpurl += this.url.add
+              method = 'post'
+            } else {
+              httpurl += this.url.edit
+              method = 'put'
+            }
+            this.model.standardId = this.standardId
+            httpAction(httpurl, this.model, method).then((res) => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+                that.close()
+              } else {
+                that.$message.warning(res.message)
+              }
+            }).finally(() => {
+              that.confirmLoading = that.spinning = false
+            })
+          } else {
+            return false
           }
         })
-      }
-    },
-    loadDetailOrder(orderId){
-      if (orderId) {
-        getAction(this.url.detailOrder, { orderId: orderId }).then(res => {
-          if (res.success) {
-            this.detail.dataSource = [...res.result]
-          }
-        })
+      },
+
+      autocompleteForm(selectObj) {
+        this.model.standardName = selectObj.standardName
+        this.model.maintenancePeriod = selectObj.maintenancePeriod
+        this.model.standardCode = selectObj.standardCode
+        // 鑻ュ彇娑堣澶囬�夋嫨鍚庝繚鍏诲懆鏈熶负绌哄垯闇�娓呯┖鐐规鏃ユ湡鍜岀偣妫�杩囨湡鏃堕棿
+        if (!this.model.equipmentId) {
+          delete this.model.inspectionDate
+          delete this.model.expirationTime
+        } else {
+          // 濡傛灉鐐规鏃ユ湡瀛樺湪锛屽垯鍦ㄩ噸鏂伴�夋嫨璁惧鍚庡嵆淇濆吇鍛ㄦ湡鍙兘鍙戠敓鏀瑰彉鍚庨噸鏂拌绠楄繃鏈熸椂闂�
+          if (this.model.inspectionDate) this.expirationTimeFrom(this.model.inspectionDate)
+        }
+        if (!this.standardType) {
+          console.log('this.standardType', this.standardType)
+          this.standardId = selectObj.id
+          this.loadDetail(selectObj.id)
+        }
+        this.$nextTick(() => this.loadMaintenanceOperatorList(this.model.equipmentId))
+      },
+
+      expirationTimeFrom(date) {
+        //杩囨湡鏃堕棿鏄垵濮嬫椂闂�+淇濆吇鍛ㄦ湡
+        if (date && this.model.maintenancePeriod) {
+          // 杞崲涓烘椂闂存埑瀛楃涓诧紙鎴栨寚瀹氭牸寮忥級
+          this.model.expirationTime = moment(date)
+            .add(this.model.maintenancePeriod, 'days')
+            .format('YYYY-MM-DD')
+        } else {
+          this.model.expirationTime = null // 娓呯┖鏃犳晥鍊�
+        }
+      },
+
+      //鍔犺浇璇︽儏鏁版嵁
+      loadDetail(standardId) {
+        this.detail.dataSource = []
+        if (standardId) {
+          console.log('standardId', standardId)
+          this.spinning = true
+          getAction(this.url.detail, { standardId: standardId })
+            .then(res => {
+              if (res.success) {
+                this.detail.dataSource = [...res.result]
+              }
+            })
+            .finally(() => {
+              this.spinning = false
+            })
+        }
+      },
+
+      loadDetailOrder(orderId) {
+        if (orderId) {
+          this.spinning = true
+          getAction(this.url.detailOrder, { orderId: orderId })
+            .then(res => {
+              if (res.success) {
+                this.detail.dataSource = [...res.result]
+              }
+            })
+            .finally(() => {
+              this.spinning = false
+            })
+        }
+      },
+
+      loadMaintenanceOperatorList(equipmentId) {
+        this.maintenanceOperatorOptions = []
+        let params = { positionCode: 'PCR0001' }
+        if (equipmentId) {
+          params.equipmentId = equipmentId
+        } else {
+          delete this.model.operator
+          return
+        }
+        const that = this
+        getAction(this.url.userSelect, params)
+          .then(res => {
+            if (res.success) {
+              that.maintenanceOperatorOptions = res.result.map(item => ({
+                key: item.id,
+                value: item.username,
+                text: item.realname
+              }))
+              if (!that.maintenanceOperatorOptions.find(item => item.value === that.model.operator)) delete that.model.operator
+            } else {
+              if (that.model.operator) delete that.model.operator
+            }
+          })
+          .catch(err => {
+            if (that.model.operator) delete that.model.operator
+          })
+      },
+
+      handleCancel() {
+        this.close()
+      },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.$refs.form.clearValidate()
       }
     }
   }
-}
 </script>
 
 <style lang="less" scoped>

--
Gitblit v1.9.3