From 08e52db54ce1e7563f1efe402a3f6c3931188013 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期五, 14 二月 2025 10:47:53 +0800
Subject: [PATCH] 产品结构树: 1、实现文档批量删除功能 2、实现文档列表的排序以及筛选功能 设备结构树: 1、新增权限配置弹窗,提交后由后端测试

---
 src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue |  137 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 106 insertions(+), 31 deletions(-)

diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
index 492ec83..26a68a1 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
@@ -10,13 +10,14 @@
                 <a-row :gutter="24">
                   <a-col :md="7" :sm="7">
                     <a-form-item label="鏂囦欢鍚嶇О">
-                      <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.docName"></a-input>
+                      <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.docName" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
 
                   <a-col :md="11" :sm="11">
                     <a-form-item label="涓婁紶鏃堕棿">
-                      <a-range-picker v-model="queryParam.collectTime"></a-range-picker>
+                      <a-range-picker v-model="date" value-format="YYYY-MM-DD"
+                                      @change="handleDateChange" allow-clear></a-range-picker>
                     </a-form-item>
                   </a-col>
 
@@ -30,6 +31,7 @@
 
             <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :loading="loading"
                      :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+                     @change="handleTableChange"
                      :scroll="{y:456}" :size="size" rowKey="docId">
 
             </a-table>
@@ -55,10 +57,10 @@
                   <a-tree blockNode checkable :checkedKeys="checkedKeys" :expandedKeys.sync="expandedKeys"
                           :autoExpandParent="autoExpandParent" @select="handleTreeNodeSelect"
                           :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeNodeExpand">
-                    <template slot="title" slot-scope="{ label, parentId, entity, key:treeKey,type}">
-                     <span v-if="label.indexOf(searchValue) > -1">{{ label.substr(0, label.indexOf(searchValue)) }}<span
-                       class="replaceSearch">{{ searchValue }}</span>{{ label.substr(label.indexOf(searchValue) + searchValue.length) }}</span>
-                      <span v-else>{{ label }}</span>
+                    <template slot="title" slot-scope="{ title, parentId, entity, key:treeKey,type}">
+                     <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>
                 </div>
@@ -83,6 +85,7 @@
   import { getAction } from '@/api/manage'
   import dncApi from '@/api/dnc'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import { mapActions } from 'vuex'
 
   export default {
     name: 'NcDocumentAssignModal',
@@ -112,11 +115,43 @@
               return parseInt(index) + 1
             }
           },
-          { title: '鏂囦欢鍚嶇О', dataIndex: 'docName', align: 'center', width: 300 },
+          {
+            title: '鏂囦欢鍚嶇О',
+            dataIndex: 'docName',
+            key: 'docName',
+            align: 'center',
+            width: 300,
+            sorter: true
+          },
           { title: '璁惧缂栧彿', dataIndex: 'docCode', align: 'center' },
-          { title: '鍑哄簱鐘舵��', dataIndex: 'pullStatus_dictText', align: 'center' },
-          { title: '鐘�  鎬�', dataIndex: 'docStatus_dictText', align: 'center' },
-          { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center', width: 200 }
+          {
+            title: '鍑哄簱鐘舵��',
+            dataIndex: 'pullStatus_dictText',
+            key: 'pullStatus',
+            align: 'center',
+            filters: [
+              { text: '鏈嚭搴�', value: 1 },
+              { text: '宸插嚭搴�', value: 2 }
+            ]
+          },
+          {
+            title: '鐘�  鎬�',
+            dataIndex: 'docStatus_dictText',
+            key: 'docStatus',
+            align: 'center',
+            filters: [
+              { text: '璁捐', value: 1 },
+              { text: '鍙戝竷', value: 2 },
+              { text: '褰掓。', value: 3 }
+            ]
+          },
+          {
+            title: '鍒涘缓鏃堕棿',
+            dataIndex: 'createTime',
+            align: 'center',
+            width: 200,
+            sorter: true
+          }
         ],
         searchValue: '',
         searchInput: '',
@@ -127,6 +162,7 @@
         expandedKeys: [],
         autoExpandParent: true,
         isExpandAllTreeNode: false,
+        date: [],
         url: {
           list: '/nc/doc/find/list'
         }
