From 96f4f79d2f3cf2aca5de27eefe5203679ba78d90 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期五, 04 七月 2025 19:49:30 +0800
Subject: [PATCH] 1、保养规范页面按照新需求进行调整并开发 2、点检工单页面调整字段展示名称

---
 src/views/eam/base/modules/EamMaintenanceStandardModal.vue |  450 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 271 insertions(+), 179 deletions(-)

diff --git a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
index a25d747..0ece138 100644
--- a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
+++ b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
@@ -8,75 +8,67 @@
     @ok="handleOk"
     @cancel="handleCancel"
     cancelText="鍏抽棴">
+    <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 prop="standardCode" label="瑙勮寖缂栫爜">
+              <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.standardCode" disabled/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item prop="standardName" label="瑙勮寖鍚嶇О">
+              <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="model.standardName"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜">
+              <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId" :disabled="!editable"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
 
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
         <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.standardCode" disabled />
+            <a-form-model-item prop="maintenanceCategory" label="淇濆吇鍒嗙被">
+              <j-dict-select-tag dict-code="maintenance_category" placeholder="璇烽�夋嫨淇濆吇鍒嗙被"
+                                 @change="handleMaintenanceCategoryChange"
+                                 v-model="model.maintenanceCategory" :disabled="!editable"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="鏍囧噯鍚嶇О">
-              <a-input placeholder="璇疯緭鍏ユ爣鍑嗗悕绉�" v-model="model.standardName" />
+            <a-form-model-item label="淇濆吇鍛ㄦ湡鍗曚綅">
+              <a-input readOnly v-model="model.periodUnit" placeholder="鏍规嵁淇濆吇鍒嗙被鑷姩甯﹀嚭"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceCategory" label="淇濆吇鍒嗙被">
-              <j-dict-select-tag dict-code="maintenance_category" placeholder="璇烽�夋嫨淇濆吇鍒嗙被" v-model="model.maintenanceCategory" :disabled="editable" />
+            <a-form-model-item prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡">
+              <a-input-number v-model="model.maintenancePeriod" placeholder="璇疯緭鍏ヤ繚鍏诲懆鏈�" :min="1" :precision="0"
+                              style="width: 100%"/>
             </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="fileCode" label="鏂囦欢缂栧彿">
-              <a-input placeholder="璇疯緭鍏ヤ繚鍏绘爣鍑嗘枃浠剁紪鍙�" v-model="model.fileCode"/>
+            <a-form-model-item prop="initialDate" label="鍒濆鏃ユ湡">
+              <a-date-picker placeholder="璇烽�夋嫨鍒濆鏃ユ湡" v-model="model.initialDate" value-format="YYYY-MM-DD"
+                             style="width: 100%"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialDate" label="鍒濆鏃ユ湡">
-              <a-date-picker placeholder="璇烽�夋嫨鍒濆鏃ユ湡" v-model="model.initialDate" format="YYYY-MM-DD" style="width: 100%" :disabled="editable"/>
+            <a-form-model-item label="瑙勮寖鐘舵��">
+              <j-dict-select-tag dict-code="maintenance_standard_status" placeholder="鏍规嵁娴佺▼杩涘害鑷姩甯﹀嚭"
+                                 v-model="model.standardStatus" disabled/>
             </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" style="width: 100%"/>
+            <a-form-model-item label="瑙勮寖鐗堟湰">
+              <a-input-number v-model="model.standardVersion" placeholder="鏍规嵁娴佺▼杩涘害鑷姩甯﹀嚭" style="width: 100%" disabled/>
             </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="equipmentId" label="璁惧缂栧彿">
-              <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId" :disabled="editable"></lx-search-equipment-select>
-            </a-form-model-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardStatus" label="鏍囧噯鐘舵��">
-              <j-dict-select-tag dict-code="maintenance_standard_status" v-model="model.standardStatus" disabled/>
-            </a-form-model-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardVersion" label="鏍囧噯鐗堟湰">
-              <a-input-number v-model="model.standardVersion" style="width: 100%" disabled/>
-            </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="fileList">
-              <lx-upload :returnUrl="false"
-                         :multiple="false"
-                         v-model="model.fileList"
-                         biz="EamMaintenanceStandard">
-              </lx-upload>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+
         <a-row :gutter="24">
           <j-vxe-table
             ref="editableDetailTable"
