From 19aff1ac87030b21d2b01cdca5d5604c840ba7c0 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 21 七月 2025 21:36:31 +0800
Subject: [PATCH] 维修工单

---
 src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue |  461 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 311 insertions(+), 150 deletions(-)

diff --git a/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue b/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue
index 038abde..183bbde 100644
--- a/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue
+++ b/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue
@@ -1,86 +1,173 @@
 <template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    @ok="handleOk"
-    @cancel="close"
-    :mask-closable="false"
-    cancelText="鍏抽棴">
+  <j-modal :title="title" fullscreen :visible="visible" :confirmLoading="confirmLoading"
+           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @ok="handleOk" @cancel="handleCancel"
+           cancelText="鍏抽棴">
     <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
-        <a-row>
-          <a-col :span="12">
-            <a-form-model-item prop="equipmentId" label="璁惧缂栧彿">
-              <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"/>
-            </a-form-model-item>
-          </a-col>
+      <j-form-container :disabled="disableSubmit">
+        <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol"
+                      :wrapperCol="wrapperCol" slot="detail">
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜">
+                <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId" :allowClear="false"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-          <a-col :span="12">
-            <a-form-model-item prop="faultName" label="鏁呴殰绠�绉�">
-              <a-select placeholder="璇烽�夋嫨鏁呴殰绠�绉�" v-model="model.faultName" @change="handleFaultNameChange">
-                <a-select-option v-for="item in faultReasonList" :key="item.faultName">
-                  {{ item.faultName }}
-                </a-select-option>
-              </a-select>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏄惁鍋滄満">
+                <j-dict-select-tag type="radio" dict-code="yn" placeholder="璇烽�夋嫨鏄惁鍋滄満" v-model="model.breakdownFlag"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏁呴殰寮�濮嬫椂闂�" prop="faultStartTime">
+                <a-date-picker v-model="model.faultStartTime" :allowClear="false" value-format="YYYY-MM-DD"
+                               style="width:100%"/>
+              </a-form-model-item>
+            </a-col>
 