@@ -150,6 +186,9 @@
       }
     },
     methods: {
+      ...mapActions(['QueryProduction']),
+
+      // 鑾峰彇褰撳墠宸ュ簭鎴栧伐姝ュ搴旀枃妗e垪琛�
       loadData() {
         this.dataSource = []
         if (!this.url.list) {
@@ -157,14 +196,11 @@
           return
         }
         var params = this.getQueryParams()//鏌ヨ鏉′欢
-        if (!params) {
-          return false
-        }
+        if (!params) return false
         const { attributionType, attributionId, param } = this.currentDocumentInfo
         params.attributionType = attributionType
         params.attributionId = attributionId
         params.docClassCode = param
-        console.log('params', params)
         this.loading = true
         getAction(this.url.list, params).then((res) => {
           if (res.success) this.dataSource = res.result
@@ -174,16 +210,18 @@
         })
       },
 
+      // 鑾峰彇DNC璁惧鏍�
       getDocumentAssignDeviceTreeByApi() {
         this.spinning = true
         this.treeDataSource = []
-        dncApi.getDocumentAssignDeviceTreeApi(this.currentDocumentInfo)
+        this.QueryProduction('DNC')
           .then(res => {
             if (res.success) {
               this.dataList = []
               this.allTreeKeys = []
-              this.treeDataSource = res.list
+              this.treeDataSource = res.result
               this.generateList(this.treeDataSource)
+              this.expandedKeys = this.allTreeKeys
             } else {
               this.$message.warn(res.message)
             }
@@ -193,15 +231,42 @@
           })
       },
 
+      // 鏃堕棿閫夋嫨鍣ㄩ�夋嫨瀹屾垚鍚庤Е鍙�
+      handleDateChange(value) {
+        this.queryParam.startTime = value[0]
+        this.queryParam.endTime = value[1]
+      },
+
+      /**
+       * 琛ㄦ牸鍒嗛〉銆佹帓搴忔敼鍙樸�佺瓫閫夋椂瑙﹀彂
+       * @param pagination 鍒嗛〉鍣ㄩ�夐」
+       * @param filters 绛涢�夐�夐」
+       * @param sorter 鎺掑簭閫夐」
+       */
+      handleTableChange(pagination, filters, sorter) {
+        if (sorter.order) {
+          this.isorter.column = sorter.field
+          this.isorter.order = sorter.order === 'ascend' ? 'asc' : 'desc'
+        } else {
+          this.isorter.column = 'createTime'
+          this.isorter.order = 'desc'
+        }
+        for (let key in filters) {
+          this.filters[key] = filters[key].join(',')
+        }
+        this.loadData()
+      },
+
+      // 鎸囨淳鍒拌澶囩獥鍙g偣鍑荤‘瀹氭寚娲捐澶囧悗瑙﹀彂
       handleAssignDocumentToDevice() {
-        const { checkedKeys, selectedRowKeys, dataList, $confirm, $notification, currentDocumentInfo, queryParam: { applyReason }, $set } = this
-        const { publishFileId, attributionId } = currentDocumentInfo
+        const { checkedKeys, selectedRowKeys, dataList, $confirm, $notification, currentDocumentInfo, queryParam: { applyReason }, $destroyAll, $bus } = this
+        const { publishFileId, attributionId, attributionType } = currentDocumentInfo
         const paramsArray = []
-        // 杩囨护鍒嗙粍Id浠呮斁鍏ヨ澶嘔d
+        // 杩囨护杞﹂棿key浠呮斁鍏ヨ澶噆ey
         const treeCheckedDeviceKeys = []
         checkedKeys.forEach(checkedKey => {
-          const deviceId = dataList.find(item => item.key === checkedKey && item.type === 2)
-          if (deviceId) treeCheckedDeviceKeys.push(deviceId.key)
+          const device = dataList.find(item => item.key === checkedKey && item.type === 2)
+          if (device) treeCheckedDeviceKeys.push(device.key)
         })
 
         if (treeCheckedDeviceKeys.length === 0 || selectedRowKeys.length === 0) {
@@ -218,13 +283,15 @@
           okText: '纭',
           cancelText: '鍙栨秷',
           onOk: () => {
+            // 鍙岄噸寰幆纭畾姣忎竴缁勮澶囦笌鏂囨。鐨勫弬鏁�
             treeCheckedDeviceKeys.forEach(deviceId => {
               selectedRowKeys.forEach(docId => {
                 paramsArray.push({
                   docId,
                   deviceId,
                   fileId: publishFileId,
-                  processId: attributionId,
+                  attributionId,
+                  attributionType,
                   applyReason
                 })
               })
@@ -234,7 +301,7 @@
               dncApi.assignDocumentToDeviceApi(item)
                 .then(res => {
                   if (res.success) {
-                    this.$bus.$emit('reloadMainBottomTableData', 'useDocumentEquipment')
+                    $bus.$emit('reloadMainBottomTableData', 'useDocumentEquipment')
                     $notification.success({
                       message: '娑堟伅',
                       description: res.message
@@ -252,13 +319,15 @@
                     description: err.message
                   })
                 })
+                .finally(() => {
+                  $destroyAll()
+                })
             })
-            console.log('paramsArray', paramsArray)
+          },
+          onCancel: () => {
+            $destroyAll()
           }
         })
-        // console.log('table', this.selectedRowKeys)
-        // console.log('treeCheckedDeviceKeys', treeCheckedDeviceKeys)
-        // console.log('currentDocumentInfo', this.currentDocumentInfo)
       },
 
       /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */
@@ -302,6 +371,11 @@
         this.checkedKeys = checkedKeys
       },
 
+      /**
+       * 鏍戣妭鐐归�変腑鏃惰Е鍙戯紙妯℃嫙鏍戣妭鐐瑰閫夋閫変腑鏃剁殑鏁堟灉锛�
+       * @param selectedKeys 閫変腑鑺傜偣key
+       * @param {node} node 鑺傜偣瀵硅薄
+       */
       handleTreeNodeSelect(selectedKeys, { node }) {
         node.$el.childNodes[1].click()
       },
@@ -330,14 +404,13 @@
 
       /**
        * 閫掑綊鑾峰緱鎵�鏈夋爲鑺傜偣key
-       * @param data
+       * @param data 璁惧鏍戞暟鎹�
        */
       generateList(data) {
         for (let i = 0; i < data.length; i++) {
-          data[i].key = data[i].id
           const node = data[i]
-          const key = node.id
-          const title = node.label
+          const key = node.key
+          const title = node.title
           const type = node.type
           this.dataList.push({ key, title, type })
           this.allTreeKeys.push(key)
@@ -350,6 +423,8 @@
         this.expandedKeys = []
         this.selectedRowKeys = []
         this.checkedKeys = []
+        this.filters = {}
+        this.isorter = Object.assign({}, this.defaultSorter)
       }
     }
   }

--
Gitblit v1.9.3