czist-create
Version:
通过cit命令快速添加页面/组件/Model/Services
120 lines (110 loc) • 4.36 kB
JavaScript
const path = require("path");
const program = require("commander");
const { compiler, writeFile, changeData } = require("../utils/utils");
/**
* 创建组件action
* @param {String} name 创建的组件名称
* @param {String} dest 创建组件位置
*/
const addComponentAction = async (name, dest) => {
// result: ejs编译好之后的文件模板 -> 字符串
const result = await compiler("component.jsx.ejs", changeData(name));
// TODO 将对应的模板写入到jsx文件中
const { needFolder } = program._optionValues;
const targetPath = needFolder ? path.resolve(dest + `/${name}`, "index.jsx") : path.resolve(dest, `${name}.jsx`);
writeFile(targetPath, result);
};
/**
* 创建页面 包括 model、services
* @param {String} name 页面的name
*/
const addPageAction = async (name, dest) => {
// 添加页面的具体位置
let lowerName = String(name).toLowerCase();
let pagePos = path.resolve(dest, `${name}/index.jsx`);
let modelPos = path.resolve("src/models", `${lowerName}.js`);
let servicesPos = path.resolve("src/services", `${lowerName}.js`);
// jsx文件模板
const resultPage = await compiler("component.jsx.ejs", changeData(name));
const resultModel = await compiler("page.model.js.ejs", changeData(name));
const resultServices = await compiler("page.services.js.ejs", changeData(name));
const { notModal, notServices } = program._optionValues;
// 写入jsx文件
writeFile(pagePos, resultPage);
if (!notModal) {
writeFile(modelPos, resultModel);
}
if (!notServices) {
writeFile(servicesPos, resultServices);
}
};
/**
*
* @param {String} name 添加的页面名称(包括Model、Services)
* @param {String} dest 添加的位置
*/
const addGroupPage = async (name, dest) => {
// 添加页面的具体位置
let lowerName = String(name).toLowerCase();
let pagePos = path.resolve(dest, `${name}/index.jsx`);
let modelPos = path.resolve("src/models", `${lowerName}.js`);
let servicesPos = path.resolve("src/services", `${lowerName}.js`);
let editPos = path.resolve(dest, `${name}/Edit/index.jsx`);
let assetsTablePos = path.resolve(dest, `${name}/Edit/Table/AssetsTable.jsx`);
let checkboxModalPos = path.resolve(dest, `${name}/Edit/Table/CheckboxModal.jsx`);
let detailPos = path.resolve(dest, `${name}/detail.jsx`);
// jsx文件模板
const resultPage = await compiler("component.jsx.ejs", changeData(name));
const resultModel = await compiler("page.model.js.ejs", changeData(name));
const resultServices = await compiler("page.services.js.ejs", changeData(name));
// 编辑Edit页面
const resultEditPage = await compiler("edit.jsx.ejs", changeData(name));
// 子表表格
const resultAssetsTable = await compiler("assetsTable.jsx.ejs", changeData(name));
// 子表表格toolBarRender批量添加Modal框
const resultCheckboxModal = await compiler("checkboxModal.jsx.ejs", changeData);
// 详情页
const resultDetail = await compiler("detail.jsx.ejs", changeData(name));
const { notModal, notServices } = program._optionValues;
// 写入jsx文件
writeFile(pagePos, resultPage);
if (!notModal) {
writeFile(modelPos, resultModel);
}
if (!notServices) {
writeFile(servicesPos, resultServices);
}
writeFile(editPos, resultEditPage);
writeFile(assetsTablePos, resultAssetsTable);
writeFile(checkboxModalPos, resultCheckboxModal);
writeFile(detailPos, resultDetail);
};
/**
* 快速添加models层
* @param {String} name 添加Modal的名称
* @param {String} dest 添加的位置 默认在/src/models下
*/
const addModel = async (name, dest) => {
let lowerName = String(name).toLowerCase();
let modelPos = path.resolve(dest, `${lowerName}.js`);
const resultModel = await compiler("page.model.js.ejs", changeData(name));
writeFile(modelPos, resultModel);
};
/**
* 快速添加services层
* @param {String} name 添加Services的名称
* @param {String} dest 添加的位置 默认在/src/services下
*/
const addServices = async (name, dest) => {
let lowerName = String(name).toLowerCase();
let servicePos = path.resolve(dest, `${lowerName}.js`);
const resultService = await compiler("page.services.js.ejs", changeData(name));
writeFile(servicePos, resultService);
};
module.exports = {
addComponentAction,
addPageAction,
addGroupPage,
addModel,
addServices
};