-        <a-row>
-          <a-col :span="12">
-            <a-form-model-item label="鏁呴殰鍒嗙被">
-              <a-input placeholder="璇疯緭鍏ユ晠闅滃垎绫�" v-model="model.faultType_dictText" readOnly/>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+            <a-col :span="12">
+              <a-form-model-item label="鏁呴殰鐜拌薄" prop="faultDescription" :labelCol="labelColLong"
+                                 :wrapperCol="wrapperColLong">
+                <a-textarea placeholder="璇疯緭鍏ユ晠闅滅幇璞�" v-model="model.faultDescription"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-        <a-row>
-          <a-col :span="24">
-            <a-form-model-item label="鏁呴殰鎻忚堪" prop="faultDescription" :labelCol="labelColLong"
-                               :wrapperCol="wrapperColLong">
-              <a-textarea placeholder="璇疯緭鍏ユ晠闅滄弿杩�" v-model="model.faultDescription"/>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏄惁鍔犲伐">
+                <j-dict-select-tag dict-code="yn" type="radio" v-model="model.isProcessed"
+                                   @change="handleRadioChange($event,'batchNumber,processingPart,quantity')"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鎵规鍙�" prop="batchNumber">
+                <a-input :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ユ壒娆″彿" v-model="model.batchNumber"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鍔犲伐闆朵欢鍙�" prop="processingPart">
+                <a-input :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ュ姞宸ラ浂浠跺彿"
+                         v-model="model.processingPart"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="浠舵暟" prop="quantity">
+                <a-input-number :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ヤ欢鏁�" v-model="model.quantity"
+                                :min="0" style="width: 100%"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-        <a-row>
-          <a-col :span="12">
-            <a-form-model-item prop="faultStartTime" label="鏁呴殰寮�濮嬫椂闂�">
-              <a-date-picker showTime placeholder="璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�" v-model="model.faultStartTime"
-                             :allow-clear="false" value-format="YYYY-MM-DD HH:mm:ss" :disabledDate="disabledDate"
-                             :disabledTime="disabledTime"/>
-            </a-form-model-item>
-          </a-col>
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item label="璁惧浜嬫晠">
+                <j-dict-select-tag dict-code="yn" type="radio" placeholder="璇烽�夋嫨璁惧浜嬫晠"
+                                   v-model="model.isAccidentsRegister" @change="handleRadioChange($event,'scrapPartNumber,scrapPartQuantity,' +
+                                    'scrapPartValue,operationCertificate,powerOffRestart,batchFirstPiece,variableFactors,variableFactorsValue,'+
+                                    'executeNc,accidentPhenomenon,measure,causingResults')"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="搴熷搧浠跺彿" prop="scrapPartNumber">
+                <a-input placeholder="璇疯緭鍏ュ簾鍝佷欢鍙�" :disabled="!Boolean(+model.isAccidentsRegister)"
+                         v-model="model.scrapPartNumber"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="搴熷搧浠舵暟" prop="scrapPartQuantity">
+                <a-input-number placeholder="璇疯緭鍏ュ簾鍝佷欢鏁�" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                v-model="model.scrapPartQuantity" :min="0" style="width: 100%"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="搴熷搧浠峰��" prop="scrapPartValue">
+                <a-input-number placeholder="璇疯緭鍏ュ簾鍝佷环鍊�" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                v-model="model.scrapPartValue" style="width: 100%"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-          <a-col :span="12">
-            <a-form-model-item prop="breakdownFlag" label="鏄惁鍋滄満">
-              <a-radio-group v-model="model.breakdownFlag">
-                <a-radio v-for="item in breakdownFlagList" :value="item.value">{{ item.label }}</a-radio>
-              </a-radio-group>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏄惁鏈夎澶囨搷浣滆瘉">
+                <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                   placeholder="璇烽�夋嫨鏄惁鏈夎澶囨搷浣滆瘉"
+                                   v-model="model.operationCertificate"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏄惁鏂數閲嶅惎">
+                <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                   placeholder="璇烽�夋嫨鏄惁鏂數閲嶅惎" v-model="model.powerOffRestart"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鏄惁涓烘壒娆¢浠�">
+                <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                   placeholder="璇烽�夋嫨鏄惁涓烘壒娆¢浠�"
+                                   v-model="model.batchFirstPiece"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鍙樺姩鍥犵礌" prop="variableFactors">
+                <j-dict-select-tag type="radio" dict-code="yn" :disabled="!Boolean(+model.isAccidentsRegister)"
+                                   placeholder="璇烽�夋嫨鍙樺姩鍥犵礌" v-model="model.variableFactors"
+                                   @change="handleRadioChange($event,'variableFactorsValue')"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-        <a-row>
-          <a-col :span="24">
-            <a-form-model-item prop="imageFiles" label="鎶ヤ慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
-              <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
-                         v-model="model.imageFilesResult"/>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
+          <a-row>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鍙樺姩鍥犵礌鍐呭" prop="variableFactorsValue">
+                <j-dict-select-tag dict-code="variable_factors_value" :disabled="!Boolean(+model.variableFactors)"
+                                   placeholder="璇烽�夋嫨鍙樺姩鍥犵礌鍐呭"
+                                   v-model="model.variableFactorsValue"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="customSpan">
+              <a-form-model-item label="鎵ц绋嬪簭">
+                <a-input placeholder="璇疯緭鍏ユ墽琛岀▼搴�" v-model="model.executeNc"
+                         :disabled="!Boolean(+model.isAccidentsRegister)"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-model-item label="浜嬫晠鐜拌薄" prop="accidentPhenomenon" :labelCol="labelColLong"
+                                 :wrapperCol="wrapperColLong">
+                <a-textarea placeholder="璇疯緭鍏ヤ簨鏁呯幇璞�" v-model="model.accidentPhenomenon"
+                            :disabled="!Boolean(+model.isAccidentsRegister)"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-        <a-row>
-          <a-col :span="24">
-            <a-form-model-item prop="remark" label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
-              <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
-      </a-form-model>
+          <a-row>
+            <a-col :span="12">
+              <a-form-model-item label="閲囧彇鎺柦" prop="measure" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                <a-textarea placeholder="璇疯緭鍏ラ噰鍙栨帾鏂�" v-model="model.measure"
+                            :disabled="!Boolean(+model.isAccidentsRegister)"/>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-model-item label="閫犳垚缁撴灉" prop="causingResults" :labelCol="labelColLong"
+                                 :wrapperCol="wrapperColLong">
+                <a-textarea placeholder="璇疯緭鍏ラ�犳垚缁撴灉" v-model="model.causingResults"
+                            :disabled="!Boolean(+model.isAccidentsRegister)"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+
+          <a-row>
+            <a-col :span="12">
+              <a-form-model-item label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+        </a-form-model>
+      </j-form-container>
     </a-spin>
   </j-modal>
 </template>
