From 69425e4b837598c2463662726ae3b4d25eceae66 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期二, 31 十二月 2024 16:24:44 +0800
Subject: [PATCH] 1、修改多转一次list的问题
---
Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue | 270 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 231 insertions(+), 39 deletions(-)
diff --git a/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue b/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
index e29f4a0..47483e0 100644
--- a/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
@@ -1,13 +1,13 @@
<template>
<el-container>
<el-aside>
- <basic-container>
+ <basic-container v-loading="treeLoading">
<div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
<!-- 宸︿晶鏍� -->
- <div style="height: calc(100vh - 200px);">
+ <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">
+ <span>
<i class="el-icon-user-solid"></i>
{{ (node || {}).label }}
</span>
@@ -19,7 +19,45 @@
</el-aside>
<el-main>
- <basic-container>
+ <basic-container v-loading="mainLoading">
+ <h3 style="margin: 0 0 10px 0">UI鏉冮檺閰嶇疆</h3>
+ <div>
+ <el-button v-if="permissionList.rightBtn" icon="el-icon-place" plain size="small" type="primary" @click="saveHandler">鎺堟潈</el-button>
+ <el-button v-if="permissionList.resetBtn" icon="el-icon-close" plain size="small" style="margin-right: 40px;" type="primary"
+ @click="clearValue">閲嶇疆
+ </el-button>
+ 涓氬姟绫诲瀷锛�
+ <el-select v-model="type" :clearable="true" placeholder="璇烽�夋嫨" size="small"
+ style="width: 300px;margin-right: 20px;"
+ @change="typeChange">
+ <el-option
+ v-for="item in typeData"
+ :key="item.oid"
+ :label="item.text"
+ :value="item.attributes.name">
+ </el-option>
+ </el-select>
+ UI涓婁笅鏂囷細
+ <el-select v-model="context" :clearable="true" placeholder="璇烽�夋嫨" size="small" style="width: 350px;"
+ @change="contextChange">
+ <el-option
+ v-for="item in contextData"
+ :key="item.oid"
+ :label="item.plCode+' '+item.plName"
+ :value="item.plCode">
+ </el-option>
+ </el-select>
+ </div>
+ <div style="height: calc(100vh - 232px);margin-top: 10px;">
+ <avue-tree ref="uiTree" :data="uiTreeData" :node-key="oid" :option="uiTreeOption">
+ <span slot-scope="{ node, data }" class="el-tree-node__label">
+ <span>
+ <i :class="data.icon"></i>
+ {{ (node || {}).label }}
+ </span>
+ </span>
+ </avue-tree>
+ </div>
</basic-container>
</el-main>
@@ -27,16 +65,20 @@
</template>
<script>
-import {gridRoles} from "@/api/system/role/api";
-import {getUIAuthor,authorizedUI} from "@/api/authority/ui/uiAuthor";
+import {gridRoles, getRightListByRoleId} from "@/api/system/role/api";
+import {getUIAuthor, authorizedUI} from "@/api/authority/ui/uiAuthor";
+import {getBizTree, gridUIContextData} from "@/api/UI/uiDefine";
+import {mapGetters} from "vuex";
export default {
name: "index",
data() {
return {
- type:'',//涓氬姟绫诲瀷
+ treeLoading: false,
+ mainLoading:false,
+ type: '',//涓氬姟绫诲瀷
+ context: '',//UI涓婁笅鏂嘽ode
treeOption: {
- height: '500px',
menu: false,
addBtn: false,
props: {
@@ -47,61 +89,210 @@
},
nodeRow: {},
treeData: [],
+ defaultExpandKeys: [],
uiTreeOption: {
- height: '500px',
+ defaultExpandedKeys: this.defaultExpandKeys,
+ multiple: true,
menu: false,
addBtn: false,
- filter:false,
+ filter: false,
props: {
- label: 'name',
+ label: 'label',
value: 'oid',
children: 'children'
}
},
uiTreeData: [],
+ typeData: [],
+ contextData: []
}
},
- created() {
- this.getTreeList()
+ computed:{
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ rightBtn: this.vaildData(this.permission[this.$route.query.id].RIGHT, false),
+ resetBtn: this.vaildData(this.permission[this.$route.query.id].reset, false),
+ };
+ },
},
- methods:{
+ created() {
+ this.getTreeList();
+ // this.getUITree();
+ this.getTypeList();
+ },
+ methods: {
getTreeList() {
- const loading = this.$loading({});
+ this.treeLoading = true;
gridRoles().then(res => {
this.treeData = res.data.data;
- loading.close();
- }).catch(error=>{
- loading.close();
+ this.treeLoading = false;
+ }).catch(error => {
+ this.treeLoading = false;
})
},
+
// 瑙掕壊鐐瑰嚮
nodeClick(row) {
this.nodeRow = row;
- const loading = this.$loading({});
- getUIAuthor().then(res => {
- this.uiTreeData = res.data.data;
- loading.close();
- }).catch(error=>{
- loading.close();
+ this.getUITree();
+ },
+
+ getUITree() {
+ this.mainLoading = true;
+ const params = {
+ 'conditionMap[roleId]': this.nodeRow.oid,
+ 'conditionMap[type]': this.type,
+ 'conditionMap[context]': this.context,
+ 'conditionMap[showCheckbox]': true
+ }
+ this.defaultExpandKeys = ['root'];
+ getUIAuthor(params).then(res => {
+ this.processChildren(res.data.data[0]); // 澶勭悊姣忎釜鑺傜偣
+ this.uiTreeOption.defaultExpandedKeys = this.defaultExpandKeys;
+ this.uiTreeData = [{
+ attributes: {},
+ checked: false,
+ expanded: true,
+ data: "root",
+ level: 0,
+ icon: 'el-icon-s-home',
+ oid: res.data.data[0].oid,
+ label: res.data.data[0].text,
+ children: res.data.data[0].children
+ }];
+ const checkedData = this.findCheckedOids(res.data.data[0]);
+ this.$refs.uiTree.setCheckedKeys(checkedData);
+
+ this.mainLoading = false;
+ }).catch(error => {
+ this.mainLoading = false;
})
},
+
+ // 鏌ユ壘宸查�夋嫨鑺傜偣
+ findCheckedOids(obj, result = []) {
+ if (obj.checked === true) {
+ result.push(obj.oid);
+ }
+ // 濡傛灉鏈� children锛屽垯缁х画閬嶅巻
+ if (obj.children && obj.children.length > 0) {
+ obj.children.forEach(child => {
+ this.findCheckedOids(child, result);
+ });
+ }
+ return result;
+ },
+
+ //澶勭悊鏍�
+ processChildren(item) {
+ if (item.children && item.children.length > 0) {
+ item.children = item.children.map(child => {
+ if (child.level < 3) {
+ // 榛樿鏍戣妭鐐瑰睍寮�涓ゅ眰鏁堟灉
+ this.defaultExpandKeys.push(child.oid)
+ }
+ if (child.level == 1) {
+ child.icon = 'el-icon-s-promotion';
+ child.label = child.data.label + '锛�' + child.data.name + '锛�'
+ } else if (child.level == 2) {
+ child.icon = 'el-icon-s-order';
+ child.label = child.text
+ } else if (child.level == 3) {
+ child.icon = 'el-icon-office-building';
+ child.label = child.text
+ } else if (child.level == 4) {
+ child.icon = 'el-icon-document';
+ child.label = child.text
+ } else if (child.level == 5) {
+ child.icon = 'el-icon-s-tools';
+ child.label = child.text
+ }
+ this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
+ return child; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
+ });
+ }
+ },
+
+ getTypeList() {
+ getBizTree().then(res => {
+ this.typeData = res.data.obj.children;
+ })
+ },
+
+ typeChange(data) {
+ this.contextData = [];
+ this.type = data;
+ if (data) {
+ const params = {
+ 'conditionMap[btmName]': data,
+ }
+ gridUIContextData(1, 500, params).then(res => {
+ this.contextData = res.data.data;
+ })
+ } else {
+ this.contextData = [];
+ }
+ this.getUITree();
+ },
+
+ contextChange(data) {
+ this.context = data;
+ this.getUITree();
+ },
+
saveHandler() {
- this.$refs.form.validate((valid) => {
- if (valid) {
- const formData={}
- authorizedUI(formData).then(res => {
- if (res.data.success) {
- this.$message.success("淇濆瓨鎴愬姛");
- this.cancelDialog();
- }
- });
- } else {
- return false;
+ const selectTreeList = this.$refs.uiTree.getCheckedNodes();
+ const selectParentList = this.$refs.uiTree.getHalfCheckedNodes();
+ if (selectTreeList.length == 0) {
+ this.$message.error("璇烽�夋嫨鍔熻兘妯″潡");
+ return;
+ }
+ const selectTreeData = selectTreeList.map(item => {
+ return {
+ checked: true,
+ expanded: true,
+ data:item.data,
+ parentId:item.parentId,
+ level: item.level,
+ leaf:item.leaf,
+ oid: item.oid,
+ text: item.text
+ }
+ })
+
+ const parentData = selectParentList.map(item => {
+ return {
+ checked: false,
+ expanded: true,
+ data:item.data,
+ parentId:item.parentId,
+ level: item.level,
+ leaf:item.leaf,
+ oid: item.oid,
+ text: item.text
+ }
+ })
+ // 鍦ㄥ崐閫夌姸鎬佷腑杩囨护鎺夐《绾ц妭鐐� oid 涓� root
+ const filterSelectTreeData = parentData.filter(item => item.oid !== 'root');
+
+ const data = [...selectTreeData,...filterSelectTreeData];
+ const formData = {
+ roleId: this.nodeRow.oid,
+ type: this.type,
+ context: this.context,
+ selectTreeList: data
+ }
+ authorizedUI(formData).then(res => {
+ if (res.data.success) {
+ this.$message.success("鎺堟潈鎴愬姛");
+ this.cancelDialog();
}
});
},
- clearValue(){
- this.$refs.uiTree.setCheckedNodes([])
+
+ clearValue() {
+ this.$refs.uiTree.setCheckedNodes([]);
}
}
}
@@ -112,8 +303,9 @@
.el-scrollbar__wrap {
overflow: auto !important;
}
- .headerCon{
- .el-button{
+
+ .headerCon {
+ .el-button {
width: 82px;
}
}
--
Gitblit v1.9.3