feat: vxe table dict tag
parent
b7465498dc
commit
6c40712df4
|
@ -1,8 +1,9 @@
|
|||
import { h } from 'vue';
|
||||
|
||||
import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table';
|
||||
import { useDictStore } from '@vben/stores';
|
||||
|
||||
import { Button, Image } from 'ant-design-vue';
|
||||
import { Button, Image, Tag } from 'ant-design-vue';
|
||||
|
||||
import { useVbenForm } from './form';
|
||||
|
||||
|
@ -72,6 +73,32 @@ setupVbenVxeTable({
|
|||
},
|
||||
});
|
||||
|
||||
// 表格配置项可以用 cellRender: { name: 'CellDict',props:{dictType: ''} },
|
||||
vxeUI.renderer.add('CellDict', {
|
||||
renderTableDefault(renderOpts, params) {
|
||||
const dictStore = useDictStore();
|
||||
const { props } = renderOpts;
|
||||
const { column, row } = params;
|
||||
if (!props) {
|
||||
return '';
|
||||
}
|
||||
const dict = dictStore.getDictData(props.type, row[column.field]);
|
||||
// 转义
|
||||
if (dict) {
|
||||
if (`${dict.colorType}` === 'primary') dict.colorType = 'processing';
|
||||
else if (`${dict.colorType}` === 'danger') dict.colorType = 'error';
|
||||
else if (`${dict.colorType}` === 'info') dict.colorType = 'default';
|
||||
else if (!dict.colorType) dict.colorType = 'default';
|
||||
return h(
|
||||
Tag,
|
||||
{ color: dict.colorType },
|
||||
{ default: () => dict.label },
|
||||
);
|
||||
}
|
||||
return '';
|
||||
},
|
||||
});
|
||||
|
||||
// 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化
|
||||
// vxeUI.formats.add
|
||||
},
|
||||
|
|
|
@ -44,7 +44,11 @@ export const columns: VxeGridProps['columns'] = [
|
|||
{ field: 'code', title: '岗位编码' },
|
||||
{ field: 'sort', title: '岗位顺序' },
|
||||
{ field: 'remark', title: '岗位备注' },
|
||||
{ field: 'status', title: '状态' },
|
||||
{
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
cellRender: { name: 'CellDict', props: { type: 'common_status' } },
|
||||
},
|
||||
{ field: 'createTime', formatter: 'formatDateTime', title: '创建时间' },
|
||||
{
|
||||
field: 'action',
|
||||
|
|
|
@ -15,12 +15,22 @@ interface DictState {
|
|||
|
||||
export const useDictStore = defineStore('dict', {
|
||||
actions: {
|
||||
getDictData(dictType: string, value?: string) {
|
||||
getDictData(dictType: string, value: any) {
|
||||
const dict = this.dictCache[dictType];
|
||||
if (!dict) {
|
||||
return undefined;
|
||||
}
|
||||
return value ? dict.find((d) => d.value === value) : dict;
|
||||
return (
|
||||
dict.find((d) => d.value === value || d.value === value.toString()) ??
|
||||
undefined
|
||||
);
|
||||
},
|
||||
getDictOptions(dictType: string) {
|
||||
const dictOptions = this.dictCache[dictType];
|
||||
if (!dictOptions) {
|
||||
return [];
|
||||
}
|
||||
return dictOptions;
|
||||
},
|
||||
setDictCache(dicts: Dict) {
|
||||
this.dictCache = dicts;
|
||||
|
|
Loading…
Reference in New Issue