|
@@ -11,11 +11,11 @@
|
|
@keyup.enter.native="handleQuery"
|
|
@keyup.enter.native="handleQuery"
|
|
/>
|
|
/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="权限字符" prop="roleKey">
|
|
|
|
|
|
+ <el-form-item label="字符标识" prop="roleKey">
|
|
<el-input
|
|
<el-input
|
|
maxlength="50"
|
|
maxlength="50"
|
|
v-model="queryParams.roleKey"
|
|
v-model="queryParams.roleKey"
|
|
- placeholder="请输入权限字符"
|
|
|
|
|
|
+ placeholder="请输入字符标识"
|
|
clearable
|
|
clearable
|
|
style="width: 240px"
|
|
style="width: 240px"
|
|
@keyup.enter.native="handleQuery"
|
|
@keyup.enter.native="handleQuery"
|
|
@@ -96,11 +96,10 @@
|
|
<vxe-column type="radio" width="60"/>
|
|
<vxe-column type="radio" width="60"/>
|
|
<vxe-table-column field="roleId" title="角色编号"/>
|
|
<vxe-table-column field="roleId" title="角色编号"/>
|
|
<vxe-table-column field="roleName" title="角色名称"/>
|
|
<vxe-table-column field="roleName" title="角色名称"/>
|
|
- <vxe-table-column field="roleKey" title="权限字符"/>
|
|
|
|
|
|
+ <vxe-table-column field="roleType" title="类型" :formatter="typeFormat"/>
|
|
|
|
+ <vxe-table-column field="roleKey" title="字符标识"/>
|
|
<vxe-table-column field="roleSort" title="显示顺序"/>
|
|
<vxe-table-column field="roleSort" title="显示顺序"/>
|
|
<vxe-table-column field="status" title="状态" :formatter="statusFormat"/>
|
|
<vxe-table-column field="status" title="状态" :formatter="statusFormat"/>
|
|
- <vxe-table-column title="操作" width="320">
|
|
|
|
- </vxe-table-column>
|
|
|
|
</vxe-table>
|
|
</vxe-table>
|
|
<vxe-pager
|
|
<vxe-pager
|
|
v-show="showTable"
|
|
v-show="showTable"
|
|
@@ -118,19 +117,29 @@
|
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
|
<el-form-item label="角色名称" prop="roleName">
|
|
<el-form-item label="角色名称" prop="roleName">
|
|
- <el-input v-model="form.roleName" maxlength="15" placeholder="请输入角色名称"/>
|
|
|
|
|
|
+ <el-input v-model="form.roleName" maxlength="15" placeholder="请输入角色名称" :disabled="edit"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item prop="roleKey">
|
|
|
|
- <span slot="label">
|
|
|
|
- <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
|
|
|
|
- <i class="el-icon-question"></i>
|
|
|
|
- </el-tooltip>
|
|
|
|
- 权限字符
|
|
|
|
- </span>
|
|
|
|
- <el-input v-model="form.roleKey" maxlength="50" placeholder="请输入权限字符"/>
|
|
|
|
|
|
+ <el-form-item label="字符标识" prop="roleKey">
|
|
|
|
+ <el-input v-model="form.roleKey" maxlength="50" placeholder="请输入字符标识" :disabled="edit"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="角色顺序" prop="roleSort">
|
|
<el-form-item label="角色顺序" prop="roleSort">
|
|
- <el-input-number v-model="form.roleSort" controls-position="right" :min="0"/>
|
|
|
|
|
|
+ <el-input-number v-model="form.roleSort" controls-position="right" :min="0" :disabled="edit"/>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="类型">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="form.status"
|
|
|
|
+ placeholder="请选择角色类型"
|
|
|
|
+ clearable
|
|
|
|
+ style="width: 240px"
|
|
|
|
+ :disabled="edit"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in typeOptions"
|
|
|
|
+ :key="item.value"
|
|
|
|
+ :label="item.label"
|
|
|
|
+ :value="item.value">
|
|
|
|
+ </el-option>
|
|
|
|
+ </el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="状态">
|
|
<el-form-item label="状态">
|
|
<el-select
|
|
<el-select
|
|
@@ -138,6 +147,7 @@
|
|
placeholder="请选择用户状态"
|
|
placeholder="请选择用户状态"
|
|
clearable
|
|
clearable
|
|
style="width: 240px"
|
|
style="width: 240px"
|
|
|
|
+ :disabled="edit"
|
|
>
|
|
>
|
|
<el-option
|
|
<el-option
|
|
v-for="item in statusOptions"
|
|
v-for="item in statusOptions"
|
|
@@ -164,7 +174,7 @@
|
|
></el-tree>
|
|
></el-tree>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="备注">
|
|
<el-form-item label="备注">
|
|
- <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
|
|
|
|
+ <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" :disabled="edit"></el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
@@ -228,10 +238,15 @@ export default {
|
|
dicts: ['sys_normal_disable'],
|
|
dicts: ['sys_normal_disable'],
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
|
|
+ typeOptions: [
|
|
|
|
+ {value: '0', label: '管理员'},
|
|
|
|
+ {value: '1', label: '业务员'}
|
|
|
|
+ ],
|
|
statusOptions: [
|
|
statusOptions: [
|
|
{value: '0', label: '正常'},
|
|
{value: '0', label: '正常'},
|
|
{value: '1', label: '停用'}
|
|
{value: '1', label: '停用'}
|
|
],
|
|
],
|
|
|
|
+ edit:false,
|
|
showTable: true,
|
|
showTable: true,
|
|
// 遮罩层
|
|
// 遮罩层
|
|
loading: true,
|
|
loading: true,
|
|
@@ -318,8 +333,20 @@ export default {
|
|
this.getList();
|
|
this.getList();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ // 列表状态格式化
|
|
|
|
+ typeFormat({cellValue}) {
|
|
|
|
+ let belongTo = '未知的类型'
|
|
|
|
+ for (let i = 0; i < this.typeOptions.length; i++) {
|
|
|
|
+ if (cellValue == "0") {
|
|
|
|
+ belongTo = "管理员"
|
|
|
|
+ } else if (cellValue == "1") {
|
|
|
|
+ belongTo = "业务员"
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return belongTo
|
|
|
|
+ },
|
|
/** 查询角色列表 */
|
|
/** 查询角色列表 */
|
|
- getList: debounce(function () {
|
|
|
|
|
|
+ getList(){
|
|
this.loading = true;
|
|
this.loading = true;
|
|
var searchParams = {
|
|
var searchParams = {
|
|
currentPage: this.currentPage,
|
|
currentPage: this.currentPage,
|
|
@@ -341,7 +368,7 @@ export default {
|
|
}).catch((error) => {
|
|
}).catch((error) => {
|
|
// this.$message.error('获取数据出错' + error)
|
|
// this.$message.error('获取数据出错' + error)
|
|
})
|
|
})
|
|
- }, 500),
|
|
|
|
|
|
+ },
|
|
handlePageChange({currentPage, pageSize}) {
|
|
handlePageChange({currentPage, pageSize}) {
|
|
this.currentPage = currentPage
|
|
this.currentPage = currentPage
|
|
this.pageSize = pageSize
|
|
this.pageSize = pageSize
|
|
@@ -376,15 +403,6 @@ export default {
|
|
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
|
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
|
return checkedKeys;
|
|
return checkedKeys;
|
|
},
|
|
},
|
|
- // 所有部门节点数据
|
|
|
|
- getDeptAllCheckedKeys() {
|
|
|
|
- // 目前被选中的部门节点
|
|
|
|
- let checkedKeys = this.$refs.dept.getCheckedKeys();
|
|
|
|
- // 半选中的部门节点
|
|
|
|
- let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys();
|
|
|
|
- checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
|
|
|
- return checkedKeys;
|
|
|
|
- },
|
|
|
|
/** 根据角色ID查询菜单树结构 */
|
|
/** 根据角色ID查询菜单树结构 */
|
|
getRoleMenuTreeselect(roleId) {
|
|
getRoleMenuTreeselect(roleId) {
|
|
var param = {
|
|
var param = {
|
|
@@ -425,6 +443,7 @@ export default {
|
|
if (this.$refs.menu != undefined) {
|
|
if (this.$refs.menu != undefined) {
|
|
this.$refs.menu.setCheckedKeys([]);
|
|
this.$refs.menu.setCheckedKeys([]);
|
|
}
|
|
}
|
|
|
|
+ this.edit = false,
|
|
this.menuExpand = false,
|
|
this.menuExpand = false,
|
|
this.menuNodeAll = false,
|
|
this.menuNodeAll = false,
|
|
this.deptExpand = true,
|
|
this.deptExpand = true,
|
|
@@ -444,10 +463,10 @@ export default {
|
|
this.resetForm("form");
|
|
this.resetForm("form");
|
|
},
|
|
},
|
|
/** 搜索按钮操作 */
|
|
/** 搜索按钮操作 */
|
|
- handleQuery() {
|
|
|
|
|
|
+ handleQuery:debounce(function(){
|
|
this.queryParams.pageNum = 1;
|
|
this.queryParams.pageNum = 1;
|
|
this.getList();
|
|
this.getList();
|
|
- },
|
|
|
|
|
|
+ },1000),
|
|
/** 重置按钮操作 */
|
|
/** 重置按钮操作 */
|
|
resetQuery() {
|
|
resetQuery() {
|
|
this.dateRange = [];
|
|
this.dateRange = [];
|
|
@@ -505,6 +524,7 @@ export default {
|
|
this.getMenuTreeselect();
|
|
this.getMenuTreeselect();
|
|
this.open = true;
|
|
this.open = true;
|
|
this.title = "添加角色";
|
|
this.title = "添加角色";
|
|
|
|
+ this.edit=false;
|
|
}, 500),
|
|
}, 500),
|
|
/** 修改按钮操作 */
|
|
/** 修改按钮操作 */
|
|
handleUpdate:debounce(function () {
|
|
handleUpdate:debounce(function () {
|
|
@@ -517,6 +537,11 @@ export default {
|
|
});
|
|
});
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (_selectData.roleKey=='system' || _selectData.roleKey=='audit'){
|
|
|
|
+ this.edit=true;
|
|
|
|
+ }
|
|
|
|
+
|
|
const roleId = _selectData.roleId
|
|
const roleId = _selectData.roleId
|
|
// const roleMenu = this.getRoleMenuTreeselect(roleId);
|
|
// const roleMenu = this.getRoleMenuTreeselect(roleId);
|
|
var param = {
|
|
var param = {
|
|
@@ -539,7 +564,7 @@ export default {
|
|
})
|
|
})
|
|
})
|
|
})
|
|
this.title = "修改角色";
|
|
this.title = "修改角色";
|
|
- }, 500),
|
|
|
|
|
|
+ }, 1000),
|
|
/** 选择角色权限范围触发 */
|
|
/** 选择角色权限范围触发 */
|
|
dataScopeSelectChange(value) {
|
|
dataScopeSelectChange(value) {
|
|
if (value !== '2') {
|
|
if (value !== '2') {
|
|
@@ -555,6 +580,16 @@ export default {
|
|
submitForm: debounce(function () {
|
|
submitForm: debounce(function () {
|
|
this.$refs["form"].validate(valid => {
|
|
this.$refs["form"].validate(valid => {
|
|
if (valid) {
|
|
if (valid) {
|
|
|
|
+ if (this.form.roleKey.trim()=='system' || this.form.roleKey.trim()=='audit'){
|
|
|
|
+ if (this.form.builtIn!='0'){
|
|
|
|
+ // 不是内置用户则拦截
|
|
|
|
+ this.$message({
|
|
|
|
+ type: 'warning',
|
|
|
|
+ message: '字符标识不能是system或audit!'
|
|
|
|
+ });
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (this.form.roleId != undefined) {
|
|
if (this.form.roleId != undefined) {
|
|
this.form.menuIds = this.getMenuAllCheckedKeys();
|
|
this.form.menuIds = this.getMenuAllCheckedKeys();
|
|
// 更新操作
|
|
// 更新操作
|
|
@@ -594,7 +629,7 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- }, 500),
|
|
|
|
|
|
+ }, 1000),
|
|
/** 提交按钮(数据权限) */
|
|
/** 提交按钮(数据权限) */
|
|
submitDataScope: function () {
|
|
submitDataScope: function () {
|
|
if (this.form.roleId != undefined) {
|
|
if (this.form.roleId != undefined) {
|
|
@@ -616,6 +651,15 @@ export default {
|
|
});
|
|
});
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (_selectData.roleKey=='system' || _selectData.roleKey=='audit'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: 'warning',
|
|
|
|
+ message: '内置角色不能删除!'
|
|
|
|
+ });
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
this.$confirm('是否确认删除角色?', '提示', {
|
|
this.$confirm('是否确认删除角色?', '提示', {
|
|
confirmButtonText: '确定',
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
cancelButtonText: '取消',
|
|
@@ -629,7 +673,6 @@ export default {
|
|
* 删除提交
|
|
* 删除提交
|
|
*/
|
|
*/
|
|
doDelete:debounce(function(_selectData){
|
|
doDelete:debounce(function(_selectData){
|
|
- console.log(_selectData)
|
|
|
|
const param = {
|
|
const param = {
|
|
roleId: _selectData.roleId
|
|
roleId: _selectData.roleId
|
|
}
|
|
}
|