UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

172 lines (136 loc) 4.29 kB
'use strict'; 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);