You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

340 lines
10 KiB

<template>
<div class="grid-content">
<el-form :inline="true" class="demo-form-inline">
<el-form-item v-if="!add" label="角色名称">
<el-input v-model="ruleName" :disabled="!isEdit" placeholder="名称"></el-input>
</el-form-item>
<el-form-item v-else label="角色名称">
<el-input v-model="ruleName" placeholder="名称"></el-input>
</el-form-item>
</el-form>
<div class="detail">
<span style="font-weight: bold;">{{title}}</span>
<div style="text-align: right;display: inline-block">
<el-button v-show="!add" @click="editPermission">编辑</el-button>
</div>
</div>
<div v-if="!add" style="position: relative;">
<div class="mask" @click="showTips" v-if="!isEdit">
查看状态,无法编辑
</div>
<el-tree
:props="props"
:data="permissionsList"
show-checkbox
:default-checked-keys="checkedKey"
default-expand-all
ref="tree"
node-key="permissionId"
/>
</div>
<div v-else>
<el-tree
:props="props"
:data="permissionsList"
show-checkbox
:default-checked-keys="checkedKey"
default-expand-all
ref="treeAdd"
node-key="permissionId"
/>
</div>
<div v-show="isEdit || add" class="detail" style="border-top: 1px solid #d9d9d9">
<el-checkbox v-model="checkedAll" @change="handleCheckAllChange">选择全部</el-checkbox>
<div style="text-align: right;display: inline-block;top: 7px;">
<el-button v-show="!add" @click="cancelEdit">取消</el-button>
<el-button type="primary" @click="confirmEdit">确认</el-button>
</div>
</div>
</div>
</template>
<script>
import Alert from "@/utils/alert";
import { GET_PERMISSION_ALL,UPDATE_ROLE,ROLE_ADD } from '@/api/jurisdiction'
export default {
name: "permissions",
props: ['roleId', 'roleName'],
data() {
return {
ruleName: '',
title: '权限详情',
add: false,
isEdit: false,
permissionsList: [],
checkedAll: false,
checkedKey: [],
props: {
label: 'permissionName',
value: 'permissionId',
children: 'children',
}
}
},
beforeMount() {
if (this.$route.query.add) {
console.log(15654);
this.isEdit = false;
this.add = true;
this.title = '设置权限';
}
},
mounted() {
this.getPermissions();
},
watch: {
roleId() {
this.getPermissions();
},
roleName() {
this.ruleName = this.roleName
},
permissions() {
}
},
methods: {
showTips() {
Alert.fail('点击编辑按钮即可开始编辑')
},
/**
* 获取当前所有权限以及设置账户所拥有的权限
*/
getPermissions() {
this.ruleName = this.roleName;
this.isEdit = false;
const params = { roleId:this.roleId }
GET_PERMISSION_ALL(params).then(res => {
if(res.code === 200) {
this.permissionsList = res.data
this.getDefault()
}
})
},
/**
* 设置默认选中的节点
*/
getDefault() {
let defaultList = this.getDefaultKeys(this.permissionsList)
this.checkedKey = defaultList
},
/**
* 递归
* 设置全部选中
*/
getDefaultKeys(list) {
let keyList = []
if(list && list.length) {
for(let i = 0; i < list.length; i++) {
if(list[i].own === 1) {
if(!list[i].children.length) {
keyList.push(list[i].permissionId)
} else {
const itemList = this.getDefaultKeys(list[i].children)
if(itemList.length) {
for(let m=0;m<itemList.length;m++) {
keyList.push(itemList[m])
}
}
}
}
}
}
return keyList
},
/**
* 编辑权限
*/
editPermission() {
this.isEdit = true
},
/**
* 取消编辑
*/
cancelEdit() {
this.isEdit = false
},
/**
* 确定编辑
*/
confirmEdit() {
if(this.add) {
this.establish();
return
}
let permissionIds = [];
let list = this.$refs.tree.getCheckedNodes(false,true);
if(list.length) {
for(let i=0;i< list.length;i++) {
permissionIds.push(list[i].permissionId)
}
}
if(!this.ruleName) {
Alert.fail('角色名称不能为空!')
return
}
if(!permissionIds.length) {
Alert.fail('权限不能为空!')
return
}
const params = {
roleId: this.roleId,
roleName: this.ruleName,
permissionIds,
}
UPDATE_ROLE(params).then(res => {
if(res.code === 200) {
Alert.success('编辑成功')
this.cancelEdit()
const showData = {
roleId: this.roleId,
roleName: this.ruleName,
}
this.$emit('getList',showData)
} else {
Alert.fail('编辑失败,请重试')
}
})
},
/**
* 创建新角色
*/
establish() {
let permissionIds = [];
let list = this.$refs.treeAdd.getCheckedNodes(false,true);
if(list.length) {
for(let i=0;i< list.length;i++) {
permissionIds.push(list[i].permissionId)
}
}
if(!this.ruleName) {
Alert.fail('角色名称不能为空!')
return
}
if(!permissionIds.length) {
Alert.fail('权限不能为空!')
return
}
const params = {
roleName: this.ruleName,
permissionIds
}
ROLE_ADD(params).then(res => {
if(res.code === 200) {
Alert.success('添加角色成功')
}
})
},
/**
* 全选
*/
handleCheckAllChange() {
let checkedKey = []
if(this.checkedAll) {
checkedKey = this.getKeys(this.permissionsList)
}
if(!this.add) {
this.$refs.tree.setCheckedKeys(checkedKey)
} else {
this.$refs.treeAdd.setCheckedKeys(checkedKey)
}
},
/**
* 递归
* 设置全部选中
*/
getKeys(list) {
let keyList = []
if(list && list.length) {
for(let i = 0; i < list.length; i++) {
keyList.push(list[i].permissionId)
if(list[i].children && list[i].children.length) {
const itemList = this.getKeys(list[i].children)
keyList.push([...itemList])
}
}
}
return keyList
},
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.mask {
text-align: center;
padding-top: 100px;
color: #666;
font-size: 24px;
font-weight: bold;
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
background-color: rgba(166,166,166,0.2);
z-index: 100;
}
.grid-content {
background: #fff;
padding: 20px;
border-right: 1px solid #d9d9d9;
.option-span {
color: #a90500;
cursor: pointer;
}
}
.detail {
padding: 15px 10px;
position: relative;
border-bottom: 1px solid #d9d9d9;
span {
font-weight: bold;
}
div {
position: absolute;
top: 0px;
right: 0;
}
}
.grid-content {
background: #fff;
padding: 12px;
.rowBg:nth-child(2n+1) .bg-purple-dark {
background: rgba(233, 233, 233, 1);
padding: 12px;
}
.bg-purple-dark {
> .el-switch {
min-width: 134px;
}
}
}
.child-item {
display: inline-block;
margin: 0 35px;
}
</style>