列权限添加

This commit is contained in:
sheng
2023-09-11 12:02:29 +08:00
committed by 李强
parent ad6ec5ca58
commit 94815f4b20
7 changed files with 121 additions and 30 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,5 +1,5 @@
# port 端口号 # port 端口号
VITE_PORT = 8085 VITE_PORT = 8080
# open 运行 npm run dev 时自动打开浏览器 # open 运行 npm run dev 时自动打开浏览器
VITE_OPEN = false VITE_OPEN = false

View File

@@ -0,0 +1,20 @@
import { defineStore } from 'pinia';
export interface DataItemType {
field_name: string;
is_create: boolean;
is_query: boolean;
is_update: boolean;
}
export const useColumnPermission = defineStore('columnPermission', {
state: () => ({
permission: [] as DataItemType[],
}),
actions: {
setPermissionData(data: DataItemType[]) {
this.permission = data;
},
},
});

View File

@@ -0,0 +1,9 @@
import { useColumnPermission } from '/@/stores/columnPermission';
type permissionType = 'is_create' | 'is_query' | 'is_update';
export const columnPermission = (key: string, type: permissionType): boolean => {
const permissions = useColumnPermission().permission || [];
return !!permissions.some((i) => i.field_name === key && i[type]);
};

View File

@@ -2,6 +2,14 @@ import { request } from '/@/utils/service';
import { PageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud'; import { PageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
export const apiPrefix = '/api/system/role/'; export const apiPrefix = '/api/system/role/';
export function GetPermission() {
return request({
url: apiPrefix + 'field_permission/',
method: 'get',
});
}
export function GetList(query: PageQuery) { export function GetList(query: PageQuery) {
return request({ return request({
url: apiPrefix, url: apiPrefix,

View File

@@ -1,9 +1,11 @@
import { CrudOptions, AddReq, DelReq, EditReq, dict, CrudExpose, compute } from '@fast-crud/fast-crud'; import { CrudOptions, AddReq, DelReq, EditReq, dict, CrudExpose, compute } from '@fast-crud/fast-crud';
import * as api from './api'; import * as api from './api';
import { dictionary } from '/@/utils/dictionary'; import { dictionary } from '/@/utils/dictionary';
import { columnPermission } from '../../../utils/columnPermission';
import { successMessage } from '../../../utils/message'; import { successMessage } from '../../../utils/message';
import { inject } from 'vue';
interface CreateCrudOptionsTypes { interface CreateCrudOptionsTypes {
output: any;
crudOptions: CrudOptions; crudOptions: CrudOptions;
} }
@@ -12,10 +14,12 @@ export const createCrudOptions = function ({
crudExpose, crudExpose,
rolePermission, rolePermission,
handleDrawerOpen, handleDrawerOpen,
hasPermissions,
}: { }: {
crudExpose: CrudExpose; crudExpose: CrudExpose;
rolePermission: any; rolePermission: any;
handleDrawerOpen: Function; handleDrawerOpen: Function;
hasPermissions: Function;
}): CreateCrudOptionsTypes { }): CreateCrudOptionsTypes {
const pageRequest = async (query: any) => { const pageRequest = async (query: any) => {
return await api.GetList(query); return await api.GetList(query);
@@ -32,7 +36,6 @@ export const createCrudOptions = function ({
}; };
//权限判定 //权限判定
const hasPermissions: any = inject('$hasPermissions');
// @ts-ignore // @ts-ignore
// @ts-ignore // @ts-ignore
@@ -58,7 +61,7 @@ export const createCrudOptions = function ({
remove: { remove: {
show: hasPermissions('role:Delete'), show: hasPermissions('role:Delete'),
}, },
custom: { /* custom: {
type: 'primary', type: 'primary',
text: '权限配置', text: '权限配置',
show: hasPermissions('role:Update'), show: hasPermissions('role:Update'),
@@ -73,10 +76,10 @@ export const createCrudOptions = function ({
rolePermission.value.editedRoleInfo = row; rolePermission.value.editedRoleInfo = row;
rolePermission.value.initGet(); rolePermission.value.initGet();
}, },
}, }, */
customNew: { customNew: {
type: 'primary', type: 'primary',
text: '权限配置', text: '权限配置',
show: hasPermissions('role:Update'), show: hasPermissions('role:Update'),
tooltip: { tooltip: {
placement: 'top', placement: 'top',
@@ -122,6 +125,13 @@ export const createCrudOptions = function ({
column: { column: {
minWidth: 120, minWidth: 120,
sortable: 'custom', sortable: 'custom',
show: columnPermission('name', 'is_query'),
},
addForm: {
show: columnPermission('name', 'is_create'),
},
editForm: {
show: columnPermission('name', 'is_update'),
}, },
form: { form: {
rules: [{ required: true, message: '角色名称必填' }], rules: [{ required: true, message: '角色名称必填' }],
@@ -135,12 +145,22 @@ export const createCrudOptions = function ({
type: 'text', type: 'text',
search: { show: false }, search: { show: false },
column: { column: {
width: 120, minWidth: 120,
sortable: 'custom', sortable: 'custom',
show: columnPermission('key', 'is_query'),
columnSetDisabled: true,
},
addForm: {
show: columnPermission('key', 'is_create'),
},
editForm: {
show: columnPermission('key', 'is_update'),
}, },
form: { form: {
rules: [{ required: true, message: '权限标识必填' }], rules: [{ required: true, message: '权限标识必填' }],
placeholder: '输入权限标识', component: {
placeholder: '输入权限标识',
},
}, },
}, },
sort: { sort: {
@@ -148,8 +168,15 @@ export const createCrudOptions = function ({
search: { show: false }, search: { show: false },
type: 'number', type: 'number',
column: { column: {
width: 90, minWidth: 90,
sortable: 'custom', sortable: 'custom',
show: columnPermission('sort', 'is_query'),
},
addForm: {
show: columnPermission('sort', 'is_create'),
},
editForm: {
show: columnPermission('sort', 'is_update'),
}, },
form: { form: {
rules: [{ required: true, message: '排序必填' }], rules: [{ required: true, message: '排序必填' }],
@@ -175,8 +202,15 @@ export const createCrudOptions = function ({
], ],
}), }),
column: { column: {
width: 130, minWidth: 130,
sortable: 'custom', sortable: 'custom',
show: columnPermission('admin', 'is_query'),
},
addForm: {
show: columnPermission('admin', 'is_create'),
},
editForm: {
show: columnPermission('admin', 'is_update'),
}, },
form: { form: {
rules: [{ required: true, message: '是否管理员必填' }], rules: [{ required: true, message: '是否管理员必填' }],
@@ -202,6 +236,13 @@ export const createCrudOptions = function ({
}; };
}), }),
}, },
show: columnPermission('status', 'is_query'),
},
addForm: {
show: columnPermission('status', 'is_create'),
},
editForm: {
show: columnPermission('status', 'is_update'),
}, },
dict: dict({ dict: dict({
data: dictionary('button_status_bool'), data: dictionary('button_status_bool'),
@@ -212,8 +253,9 @@ export const createCrudOptions = function ({
type: 'text', type: 'text',
search: { show: false }, search: { show: false },
column: { column: {
width: 170, minWidth: 170,
sortable: 'custom', sortable: 'custom',
show: columnPermission('update_datetime', 'is_query'),
}, },
form: { form: {
show: false, show: false,
@@ -228,7 +270,8 @@ export const createCrudOptions = function ({
search: { show: false }, search: { show: false },
column: { column: {
sortable: 'custom', sortable: 'custom',
width: 170, minWidth: 170,
show: columnPermission('create_datetime', 'is_query'),
}, },
form: { form: {
show: false, show: false,

View File

@@ -8,14 +8,14 @@
<permission ref="rolePermission"></permission> <permission ref="rolePermission"></permission>
<PermissionComNew v-model:drawerVisible="drawerVisible" :roleId="roleId" :roleName="roleName" @drawerClose="handleDrawerClose" />
<PermissionComNew v-model:drawerVisible="drawerVisible" :roleId="roleId" :roleName="roleName" @drawerClose="handleDrawerClose" />
</fs-page> </fs-page>
</template> </template>
<script lang="ts" setup name="role"> <script lang="ts" setup name="role">
import { ref, onMounted } from 'vue'; import { ref, onMounted, inject } from 'vue';
import { useColumnPermission } from '/@/stores/columnPermission';
import { GetPermission } from './api';
import { useExpose, useCrud } from '@fast-crud/fast-crud'; import { useExpose, useCrud } from '@fast-crud/fast-crud';
import { createCrudOptions } from './crud'; import { createCrudOptions } from './crud';
import permission from './components/PermissionCom/index.vue'; import permission from './components/PermissionCom/index.vue';
@@ -30,12 +30,17 @@ const rolePermission = ref();
const crudRef = ref(); const crudRef = ref();
// crud 配置的ref // crud 配置的ref
const crudBinding = ref(); const crudBinding = ref();
// 暴露的方法
const { crudExpose } = useExpose({ crudRef, crudBinding });
const handleDrawerOpen = (row:any) => { const hasPermissions: any = inject('$hasPermissions');
roleId.value = row.id
roleName.value = row.name const fetchColumnPermission = async () => {
const res = await GetPermission();
useColumnPermission().setPermissionData(res.data);
};
const handleDrawerOpen = (row: any) => {
roleId.value = row.id;
roleName.value = row.name;
drawerVisible.value = true; drawerVisible.value = true;
}; };
@@ -43,18 +48,24 @@ const handleDrawerClose = () => {
drawerVisible.value = false; drawerVisible.value = false;
}; };
// 你的crud配置 const { crudExpose } = useExpose({ crudRef, crudBinding });
const { crudOptions } = createCrudOptions({ crudExpose, rolePermission, handleDrawerOpen });
// 初始化crud配置
const { resetCrudOptions } = useCrud({
crudExpose,
crudOptions,
context: {},
});
// 页面打开后获取列表数据 // 页面打开后获取列表数据
onMounted(() => { onMounted(async () => {
await fetchColumnPermission();
// 你的crud配置
const { crudOptions } = createCrudOptions({ crudExpose, rolePermission, handleDrawerOpen, hasPermissions });
// 初始化crud配置
const { resetCrudOptions } = useCrud({
crudExpose,
crudOptions,
context: {},
});
crudExpose.doRefresh(); crudExpose.doRefresh();
}); });
defineExpose(rolePermission); defineExpose(rolePermission);
</script> </script>