<template>
|
<div class="app-container">
|
<el-card class="box-card">
|
<div slot="header" class="clearfix">
|
<span style="float:left">请选择下列菜单:</span>
|
<el-button style="float: right;" type="primary" @click="onSubmit">{{ $t('common.save') }}</el-button>
|
</div>
|
<el-tree
|
ref="tree"
|
:data="routerTree"
|
show-checkbox
|
node-key="id"
|
:default-expanded-keys="[2]"
|
:default-checked-keys="[1]"
|
:props="defaultProps"
|
></el-tree>
|
</el-card>
|
</div>
|
</template>
|
|
<script>
|
import constantRoutes from '@/router/constroutes';
|
import { batchAddPermission, getPermissionList } from '@/api/permisson';
|
|
export default {
|
data() {
|
return {
|
disabled: false,
|
routerTree: [],
|
defaultProps: {
|
children: 'children',
|
label: 'name'
|
}
|
};
|
},
|
mounted() {
|
this.getPermissionList();
|
this.getRouterTree();
|
},
|
methods: {
|
handleView(id) {
|
this.handleEdit(id);
|
this.disabled = true;
|
},
|
getRouterTree() {
|
const filterRoutes = [];
|
|
for (let i = 0; i < constantRoutes.length; i++) {
|
let item = constantRoutes[i];
|
|
if (i > 1 && item.children) {
|
item.children = item.children.filter(i => !i.hidden);
|
|
if (item.children.length === 1) {
|
filterRoutes.push(item.children[0]);
|
} else {
|
filterRoutes.push(item);
|
}
|
}
|
}
|
|
this.routerTree = filterRoutes;
|
},
|
async getPermissionList() {
|
const res = await getPermissionList();
|
if (!res || !res.result) {
|
return;
|
}
|
let keys = res.data && res.data.list.map(item => item.targetid);
|
const username = this.$store.getters.username;
|
if (username === 'admin' || username === 'superadmin') {
|
keys = Array.from(Array(100), (v, k) => k);
|
}
|
this.$refs.tree.setCheckedKeys(keys);
|
},
|
async onSubmit() {
|
const checkedNodes = this.$refs.tree.getCheckedNodes();
|
const data = checkedNodes.map(item => {
|
return {
|
targetid: item.id,
|
parentid: item.parentId,
|
permissiontype: item.name
|
};
|
});
|
const res = await batchAddPermission(data);
|
if (!res || !res.result) {
|
this.$message(this.$t('message.save_fail'), 'error');
|
return;
|
}
|
|
this.$message(this.$t('message.save_success'), 'success');
|
}
|
}
|
};
|
</script>
|