99 lines
2.6 KiB
Smarty
99 lines
2.6 KiB
Smarty
import { h } from 'vue';
|
|
import { BasicColumn } from '@/components/Table';
|
|
import { NTag, NSwitch, NImage } from 'naive-ui';
|
|
import { renderIcon } from '@/utils';
|
|
|
|
{% for field in fields %}
|
|
{% if field.choices %}
|
|
/**
|
|
* {{ field.label }} 选项映射
|
|
*/
|
|
const {{ field.name }}Map: Record<number, { text: string; type: string }> = {
|
|
{% for choice in field.choices %}
|
|
{{ choice.value }}: { text: '{{ choice.label }}', type: '{% if loop.index0 == 0 %}success{% elif loop.index0 == 1 %}error{% elif loop.index0 == 2 %}warning{% else %}info{% endif %}' },
|
|
{% endfor %}
|
|
};
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
export const columns: BasicColumn[] = [
|
|
{% for field in list_fields %}
|
|
{
|
|
title: '{{ field.label }}',
|
|
key: '{{ field.camel_name }}',
|
|
width: {% if field.name == 'name' %}250{% elif field.name == 'sort' %}100{% elif field.type == 'DateTimeField' %}180{% else %}150{% endif %},
|
|
align: 'left',
|
|
{% if field.is_image %}
|
|
// 图片渲染
|
|
render(record) {
|
|
return record.{{ field.camel_name }}
|
|
? h(NImage, {
|
|
src: record.{{ field.camel_name }},
|
|
width: 40,
|
|
height: 40,
|
|
fit: 'cover',
|
|
style: {
|
|
borderRadius: '4px',
|
|
},
|
|
previewDisabled: false,
|
|
})
|
|
: h('span', '-');
|
|
},
|
|
{% elif field.choices %}
|
|
// 选项标签渲染
|
|
render(record) {
|
|
const status = {{ field.name }}Map[record.{{ field.camel_name }}];
|
|
return h(
|
|
NTag,
|
|
{
|
|
bordered: false,
|
|
type: status?.type || 'info',
|
|
},
|
|
{
|
|
default: () => status?.text || record.{{ field.camel_name }},
|
|
},
|
|
);
|
|
},
|
|
{% elif field.name == 'status' %}
|
|
// 状态开关渲染
|
|
render(record) {
|
|
return h(NSwitch, {
|
|
value: record.status == 1,
|
|
onUpdateValue: (val: boolean) => {
|
|
// 状态变更事件由父组件处理
|
|
record.status = val ? 1 : 0;
|
|
},
|
|
});
|
|
},
|
|
{% elif field.type == 'CharField' and field.camel_name|lower in ['website', 'site', 'url', 'link'] %}
|
|
// 链接渲染
|
|
render(record) {
|
|
const url = record.{{ field.camel_name }};
|
|
return h(
|
|
'a',
|
|
{
|
|
href: url,
|
|
target: '_blank',
|
|
rel: 'noopener noreferrer',
|
|
},
|
|
{
|
|
default: () => url || '点击查看',
|
|
},
|
|
);
|
|
},
|
|
{% else %}
|
|
// 普通文本渲染
|
|
{% endif %}
|
|
},
|
|
{% endfor %}
|
|
{
|
|
title: '创建人',
|
|
key: 'createUser',
|
|
width: 100,
|
|
},
|
|
{
|
|
title: '创建时间',
|
|
key: 'createTime',
|
|
width: 180,
|
|
},
|
|
]; |