@@ -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> |