import { VxeUI } from 'vxe-pc-ui';
import dayjs from 'dayjs';
import { get, has, isEmpty, isFunction } from 'lodash';
import { formatMoney, formatPercentage } from '/@/components/BsUi/uitl.js';
import { DISPLAY_STATE, FILE_TYPE_ICON_MAP } from '/@/components/BsUi/constant.js';
import { DeleteOutlined, EditOutlined, EyeOutlined, PlusOutlined } from '@ant-design/icons-vue';
import { h } from 'vue';
const getValue = (params) => {
const { column, row } = params;
return get(row, column.field, '');
};
// 格式化人民币
VxeUI.renderer.add('CellRmb', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
return <>¥{formatMoney(getValue(params))}>;
},
});
// 格式化百分比
VxeUI.renderer.add('CellPercent', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
return <>{formatPercentage(getValue(params))}>;
},
});
// 格式化日期
VxeUI.renderer.add('CellDate', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
if (isEmpty(getValue(params))) return <>>;
return <>{dayjs(getValue(params)).format('YYYY-MM-DD')}>;
},
});
// 格式化时间
VxeUI.renderer.add('CellDateTime', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
if (isEmpty(getValue(params))) return <>>;
return <>{dayjs(getValue(params)).format('YYYY-MM-DD HH:mm:ss')}>;
},
});
// 字典渲染
VxeUI.renderer.add('CellDict', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
if (isEmpty(getValue(params))) return <>>;
return ;
},
});
// 字典渲染
VxeUI.renderer.add('CellOption', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
const { extraProps } = renderOpts;
const { row, column } = params;
const { buttons } = extraProps;
const visibleBtn = buttons.filter(
(v) => !has(v, 'display') || (isFunction(v.display) && v.display(params) === DISPLAY_STATE.VISIBLE) || v.display === DISPLAY_STATE.VISIBLE
);
column.title = '操作';
column.width = 'auto';
const iconMap = {
add: h(PlusOutlined),
edit: h(EditOutlined),
delete: h(DeleteOutlined),
view: h(EyeOutlined),
};
return (
{visibleBtn.map((v) => {
const disabled = has(v, 'disabled') && isFunction(v.disabled) ? v.disabled(params) : v.props?.disabled;
return (
{
v?.onClick(params);
}}
disabled={disabled}
icon={iconMap[v?.code]}
{...v.extraProps}
>
{v.title}
);
})}
);
},
});
// 文件类型
VxeUI.renderer.add('CellFileType', {
// 默认显示模板
renderTableDefault(renderOpts, params) {
const { extraProps } = renderOpts;
const { row, column } = params;
const fileTypeName = row[column.field]?.toUpperCase();
const iconName = FILE_TYPE_ICON_MAP[fileTypeName] || 'undefined_icon.svg';
column.title = '文件类型';
column.width = '80';
column.align = 'center';
return ;
},
});