|
@@ -2,7 +2,6 @@
|
|
|
import {
|
|
|
getRolePage,
|
|
|
updateRole,
|
|
|
- getRoleForm,
|
|
|
addRole,
|
|
|
deleteRoles,
|
|
|
getRoleMenuIds,
|
|
@@ -10,8 +9,6 @@ import {
|
|
|
} from "@/api/system/role";
|
|
|
import { getMenuOptions } from "@/api/system/menu";
|
|
|
|
|
|
-import { RolePageVO, RoleForm, RoleQuery } from "@/api/system/role/types";
|
|
|
-
|
|
|
defineOptions({
|
|
|
name: "Role",
|
|
|
inheritAttrs: false,
|
|
@@ -25,35 +22,35 @@ const loading = ref(false);
|
|
|
const ids = ref<number[]>([]);
|
|
|
const total = ref(0);
|
|
|
|
|
|
-const queryParams = reactive<RoleQuery>({
|
|
|
+const queryParams = reactive({
|
|
|
pageNo: 1,
|
|
|
pageSize: 10,
|
|
|
});
|
|
|
|
|
|
-const roleList = ref<RolePageVO[]>();
|
|
|
+const roleList = ref<[]>();
|
|
|
|
|
|
const dialog = reactive({
|
|
|
title: "",
|
|
|
visible: false,
|
|
|
});
|
|
|
|
|
|
-const formData = reactive<RoleForm>({
|
|
|
- sort: 1,
|
|
|
- status: 1,
|
|
|
- code: "",
|
|
|
- name: "",
|
|
|
+const formData = ref({
|
|
|
+ scope: 0,
|
|
|
+ state: 0,
|
|
|
+ roleCode: "",
|
|
|
+ roleName: "",
|
|
|
});
|
|
|
|
|
|
const rules = reactive({
|
|
|
- name: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
|
|
|
- code: [{ required: true, message: "请输入角色编码", trigger: "blur" }],
|
|
|
- dataScope: [{ required: true, message: "请选择数据权限", trigger: "blur" }],
|
|
|
- status: [{ required: true, message: "请选择状态", trigger: "blur" }],
|
|
|
+ roleName: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
|
|
|
+ roleCode: [{ required: true, message: "请输入角色编码", trigger: "blur" }],
|
|
|
+ scope: [{ required: true, message: "请选择数据权限", trigger: "blur" }],
|
|
|
+ state: [{ required: true, message: "请选择状态", trigger: "blur" }],
|
|
|
});
|
|
|
|
|
|
const menuDialogVisible = ref(false);
|
|
|
|
|
|
-const menuList = ref<OptionType[]>([]);
|
|
|
+const menuList = ref([]);
|
|
|
|
|
|
interface CheckedRole {
|
|
|
id?: number;
|
|
@@ -66,8 +63,8 @@ function handleQuery() {
|
|
|
loading.value = true;
|
|
|
getRolePage(queryParams)
|
|
|
.then(({ data }) => {
|
|
|
- roleList.value = data.list;
|
|
|
- total.value = data.total;
|
|
|
+ roleList.value = data.records;
|
|
|
+ total.value = data.totalCount;
|
|
|
})
|
|
|
.finally(() => {
|
|
|
loading.value = false;
|
|
@@ -86,15 +83,17 @@ function handleSelectionChange(selection: any) {
|
|
|
}
|
|
|
|
|
|
/** 打开角色表单弹窗 */
|
|
|
-function openDialog(roleId?: number) {
|
|
|
+function openDialog(row?: any) {
|
|
|
dialog.visible = true;
|
|
|
- if (roleId) {
|
|
|
+ if (row) {
|
|
|
dialog.title = "修改角色";
|
|
|
- getRoleForm(roleId).then(({ data }) => {
|
|
|
- Object.assign(formData, data);
|
|
|
- });
|
|
|
+ Object.assign(formData.value, row);
|
|
|
} else {
|
|
|
dialog.title = "新增角色";
|
|
|
+ formData.value.scope = 0
|
|
|
+ formData.value.state = 0
|
|
|
+ formData.value.roleCode = ""
|
|
|
+ formData.value.roleName = ""
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -103,9 +102,9 @@ function handleSubmit() {
|
|
|
roleFormRef.value.validate((valid: any) => {
|
|
|
if (valid) {
|
|
|
loading.value = true;
|
|
|
- const roleId = formData.id;
|
|
|
+ const roleId = formData.value.id;
|
|
|
if (roleId) {
|
|
|
- updateRole(roleId, formData)
|
|
|
+ updateRole(formData.value)
|
|
|
.then(() => {
|
|
|
ElMessage.success("修改成功");
|
|
|
closeDialog();
|
|
@@ -113,7 +112,7 @@ function handleSubmit() {
|
|
|
})
|
|
|
.finally(() => (loading.value = false));
|
|
|
} else {
|
|
|
- addRole(formData)
|
|
|
+ addRole(formData.value)
|
|
|
.then(() => {
|
|
|
ElMessage.success("新增成功");
|
|
|
closeDialog();
|
|
@@ -155,7 +154,7 @@ function handleDelete(roleId?: number) {
|
|
|
type: "warning",
|
|
|
}).then(() => {
|
|
|
loading.value = true;
|
|
|
- deleteRoles(roleIds)
|
|
|
+ deleteRoles(ids.value)
|
|
|
.then(() => {
|
|
|
ElMessage.success("删除成功");
|
|
|
resetQuery();
|
|
@@ -165,12 +164,12 @@ function handleDelete(roleId?: number) {
|
|
|
}
|
|
|
|
|
|
/** 打开分配菜单弹窗 */
|
|
|
-function openMenuDialog(row: RolePageVO) {
|
|
|
+function openMenuDialog(row: any) {
|
|
|
const roleId = row.id;
|
|
|
if (roleId) {
|
|
|
checkedRole = {
|
|
|
id: roleId,
|
|
|
- name: row.name,
|
|
|
+ name: row.roleName,
|
|
|
};
|
|
|
menuDialogVisible.value = true;
|
|
|
loading.value = true;
|
|
@@ -199,7 +198,8 @@ function handleRoleMenuSubmit() {
|
|
|
if (roleId) {
|
|
|
const checkedMenuIds: number[] = menuRef.value
|
|
|
.getCheckedNodes(false, true)
|
|
|
- .map((node: any) => node.value);
|
|
|
+ .map((node: any) => {
|
|
|
+ return node.id});
|
|
|
|
|
|
loading.value = true;
|
|
|
updateRoleMenus(roleId, checkedMenuIds)
|
|
@@ -214,7 +214,7 @@ function handleRoleMenuSubmit() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-onMounted(() => {
|
|
|
+onMounted?.(() => {
|
|
|
handleQuery();
|
|
|
});
|
|
|
</script>
|
|
@@ -226,7 +226,7 @@ onMounted(() => {
|
|
|
<el-form-item prop="keywords" label="关键字">
|
|
|
<el-input
|
|
|
v-model="queryParams.keywords"
|
|
|
- placeholder="角色名称"
|
|
|
+ placeholder="编码/名称"
|
|
|
clearable
|
|
|
@keyup.enter="handleQuery"
|
|
|
/>
|
|
@@ -243,11 +243,12 @@ onMounted(() => {
|
|
|
|
|
|
<el-card shadow="never" class="table-container">
|
|
|
<template #header>
|
|
|
- <el-button type="success" @click="openDialog()"
|
|
|
+ <el-button type="primary" v-hasPerm="['sys:role:add']" @click="openDialog()"
|
|
|
><i-ep-plus />新增</el-button
|
|
|
>
|
|
|
<el-button
|
|
|
type="danger"
|
|
|
+ v-hasPerm="['sys:role:del']"
|
|
|
:disabled="ids.length === 0"
|
|
|
@click="handleDelete()"
|
|
|
><i-ep-delete />删除</el-button
|
|
@@ -263,24 +264,24 @@ onMounted(() => {
|
|
|
@selection-change="handleSelectionChange"
|
|
|
>
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
- <el-table-column label="角色名称" prop="name" min-width="100" />
|
|
|
- <el-table-column label="角色编码" prop="code" width="150" />
|
|
|
-
|
|
|
+ <el-table-column label="角色编码" prop="roleCode"/>
|
|
|
+ <el-table-column label="角色名称" prop="roleName"/>
|
|
|
<el-table-column label="状态" align="center" width="100">
|
|
|
<template #default="scope">
|
|
|
- <el-tag v-if="scope.row.status === 1" type="success">正常</el-tag>
|
|
|
+ <el-tag v-if="scope.row.state === 0" type="success">正常</el-tag>
|
|
|
<el-tag v-else type="info">禁用</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column label="排序" align="center" width="80" prop="sort" />
|
|
|
-
|
|
|
+ <el-table-column label="创建时间" align="center" prop="created" />
|
|
|
+ <el-table-column label="创建人" align="center" prop="creator" />
|
|
|
<el-table-column fixed="right" label="操作" width="220">
|
|
|
<template #default="scope">
|
|
|
<el-button
|
|
|
type="primary"
|
|
|
size="small"
|
|
|
link
|
|
|
+ v-hasPerm="['sys:role:dis']"
|
|
|
@click="openMenuDialog(scope.row)"
|
|
|
>
|
|
|
<i-ep-position />分配权限
|
|
@@ -289,18 +290,19 @@ onMounted(() => {
|
|
|
type="primary"
|
|
|
size="small"
|
|
|
link
|
|
|
- @click="openDialog(scope.row.id)"
|
|
|
+ v-hasPerm="['sys:role:edit']"
|
|
|
+ @click="openDialog(scope.row)"
|
|
|
>
|
|
|
<i-ep-edit />编辑
|
|
|
</el-button>
|
|
|
- <el-button
|
|
|
+<!-- <el-button
|
|
|
type="primary"
|
|
|
size="small"
|
|
|
link
|
|
|
@click="handleDelete(scope.row.id)"
|
|
|
>
|
|
|
<i-ep-delete />删除
|
|
|
- </el-button>
|
|
|
+ </el-button>-->
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -328,15 +330,15 @@ onMounted(() => {
|
|
|
label-width="100px"
|
|
|
>
|
|
|
<el-form-item label="角色名称" prop="name">
|
|
|
- <el-input v-model="formData.name" placeholder="请输入角色名称" />
|
|
|
+ <el-input v-model="formData.roleName" placeholder="请输入角色名称" />
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="角色编码" prop="code">
|
|
|
- <el-input v-model="formData.code" placeholder="请输入角色编码" />
|
|
|
+ <el-input v-model="formData.roleCode" placeholder="请输入角色编码" />
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="数据权限" prop="dataScope">
|
|
|
- <el-select v-model="formData.dataScope">
|
|
|
+ <el-select v-model="formData.scope">
|
|
|
<el-option :key="0" label="全部数据" :value="0" />
|
|
|
<el-option :key="1" label="部门及子部门数据" :value="1" />
|
|
|
<el-option :key="2" label="本部门数据" :value="2" />
|
|
@@ -345,20 +347,11 @@ onMounted(() => {
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
- <el-radio-group v-model="formData.status">
|
|
|
- <el-radio :value="1">正常</el-radio>
|
|
|
- <el-radio :value="0">停用</el-radio>
|
|
|
+ <el-radio-group v-model="formData.state">
|
|
|
+ <el-radio :value="0">正常</el-radio>
|
|
|
+ <el-radio :value="1">停用</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="排序" prop="sort">
|
|
|
- <el-input-number
|
|
|
- v-model="formData.sort"
|
|
|
- controls-position="right"
|
|
|
- :min="0"
|
|
|
- style="width: 100px"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
</el-form>
|
|
|
|
|
|
<template #footer>
|
|
@@ -373,18 +366,19 @@ onMounted(() => {
|
|
|
<el-dialog
|
|
|
v-model="menuDialogVisible"
|
|
|
:title="'【' + checkedRole.name + '】权限分配'"
|
|
|
- width="800px"
|
|
|
+ width="550px"
|
|
|
>
|
|
|
<el-scrollbar v-loading="loading" max-height="600px">
|
|
|
<el-tree
|
|
|
ref="menuRef"
|
|
|
- node-key="value"
|
|
|
+ node-key="id"
|
|
|
show-checkbox
|
|
|
+ :props="{ children: 'childs', label: 'menuName',value: 'id', disabled: '' }"
|
|
|
:data="menuList"
|
|
|
- :default-expand-all="true"
|
|
|
+ :default-expand-all="false"
|
|
|
>
|
|
|
<template #default="{ data }">
|
|
|
- {{ data.label }}
|
|
|
+ {{ data.menuName }}
|
|
|
</template>
|
|
|
</el-tree>
|
|
|
</el-scrollbar>
|