综述
目前菜单鉴权由套餐管理提供,由租户购买套餐->分发授权到角色,个人的权限是角色授权与套餐包授权的交集。
本脚本方案依赖 appList , navList 和 menuList 三个模块生成完整的路由和菜单管理。
appList负责管理功能模块与下属的页面列表navList负责管理由appName组合成的复合菜单menuList负责使用appName和navName组合完整的菜单列表,控制菜单排序
最终生成 禁止手动修改生成产物!
- scripts/package/sql/sys_app.sql // 提供给后端做应用权限管理
- scripts/package/sql/sys_function.sql // 提供给后端做应用权限管理
- src/i18n/pages/route/zh-cn.ts // 路由i18n信息
- src/i18n/pages/route/en.ts // 路由i18n信息
- src/router/modules.ts // 作为前端路由集合
- src/router/menus.ts // 作为前端菜单集合
- src/router/powers.ts // 作为授权树集合
appList
-
描述 应用程序列表
-
数据结构 数组
-
属性说明
interface AppItem {
name: string; // 应用程序名称
zhCn: string; // 应用程序中文名称
en: string; // 应用程序英文名称
functions?: string[]; // 额外功能点列表(可能不存在)
pages?: PageItem[]; // 应用程序页面列表(可能不存在)
}
interface PageItem {
name: string; // 应用程序名称
zhCn: string; // 应用程序中文名称
en: string; // 应用程序英文名称
path: string; // 路由地址
component: () => Promise<typeof import('**/*.vue')>; // 组件地址 路径为src下的有效路径
meta: {
icon: string; // 页面图标
parentName?: PageItem['name']; // 页面父节点名称(可能不存在)
isDev: boolean; // 页面开发中忽略授权信息
};
}
- 示例数据
[
{
name: 'task',
zhCn: '任务中心',
en: 'Task Center',
functions: ['shutdown'],
pages: [
{
name: 'taskPending',
zhCn: '待办任务',
en: 'Pending Task',
path: '/task/pending',
component: '/@/views/flow/task/pending.vue',
meta: {
icon: 'fa fa-flag-checkered',
},
},
{
name: 'taskStarted',
zhCn: '发起任务',
en: 'Started Task',
path: '/task/started',
component: '/@/views/flow/task/started.vue',
meta: {
icon: 'fa fa-plane',
},
},
],
},
];
如上述示例 functions 的值为['shutdown'] 那么它最终生成的功能点为: task_view、task_add、task_edit、task_del、task_shutdown.
{
name: 'meiyun_packageSample',
zhCn: '包装样品',
en: 'Package Samples',
},
如上述示例 appList 的值可以没有 pages,那么它仅仅产生功能点,而不产生对应路由
menuList
-
描述 用于针对 appList 来进行路由组装的菜单列表
-
数据结构 数组
-
属性说明 appName: 必须包含,appList 的节点 name subApps: 可能包含,子应用列表,作用与 appName 相同
-
作用 把所有的 pages 的路由都包含进来 如果 pages 里的路由 meta 包含了 parentName,则不会产生 menu
-
示例数据
[
{
appName: 'meiyun_product',
subApps: [
'meiyun_formula',
'meiyun_formulaMakeupDemo',
'meiyun_formulaComparison',
'meiyun_sampleTesting',
'meiyun_packMaterialProofing',
'meiyun_material',
'meiyun_manufacturer',
'meiyun_supplier',
'meiyun_formulation_review',
'meiyun_packing',
],
},
];
开发过程
start=>start: 开始
cond1=>condition: 是否已存在app(是或否?)
sub1=>operation: 在appList中添加app
cond2=>condition: 是否已存在page(是或否?)
sub2=>operation: 在app中添加page
cond3=>condition: 是否需要添加进navList(是或否?)
sub3=>operation: 在navList中添加app
cond4=>condition: 是否需要添加进menuList(是或否?)
sub4=>operation: 在menuList中添加app或nav
sub5=>operation: 执行scripts/package/build.sh生成相关信息
e=>end: 结束框
start->cond1
cond1(no)->sub1->cond2
cond1(yes)->cond2
cond2(no)->sub2->cond3
cond2(yes)->cond3
cond3(yes)->sub3->cond4
cond3(no)->cond4
cond4(yes)->sub4->sub5
cond4(no)->sub5->e