gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
119 lines (91 loc) • 2.93 kB
JavaScript
;
const fileHelper = require('./../fileHepler');
const basePath = require('./../path');
const clog = require('./../clog');
const routerDirectory = basePath.routerDirectory;
const logDir = basePath.logDir;
const viewsBase = basePath.viewsBase;
const template = require('art-template');
template.defaults.imports.raw = JSON.stringify;
const gitIgnore = require('./../lib/gitignore');
const utils = require('./../lib/utils');
let {
beautifyFile,
getArgv,
getApiData,
getPagesData,
dateToTime,
getLogs
} = utils;
/**
* @description 默认meta信息
* @type {{roles: [string], icon: string, iconSize: number}}
*/
const defaultMeta = {
icon: 'el-icon-document',
redirect: 'noRedirect'
};
let schemasArray = [];
let schemas = fileHelper.getDirFiles(basePath.schemasDirectory, ['js']);
Object.keys(schemas).map(key => {
schemasArray.push(require(basePath.schemasDirectory + '/' + schemas[key]['fullName']));
});
const init = (schemas) => {
let router = []; //生成APIS
let model = [];
let routerPages = [];
//判断是否单独生成页面
if (getArgv().length > 0) {
schemas = schemas.filter(item => {
if (item.name === getArgv()[0]) {
return item
}
})
}
//模块不存在
if (schemas.length === 0) {
clog(`【${getArgv()}】模块不存在`, 'red');
return;
}
//系统模块不做生成路由处理
schemas.map(item=>{
model.push(item.name);
if(item.name !== 'system') {
//根无meta信息,使用默认meta
if (!item.meta) item = {...item, meta: defaultMeta};
//过滤没有配置router的页面
let pages = getPagesData(item).filter((it) => {
return it.router !== undefined;
});
//保存有设置router的页面
if(pages.length > 0) router.push({...getApiData(item), sort: (item.sort || 10),meta: item.meta, pages})
}
});
//处理生成逻辑
let fileNames = [];
router.map((item, index) => {
//判断文件是否存在
if(!fileHelper.existFileSync(`${routerDirectory}/modules`)){
fileHelper.mkdirSync(routerDirectory, 'modules');
}
let tempPath = `${routerDirectory}/modules/${item.fileName}`;
let html = template(basePath.buildTemplateDirectory + '/coder/router.txt', {
items: item,
time: dateToTime(Math.floor(new Date().getTime() / 1000)),
filename: `${item.fileName}`,
viewsBase
});
routerPages.push(fileHelper.writeFile(tempPath, beautifyFile(html)));
fileNames.push(item.fileName);
});
routerPages.push(gitIgnore(fileNames, routerDirectory + '/modules'));
Promise.all(routerPages)
.then(res=>{
clog(`生成模块:【${model.join('】,【')}】`, 'blueBG');
clog(' ROUTER 创建完成!', 'green');
fileHelper.writeFileSync(logDir + '/router', getLogs('router', `【${model.join('】,【')}】`));
})
.catch(
)
};
init(schemasArray);