| @@ -117,3 +117,66 @@ export function deptTreeSelect(roleId) { | |||||
| method: 'get' | 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', | path: '/system/dict-data', | ||||
| component: Layout, | 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="显示顺序" prop="roleSort" width="100" /> | ||||
| <el-table-column label="状态" align="center" width="100"> | <el-table-column label="状态" align="center" width="100"> | ||||
| <template slot-scope="scope"> | <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> | </template> | ||||
| </el-table-column> | </el-table-column> | ||||
| <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | ||||
| @@ -119,28 +114,15 @@ | |||||
| </template> | </template> | ||||
| </el-table-column> | </el-table-column> | ||||
| <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | <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-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-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> | ||||
| <el-dropdown-menu slot="dropdown"> | <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-menu> | ||||
| </el-dropdown> | </el-dropdown> | ||||
| </template> | </template> | ||||
| @@ -248,13 +230,15 @@ | |||||
| <el-button @click="cancelDataScope">取 消</el-button> | <el-button @click="cancelDataScope">取 消</el-button> | ||||
| </div> | </div> | ||||
| </el-dialog> | </el-dialog> | ||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| <script> | <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 { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu" | ||||
| import { listMenuapp } from "@/api/system/menuapp" | |||||
| export default { | export default { | ||||
| name: "Role", | name: "Role", | ||||
| dicts: ['sys_normal_disable'], | dicts: ['sys_normal_disable'], | ||||
| @@ -338,11 +322,16 @@ export default { | |||||
| roleSort: [ | roleSort: [ | ||||
| { required: true, message: "角色顺序不能为空", trigger: "blur" } | { required: true, message: "角色顺序不能为空", trigger: "blur" } | ||||
| ] | ] | ||||
| } | |||||
| }, | |||||
| mobileList: [], | |||||
| } | } | ||||
| }, | }, | ||||
| created() { | created() { | ||||
| this.getList() | |||||
| this.getList(); | |||||
| listMenuapp({sysNormalDisable: '0', translate_dict: 1}).then((resp) => { | |||||
| this.mobileList = resp.rows; | |||||
| }); | |||||
| }, | }, | ||||
| methods: { | methods: { | ||||
| /** 查询角色列表 */ | /** 查询角色列表 */ | ||||
| @@ -463,6 +452,9 @@ export default { | |||||
| case "handleAuthUser": | case "handleAuthUser": | ||||
| this.handleAuthUser(row) | this.handleAuthUser(row) | ||||
| break | break | ||||
| case "handleAuthApp": | |||||
| this.handleAuthApp(row) | |||||
| break | |||||
| default: | default: | ||||
| break | break | ||||
| } | } | ||||
| @@ -551,6 +543,11 @@ export default { | |||||
| const roleId = row.roleId | const roleId = row.roleId | ||||
| this.$router.push("/system/role-auth/user/" + 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() { | submitForm: function() { | ||||
| this.$refs["form"].validate(valid => { | this.$refs["form"].validate(valid => { | ||||
| @@ -599,7 +596,10 @@ export default { | |||||
| this.download('system/role/export', { | this.download('system/role/export', { | ||||
| ...this.queryParams | ...this.queryParams | ||||
| }, `role_${new Date().getTime()}.xlsx`) | }, `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> | |||||