From 9fbbbe80e6b48a3bd9544a24295971b8da9bc337 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 21 七月 2025 19:07:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/system/modules/SelectDeviceModal.vue |  359 +++++++++++++++++++++++++++--------------------------------
 1 files changed, 167 insertions(+), 192 deletions(-)

diff --git a/src/views/system/modules/SelectDeviceModal.vue b/src/views/system/modules/SelectDeviceModal.vue
index 6d8ace1..599de84 100644
--- a/src/views/system/modules/SelectDeviceModal.vue
+++ b/src/views/system/modules/SelectDeviceModal.vue
@@ -1,228 +1,191 @@
 <template>
-  <div>
-    <a-modal
-      centered
-      :title="title"
-      :width="1000"
-      :visible="visible"
-      @ok="handleOk"
-      @cancel="handleCancel"
-      cancelText="鍏抽棴">
+  <a-modal
+    :title="title"
+    :visible="visible"
+    @ok="handleOk"
+    @cancel="handleCancel"
+  >
 
-      <!-- 鏌ヨ鍖哄煙 -->
-      <div class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="searchQuery">
-          <a-row :gutter="24">
+    <a-spin :spinning="loading">
+      <!-- showLine -->
+      <a-form>
+        <a-form-item label="杞﹂棿灞傜骇锛�">
+          <a-tree showLine ref="tree" :expandedKeys.sync="expandedKeys"
+                  :treeData="treeDataSource" checkable @check="onCheck" v-model="checkedKeys"
+                  @expand="onExpand">
+          </a-tree>
+        </a-form-item>
+      </a-form>
 
-            <a-col :span="10">
-              <a-form-item label="璁惧鍚嶇О">
-                <a-input placeholder="璇疯緭鍏ヨ澶囧悕绉�" v-model="queryParam.equipmentName"></a-input>
-              </a-form-item>
-            </a-col>
-            <a-col :span="8">
-                    <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-spin>
 
-          </a-row>
-        </a-form>
-      </div>
-      <!-- table鍖哄煙-begin -->
+    <template slot="footer">
       <div>
-        <a-table
-          size="small"
-          bordered
-          rowKey="equipmentId"
-          :columns="columns1"
-          :dataSource="dataSource1"
-          :pagination="ipagination"
-          :loading="loading"
-          :scroll="{ y: 240 }"
-          :rowSelection="{selectedRowKeys: selectedRowKeys,onSelectAll:onSelectAll,onSelect:onSelect,onChange: onSelectChange}"
-          @change="handleTableChange">
-        </a-table>
+        <a-dropdown
+          style="float: left"
+          :trigger="['click']"
+          placement="topCenter"
+        >
+          <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="up"/>
+          </a-button>
+        </a-dropdown>
+        <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷">
+          <a-button style="margin-right: .8rem">鍏抽棴</a-button>
+        </a-popconfirm>
+        <a-button
+          @click="handleOk"
+          type="primary"
+        >纭畾
+        </a-button>
       </div>
-      <!-- table鍖哄煙-end -->
-    </a-modal>
-  </div>
+    </template>
+
+  </a-modal>
 </template>
 
 <script>