@@ -91,7 +83,20 @@
             :loading="detail.loading"
             :dataSource="detail.dataSource"
             :columns="detail.columns"
-            style="margin-top: 8px;"/>
+            style="margin-top: 8px;">
+            <template v-slot:itemPart="props">
+              <a-textarea v-model="props.row.itemPart" allowClear @change="$refs.editableDetailTable.validateTable()"
+                          :placeholder="model.maintenanceCategory!='THIRD_MAINTENANCE'?'浠呬笁淇濋渶瑕佺淮鎶�':'璇疯緭鍏ラ儴浣�'" :rows="1"
+                          autoSize :disabled="model.maintenanceCategory!='THIRD_MAINTENANCE'"/>
+            </template>
+
+            <template v-slot:itemCategory="props">
+              <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode"
+                                 @change="$refs.editableDetailTable.validateTable()"
+                                 :placeholder="getItemCategoryPlaceholder"
+                                 :disabled="!Boolean(model.maintenanceCategory)||model.maintenanceCategory=='THIRD_MAINTENANCE'"/>
+            </template>
+          </j-vxe-table>
         </a-row>
       </a-form-model>
     </a-spin>
@@ -99,55 +104,56 @@
 </template>
 
 <script>
-import { getAction, httpAction } from '@/api/manage'
+  import { getAction, httpAction } from '@/api/manage'
   import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
   import { JVXETypes } from '@/components/jeecg/JVxeTable'
   import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect'
 
   export default {
-    name: "EamMaintenanceStandardModal",
+    name: 'EamMaintenanceStandardModal',
     mixins: [JVxeTableModelMixin],
     components: {
-      LxSearchEquipmentSelect,
+      LxSearchEquipmentSelect
     },
-    data () {
+    data() {
       return {
-        title:"鎿嶄綔",
+        title: '鎿嶄綔',
         visible: false,
         model: {},
-        editable: false,
+        editable: true,
         upgradeFlag: false,
         labelCol: {
           xs: { span: 24 },
-          sm: { span: 5 },
+          sm: { span: 7 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 16 },
+          sm: { span: 16 }
         },
         confirmLoading: false,
+        spinning: false,
         validatorRules: {
           standardName: [
-            { required: true, message: '璇疯緭鍏ユ爣鍑嗗悕绉�!' }
+            { required: true, message: '璇疯緭鍏ヨ鑼冨悕绉�', trigger: 'change' }
           ],
           maintenanceCategory: [
-            { required: true, message: '璇烽�夋嫨淇濆吇鍒嗙被!' }
+            { required: true, message: '璇烽�夋嫨淇濆吇鍒嗙被', trigger: 'change' }
           ],
           initialDate: [
-            { required: true, message: '璇烽�夋嫨鍒濆鏃ユ湡!' }
+            { required: true, message: '璇烽�夋嫨鍒濆鏃ユ湡', trigger: 'change' }
           ],
           maintenancePeriod: [
-            { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈燂紝鍗曚綅锛氬ぉ!' }
+            { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈�', trigger: 'change' }
           ],
           equipmentId: [
-            { required: true, message: '璇烽�夋嫨璁惧!' }
+            { required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' }
           ]
         },
         url: {
-          add: "/eam/maintenanceStandard/add",
-          edit: "/eam/maintenanceStandard/edit",
-          detail: "/eam/eamMaintenanceStandardDetail/queryList",
-          upgrade: '/eam/maintenanceStandard/upgrade',
+          add: '/eam/maintenanceStandard/add',
+          edit: '/eam/maintenanceStandard/edit',
+          detail: '/eam/eamMaintenanceStandardDetail/queryList',
+          upgrade: '/eam/maintenanceStandard/upgrade'
         },
         detail: {
           loading: false,
@@ -156,169 +162,249 @@
             {
               title: 'ID',
               key: 'id',
-              type: JVXETypes.hidden,
+              type: JVXETypes.hidden
             },
             {
               title: 'standardId',
               key: 'standardId',
-              type: JVXETypes.hidden,
+              type: JVXETypes.hidden
             },
             {
-              title: '搴忓彿',
+              title: '椤圭洰搴忓彿',
               key: 'itemCode',
               type: JVXETypes.inputNumber,
-              align:"center",
-              width: 100,
+              align: 'center',
+              placeholder: '璇疯緭鍏ラ」鐩簭鍙�',
+              width: 150,
               validateRules: [
-                {required : true, unique: true, message: '搴忓彿涓嶈兘閲嶅'}
+                { required: true, message: '璇疯緭鍏ラ」鐩簭鍙�' },
+                { unique: true, message: '椤圭洰搴忓彿涓嶈兘閲嶅' }
               ]
             },
             {
               title: '閮ㄤ綅',
               key: 'itemPart',
-              type: JVXETypes.textarea,
-              align:"center",
+              type: JVXETypes.slot,
+              slotName: 'itemPart',
+              placeholder: '璇疯緭鍏ラ儴浣�',
+              align: 'center',
+              validateRules: [{ handler: this.itemPartValidate }]
             },
             {
-              title: '淇濆吇椤�',
+              title: '淇濆吇椤瑰垎绫�',
+              key: 'itemCategory',
+              type: JVXETypes.slot,
+              slotName: 'itemCategory',
+              align: 'center',
+              validateRules: [{ handler: this.itemCategoryValidate }]
+            },
+            {
+              title: '淇濆吇椤圭洰',
               key: 'itemName',
+              placeholder: '璇疯緭鍏ヤ繚鍏婚」鐩�',
               type: JVXETypes.textarea,
-              align:"center",
+              align: 'center',
               validateRules: [
-                {required : true, message: '淇濆吇椤逛笉鑳戒负绌猴紒'}
+                { required: true, message: '璇疯緭鍏ヤ繚鍏婚」鐩�' }
               ]
             },
             {
-              title: '淇濆吇瑕佹眰',
-              key: 'itemDemandAlias',
-              type: JVXETypes.textarea,
-              align:"center",
-            },
-            {
-              title: '妫�鏌ユ爣鍑嗘垨瑕佹眰',
+              title: '淇濆吇瑙勮寖鎴栬姹�',
               key: 'itemDemand',
+              placeholder: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰',
               type: JVXETypes.textarea,
-              align:"center",
+              align: 'center',
               validateRules: [
-                {required : true, message: "淇濆吇瑕佹眰涓嶈兘涓虹┖锛�"}
+                { required: true, message: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰' }
               ]
-            },
-            {
-              title: '妫�鏌ユ柟娉�',
-              key: 'checkMethod',
-              type: JVXETypes.textarea,
-              align:"center",
-            },
+            }
           ],
           toolbarConfig: {
             // prefix 鍓嶇紑锛泂uffix 鍚庣紑
             slot: ['prefix', 'suffix'],
             // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
             btn: ['add', 'remove', 'clearSelection']
-          },
+          }
         }
       }
     },
-    created () {
+    computed: {
+      getItemCategoryPlaceholder() {
+        if (!Boolean(this.model.maintenanceCategory)) return '璇烽�夋嫨淇濆吇鍒嗙被'
+        else {
+          if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') return '璇烽�夋嫨淇濆吇椤瑰垎绫�'
+          else return '涓変繚鏃犻渶缁存姢'
+        }
+      },
+
+      encodedDictCode() {
+        let suffix
+        if (!Boolean(this.model.maintenanceCategory) || this.model.maintenanceCategory === 'THIRD_MAINTENANCE') return
+        else suffix = this.model.maintenanceCategory.split('_')[1]
+
+        const dictCode = `sys_dict_item,item_text,item_value,item_value like '%${suffix}' and dict_id='1940598438685134850'`
+        return encodeURIComponent(dictCode)
+      }
     },
     methods: {
-      add () {
-        this.model = {};
-        this.visible = true;
-        this.editable = false;
-        this.upgradeFlag = false;
-        this.detail.dataSource = [];
+      add() {
+        this.model = {}
+        this.visible = true
+        this.editable = true
+        this.upgradeFlag = false
+        this.detail.dataSource = []
       },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.editable = true;
-        this.upgradeFlag = false;
-        this.detail.dataSource = [];
-        if(record && record.referenceFile) {
-          let obj = JSON.parse(record.referenceFile);
-          this.model.fileList = [obj];
-        }else {
-          this.model.fieldList = [];
-        }
-        this.loadDetail(record.id);
-      },
-      upgrade(record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.editable = true;
-        this.upgradeFlag = true;
-        this.detail.dataSource = [];
-        if(record && record.referenceFile) {
-          let obj = JSON.parse(record.referenceFile);
-          this.model.fileList = [obj];
-        }else {
-          this.model.fieldList = [];
-        }
-        this.loadDetail(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{
-              if(this.upgradeFlag) {
-                httpurl+=this.url.upgrade;
-              }else {
-                httpurl+=this.url.edit;
+      edit(record) {
+        this.model = Object.assign({}, record)
+        this.visible = true
+        this.editable = false
+        this.upgradeFlag = false
+        this.detail.dataSource = []
+        this.loadDetail(record.id)
+      },
+
+      upgrade(record) {
+        this.model = Object.assign({}, record)
+        this.visible = true
+        this.editable = false
+        this.upgradeFlag = true
+        this.detail.dataSource = []
+        this.loadDetail(record.id)
+      },
+
+      /**
+       * 淇濆吇鍒嗙被鍊兼敼鍙樻椂鍚屾椂鏀瑰彉淇濆吇鍛ㄦ湡鍗曚綅浠ュ強淇濆吇椤瑰垎绫�
+       * @param value 淇濆吇鍒嗙被鍊�
+       */
+      handleMaintenanceCategoryChange(value) {
+        switch (value) {
+          case 'THIRD_MAINTENANCE':
+            this.model.periodUnit = '骞�'
+            break
+          case 'SECOND_MAINTENANCE':
+            this.model.periodUnit = '鏈�'
+            break
+          case 'POINT_INSPECTION':
+            this.model.periodUnit = '澶�'
+            break
+          default:
+            delete this.model.periodUnit
+        }
+
+        const tableData = this.$refs.editableDetailTable.getTableData()
+        tableData.forEach(item => {
+          if (value !== 'THIRD_MAINTENANCE') delete item.itemPart
+          delete item.itemCategory
+        })
+        this.detail.dataSource = [...tableData]
+        console.log('tableData', tableData)
+      },
+
+      /**
+       * 淇濆吇閮ㄤ綅鏍¢獙
+       * @param cellValue 杈撳叆鍊�
+       * @param callback 鍥炶皟鍑芥暟
+       */
+      itemPartValidate({ cellValue }, callback) {
+        if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') {
+          if (cellValue) callback(true)
+          else callback(false, '璇烽�夋嫨${title}')
+        } else {
+          callback(true)
+        }
+      },
+
+      /**
+       * 淇濆吇椤瑰垎绫绘牎楠�
+       * @param cellValue 杈撳叆鍊�
+       * @param callback 鍥炶皟鍑芥暟
+       */
+      itemCategoryValidate({ cellValue }, callback) {
+        if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') {
+          callback(true)
+        } else {
+          if (cellValue) callback(true)
+          else callback(false, '璇烽�夋嫨${title}')
+        }
+      },
+
+      // 鎻愪氦浜嬩欢
+      async handleOk() {
+        const that = this
+        let errMap = await that.$refs.editableDetailTable.validateTable()
+        if (errMap) return false
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        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 {
+              if (this.upgradeFlag) {
+                httpUrl += this.url.upgrade
+              } else {
+                httpUrl += this.url.edit
               }
-              method = 'put';
+              method = 'put'
             }
-            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 = false;
-            })
-          }else{
-             return false;
+            httpAction(httpUrl, this.model, method)
+              .then((res) => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.$emit('ok')
+                  that.close()
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = that.spinning = false
+              })
+          } else {
+            return false
           }
         })
       },
-      handleCancel () {
+
+      handleCancel() {
         this.close()
       },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.$refs.form.clearValidate()
+      },
+
       //鍔犺浇璇︽儏鏁版嵁
       loadDetail(standardId) {
-        this.detail.dataSource = [];
+        this.spinning = true
+        this.detail.dataSource = []
         if (standardId) {
-          getAction(this.url.detail, { standardId: standardId }).then(res => {
-            if (res.success) {
-              this.detail.dataSource = [...res.result];
-            }
-          })
+          getAction(this.url.detail, { standardId })
+            .then(res => {
+              if (res.success) {
+                this.detail.dataSource = [...res.result]
+              }
+            })
+            .finally(() => {
+              this.spinning = false
+            })
         }
       }
 
@@ -326,6 +412,12 @@
   }
 </script>
 
-<style lang="less" scoped>
+<style scoped lang="less">
+  /deep/ .ant-select-dropdown-menu {
+    text-align: left;
+  }
 
+  /deep/ textarea.ant-input {
+    resize: none;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3