From a00b50f20267948804399af79f0c5c1dec671a2c Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 09 六月 2025 16:56:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue                         |   85 ++
 src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue                           |  323 +++++++++
 src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue                     |    2 
 src/views/tms/modules/inbound/InboundModel.vue                                    |   28 
 src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue           |   10 
 src/views/tms/modules/toolLedger/InStoreDetailList.vue                            |  109 +++
 src/views/eam/repair/EamReportRepairList.vue                                      |   22 
 src/views/tms/modules/toolLedger/OutStoreDetailList.vue                           |  109 +++
 src/views/tms/modules/toolLedger/StocktakingList.vue                              |  126 +++
 src/views/tms/modules/toolLedger/ToolSharpenList.vue                              |  101 +++
 src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue    |    5 
 src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue |   25 
 src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue              |  287 ++++++--
 src/views/tms/ToolLedgerList.vue                                                  |   39 +
 src/views/tms/modules/toolLedger/ToolLedgerListRight.vue                          |  516 +++++++++++++++
 src/views/eam/repair/EamRepairOrderList.vue                                       |   31 
 src/views/tms/modules/inboundOrder/InboundOrderModel.vue                          |   27 
 src/views/tms/modules/toolLedger/ToolLossList.vue                                 |  106 +++
 src/views/flowable/workflow/FlowTodo.vue                                          |    3 
 19 files changed, 1,839 insertions(+), 115 deletions(-)

diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
index 84303fb..a46a233 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
@@ -34,6 +34,10 @@
                      @change="handleTableChange"
                      :scroll="{y:456}" :size="size" rowKey="docId">
 
+              <!-- 瀛楃涓茶秴闀挎埅鍙栫渷鐣ュ彿鏄剧ず-->
+              <span slot="docName" slot-scope="text">
+                <j-ellipsis :value="text"/>
+              </span>
             </a-table>
           </a-tab-pane>
         </a-tabs>
@@ -121,6 +125,7 @@
           dataIndex: 'docName',
           key: 'docName',
           align: 'center',
+          scopedSlots: { customRender: 'docName' },
           width: 300,
           sorter: true
         },
diff --git a/src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue b/src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue
index 13e58f0..79d4442 100644
--- a/src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue
+++ b/src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue
@@ -200,9 +200,15 @@
     methods: {
       initDictConfig(){
       },
-      getGuideCardBatchList(){
-        console.log('currentDocumentInfo', this.guideCardBatchInfo)
-        let params
+      searchQuery() {
+        this.queryParam.docId = this.guideCardBatchInfo.docId;
+        this.loadData(1);
+      },
+      /**
+      * 鑾峰彇鍔犲伐纭琛ㄥ垪琛�
+      */
+      getGuideCardBatchList() {
+        let params= {};
         params.docId=this.guideCardBatchInfo.docId;
         params.serialNumber=this.queryParam.serialNumber;
         params.fixtureInformation=this.guideCardBatchInfo.fixtureInformation;
@@ -224,6 +230,19 @@
           this.loading = false
         })
       },
