From 111edb3f4a030ee45cc577243b304877755ffa3d Mon Sep 17 00:00:00 2001 From: sheng <15292050171@163.com> Date: Mon, 11 Sep 2023 12:02:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=97=E6=9D=83=E9=99=90=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 8196 bytes web/.env | 2 +- web/.env.development | 2 +- web/src/stores/columnPermission.ts | 20 +++++++++ web/src/utils/columnPermission.ts | 9 ++++ web/src/views/system/role/api.ts | 8 ++++ web/src/views/system/role/crud.tsx | 65 +++++++++++++++++++++++----- web/src/views/system/role/index.vue | 47 ++++++++++++-------- 8 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 web/src/stores/columnPermission.ts create mode 100644 web/src/utils/columnPermission.ts diff --git a/.DS_Store b/.DS_Store index 98abf3e28197668fbb482fc8588a81418fe98252..9c53772040050d34c20ea9ea6485bbd7208e3ca5 100644 GIT binary patch delta 876 zcmZWo&2JJx6o13kvV15Dg-VT0s3gXuwJFAa95hfG(h@(Yg)|U92)jGr+GPfJw_s}w znlxU#NVuvOPo6w*^dIoz)tm9|MQ_G~(KkSomcHc8?>BFL@4eZbnS+IcR1^S6dRI>X z2r8osRD7Mslb!jQh*zxR9Do7?J!^7JHG40lmt(!x(zNv6Ez6zfV?iNvg9;VUU`I&1 z7hN;$5a_^%5eqIO<4}hNjy7uMVGn2Kpd?pCSM2o%asFT5kO6p))hPG3(HzNnHIn0o zn~;UI4amT4$V2A199B{O?nsMqROO%`Qch?;3T^kA>qj85vOE{Nvb6YYF7|XevD96Z zl5In4HdIsWoqSOnreQk^3*QxmxTLXD<8ImG_4!Yq2`ItPL@*qTL?+KhBU9(5&X<)5 zwW96REWXS1HEwb%ZSK;$HOtWRjf!TlTG63ToV>A5%SvcOx<&N|!%!R33wsR|g-1l| z7Nx9TFjuYG)F~d}rLq#RHH(|(Cbtd8;H-4de#l!{ht{*K%CTkBpsid(EZN)CvJp?@ z6z`jrwo1($OLNEJ^-{&MDy&A+dqOJ8X`F3ZRFo&hlfUqPqQz4;4#}kfQ6N4b zVsU9eh{RK1oKa6awJ9QPbQxyxKySe|-n)J1z+3nLpWrimgP-u1xXBc`KxWBR za-Af}2DwAFh(>f`kVk`(F1*}*n;zm2h>b*o7T!0tnYWn9Sq&p3CIITBA-F3erqf9&}=#~9%r2o}f)hGY} delta 194 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGjUEV6q~50D9Q?w2aEYKxH9N5q%!0&=xr=q z&L|C%;b8~@iaIj5Fd)e?o z{JeCK!5a(PSr)T%a0oI3c|ah*4J2Ga)^9BQ&ODi4#u4N`kONpiG!w*uV6n~dJad=< D^`;+M diff --git a/web/.env b/web/.env index 1ba2849..6bc4ce9 100644 --- a/web/.env +++ b/web/.env @@ -1,5 +1,5 @@ # port 端口号 -VITE_PORT = 8085 +VITE_PORT = 8080 # open 运行 npm run dev 时自动打开浏览器 VITE_OPEN = false diff --git a/web/.env.development b/web/.env.development index 2320baa..068a2be 100644 --- a/web/.env.development +++ b/web/.env.development @@ -3,7 +3,7 @@ ENV = 'development' # 本地环境接口地址 #`VITE_API_URL = 'https://demo.dvadmin.com/api' -VITE_API_URL = 'http://127.0.0.1:8000' +VITE_API_URL = 'https://5b28686519.goho.co' # 是否启用按钮权限 VITE_PM_ENABLED = true diff --git a/web/src/stores/columnPermission.ts b/web/src/stores/columnPermission.ts new file mode 100644 index 0000000..2d36737 --- /dev/null +++ b/web/src/stores/columnPermission.ts @@ -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; + }, + }, +}); diff --git a/web/src/utils/columnPermission.ts b/web/src/utils/columnPermission.ts new file mode 100644 index 0000000..6a678fa --- /dev/null +++ b/web/src/utils/columnPermission.ts @@ -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]); +}; diff --git a/web/src/views/system/role/api.ts b/web/src/views/system/role/api.ts index 0cef8f1..2212fbe 100644 --- a/web/src/views/system/role/api.ts +++ b/web/src/views/system/role/api.ts @@ -2,6 +2,14 @@ import { request } from '/@/utils/service'; import { PageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud'; export const apiPrefix = '/api/system/role/'; + +export function GetPermission() { + return request({ + url: apiPrefix + 'field_permission/', + method: 'get', + }); +} + export function GetList(query: PageQuery) { return request({ url: apiPrefix, diff --git a/web/src/views/system/role/crud.tsx b/web/src/views/system/role/crud.tsx index fe4eb3b..e9522af 100644 --- a/web/src/views/system/role/crud.tsx +++ b/web/src/views/system/role/crud.tsx @@ -1,9 +1,11 @@ import { CrudOptions, AddReq, DelReq, EditReq, dict, CrudExpose, compute } from '@fast-crud/fast-crud'; import * as api from './api'; import { dictionary } from '/@/utils/dictionary'; +import { columnPermission } from '../../../utils/columnPermission'; import { successMessage } from '../../../utils/message'; -import { inject } from 'vue'; + interface CreateCrudOptionsTypes { + output: any; crudOptions: CrudOptions; } @@ -12,10 +14,12 @@ export const createCrudOptions = function ({ crudExpose, rolePermission, handleDrawerOpen, + hasPermissions, }: { crudExpose: CrudExpose; rolePermission: any; handleDrawerOpen: Function; + hasPermissions: Function; }): CreateCrudOptionsTypes { const pageRequest = async (query: any) => { return await api.GetList(query); @@ -32,7 +36,6 @@ export const createCrudOptions = function ({ }; //权限判定 - const hasPermissions: any = inject('$hasPermissions'); // @ts-ignore // @ts-ignore @@ -58,7 +61,7 @@ export const createCrudOptions = function ({ remove: { show: hasPermissions('role:Delete'), }, - custom: { + /* custom: { type: 'primary', text: '权限配置', show: hasPermissions('role:Update'), @@ -73,10 +76,10 @@ export const createCrudOptions = function ({ rolePermission.value.editedRoleInfo = row; rolePermission.value.initGet(); }, - }, + }, */ customNew: { type: 'primary', - text: '权限配置新', + text: '权限配置', show: hasPermissions('role:Update'), tooltip: { placement: 'top', @@ -122,6 +125,13 @@ export const createCrudOptions = function ({ column: { minWidth: 120, sortable: 'custom', + show: columnPermission('name', 'is_query'), + }, + addForm: { + show: columnPermission('name', 'is_create'), + }, + editForm: { + show: columnPermission('name', 'is_update'), }, form: { rules: [{ required: true, message: '角色名称必填' }], @@ -135,12 +145,22 @@ export const createCrudOptions = function ({ type: 'text', search: { show: false }, column: { - width: 120, + minWidth: 120, sortable: 'custom', + show: columnPermission('key', 'is_query'), + columnSetDisabled: true, + }, + addForm: { + show: columnPermission('key', 'is_create'), + }, + editForm: { + show: columnPermission('key', 'is_update'), }, form: { rules: [{ required: true, message: '权限标识必填' }], - placeholder: '输入权限标识', + component: { + placeholder: '输入权限标识', + }, }, }, sort: { @@ -148,8 +168,15 @@ export const createCrudOptions = function ({ search: { show: false }, type: 'number', column: { - width: 90, + minWidth: 90, sortable: 'custom', + show: columnPermission('sort', 'is_query'), + }, + addForm: { + show: columnPermission('sort', 'is_create'), + }, + editForm: { + show: columnPermission('sort', 'is_update'), }, form: { rules: [{ required: true, message: '排序必填' }], @@ -175,8 +202,15 @@ export const createCrudOptions = function ({ ], }), column: { - width: 130, + minWidth: 130, sortable: 'custom', + show: columnPermission('admin', 'is_query'), + }, + addForm: { + show: columnPermission('admin', 'is_create'), + }, + editForm: { + show: columnPermission('admin', 'is_update'), }, form: { 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({ data: dictionary('button_status_bool'), @@ -212,8 +253,9 @@ export const createCrudOptions = function ({ type: 'text', search: { show: false }, column: { - width: 170, + minWidth: 170, sortable: 'custom', + show: columnPermission('update_datetime', 'is_query'), }, form: { show: false, @@ -228,7 +270,8 @@ export const createCrudOptions = function ({ search: { show: false }, column: { sortable: 'custom', - width: 170, + minWidth: 170, + show: columnPermission('create_datetime', 'is_query'), }, form: { show: false, diff --git a/web/src/views/system/role/index.vue b/web/src/views/system/role/index.vue index b2d4b35..8e2ef4f 100644 --- a/web/src/views/system/role/index.vue +++ b/web/src/views/system/role/index.vue @@ -8,14 +8,14 @@ - - - +