//思路:1、根据renderController生成的目录,将每个目录下的getpage文件读取出来,查找(`中间的字符串获取到接口返回类型的名称, //2、将获取到的类型名称,从interface目录下读取出来,然后查找data:和下一个;之间的字符串,用replace方法将空格去掉,获取到data的类型名称 //2.1、继续在getpage文件中查找 `符号和`符号间的数据例如`/api/admin/api/get-page`,用replace去掉/get-page,然后再将/替换成冒号:(用来设置权限) // 3、将获取到的data的类型名称,从interface目录下读取出来,然后查找list:和下一个;之间的字符串,用replace方法将[]和空格去掉,获取到list的类型名称 // 4、将获取到的list的类型名称,从interface目录下读取出来,查找大括号{}中的数据,将这个字符串放到之前我写好的内容中(待改善),可以生成到table中每一个字段的column const content = ` `; let ejs = require('ejs'); /** * 生成表格的列 * @param {*} barr { label: string, prop: string, type: string }[] */ function renderElTableColumn(barr) { /** * 生成的el-table-column数据 */ let tableColumn = ''; // 遍历过滤后的数组 for (let i = 0; i < barr.length; i++) { // 如果对象标签中包含字典 if (barr[i].label.indexOf('字典') != -1) { // 调用renderDictColumn函数,生成el-table-column数据 tableColumn += renderDictColumn(barr[i]); // 如果对象标签中包含是否 } else if (barr[i].label.indexOf('是否') != -1) { // 调用renderBooleanColumn函数,生成el-table-column数据 tableColumn += renderBooleanColumn(barr[i]); // 如果对象标签中包含日期 } else if (barr[i].label.indexOf('日期') != -1) { // 调用renderDateColumn函数,生成el-table-column数据 tableColumn += renderDateColumn(barr[i]); // 如果对象标签中不包含字典、是否、日期 } else { // 调用renderDateColumn函数,生成el-table-column数据 tableColumn += `${`\n`}`; } } return tableColumn; } /** * 生成表格的高级搜索参数 * @param {*} barr { label: string, prop: string, type: string }[] */ function renderFilters(barr) { let filters = []; for (let i = 0; i < barr.length; i++) { // 如果对象标签中包含字典 if (barr[i].type == 'string') { filters.push({ field: barr[i].prop, operator: 'Contains', description: barr[i].label, componentName: 'el-input', defaultSelect: !i, }); } } return filters; } /** * 生成表格列表页 * @param {array} arr * @param {string} dirName 文件夹名称 * @param {string} permissionPrefix 权限前缀 * @returns */ function renderTable(arr, dirName, permissionPrefix) { /** * 生成的el-table-column数据 */ let tableColumn = ''; let filters = []; // 过滤掉不需要生成的字段 let filter = ['附件']; // 过滤数组 let barr = arr.filter((item) => { // 声明一个布尔值 let isFlag = true; // 遍历过滤字段 filter.map((filterItem) => { // 如果过滤字段在对象标签中,则将布尔值设置为false if (item.label.indexOf(filterItem) !== -1) { return (isFlag = false); } }); // 如果布尔值为false,则返回false if (!isFlag) { return false; // 如果布尔值为true,则返回true } else { return true; } }); tableColumn = renderElTableColumn(barr); filters = renderFilters(barr); let lowerCasedirName = dirName.charAt(0).toLowerCase() + dirName.slice(1); let templateStr = ejs.render(content, { barr, permissionPrefix, tableColumn, filters: filters, dirName, lowerCasedirName }); return templateStr; } //生成字典行 function renderDictColumn(item) { return `${` `}\n`; } //生成 是否 字段的行 function renderBooleanColumn(item) { return `${` `}\n`; } //生成 日期 字段的行 function renderDateColumn(item) { return `${`\n`}`; } module.exports = { renderTable, };