pull/8/head
cwy 8 months ago
parent 0fd8d33c0e
commit 0cc4c7b440

@ -1,5 +1,8 @@
<template> <template>
<!-- 使用 el-card 组件创建一个表单容器卡片设置阴影效果为无 -->
<el-card class="form-container" shadow="never"> <el-card class="form-container" shadow="never">
<!-- el-tree 组件用于展示树形结构的数据绑定了 menuTreeList 数据作为树的数据源 -->
<!-- 显示复选框默认展开所有节点设置节点的唯一标识键为 'id'添加了引用名 'tree'高亮当前选中节点并配置了节点属性映射 -->
<el-tree <el-tree
:data="menuTreeList" :data="menuTreeList"
show-checkbox show-checkbox
@ -9,93 +12,126 @@
highlight-current highlight-current
:props="defaultProps"> :props="defaultProps">
</el-tree> </el-tree>
<!-- 包含两个按钮的 div 容器设置了顶部外边距为 20px并使其内容居中对齐 -->
<div style="margin-top: 20px" align="center"> <div style="margin-top: 20px" align="center">
<!-- 保存按钮类型为主要primary点击时调用 handleSave 方法 -->
<el-button type="primary" @click="handleSave()"></el-button> <el-button type="primary" @click="handleSave()"></el-button>
<!-- 清空按钮点击时调用 handleClear 方法 -->
<el-button @click="handleClear()"></el-button> <el-button @click="handleClear()"></el-button>
</div> </div>
</el-card> </el-card>
</template> </template>
<script> <script>
import {fetchTreeList} from '@/api/menu'; // @/api/menu API
import {listMenuByRole,allocMenu} from '@/api/role'; import {fetchTreeList} from '@/api/menu';
// @/api/role API
import {listMenuByRole, allocMenu} from '@/api/role';
export default { export default {
name: "allocMenu", name: "allocMenu",
data() { data() {
return { return {
// API
menuTreeList: [], menuTreeList: [],
// el-tree 'children' 'title'
defaultProps: { defaultProps: {
children: 'children', children: 'children',
label: 'title' label: 'title'
}, },
roleId:null // ID null
roleId: null
}; };
}, },
created() { created() {
// ID roleId
this.roleId = this.$route.query.roleId; this.roleId = this.$route.query.roleId;
//
this.treeList(); this.treeList();
// ID
this.getRoleMenu(this.roleId); this.getRoleMenu(this.roleId);
}, },
methods: { methods: {
treeList() { treeList() {
// API Promise menuTreeList el-tree
fetchTreeList().then(response => { fetchTreeList().then(response => {
this.menuTreeList = response.data; this.menuTreeList = response.data;
}); });
}, },
getRoleMenu(roleId){ getRoleMenu(roleId) {
listMenuByRole(roleId).then(response=>{ // API ID Promise
listMenuByRole(roleId).then(response => {
// menuList 便
let menuList = response.data; let menuList = response.data;
let checkedMenuIds=[]; // ID
if(menuList!=null&&menuList.length>0){ let checkedMenuIds = [];
for(let i=0;i<menuList.length;i++){ //
if (menuList!= null && menuList.length > 0) {
for (let i = 0; i < menuList.length; i++) {
//
let menu = menuList[i]; let menu = menuList[i];
if(menu.parentId!==0){ // ID 0 ID ID
if (menu.parentId!== 0) {
checkedMenuIds.push(menu.id); checkedMenuIds.push(menu.id);
} }
} }
} }
// el-tree ref='tree' ID
this.$refs.tree.setCheckedKeys(checkedMenuIds); this.$refs.tree.setCheckedKeys(checkedMenuIds);
}); });
}, },
handleSave() { handleSave() {
// el-tree
let checkedNodes = this.$refs.tree.getCheckedNodes(); let checkedNodes = this.$refs.tree.getCheckedNodes();
let checkedMenuIds=new Set(); // 使 Set ID ID
if(checkedNodes!=null&&checkedNodes.length>0){ let checkedMenuIds = new Set();
for(let i=0;i<checkedNodes.length;i++){ //
if (checkedNodes!= null && checkedNodes.length > 0) {
for (let i = 0; i < checkedNodes.length; i++) {
//
let checkedNode = checkedNodes[i]; let checkedNode = checkedNodes[i];
// ID Set
checkedMenuIds.add(checkedNode.id); checkedMenuIds.add(checkedNode.id);
if(checkedNode.parentId!==0){ // ID 0 ID Set
if (checkedNode.parentId!== 0) {
checkedMenuIds.add(checkedNode.parentId); checkedMenuIds.add(checkedNode.parentId);
} }
} }
} }
//
this.$confirm('是否分配菜单?', '提示', { this.$confirm('是否分配菜单?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(()=>{ }).then(() => {
// URLSearchParams
let params = new URLSearchParams(); let params = new URLSearchParams();
params.append("roleId",this.roleId); // ID
params.append("menuIds",Array.from(checkedMenuIds)); params.append("roleId", this.roleId);
// ID Array.from
params.append("menuIds", Array.from(checkedMenuIds));
// API Promise
allocMenu(params).then(response => { allocMenu(params).then(response => {
// success 1000
this.$message({ this.$message({
message: '分配成功', message: '分配成功',
type: 'success', type: 'success',
duration: 1000 duration: 1000
}); });
//
this.$router.back(); this.$router.back();
}) })
}) })
}, },
handleClear() { handleClear() {
// el-tree ID
this.$refs.tree.setCheckedKeys([]); this.$refs.tree.setCheckedKeys([]);
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
/* CSS allocMenu
例如设置 el-tree 组件的样式像节点的字体颜色间距等以及按钮的样式包括按钮的大小颜色边框等
scoped 属性表示样式仅作用于当前组件内的元素避免样式冲突 */
</style> </style>

Loading…
Cancel
Save