Files
2026-10-20 19:08:49 +08:00

82 lines
1.9 KiB
Smarty

import { h } from 'vue';
import { ElAvatar, ElTag } from 'element-plus';
/**
* [[$.ModuleComment]]表格列配置
*
* 定义列表页表格的显示列,包含多选框、ID、各业务字段及审计字段。
* 字段按类型自动选择渲染方式:图片用 ElAvatar、选项用 ElTag、
* 链接用 a 标签,其余为普通文本。
*/
export const columns = [
{
type: 'selection', // 多选框列
},
{
label: 'ID',
prop: 'id',
fixed: 'left',
width: 50,
},
[[- range .ListFields]]
{
label: '[[.Label]]',
prop: '[[.CamelName]]',
minWidth: [[if eq .Type "CharField"]]120[[else if eq .Type "IntegerField"]]100[[else if eq .Type "DateTimeField"]]180[[else]]120[[end]],
[[- if .IsImage]]
// 图片渲染:以方形头像形式展示
render(record) {
return h(ElAvatar, {
size: 48,
src: record.row.[[.CamelName]],
shape: 'square',
fit: 'fill',
});
},
[[- else if .Choices]]
// 选项标签渲染:按选项值映射文字与标签颜色
render(record) {
const statusMap = {
[[- range .Choices]]
[[.Value]]: { text: '[[.Label]]', type: '[[.Type]]' },
[[- end]]
};
const status = statusMap[record.row.[[.CamelName]]];
return h(
ElTag,
{
type: status?.type || 'info',
},
{
default: () => status?.text || record.row.[[.CamelName]],
},
);
},
[[- else if and (eq .Type "CharField") ((isUrlField .CamelName))]]
// 链接渲染:新窗口打开
render(record) {
return h(
'a',
{
href: record.row.[[.CamelName]],
target: '_blank',
},
'点击查看',
);
},
[[- else]]
// 普通文本渲染
[[- end]]
},
[[- end]]
{
label: '创建人',
prop: 'createUser',
minWidth: 100,
},
{
label: '创建时间',
prop: 'createTime',
width: 180,
},
];