From ab7007a57d36f2a9cb2f419195e5728349c73497 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期二, 08 七月 2025 17:39:51 +0800
Subject: [PATCH] 技术鉴定规范页面功能开发

---
 src/views/eam/base/EamTechnicalStatusEvaluationStandardList.vue          |  304 ++++++++++++-----------
 src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue |  455 ++++++++++++++++++++++++++++------
 2 files changed, 528 insertions(+), 231 deletions(-)

diff --git a/src/views/eam/base/EamTechnicalStatusEvaluationStandardList.vue b/src/views/eam/base/EamTechnicalStatusEvaluationStandardList.vue
index 01114ca..e10a508 100644
--- a/src/views/eam/base/EamTechnicalStatusEvaluationStandardList.vue
+++ b/src/views/eam/base/EamTechnicalStatusEvaluationStandardList.vue
@@ -5,45 +5,37 @@
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
+          <a-col :xl="5" :lg="6" :md="8" :sm="24">
+            <a-form-item label="缁熶竴缂栫爜">
+              <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="queryParam.equipmentId"/>
+            </a-form-item>
+          </a-col>
 
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鍒犻櫎鏍囪">
-              <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="瑙勮寖鍚嶇О">
-              <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="queryParam.standardName"></a-input>
-            </a-form-item>
-          </a-col>
-        <template v-if="toggleSearchStatus">
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+          <a-col :xl="5" :lg="6" :md="8" :sm="24">
             <a-form-item label="瑙勮寖缂栫爜">
-              <a-input placeholder="璇疯緭鍏ヨ鑼冪紪鐮�" v-model="queryParam.standardCode"></a-input>
+              <a-input placeholder="璇疯緭鍏ヨ鑼冪紪鐮�" v-model="queryParam.standardCode"/>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="閴村畾鍛ㄦ湡">
-              <a-input placeholder="璇疯緭鍏ラ壌瀹氬懆鏈�" v-model="queryParam.evaluationPeriod"></a-input>
+
+          <a-col :xl="5" :lg="6" :md="8" :sm="24">
+            <a-form-item label="瑙勮寖鍚嶇О">
+              <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="queryParam.standardName"/>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璁惧ID">
-              <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input>
+
+          <a-col :xl="5" :lg="6" :md="8" :sm="24">
+            <a-form-item label="瑙勮寖鐘舵��">
+              <j-dict-select-tag dict-code="technical_status_evaluation_standard_status" placeholder="璇烽�夋嫨瑙勮寖鐘舵��"
+                                 v-model="queryParam.standardStatus"/>
             </a-form-item>
           </a-col>
-          </template>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+
+          <a-col :xl="4" :lg="6" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
             </span>
           </a-col>
-
         </a-row>
       </a-form>
     </div>
@@ -51,75 +43,77 @@
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator">
       <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-      <a-button type="primary" icon="download" @click="handleExportXls('鎶�鏈姸鎬侀壌瀹氳鑼�')">瀵煎嚭</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
+                @change="handleImportExcel">
         <a-button type="primary" icon="import">瀵煎叆</a-button>
       </a-upload>
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete"/>
+            鍒犻櫎
+          </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
+          <a-icon type="down"/>
+        </a-button>
       </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
-    <div>
-      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
-        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
-      </div>
+    <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource"
+             :pagination="ipagination" :loading="loading" @change="handleTableChange">
 
-      <a-table
-        ref="table"
-        size="middle"
-        bordered
-        rowKey="id"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        class="j-table-force-nowrap"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
+      <!--鏄惁鏈夊畨鍏ㄨ缃鏌�-->
+      <template slot="hasSafetyEquipmentCheck" slot-scope="text">
+        <a-switch checked-children="鏄�" un-checked-children="鍚�" :checked="Boolean(+text)" disabled/>
+      </template>
 
-        <span slot="action" slot-scope="text, record">
-          <a @click="handleEdit(record)">缂栬緫</a>
+      <!--鏄惁鏈夎澶囩簿搴︽鏌�-->
+      <template slot="hasPrecisionCheck" slot-scope="text">
+        <a-switch checked-children="鏄�" un-checked-children="鍚�" :checked="Boolean(+text)" disabled/>
+      </template>
 
