From 0e818b766656ea54f516c1bb3b5987c985de80a9 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 18 十月 2024 16:56:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-ui/src/views/authority/function/functionView/index.vue |  244 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 244 insertions(+), 0 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/authority/function/functionView/index.vue b/Source/plt-web/plt-web-ui/src/views/authority/function/functionView/index.vue
new file mode 100644
index 0000000..4bef6c2
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/authority/function/functionView/index.vue
@@ -0,0 +1,244 @@
+<template>
+  <el-container>
+    <el-aside>
+      <basic-container>
+        <div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
+          <!-- 宸︿晶鏍�         -->
+          <div style="height:  calc(100vh - 195px);">
+            <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
+              <span slot-scope="{ node, data }" class="el-tree-node__label">
+               <span style="font-size: 15px">
+                  <i class="el-icon-user-solid"></i>
+                    {{ (node || {}).label }}
+                </span>
+              </span>
+            </avue-tree>
+          </div>
+        </div>
+      </basic-container>
+    </el-aside>
+
+    <el-main>
+      <basic-container v-loading="treeLoading">
+        <h3 style="margin: 0 0 10px 0">鍔熻兘鏉冮檺閰嶇疆</h3>
+        <div>
+          <el-button icon="el-icon-place" plain size="small" type="primary" @click="saveHandler">鎺堟潈</el-button>
+          <el-button icon="el-icon-close" plain size="small" style="margin-right: 40px;" type="primary"
+                     @click="clearValue">閲嶇疆
+          </el-button>
+        </div>
+        <div style="height:  calc(100vh - 232px);margin-top: 10px;">
+          <avue-tree ref="uiTree" :data="uiTreeData" :node-key="id" :option="uiTreeOption">
+            <span slot-scope="{ node, data }" class="el-tree-node__label">
+               <span style="font-size: 15px">
+                  <i :class="data.icon"></i>
+                    {{ (node || {}).label }}
+                </span>
+            </span>
+          </avue-tree>
+        </div>
+      </basic-container>
+    </el-main>
+
+  </el-container>
+</template>
+
+<script>
+import {gridRoles} from "@/api/system/role/api";
+import {getSysModelAuthTreeMenuByPID, getSysModelAuth, saveRoleRight} from "@/api/authority/functionView/api"
+
+export default {
+  name: "index",
+  data() {
+    return {
+      treeLoading: false,
+      type: '',//涓氬姟绫诲瀷
+      context: '',//UI涓婁笅鏂嘽ode
+      treeOption: {
+        menu: false,
+        addBtn: false,
+        props: {
+          label: 'name',
+          value: 'oid',
+          children: 'children'
+        }
+      },
+      nodeRow: {},
+      treeData: [],
+      defaultExpandKeys: [],
+      uiTreeOption: {
+        defaultExpandedKeys: this.defaultExpandKeys,
+        multiple: true,
+        menu: false,
+        addBtn: false,
+        filter: false,
+        props: {
+          label: 'name',
+          value: 'id',
+          children: 'children'
+        }
+      },
+      uiTreeData: [],
+      typeData: [],
+      contextData: []
+    }
+  },
+  created() {
+    this.getTreeList();
+    this.getUITree();
+  },
+  methods: {
+    getTreeList() {
+      const loading = this.$loading({});
+      gridRoles().then(res => {
+        this.treeData = res.data.data;
+        loading.close();
+      }).catch(error => {
+        loading.close();
+      })
+    },
+    // 瑙掕壊鐐瑰嚮
+    nodeClick(row) {
+      this.nodeRow = row;
+      this.treeLoading = true;
+      getSysModelAuth({roleId: row.oid}).then(res => {
+        const data = res.data.data;
+        this.$refs.uiTree.setCheckedKeys(data);
+        this.treeLoading = false;
+      })
+    },
+    getUITree() {
+      this.treeLoading = true;
+      const params = {
+        // 'conditionMap[roleId]': this.nodeRow.oid,
+        'conditionMap[type]': this.type,
+        'conditionMap[context]': this.context,
+        'conditionMap[showCheckbox]': true
+      }
+      this.defaultExpandKeys = ['root'];
+      getSysModelAuthTreeMenuByPID(params).then(res => {
+        console.log(res);
+        let data= [{
+          attributes: {},
+          checked: false,
+          expanded: true,
+          data: "root",
+          childType: 1,
+          icon: 'el-icon-s-home',
+          id: 'root',
+          name:'鍔熻兘妯″潡',
+          children: res.data.data
+        }];
+        this.processChildren(data[0]); // 澶勭悊姣忎釜鑺傜偣
+        this.uiTreeOption.defaultExpandedKeys = this.defaultExpandKeys;
+        this.uiTreeData = data;
+        this.treeLoading = false;
+      }).catch(error => {
+        this.treeLoading = false;
+      })
+    },
+    //澶勭悊鏍�
+    processChildren(item) {
+      if (item.children && item.children.length > 0) {
+        item.children = item.children.map(child => {
+          if (!child.childType) {
+            // 榛樿鏍戣妭鐐瑰睍寮�,鏈�瀛愮骇涓嶅睍寮�
+            this.defaultExpandKeys.push(child.id)
+          }
+          child.icon = 'el-icon-s-promotion';
+          if (child.childType == 1) {
+            child.icon = 'el-icon-document';
+          } else if (child.childType == 2) {
+            child.icon = 'el-icon-s-tools';
+          }
+          this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
+          return child; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
+        });
+      }
+    },
+    saveHandler() {
+      const selectTreeList = this.$refs.uiTree.getCheckedNodes();
+      const selectParentList = this.$refs.uiTree.getHalfCheckedNodes();
+
+      if (selectTreeList.length == 0) {
+        this.$message.error("璇烽�夋嫨鍔熻兘妯″潡");
+        return;
+      }
+      const formData = selectTreeList.map(item => {
+        return {
+          parentId: item.childType === 2 ? item.funcId : item.parentId,
+          id: item.id,
+          type: (!item.childType || item.childType === 1) ? 1 : 2,
+          number: item.childType === 2 ? item.sort : ''
+        }
+      })
+      const parentData = selectParentList.map(item => {
+        return {
+          parentId: item.parentId,
+          id: item.id,
+          type: (!item.childType || item.childType === 1) ? 1 : 2,
+          number: ''
+        }
+      })
+      const data = [...parentData,...formData];
+      data.shift();
+      const params = {
+        roleId: this.nodeRow.oid,
+        roleData: data
+      }
+      saveRoleRight(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success("鎺堟潈鎴愬姛");
+        }
+      });
+    },
+    clearValue() {
+      this.$refs.uiTree.setCheckedNodes([]);
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep {
+  .el-scrollbar__wrap {
+    overflow: auto !important;
+  }
+
+  .headerCon {
+    .el-button {
+      width: 82px;
+    }
+  }
+}
+
+.headerCon {
+  display: flex;
+  flex-wrap: wrap;
+  margin-bottom: 5px;
+
+  .el-button + .el-button {
+    margin-left: 5px;
+  }
+
+  .el-button {
+    margin-top: 5px;
+  }
+}
+
+.headerCon > .el-button:nth-child(4) {
+  margin-left: 0;
+}
+
+.headerCon > .el-button:nth-child(7) {
+  margin-left: 0;
+}
+
+
+.smallBtn {
+  width: 82px;
+  text-align: center;
+  padding-left: 4.5px;
+}
+
+</style>

--
Gitblit v1.9.3