init.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import type { SetupVxeTable } from './types';
  2. import { defineComponent, watch } from 'vue';
  3. import { usePreferences } from '@vben/preferences';
  4. import { useVbenForm } from '@vben-core/form-ui';
  5. import {
  6. VxeButton,
  7. VxeCheckbox,
  8. // VxeFormGather,
  9. // VxeForm,
  10. // VxeFormItem,
  11. VxeIcon,
  12. VxeInput,
  13. VxeLoading,
  14. VxeModal,
  15. VxeNumberInput,
  16. VxePager,
  17. // VxeList,
  18. // VxeModal,
  19. // VxeOptgroup,
  20. // VxeOption,
  21. // VxePulldown,
  22. // VxeRadio,
  23. // VxeRadioButton,
  24. VxeRadioGroup,
  25. VxeSelect,
  26. VxeTooltip,
  27. VxeUI,
  28. VxeUpload,
  29. // VxeSwitch,
  30. // VxeTextarea,
  31. } from 'vxe-pc-ui';
  32. import enUS from 'vxe-pc-ui/lib/language/en-US';
  33. // 导入默认的语言
  34. import zhCN from 'vxe-pc-ui/lib/language/zh-CN';
  35. import {
  36. VxeColgroup,
  37. VxeColumn,
  38. VxeGrid,
  39. VxeTable,
  40. VxeToolbar,
  41. } from 'vxe-table';
  42. import { extendsDefaultFormatter } from './extends';
  43. // 是否加载过
  44. let isInit = false;
  45. // eslint-disable-next-line import/no-mutable-exports
  46. export let useTableForm: typeof useVbenForm;
  47. // 部分组件,如果没注册,vxe-table 会报错,这里实际没用组件,只是为了不报错,同时可以减少打包体积
  48. const createVirtualComponent = (name = '') => {
  49. return defineComponent({
  50. name,
  51. });
  52. };
  53. export function initVxeTable() {
  54. if (isInit) {
  55. return;
  56. }
  57. VxeUI.component(VxeTable);
  58. VxeUI.component(VxeColumn);
  59. VxeUI.component(VxeColgroup);
  60. VxeUI.component(VxeGrid);
  61. VxeUI.component(VxeToolbar);
  62. VxeUI.component(VxeButton);
  63. // VxeUI.component(VxeButtonGroup);
  64. VxeUI.component(VxeCheckbox);
  65. // VxeUI.component(VxeCheckboxGroup);
  66. VxeUI.component(createVirtualComponent('VxeForm'));
  67. // VxeUI.component(VxeFormGather);
  68. // VxeUI.component(VxeFormItem);
  69. VxeUI.component(VxeIcon);
  70. VxeUI.component(VxeInput);
  71. // VxeUI.component(VxeList);
  72. VxeUI.component(VxeLoading);
  73. VxeUI.component(VxeModal);
  74. VxeUI.component(VxeNumberInput);
  75. // VxeUI.component(VxeOptgroup);
  76. // VxeUI.component(VxeOption);
  77. VxeUI.component(VxePager);
  78. // VxeUI.component(VxePulldown);
  79. // VxeUI.component(VxeRadio);
  80. // VxeUI.component(VxeRadioButton);
  81. VxeUI.component(VxeRadioGroup);
  82. VxeUI.component(VxeSelect);
  83. // VxeUI.component(VxeSwitch);
  84. // VxeUI.component(VxeTextarea);
  85. VxeUI.component(VxeTooltip);
  86. VxeUI.component(VxeUpload);
  87. isInit = true;
  88. }
  89. export function setupVbenVxeTable(setupOptions: SetupVxeTable) {
  90. const { configVxeTable, useVbenForm } = setupOptions;
  91. initVxeTable();
  92. useTableForm = useVbenForm;
  93. const { isDark, locale } = usePreferences();
  94. const localMap = {
  95. 'zh-CN': zhCN,
  96. 'en-US': enUS,
  97. };
  98. watch(
  99. [() => isDark.value, () => locale.value],
  100. ([isDarkValue, localeValue]) => {
  101. VxeUI.setTheme(isDarkValue ? 'dark' : 'light');
  102. VxeUI.setI18n(localeValue, localMap[localeValue]);
  103. VxeUI.setLanguage(localeValue);
  104. },
  105. {
  106. immediate: true,
  107. },
  108. );
  109. extendsDefaultFormatter(VxeUI);
  110. configVxeTable(VxeUI);
  111. }