diff --git a/hx-ai-intelligent/src/directives/index.ts b/hx-ai-intelligent/src/directives/index.ts new file mode 100644 index 0000000..34c8655 --- /dev/null +++ b/hx-ai-intelligent/src/directives/index.ts @@ -0,0 +1,9 @@ +/** + * Configure and register global directives + */ +import type { App } from 'vue'; +import { setupPermissionDirective } from './permission'; + +export function setupGlobDirectives(app: App) { + setupPermissionDirective(app); +} diff --git a/hx-ai-intelligent/src/directives/permission.ts b/hx-ai-intelligent/src/directives/permission.ts new file mode 100644 index 0000000..d606ee7 --- /dev/null +++ b/hx-ai-intelligent/src/directives/permission.ts @@ -0,0 +1,48 @@ +/** + * Global authority directive + * Used for fine-grained control of component permissions + * @Example v-auth="name" + */ +import type { App, Directive, DirectiveBinding } from 'vue'; +import { authorizationService } from '/nerv-lib/saas/store/modules/authorization-service'; + +function isAuth(el: Element, binding: any) { + console.log(el, binding); + + const { checkPermission, checkAllPermission, checkPermissionRouter } = authorizationService(); + const { value, modifiers } = binding; + + if (!value) return; + //操作按钮 + if (modifiers.op) { + if (!checkPermission(value)) { + el.parentNode?.removeChild(el); + } + } + // 全部 + if (modifiers.all) { + if (!checkAllPermission(value)) { + el.parentNode?.removeChild(el); + } + } + // 路由 + if (modifiers.route) { + if (!checkPermissionRouter(value)) { + el.parentNode?.removeChild(el); + } + } +} + +const mounted = (el: Element, binding: DirectiveBinding) => { + isAuth(el, binding); +}; + +const authDirective: Directive = { + mounted, +}; + +export function setupPermissionDirective(app: App) { + app.directive('auth', authDirective); +} + +export default authDirective; diff --git a/hx-ai-intelligent/src/main.ts b/hx-ai-intelligent/src/main.ts index 40f0cc1..0ab8d5b 100644 --- a/hx-ai-intelligent/src/main.ts +++ b/hx-ai-intelligent/src/main.ts @@ -5,8 +5,15 @@ import { apiModule } from '/@/api'; import { appConfig } from '/@/config'; import './theme/global.less'; import { LeftOutlined } from '@ant-design/icons-vue'; +import { setupGlobDirectives } from '/@/directives'; + const app = createApp(App); app.component('LeftOutlined', LeftOutlined); + +// Register global directive +// 注册全局指令 +setupGlobDirectives(app); + saasInit({ app, apiModule, diff --git a/hx-ai-intelligent/src/view/organizationManage/departmentManage/index.vue b/hx-ai-intelligent/src/view/organizationManage/departmentManage/index.vue index 03e2e75..f6f2ec2 100644 --- a/hx-ai-intelligent/src/view/organizationManage/departmentManage/index.vue +++ b/hx-ai-intelligent/src/view/organizationManage/departmentManage/index.vue @@ -79,7 +79,9 @@ - 新增角色 + + 新增角色 + 新增子角色 删除