VistarStarDataIntegration/admin.net.pro/Web/src/hooks/setupVXETableHook.ts
2024-09-09 09:23:58 +08:00

112 lines
5.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import App from '/@/App.vue';
// VXETable
import VxeUITable from 'vxe-table';
import VXETablePluginElement from 'vxe-table-plugin-element';
import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx';
// import 'vxe-table/lib/style.css'; // 已在theme/vxe.scss引入
import 'vxe-table-plugin-element/dist/style.css';
// Vxe UI 组件库
import VxeUI, { VxeComponentSizeType } from 'vxe-pc-ui';
import ExcelJS from 'exceljs';
import { useThemeConfig } from '/@/stores/themeConfig';
const vxeSize: VxeComponentSizeType = useThemeConfig().themeConfig.globalComponentSize == 'small' ? 'mini' : useThemeConfig().themeConfig.globalComponentSize == 'default' ? 'small' : 'medium';
export const setupVXETable = (app: App) => {
// 加载插件
VxeUITable.use(VXETablePluginElement);
VxeUITable.use(VXETablePluginExportXLSX, { ExcelJS: ExcelJS });
// VXETable全局配置https://vxetable.cn/v4.7/#/table/start/global
VxeUITable.setConfig({
theme: 'light', // 主题颜色
size: vxeSize, // 全局尺寸mini、small、medium/default
// i18n: (key, args) => i18n.global.t(key, args),
// zIndex: 999, // 全局 zIndex 起始值,如果项目的的 z-index 样式值过大时就需要跟随设置更大,避免被遮挡
// version: 0, // 版本号,对于某些带数据缓存的功能有用到,上升版本号可以用于重置数据
// loadingText: '加载中...', // 全局loading提示内容如果为null则不显示文本
table: {
border: true, // 是否带有边框
stripe: true, // 是否带有斑马纹
// keepSource: false,// 保持原始值的状态,被某些功能所依赖,比如编辑状态、还原数据等(开启后影响性能,具体取决于数据量)
showOverflow: true, // 设置所有内容过长时显示为省略号(如果是固定列建议设置该值,提升渲染速度)
size: vxeSize, // 表格的尺寸[medium, small, mini]
autoResize: true, // 自动监听父元素的变化去重新计算表格(对于父元素可能存在动态变化、显示隐藏的容器中、列宽异常等场景中的可能会用到)
round: false, // 是否为圆角边框
emptyText: '暂无数据', //
columnConfig: {
isCurrent: false, // 当鼠标点击列头时,是否要高亮当前列
isHover: false, // 当鼠标移到列头时,是否要高亮当前头
resizable: true, // 每一列是否启用列宽调整
minWidth: 70, // 每一列的最小宽度(auto, px, %)
},
rowConfig: {
isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
isHover: true, // 当鼠标移到行时,是否要高亮当前行
},
radioConfig: {
strict: true, // 严格模式,选中后不能取消
highlight: true, // 高亮选中行
},
checkboxConfig: {
strict: true, // 严格模式,当数据为空或全部禁用时,列头的复选框为禁用状态
highlight: true, // 高亮勾选行
range: true, // 开启复选框范围选择功能(启用后通过鼠标在复选框的列内滑动选中或取消指定行)***全局配置貌似不生效***
trigger: 'default', // 触发方式当多种功能重叠时会同时触发default默认, cell点击单元格触发, row点击行触发
},
exportConfig: {
remote: false, // 是否服务端导出
types: ['xlsx', 'csv', 'html', 'xml', 'txt'], // 可选文件类型列表
modes: ['current', 'selected', 'all'], // 输出数据的方式
},
printConfig: { modes: ['current', 'selected', 'all'] }, // 输出数据的方式
tooltipConfig: {
showAll: false, // 所有单元格开启工具提示
enterable: true, // 鼠标是否可进入到工具提示中
theme: 'dark',
},
customConfig: {
// 貌似全局设置不生效,须要单独设置
storage: {
// 是否启用 localStorage 本地保存,会将列操作状态保留在本地(需要有 id
visible: true, // 启用显示/隐藏列状态
resizable: true, // 启用列宽状态
},
},
scrollX: {
enabled: true, // 是否默认开启横向虚拟滚动
gt: 30, // 指定大于指定列时自动启动横向虚拟滚动
},
scrollY: {
scrollToTopOnChange: true, // 当数据源被更改时,自动将纵向滚动条滚动到顶部
enabled: true, // 是否默认开启纵向虚拟滚动
gt: 50, // 当数据大于指定数量时自动触发启用虚拟滚动
},
},
grid: {
size: vxeSize,
toolbarConfig: {
size: vxeSize, // 尺寸 medium, small, mini
perfect: false, // 配套的样式
},
zoomConfig: { escRestore: true }, // 是否允许通过按下 ESC 键还原
},
pager: {
size: vxeSize,
background: true, // 带背景颜色
perfect: false, // 配套的样式
autoHidden: false, // 当只有一页时自动隐藏
pageSize: 50, // 每页大小
pagerCount: 10, // 显示页码按钮的数量
pageSizes: [50, 100, 200, 500, 1000, 2000], // 每页大小选项列表
layouts: ['PrevJump', 'PrevPage', 'JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'PageCount', 'Total'], // 自定义布局
},
});
// 安装UI组件
app.use(VxeUI);
app.use(VxeUITable);
// 给 vue 实例挂载内部对象,例如:
// app.config.globalProperties.$XModal = VxeUI.modal
// app.config.globalProperties.$XPrint = VxeUI.print
// app.config.globalProperties.$XSaveFile = VxeUI.saveFile
// app.config.globalProperties.$XReadFile = VxeUI.readFile
};