//思路: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'); /** * 生成el-descriptions-item数据 * @param {*} barr { label: string, prop: string, type: string }[] */ function renderColumn(barr) { /** * 生成的el-descriptions-item数据 */ let column = ''; // 遍历过滤后的数组 for (let i = 0; i < barr.length; i++) { // 如果对象标签中包含字典 if (barr[i].label.indexOf('字典') != -1) { // 调用renderDictColumn函数,生成el-descriptions-item数据 column += renderDictColumn(barr[i]); // 如果对象标签中包含是否 } else if (barr[i].label.indexOf('是否') != -1) { // 调用renderBooleanColumn函数,生成el-descriptions-item数据 column += renderBooleanColumn(barr[i]); // 如果对象标签中包含日期 } else if (barr[i].label.indexOf('日期') != -1) { // 调用renderDateColumn函数,生成el-descriptions-item数据 column += renderDateColumn(barr[i]); // 如果对象标签中不包含字典、是否、日期 } else { // 调用renderDateColumn函数,生成el-descriptions-item数据 column += `${`{{ state.data.${barr[i].prop} || '--' }}\n`}`; } } return column; } /** * 生成详情页 * @param {array} arr * @param {string} dirName 文件夹名称 * @param {string} permissionPrefix 权限前缀 */ function renderDetail(arr, dirName, permissionPrefix) { /** * 生成的el-descriptions-item数据 */ let column = ''; // 过滤掉不需要生成的字段 // let filter = ['附件']; 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; } }); column = renderColumn(barr); let lowerCasedirName = dirName.charAt(0).toLowerCase() + dirName.slice(1); let templateStr = ejs.render(content, { barr, permissionPrefix, column, dirName, lowerCasedirName }); return templateStr; } //生成字典行 function renderDictColumn(item) { return `${`{{ getDictLabel(dictListInfo.${item.prop},state.data.${item.prop})}}`}\n`; } //生成 是否 字段的行 function renderBooleanColumn(item) { return `${`{{ state.data.${item.prop} ? '是' : '否' || '--' }}`}\n`; } //生成 日期 字段的行 function renderDateColumn(item) { return `${`{{ formatterTime(state.data.${item.prop}) }}\n`}`; } module.exports = { renderDetail, };