+      searchReset() {
+        // 淇濈暀蹇呰瀛楁鐨勬祬鎷疯礉鏂瑰紡
+        this.queryParam = {
+          docId: this.guideCardBatchInfo.docId
+        };
+        this.loadData(1);
+      },
+      loadData(pageNum) {
+        if (this.ipagination) {
+          this.ipagination.current = pageNum;
+        }
+        this.getGuideCardBatchList();
+      },
       getSuperFieldList(){
         let fieldList=[];
         fieldList.push({type:'string',value:'serialNumber',text:'娴佹按鍙�',dictCode:''})
diff --git a/src/views/eam/repair/EamRepairOrderList.vue b/src/views/eam/repair/EamRepairOrderList.vue
index 5d01fd4..3869ba3 100644
--- a/src/views/eam/repair/EamRepairOrderList.vue
+++ b/src/views/eam/repair/EamRepairOrderList.vue
@@ -44,7 +44,7 @@
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator" v-if="isDisplayOperation">
-      <a-button @click="handleOpenReceiveFaultModal" type="primary" icon="plus">棰嗗彇</a-button>
+      <a-button @click="handleOpenReceiveFaultModal" type="primary" icon="plus"  v-if="isShowAuth('eam:repair:collect')">棰嗗彇</a-button>
       <!--<a-button type="primary" icon="download" @click="handleExportXls('缁翠慨宸ュ崟')">瀵煎嚭</a-button>-->
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
@@ -123,23 +123,34 @@
         // 琛ㄥご
         columns: [
           {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: 'center',
+            customRender: function(t, r, index) {
+              return parseInt(index) + 1
+            },
+            fixed: 'left',
+          },
+          {
             title: '宸ュ崟缂栧彿',
             align: 'center',
             dataIndex: 'repairCode',
-            width: 200,
+            width: 120,
             fixed: 'left'
           },
-          // {
-          //   title: '鎶ヤ慨缂栧彿',
-          //   align: 'center',
-          //   dataIndex: 'reportId',
-          //   width: 200,
-          //   fixed: 'left'
-          // },
           {
             title: '璁惧缂栧彿',
             align: 'center',
-            dataIndex: 'equipmentId_dictText',
+            dataIndex: 'equipmentCode',
+            width: 120,
+            fixed: 'left'
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName',
             width: 200,
             fixed: 'left'
           },
diff --git a/src/views/eam/repair/EamReportRepairList.vue b/src/views/eam/repair/EamReportRepairList.vue
index 54655ba..0984200 100644
--- a/src/views/eam/repair/EamReportRepairList.vue
+++ b/src/views/eam/repair/EamReportRepairList.vue
@@ -58,7 +58,7 @@
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator" v-if="isDisplayOperation">
-      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-button @click="handleAdd" type="primary" icon="plus" v-if="isShowAuth('eam:reportRepair:add')">鏂板</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">-->
@@ -66,7 +66,7 @@
       <!--</a-upload>-->
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel">
+          <a-menu-item key="1" @click="batchDel" v-if="isShowAuth('eam:reportRepair:abolish')">
             <a-icon type="delete"/>
             浣滃簾
           </a-menu-item>
@@ -103,15 +103,15 @@
         </template>
 
         <span slot="action" slot-scope="text, record" v-if="record.reportStatus=='WAIT_REPAIR'">
-          <a @click="handleEdit(record)">缂栬緫</a>
+          <a @click="handleEdit(record)" v-if="isShowAuth('eam:reportRepair:edit')">缂栬緫</a>
 
-          <a-divider type="vertical"/>
+          <a-divider type="vertical" v-if="isShowAuth('eam:reportRepair:edit')"/>
 
-          <a @click="handleAssign(record)">鎸囨淳</a>
+          <a @click="handleAssign(record)" v-if="isShowAuth('eam:reportRepair:assign')">鎸囨淳</a>
 
-          <a-divider type="vertical"/>
+          <a-divider type="vertical" v-if="isShowAuth('eam:reportRepair:assign')"/>
 
-          <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handleDelete(record.id)">
+          <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handleDelete(record.id)" v-if="isShowAuth('eam:reportRepair:abolish')">
             <a>浣滃簾</a>
           </a-popconfirm>
         </span>
@@ -178,7 +178,13 @@
           {
             title: '璁惧缂栧彿',
             align: 'center',
-            dataIndex: 'equipmentId_dictText',
+            dataIndex: 'equipmentCode',
+            width: 200
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName',
             width: 200
           },
           {
diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index 7f23a43..dede3fd 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -345,7 +345,8 @@
         {
           title: '娴佺▼鍒嗙被',
           align: 'center',
-          dataIndex: 'category_dictText'
+          dataIndex: 'category_dictText',
+          width: 100
         },
         {
           title: '娴佺▼鍚嶇О',
diff --git a/src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue b/src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
index 745176b..ed36204 100644
--- a/src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
+++ b/src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
@@ -141,11 +141,11 @@
                 <a-input :disabled='coldisabled' v-model='tableRowRecord.applyTime'></a-input>
               </a-form-model-item >
             </a-col>
-            <a-col :span="24">
-              <a-form-item label="瀵嗙骇涓�" :labelCol="labelCol" :wrapperCol="wrapperCol">
-                <j-dict-select-tag  type='list' v-model='assignFileStream.secretLevel' dictCode='dnc_secret_level' placeholder="璇烽�夋嫨瀵嗙骇"  />
-              </a-form-item>
-            </a-col>
+<!--            <a-col :span="24">-->
+<!--              <a-form-item label="瀵嗙骇涓�" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
+<!--                <j-dict-select-tag  type='list' v-model='assignFileStream.secretLevel' dictCode='dnc_secret_level' placeholder="璇烽�夋嫨瀵嗙骇"  />-->
+<!--              </a-form-item>-->
+<!--            </a-col>-->
             <a-col :span="24" class="btxx">
               <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol">
                 <j-dict-select-tag  type='list' v-model='assignFileStream.status' dictCode='dnc_assign_stream_status' placeholder="璇烽�夋嫨瀹℃壒鐘舵��"  />
diff --git a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
index 4384150..50aebc3 100644
--- a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
+++ b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
@@ -57,45 +57,179 @@
           </a-col>
         </a-row>
 
-        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏄惁闇�瑕侀鐢ㄥ浠�</a-divider>
-
         <a-tabs v-model="activeTabKey">
-          <a-tab-pane key="1" tab="棰嗙敤澶囦欢">
-            <a-row>
-              <a-col :span="twoColSpan*2">
-                <a-form-model-item label="鏄惁闇�瑕侀鐢ㄥ浠�" prop="isUseSpare">
-                  <a-radio-group v-model="tableRowRecord.isUseSpare"
-                                 :disabled="isDisableUseSpare">
-                    <a-radio :value="1">鏄�</a-radio>
-                    <a-radio :value="0">鍚�</a-radio>
-                  </a-radio-group>
-                </a-form-model-item>
-              </a-col>
+          <a-tab-pane key="1" tab="缁翠慨澶勭悊">
 
-              <template v-if="tableRowRecord.isUseSpare===0">
+            <div v-if="repairConfirm">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨纭</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairConfirm" label="鏄惁鍐呴儴鍙淮淇�">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.repairConfirm' dictCode='yn'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit || tableRowRecord.repairStatus !== 'WAIT_INTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairConfirmComment" label="缁翠慨纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.repairConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus !== 'WAIT_INTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underInternalRepair && tableRowRecord.repairConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉</a-divider>
+              <a-row>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason">
-                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                              v-model="tableRowRecord.faultReason" rows="4"
                              placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
                   </a-form-model-item>
                 </a-col>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription">
-                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                                 v-model="tableRowRecord.repairDescription"
                                 placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
                   </a-form-model-item>
                 </a-col>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="缁翠慨鍥剧墖">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
                     <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
-                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                                v-model="tableRowRecord.imageFiles"/>
                   </a-form-model-item>
                 </a-col>
-              </template>
-            </a-row>
+              </a-row>
+            </div>
+            <div v-if="leaderConfirm && tableRowRecord.repairConfirm === '0'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">棰嗗纭</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leaderConfirm" label="鏄惁鍚屾剰澶栭儴缁翠慨">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.leaderConfirm' dictCode='approved_rejected'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit || tableRowRecord.repairStatus!=='WAIT_LEADER_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leaderConfirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.leaderConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_LEADER_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underInternalRepair && tableRowRecord.leaderConfirm === '2'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="externalConfirm && tableRowRecord.leaderConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏈哄姩鍔炵‘璁�</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="externalConfirm" label="鏈哄姩鍔炴槸鍚﹀彲缁翠慨">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.externalConfirm' dictCode='yn'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit||tableRowRecord.repairStatus!=='WAIT_EXTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="externalConfirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.externalConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_EXTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underExternalRepair && tableRowRecord.externalConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏈哄姩鍔炵淮淇粨鏋�</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underOutsideRepair && tableRowRecord.externalConfirm === '0'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">濮斿缁翠慨缁撴灉</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="operatorConfirm">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鎿嶄綔宸ョ‘璁�</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="24">
+                  <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.confirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
           </a-tab-pane>
 
           <template v-if="selectShenpiData.procInstId">
@@ -116,56 +250,10 @@
             </a-tab-pane>
 
             <a-tab-pane key='3' tab='娴佺▼鍥�'>
-              <img :src="imageSrc" alt="Fetched Image"/>-->
+              <img :src="imageSrc" alt="Fetched Image"/>
             </a-tab-pane>
           </template>
         </a-tabs>
-
-        <template v-if="tableRowRecord.isUseSpare===1&&isDisableUseSpare">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">绠$悊鍛橀鐢ㄥ浠�
-          </a-divider>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item prop="sparePartDescription" label="澶囦欢鎻忚堪">
-                <a-textarea placeholder="璇疯緭鍏ュ浠舵弿杩�" :readOnly="disableSubmit||tableRowRecord.repairStatus!=='WAIT_SPARES'"
-                            v-model="tableRowRecord.sparePartDescription"></a-textarea>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-        </template>
-
-        <template v-if="Boolean(tableRowRecord.sparePartDescription)&&isDisplayRepairResult">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉涓婃姤</a-divider>
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason">
-                <a-input :readOnly="disableSubmit||isDisableSubmitRepairResult" v-model="tableRowRecord.faultReason"
-                         rows="4" placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription">
-                <a-textarea :readOnly="disableSubmit||isDisableSubmitRepairResult"
-                            v-model="tableRowRecord.repairDescription"
-                            placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="缁翠慨鍥剧墖">
-                <lx-upload :disabled="disableSubmit||isDisableSubmitRepairResult" :returnUrl="false" :isMultiple="true"
-                           file-type="image" :number="3"
-                           v-model="tableRowRecord.imageFiles"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-        </template>
       </a-form-model>
     </a-spin>
   </j-modal>
@@ -173,8 +261,8 @@
 
 <script>
   import '@assets/less/TableExpand.less'
-  import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
-  import LxSearchEquipmentSelect from '../../../eam/equipment/modules/LxSearchEquipmentSelect'
+  import { getAction, downFile, httpAction } from '@api/manage'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect'
 
   export default {
     name: 'RepairOrderApprovalModal',
@@ -215,11 +303,26 @@
           sm: { span: 20 }
         },
         validatorRules: {
-          isUseSpare: [
-            { required: true, message: '璇烽�夋嫨鏄惁闇�瑕侀鐢ㄥ浠�' }
+          repairConfirm: [
+            { required: true, message: '璇烽�夋嫨鏄惁鍐呴儴鍙淮淇紒' }
           ],
-          sparePartDescription: [
-            { required: true, message: '璇疯緭鍏ュ浠舵弿杩�' }
+          repairConfirmComment: [
+            { required: true, message: '璇疯緭鍏ョ淮淇‘璁ゆ剰瑙�' }
+          ],
+          leaderConfirm: [
+            { required: true, message: '璇烽�夋嫨鏄惁鍚屾剰澶栭儴缁翠慨锛�' }
+          ],
+          leaderConfirmComment: [
+            { required: true, message: '璇疯緭鍏ラ瀵肩‘璁ゆ剰瑙�' }
+          ],
+          externalConfirm: [
+            { required: true, message: '璇烽�夋嫨鏈哄姩鍔炴槸鍚﹀彲缁翠慨锛�' }
+          ],
+          externalConfirmComment: [
+            { required: true, message: '璇疯緭鍏ユ満鍔ㄥ姙纭鎰忚' }
+          ],
+          confirmComment: [
+            { required: true, message: '璇疯緭鍏ユ搷浣滃伐纭鎰忚' }
           ],
           faultReason: [
             { required: true, message: '璇疯緭鍏ユ晠闅滃師鍥�' }
@@ -240,13 +343,25 @@
       }
     },
     computed: {
-      isDisableUseSpare() {
-        return this.disableSubmit || this.tableRowRecord.repairStatus !== 'UNDER_REPAIR' || Boolean(this.tableRowRecord.sparePartDescription)
+      repairConfirm() {
+        return ['WAIT_INTERNAL_CONFIRM', 'UNDER_INTERNAL_REPAIR', 'WAIT_LEADER_CONFIRM', 'WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       },
-      isDisplayRepairResult() {
-        return ['UNDER_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      underInternalRepair() {
+        return ['UNDER_INTERNAL_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       },
-      isDisableSubmitRepairResult() {
+      leaderConfirm() {
+        return ['UNDER_INTERNAL_REPAIR', 'WAIT_LEADER_CONFIRM', 'WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      externalConfirm() {
+        return ['WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      underExternalRepair() {
+        return ['UNDER_EXTERNAL_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      underOutsideRepair() {
+        return ['UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      operatorConfirm() {
         return ['WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       }
     },
@@ -313,14 +428,20 @@
         this.$refs.form.validate(valid => {
           if (valid) {
             that.confirmLoading = that.spinning = true
-            const { isUseSpare, faultReason, repairDescription, sparePartDescription, imageFiles, equipmentId } = that.tableRowRecord
+            const { confirmComment, externalConfirm, externalConfirmComment, repairConfirm, repairConfirmComment, leaderConfirm, leaderConfirmComment, faultReason, repairDescription, imageFiles, equipmentId } = that.tableRowRecord
             const { dataId, id, procInstId, taskDefKey, variables } = that.selectShenpiData
 
             const flowTaskVo = {}
-            flowTaskVo.isUseSpare = isUseSpare
+            flowTaskVo.repairConfirm = repairConfirm
+            flowTaskVo.repairConfirmComment = repairConfirmComment
+            flowTaskVo.leaderConfirm = leaderConfirm
+            flowTaskVo.leaderConfirmComment = leaderConfirmComment
+            flowTaskVo.externalConfirm = externalConfirm
+            flowTaskVo.externalConfirmComment = externalConfirmComment
+            flowTaskVo.confirmComment = confirmComment
+
             flowTaskVo.faultReason = faultReason
             flowTaskVo.repairDescription = repairDescription
-            flowTaskVo.sparePartDescription = sparePartDescription
             flowTaskVo.imageFilesResult = imageFiles
             flowTaskVo.equipmentId = equipmentId
             flowTaskVo.id = dataId
diff --git a/src/views/tms/ToolLedgerList.vue b/src/views/tms/ToolLedgerList.vue
new file mode 100644
index 0000000..b5af85c
--- /dev/null
+++ b/src/views/tms/ToolLedgerList.vue
@@ -0,0 +1,39 @@
+<template>
+  <a-row
+    type="flex"
+    :gutter="16"
+  >
+    <a-col
+      :md="5"
+      :sm="24"
+    >
+      <tool-ledger-list-left />
+    </a-col>
+    <a-col
+      :md="24-5"
+      :sm="24"
+    >
+      <tool-ledger-list-right />
+    </a-col>
+  </a-row>
+</template>
+
+<script>
+import ToolLedgerListLeft from './modules/toolLedger/ToolLedgerListLeft'
+import ToolLedgerListRight from './modules/toolLedger/ToolLedgerListRight'
+export default {
+  name: 'ToolLedgerList',
+  components: { ToolLedgerListLeft, ToolLedgerListRight },
+  data() {
+    return {
+      description: '宸ュ叿鍙拌处淇℃伅',
+      currentOrgCode: ''
+    }
+  },
+  methods: {}
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue
index 7548919..e2eda69 100644
--- a/src/views/tms/modules/inbound/InboundModel.vue
+++ b/src/views/tms/modules/inbound/InboundModel.vue
@@ -46,6 +46,18 @@
             </a-form-model-item>
           </a-col>
         </a-row>
+
+        <a-row style="width: 100%">
+          <a-col :span="24 / 2">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�" prop="locationCodeId">
+              <a-select
+                :triggerChange="true"
+                :options="locationCodeOptions"
+                v-model="model.locationCodeId"
+              />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
       </a-form-model>
     </a-spin>
     <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熷嚭宸ュ叿</a-button>
@@ -174,6 +186,12 @@
               message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!',
             },
           ],
+          locationCodeId:[
+            {
+              required: true,
+              message: '璇烽�夋嫨搴撲綅鍙�!',
+            },
+          ]
       },
       url: {
         addInStorage: '/tms/inboundOrder/addInStorage',
@@ -233,12 +251,18 @@
           scopedSlots: { customRender: 'action' },
         },
       ],
-      classifyId:''
+      classifyId:'',
+      locationCodeOptions:[]
     }
   },
   created() {
     //澶囦唤model鍘熷鍊�
     this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => {
+        if (res.success) {
+          this.locationCodeOptions = res.result
+        }
+      })
   },
   methods: {
     modalFormOk() {
@@ -402,7 +426,7 @@
           toolModel: data[i].toolModel,
           applicationType: data[i].applicationTypeName,
           onlyCode:data[i].onlyCode,
-          inStorageQuantity:data[i].storageQuantity || data[i].quantity,
+          inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1,
           quantity:data[i].quantity,
           accuracyClass:data[i].accuracyClass
         })
diff --git a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
index 06333dd..c66d5c8 100644
--- a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
+++ b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
@@ -41,7 +41,23 @@
             </a-form-item>
           </a-col>
           <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�">
+             <a-select
+                :triggerChange="true"
+                :options="locationCodeOptions"
+                v-decorator="[ 'locationCodeId', validatorRules.locationCodeId ]"
+              />
+            </a-form-item>
+          </a-col>
+          <!-- <a-col :span="24 / 2">
             <a-form-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol">
+             <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�"  :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" />
+            </a-form-item>
+          </a-col> -->
+        </a-row>
+         <a-row style="width: 100%">
+          <a-col :span="24">
+             <a-form-item label="鐢宠鍘熷洜" :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }" >
              <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�"  :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" />
             </a-form-item>
           </a-col>
@@ -324,9 +340,16 @@
           scopedSlots: { customRender: 'action' },
         },
       ],
+      locationCodeOptions:[]
     }
   },
-  created() {},
+  created() {
+    ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => {
+        if (res.success) {
+          this.locationCodeOptions = res.result
+        }
+      })
+  },
   methods: {
     modalFormOk() {
     },
@@ -531,7 +554,7 @@
           applicationType: data[i].applicationTypeName,
           onlyCode:data[i].onlyCode,
           quantity:data[i].quantity,
-          inStorageQuantity:data[i].storageQuantity || data[i].quantity,
+          inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1,
           accuracyClass:data[i].accuracyClass
         })
       }
diff --git a/src/views/tms/modules/toolLedger/InStoreDetailList.vue b/src/views/tms/modules/toolLedger/InStoreDetailList.vue
new file mode 100644
index 0000000..70f6f31
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/InStoreDetailList.vue
@@ -0,0 +1,109 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'InStoreDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/inStoreDetail/list',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鍗曠紪鍙�',
+          dataIndex: 'inboundNum',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱绫诲瀷',
+          dataIndex: 'inStorehouseTypeName',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鏂瑰紡',
+          dataIndex: 'operateType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '搴撲綅鍙�',
+          dataIndex: 'locationCode',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          dataIndex: 'inNumber',
+          align: 'center',
+        },
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/OutStoreDetailList.vue b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue
new file mode 100644
index 0000000..eb5fdd4
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue
@@ -0,0 +1,109 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'OutStoreDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/outStoreDetail/outStoreDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鍗曠紪鍙�',
+          dataIndex: 'outNum',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱绫诲瀷',
+          dataIndex: 'outStorehouseTypeName',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏂瑰紡',
+          dataIndex: 'operateType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏃堕棿',
+          dataIndex: 'outboundTime',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏁伴噺',
+          dataIndex: 'outNumber',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/StocktakingList.vue b/src/views/tms/modules/toolLedger/StocktakingList.vue
new file mode 100644
index 0000000..ece41de
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/StocktakingList.vue
@@ -0,0 +1,126 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLedgerDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolsStocktakingBound/toolsStocktakingList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣鍗曞彿',
+          dataIndex: 'orderCode',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣鍚嶇О',
+          dataIndex: 'stocktakingName',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣绫诲瀷',
+          dataIndex: 'stocktakingType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鐩樺簱鏃堕棿',
+          dataIndex: 'stocktakingDate',
+          align: 'center',
+        },
+        {
+          title: '鐩樼泩鐩樹簭',
+          dataIndex: 'surplusDeficit',
+          align: 'center',
+        },
+        {
+          title: '璐﹂潰鏁伴噺',
+          dataIndex: 'bookQuantity',
+          align: 'center',
+        },
+        {
+          title: '鍙敤鏁伴噺',
+          dataIndex: 'availableQuantity',
+          align: 'center',
+        },
+        {
+          title: '瀹炵洏鏁伴噺',
+          dataIndex: 'practicalQuantity',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue
new file mode 100644
index 0000000..60432f6
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue
@@ -0,0 +1,85 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLedgerDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolLedgerDetail/queryToolLedgerDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+      
+        {
+          title: '宸ュ叿鍒嗙被',
+          dataIndex: 'applicationType',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue
new file mode 100644
index 0000000..6e2d070
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue
@@ -0,0 +1,323 @@
+<template>
+  <a-card
+    :loading="cardLoading"
+    :bordered="false"
+    title="宸ュ叿淇℃伅"
+    style="height: 100%;"
+  >
+    <a-spin :spinning="loading">
+      <a-alert
+        type="info"
+        :showIcon="true"
+        style="margin-right: 54px;"
+      >
+        <div slot="message">
+          褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
+          <a
+            v-if="this.currSelected.title"
+            style="margin-left: 10px"
+            @click="onClearSelected"
+          >鍙栨秷</a>
+        </div>
+      </a-alert>
+      <!-- <div class="drawer-bootom-button">
+        <a-dropdown
+          :trigger="['click']"
+          placement="bottomCenter"
+        >
+          <a-menu slot="overlay">
+            <a-menu-item
+              key="1"
+              @click="expandAll"
+            >灞曞紑鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="2"
+              @click="closeAll"
+            >鍚堝苟鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="3"
+              @click="refreshTree"
+            >鍒锋柊</a-menu-item>
+          </a-menu>
+          <a-button>
+            <a-icon type="bars" />
+          </a-button>
+        </a-dropdown>
+      </div> -->
+
+      <a-input-search
+        @search="handleSearch"
+        style="width:100%;margin-top: 10px"
+        placeholder="妫�绱㈠伐鍏峰垎绫�"
+        allowClear
+        v-model="searchInput"
+        @change="handleChange"
+      />
+
+      <!-- showLine -->
+      <a-tree
+        :checkStrictly="checkStrictly"
+      
+        :selectedKeys="selectedKeys"
+        :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+        :treeData="treeDataSource"
+        
+        :defaultExpandAll="true"
+        @select="onSelect"
+        @expand="onExpand"
+      >
+        <template
+          slot="title"
+          slot-scope="{title, type, rfield1}"
+        >
+          <Tooltip
+            placement="top"
+            title="宸ュ叿鍒嗙被"
+          >
+            <i
+              v-if="type == 0"
+              class="action-jeecg actioncompany2"
+              style="font-size: 18px;"
+            />
+          </Tooltip>
+
+          <span v-if="title.indexOf(searchValue) > -1">
+            {{ title.substr(0, title.indexOf(searchValue)) }}
+            <span class="replaceSearch">{{ searchValue }}</span>
+            {{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
+          </span>
+          <span v-else>{{ title }}</span>
+      
+        </template>
+      </a-tree>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+export default {
+  name: 'ToolLedgerListLeft',
+  components: {
+    Tooltip,
+  },
+  props: ['value'],
+  data() {
+    return {
+      searchInput: '',
+      cardLoading: false,
+      loading: false,
+      treeDataSource: [],
+      selectedKeys: [],
+      expandedKeys: [],
+      url: {
+        factoryTreeList: '/tms/toolsClassify/loadTree',
+      },
+      searchValue: '',
+      dataList: [],
+      autoExpandParent: true,
+      checkStrictly: true,
+      allTreeKeys: [],
+      currSelected: {},
+      hiding: false,
+    }
+  },
+  created() {
+    this.queryTreeData();
+    this.closeAll();
+  },
+  methods: {
+    getCurrSelectedTitle() {
+      return !this.currSelected.title ? '' : this.currSelected.title;
+    },
+    onClearSelected() {
+      this.hiding = true;
+      this.currSelected = {};
+      this.selectedKeys = [];
+    },
+    onSelect(selectedKeys, e) {
+      this.hiding = false;
+      let record = e.node.dataRef;
+      this.currSelected = Object.assign({}, record);
+      this.selectedKeys = [record.key];
+    },
+    onExpand(expandedKeys) {
+      this.expandedKeys = expandedKeys;
+      this.autoExpandParent = false;
+    },
+    queryTreeData() {
+      this.loading = true;
+      this.cardLoading = true;
+      getAction(this.url.factoryTreeList).then((res) => {
+        if (res.success) {
+          this.dataList = [];
+          this.allTreeKeys = [];
+          this.treeDataSource = res.result;
+          this.generateList(res.result);
+        } else {
+          this.$message.warn(res.message);
+        }
+      }).finally(() => {
+        this.loading = false;
+        this.cardLoading = false;
+      })
+    },
+
+    handleChange() {
+      let search = this.searchInput;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    handleSearch(value) {
+      let search = value;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    getParentKey(key, tree) {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.key === key)) {
+            parentKey = node.key;
+          } else if (
+            this.getParentKey(key, node.children)) {
+            parentKey = this.getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    },
+
+    generateList(data) {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const key = node.key;
+        const title = node.title;
+        this.dataList.push({ key, title: title });
+        this.allTreeKeys.push(key);
+        if (node.children) {
+          this.generateList(node.children);
+        }
+      }
+    },
+    expandAll() {
+      this.expandedKeys = this.allTreeKeys;
+    },
+    closeAll() {
+      this.expandedKeys = [];
+    },
+    refreshTree() {
+      this.queryTreeData();
+    }
+  },
+  mounted() {
+    this.$bus.$on('queryTreeData', this.queryTreeData);
+  },
+  //鐩戝惉
+  watch: {
+    currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢
+      this.$bus.$emit('getCurrSelected', val)
+    },
+  }
+}
+</script>
+
+<style scoped>
+.replaceSearch {
+  color: #40a9ff;
+  font-weight: bold;
+  background-color: rgb(204, 204, 204);
+}
+/*闅愯棌鏍戠殑榛樿icon*/
+.ant-tree-switcher-noop {
+  display: none !important;
+}
+/*闅愯棌鏍戠殑榛樿绔栫嚎*/
+.ant-tree.ant-tree-show-line li:not(:last-child):before {
+  border-left: 0px;
+}
+
+.ant-card-body .table-operator {
+  margin: 15px;
+}
+
+.anty-form-btn {
+  width: 100%;
+  text-align: center;
+}
+
+.anty-form-btn button {
+  margin: 0 5px;
+}
+
+.anty-node-layout .ant-layout-header {
+  padding-right: 0;
+}
+
+.header {
+  padding: 0 8px;
+}
+
+.header button {
+  margin: 0 3px;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+
+#app .desktop {
+  height: auto !important;
+}
+
+/** Button鎸夐挳闂磋窛 */
+.ant-btn {
+  margin-left: 3px;
+}
+.ant-alert {
+  padding: 5px 15px 5px 37px;
+}
+.drawer-bootom-button {
+  position: absolute;
+  top: 1px;
+  /* padding: 10px 16px; */
+  text-align: left;
+  right: 0;
+  background: #fff;
+  border-radius: 0 0 2px 2px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue
new file mode 100644
index 0000000..e5e10e5
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue
@@ -0,0 +1,516 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+           <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="宸ュ叿缂栧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�"
+                v-model="queryParam.toolCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍨嬪彿/鍥惧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�"
+                v-model="queryParam.toolModel"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :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="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
+        class="j-table-force-nowrap"
+        :customRow="customRow"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            涓嬭浇
+          </a-button>
+        </template>
+      </a-table>
+    </div>
+
+     <a-tabs defaultActiveKey="1">
+      <a-tab-pane key="1">
+        <span slot="tab">
+          <a-badge>鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list>
+        <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list>
+        <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list>
+        <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list>
+        <para-blade-list ref="paraBladeList"></para-blade-list>
+        <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="2"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>绠$悊鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="3"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鎶婂彿&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-ledger-detail-list ref="toolLedgerDetailList"></tool-ledger-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="4"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍏ュ簱淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <in-store-detail-list ref="inStoreDetailList"></in-store-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="5"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍑哄簱淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <out-store-detail-list ref="outStoreDetailList"></out-store-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="6"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍒冪(淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-sharpen-list ref="toolSharpenList"></tool-sharpen-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="7"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鎶ユ崯淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-loss-list ref="toolLossList"></tool-loss-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="8"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鐩樼偣淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <stocktaking-list ref="stocktakingList"></stocktaking-list>
+      </a-tab-pane>
+    </a-tabs>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import Tooltip from 'ant-design-vue/es/tooltip'
+  import { getAction, postAction, deleteAction, requestPut } from '@api/manage'
+  import ParaHoleToolsList from '../baseTools/ParaHoleToolsList'
+  import ToolsConfigPropertyList from '../baseTools/ToolsConfigPropertyList'
+  import ParaMillToolList from '../baseTools/ParaMillToolList'
+  import ParaThreadingToolList from '../baseTools/ParaThreadingToolList'
+  import ParaTurningToolsList from '../baseTools/ParaTurningToolsList'
+  import ParaCommonToolList from '../baseTools/ParaCommonToolList'
+  import ParaBladeList from '../baseTools/ParaBladeList'
+  import ToolLedgerDetailList from './ToolLedgerDetailList'
+  import ToolLossList from './ToolLossList'
+  import ToolSharpenList from './ToolSharpenList'
+  import StocktakingList from './StocktakingList'
+  import InStoreDetailList from './InStoreDetailList'
+  import OutStoreDetailList from './OutStoreDetailList'
+
+  export default {
+    name: 'ToolLedgerListRight',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      Tooltip,
+      ParaHoleToolsList,
+      ToolsConfigPropertyList,
+      ParaMillToolList,
+      ParaThreadingToolList,
+      ParaTurningToolsList,
+      ParaCommonToolList,
+      ParaBladeList,
+      ToolLedgerDetailList,
+      ToolLossList,
+      ToolSharpenList,
+      StocktakingList,
+      InStoreDetailList,
+      OutStoreDetailList
+    },
+    data () {
+      return {
+        description: '宸ュ叿鍙拌处淇℃伅绠$悊椤甸潰',
+        /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'宸ュ叿缂栫爜',
+            align:"center",
+            dataIndex: 'toolCode'
+          },
+          {
+            title:'搴忓彿',
+            align:"center",
+            dataIndex: 'signCode'
+          },
+          {
+            title:'涓枃鍚嶇О',
+            align:"center",
+            dataIndex: 'chineseName'
+          },
+          // {
+          //   title:'澶栨枃鍚嶇О',
+          //   align:"center",
+          //   dataIndex: 'foreignLanguageName'
+          // },
+          // {
+          //   title:'鏍囨敞绾у埆',
+          //   align:"center",
+          //   dataIndex: 'standardLevel'
+          // },
+          // {
+          //   title:'鏍囧噯鍙�',
+          //   align:"center",
+          //   dataIndex: 'standardCode'
+          // },
+          {
+            title:'鍨嬪彿/鍥惧彿',
+            align:"center",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'宸ュ叿绫诲瀷',
+            align:"center",
+            dataIndex: 'applicationType'
+          },
+          {
+            title:'绠$悊绛夌骇',
+            align:"center",
+            dataIndex: 'accuracyClass'
+          },
+          {
+            title:'瀛樺偍浣嶇疆',
+            align:"center",
+            dataIndex: 'storageLocation'
+          },
+          {
+            title:'搴撲綅鍙�',
+            align:"center",
+            dataIndex: 'positionCode'
+          },
+          {
+            title:'鏈�浣庡簱瀛�',
+            align:"center",
+            dataIndex: 'lowerInventory'
+          },
+          {
+            title:'鏈�楂樺簱瀛�',
+            align:"center",
+            dataIndex: 'highestInventory'
+          },
+          {
+            title:'鎬诲簱瀛�',
+            align:"center",
+            dataIndex: 'totalCount'
+          },
+          {
+            title:'鍙敤搴撳瓨',
+            align:"center",
+            dataIndex: 'availableCount'
+          },
+          {
+            title:'鎶ユ崯',
+            align:"center",
+            dataIndex: 'lossCount'
+          },
+          {
+            title:'鍦ㄥ��',
+            align:"center",
+            dataIndex: 'lendCount'
+          },
+          {
+            title:'鍦ㄧ(',
+            align:"center",
+            dataIndex: 'sharpeningCount'
+          },
+          {
+            title:'鍦ㄦ',
+            align:"center",
+            dataIndex: 'detectionCount'
+          },
+          {
+            title:'鍦ㄤ慨',
+            align:"center",
+            dataIndex: 'repairCount'
+          }
+          // {
+          //   title:'澶囨敞',
+          //   align:"center",
+          //   dataIndex: 'remark'
+          // }
+          // {
+          //   title:'鍒涘缓浜�',
+          //   align:"center",
+          //   dataIndex: 'createBy'
+          // },
+          // {
+          //   title:'鍒涘缓鏃堕棿',
+          //   align:"center",
+          //   dataIndex: 'createTime',
+          //   customRender:function (text) {
+          //     return !text?"":(text.length>10?text.substr(0,10):text)
+          //   }
+          // }
+        ],
+        url: {
+          list: "/tms/baseTools/list",
+          paraHolesToolsList:"/tms/baseTools/paraHolesToolsList",
+          paraCommonToolList:"/tms/baseTools/paraCommonToolList",
+          paraThreadingToolList:"/tms/baseTools/paraThreadingToolList",
+          paraMillToolList:"/tms/baseTools/paraMillToolList",
+          paraTurningToolsList:"/tms/baseTools/paraTurningToolsList",
+          paraBladeList:"/tms/baseTools/paraBladeList",
+          delete: "/tms/baseTools/delete",
+          deleteBatch: "/tms/baseTools/deleteBatch",
+          edit: '/tms/baseTools/edit',
+          exportXlsUrl: "/tms/baseTools/exportXls",
+          importExcelUrl: "tms/baseTools/importExcel",
+          queryParaByToolCode:"/tms/baseTools/queryByToolCode",
+          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode",
+          toolLedgerList:"/tms/toolLedger/toolLedgerList",
+          toolLedgerDetailList:"/tms/toolLedgerDetail/list"
+        },
+        dictOptions:{},
+        superFieldList:[],
+        nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹�
+        paraTypeFlag:'',
+        disableMixinCreated:true
+      }
+    },
+    created() {
+      this.$bus.$on('getCurrSelected', (data) => {
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      this.nodeType = (data.type == undefined ? 0 : data.type);
+      this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag)
+      this.nodeSelected = data;
+      this.loadData()
+      this.clearPara()
+    })
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+
+      modalFormOk() {
+        this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁
+        this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍�
+      },
+
+      onSelectChange(selectedRowKeys,selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows
+        //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹�
+        getAction(this.url.queryParaByToolCode, { toolCode: this.selectedRowKeys[0],paraTypeFlag:this.paraTypeFlag}).then((res) => {
+          if (res.success) {
+            if(this.paraTypeFlag === "1"){
+              this.$refs.paraCommonToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "2"){
+              this.$refs.paraHoleToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "3"){
+              this.$refs.paraThreadingToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "4"){
+              this.$refs.paraMillToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "5"){
+              this.$refs.paraTurningToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "6"){
+              this.$refs.paraBladeList.getPara(res.result);
+            }
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        getAction(this.url.queryByToolCode, { toolCode: this.selectedRowKeys[0]}).then((res) => {
+          if (res.success) {
+            this.$refs.toolsConfigPropertyList.getPara(res.result);
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        this.$bus.$emit('getToolLedgerData', this.selectionRows[0])
+      },
+      //绂佺敤鐘舵�佹牱寮�
+      tableRowClass(record, index) {
+        if (record.status != "1") {
+          return "frozenRowClass";
+        }
+        return "";
+      },
+      loadData() {
+        let params = this.getQueryParams();
+        if (this.nodeSelected && this.nodeSelected.key !== '-1') {
+          // 鍔犺浇閫変腑鑺傜偣鐨勫瓙绫�
+          params.classifyId = this.nodeSelected.key;
+          this.loading = true;
+        let httpUrl = this.url.toolLedgerList
+        getAction(httpUrl, params)
+          .then((res) => {
+            if (res.success) {
+              this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
+              this.ipagination.total = res.result.total
+            } else {
+              this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+              this.ipagination.total = 0
+            }
+          })
+          .finally(() => {
+            this.loading = false;
+          });
+        } else {
+          this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+        }
+      },
+      onClearSelected() {
+        this.selectedKeys = [];
+        this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐�
+        this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁
+      },
+      //閲嶇疆
+      searchReset() {
+        this.queryParam = {}
+        this.loadData(1);
+        this.clearPara()
+      },
+      //娓呯┖閫変腑鍙婂弬鏁�
+      clearPara(){
+        this.selectedRowKeys = []   
+        this.$refs.paraCommonToolList.visable = false
+        this.$refs.paraHoleToolsList.visable = false
+        this.$refs.paraThreadingToolList.visable = false   
+        this.$refs.paraMillToolList.visable = false    
+        this.$refs.paraTurningToolsList.visable = false
+        this.$refs.paraBladeList.visable = false
+        this.$refs.toolsConfigPropertyList.visable = false
+      },
+      customRow(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
+      
+    },
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+   .enable {
+    color: green;
+  }
+  .disable {
+    color: red;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLossList.vue b/src/views/tms/modules/toolLedger/ToolLossList.vue
new file mode 100644
index 0000000..9943d6a
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLossList.vue
@@ -0,0 +1,106 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLossList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolsLossBound/toolLossDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鍗曞彿',
+          dataIndex: 'orderCode',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鍘熷洜',
+          dataIndex: 'lossReason',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鏃堕棿',
+          dataIndex: 'lossTime',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鏁伴噺',
+          dataIndex: 'lossNumber',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolSharpenList.vue b/src/views/tms/modules/toolLedger/ToolSharpenList.vue
new file mode 100644
index 0000000..eff61b3
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolSharpenList.vue
@@ -0,0 +1,101 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolSharpenList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolSharpening/toolSharpeningList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '璐d换浜�',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(鏃堕棿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(缁撴灉鍙婂缓璁�',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(鐘舵��',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
index 0f1ba35..0c018fb 100644
--- a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
+++ b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
@@ -227,7 +227,7 @@
       this.expandedKeys = this.allTreeKeys;
     },
     closeAll() {
-      this.expandedKeys = this.allSiteIds;
+      this.expandedKeys = [];
     },
     refreshTree() {
       this.queryTreeData();

--
Gitblit v1.9.3