|
|
@ -22,8 +22,9 @@ |
|
|
|
<el-table-column label="操作" width="520px" align="center"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<el-button @click="sourceMenus(scope.row)" type="primary" size="mini">资源授权</el-button> |
|
|
|
<el-button @click="funMenus(scope.row)" type="primary" size="mini">功能授权</el-button> |
|
|
|
<el-button @click="roleMenus(scope.row)" type="primary" size="mini">菜单授权</el-button> |
|
|
|
<!-- <el-button @click="funMenus(scope.row)" type="primary" size="mini">功能授权</el-button>--> |
|
|
|
<!-- <el-button @click="roleMenus(scope.row)" type="primary" size="mini">菜单授权</el-button>--> |
|
|
|
<el-button @click="charactarMenus(scope.row)" type="primary" size="mini">角色授权</el-button> |
|
|
|
<el-button @click="mobileMenus(scope.row)" type="primary" size="mini">移动端授权</el-button> |
|
|
|
<el-button @click="editRow(scope.row)" type="primary" size="mini">修改</el-button> |
|
|
|
<el-button @click="delRow(scope.row)" type="danger" size="mini">删除</el-button> |
|
|
@ -136,57 +137,57 @@ |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
<!-- 功能授权 --> |
|
|
|
<el-dialog title="功能授权" :visible.sync="funDialog" width="50%"> |
|
|
|
<table class="e-table" cellspacing="0"> |
|
|
|
<tr> |
|
|
|
<td>角色名称</td> |
|
|
|
<td> |
|
|
|
<el-input v-model="roleForm.name" readonly></el-input> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td>可操作功能列表</td> |
|
|
|
<td> |
|
|
|
<el-tree v-loading="loading" :data="treedata" ref="funTree" show-checkbox accordion node-key="sid" |
|
|
|
:default-expand-all='true' |
|
|
|
:default-checked-keys="checkedId" :props="defaultProps" @check-change="checkchange"> |
|
|
|
</el-tree> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<div slot="footer" class="text-center"> |
|
|
|
<el-button type="primary" @click="funSave">保 存</el-button> |
|
|
|
<el-button @click="funDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
<!-- <el-dialog title="功能授权" :visible.sync="funDialog" width="50%">--> |
|
|
|
<!-- <table class="e-table" cellspacing="0">--> |
|
|
|
<!-- <tr>--> |
|
|
|
<!-- <td>角色名称</td>--> |
|
|
|
<!-- <td>--> |
|
|
|
<!-- <el-input v-model="roleForm.name" readonly></el-input>--> |
|
|
|
<!-- </td>--> |
|
|
|
<!-- </tr>--> |
|
|
|
<!-- <tr>--> |
|
|
|
<!-- <td>可操作功能列表</td>--> |
|
|
|
<!-- <td>--> |
|
|
|
<!-- <el-tree v-loading="loading" :data="treedata" ref="funTree" show-checkbox accordion node-key="sid"--> |
|
|
|
<!-- :default-expand-all='true'--> |
|
|
|
<!-- :default-checked-keys="checkedId" :props="defaultProps" @check-change="checkchange">--> |
|
|
|
<!-- </el-tree>--> |
|
|
|
<!-- </td>--> |
|
|
|
<!-- </tr>--> |
|
|
|
<!-- </table>--> |
|
|
|
<!-- <div slot="footer" class="text-center">--> |
|
|
|
<!-- <el-button type="primary" @click="funSave">保 存</el-button>--> |
|
|
|
<!-- <el-button @click="funDialog = false">关 闭</el-button>--> |
|
|
|
<!-- </div>--> |
|
|
|
<!-- </el-dialog>--> |
|
|
|
<!-- 菜单授权 --> |
|
|
|
<el-dialog title="菜单授权" :visible.sync="roleDialog" width="50%"> |
|
|
|
<table class="e-table" cellspacing="0"> |
|
|
|
<tr> |
|
|
|
<td>角色名称</td> |
|
|
|
<td> |
|
|
|
<el-input v-model="roleForm.name" readonly></el-input> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td>可操作菜单列表</td> |
|
|
|
<td> |
|
|
|
<div style="height:230px;line-height:120px;overflow:auto;overflow-x:hidden;"> |
|
|
|
<el-tree v-loading="loading" :data="treedata" ref="Tree" show-checkbox accordion node-key="sid" |
|
|
|
:default-expand-all='true' |
|
|
|
:default-checked-keys="checkedId" |
|
|
|
:props="defaultProps" |
|
|
|
@check-change="checkchange"> |
|
|
|
</el-tree> |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<div slot="footer" class="text-center"> |
|
|
|
<el-button type="primary" @click="getCheckedKeys">保 存</el-button> |
|
|
|
<el-button @click="roleDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
<!-- <el-dialog title="菜单授权" :visible.sync="roleDialog" width="50%">--> |
|
|
|
<!-- <table class="e-table" cellspacing="0">--> |
|
|
|
<!-- <tr>--> |
|
|
|
<!-- <td>角色名称</td>--> |
|
|
|
<!-- <td>--> |
|
|
|
<!-- <el-input v-model="roleForm.name" readonly></el-input>--> |
|
|
|
<!-- </td>--> |
|
|
|
<!-- </tr>--> |
|
|
|
<!-- <tr>--> |
|
|
|
<!-- <td>可操作菜单列表</td>--> |
|
|
|
<!-- <td>--> |
|
|
|
<!-- <div style="height:230px;line-height:120px;overflow:auto;overflow-x:hidden;">--> |
|
|
|
<!-- <el-tree v-loading="loading" :data="treedata" ref="Tree" show-checkbox accordion node-key="sid"--> |
|
|
|
<!-- :default-expand-all='true'--> |
|
|
|
<!-- :default-checked-keys="checkedId"--> |
|
|
|
<!-- :props="defaultProps"--> |
|
|
|
<!-- @check-change="checkchange">--> |
|
|
|
<!-- </el-tree>--> |
|
|
|
<!-- </div>--> |
|
|
|
<!-- </td>--> |
|
|
|
<!-- </tr>--> |
|
|
|
<!-- </table>--> |
|
|
|
<!-- <div slot="footer" class="text-center">--> |
|
|
|
<!-- <el-button type="primary" @click="getCheckedKeys">保 存</el-button>--> |
|
|
|
<!-- <el-button @click="roleDialog = false">关 闭</el-button>--> |
|
|
|
<!-- </div>--> |
|
|
|
<!-- </el-dialog>--> |
|
|
|
<el-dialog title="移动端授权" :visible.sync="mobileDialog" width="50%"> |
|
|
|
<table class="e-table" cellspacing="0"> |
|
|
|
<tr> |
|
|
@ -214,6 +215,105 @@ |
|
|
|
<el-button @click="mobileDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
<el-dialog title="角色授权" :visible.sync="charactarDialog" width="70%"> |
|
|
|
<el-tabs v-model="charactarName" type="card" @tab-click="handleCharactar"> |
|
|
|
<el-tab-pane label="菜单权限" name="first"> |
|
|
|
<table class="e-table" cellspacing="0"> |
|
|
|
<tr> |
|
|
|
<td>角色名称</td> |
|
|
|
<td> |
|
|
|
<el-input v-model="roleForm.name" readonly></el-input> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td>可操作菜单列表</td> |
|
|
|
<td> |
|
|
|
<div style="height:230px;line-height:120px;overflow:auto;overflow-x:hidden;"> |
|
|
|
<el-tree v-loading="loading" :data="treedata" ref="Tree" show-checkbox accordion node-key="sid" |
|
|
|
:default-checked-keys="checkedId" |
|
|
|
:props="defaultProps" |
|
|
|
@check-change="checkchange"> |
|
|
|
</el-tree> |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<div style="margin-top: 10px" class="text-center"> |
|
|
|
<el-button type="primary" @click="getCheckedKeys">保 存</el-button> |
|
|
|
<el-button @click="charactarDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-tab-pane> |
|
|
|
<el-tab-pane label="功能权限" name="second"> |
|
|
|
<table class="e-table" cellspacing="0"> |
|
|
|
<tr> |
|
|
|
<td>角色名称</td> |
|
|
|
<td> |
|
|
|
<el-input v-model="roleForm.name" readonly></el-input> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td>可操作功能列表</td> |
|
|
|
<td> |
|
|
|
<el-tree v-loading="loading" :data="treedata" ref="funTree" show-checkbox accordion node-key="sid" |
|
|
|
:default-checked-keys="checkedId" :props="defaultProps" @check-change="checkchange"> |
|
|
|
</el-tree> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<div style="margin-top: 10px" class="text-center"> |
|
|
|
<el-button type="primary" @click="funSave">保 存</el-button> |
|
|
|
<el-button @click="charactarDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-tab-pane> |
|
|
|
<el-tab-pane label="数据权限" name="third"> |
|
|
|
<el-form :model="formobj" class="formadd"> |
|
|
|
<el-row style="border-top: 1px solid #E0E3EB"> |
|
|
|
<el-col :span="6" class="tleftb"> |
|
|
|
<span>角色名称</span> |
|
|
|
</el-col> |
|
|
|
<el-col :span="18"> |
|
|
|
<el-form-item> |
|
|
|
<span>{{ formobj.name }}</span> |
|
|
|
</el-form-item> |
|
|
|
</el-col> |
|
|
|
</el-row> |
|
|
|
<el-row> |
|
|
|
<el-col :span="6" class="tleftb"> |
|
|
|
<span>菜单名称名称</span> |
|
|
|
</el-col> |
|
|
|
<el-col :span="18"> |
|
|
|
<el-form-item> |
|
|
|
<el-input v-model="formobj.title" clearable placeholder="" style="width: 30%"/> |
|
|
|
<el-button style="margin-left: 10px" type="primary" size="small" @click="handleSelect">查询</el-button> |
|
|
|
</el-form-item> |
|
|
|
</el-col> |
|
|
|
</el-row> |
|
|
|
<el-table :key="tableKey" :data="formobj.tableData" :index="index" border style="width: 100%"> |
|
|
|
<el-table-column type="index" label="序号" :index="index + 1" width="80" align="center"> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="name" label="菜单名称" header-align="center" align="left"> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column label="权限" align="center" width="450"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<el-radio-group v-model="scope.row.dataRuleId"> |
|
|
|
<el-radio label="1">集团</el-radio> |
|
|
|
<el-radio label="2">事业部</el-radio> |
|
|
|
<el-radio label="3">分公司</el-radio> |
|
|
|
<el-radio label="4">部门</el-radio> |
|
|
|
<el-radio label="5">个人</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
</el-table> |
|
|
|
</el-form> |
|
|
|
<div style="margin-top: 10px" class="text-center"> |
|
|
|
<el-button type="primary" @click="handleSave">保 存</el-button> |
|
|
|
<el-button @click="charactarDialog = false">关 闭</el-button> |
|
|
|
</div> |
|
|
|
</el-tab-pane> |
|
|
|
</el-tabs> |
|
|
|
</el-dialog> |
|
|
|
</div> |
|
|
|
</el-tab-pane> |
|
|
|
<!-- 新增角色 --> |
|
|
@ -286,7 +386,9 @@ import { |
|
|
|
saveSource, |
|
|
|
setRoleEnable, |
|
|
|
sourceMenuTree, |
|
|
|
typeValues |
|
|
|
typeValues, |
|
|
|
selMenuByRole, |
|
|
|
updateDataByRoleMenu |
|
|
|
} from '@/api/system/roleAdminister/index.js' |
|
|
|
|
|
|
|
export default { |
|
|
@ -338,7 +440,17 @@ export default { |
|
|
|
// 功能授权 |
|
|
|
funDialog: false, |
|
|
|
// 移动端授权 |
|
|
|
mobileDialog: false |
|
|
|
mobileDialog: false, |
|
|
|
// 角色授权(包含功能权限、菜单权限、数据权限) |
|
|
|
charactarDialog: false, |
|
|
|
charactarName: '', |
|
|
|
tableKey: 0, |
|
|
|
index: 0, |
|
|
|
formobj: { |
|
|
|
name: '', |
|
|
|
title: '', |
|
|
|
tableData: [] |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
mounted() { |
|
|
@ -404,6 +516,40 @@ export default { |
|
|
|
this.getroleOrgList() |
|
|
|
} |
|
|
|
}, |
|
|
|
handleCharactar(tab) { |
|
|
|
if (tab.name === 'first') { |
|
|
|
this.roleMenus(this.Thisrow) |
|
|
|
} else if (tab.name === 'second') { |
|
|
|
this.funMenus(this.Thisrow) |
|
|
|
} else if (tab.name === 'third') { |
|
|
|
this.formobj.name = this.Thisrow.name |
|
|
|
selMenuByRole({ roleSid: this.Thisrow.sid, menuName: this.formobj.title }).then((res) => { |
|
|
|
if (res.success) { |
|
|
|
this.formobj.tableData = res.data |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}, |
|
|
|
handleSelect() { |
|
|
|
selMenuByRole({ roleSid: this.Thisrow.sid, menuName: this.formobj.title }).then((res) => { |
|
|
|
if (res.success) { |
|
|
|
this.formobj.tableData = res.data |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
handleSave() { |
|
|
|
updateDataByRoleMenu(this.formobj.tableData).then((res) => { |
|
|
|
if (res.success) { |
|
|
|
this.formobj = { |
|
|
|
name: '', |
|
|
|
title: '', |
|
|
|
tableData: [] |
|
|
|
} |
|
|
|
this.$message({ showClose: true, type: 'success', message: '保存成功' }) |
|
|
|
this.charactarDialog = false |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
editRow(row) { |
|
|
|
this.dialogTitle = '编辑' |
|
|
|
this.editDialog = true |
|
|
@ -673,70 +819,11 @@ export default { |
|
|
|
this.loading = false |
|
|
|
}) |
|
|
|
}, |
|
|
|
mobileMenus(row) { |
|
|
|
this.mobileDialog = true |
|
|
|
this.checkedId = [] |
|
|
|
this.roleForm.name = row.name |
|
|
|
charactarMenus(row) { |
|
|
|
this.charactarDialog = true |
|
|
|
this.charactarName = 'first' |
|
|
|
this.Thisrow = row |
|
|
|
this.loading = true |
|
|
|
getRoleMenuList(row.sid).then(res => { |
|
|
|
let data1 = res.data |
|
|
|
// 如果菜单有子级菜单,说明是父级菜单,父级菜单不可以直接赋值已选中状态 |
|
|
|
for (let i = 0; i < data1.length; i++) { |
|
|
|
if (data1[i].children) { |
|
|
|
// data2各模块中的一级菜单 |
|
|
|
let data2 = data1[i].children |
|
|
|
for (let j = 0; j < data2.length; j++) { |
|
|
|
// 如果一级菜单有子级菜单(二级菜单),就循环查看二级菜单有无子级菜单 |
|
|
|
if (data2[j].children) { |
|
|
|
// data3各模块中的二级菜单 |
|
|
|
const data3 = data2[j].children |
|
|
|
for (let k = 0; k < data3.length; k++) { |
|
|
|
// 如果二级菜单有子级菜单(三级菜单),就循环查看三级菜单有无子级菜单 |
|
|
|
if (data3[k].children) { |
|
|
|
const data4 = data3[k].children |
|
|
|
for (let l = 0; l < data4.length; l++) { |
|
|
|
if (data4[l].checked == 0) { |
|
|
|
this.checkedId.push(data4[l].sid) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 如果二级菜单没有子级菜单(三级菜单),查看是否是选中状态 |
|
|
|
if (data3[k].children.length == 0 && data3[k].checked == 0) { |
|
|
|
this.checkedId.push(data3[k].sid) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 如果一级菜单没有子级菜单(二级菜单),查看是否是选中状态 |
|
|
|
if (data2[j].children.length == 0 && data2[j].checked == 0) { |
|
|
|
this.checkedId.push(data2[j].sid) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// for (let i = 0; i < data1.length; i++) { |
|
|
|
// if (data1[i].checked == 0) { |
|
|
|
// this.checkedId.push(data1[i].sid) |
|
|
|
// } |
|
|
|
// for (let j = 0; j < data1[i].children.length; j++) { |
|
|
|
// let data2 = data1[i].children |
|
|
|
// if (data2[j].checked == 0) { |
|
|
|
// this.checkedId.push(data2[j].sid) |
|
|
|
// } |
|
|
|
// for (let k = 0; k < data2[j].children.length; k++) { |
|
|
|
// let data3 = data2[j].children |
|
|
|
// if (data3[k].checked == 0) { |
|
|
|
// this.checkedId.push(data3[k].sid) |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
console.log('112233', this.checkedId) |
|
|
|
this.treedata = res.data |
|
|
|
this.getTreeParentNode(res.data, this.checkedId) |
|
|
|
// this.getTreeParentid(res.data) |
|
|
|
this.loading = false |
|
|
|
}) |
|
|
|
this.roleMenus(row) |
|
|
|
}, |
|
|
|
// 递归查询所有上级数据 |
|
|
|
getTreeParentNode(menus, ids) { |
|
|
@ -800,6 +887,7 @@ export default { |
|
|
|
} |
|
|
|
savefunMenu(params).then(res => { |
|
|
|
this.funDialog = false |
|
|
|
this.charactarDialog = false |
|
|
|
this.$message({ |
|
|
|
message: res.msg, |
|
|
|
type: 'success' |
|
|
@ -831,6 +919,7 @@ export default { |
|
|
|
} |
|
|
|
saveorgrolemenus(params).then(res => { |
|
|
|
this.roleDialog = false |
|
|
|
this.charactarDialog = false |
|
|
|
this.$message({ |
|
|
|
message: res.msg, |
|
|
|
type: 'success' |
|
|
|