gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
172 lines (136 loc) • 4.29 kB
JavaScript
;
const fileHelper = require('./../fileHepler');
const basePath = require('./../path');
const clog = require('./../clog');
const viewsDirectory = basePath.viewsDirectory;
const template = require('./../lib/template');
const utils = require('./../lib/utils');
const logDir = basePath.logDir;
const gitIgnore = require('./../lib/gitignore');
let {
beautifyFile,
getArgv,
getPagesData,
getLogs,
} = utils;
let schemasArray = [];
let schemas = fileHelper.getDirFiles(basePath.schemasDirectory, ['js']);
Object.keys(schemas).map(key => {
schemasArray.push(require(basePath.schemasDirectory + '/' + schemas[key]['fullName']));
});
/**
* @description 替换{!{}!} => {{}}
* @param content
* @returns {*}
*/
const replaceContent = (content) => {
content = content.replace(/{!{/g, '{{');
return content.replace(/}!}/, '}}');
};
/**
* @description 获取字符串
* @param file
* @param data
* @param fileType
* @returns {*}
*/
const getContent = (data, fileType = 'css', file = 'pages_list')=>{
let modelsFn = 'css_beautify';
if (fileType === 'html') modelsFn = 'html_beautify';
if (fileType === 'js') modelsFn = 'js_beautify';
return replaceContent(beautifyFile(
template(
`${basePath.buildTemplateDirectory}/coder/${file}.txt`,
Object.assign(data, {fileType})),
modelsFn
));
};
const init = (schemas) => {
let pages = []; //生成APIS
let model = [];
let promisePages = [];
//判断是否单独生成页面
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 => {
pages = pages.concat(getPagesData(item));
model.push(item.name);
});
let notAllowPath = []; //不可创建文件
let allowPagePath = []; //不可创建文件
let allowPage = []; //可创建文件
pages.map((item)=>{
//console.log(item.router.component);
if(!item['notPages'] && !item.router.component) {
let pagePath = `${viewsDirectory}/${item.modelName}/${item.name}.vue`;
if(fileHelper.existFileSync(pagePath)) notAllowPath.push(pagePath);
else {
allowPage.push(item);
allowPagePath.push(pagePath);
}
}
});
//获取页面设置内容
pages = allowPage.map(item=>{
let type = 'pages_list';
if (item.type === 'info') type = 'pages_info'; //info
if (item.type === 'create') type = 'pages_create'; //create
if (item.type === 'edit') type = 'pages_edit'; //edit
if(item.type === 'info'){
let testData = [];
let testDataSource = JSON.parse(item['testData']);
Object.keys(testDataSource).map(key=>{
testData.push({
value: testDataSource[key],
label: item['table'][key],
key: key
})
});
item['testData'] = JSON.stringify(testData);
}
let css = getContent({}, 'css', type);
let html = getContent({item}, 'html', type);
let js = getContent({item}, 'js', type);
let page = fileHelper.readFileSync(`${basePath.buildTemplateDirectory}/coder/pages.txt`);
page = template.render(page, {
scoped: true,
lang: 'scss',
css: css
}).toString();
page = page.replace(/@html@/, html);
page = page.replace(/@js@/, js);
fileHelper.mkdirSync(`${viewsDirectory}`, item.modelName);
return {...item, page}
});
//处理生成逻辑
pages.map((item)=>{
promisePages.push(fileHelper.writeFile(`${viewsDirectory}/${item.modelName}/${item.name}.vue`, item.page))
});
Promise.all(promisePages)
.then(()=>{
notAllowPath.map(item=>{
clog(`已存在路径::【${item}】`, 'red');
});
allowPagePath.map(item => {
clog(`被创建路径::【${item}】`, 'green');
});
clog('Pages 创建完成!', 'green');
let viewPath = basePath.viewsDirectory;
fileHelper.writeFileSync(logDir + '/pages', getLogs('pages', {notAllowPath, allowPagePath}));
//设置git忽略文件
gitIgnore(model,viewPath).then().catch((error=>{console.error(error)}));
})
.catch()
};
init(schemasArray);