@@ -88,24 +175,18 @@
 <script>
   import { httpAction } from '@/api/manage'
   import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
-  import moment from 'moment'
 
   export default {
     name: 'EamReportRepairModal',
     components: { LxSearchEquipmentSelect },
-    props: {
-      breakdownFlagList: {
-        type: Array
-      },
-      faultReasonList: {
-        type: Array
-      }
-    },
     data() {
       return {
         title: '鎿嶄綔',
         visible: false,
+        //璇︽儏鎺у埗
+        disableSubmit: false,
         model: {},
+        customSpan: 6,
         labelCol: {
           xs: { span: 24 },
           sm: { span: 8 }
@@ -124,21 +205,60 @@
         },
         confirmLoading: false,
         validatorRules: {
-          faultStartTime: [
-            { required: true, message: '璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�' }
-          ],
-          breakdownFlag: [
-            { required: true, message: '璇烽�夋嫨鏄惁鍋滄満' }
-          ],
-          equipmentId: [
-            { required: true, message: '璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储' }
-          ],
-          faultName: [
-            { required: true, message: '璇烽�夋嫨鏁呴殰绠�绉�' }
-          ],
-          faultDescription: [
-            { required: true, message: '璇疯緭鍏ユ晠闅滄弿杩�' }
-          ]
+          equipmentId: [{ required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' }],
+          faultStartTime: [{ required: true, message: '璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�', trigger: 'change' }],
+          faultDescription: [{ required: true, message: '璇疯緭鍏ユ晠闅滅幇璞�', trigger: 'change' }],
+          batchNumber: [{
+            validator: this.isProcessedRelatedValidator,
+            message: '璇疯緭鍏ユ壒娆″彿',
+            trigger: 'change'
+          }],
+          processingPart: [{
+            validator: this.isProcessedRelatedValidator,
+            message: '璇疯緭鍏ュ姞宸ラ浂浠跺彿',
+            trigger: 'change'
+          }],
+          quantity: [{
+            validator: this.isProcessedRelatedValidator,
+            message: '璇疯緭鍏ヤ欢鏁�',
+            trigger: 'change'
+          }],
+          scrapPartNumber: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇疯緭鍏ュ簾鍝佷欢鍙�',
+            trigger: 'change'
+          }],
+          scrapPartQuantity: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇疯緭鍏ュ簾鍝佷欢鏁�',
+            trigger: 'change'
+          }],
+          scrapPartValue: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇疯緭鍏ュ簾鍝佷环鍊�',
+            trigger: 'change'
+          }],
+          variableFactors: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇烽�夋嫨鍙樺姩鍥犵礌',
+            trigger: 'change'
+          }],
+          variableFactorsValue: [{
+            validator: this.variableFactorsValueValidator,
+            message: '璇烽�夋嫨鍙樺姩鍥犵礌鍐呭',
+            trigger: 'change'
+          }],
+          accidentPhenomenon: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇疯緭鍏ヤ簨鏁呯幇璞�',
+            trigger: 'change'
+          }],
+          measure: [{ validator: this.isAccidentsRegisterRelatedValidator, message: '璇疯緭鍏ラ噰鍙栨帾鏂�', trigger: 'change' }],
+          causingResults: [{
+            validator: this.isAccidentsRegisterRelatedValidator,
+            message: '璇疯緭鍏ラ�犳垚缁撴灉',
+            trigger: 'change'
+          }]
         },
         url: {
           add: '/eam/eamReportRepair/add',
@@ -148,23 +268,19 @@
     },
     methods: {
       add() {
+        this.editable = true
         //鍒濆鍖栭粯璁ゅ��
-        this.edit({
-          faultDescription: '',
-          breakdownFlag: this.breakdownFlagList.find(item => item.label === '鍚�').value
-        })
-      },
-
-      edit(record) {
-        this.model = Object.assign({}, record, { imageFilesResult: record.imageFiles && this.isJSON(record.imageFiles) ? JSON.parse(record.imageFiles) : null })
+        this.model = {
+          breakdownFlag: '1',
+          isProcessed: '0',
+          isAccidentsRegister: '0'
+        }
         this.visible = true
       },
 
-      handleFaultNameChange(value) {
-        const faultReasonItem = this.faultReasonList.find(item => item.faultName === value)
-        this.model.faultType = faultReasonItem.faultCategory
-        this.model.faultType_dictText = faultReasonItem.faultCategory_dictText
-        this.model.faultDescription = faultReasonItem.faultDescription
+      edit(record) {
+        this.model = Object.assign({}, record)
+        this.visible = true
       },
 
       handleOk() {
@@ -183,59 +299,101 @@
               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()
-            })
+            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 = false
+              })
           } else {
             return false
           }
         })
       },
 
