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