From 34feb4908ec7b7e5b51adf6355603978c67bd3a4 Mon Sep 17 00:00:00 2001
From: cuijian <cuijian@xalxzn.com>
Date: 星期四, 05 六月 2025 09:53:14 +0800
Subject: [PATCH] 申请单入库

---
 src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue |  561 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 432 insertions(+), 129 deletions(-)

diff --git a/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
index ed26cae..e246065 100644
--- a/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
+++ b/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
@@ -1,154 +1,457 @@
 <template>
   <j-modal
     :title="title"
-    :width="800"
+    :width="1200"
     :visible="visible"
     :confirmLoading="confirmLoading"
     switchFullscreen
+    :mask-closable="false"
     @ok="handleOk"
     @cancel="handleCancel"
     cancelText="鍏抽棴">
-    
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-      
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
-          <a-input-number v-model="model.delFlag"/>
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="宸ュ崟鍙�">
-          <a-input placeholder="璇疯緭鍏ュ伐鍗曞彿" v-model="model.orderNum" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID">
-          <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardId" label="鏍囧噯ID">
-          <a-input placeholder="璇疯緭鍏ユ爣鍑咺D" v-model="model.standardId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStartTime" label="璁″垝寮�濮嬫椂闂�">
-          <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.planStartTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planEndTime" label="璁″垝缁撴潫鏃堕棿">
-          <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.planEndTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="actualStartTime" label="瀹為檯寮�濮嬫椂闂�">
-          <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.actualStartTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="actualEndTime" label="瀹為檯缁撴潫鏃堕棿">
-          <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.actualEndTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="淇濆吇浜�">
-          <a-input placeholder="璇疯緭鍏ヤ繚鍏讳汉" v-model="model.operator" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceStatus" label="淇濆吇鐘舵��">
-          <a-input placeholder="璇疯緭鍏ヤ繚鍏荤姸鎬�" v-model="model.maintenanceStatus" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="creationMethod" label="鍒涘缓鏂瑰紡">
-          <a-input placeholder="璇疯緭鍏ュ垱寤烘柟寮�" v-model="model.creationMethod" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmUser" label="璁惧绠$悊鍛樼‘璁�">
-          <a-input placeholder="璇疯緭鍏ヨ澶囩鐞嗗憳纭" v-model="model.confirmUser" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmTime" label="纭鏃堕棿">
-          <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.confirmTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmStatus" label="纭鐘舵��">
-          <a-input placeholder="璇疯緭鍏ョ‘璁ょ姸鎬�" v-model="model.confirmStatus" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="imageFiles" label="鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧">
-          <a-input placeholder="璇疯緭鍏ョ収鐗囨枃浠秈ds;id浠ラ�楀彿鍒嗛殧" v-model="model.imageFiles" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
-        </a-form-model-item>
-		
+
+    <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="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>
+          </a-col>
+          <a-col :span="8">
+            <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-col :span="8">
+            <a-form-model-item prop="maintenanceDate" label="淇濆吇鏃ユ湡">
+              <a-date-picker placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡" v-model="model.maintenanceDate" format="YYYY-MM-DD"
+                             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>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <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-tabs v-model="activeTabKey">
+            <a-tab-pane key="1" tab="淇濆吇椤�" :forceRender="true">
+              <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-tab-pane>
+            <a-tab-pane key="2" tab="绮惧害鍙傛暟" :forceRender="true">
+              <j-vxe-table
+                ref="editablePrecisionDetailTable"
+                :rowNumber="true"
+                :rowSelection="true"
+                :bordered="true"
+                :alwaysEdit="true"
+                :toolbar="false"
+                :toolbarConfig="precisionDetail.toolbarConfig"
+                keep-source
+                :height="300"
+                :dataSource="precisionDetail.dataSource"
+                :columns="precisionDetail.columns"
+                style="margin-top: 8px;" />
+            </a-tab-pane>
+          </a-tabs>
+        </a-row>
       </a-form-model>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-  import { httpAction } from '@/api/manage'
-  import moment from "moment"
+import { getAction, httpAction } from '@/api/manage'
+import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
+import { JVXETypes } from '@comp/jeecg/JVxeTable'
 
