const { join } = require('path');const { existsSync, mkdirSync } = require('fs');const { transferDir, transferFile } = require('./file');/*** 生成 react crud 模板代码** @param {*} fromFile* @param {*} toFile* @param {*} options* @returns Promise<boolean>*/const replaceArgsToFile = (fromFile, toFile, options) => {if (!options) return Promise.resolve();const {title, // 标题containerType = 'Modal', // 交互方式isNeedQuery, // 是否需要筛选isNeedAdd,isNeedEdit,isNeedDelete,isNeedBatchDelete,isNeedDefine,isNeedBatchDefine,} = options;return transferFile(fromFile, toFile, data => {const apiConfig = { list: '/mock/list.json' };const batchToolbar = [];const rowToolbar = [];if (isNeedAdd) {apiConfig.add = '/mock/modify.json';batchToolbar.push(`{label: '添加',type: 'primary',toolbarType: ICrudToolbarTypeEnum.Add,request: (row) =>fetch(apiConfig.add, {method: 'get',}).then(() => {message.success('添加成功');}),}`);}if (isNeedEdit) {apiConfig.edit = '/mock/modify.json';rowToolbar.push(`{label: '编辑',type: 'link',toolbarType: ICrudToolbarTypeEnum.Edit,request: (row) =>fetch(apiConfig.edit, {method: 'get',}).then(() => {message.success('编辑成功');}),}`);}if (isNeedDelete) {apiConfig.delete = '/mock/delete.json';rowToolbar.push(`{label: '删除',type: 'link',danger: true,toolbarType: ICrudToolbarTypeEnum.Delete,request: (row) =>fetch(apiConfig.delete, {method: 'get',}).then(() => {message.success('删除成功');}),}`);}if (isNeedBatchDelete) {apiConfig.batchDelete = '/mock/delete.json';batchToolbar.push(`{label: '批量删除',type: 'dashed',danger: true,toolbarType: ICrudToolbarTypeEnum.DeleteBatch,request: (row) =>fetch(apiConfig.delete, {method: 'get',}).then(() => {message.success('删除成功');}),}`);}if (isNeedDefine) {rowToolbar.push(`{render: (row, index) => {return (<Buttontype="link"onClick={() => {message.warning('自定义事件处理');console.log(1111, row, index);}}>行级操作</Button>);}}`);}if (isNeedBatchDefine) {batchToolbar.push(`{render: (rows, rowKeys) => {console.log(rows, rowKeys);return (<Button type="text" onClick={() => message.warning('自定义事件处理')}>自定义按钮</Button>);},}`);}// 移除筛选!isNeedQuery && data.replace(/isFilter: true,/g, 'isFilter: false,');// replace contentconst replaceData = `import { Button, message } from 'antd';\n${data.replace(/\/\/ @ts-ignore/g, '').replace(/\} from '..\/components\/index';/g,`, ICrudToolbarTypeEnum, ICurdContainerTypeEnum } from '../components/index';\n`,).replace(/\{crud.title\}/g, title).replace(/'\{crud.apiConfig\}'/g, JSON.stringify(apiConfig)).replace(/'\{crud.containerType\}'/g,`ICurdContainerTypeEnum.${containerType}`,).replace(/'\{crud.batchToolbar\}'/g, `[${batchToolbar.join(',')}]`).replace(/'\{crud.rowToolbar\}'/g, `[${rowToolbar.join(',')}]`)}`;return replaceData;});};/*** 生成 react 模板代码** @param {*} fromPath* @param {*} toPath* @param {*} options*/const generateReactCode = (fromPath, toPath, options) => {const { isTs, file, model } = options;// 基础 crud 模板const baseCrudTemplatePath = 'template/crud';const templateSuffix = isTs ? 'tsx' : 'jsx';const templateFromPath = join(fromPath,`${baseCrudTemplatePath}.${templateSuffix}`,);const templateToPath = join(toPath, model);if (!existsSync(templateFromPath)) return;// 模块不存在则新建!existsSync(templateToPath) && mkdirSync(templateToPath);// replace argsreplaceArgsToFile(templateFromPath,join(templateToPath, `${file}.${templateSuffix}`),options,).then(isSuccess => {});};/*** 初始化 react crud 基础组件* 用作生成基础组件到项目基架中** @param {*} fromPath* @param {*} toPath*/const initReactBase = (fromPath, toPath) => {// 基础组件const baseComponentPath = 'components';// ignore fileconst ignoreFiles = ['node_modules','.DS_Store','dist','yarn.lock','package-lock.json','package.json','tsconfig.json',];const baseFromPath = join(fromPath, baseComponentPath);const baseToPath = join(toPath, baseComponentPath);transferDir(baseFromPath, baseToPath, ignoreFiles);};/*** 迁移 mock** @param {*} fromPath* @param {*} toPath*/const generateReactMock = (fromPath, toPath) => {const mockFromPath = join(fromPath, 'mock');const mockToPath = join(toPath, 'mock');transferDir(mockFromPath, mockToPath);};module.exports = {initReactBase,generateReactCode,generateReactMock,};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。