RuralDatabase/reference/3d-map/renderApiServer/renderVue/renderDetailView.js

191 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2024-06-30 21:39:37 +08:00
//思路1、根据renderController生成的目录将每个目录下的getpage文件读取出来查找<any,和>(`中间的字符串获取到接口返回类型的名称,
//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 = `
<!--
此代码由renderVue工具自动生成
作者mask
-->
<template>
<div class="detail-dialog-container">
<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
<el-descriptions title="" v-loading="state.loading" :column="3" direction="vertical" border>
<%- column %>
</el-descriptions>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default">关闭</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="<%= permissionPrefix.replaceAll(':','-') %>-detail">
import { getCurrentInstance, reactive, defineProps } from 'vue'
import dayjs from 'dayjs'
import { <%= lowerCasedirName %>Get } from '/@/api/controller'
import { <%= dirName %>GetOutput, DictGetListDto } from '/@/api/interface'
import { useDictListInfo } from '/@/stores/dictListInfo'
import { getDictLabel } from '/@/utils/dictUtils'
import { storeToRefs } from 'pinia'
//获取字典
const storesUseUserInfo = useDictListInfo()
const { dictListInfo } = storeToRefs(storesUseUserInfo)
// 定义变量内容
const state = reactive({
dialog: {
isShowDialog: false,
//根据列表名称生成
title: '详情',
},
data: {} as <%= dirName %>GetOutput,
loading: false,
})
const formatterTime = (cellValue: any) => {
return dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss')
}
// 关闭弹窗
const resetData = () => {
state.data = {} as <%= dirName %>GetOutput
}
const { proxy } = getCurrentInstance() as any
// 打开弹窗
const open = async (row: any) => {
try {
state.dialog.isShowDialog = true
resetData()
const res = await <%= lowerCasedirName %>Get({ id: row.id })
if (res?.success) {
state.data = res.data
}
} catch (error) {
proxy.$modal.msgError(error)
}
}
// 关闭弹窗
const closeDialog = () => {
state.dialog.isShowDialog = false
}
// 取消
const onCancel = () => {
closeDialog()
}
// 暴露变量
defineExpose({
open,
})
</script>
`;
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 += `${`<el-descriptions-item label="${barr[i].label}">{{ state.data.${barr[i].prop} || '--' }}</el-descriptions-item>\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 `${`<el-descriptions-item label="${item.label}">{{ getDictLabel(dictListInfo.${item.prop},state.data.${item.prop})}}</el-descriptions-item>`}\n`;
}
//生成 是否 字段的行
function renderBooleanColumn(item) {
return `${`<el-descriptions-item label="${item.label}">{{ state.data.${item.prop} ? '是' : '否' || '--' }}</el-descriptions-item>`}\n`;
}
//生成 日期 字段的行
function renderDateColumn(item) {
return `${`<el-descriptions-item label="${item.label}">{{ formatterTime(state.data.${item.prop}) }}</el-descriptions-item>\n`}`;
}
module.exports = {
renderDetail,
};