| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import type { SetupVxeTable } from "./types";
- import { defineComponent, watch } from "vue";
- import { usePreferences } from "@vben/preferences";
- import { injectPluginsOptions } from "../plugins-context";
- import {
- VxeButton,
- VxeCheckbox,
- VxeIcon,
- VxeInput,
- VxeLoading,
- VxeModal,
- VxeNumberInput,
- VxePager,
- VxeRadioGroup,
- VxeSelect,
- VxeTooltip,
- VxeUI,
- VxeUpload
- } from "vxe-pc-ui";
- import enUS from "vxe-pc-ui/lib/language/en-US";
- // 导入默认的语言
- import zhCN from "vxe-pc-ui/lib/language/zh-CN";
- import { VxeColgroup, VxeColumn, VxeGrid, VxeTable, VxeToolbar } from "vxe-table";
- import { extendsDefaultFormatter } from "./extends";
- // 是否加载过
- let isInit = false;
- let tableFormFactory: ((...args: any[]) => any) | undefined;
- function normalizeVxeLocale<T extends Record<string, any>>(localeModule: T) {
- return (
- localeModule &&
- typeof localeModule === 'object' &&
- 'default' in localeModule
- ? localeModule.default
- : localeModule
- ) as T;
- }
- export function useTableForm(...args: any[]) {
- const pluginsOptions = injectPluginsOptions();
- const contextFormFactory = pluginsOptions?.form?.useVbenForm;
- const factory = tableFormFactory || contextFormFactory;
- if (!factory) {
- throw new Error(
- 'useTableForm is not initialized. Please provide useVbenForm via setupVbenVxeTable() or providePluginsOptions()',
- );
- }
- return factory(...args);
- }
- // 部分组件,如果没注册,vxe-table 会报错,这里实际没用组件,只是为了不报错,同时可以减少打包体积
- const createVirtualComponent = (name = '') => {
- return defineComponent({
- name,
- });
- };
- export function initVxeTable() {
- if (isInit) {
- return;
- }
- VxeUI.component(VxeTable);
- VxeUI.component(VxeColumn);
- VxeUI.component(VxeColgroup);
- VxeUI.component(VxeGrid);
- VxeUI.component(VxeToolbar);
- VxeUI.component(VxeButton);
- // VxeUI.component(VxeButtonGroup);
- VxeUI.component(VxeCheckbox);
- // VxeUI.component(VxeCheckboxGroup);
- VxeUI.component(createVirtualComponent('VxeForm'));
- // VxeUI.component(VxeFormGather);
- // VxeUI.component(VxeFormItem);
- VxeUI.component(VxeIcon);
- VxeUI.component(VxeInput);
- // VxeUI.component(VxeList);
- VxeUI.component(VxeLoading);
- VxeUI.component(VxeModal);
- VxeUI.component(VxeNumberInput);
- // VxeUI.component(VxeOptgroup);
- // VxeUI.component(VxeOption);
- VxeUI.component(VxePager);
- // VxeUI.component(VxePulldown);
- // VxeUI.component(VxeRadio);
- // VxeUI.component(VxeRadioButton);
- VxeUI.component(VxeRadioGroup);
- VxeUI.component(VxeSelect);
- // VxeUI.component(VxeSwitch);
- // VxeUI.component(VxeTextarea);
- VxeUI.component(VxeTooltip);
- VxeUI.component(VxeUpload);
- isInit = true;
- }
- export function setupVbenVxeTable(setupOptions: SetupVxeTable) {
- const { configVxeTable, useVbenForm: useVbenFormFromParam } = setupOptions;
- initVxeTable();
- // 优先使用参数传入的 useVbenForm,context 注入在 useTableForm 中获取
- if (useVbenFormFromParam) {
- tableFormFactory = useVbenFormFromParam;
- }
- const { isDark, locale } = usePreferences();
- const localMap = {
- 'zh-CN': normalizeVxeLocale(zhCN),
- 'en-US': normalizeVxeLocale(enUS),
- };
- watch(
- [() => isDark.value, () => locale.value],
- ([isDarkValue, localeValue]) => {
- VxeUI.setTheme(isDarkValue ? 'dark' : 'light');
- VxeUI.setI18n(localeValue, localMap[localeValue]);
- VxeUI.setLanguage(localeValue);
- },
- {
- immediate: true,
- },
- );
- extendsDefaultFormatter(VxeUI);
- configVxeTable(VxeUI);
- }
|