@10yun/open-sdk
Version:
开放平台接入sdk
116 lines (113 loc) • 3.56 kB
JavaScript
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 文件---');
}