-      // 鍒ゆ柇鏄笉鏄疛SON瀛楃涓�
-      isJSON(str) {
-        try {
-          JSON.parse(str)
-          return true // 濡傛灉杩欓噷娌℃湁鎶涘嚭寮傚父锛岃鏄庢槸JSON鏍煎紡鐨勫瓧绗︿覆
-        } catch (e) {
-          return false // 濡傛灉鎶涘嚭寮傚父锛岃鏄庝笉鏄疛SON鏍煎紡鐨勫瓧绗︿覆
+      /**\
+       * 鍗曢�夋鍊煎彂鐢熸敼鍙樻椂瑙﹀彂
+       * @param value 鍗曢�夋鍊�
+       * @param key 鍗曢�夋鍏宠仈瀛楁
+       */
+      handleRadioChange(value, key) {
+        //key鍖呭惈,璇存槑鏄閫夋
+        if (key.includes(',')) {
+          const keys = key.split(',')
+          keys.forEach(key => {
+            if (value != '1') delete this.model[key]
+            this.$refs.form.clearValidate(key)
+          })
+        } else {
+          if (value != '1') delete this.model[key]
+          this.$refs.form.clearValidate(key)
         }
       },
 
       /**
-       * 绂佺敤鏃ユ湡
-       * @params current 琚鐢ㄧ殑鏃堕棿
+       * 鏍规嵁鏄惁鍔犲伐瀛楁鏍¢獙鐩稿叧瀛楁
+       * @param rule
+       * @param value 鐩稿叧瀛楁鍊�
+       * @param callback 缁撴灉鍥炶皟鍑芥暟
        */
-      disabledDate(current) {
-        // Can not select days after today
-        return current > moment().endOf('day')
-      },
-
-      /**
-       * 绂佺敤鏃ユ湡涓殑鏃堕棿
-       * @returns {{disabledHours: (function(): Array), disabledMinutes: (function(): Array)}}
-       */
-      disabledTime() {
-        function range(start, end) {
-          const result = []
-          for (let i = start; i < end; i++) {
-            result.push(i)
+      isProcessedRelatedValidator(rule, value, callback) {
+        if (this.model.isProcessed == '1') {
+          if (!value) {
+            callback(new Error())
+          } else {
+            callback()
           }
-          return result
+        } else {
+          callback()
         }
+      },
 
-        return {
-          disabledHours: () => range(moment().hour() + 1, 24),
-          disabledMinutes: () => range(moment().minute() + 1, 60),
-          disabledSeconds: () => range(moment().second() + 1, 60)
+      /**
+       * 鏍规嵁璁惧浜嬫晠瀛楁鏍¢獙鐩稿叧瀛楁
+       * @param rule
+       * @param value 鐩稿叧瀛楁鍊�
+       * @param callback 缁撴灉鍥炶皟鍑芥暟
+       */
+      isAccidentsRegisterRelatedValidator(rule, value, callback) {
+        if (this.model.isAccidentsRegister == '1') {
+          if (!value) {
+            callback(new Error())
+          } else {
+            callback()
+          }
+        } else {
+          callback()
+        }
+      },
+
+      /**
+       * 鍙樺姩鍥犵礌鍐呭鏍¢獙
+       * @param rule
+       * @param value 鍙樺姩鍥犵礌鍐呭瀛楁鍊�
+       * @param callback 缁撴灉鍥炶皟鍑芥暟
+       */
+      variableFactorsValueValidator(rule, value, callback) {
+        if (this.model.variableFactors == '1') {
+          if (!value) {
+            callback(new Error())
+          } else {
+            callback()
+          }
+        } else {
+          callback()
         }
       },
 
@@ -243,6 +401,9 @@
         this.$emit('close')
         this.visible = false
         if (this.$refs.form) this.$refs.form.clearValidate()
+      },
+      handleCancel() {
+        this.close()
       }
     }
   }

--
Gitblit v1.9.3