-          <a-divider type="vertical" />
-          <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-            <a-menu slot="overlay">
-              <a-menu-item>
-                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                  <a>鍒犻櫎</a>
-                </a-popconfirm>
-              </a-menu-item>
-            </a-menu>
-          </a-dropdown>
+      <!--鏄惁鏈夊叾浠栨鏌�-->
+      <template slot="hasOtherCheck" slot-scope="text">
+        <a-switch checked-children="鏄�" un-checked-children="鍚�" :checked="Boolean(+text)" disabled/>
+      </template>
+
+
+      <span slot="action" slot-scope="text, record">
+        <template v-if="record.standardStatus=='WAIT_SUBMIT'">
+           <a @click="handleEdit(record)">缂栬緫</a>
+          <a-divider type="vertical"/>
+          <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="handleSubmit(record)">
+            <a @click.stop="event=>event.stopPropagation()">鎻愪氦</a>
+          </a-popconfirm>
+        </template>
+        <a @click="handleUpgrade(record)" v-if="record.standardStatus=='ENABLE'">鍗囩増</a>
         </span>
 
-      </a-table>
-    </div>
+    </a-table>
+
     <!-- table鍖哄煙-end -->
 
     <!-- 琛ㄥ崟鍖哄煙 -->
-    <eamTechnicalStatusEvaluationStandard-modal ref="modalForm" @ok="modalFormOk"></eamTechnicalStatusEvaluationStandard-modal>
+    <eamTechnicalStatusEvaluationStandard-modal ref="modalForm" @ok="modalFormOk"/>
   </a-card>
 </template>
 
 <script>
