@@ -117,3 +117,66 @@ export function deptTreeSelect(roleId) { | |||
method: 'get' | |||
}) | |||
} | |||
// 获取手机菜单 | |||
export function getRoleMobiles(roleId) { | |||
return request({ | |||
url: '/system/role/getMobiles/' + roleId, | |||
method: 'get' | |||
}) | |||
} | |||
// 编辑手机菜单 | |||
export function setupRoleMobiles(id, data) { | |||
return request({ | |||
url: '/system/role/setupMobiles/' + id, | |||
method: 'post', | |||
data: data | |||
}) | |||
} | |||
// 查询角色已授权手机菜单 | |||
export function allocatedAppList(query) { | |||
return request({ | |||
url: '/system/role/authApp/allocatedList', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
// 查询角色未授权手机菜单 | |||
export function unallocatedAppList(query) { | |||
return request({ | |||
url: '/system/role/authApp/unallocatedList', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
// 取消手机菜单授权角色 | |||
export function authAppCancel(data) { | |||
return request({ | |||
url: '/system/role/authApp/cancel', | |||
method: 'put', | |||
data: data | |||
}) | |||
} | |||
// 批量取消手机菜单授权角色 | |||
export function authAppCancelAll(data) { | |||
return request({ | |||
url: '/system/role/authApp/cancelAll', | |||
method: 'put', | |||
params: data | |||
}) | |||
} | |||
// 授权手机菜单选择 | |||
export function authAppSelectAll(data) { | |||
return request({ | |||
url: '/system/role/authApp/selectAll', | |||
method: 'put', | |||
params: data | |||
}) | |||
} |
@@ -120,6 +120,20 @@ export const dynamicRoutes = [ | |||
} | |||
] | |||
}, | |||
{ | |||
path: '/system/role-auth', | |||
component: Layout, | |||
hidden: true, | |||
permissions: ['system:role:edit'], | |||
children: [ | |||
{ | |||
path: 'app/:roleId(\\d+)', | |||
component: () => import('@/views/system/role/authApp'), | |||
name: 'AuthApp', | |||
meta: { title: '手机菜单', activeMenu: '/system/role' } | |||
} | |||
] | |||
}, | |||
{ | |||
path: '/system/dict-data', | |||
component: Layout, | |||
@@ -0,0 +1,163 @@ | |||
<template> | |||
<div class="app-container"> | |||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> | |||
<el-form-item label="模块名称" prop="modelType"> | |||
<el-select v-model="queryParams.modelType" placeholder="请选择模块名称" clearable> | |||
<el-option v-for="dict in dict.type.model_type" :key="dict.value" :label="dict.label" :value="dict.value"/> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item label="菜单名称" prop="menuName"> | |||
<el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter.native="handleQuery"/> | |||
</el-form-item> | |||
<el-form-item label="菜单状态" prop="menuStatus"> | |||
<el-select v-model="queryParams.menuStatus" placeholder="请选择菜单状态" clearable> | |||
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value"/> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item> | |||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | |||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | |||
</el-form-item> | |||
</el-form> | |||
<el-row :gutter="10" class="mb8"> | |||
<el-col :span="1.5"> | |||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openSelectUser" v-hasPermi="['system:role:add']">添加授权</el-button> | |||
</el-col> | |||
<el-col :span="1.5"> | |||
<el-button type="danger" plain icon="el-icon-circle-close" size="mini" :disabled="multiple" @click="cancelAuthUserAll" v-hasPermi="['system:role:remove']">批量取消授权</el-button> | |||
</el-col> | |||
<el-col :span="1.5"> | |||
<el-button type="warning" plain icon="el-icon-close" size="mini" @click="handleClose">关闭</el-button> | |||
</el-col> | |||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | |||
</el-row> | |||
<el-table v-loading="loading" :data="menuappList" @selection-change="handleSelectionChange"> | |||
<el-table-column type="selection" width="55" align="center" /> | |||
<el-table-column label="模块名称" align="center" prop="modelType"> | |||
<template slot-scope="scope"> | |||
<dict-tag :options="dict.type.model_type" :value="scope.row.modelType"/> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="菜单名称" align="center" prop="menuName" /> | |||
<el-table-column label="菜单路径" align="center" prop="menuUrl" /> | |||
<el-table-column label="菜单图标" align="center" prop="menuIcon" /> | |||
<el-table-column label="显示顺序" align="center" prop="menuNum" /> | |||
<el-table-column label="菜单状态" align="center" prop="menuStatus"> | |||
<template slot-scope="scope"> | |||
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.menuStatus"/> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | |||
<template slot-scope="scope"> | |||
<el-button size="mini" type="text" icon="el-icon-circle-close" @click="cancelAuthUser(scope.row)" v-hasPermi="['system:role:remove']">取消授权</el-button> | |||
</template> | |||
</el-table-column> | |||
</el-table> | |||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/> | |||
<select-app ref="select" :roleId="queryParams.roleId" @ok="handleQuery" /> | |||
</div> | |||
</template> | |||
<script> | |||
import { allocatedAppList, authAppCancel, authAppCancelAll } from "@/api/system/role" | |||
import selectApp from "./selectApp" | |||
export default { | |||
name: "AuthApp", | |||
dicts: ['model_type', 'sys_normal_disable'], | |||
components: { selectApp }, | |||
data() { | |||
return { | |||
// 遮罩层 | |||
loading: true, | |||
// 选中用户组 | |||
appIds: [], | |||
// 非多个禁用 | |||
multiple: true, | |||
// 显示搜索条件 | |||
showSearch: true, | |||
// 总条数 | |||
total: 0, | |||
// 用户表格数据 | |||
menuappList: [], | |||
// 查询参数 | |||
queryParams: { | |||
pageNum: 1, | |||
pageSize: 10, | |||
roleId: undefined, | |||
modelType: null, | |||
menuName: null, | |||
menuStatus: null, | |||
} | |||
} | |||
}, | |||
created() { | |||
const roleId = this.$route.params && this.$route.params.roleId | |||
if (roleId) { | |||
this.queryParams.roleId = roleId | |||
this.getList() | |||
} | |||
}, | |||
methods: { | |||
/** 查询授权用户列表 */ | |||
getList() { | |||
this.loading = true | |||
allocatedAppList(this.queryParams).then(response => { | |||
this.menuappList = response.rows | |||
this.total = response.total | |||
this.loading = false | |||
} | |||
) | |||
}, | |||
// 返回按钮 | |||
handleClose() { | |||
const obj = { path: "/system/role" } | |||
this.$tab.closeOpenPage(obj) | |||
}, | |||
/** 搜索按钮操作 */ | |||
handleQuery() { | |||
this.queryParams.pageNum = 1 | |||
this.getList() | |||
}, | |||
/** 重置按钮操作 */ | |||
resetQuery() { | |||
this.resetForm("queryForm") | |||
this.handleQuery() | |||
}, | |||
// 多选框选中数据 | |||
handleSelectionChange(selection) { | |||
this.appIds = selection.map(item => item.id) | |||
this.multiple = !selection.length | |||
}, | |||
/** 打开授权用户表弹窗 */ | |||
openSelectUser() { | |||
this.$refs.select.show() | |||
}, | |||
/** 取消授权按钮操作 */ | |||
cancelAuthUser(row) { | |||
const roleId = this.queryParams.roleId | |||
this.$modal.confirm('确认要取消该授权吗?').then(function() { | |||
return authAppCancel({ appId: row.id, roleId: roleId }) | |||
}).then(() => { | |||
this.getList() | |||
this.$modal.msgSuccess("取消授权成功") | |||
}).catch(() => {}) | |||
}, | |||
/** 批量取消授权按钮操作 */ | |||
cancelAuthUserAll(row) { | |||
const roleId = this.queryParams.roleId | |||
const appIds = this.appIds.join(",") | |||
this.$modal.confirm('是否取消选中菜单授权数据项?').then(function() { | |||
return authAppCancelAll({ roleId: roleId, appIds: appIds }) | |||
}).then(() => { | |||
this.getList() | |||
this.$modal.msgSuccess("取消授权成功") | |||
}).catch(() => {}) | |||
} | |||
} | |||
} | |||
</script> |
@@ -105,12 +105,7 @@ | |||
<el-table-column label="显示顺序" prop="roleSort" width="100" /> | |||
<el-table-column label="状态" align="center" width="100"> | |||
<template slot-scope="scope"> | |||
<el-switch | |||
v-model="scope.row.status" | |||
active-value="0" | |||
inactive-value="1" | |||
@change="handleStatusChange(scope.row)" | |||
></el-switch> | |||
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> | |||
@@ -119,28 +114,15 @@ | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | |||
<template slot-scope="scope" v-if="scope.row.roleId !== 1"> | |||
<el-button | |||
size="mini" | |||
type="text" | |||
icon="el-icon-edit" | |||
@click="handleUpdate(scope.row)" | |||
v-hasPermi="['system:role:edit']" | |||
>修改</el-button> | |||
<el-button | |||
size="mini" | |||
type="text" | |||
icon="el-icon-delete" | |||
@click="handleDelete(scope.row)" | |||
v-hasPermi="['system:role:remove']" | |||
>删除</el-button> | |||
<template slot-scope="scope"> | |||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']" v-if="scope.row.roleId !== 1">修改</el-button> | |||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']" v-if="scope.row.roleId !== 1">删除</el-button> | |||
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> | |||
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> | |||
<el-dropdown-menu slot="dropdown"> | |||
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" | |||
v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item> | |||
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" | |||
v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> | |||
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" v-hasPermi="['system:role:edit']" v-if="scope.row.roleId !== 1">数据权限</el-dropdown-item> | |||
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" v-hasPermi="['system:role:edit']" v-if="scope.row.roleId !== 1">分配用户</el-dropdown-item> | |||
<el-dropdown-item command="handleAuthApp" icon="el-icon-user" v-hasPermi="['system:role:mobile']">手机菜单</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
</template> | |||
@@ -248,13 +230,15 @@ | |||
<el-button @click="cancelDataScope">取 消</el-button> | |||
</div> | |||
</el-dialog> | |||
</div> | |||
</template> | |||
<script> | |||
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role" | |||
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect, getRoleMobiles, setupRoleMobiles } from "@/api/system/role" | |||
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu" | |||
import { listMenuapp } from "@/api/system/menuapp" | |||
export default { | |||
name: "Role", | |||
dicts: ['sys_normal_disable'], | |||
@@ -338,11 +322,16 @@ export default { | |||
roleSort: [ | |||
{ required: true, message: "角色顺序不能为空", trigger: "blur" } | |||
] | |||
} | |||
}, | |||
mobileList: [], | |||
} | |||
}, | |||
created() { | |||
this.getList() | |||
this.getList(); | |||
listMenuapp({sysNormalDisable: '0', translate_dict: 1}).then((resp) => { | |||
this.mobileList = resp.rows; | |||
}); | |||
}, | |||
methods: { | |||
/** 查询角色列表 */ | |||
@@ -463,6 +452,9 @@ export default { | |||
case "handleAuthUser": | |||
this.handleAuthUser(row) | |||
break | |||
case "handleAuthApp": | |||
this.handleAuthApp(row) | |||
break | |||
default: | |||
break | |||
} | |||
@@ -551,6 +543,11 @@ export default { | |||
const roleId = row.roleId | |||
this.$router.push("/system/role-auth/user/" + roleId) | |||
}, | |||
/** 分配手机菜单操作 */ | |||
handleAuthApp: function(row) { | |||
const roleId = row.roleId | |||
this.$router.push("/system/role-auth/app/" + roleId) | |||
}, | |||
/** 提交按钮 */ | |||
submitForm: function() { | |||
this.$refs["form"].validate(valid => { | |||
@@ -599,7 +596,10 @@ export default { | |||
this.download('system/role/export', { | |||
...this.queryParams | |||
}, `role_${new Date().getTime()}.xlsx`) | |||
} | |||
}, | |||
} | |||
} | |||
</script> | |||
</script> |
@@ -0,0 +1,129 @@ | |||
<template> | |||
<!-- 授权用户 --> | |||
<el-dialog title="选择手机菜单" :visible.sync="visible" width="1000px" top="5vh" append-to-body> | |||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> | |||
<el-form-item label="模块名称" prop="modelType"> | |||
<el-select v-model="queryParams.modelType" placeholder="请选择模块名称" clearable> | |||
<el-option v-for="dict in dict.type.model_type" :key="dict.value" :label="dict.label" :value="dict.value"/> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item label="菜单名称" prop="menuName"> | |||
<el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter.native="handleQuery"/> | |||
</el-form-item> | |||
<el-form-item label="菜单状态" prop="menuStatus"> | |||
<el-select v-model="queryParams.menuStatus" placeholder="请选择菜单状态" clearable> | |||
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value"/> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item> | |||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | |||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | |||
</el-form-item> | |||
</el-form> | |||
<el-row> | |||
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px"> | |||
<el-table-column type="selection" width="55"></el-table-column> | |||
<el-table-column label="模块名称" align="center" prop="modelType"> | |||
<template slot-scope="scope"> | |||
<dict-tag :options="dict.type.model_type" :value="scope.row.modelType"/> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="菜单名称" align="center" prop="menuName" /> | |||
<el-table-column label="菜单路径" align="center" prop="menuUrl" /> | |||
<el-table-column label="菜单图标" align="center" prop="menuIcon" /> | |||
<el-table-column label="显示顺序" align="center" prop="menuNum" /> | |||
<el-table-column label="菜单状态" align="center" prop="menuStatus"> | |||
<template slot-scope="scope"> | |||
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.menuStatus"/> | |||
</template> | |||
</el-table-column> | |||
</el-table> | |||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/> | |||
</el-row> | |||
<div slot="footer" class="dialog-footer"> | |||
<el-button type="primary" @click="handleSelectApp">确 定</el-button> | |||
<el-button @click="visible = false">取 消</el-button> | |||
</div> | |||
</el-dialog> | |||
</template> | |||
<script> | |||
import { unallocatedAppList, authAppSelectAll } from "@/api/system/role" | |||
export default { | |||
dicts: ['model_type', 'sys_normal_disable'], | |||
props: { | |||
// 角色编号 | |||
roleId: { | |||
type: [Number, String] | |||
} | |||
}, | |||
data() { | |||
return { | |||
// 遮罩层 | |||
visible: false, | |||
// 选中数组值 | |||
appIds: [], | |||
// 总条数 | |||
total: 0, | |||
// 未授权用户数据 | |||
userList: [], | |||
// 查询参数 | |||
queryParams: { | |||
pageNum: 1, | |||
pageSize: 10, | |||
roleId: null, | |||
modelType: null, | |||
menuName: null, | |||
menuStatus: null, | |||
} | |||
} | |||
}, | |||
methods: { | |||
// 显示弹框 | |||
show() { | |||
this.queryParams.roleId = this.roleId | |||
this.getList() | |||
this.visible = true | |||
}, | |||
clickRow(row) { | |||
this.$refs.table.toggleRowSelection(row) | |||
}, | |||
// 多选框选中数据 | |||
handleSelectionChange(selection) { | |||
this.appIds = selection.map(item => item.id) | |||
}, | |||
// 查询表数据 | |||
getList() { | |||
unallocatedAppList(this.queryParams).then(res => { | |||
this.userList = res.rows | |||
this.total = res.total | |||
}) | |||
}, | |||
/** 搜索按钮操作 */ | |||
handleQuery() { | |||
this.queryParams.pageNum = 1 | |||
this.getList() | |||
}, | |||
/** 重置按钮操作 */ | |||
resetQuery() { | |||
this.resetForm("queryForm") | |||
this.handleQuery() | |||
}, | |||
/** 选择授权用户操作 */ | |||
handleSelectApp() { | |||
const roleId = this.queryParams.roleId | |||
const appIds = this.appIds.join(",") | |||
if (appIds == "") { | |||
this.$modal.msgError("请选择要分配的用户") | |||
return | |||
} | |||
authAppSelectAll({ roleId: roleId, appIds: appIds }).then(res => { | |||
this.$modal.msgSuccess(res.msg) | |||
this.visible = false | |||
this.$emit("ok") | |||
}) | |||
} | |||
} | |||
} | |||
</script> |