admin-vben5/apps/web-antd/src/adapter/vxe-table.ts

133 lines
3.2 KiB
TypeScript
Raw Normal View History

import { h, type Ref } from 'vue';
import {
setupVbenVxeTable,
useVbenVxeGrid,
type VxeGridDefines,
} from '@vben/plugins/vxe-table';
import { Button, Image } from 'ant-design-vue';
import { useVbenForm } from './form';
setupVbenVxeTable({
configVxeTable: (vxeUI) => {
vxeUI.setConfig({
grid: {
align: 'center',
2024-10-07 13:21:19 +08:00
border: false,
minHeight: 180,
formConfig: {
// 全局禁用vxe-table的表单配置使用formOptions
enabled: false,
},
proxyConfig: {
autoLoad: true,
response: {
2024-10-05 12:12:14 +08:00
result: 'rows',
total: 'total',
2024-10-05 12:12:14 +08:00
list: 'rows',
},
showActiveMsg: true,
showResponseMsg: false,
},
// 溢出展示形式
showOverflow: true,
2024-10-07 13:21:19 +08:00
pagerConfig: {
2024-10-10 08:31:40 +08:00
// 默认条数
pageSize: 10,
// 分页可选条数
pageSizes: [10, 20, 30, 40, 50],
2024-10-07 13:21:19 +08:00
},
rowConfig: {
// 鼠标移入行显示 hover 样式
isHover: true,
// 点击行高亮
isCurrent: true,
},
2024-10-05 20:46:31 +08:00
columnConfig: {
2024-10-07 13:21:19 +08:00
// 可拖拽列宽
2024-10-05 20:46:31 +08:00
resizable: true,
},
2024-10-07 13:21:19 +08:00
// 右上角工具栏
2024-10-05 20:46:31 +08:00
toolbarConfig: {
// 自定义列
2024-10-30 11:48:36 +08:00
custom: {
icon: 'vxe-icon-setting',
},
2024-10-05 20:46:31 +08:00
// 最大化
zoom: true,
// 刷新
refresh: {
// 默认为reload 修改为在当前页刷新
code: 'query',
},
2024-10-05 20:46:31 +08:00
},
2024-10-07 13:21:19 +08:00
// 圆角按钮
round: true,
2024-10-07 13:21:19 +08:00
// 表格尺寸
2024-10-05 12:12:14 +08:00
size: 'medium',
customConfig: {
// 表格右上角自定义列配置 是否保存到localStorage
// 必须存在id参数才能使用
storage: false,
},
},
});
// 表格配置项可以用 cellRender: { name: 'CellImage' },
vxeUI.renderer.add('CellImage', {
renderTableDefault(_renderOpts, params) {
const { column, row } = params;
return h(Image, { src: row[column.field] });
},
});
// 表格配置项可以用 cellRender: { name: 'CellLink' },
vxeUI.renderer.add('CellLink', {
renderTableDefault(renderOpts) {
const { props } = renderOpts;
return h(
Button,
{ size: 'small', type: 'link' },
{ default: () => props?.text },
);
},
});
// 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化
// vxeUI.formats.add
},
useVbenForm,
});
export { useVbenVxeGrid };
export type * from '@vben/plugins/vxe-table';
/**
*
* @deprecated 使vxeCheckboxChecked代替
* @param checked
* @returns function
*/
export function tableCheckboxEvent(checked: Ref<boolean>) {
const event: (params: VxeGridDefines.CheckboxChangeEventParams) => void = (
params,
) => {
checked.value = params.$table.getCheckboxRecords().length > 0;
};
return event;
}
/**
* vxe-table的复选框是否选中
* @param tableApi api
* @returns boolean
*/
export function vxeCheckboxChecked(
tableApi: ReturnType<typeof useVbenVxeGrid>[1],
) {
return tableApi?.grid?.getCheckboxRecords?.()?.length > 0;
}