-  import '@/assets/less/TableExpand.less'
+  import { getAction } from '@/api/manage'
   import EamTechnicalStatusEvaluationStandardModal from './modules/EamTechnicalStatusEvaluationStandardModal'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 
   export default {
-    name: "EamTechnicalStatusEvaluationStandardList",
-    mixins:[JeecgListMixin],
+    name: 'EamTechnicalStatusEvaluationStandardList',
+    mixins: [JeecgListMixin],
     components: {
-      EamTechnicalStatusEvaluationStandardModal
+      EamTechnicalStatusEvaluationStandardModal,
+      LxSearchEquipmentSelect
     },
-    data () {
+    data() {
       return {
         description: '鎶�鏈姸鎬侀壌瀹氳鑼冪鐞嗛〉闈�',
         // 琛ㄥご
@@ -127,89 +121,113 @@
           {
             title: '#',
             dataIndex: '',
-            key:'rowIndex',
-            width:60,
-            align:"center",
-            customRender:function (t,r,index) {
-              return parseInt(index)+1;
+            key: 'rowIndex',
+            width: 60,
+            align: 'center',
+            customRender: function(t, r, index) {
+              return parseInt(index) + 1
             }
-           },
-		   {
-            title: '鍒犻櫎鏍囪',
-            align:"center",
-            dataIndex: 'delFlag'
-           },
-		   {
-            title: '瑙勮寖鍚嶇О',
-            align:"center",
-            dataIndex: 'standardName'
-           },
-		   {
+          },
+          {
+            title: '缁熶竴缂栫爜',
+            align: 'center',
+            dataIndex: 'equipmentCode'
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName'
+          },
+          {
+            title: '璁惧鍨嬪彿',
+            align: 'center',
+            dataIndex: 'equipmentModel'
+          },
+          {
             title: '瑙勮寖缂栫爜',
-            align:"center",
+            align: 'center',
             dataIndex: 'standardCode'
-           },
-		   {
-            title: '閴村畾鍛ㄦ湡',
-            align:"center",
-            dataIndex: 'evaluationPeriod'
-           },
-		   {
-            title: '璁惧ID',
-            align:"center",
-            dataIndex: 'equipmentId'
-           },
-		   {
-            title: '瑙勮寖鐘舵��;寰呮彁浜ゃ�佸惎鐢ㄣ�佷綔搴�',
-            align:"center",
-            dataIndex: 'standardStatus'
-           },
-		   {
-            title: '鏄惁鏈夊畨鍏ㄨ缃鏌�;鏄惁',
-            align:"center",
-            dataIndex: 'hasSafetyEquipmentCheck'
-           },
-		   {
-            title: '鏄惁鏈夎澶囩簿搴︽鏌�;鏄惁',
-            align:"center",
-            dataIndex: 'hasPrecisionCheck'
-           },
-		   {
-            title: '鏄惁鏈夊叾浠栨鏌�;鏄惁',
-            align:"center",
-            dataIndex: 'hasOtherCheck'
-           },
-		   {
-            title: '澶囨敞',
-            align:"center",
-            dataIndex: 'remark'
-           },
+          },
+          {
+            title: '瑙勮寖鍚嶇О',
+            align: 'center',
+            dataIndex: 'standardName'
+          },
+          {
+            title: '閴村畾鍛ㄦ湡锛堝勾锛�',
+            align: 'center',
+            dataIndex: 'evaluationPeriod',
+            width: 150
+          },
+          {
+            title: '瑙勮寖鐘舵��',
+            align: 'center',
+            dataIndex: 'standardStatus_dictText',
+            width: 150
+          },
+          {
+            title: '鏄惁鏈夊畨鍏ㄨ缃鏌�',
+            align: 'center',
+            dataIndex: 'hasSafetyEquipmentCheck',
+            scopedSlots: { customRender: 'hasSafetyEquipmentCheck' },
+            width: 150
+          },
+          {
+            title: '鏄惁鏈夎澶囩簿搴︽鏌�',
+            align: 'center',
+            dataIndex: 'hasPrecisionCheck',
+            scopedSlots: { customRender: 'hasPrecisionCheck' },
+            width: 150
+          },
+          {
+            title: '鏄惁鏈夊叾浠栨鏌�',
+            align: 'center',
+            dataIndex: 'hasOtherCheck',
+            scopedSlots: { customRender: 'hasOtherCheck' },
+            width: 150
+          },
           {
             title: '鎿嶄綔',
             dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
+            align: 'center',
+            scopedSlots: { customRender: 'action' }
           }
         ],
-		url: {
-          list: "/eam/eamTechnicalStatusEvaluationStandard/list",
-          delete: "/eam/eamTechnicalStatusEvaluationStandard/delete",
-          deleteBatch: "/eam/eamTechnicalStatusEvaluationStandard/deleteBatch",
-          exportXlsUrl: "eam/eamTechnicalStatusEvaluationStandard/exportXls",
-          importExcelUrl: "eam/eamTechnicalStatusEvaluationStandard/importExcel",
-       },
-    }
-  },
-  computed: {
-    importExcelUrl: function(){
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
-    }
-  },
+        url: {
+          list: '/eam/eamTechnicalStatusEvaluationStandard/list',
+          submit: '/eam/eamTechnicalStatusEvaluationStandard/submit',
+          importExcelUrl: 'eam/eamTechnicalStatusEvaluationStandard/importExcel'
+        }
+      }
+    },
+    computed: {
+      importExcelUrl: function() {
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+      }
+    },
     methods: {
-     
+      handleSubmit(record) {
+        getAction(this.url.submit, record)
+          .then(res => {
+            if (res.success) {
+              this.$notification.success({
+                message: '娑堟伅',
+                description: res.message
+              })
+              this.loadData()
+            } else {
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+      },
+
+      handleUpgrade(record) {
+        this.$refs.modalForm.edit(record, true)
+        this.$refs.modalForm.title = '鍗囩増'
+      }
     }
   }
-</script>
-<style scoped>
-  @import '~@assets/less/common.less';
-</style>
\ No newline at end of file
+</script>
\ No newline at end of file
diff --git a/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue b/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue
index c6ea154..7673464 100644
--- a/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue
+++ b/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue
@@ -1,130 +1,409 @@
 <template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
+  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered
+           @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴">
+    <a-spin :spinning="spinning">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row>
+          <a-col :span="8">
+            <a-form-model-item label="瑙勮寖缂栫爜">
+              <a-input placeholder="瑙勮寖缂栫爜鑷姩鐢熸垚" v-model="model.standardCode" disabled/>
+            </a-form-model-item>
+          </a-col>
 
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="瑙勮寖鍚嶇О">
-          <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="model.standardName" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="瑙勮寖缂栫爜">
-          <a-input placeholder="璇疯緭鍏ヨ鑼冪紪鐮�" v-model="model.standardCode" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="evaluationPeriod" label="閴村畾鍛ㄦ湡(骞�)">
-          <a-input-number v-model="model.evaluationPeriod"/>
-        </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="hasSafetyEquipmentCheck" label="鏄惁鏈夊畨鍏ㄨ缃鏌�">
-          <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasSafetyEquipmentCheck"/>
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hasPrecisionCheck" label="鏄惁鏈夎澶囩簿搴︽鏌�">
-          <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasPrecisionCheck"/>
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hasOtherCheck" label="鏄惁鏈夊叾浠栨鏌�">
-          <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasOtherCheck"/>
-        </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-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-row>
+          <a-col :span="8">
+            <a-form-model-item label="閴村畾鍛ㄦ湡(骞�)">
+              <a-input-number v-model="model.evaluationPeriod" :min="1" placeholder="璇疯緭鍏ラ壌瀹氬懆鏈�(骞�)" style="width: 100%"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <!--<a-col :span="8">-->
+          <!--<a-form-model-item label="瀹夊叏瑁呯疆妫�鏌�">-->
+          <!--<j-dict-select-tag @change="handleCheckListChange($event,1)" dict-code="yn " type="radio"-->
+          <!--:disabled="model.hasPrecisionCheck=='0'&&model.hasOtherCheck=='0'"-->
+          <!--v-model="model.hasSafetyEquipmentCheck"/>-->
+          <!--</a-form-model-item>-->
+          <!--</a-col>-->
+
+          <!--<a-col :span="8">-->
+          <!--<a-form-model-item label="璁惧绮惧害妫�鏌�">-->
+          <!--<j-dict-select-tag @change="handleCheckListChange($event,2)" dict-code="yn " type="radio"-->
+          <!--:disabled="model.hasSafetyEquipmentCheck=='0'&&model.hasOtherCheck=='0'"-->
+          <!--v-model="model.hasPrecisionCheck"/>-->
+          <!--</a-form-model-item>-->
+          <!--</a-col>-->
+
+          <!--<a-col :span="8">-->
+          <!--<a-form-model-item label="鍏朵粬妫�鏌�">-->
+          <!--<j-dict-select-tag @change="handleCheckListChange($event,3)" dict-code="yn " type="radio"-->
+          <!--:disabled="model.hasPrecisionCheck=='0'&&model.hasSafetyEquipmentCheck=='0'"-->
+          <!--v-model="model.hasOtherCheck"/>-->
+          <!--</a-form-model-item>-->
+          <!--</a-col>-->
+
+          <a-col :span="8" v-for="item in checkList">
+            <a-form-model-item :label="item.label">
+              <j-dict-select-tag @change="handleCheckListChange($event,item.key)" dict-code="yn" type="radio"
+                                 :disabled="checkList.filter(i=>i.key!=item.key).every(i=>i.value=='0')"
+                                 v-model="model[item.key]"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item :labelCol="{span:2}" :wrapperCol="{span:21}" label="澶囨敞">
+              <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
       </a-form-model>
+
+      <a-tabs :activeKey="activeTabKey" @change="handleTabChange">
+        <a-tab-pane tab="瀹夊叏瑁呯疆妫�鏌�" :key="1" v-if="+model.hasSafetyEquipmentCheck">
+          <j-vxe-table ref="editableDetailTable1" rowNumber rowSelection bordered alwaysEdit toolbar
+                       :toolbarConfig="detail.toolbarConfig" keep-source
+                       :height="300" :dataSource="detail.safetyEquipmentCheckList" :columns="detail.columns">
+          </j-vxe-table>
+        </a-tab-pane>
+
+        <a-tab-pane tab="璁惧绮惧害妫�鏌�" :key="2" v-if="+model.hasPrecisionCheck" forceRender>
+          <j-vxe-table ref="editableDetailTable2" rowNumber rowSelection bordered alwaysEdit toolbar
+                       :toolbarConfig="detail.toolbarConfig" keep-source
+                       :height="300" :dataSource="detail.precisionCheckList" :columns="detail.precisionCheckColumns">
+          </j-vxe-table>
+        </a-tab-pane>
+
+        <a-tab-pane tab="鍏朵粬妫�鏌�" :key="3" v-if="+model.hasOtherCheck" forceRender>
+          <j-vxe-table ref="editableDetailTable3" rowNumber rowSelection bordered alwaysEdit toolbar
+                       :toolbarConfig="detail.toolbarConfig" keep-source
+                       :height="300" :dataSource="detail.otherCheckList" :columns="detail.columns">
+          </j-vxe-table>
+        </a-tab-pane>
+      </a-tabs>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-import { httpAction } from '@/api/manage'
+  import { httpAction, getAction } from '@/api/manage'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+  import { JVXETypes } from '@/components/jeecg/JVxeTable'
+  import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
 
-export default {
-    name: "EamTechnicalStatusEvaluationStandardModal",
-    data () {
+  export default {
+    name: 'EamTechnicalStatusEvaluationStandardModal',
+    components: {
+      LxSearchEquipmentSelect
+    },
+    mixins: [JVxeTableModelMixin],
+    data() {
       return {
-        title:"鎿嶄綔",
+        title: '鎿嶄綔',
         visible: false,
         model: {},
         labelCol: {
           xs: { span: 24 },
-          sm: { span: 5 },
+          sm: { span: 6 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 16 },
+          sm: { span: 15 }
         },
-
+        spinning: false,
         confirmLoading: false,
-        validatorRules:{
+        editable: true,
+        validatorRules: {
+          standardName: [{ required: true, message: '璇疯緭鍏ヨ鑼冨悕绉�', trigger: 'change' }],
+          equipmentId: [{ required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' }]
+        },
+        checkList: [
+          {
+            label: '瀹夊叏瑁呯疆妫�鏌�',
+            dictValue: 'SAFETY_EQUIPMENT_CHECK',
+            key: 'hasSafetyEquipmentCheck',
+            value: '1',
+            order: 1
+          },
+          {
+            label: '璁惧绮惧害妫�鏌�',
+            dictValue: 'PRECISION_CHECK',
+            key: 'hasPrecisionCheck',
+            value: '1',
+            order: 2
+          },
+          {
+            label: '鍏朵粬妫�鏌�',
+            dictValue: 'OTHER_CHECK',
+            key: 'hasOtherCheck',
+            value: '1',
+            order: 3
+          }
+        ],
+        activeTabKey: 1,
+        upgradeFlag: false,
+        detail: {
+          safetyEquipmentCheckList: [],
+          precisionCheckList: [],
+          otherCheckList: [],
+          columns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'standardId',
+              key: 'standardId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '椤圭洰搴忓彿',
+              key: 'itemCode',
+              type: JVXETypes.inputNumber,
+              align: 'center',
+              placeholder: '璇疯緭鍏ラ」鐩簭鍙�',
+              width: 150,
+              validateRules: [
+                { required: true, message: '璇疯緭鍏�${title}' },
+                { unique: true, message: '${title}涓嶈兘閲嶅' }
+              ]
+            },
+            {
+              title: '妫�鏌ラ」鐩�',
+              key: 'itemName',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.textarea,
+              align: 'center',
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            }
+          ],
+          precisionCheckColumns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'standardId',
+              key: 'standardId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '椤圭洰搴忓彿',
+              key: 'itemCode',
+              type: JVXETypes.inputNumber,
+              align: 'center',
+              placeholder: '璇疯緭鍏ラ」鐩簭鍙�',
+              width: 150,
+              validateRules: [
+                { required: true, message: '璇疯緭鍏�${title}' },
+                { unique: true, message: '${title}涓嶈兘閲嶅' }
+              ]
+            },
+            {
+              title: '妫�鏌ラ」鐩�',
+              key: 'itemName',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.textarea,
+              align: 'center',
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            },
+            {
+              title: '妫�鏌ュ瓙椤圭洰',
+              key: 'subItemName',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.textarea,
+              align: 'center',
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            },
+            {
+              title: '鍏佸樊鍊�',
+              key: 'toleranceValue',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.input,
+              align: 'center',
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            }
+          ],
+          toolbarConfig: {
+            // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+            slot: ['prefix', 'suffix'],
+            // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+            btn: ['add', 'remove', 'clearSelection']
+          }
         },
         url: {
-          add: "/eam/eamTechnicalStatusEvaluationStandard/add",
-          edit: "/eam/eamTechnicalStatusEvaluationStandard/edit",
-        },
+          add: '/eam/eamTechnicalStatusEvaluationStandard/add',
+          edit: '/eam/eamTechnicalStatusEvaluationStandard/edit',
+          upgrade: '/eam/eamTechnicalStatusEvaluationStandard/upgrade',
+          detail: '/eam/eamTechnicalStatusEvaluationStandardDetail/queryList'
+        }
       }
     },
-    created () {
-    },
     methods: {
-      add () {
+      add() {
+        this.editable = true
         //鍒濆鍖栭粯璁ゅ��
-        this.edit({});
+        this.edit({
+          hasSafetyEquipmentCheck: '1',
+          hasPrecisionCheck: '1',
+          hasOtherCheck: '1'
+        })
       },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
+
+      /**
+       * 琛岃褰曠紪杈戞椂瑙﹀彂
+       * @param record 椤甸潰琛ㄦ牸琛岃褰�
+       */
+      edit(record, upgradeFlag = false) {
+        this.upgradeFlag = upgradeFlag
+        console.log('upgradeFlag', this.upgradeFlag)
+        this.detail.safetyEquipmentCheckList = this.detail.precisionCheckList = this.detail.otherCheckList = []
+        this.model = Object.assign({}, record)
+        this.hasCheckedCheckList = []
+        this.checkList.forEach(item => {
+          if (+this.model[item.key]) this.hasCheckedCheckList.push(item)
+        })
+        this.activeTabKey = this.hasCheckedCheckList[0].order
+        this.visible = true
+        if (record.id) {
+          this.editable = false
+          this.loadDetail(record.id)
+        }
       },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.$refs.form.clearValidate();
+
+      /**
+       * 妫�鏌ラ�夋嫨鍙戠敓鏀瑰彉鍚庤Е鍙�
+       * @param value 妫�鏌ラ�夋嫨鍊� 0涓哄惁 1涓烘槸
+       * @param key 妫�鏌ラ�夋嫨瀵瑰簲鏍囩key
+       */
+      handleCheckListChange(value, key) {
+        this.checkList.find(item => item.key == key).value = value
+        if (+value) this.hasCheckedCheckList.push(this.checkList.find(item => item.key == key))
+        else {
+          this.hasCheckedCheckList = this.hasCheckedCheckList.filter(item => item.key != key)
+          if (!this.hasCheckedCheckList.some(item => item.key == key)) this.activeTabKey = this.hasCheckedCheckList.sort((x, y) => x.order - y.order)[0].order
+        }
       },
-      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';
+
+      loadDetail(standardId) {
+        this.spinning = true
+        getAction(this.url.detail, { standardId })
+          .then(res => {
+            console.log('res', res)
+            if (res.success) {
+              this.detail.safetyEquipmentCheckList = res.result.filter(item => item.checkCategory == 'SAFETY_EQUIPMENT_CHECK')
+              this.detail.precisionCheckList = res.result.filter(item => item.checkCategory == 'PRECISION_CHECK')
+              this.detail.otherCheckList = res.result.filter(item => item.checkCategory == 'OTHER_CHECK')
             }
-            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(() => {
+            this.spinning = false
+          })
+      },
+
+      /**
+       * 鏍囩鍒囨崲鏃惰Е鍙�
+       * @param key 鍒囨崲鍚庣殑鏍囩key
+       * @returns {Promise<boolean>}
+       */
+      async handleTabChange(key) {
+        let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable()
+        if (errMap) return false
+        this.activeTabKey = key
+      },
+
+      async handleOk() {
+        // 鍏堟牎楠屽綋鍓峵ab涓嬬殑琛ㄦ牸
+        let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable()
+        if (errMap) return false
+
+        // 鏍¢獙宸查�夋嫨鐨勬鏌ラ」琛ㄦ牸涓虹┖
+        let allTableData = []
+        const hasCheckedCheckList = this.hasCheckedCheckList.sort((x, y) => x.order - y.order)
+        for (let index = 0; index < hasCheckedCheckList.length; index++) {
+          let tableData = this.$refs['editableDetailTable' + hasCheckedCheckList[index].order].getTableData()
+          if (tableData.length == 0) {
+            this.$notification.warning({
+              message: '娑堟伅',
+              description: hasCheckedCheckList[index].label + '蹇呭~椤逛笉鑳戒负绌�'
+            })
+            return
+          }
+          tableData = tableData.map(item => {
+            return {
+              ...item,
+              checkCategory: hasCheckedCheckList[index].dictValue
+            }
+          })
+          allTableData = [...allTableData, ...tableData]
+        }
+        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 {
+              if (!this.upgradeFlag) httpUrl += this.url.edit
+              else httpUrl += this.url.upgrade
+              method = 'put'
+            }
+            this.model.tableDetailList = allTableData
+            httpAction(httpUrl, this.model, method).then((res) => {
+              if (res.success) {
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+                that.$emit('ok')
+              } else {
+                that.$notification.warning({
+                  message: '娑堟伅',
+                  description: res.message
+                })
               }
             }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
+              that.confirmLoading = false
+              that.close()
             })
-          }else{
-             return false;
+          } else {
+            return false
           }
         })
       },
-      handleCancel () {
+
+      handleCancel() {
         this.close()
       },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.$refs.form.clearValidate()
+      }
 
 
     }
   }
-</script>
-
-<style lang="less" scoped>
-
-</style>
\ No newline at end of file
+</script>
\ No newline at end of file

--
Gitblit v1.9.3