revert(角色管理): 回滚角色管理代码
This commit is contained in:
@@ -212,9 +212,6 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
|
|||||||
},
|
},
|
||||||
dept: {
|
dept: {
|
||||||
title: '部门',
|
title: '部门',
|
||||||
search: {
|
|
||||||
disabled: true,
|
|
||||||
},
|
|
||||||
type: 'dict-tree',
|
type: 'dict-tree',
|
||||||
dict: dict({
|
dict: dict({
|
||||||
isTree: true,
|
isTree: true,
|
||||||
@@ -255,7 +252,12 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
|
|||||||
role: {
|
role: {
|
||||||
title: '角色',
|
title: '角色',
|
||||||
search: {
|
search: {
|
||||||
disabled: true,
|
show: true,
|
||||||
|
component: {
|
||||||
|
props: {
|
||||||
|
clearable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
type: 'dict-select',
|
type: 'dict-select',
|
||||||
dict: dict({
|
dict: dict({
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { request } from "/@/utils/service";
|
||||||
|
|
||||||
|
export function getDataPermissionRange() {
|
||||||
|
return request({
|
||||||
|
url: '/api/system/role_menu_button_permission/data_scope/',
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getDataPermissionDept() {
|
||||||
|
return request({
|
||||||
|
url: '/api/system/role_menu_button_permission/role_to_dept_all/',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDataPermissionMenu() {
|
||||||
|
return request({
|
||||||
|
url: '/api/system/role_menu_button_permission/get_role_permissions/',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
235
web/src/views/system/role/components/PermissionComCopy/index.vue
Normal file
235
web/src/views/system/role/components/PermissionComCopy/index.vue
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
<template>
|
||||||
|
<div class="permission-com">
|
||||||
|
<div class="pc-item">
|
||||||
|
<p class="pc-title">数据授权</p>
|
||||||
|
<div class="pc-cell">
|
||||||
|
<el-radio-group v-model="dataPermission" class="pc-data-permission">
|
||||||
|
<el-radio v-for="item in dataPermissionRange" :key="item.label" :label="item.value" @change="handleChange">{{ item.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<el-tree-select
|
||||||
|
v-if="dataPermission === 4"
|
||||||
|
node-key="id"
|
||||||
|
v-model="customDataPermission"
|
||||||
|
:props="defaultTreeProps"
|
||||||
|
:data="deptData"
|
||||||
|
multiple
|
||||||
|
check-strictly
|
||||||
|
:render-after-expand="false"
|
||||||
|
show-checkbox
|
||||||
|
class="pc-custom-dept"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pc-item pc-menu">
|
||||||
|
<p class="pc-title">菜单授权</p>
|
||||||
|
<div>
|
||||||
|
<el-tree
|
||||||
|
:props="defaultTreeProps"
|
||||||
|
:data="menuData"
|
||||||
|
show-checkbox
|
||||||
|
node-key="id"
|
||||||
|
default-expand-all
|
||||||
|
:expand-on-click-node="false"
|
||||||
|
class="dc-menu-tree"
|
||||||
|
>
|
||||||
|
<template #default="{ node, data }">
|
||||||
|
<div class="pc-tree-node" :class="{ 'tree-node-label-border': !data.is_catalog }">
|
||||||
|
<p class="tree-node-label">{{ node.label }}</p>
|
||||||
|
<div v-if="!data.is_catalog">
|
||||||
|
<ul class="menu-permission-list">
|
||||||
|
<li v-for="m in data.menuPermission" :key="m.id" class="menu-permission-item">
|
||||||
|
<el-checkbox v-model="m.id" :label="m.name" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="menu-permission-list">
|
||||||
|
<li v-for="m in data.columns" :key="m.id" class="menu-permission-item">
|
||||||
|
<el-checkbox v-model="m.id" :label="m.title" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-tree>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pc-btn">
|
||||||
|
<el-button type="primary">确定</el-button>
|
||||||
|
<el-button>取消</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, onMounted } from 'vue';
|
||||||
|
import XEUtils from 'xe-utils';
|
||||||
|
import { getDataPermissionRange, getDataPermissionDept, getDataPermissionMenu } from './api';
|
||||||
|
import { DataPermissionRangeType, CustomDataPermissionDeptType, CustomDataPermissionMenuType } from './types';
|
||||||
|
|
||||||
|
const defaultTreeProps = {
|
||||||
|
children: 'children',
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
};
|
||||||
|
|
||||||
|
const data: any[] = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
label: 'Level one 1',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
label: 'Level two 1-1',
|
||||||
|
isPenultimate: true,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
id: 9,
|
||||||
|
label: 'Level three 1-1-1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 10,
|
||||||
|
label: 'Level three 1-1-2',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
label: 'Level one 2',
|
||||||
|
isPenultimate: true,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
label: 'Level two 2-1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
label: 'Level two 2-2',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
label: 'Level one 3',
|
||||||
|
isPenultimate: true,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
label: 'Level two 3-1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 8,
|
||||||
|
label: 'Level two 3-2',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
let dataPermission = ref();
|
||||||
|
let dataPermissionRange = ref<DataPermissionRangeType[]>([]);
|
||||||
|
let customDataPermission = ref();
|
||||||
|
let deptData = ref<CustomDataPermissionDeptType[]>([]);
|
||||||
|
let menuData = ref<CustomDataPermissionMenuType[]>([]);
|
||||||
|
|
||||||
|
const fetchData = async () => {
|
||||||
|
try {
|
||||||
|
const resRange = await getDataPermissionRange();
|
||||||
|
const resMenu = await getDataPermissionMenu();
|
||||||
|
|
||||||
|
if (resRange?.code === 2000) {
|
||||||
|
dataPermissionRange.value = resRange.data;
|
||||||
|
}
|
||||||
|
if (resMenu?.code === 2000) {
|
||||||
|
console.log(resMenu.data);
|
||||||
|
menuData.value = resMenu.data;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChange = async () => {
|
||||||
|
if (dataPermission.value === 4) {
|
||||||
|
const res = await getDataPermissionDept();
|
||||||
|
const data = XEUtils.toArrayTree(res.data, { parentKey: 'parent', strict: false });
|
||||||
|
deptData.value = data;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleTestClick = (node: any, data: any) => {
|
||||||
|
console.log(node, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
fetchData();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.permission-com {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 15px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.pc-item {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
border-bottom: 1px #dcdfe6 solid;
|
||||||
|
}
|
||||||
|
.pc-title {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.pc-cell {
|
||||||
|
display: flex;
|
||||||
|
padding: 10px;
|
||||||
|
overflow-x: auto;
|
||||||
|
.pc-data-permission {
|
||||||
|
min-width: 800px;
|
||||||
|
}
|
||||||
|
.pc-custom-dept {
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pc-menu {
|
||||||
|
height: calc(100% - 140px);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pc-tree-node {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.tree-node-label {
|
||||||
|
font-size: 16px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
.menu-permission-list {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.menu-permission-item {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-node-label-border {
|
||||||
|
border-bottom: 1px #dcdfe6 solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pc-btn {
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.dc-menu-tree {
|
||||||
|
.el-tree-node__content {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
export interface DataPermissionRangeType {
|
||||||
|
label: string;
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomDataPermissionDeptType {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
patent: number;
|
||||||
|
children: CustomDataPermissionDeptType[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomDataPermissionMenuType {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
is_catalog: boolean;
|
||||||
|
menuPermission: { id: number; name: string; value: string }[] | null;
|
||||||
|
columns: { id: number; name: string; title: string }[] | null;
|
||||||
|
children: CustomDataPermissionMenuType[]
|
||||||
|
}
|
||||||
@@ -15,7 +15,7 @@ import { ref, onMounted } from 'vue';
|
|||||||
import { useExpose, useCrud, dict } from '@fast-crud/fast-crud';
|
import { useExpose, useCrud, dict } from '@fast-crud/fast-crud';
|
||||||
import { createCrudOptions } from './crud';
|
import { createCrudOptions } from './crud';
|
||||||
import RolePermission from '/@/views/system/rolePermission/index.vue';
|
import RolePermission from '/@/views/system/rolePermission/index.vue';
|
||||||
import permission from './components/permission.vue'
|
import permission from './components/PermissionCom/index.vue';
|
||||||
import * as api from './api';
|
import * as api from './api';
|
||||||
import _ from 'lodash-es';
|
import _ from 'lodash-es';
|
||||||
const rolePermission = ref();
|
const rolePermission = ref();
|
||||||
|
|||||||
27
web/src/views/system/role/types.ts
Normal file
27
web/src/views/system/role/types.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import { CrudOptions, CrudExpose } from '@fast-crud/fast-crud';
|
||||||
|
|
||||||
|
export interface CreateCrudReturnTypes {
|
||||||
|
crudOptions: CrudOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateCrudOptionsTypes {
|
||||||
|
crudExpose: CrudExpose;
|
||||||
|
configPermission: Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RoleItemType {
|
||||||
|
id: string | number;
|
||||||
|
modifier_name: string;
|
||||||
|
creator_name: string;
|
||||||
|
create_datetime: string;
|
||||||
|
update_datetime: string;
|
||||||
|
description: string;
|
||||||
|
modifier: string;
|
||||||
|
dept_belong_id: string;
|
||||||
|
name: string;
|
||||||
|
key: string;
|
||||||
|
sort: number;
|
||||||
|
status: boolean;
|
||||||
|
admin: boolean;
|
||||||
|
creator: string;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user