-  export default {
-    name: "EamThirdMaintenanceOrderModal",
-    data () {
-      return {
-        title:"鎿嶄綔",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
+export default {
+  name: 'EamThirdMaintenanceOrderModal',
+  components: { MaintenanceEquipmentSelect },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      editable: false,
+      maintenanceCategory: 'THIRD_MAINTENANCE',
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      labelColLong: {
+        xs: { span: 24 },
+        sm: { span: 2 }
+      },
+      wrapperColLong: {
+        xs: { span: 24 },
+        sm: { span: 21 }
+      },
+      confirmLoading: false,
+      spinning: false,
+      activeTabKey: '1',
+      maintenanceOperatorOptions: [],
+      validatorRules: {
+        equipmentId: [
+          { required: true, message: '璇烽�夋嫨璁惧!' }
+        ],
+        maintenanceDate: [
+          { required: true, message: '璇烽�夋嫨璁″垝淇濆吇鏃ユ湡!' }
+        ]
+      },
+      url: {
+        add: '/eam/thirdMaintenanceOrder/add',
+        edit: '/eam/thirdMaintenanceOrder/edit',
+        standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
+        detail: '/eam/thirdMaintenanceOrderDetail/queryList',
+        userSelect: '/eam/user_select/list',
+        precisionDetail: '/eam/equipmentPrecisionParameters/queryList',
+        precisionCheckDetail: '/eam/precisionCheckDetail/queryList',
+      },
+      detail: {
+        loading: false,
+        dataSource: [],
+        columns: [
+          {
+            title: 'ID',
+            key: 'id',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'orderId',
+            key: 'orderId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: '搴忓彿',
+            key: 'itemCode',
+            type: JVXETypes.inputNumber,
+            width: '10%',
+            align: 'center',
+            validateRules: [
+              { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' }
+            ]
+          },
+          {
+            title: '閮ㄤ綅',
+            key: 'itemPart',
+            type: JVXETypes.textarea,
+            width: '25%',
+            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: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' }
+            ]
+          }
+        ],
+        toolbarConfig: {
+          // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+          slot: ['prefix', 'suffix'],
+          // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+          btn: ['add', 'remove', 'clearSelection']
+        }
+      },
+      precisionDetail: {
+        loading: false,
+        dataSource: [],
+        columns: [
+          {
+            title: 'ID',
+            key: 'id',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'orderId',
+            key: 'orderId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'equipmentId',
+            key: 'equipmentId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'parameterId',
+            key: 'parameterId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: '妫�娴嬮」鐩�',
+            key: 'parameterId_dictText',
+            type: JVXETypes.normal,
+            width: '25%',
+            align: 'center'
+          },
+          {
+            title: '鍙傛暟缂栫爜',
+            key: 'parameterCode_dictText',
+            type: JVXETypes.normal,
+            width: '20%',
+            align: 'center',
+          },
+          {
+            title: '鍏佸樊鍊�',
+            key: 'parameterValue',
+            type: JVXETypes.normal,
+            width: '30%',
+            align: 'center',
+          }
+        ],
+        toolbarConfig: {
+          // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+          slot: ['prefix', 'suffix'],
+          // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+          btn: ['add', 'remove', 'clearSelection']
+        }
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      this.initParams();
+      //鍒濆鍖栭粯璁ゅ��
+      this.model = {}
+      this.visible = true
+      this.editable = false
+      this.detail.dataSource = []
+    },
+    edit(record) {
+      this.initParams();
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.editable = true
+      this.detail.dataSource = []
+      this.loadDetail(record.id)
+      this.loadPrecisionDetail(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]
 
-        confirmLoading: false,
-        validatorRules:{
-        },
-        url: {
-          add: "/eam/eamThirdMaintenanceOrder/add",
-          edit: "/eam/eamThirdMaintenanceOrder/edit",
-        },
+          let precisionDetailList = that.$refs.editablePrecisionDetailTable.getTableData()
+          let removePrecisionDetailList = that.$refs.editablePrecisionDetailTable.getDeleteData()
+          that.model.precisionDetailList = [...precisionDetailList]
+          that.model.removePrecisionDetailList = [...removePrecisionDetailList]
+
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            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
+          })
+        } 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.loadPrecisionParameterList(selectObj.equipmentId)
+      }
+      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
+          })
       }
     },
-    created () {
-    },
-    methods: {
-      add () {
-        //鍒濆鍖栭粯璁ゅ��
-        this.edit({});
-      },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.$refs.form.clearValidate();
-      },
-      handleOk () {
-        const that = this;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉
-         this.$refs.form.validate(valid => {
-          if (valid) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if(!this.model.id){
-              httpurl+=this.url.add;
-              method = 'post';
-            }else{
-              httpurl+=this.url.edit;
-               method = 'put';
-            }
-            httpAction(httpurl,this.model,method).then((res)=>{
-              if(res.success){
-                that.$message.success(res.message);
-                that.$emit('ok');
-              }else{
-                that.$message.warning(res.message);
-              }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
-            })
-          }else{
-             return false;
+    //鏍囧噯閫夋嫨鍙樺寲
+    loadDetail(orderId) {
+      if (orderId) {
+        getAction(this.url.detail, { orderId: orderId }).then(res => {
+          if (res.success) {
+            this.detail.dataSource = [...res.result]
           }
         })
-      },
-      handleCancel () {
-        this.close()
-      },
-
-
-    }
+      }
+    },
+    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
+        })
+    },
+    loadPrecisionParameterList(equipmentId) {
+      this.precisionDetail.dataSource = []
+      if (equipmentId) {
+        this.spinning = true
+        getAction(this.url.precisionDetail, { equipmentId: equipmentId })
+          .then(res => {
+            if (res.success) {
+              this.precisionDetail.dataSource = res.result.map(item => ({
+                equipmentId: item.equipmentId,
+                parameterId: item.parameterId,
+                parameterId_dictText: item.parameterId_dictText,
+                parameterCode_dictText: item.parameterCode_dictText,
+                parameterValue: item.parameterValue,
+              }))
+            }
+          })
+          .finally(() => {
+            this.spinning = false
+          })
+      }
+    },
+    loadPrecisionDetail(orderId) {
+      if (orderId) {
+        getAction(this.url.precisionCheckDetail, { orderId: orderId }).then(res => {
+          if (res.success) {
+            this.precisionDetail.dataSource = [...res.result]
+          }
+        })
+      }
+    },
+    initParams() {
+      this.detail.dataSource = []
+      this.precisionDetail.dataSource = []
+      this.activeTabKey = '1'
+    },
   }
+}
 </script>
 
 <style lang="less" scoped>

--
Gitblit v1.9.3