UNPKG

@10yun/open-sdk

Version:

开放平台接入sdk

116 lines (113 loc) 3.56 kB
import fs from 'node:fs'; import { parseRouteItem } from './router.js'; var nameOnlyArr = {}; // 解析数据转菜单 function parseDataToMenu(appFlag, oldData) { let newData = []; for (let index1 in oldData) { let item1 = oldData[index1]; item1 = parseRouteItem(item1); if (nameOnlyArr[item1.name]) { item1.name = item1.name + '_' + index1; } if (item1.isMenu == false && item1.isRbac == false) { continue; } let item_new = { title: item1.title || item1?.meta?.title, path: item1.path || '', id: appFlag + '@' + item1.name || '', name: item1.name || '', apiPermissions: item1.apiPermissions || [], isPage: item1.path ? true : false, isMenu: item1.isMenu || false, isRbac: item1.isRbac || false, isWindw: item1.isWindw || false, isAlone: item1.isAlone || false, children: [] }; if (item1.isMenu) { item_new['checked'] = false; item_new['menuName'] = item_new.title; item_new['parentId'] = item1.parentId || ''; item_new['children'] = []; } // 判断是否有子集 if (item1.children) { let tempChildren = item1.children; let childrenIdNum = 0; /** * 处理 - 子菜单 */ let newChildren = []; tempChildren.forEach((item2, index2) => { if (item2.isMenu) { item2['parentId'] = item1.name; newChildren.push(item2); } }); /** * 处理 - 子操作项 */ let newOption = []; tempChildren.forEach((item2, index2) => { item2 = parseRouteItem(item2); if (nameOnlyArr[item2.name]) { item2.name = item2.name + '_' + index2; } if (item2.isRbac) { item2.id = appFlag + '@' + (item2.name || item1.name + '_' + ++childrenIdNum); // item2.id = appFlag + '@' + (item2.name || item1.name); item2.optionsName = item2.title || item2.meta.title; item2.checked = false; newOption.push(item2); } }); // 如果不存在的子操作 if (newOption.length > 0) { item_new.menuOptionsList = newOption; } else { // item_new.menuOptionsList = [ // { // title: '预览', // optionsName: '预览', // id: item1.name || '', // name: item1.name || '', // checked: false, // isPage: item1.path ? true : false // } // ]; } // // item.children = parseDataToMenu(appFlag, [...tempChildren]); if (newChildren.length > 0) { item_new = Object.assign({}, item_new, { children: parseDataToMenu(appFlag, [...newChildren]) }); } } // item.treeInfo = treeInfo; newData.push(item_new); } return newData; } /** * 获取 rbac权限配置 * @param {*} menuArr 菜单组 * @param {*} rbac_dir rbac生成的目录 * @param {*} rbac_sett rbac配置 */ export function buildRbac(menuArr, rbac_dir, rbac_sett) { /** * RBAC_BASE_SIGN @ 前面的标识 */ const { RBAC_BASE_SIGN } = rbac_sett; const appFlag = RBAC_BASE_SIGN || ''; // 执行脚本的项目路径 let rbacMenuData = parseDataToMenu(appFlag, menuArr); let rbacFile = rbac_dir + '/public/rbac.json'; let rbacContent = JSON.stringify(rbacMenuData, null, 2); fs.writeFileSync(rbacFile, rbacContent, 'utf8'); // fs.writeFile(rbacFile, rbacContent, { encoding: 'utf8' }, (err) => {}); console.log('--已经生成 rbac 文件---'); }