From 722b647891b3d4f120ffb492fea2159b54c20768 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期四, 17 七月 2025 16:43:17 +0800
Subject: [PATCH] 新增二保工单批量新增弹窗

---
 src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue |  347 +++++++++++++++++++++------------------------------------
 1 files changed, 127 insertions(+), 220 deletions(-)

diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
index 07af5c0..337e9c4 100644
--- a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
+++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
@@ -1,105 +1,82 @@
 <template>
-  <j-modal
-    :title="title"
-    :width="1200"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    :mask-closable="false"
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
-
+  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered
+           :mask-closable="false" @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-row>
           <a-col :span="8">
             <a-form-model-item prop="orderNum" label="宸ュ崟鍙�">
               <a-input placeholder="宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item prop="equipmentId" label="璁惧缂栫爜">
-              <maintenance-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"
-                                            :maintenanceCategory="maintenanceCategory"
-                                            @autocompleteForm="autocompleteForm"
-                                            :disabled="editable"></maintenance-equipment-select>
+            <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜">
+              <maintenance-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId"
+                                            maintenanceCategory="SECOND_MAINTENANCE" :allowClear="false"
+                                            @autocompleteForm="autocompleteForm" :disabled="!editable"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <a-form-model-item prop="standardName" label="鏍囧噯鍚嶇О">
+            <a-form-model-item prop="standardName" label="瑙勮寖鍚嶇О">
               <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.standardName" disabled/>
             </a-form-model-item>
           </a-col>
         </a-row>
-        <a-row :gutter="24">
+        <a-row>
           <a-col :span="8">
             <a-form-model-item prop="maintenanceDate" label="淇濆吇鏃ユ湡">
-              <a-date-picker placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡" v-model="model.maintenanceDate" format="YYYY-MM-DD"
+              <a-date-picker v-model="model.maintenanceDate" value-format="YYYY-MM-DD" :allowClear="false"
                              style="width: 100%"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">
-            <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-col :span="8">
-            <a-form-model-item prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡">
-              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.maintenancePeriod" disabled/>
+            <a-form-model-item label="淇濆吇鍛ㄦ湡">
+              <a-input v-model="model.maintenancePeriod" disabled/>
             </a-form-model-item>
           </a-col>
         </a-row>
-        <a-row :gutter="24">
+        <a-row>
           <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞">
             <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/>
           </a-form-model-item>
         </a-row>
-        <a-row :gutter="24">
-          <a-spin :spinning="detail.loading">
-            <j-vxe-table
-              ref="editableDetailTable"
-              :rowNumber="true"
-              :rowSelection="true"
-              :bordered="true"
-              :alwaysEdit="true"
-              :toolbar="true"
-              :toolbarConfig="detail.toolbarConfig"
-              keep-source
-              :height="300"
-              :dataSource="detail.dataSource"
-              :columns="detail.columns"
-              style="margin-top: 8px;"/>
-          </a-spin>
-        </a-row>
+
+        <a-tabs default-active-key="1">
+          <a-tab-pane tab="鎿嶄綔宸�" key="1">
+            <j-vxe-table rowNumber bordered keep-source :height="300" :dataSource="detail.operatorMaintenanceList"
+                         :columns="detail.columns"/>
+          </a-tab-pane>
+          <a-tab-pane tab="缁翠慨宸�" key="2" forceRender>
+            <j-vxe-table rowNumber bordered keep-source :height="300" :dataSource="detail.repairerMaintenanceList"
+                         :columns="detail.columns"/>
+          </a-tab-pane>
+        </a-tabs>
       </a-form-model>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-import { getAction, httpAction } from '@/api/manage'
-import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
-import { JVXETypes } from '@comp/jeecg/JVxeTable'
+  import { getAction, httpAction } from '@/api/manage'
+  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
+  import { JVXETypes } from '@comp/jeecg/JVxeTable'
 
