From 2aaa2b50e5bf92c25bad72ed94bc36e24410c2c8 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Mon, 13 Jul 2026 11:58:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20=E6=9D=83=E9=99=90=E7=A0=81?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E5=90=8E=E7=AB=AF=20kebab/trade/=E9=80=9A?= =?UTF-8?q?=E9=81=93=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit perm-codes 与页面引用同步:交易域 Trade、IAM 缩短、通道 App/Isv 统一码、配置类 MANAGE 等。 --- apps/daxpay-admin/src/api/core/menu.api.ts | 2 +- .../daxpay-admin/src/api/iam/perm/menu.api.ts | 2 +- apps/daxpay-admin/src/constants/perm-codes.ts | 217 +++++++----------- .../workspace/widgets/quick-entry/catalog.ts | 12 +- .../views/iam/perm/menu/MenuChildrenPanel.vue | 12 +- .../src/views/iam/perm/menu/MenuList.vue | 12 +- .../src/views/iam/user/UserList.vue | 24 +- .../alipay/manage/app/AlipayIsvAppCard.vue | 4 +- .../alipay/manage/app/AlipayIsvAppManage.vue | 2 +- .../app/tabs/AlipayIsvAppAuthConfig.vue | 2 +- .../manage/app/tabs/AlipayIsvAppBasicInfo.vue | 2 +- .../manage/app/tabs/AlipayIsvAppKeyConfig.vue | 2 +- .../manage/mch/app/AlipayMchAppCard.vue | 4 +- .../manage/mch/app/AlipayMchAppManage.vue | 2 +- .../mch/app/tabs/AlipayMchAppAuthConfig.vue | 2 +- .../mch/app/tabs/AlipayMchAppBasicInfo.vue | 2 +- .../mch/app/tabs/AlipayMchAppKeyConfig.vue | 2 +- .../dougong/config/DougongIsvConfigEdit.vue | 2 +- .../douyin/manage/app/DouyinMchAppCard.vue | 4 +- .../douyin/manage/app/DouyinMchAppManage.vue | 2 +- .../app/tabs/DouyinMchAppAuthConfig.vue | 2 +- .../manage/app/tabs/DouyinMchAppBasicInfo.vue | 2 +- .../fuyou/config/FuyouIsvConfigEdit.vue | 2 +- .../channel/hkrt/config/HkrtIsvConfigEdit.vue | 2 +- .../lakala/config/LakalaIsvConfigEdit.vue | 2 +- .../leshua/config/LeshuaIsvConfigEdit.vue | 2 +- .../vbill/config/VbillIsvConfigEdit.vue | 2 +- .../wechat/config/WechatIsvConfigEdit.vue | 2 +- .../wechat/manage/app/WechatIsvAppCard.vue | 4 +- .../wechat/manage/app/WechatIsvAppManage.vue | 2 +- .../app/tabs/WechatIsvAppAuthConfig.vue | 2 +- .../manage/app/tabs/WechatIsvAppBasicInfo.vue | 2 +- .../manage/mch/app/WechatMchAppCard.vue | 4 +- .../manage/mch/app/WechatMchAppManage.vue | 2 +- .../mch/app/tabs/WechatMchAppAuthConfig.vue | 2 +- .../mch/app/tabs/WechatMchAppBasicInfo.vue | 2 +- .../mch/isv-app/WechatIsvMchAppCard.vue | 4 +- .../mch/isv-app/WechatIsvMchAppManage.vue | 2 +- .../tabs/WechatIsvMchAppAuthConfig.vue | 2 +- .../isv-app/tabs/WechatIsvMchAppBasicInfo.vue | 2 +- .../merchant/app/MchAppNotifyConfig.vue | 4 +- .../credential/MerchantCredentialConfig.vue | 4 +- .../views/payment/order/NormalOrderList.vue | 4 +- .../src/views/payment/order/PayTradeList.vue | 4 +- .../views/payment/order/RefundOrderList.vue | 2 +- .../system/monitor/file/PlatformFileList.vue | 6 +- .../system/monitor/online/OnlineUserList.vue | 6 +- 47 files changed, 165 insertions(+), 224 deletions(-) diff --git a/apps/daxpay-admin/src/api/core/menu.api.ts b/apps/daxpay-admin/src/api/core/menu.api.ts index a0e8ffa21..dbd28f04c 100644 --- a/apps/daxpay-admin/src/api/core/menu.api.ts +++ b/apps/daxpay-admin/src/api/core/menu.api.ts @@ -93,7 +93,7 @@ function filterButtonMenus(menus: PermMenuResult[]): PermMenuResult[] { /** * 过滤仅作权限锚点、无路由信息的菜单节点 - * 中文:如 payment:alipay:isv / payment:wechat:isv 仅用于 @PermCode menuCode 挂载,无 path/component + * 中文:如 payment:isv / payment:isv 仅用于 @PermCode menuCode 挂载,无 path/component */ function filterPermissionAnchorMenus(menus: PermMenuResult[]): PermMenuResult[] { return menus diff --git a/apps/daxpay-admin/src/api/iam/perm/menu.api.ts b/apps/daxpay-admin/src/api/iam/perm/menu.api.ts index 1b298fbd0..f266c4e1d 100644 --- a/apps/daxpay-admin/src/api/iam/perm/menu.api.ts +++ b/apps/daxpay-admin/src/api/iam/perm/menu.api.ts @@ -59,7 +59,7 @@ function filterButtonMenus(menus: PermMenu[]): PermMenu[] { /** * 过滤仅作权限锚点、无路由信息的菜单节点 - * 中文:如 payment:alipay:isv / payment:wechat:isv 仅用于 @PermCode menuCode 挂载,无 path/component + * 中文:如 payment:isv / payment:isv 仅用于 @PermCode menuCode 挂载,无 path/component */ function filterPermissionAnchorMenus(menus: PermMenu[]): PermMenu[] { return menus diff --git a/apps/daxpay-admin/src/constants/perm-codes.ts b/apps/daxpay-admin/src/constants/perm-codes.ts index 42f1a8a7b..c5fba01df 100644 --- a/apps/daxpay-admin/src/constants/perm-codes.ts +++ b/apps/daxpay-admin/src/constants/perm-codes.ts @@ -5,239 +5,187 @@ * * | 要点 | 说明 | * |------|------| - * | 与后端对齐 | 值必须等于 @PermCode 扫描出的完整码 `menuCode:code` | - * | 后端常量 | `daxpay-platform-core` → `cn.daxpay.open.platform.core.code.PermCodes`(嵌套 interface:`MENU` + `Action`,非完整码) | - * | 命名约定 | 全部使用下划线(`security_config` 非 `securityConfig`),键名用业务语义 | - * | 粒度约定 | 标准为 `VIEW` + `MANAGE`(`MANAGE` 含增删改);仅查看的只保留 `VIEW` | - * | 特殊操作 | `PUBLISH`/`KICKOUT`/`RESET_PASSWORD`/`ASSIGN_ROLE`/`STATUS`/`SIGN`/`PAY`/`CREDENTIAL_CONFIG_UPDATE` 独立保留 | - * | menu_code | 菜单注册(iam_perm_menu)用,**不**写入本文件;后端 `PermCodes.*.MENU` 与之对应 | - * | 顶级域 | merchant / channel / payment / develop / device / iam / system 七域 | - * | 使用方式 | 模板:`v-if="hasPermission(PermCodes....)"` / `hasAnyPermission([...])`(`usePermission`);脚本:同上 | - * | 已移除 | v-access 指令已删除,仅用 `usePermission` | + * | 与后端对齐 | 值 = `menuCode:action`;后端 `platform.core.code.PermCodes`(MENU + Action,非完整码) | + * | 命名 | 码字符串 kebab-case(`a-z0-9:-`);TS 键 SCREAMING_SNAKE | + * | 粒度 | 标准 `VIEW` + `MANAGE`(MANAGE 含增删改与配置保存);无全局 update | + * | 特殊操作 | PUBLISH / KICKOUT / RESET_PASSWORD / ASSIGN_ROLE / STATUS / SIGN / RESEND / TEST | + * | 顶级域 | merchant / channel / payment / **trade** / develop / device / iam / system | + * | 通道相关 | 商户 `channel:merchant`;应用 `channel:app`;ISV `payment:isv`(均不按通道拆) | + * | 使用 | `hasPermission(PermCodes....)` / `hasAnyPermission([...])` | */ export const PermCodes = { /** IAM 身份与访问 */ Iam: { - PermMenu: { - VIEW: 'iam:perm:menu:view', - MANAGE: 'iam:perm:menu:manage', + Menu: { + VIEW: 'iam:menu:view', + MANAGE: 'iam:menu:manage', }, Role: { VIEW: 'iam:role:view', MANAGE: 'iam:role:manage', }, - UserManager: { - VIEW: 'iam:user:manager:view', - MANAGE: 'iam:user:manager:manage', - RESET_PASSWORD: 'iam:user:manager:reset_password', - ASSIGN_ROLE: 'iam:user:manager:assign_role', - STATUS: 'iam:user:manager:status', + User: { + VIEW: 'iam:user:view', + MANAGE: 'iam:user:manage', + RESET_PASSWORD: 'iam:user:reset-password', + ASSIGN_ROLE: 'iam:user:assign-role', + STATUS: 'iam:user:status', }, - OnlineUser: { - VIEW: 'iam:online:user:view', - KICKOUT: 'iam:online:user:kickout', + Online: { + VIEW: 'iam:online:view', + KICKOUT: 'iam:online:kickout', }, Social: { - VIEW: 'iam:social:login-config:view', - MANAGE: 'iam:social:login-config:manage', + VIEW: 'iam:social:view', + MANAGE: 'iam:social:manage', }, }, - /** 商户管理(独立顶级域) */ + /** 商户管理 */ Merchant: { - /** 商户主体 menuCode=merchant:info */ Info: { VIEW: 'merchant:info:view', MANAGE: 'merchant:info:manage', }, - /** 对接配置 menuCode=merchant:credential */ Credential: { VIEW: 'merchant:credential:view', - CREDENTIAL_CONFIG_UPDATE: 'merchant:credential:credential_config_update', + MANAGE: 'merchant:credential:manage', }, - /** 通知配置 menuCode=merchant:notify_config */ NotifyConfig: { - VIEW: 'merchant:notify_config:view', - UPDATE: 'merchant:notify_config:notify_config_update', + VIEW: 'merchant:notify-config:view', + MANAGE: 'merchant:notify-config:manage', }, - /** 商户应用 menuCode=merchant:app */ App: { VIEW: 'merchant:app:view', MANAGE: 'merchant:app:manage', }, - /** 通道路由 menuCode=merchant:app:route */ AppRoute: { VIEW: 'merchant:app:route:view', MANAGE: 'merchant:app:route:manage', }, - /** 码牌和聚合支付配置 menuCode=merchant:gateway-aggregate */ GatewayAggregate: { VIEW: 'merchant:gateway-aggregate:view', - MANAGE: 'merchant:gateway-aggregate:update', + MANAGE: 'merchant:gateway-aggregate:manage', }, - /** 收银台配置 menuCode=merchant:gateway-cashier */ GatewayCashier: { VIEW: 'merchant:gateway-cashier:view', - MANAGE: 'merchant:gateway-cashier:update', + MANAGE: 'merchant:gateway-cashier:manage', }, - /** 门店 menuCode=merchant:store */ Store: { VIEW: 'merchant:store:view', MANAGE: 'merchant:store:manage', }, - /** 商户用户 menuCode=merchant:user(预留,待 Controller 实现) */ + /** 预留 */ User: { VIEW: 'merchant:user:view', MANAGE: 'merchant:user:manage', }, - /** 微信域名验证文件 menuCode=merchant:wx_verify */ WxDomainVerify: { - VIEW: 'merchant:wx_verify:view', - MANAGE: 'merchant:wx_verify:manage', + VIEW: 'merchant:wx-verify:view', + MANAGE: 'merchant:wx-verify:manage', }, }, - /** 渠道管理(独立顶级域) */ + /** 渠道(通道商户 / 通道应用均统一码,不按通道拆) */ Channel: { /** 通道商户 menuCode=channel:merchant */ Merchant: { VIEW: 'channel:merchant:view', MANAGE: 'channel:merchant:manage', }, - /** 支付宝直连应用 menuCode=channel:alipay:app */ - AlipayApp: { - VIEW: 'channel:alipay:app:view', - MANAGE: 'channel:alipay:app:manage', - }, - /** 微信直连应用 menuCode=channel:wechat:app */ - WechatApp: { - VIEW: 'channel:wechat:app:view', - MANAGE: 'channel:wechat:app:manage', - }, - /** 抖音直连应用 menuCode=channel:douyin:app */ - DouyinApp: { - VIEW: 'channel:douyin:app:view', - MANAGE: 'channel:douyin:app:manage', + /** 通道应用(直连 + 子商户应用等)menuCode=channel:app */ + App: { + VIEW: 'channel:app:view', + MANAGE: 'channel:app:manage', }, }, - /** 支付核心(瘦身后:主数据 + 配置 + 服务商) */ + /** 支付平台(主数据 + 配置 + ISV) */ Payment: { - /** 支付宝服务商 menuCode=payment:alipay:isv */ - AlipayIsv: { - VIEW: 'payment:alipay:isv:view', - MANAGE: 'payment:alipay:isv:manage', + /** 服务商 ISV 配置(全通道共用)menuCode=payment:isv */ + Isv: { + VIEW: 'payment:isv:view', + MANAGE: 'payment:isv:manage', }, - /** 微信服务商 menuCode=payment:wechat:isv */ - WechatIsv: { - VIEW: 'payment:wechat:isv:view', - MANAGE: 'payment:wechat:isv:manage', - }, - /** 拉卡拉服务商 menuCode=payment:lakala:isv */ - Lakala: { - VIEW: 'payment:lakala:isv:view', - MANAGE: 'payment:lakala:isv:manage', - }, - /** 海科融通服务商 menuCode=payment:hkrt:isv */ - Hkrt: { - VIEW: 'payment:hkrt:isv:view', - MANAGE: 'payment:hkrt:isv:manage', - }, - /** 斗拱服务商 menuCode=payment:dougong:isv */ - Dougong: { - VIEW: 'payment:dougong:isv:view', - MANAGE: 'payment:dougong:isv:manage', - }, - /** 随行付服务商 menuCode=payment:vbill:isv */ - Vbill: { - VIEW: 'payment:vbill:isv:view', - MANAGE: 'payment:vbill:isv:manage', - }, - /** 富友服务商 menuCode=payment:fuyou:isv */ - Fuyou: { - VIEW: 'payment:fuyou:isv:view', - MANAGE: 'payment:fuyou:isv:manage', - }, - /** 支付主数据 menuCode=payment:platform:* */ Platform: { Product: { VIEW: 'payment:platform:product:view', MANAGE: 'payment:platform:product:manage', }, + /** 支付方式 */ + PayMethod: { + VIEW: 'payment:platform:pay-method:view', + MANAGE: 'payment:platform:pay-method:manage', + }, + /** 支付渠道 */ Provider: { VIEW: 'payment:platform:provider:view', MANAGE: 'payment:platform:provider:manage', }, PayChannel: { - VIEW: 'payment:platform:pay_channel:view', + VIEW: 'payment:platform:pay-channel:view', }, Capability: { VIEW: 'payment:platform:capability:view', }, }, - /** 支付产品配置 menuCode=payment:config:product_config */ ProductConfig: { - VIEW: 'payment:config:product_config:view', - MANAGE: 'payment:config:product_config:manage', + VIEW: 'payment:config:product-config:view', + MANAGE: 'payment:config:product-config:manage', }, - /** 微信域名验证文件 menuCode=payment:config:wx_verify */ Config: { WxDomainVerify: { - VIEW: 'payment:config:wx_verify:view', - MANAGE: 'payment:config:wx_verify:manage', + VIEW: 'payment:config:wx-verify:view', + MANAGE: 'payment:config:wx-verify:manage', }, }, - /** 普通支付业务订单 menuCode=payment:order */ - Order: { - VIEW: 'payment:order:view', - MANAGE: 'payment:order:manage', - }, - /** 退款订单 menuCode=payment:refund */ - Refund: { - VIEW: 'payment:refund:view', - MANAGE: 'payment:refund:manage', - }, - /** 资金交易凭证 menuCode=payment:trade */ - Trade: { - VIEW: 'payment:trade:view', - MANAGE: 'payment:trade:manage', - }, }, - /** 开发调试(独立顶级域) */ + /** 交易单据 */ + Trade: { + Order: { + VIEW: 'trade:order:view', + MANAGE: 'trade:order:manage', + }, + Refund: { + VIEW: 'trade:refund:view', + MANAGE: 'trade:refund:manage', + }, + Fund: { + VIEW: 'trade:fund:view', + MANAGE: 'trade:fund:manage', + }, + GatewayOrder: { + VIEW: 'trade:gateway-order:view', + MANAGE: 'trade:gateway-order:manage', + }, + }, + Develop: { - /** 支付调试 menuCode=develop:trade(真实支付走 unipay, 无 develop:trade:pay 后门) */ Trade: { VIEW: 'develop:trade:view', SIGN: 'develop:trade:sign', }, - /** 签名调试 menuCode=develop:sign */ Sign: { VIEW: 'develop:sign:view', }, - /** 认证调试 menuCode=develop:auth */ Auth: { VIEW: 'develop:auth:view', }, }, - /** 设备管理(独立命名空间;开源仅码牌,硬件对接归商业版) */ Device: { - /** 码牌 menuCode=device:qrcode */ QrCode: { VIEW: 'device:qrcode:view', MANAGE: 'device:qrcode:manage', }, }, - /** 系统域 */ System: { - /** 字典(含字典项)menuCode=system:dict */ Dict: { VIEW: 'system:dict:view', MANAGE: 'system:dict:manage', }, - /** 日志 menuCode=system:log:* */ Log: { Login: { VIEW: 'system:log:login:view', @@ -248,39 +196,32 @@ export const PermCodes = { MANAGE: 'system:log:operate:manage', }, }, - /** 通知中心 menuCode=system:notify → 公告通知 menuCode=system:notify:notice */ Notify: { VIEW: 'system:notify:notice:view', MANAGE: 'system:notify:notice:manage', PUBLISH: 'system:notify:notice:publish', }, - /** 微信消息通知 menuCode=system:notify:wechat-config(配置 + 发送记录 Tabs) */ WechatNotify: { MANAGE: 'system:notify:wechat-config:manage', VIEW: 'system:notify:wechat-config:view', RESEND: 'system:notify:wechat-config:resend', TEST: 'system:notify:wechat-config:test', }, - /** 存储文件 menuCode=system:file:platform */ - FilePlatform: { - VIEW: 'system:file:platform:view', + File: { + VIEW: 'system:file:view', }, - /** 平台配置 menuCode=system:platform_config */ PlatformConfig: { - VIEW: 'system:platform_config:view', - MANAGE: 'system:platform_config:manage', + VIEW: 'system:platform-config:view', + MANAGE: 'system:platform-config:manage', }, - /** OSS 配置 menuCode=system:oss_config */ OssConfig: { - VIEW: 'system:oss_config:view', - MANAGE: 'system:oss_config:manage', + VIEW: 'system:oss-config:view', + MANAGE: 'system:oss-config:manage', }, - /** 安全配置 menuCode=system:security_config */ SecurityConfig: { - VIEW: 'system:security_config:view', - MANAGE: 'system:security_config:manage', + VIEW: 'system:security-config:view', + MANAGE: 'system:security-config:manage', }, - /** 用户协议 menuCode=system:protocol */ Protocol: { VIEW: 'system:protocol:view', MANAGE: 'system:protocol:manage', diff --git a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts index 981dcb5a5..7e29c9fb1 100644 --- a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts +++ b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts @@ -76,7 +76,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:users-round', titleKey: 'dashboard.workspace.quickEntry.user', color: 'bg-rose-500', - perms: [PermCodes.Iam.UserManager.VIEW], + perms: [PermCodes.Iam.User.VIEW], defaultVisible: true, defaultOrder: 5, }, @@ -117,7 +117,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:receipt', titleKey: 'dashboard.workspace.quickEntry.payOrder', color: 'bg-blue-600', - perms: [PermCodes.Payment.Order.VIEW], + perms: [PermCodes.Trade.Order.VIEW], defaultVisible: false, defaultOrder: 9, }, @@ -127,7 +127,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:rotate-ccw', titleKey: 'dashboard.workspace.quickEntry.refundOrder', color: 'bg-orange-500', - perms: [PermCodes.Payment.Refund.VIEW], + perms: [PermCodes.Trade.Refund.VIEW], defaultVisible: false, defaultOrder: 10, }, @@ -137,7 +137,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:arrow-left-right', titleKey: 'dashboard.workspace.quickEntry.payTrade', color: 'bg-teal-500', - perms: [PermCodes.Payment.Trade.VIEW], + perms: [PermCodes.Trade.Fund.VIEW], defaultVisible: false, defaultOrder: 11, }, @@ -157,7 +157,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:panel-top', titleKey: 'dashboard.workspace.quickEntry.menu', color: 'bg-sky-500', - perms: [PermCodes.Iam.PermMenu.VIEW], + perms: [PermCodes.Iam.Menu.VIEW], defaultVisible: false, defaultOrder: 13, }, @@ -207,7 +207,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ icon: 'lucide:users', titleKey: 'dashboard.workspace.quickEntry.onlineUser', color: 'bg-green-500', - perms: [PermCodes.Iam.OnlineUser.VIEW], + perms: [PermCodes.Iam.Online.VIEW], defaultVisible: false, defaultOrder: 18, }, diff --git a/apps/daxpay-admin/src/views/iam/perm/menu/MenuChildrenPanel.vue b/apps/daxpay-admin/src/views/iam/perm/menu/MenuChildrenPanel.vue index 3853e606d..44ad398b4 100644 --- a/apps/daxpay-admin/src/views/iam/perm/menu/MenuChildrenPanel.vue +++ b/apps/daxpay-admin/src/views/iam/perm/menu/MenuChildrenPanel.vue @@ -241,7 +241,7 @@ style="width: 280px" /> @@ -250,7 +250,7 @@ diff --git a/apps/daxpay-admin/src/views/iam/user/UserList.vue b/apps/daxpay-admin/src/views/iam/user/UserList.vue index 212e0d96b..4950bcaee 100644 --- a/apps/daxpay-admin/src/views/iam/user/UserList.vue +++ b/apps/daxpay-admin/src/views/iam/user/UserList.vue @@ -201,32 +201,32 @@ { key: 'assignRole', label: $t('iam.user.action.assignRole'), - disabled: !hasPermission(PermCodes.Iam.UserManager.ASSIGN_ROLE) || !isAdminClient.value, + disabled: !hasPermission(PermCodes.Iam.User.ASSIGN_ROLE) || !isAdminClient.value, }, // 重置密码 { key: 'resetPassword', label: $t('iam.user.action.resetPassword'), - disabled: !hasPermission(PermCodes.Iam.UserManager.RESET_PASSWORD), + disabled: !hasPermission(PermCodes.Iam.User.RESET_PASSWORD), }, // 三方绑定 { key: 'socialBind', label: $t('iam.user.action.socialBind'), - disabled: !hasPermission(PermCodes.Iam.UserManager.VIEW), + disabled: !hasPermission(PermCodes.Iam.User.VIEW), }, { type: 'divider' }, // 封禁 { key: 'ban', label: $t('iam.user.action.ban'), - disabled: !hasPermission(PermCodes.Iam.UserManager.STATUS) || row.status === 'ban', + disabled: !hasPermission(PermCodes.Iam.User.STATUS) || row.status === 'ban', }, // 解锁(后端 unlock 无条件置为 NORMAL,对 lock/ban 均生效) { key: 'unlock', label: $t('iam.user.action.unlock'), - disabled: !hasPermission(PermCodes.Iam.UserManager.STATUS) || row.status === 'normal', + disabled: !hasPermission(PermCodes.Iam.User.STATUS) || row.status === 'normal', }, ], onClick: ({ key }: { key: string }) => { @@ -272,19 +272,19 @@ { key: 'ban', label: $t('iam.user.action.batchBan'), - disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.UserManager.STATUS), + disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.User.STATUS), }, // 批量解锁 { key: 'unlock', label: $t('iam.user.action.batchUnlock'), - disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.UserManager.STATUS), + disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.User.STATUS), }, // 批量重置密码 { key: 'resetPassword', label: $t('iam.user.action.batchResetPassword'), - disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.UserManager.RESET_PASSWORD), + disabled: selectedRows.value.length === 0 || !hasPermission(PermCodes.Iam.User.RESET_PASSWORD), }, ], onClick: ({ key }: { key: string }) => { @@ -438,14 +438,14 @@ {{ $t('common.add') }} @@ -509,12 +509,12 @@ - {{ + {{ $t('common.view') }}