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.
 
 
 
 
 
 

705 lines
20 KiB

<template>
<div class="appMainPage">
<el-row :gutter="24">
<el-col :md="16" style="margin-bottom: 10px">
<div class="main">
<div class="table-active">
<div class="bttton-box">
<el-button
type="primary"
icon="el-icon-plus"
@click="handleCreate"
size="mini"
v-permission="['AbpIdentity.Roles.Create']"
>创建角色</el-button
>
<el-button
type="success"
icon="el-icon-refresh"
@click.native.prevent="Createview"
size="mini"
>刷新</el-button
>
</div>
<div class="query-box">
<!-- 搜索 -->
<searchNormal
ref="normalSearch_roleManage"
@searchNormalClick="filtrate"
@searchNormalClear="filtrate"
></searchNormal>
</div>
</div>
<el-table
border=""
ref="multipleTable"
:data="tableData"
height="calc(100vh - 265px)"
style="width: 100%"
@sort-change="sortChange"
@row-click="handleRowClick"
@selection-change="handleSelectionChange"
>
<el-table-column
prop="name"
label="角色名"
sortable="custom"
width="180"
align="left"
/>
<el-table-column
prop="extraProperties.Description"
label="角色描述"
align="left"
:show-overflow-tooltip="true"
/>
<el-table-column label="操作" align="center" width="150">
<template slot-scope="scope">
<el-button
type="text"
@click="Update(scope.row)"
v-permission="['AbpIdentity.Roles.Update']"
v-if="scope.row.name == 'admin' ? false : true"
>编辑</el-button
>
<el-button
type="text"
@click="Delete(scope.row)"
v-permission="['AbpIdentity.Roles.Delete']"
v-if="scope.row.name == 'admin' ? false : true"
style="color:red"
>删除</el-button
>
</template>
</el-table-column>
<!-- <el-table-column prop="address" label="创建时间" />
<el-table-column prop="address" label="编辑" /> -->
</el-table>
</div>
<div class="Footer">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryInfo.currentPage"
:page-sizes="[10, 15, 20]"
:page-size="queryInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
<el-button
type="primary"
size="mini"
style="margin-left: 10px; background-color: #409eff"
>确定</el-button
>
</div>
</el-col>
<el-col :md="8" v-permission="['AbpIdentity.Roles.Update']">
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix" style="height: 20px">
<el-tooltip
class="item"
effect="dark"
content="选择指定角色的模块权限"
placement="top"
>
<span class="role-span">【{{name}}角色】模块权限</span>
</el-tooltip>
<el-button
:loading="savePerLoading"
:disabled="multipleSelection.length != 1"
icon="el-icon-check"
size="mini"
style="float: right; padding: 6px 9px"
type="primary"
@click="savePer"
>保存
</el-button>
</div>
<el-tree
ref="tree"
v-loading="treeLoading"
:check-strictly="false"
:data="permissionsData"
:props="defaultProps"
show-checkbox
node-key="id"
class="permission-tree"
/>
</el-card>
</el-col>
</el-row>
<el-dialog
:title="formTitle"
:visible.sync="dialogVisible"
width="600px"
:close-on-click-modal="false"
>
<el-form
ref="form"
:model="form"
label-width="70px"
:rules="rules"
size="small"
:inline="true"
>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" style="width: 380px" maxlength="23" />
</el-form-item>
<el-form-item label="描述">
<el-input
type="textarea"
:rows="2"
placeholder="请输入描述信息"
style="width: 380px"
v-model="form.extraProperties.Description"
>
</el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="resetform">取 消</el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
postCreateRoles,
postUpdateRoles,
postDeleteRoles,
getPageListRoles,
getpermissionsRoles,
putpermissionsRoles,
menuPermissions,
saveOrUpdateDescribe
} from "@/api/wms-auth";
import permission from "@/utils/permission/index";
import searchNormal from "@/components/searchNormal/index.vue"
export default {
directives: { permission },
components:{
searchNormal
},
name:"RoleManage",
data() {
// 自定义验证
return {
URL: 'identity/roles',
// 角色名称
name: '',
//所有权限
rolesAll: [],
//编辑弹出
dialogVisible: false,
//创建与编辑判断
isEdit: false,
//弹出title
formTitle: "",
//总条数
total: 0,
//分页器
queryInfo: {
//当前页数
currentPage: 1,
//每页条数
pagesize: 20,
Sorting: "",
},
// Thecurrent: '',
//选择添加分组
//筛选栏分组
// value1: '',
//报表组
// roleList: [],
//当前用户ID
usersId: "",
//编辑参数
concurrencyStamp: "",
//新增参数
form: {
name: "",
isDefault: true,
isPublic: true,
extraProperties: {
Description: "",
},
},
//权限模板保存按钮加载
savePerLoading: false,
//权限模板树形控件加载
treeLoading: false,
//权限模板树形控件默认勾选的数组
checkedPermission: [],
//权限模板树形结构渲染数据
permissionsData: [],
defaultProps: {
children: "children",
label: "name",
},
//渲染权限模板参数
params: {
providerName: "R",
providerKey: "",
},
//选择行数据
multipleSelection: [],
//table渲染
tableData: [],
rules: {
name: [
{ required: true, trigger: "blur", message: "请输入姓名" },
{
min: 1,
max: 23,
message: "长度在 1 到 23 个字符",
trigger: "blur",
},
],
},
};
},
mounted() {
this.pageList();
},
methods: {
//sort 按照排序字段(现在为数字) 默认sort
sortData(sort){
return function(a,b){
const val1 = a[sort];
const val2 = b[sort];
return val1 - val2;
}
},
// 树状图格式化数据
initTreeData(list,code = ""){
const children = []
// 对于list,每个元素.如果他的parentCode==code,他就是当前的children
list.forEach(item => {
if (item['parentCode'] == code) {
// children.push(item)
children.push(
{
id: item.id,
displayName: item.permission,
name: item.name,
parentCode: item.parentCode,
code: item.code,
sort: item.sort,
children: []
}
)
//排序
children.find(findItem => findItem.id == item.id).children=this.initTreeData(list,item['code']).sort(this.sortData('sort'))
this.rolesAll.forEach(itemRes => {
if (item.permission == itemRes.name) {
if (itemRes.isGranted) {
this.checkedPermission.push(item.id);
}
}
})
}
})
return children
},
//请求数据渲染table
pageList(val) {
const data = {
Filter: val || '',
Sorting: this.queryInfo.Sorting,
SkipCount: (this.queryInfo.currentPage - 1) * this.queryInfo.pagesize,
MaxResultCount: this.queryInfo.pagesize,
};
getPageListRoles(data).then((res) => {
const data = res;
this.total = data.totalCount;
this.tableData = data.items;
});
},
//排序
sortChange(data) {
const { prop, order } = data;
if (!prop || !order) {
this.queryInfo.Sorting = "";
this.handleFilter();
return;
}
this.queryInfo.Sorting = prop + " " + order;
// alert(this.listQuery.Sorting)
this.handleFilter();
},
//排序触发页面更新
handleFilter() {
this.queryInfo.currentPage = 1;
this.pageList();
},
//筛选
filtrate(val) {
this.queryInfo.currentPage = 1;
this.pageList(val);
},
//选择每页条数分页
handleSizeChange(val) {
this.queryInfo.pagesize = val;
this.pageList();
},
//选择当前页分页
handleCurrentChange(val) {
this.queryInfo.currentPage = val;
this.pageList();
},
//重置创建与编辑后的参数
resetform() {
this.$refs.form.resetFields();
this.dialogVisible = false;
this.form.name = "";
this.form.extraProperties.Description = "";
this.$refs.multipleTable.clearSelection();
},
//创建角色
handleCreate() {
this.formTitle = "创建角色";
this.dialogVisible = true;
this.isEdit = false;
},
//刷新
Createview() {
this.queryInfo.currentPage = 1;
this.queryInfo.Sorting = "";
this.$refs.normalSearch_roleManage.searchNormalClear()//清空搜索
this.$refs.multipleTable.clearSort();
},
//编辑默认参数
Update(row) {
if (row) {
this.formTitle = "编辑角色";
this.dialogVisible = true;
this.isEdit = true;
this.usersId = row.id;
this.form.name = row.name;
this.concurrencyStamp = row.concurrencyStamp;
this.form.extraProperties.Description = row.extraProperties.Description;
}
},
//删除
Delete(row) {
this.$confirm("此操作将永久删除该角色, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
if (this.tableData.length == 1) {
this.queryInfo.currentPage = this.queryInfo.currentPage - 1;
}
postDeleteRoles(row.id).then((res) => {
this.$successMsg("删除成功!");
this.pageList();
});
})
.catch(() => {});
},
//创建与编辑
submitForm() {
this.$refs.form.validate((valid) => {
//创建报表组
if (valid && !this.isEdit) {
postCreateRoles(this.form)
.then((res) => {
this.saveOrUpdateDescribe(res.id)
this.resetform();
this.$successMsg("创建成功!");
this.queryInfo.currentPage = 1;
this.pageList();
})
.catch((err) => {
this.resetform();
});
} else if (valid && this.isEdit) {
//编辑报表
const data = JSON.parse(JSON.stringify(this.form));
data.concurrencyStamp = this.concurrencyStamp;
postUpdateRoles(data, this.usersId)
.then((res) => {
this.$successMsg("编辑成功!");
this.saveOrUpdateDescribe(this.usersId)
this.pageList();
this.resetform();
})
.catch((err) => {
this.resetform();
});
} else {
this.$errorMsg("请按照提示继续输入!");
return false;
}
});
},
// 描述特殊储存处理
saveOrUpdateDescribe (id) {
saveOrUpdateDescribe({description:this.form.extraProperties.Description}, id).then(res => {
// console.log(res)
}).catch(err => {
console.log(err)
})
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
//模板权限保存
savePer() {
this.savePerLoading = true;
let params = {};
let checkedKeys = this.$refs.tree.getCheckedKeys();
params.permissions = [];
this.permissionsData.forEach((element) => {
element.children.forEach((item) => {
let perm = {};
perm.name = item.displayName;
perm.isGranted = false;
if (checkedKeys.indexOf(item.id) > -1) {
perm.isGranted = true;
}
// 赋值节点下的增删改权限
this.getZSG(item.displayName, params, perm.isGranted)
params.permissions.push(perm);
item.children.forEach((i) => {
let perm = {};
perm.name = i.displayName;
perm.isGranted = false;
if (checkedKeys.indexOf(i.id) > -1) {
perm.isGranted = true;
}
// 赋值节点下的增删改权限
this.getZSG(i.displayName, params, perm.isGranted)
params.permissions.push(perm);
});
});
});
params.permissions.forEach((item,index) => {
// 排除二级菜单
if (item.name == 'skip') {
params.permissions.splice(index, 1)
}
// 用户权限 | 角色权限 包含其子节点 创建,编辑,删除,更改
if (item.name == 'AbpIdentity.Users' ) {
if (item.isGranted) {
params.permissions.push({
isGranted: true,
name: 'AbpIdentity.Users.Create'
},{
isGranted: true,
name: 'AbpIdentity.Users.Update'
},{
isGranted: true,
name: 'AbpIdentity.Users.Delete'
},{
isGranted: true,
name: 'AbpIdentity.Users.ManagePermissions'
})
} else {
params.permissions.push({
isGranted: false,
name: 'AbpIdentity.Users.Create'
},{
isGranted: false,
name: 'AbpIdentity.Users.Update'
},{
isGranted: false,
name: 'AbpIdentity.Users.Delete'
},{
isGranted: false,
name: 'AbpIdentity.Users.ManagePermissions'
})
}
}
if (item.name == 'AbpIdentity.Roles' ) {
if (item.isGranted) {
params.permissions.push({
isGranted: true,
name: 'AbpIdentity.Roles.Create'
},{
isGranted: true,
name: 'AbpIdentity.Roles.Update'
},{
isGranted: true,
name: 'AbpIdentity.Roles.Delete'
})
} else {
params.permissions.push({
isGranted: false,
name: 'AbpIdentity.Roles.Create'
},{
isGranted: false,
name: 'AbpIdentity.Roles.Update'
},{
isGranted: false,
name: 'AbpIdentity.Roles.Delete'
})
}
}
})
// 修改必备权限,否则菜单无法正常显示 *************************
params.permissions.filter((item) => {
if (item.name == 'AbpIdentity.Roles.ManagePermissions' || item.name == 'Auth.UserMenu') {
item.isGranted = true
}
})
putpermissionsRoles(
"/permission-management/permissions?providerName=R&providerKey=" +
this.multipleSelection[0].name,
params
).then((response) => {
this.$notify({
title: "成功",
message: "更新成功",
type: "success",
duration: 2000,
});
this.savePerLoading = false;
}).catch(err=>{
this.savePerLoading = false;
});
},
// 节点下的增删改权限
getZSG(name,params,isGranted) {
if (name !== 'skip') {
this.rolesAll.forEach(item => {
if (item.parentName == name ) {
let perm = {}
perm.name = item.name
perm.isGranted = isGranted
params.permissions.push(perm)
}
})
}
},
//点击table行渲染权限模板
handleRowClick(row, column, event) {
let that = this
this.name = row.name
this.treeLoading = true;
// if (row.name == "admin") {
// this.$notify({
// title: "提示",
// message: "不可更改超级管理员权限",
// type: "warning",
// duration: 2000,
// });
// this.$refs.multipleTable.clearSelection();
// this.permissionsData = [];
// this.checkedPermission = [];
// } else {
this.$refs.multipleTable.clearSelection();
this.$refs.multipleTable.toggleRowSelection(row);
// }
this.params.providerKey = row.name;
getpermissionsRoles(this.params).then((res) => {
this.rolesAll = []
this.permissionsData = [];
this.checkedPermission = [];
// 根据前端菜单,进行重置分组
res.groups.forEach(itemRes => {
itemRes.permissions.forEach(item => {
// if (item.displayName !== '创建' && item.displayName !== '编辑' && item.displayName !== '删除' && item.displayName !== '修改') {
this.rolesAll.push(item)
// }
})
})
let filters = []
filters.push({
logic: "And",
column: "portal",
action: "==",
value: "0"
})
const data = {
condition: {
filters: filters
},
Sorting: "",
SkipCount: 0,
MaxResultCount: 1000,
};
menuPermissions(data).then((res) => {
let rs = that.initTreeData(res.items,'').sort(that.sortData('sort'))
rs.forEach(item => {
that.permissionsData.push(item);
})
that.$nextTick(() => {
that.$refs.tree.setCheckedKeys(that.checkedPermission)
})
// console.log('菜单树',that.permissionsData)
// console.log('拥有权限',that.checkedPermission)
// console.log('所有权限',that.rolesAll)
that.treeLoading = false;
}).catch((err)=>{
that.treeLoading = false;
console.log(err)
})
});
},
},
};
</script>
<style lang="scss" scoped>
.appMainPage {
padding: 20px;
.main {
.table-active {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
padding: 5px 0 15px 0;
.bttton-box {
display: flex;
}
}
}
.el-table__body-wrapper {
tbody {
span {
cursor: pointer;
&:hover {
color: #409eff;
}
}
}
}
.Footer {
padding: 25px 0;
display: flex;
justify-content: flex-end;
}
::v-deep .el-dialog {
.el-dialog__header {
button {
display: none;
}
}
}
.permission-tree{
padding: 20px;
height: 690px;
overflow-y: auto;
}
}
</style>