-export default {
-    name: "EamSecondMaintenanceOrderModal",
+  export default {
+    name: 'EamSecondMaintenanceOrderModal',
     components: { MaintenanceEquipmentSelect },
-    data () {
+    data() {
       return {
-        title:"鎿嶄綔",
+        title: '鎿嶄綔',
         visible: false,
-        editable: false,
+        editable: true,
         model: {},
-        maintenanceCategory: 'SECOND_MAINTENANCE',
         labelCol: {
           xs: { span: 24 },
           sm: { span: 6 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 16 }
+          sm: { span: 15 }
         },
         labelColLong: {
           xs: { span: 24 },
@@ -111,24 +88,23 @@
         },
         confirmLoading: false,
         spinning: false,
-        validatorRules:{
+        validatorRules: {
           equipmentId: [
-            { required: true, message: '璇烽�夋嫨璁惧!' }
+            { required: true, message: '璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储', trigger: 'change' }
           ],
           maintenanceDate: [
-            { required: true, message: '璇烽�夋嫨璁″垝淇濆吇鏃ユ湡!' }
+            { required: true, message: '璇烽�夋嫨璁″垝淇濆吇鏃ユ湡', trigger: 'change' }
           ]
         },
         url: {
-          add: "/eam/secondMaintenanceOrder/add",
-          edit: "/eam/secondMaintenanceOrder/edit",
+          add: '/eam/secondMaintenanceOrder/add',
+          edit: '/eam/secondMaintenanceOrder/edit',
           standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
-          detail: '/eam/secondMaintenanceOrderDetail/queryList',
-          userSelect: '/eam/user_select/list'
+          detail: '/eam/secondMaintenanceOrderDetail/queryList'
         },
         detail: {
-          loading: false,
-          dataSource: [],
+          operatorMaintenanceList: [],
+          repairerMaintenanceList: [],
           columns: [
             {
               title: 'ID',
@@ -143,199 +119,130 @@
             {
               title: '搴忓彿',
               key: 'itemCode',
-              type: JVXETypes.inputNumber,
-              width: '10%',
-              align: 'center',
-              validateRules: [
-                { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' }
-              ]
-            },
-            {
-              title: '閮ㄤ綅',
-              key: 'itemPart',
-              type: JVXETypes.textarea,
-              width: '25%',
+              type: JVXETypes.normal,
+              width: 60,
               align: 'center'
             },
             {
               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: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' }
-              ]
+              type: JVXETypes.normal,
+              align: 'center'
             }
-          ],
-          toolbarConfig: {
-            // prefix 鍓嶇紑锛泂uffix 鍚庣紑
-            slot: ['prefix', 'suffix'],
-            // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
-            btn: ['add', 'remove', 'clearSelection']
-          }
+          ]
         }
       }
-    },
-    created () {
     },
     methods: {
       add() {
         //鍒濆鍖栭粯璁ゅ��
-        this.model = {}
-        this.visible = true
-        this.editable = false
-        this.detail.dataSource = []
-      },
-      edit(record) {
-        this.model = Object.assign({}, record)
+        this.model = { maintenancePeriod: 6 }
         this.visible = true
         this.editable = true
-        this.detail.dataSource = []
+        this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
+      },
+
+      edit(record) {
+        this.model = Object.assign({ maintenancePeriod: 6 }, record)
+        this.visible = true
+        this.editable = false
+        this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
         this.loadDetail(record.id)
       },
-      close() {
-        this.$emit('close')
-        this.visible = false
-        this.$refs.form.clearValidate()
+
+      autocompleteForm(selectObj) {
+        this.$set(this.model, 'standardName', selectObj.standardName)
+        this.$set(this.model, 'standardId', selectObj.id)
+        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
+        if (!this.model.id) this.loadStandardDetail(selectObj.id)
       },
+
+      /**
+       * 鑾峰彇淇濆吇瑙勮寖鏁版嵁
+       * @param standardId 瑙勮寖Id
+       */
+      loadStandardDetail(standardId) {
+        this.spinning = true
+        getAction(this.url.standardDetail, { standardId })
+          .then(res => {
+            if (res.success) {
+              this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE')
+              this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE')
+            }
+          })
+          .finally(() => {
+            this.spinning = false
+          })
+      },
+
+      /**
+       * 鑾峰彇浜屼繚宸ュ崟鏄庣粏
+       * @param orderId 宸ュ崟Id
+       */
+      loadDetail(orderId) {
+        this.spinning = true
+        getAction(this.url.detail, { orderId })
+          .then(res => {
+            if (res.success) {
+              this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE')
+              this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE')
+            }
+          })
+          .finally(() => {
+            this.spinning = false
+          })
+      },
+
       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 = ''
+            that.confirmLoading = that.spinning = true
+            let httpUrl = ''
             let method = ''
             if (!this.model.id) {
-              httpurl += this.url.add
+              httpUrl += this.url.add
               method = 'post'
             } else {
-              httpurl += this.url.edit
+              httpUrl += this.url.edit
               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
-            })
+            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() {
         this.close()
       },
-      autocompleteForm(selectObj) {
-        //鏍囧噯鍚嶇О锛屼繚鍏诲懆鏈熶笉鍒锋柊瑙e喅鍔炴硶
-        //鍔炴硶涓�  validatorRules equipmentId 杩樻槸鏈夐棶棰�
-        // const newObj = {
-        //   standardName: selectObj.standardName,
-        //   maintenancePeriod: selectObj.maintenancePeriod,
-        //   standardId : selectObj.id,
-        //   equipmentId: selectObj.equipmentId,
-        // };
-        // this.model = Object.assign({}, newObj, this.model)
-        //鍔炴硶浜�
-        this.$set(this.model, 'standardName', selectObj.standardName)
-        this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
-        this.$set(this.model, 'standardId', selectObj.id)
-        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
-        // console.log('model', this.model)
-        if (!this.model.equipmentId) delete this.model.operator
-        if (!this.model.id) {
-          this.loadStandardDetail(selectObj.id)
-        }
-        this.loadMaintenanceOperatorList(this.model.equipmentId)
-      },
-      //鍔犺浇璇︽儏鏁版嵁
-      loadStandardDetail(standardId) {
-        this.detail.dataSource = []
-        if (standardId) {
-          this.spinning = true
-          getAction(this.url.standardDetail, { standardId: standardId })
-            .then(res => {
-              if (res.success) {
-                this.detail.dataSource = res.result.map(item => ({
-                  itemCode: item.itemCode,
-                  itemName: item.itemName,
-                  itemPart: item.itemPart,
-                  itemDemand: item.itemDemand
-                }))
-              }
-            })
-            .finally(() => {
-              this.spinning = false
-            })
-        }
-      },
-      //鏍囧噯閫夋嫨鍙樺寲
-      loadDetail(orderId) {
-        if (orderId) {
-          getAction(this.url.detail, { orderId: orderId }).then(res => {
-            if (res.success) {
-              this.detail.dataSource = [...res.result]
-            }
-          })
-        }
-      },
-      loadMaintenanceOperatorList(equipmentId) {
-        this.maintenanceOperatorOptions = []
-        let params = { positionCode: 'PCR0001' }
-        if (equipmentId) {
-          params.equipmentId = equipmentId
-        }
-        else 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
-          })
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.$refs.form.clearValidate()
       }
 
     }
   }
 </script>
-
-<style lang="less" scoped>
-
-</style>
\ No newline at end of file

--
Gitblit v1.9.3