-  import { filterObj } from '@/utils/util'
-  import { getAction } from '@/api/manage'
+  import {
+    getAction,
+    postAction,
+    deleteAction
+  } from '@/api/manage'
+  import BaseTree from '@/views/mdc/common/BaseTree'
+  import DepartTree from '@/views/mdc/base/modules/DepartList/DepartListTree/DepartTree'
 
   export default {
     name: 'SelectDeviceModal',
+    components: {
+      BaseTree, DepartTree
+    },
+    props: {
+      editDisable: {
+        type: Boolean,
+        default() {
+          return true
+        }
+      },
+      title: {
+        type: String
+      },
+      selectedProduction: {
+        type: String
+      }
+    },
     data() {
       return {
-        title: '娣诲姞宸叉湁璁惧',
-        names: [],
-        visible: false,
-        placement: 'right',
-        description: '',
-        // 鏌ヨ鏉′欢
-        queryParam: {},
-        // 琛ㄥご
-        columns1: [
-          {
-            title: '#',
-            dataIndex: '',
-            key: 'rowIndex',
-            width: 50,
-            align: 'center',
-            customRender: function(t, r, index) {
-              return parseInt(index) + 1
-            }
-          },
-          {
-            title: '璁惧缂栧彿',
-            align: 'center',
-            width: 100,
-            dataIndex: 'equipmentId'
-          },
-          {
-            title: '璁惧鍚嶇О',
-            align: 'center',
-            width: 100,
-            dataIndex: 'equipmentName'
-          },
-          {
-            title: '璁惧绫诲瀷',
-            align: 'center',
-            width: 100,
-            dataIndex: 'equipmentType'
-          },
-          {
-            title: '椹卞姩绫诲瀷',
-            align: 'center',
-            width: 100,
-            dataIndex: 'driveType'
-          }
-        ],
-        //鏁版嵁闆�
-        dataSource1: [],
-        dataSource2: [],
-        // 鍒嗛〉鍙傛暟
-        ipagination: {
-          current: 1,
-          pageSize: 10,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0
-        },
         loading: false,
-        selectedRowKeys: [],
-        selectedRows: [],
+        treeDataSource: [],
+        expandedKeys: [],
+        checkedKeys: [],
         url: {
-          list: '/mdc/mdcEquipment/list'
-        }
+          getDeviceTree: '/mdc/mdcEquipment/loadTreeListByProductionIds'
+        },
+        selectedWorkshopIds: '',
+        dataList: [],
+        allTreeKeys: [],
+        visible: false,
+        dataSource: []
       }
     },
     created() {
-      this.loadData()
+      this.closeAll()
     },
     methods: {
-      searchQuery() {
-        this.loadData(1)
+      onExpand(expandedKeys) {
+        this.expandedKeys = expandedKeys
+        this.autoExpandParent = false
       },
-      searchReset() {
-        this.queryParam = {}
-        this.loadData(1)
+      queryTreeData(value) {
+        this.loading = true
+        this.selectedWorkshopIds = value
+        getAction(this.url.getDeviceTree, { ids: value })
+          .then(res => {
+            if (res.success) {
+              this.dataList = []
+              this.allTreeKeys = []
+              this.getTreeDataSouce(res.result)
+              this.treeDataSource = res.result
+              this.generateList(this.treeDataSource)
+              this.expandedKeys = this.allTreeKeys
+            } else {
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+          .catch(err => {
+            this.$notification.error({
+              message: '娑堟伅',
+              description: err.message
+            })
+          })
+          .finally(() => {
+            this.loading = false
+          })
+      },
+
+      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)
+          }
+        }
+      },
+
+      getTreeDataSouce(data) {
+        data.forEach(item => {
+          if (item.children && item.children.length > 0) {
+            this.getTreeDataSouce(item.children)
+          }
+          item.key = item.equipmentId ? item.equipmentId : item.key
+          item.value = item.equipmentId ? item.equipmentId : item.value
+        })
+      },
+      expandAll() {
+        this.expandedKeys = this.allTreeKeys
+      },
+      closeAll() {
+        this.expandedKeys = ['-1']
+      },
+      refreshTree() {
+        this.queryTreeData(this.selectedWorkshopIds)
+      },
+      onCheck(value, obj) {
+        this.checkedKeys = value
+        this.deviceNodes = obj.checkedNodes.filter(item => item.data.props.equipmentId).map(item => item.data.props.equipmentId)
       },
       handleCancel() {
         this.visible = false
       },
       handleOk() {
-        this.dataSource2 = this.selectedRowKeys
-        console.log('data---------' + this.dataSource2)
-        if (this.dataSource2.length > 0) {
-          this.$emit('selectFinished', this.dataSource2)
-        }
+        this.$emit('selectFinished', this.deviceNodes)
         this.visible = false
-      },
-      add() {
-        this.visible = true
-      },
-      loadData(arg) {
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) {
-          this.ipagination.current = 1
-        }
-        var params = this.getQueryParams()//鏌ヨ鏉′欢
-        getAction(this.url.list, params).then((res) => {
-          if (res.success) {
-            this.dataSource1 = res.result.records
-            this.ipagination.total = res.result.total
-          }
-        })
-      },
-      getQueryParams() {
-        var param = Object.assign({}, this.queryParam, this.isorter)
-        param.field = this.getQueryField()
-        param.pageNo = this.ipagination.current
-        param.pageSize = this.ipagination.pageSize
-        return filterObj(param)
-      },
-      getQueryField() {
-        //TODO 瀛楁鏉冮檺鎺у埗
-      },
-      onSelectAll(selected, selectedRows, changeRows) {
-        if (selected === true) {
-          for (var a = 0; a < changeRows.length; a++) {
-            this.dataSource2.push(changeRows[a])
-          }
-        } else {
-          for (var b = 0; b < changeRows.length; b++) {
-            this.dataSource2.splice(this.dataSource2.indexOf(changeRows[b]), 1)
-          }
-        }
-        // console.log(selected, selectedRows, changeRows);
-      },
-      onSelect(record, selected) {
-        console.log(this.selectedRowKeys)
-        if (selected === true) {
-          this.dataSource2.push(record)
-        } else {
-          var index = this.dataSource2.indexOf(record)
-          //console.log();
-          if (index >= 0) {
-            this.dataSource2.splice(this.dataSource2.indexOf(record), 1)
-          }
-        }
-      },
-      onSelectChange(selectedRowKeys, selectedRows) {
-        console.log('selectedRowKeys', selectedRowKeys)
-        this.selectedRowKeys = selectedRowKeys
-        this.selectionRows = selectedRows
-      },
-      onClearSelected() {
-        this.selectedRowKeys = []
-        this.selectionRows = []
-      },
-      handleDelete: function(record) {
-        this.dataSource2.splice(this.dataSource2.indexOf(record), 1)
-      },
-      handleTableChange(pagination, filters, sorter) {
-        //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
-        console.log(sorter)
-        //TODO 绛涢��
-        if (Object.keys(sorter).length > 0) {
-          this.isorter.column = sorter.field
-          this.isorter.order = 'ascend' == sorter.order ? 'asc' : 'desc'
-        }
-        this.ipagination = pagination
-        this.loadData()
       }
+
     }
   }
 </script>
 <style lang="less" scoped>
+  /deep/ .ant-modal {
+    /*transform-origin: 337px 50px;*/
+  }
+
   .ant-card-body .table-operator {
     margin-bottom: 18px;
   }
@@ -253,4 +216,16 @@
     height: 90% !important;
     overflow-y: hidden
   }
+
+  .drawer-bottom-button {
+    position: absolute;
+    bottom: 0;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3