@qynpm/admin-framework
v1.0.1
Published
起印后台运行时基础能力包。
Readme
@qynpm/admin-framework
起印后台运行时基础能力包。
第一阶段仅提供纯逻辑能力:
- 权限判断:
hasRole、hasPermission、hasAnyPermission、hasAllPermissions - 动作权限过滤:
ActionPermission、filterPermittedActions - 动作协议与解析:
QyAction、ResolvedQyAction、resolveVisibleActions、isQyActionDisabled、isQyActionLoading、isQyActionDanger、getQyActionButtonClass - 权限指令工厂:
createPermissionDirectives - 路由守卫工厂:
createPermissionGuard - 旧菜单协议适配:
adaptLegacyRoutes - 导航模型:
buildNavigationState、resolveAdminActivePath、collectAdminDefaultOpenKeys、isAdminNavItemNavigable - 路由快照与标签模型:
resolveAdminTabKey、createAdminTabFromRoute、isAdminTabEnabled - 标签控制器:
createAdminTabsController,包含关闭守卫查询、刷新版本、KeepAlive 派生、恢复协议和可选持久化 adapter;clear用于显式清空标签、运行时注册表和持久化状态 - Shell 宿主协议:
AdminShellModel、AdminShellHostAdapter;AdminShellModel.brand由项目注入品牌,可选的consoleEntry覆盖控制台入口,显式传入null可隐藏入口,AdminSystemEntry.active可选表示当前系统
包内不包含业务页面、后台布局、TagsView、请求实例或项目私有 store。消费方需要通过配置注入 token、用户信息、权限角色、路由实例和组件解析器。
导航项中的 permissions / roles 是第一阶段预留元数据,buildNavigationState 只负责 hidden 过滤和 active/open 状态计算,不自动做权限过滤。
导航、路由快照、Tabs 控制器和 Shell 宿主协议均为纯 TypeScript;Tabs 控制器不读取 Vue Router、Pinia 或浏览器存储。消费方负责把 Router 转换为 AdminRouteSnapshot,并通过 AdminTabsStorageAdapter 注入持久化实现。
v-hasPermi / v-hasRole 指令值约定为非空字符串数组,例如 v-hasPermi="['system:user:add']"。
权限判断 API 的参数顺序统一为“要求在前、当前用户权限在后”。权限字符串会先 trim;空权限、空数组和纯空格不会通过判断。*:*:* 可以满足任意非空权限要求。动作未声明 permission 时允许显示,数组权限默认采用 any,permissionMode: 'all' 时要求全部满足。
@qynpm/admin-framework/actions 是动作协议的公共子入口,QyAction<TContext> 是动作协议的唯一权威定义,包含 key、label、type、permission、permissionMode、hidden、disabled、loading、danger、order 和 onClick。resolveVisibleActions 按权限、hidden、order、状态的顺序解析,并保持相同 order 的输入顺序;解析过程不修改输入数组或动作对象。动作协议与解析器是纯 TypeScript,不依赖 Vue、DOM、Element Plus、Pinia、Vue Router、API client 或业务项目私有路径。
QyTable、QyListActionBar、QyRowActions 应共用这套动作协议。confirm、more、popover、icon 尚未进入当前协议,完整 QyTable 仍由下一阶段迁移。
本地 file: 依赖消费包入口时,需要先执行 pnpm --filter @qynpm/admin-framework build 生成 dist;消费方刷新 file 快照时使用 pnpm install --frozen-lockfile。
