@gx-design-vue/pro-table 0.2.0-alpha.8 → 0.2.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/ProTable.d.ts +14 -492
  2. package/dist/ProTable.js +818 -518
  3. package/dist/components/ScrollBar/Bar.d.ts +81 -0
  4. package/dist/components/ScrollBar/Bar.js +84 -0
  5. package/dist/components/ScrollBar/Thumb.d.ts +52 -0
  6. package/dist/components/ScrollBar/{Thumb/index.js → Thumb.js} +67 -55
  7. package/dist/components/ScrollBar/context.d.ts +3 -4
  8. package/dist/components/ScrollBar/context.js +3 -3
  9. package/dist/components/ScrollBar/util.d.ts +6 -5
  10. package/dist/components/ScrollBar/util.js +1 -12
  11. package/dist/components/SearchForm/CollapseToggle.d.ts +55 -0
  12. package/dist/components/SearchForm/CollapseToggle.js +47 -0
  13. package/dist/components/SearchForm/FormItemContainer.d.ts +75 -0
  14. package/dist/components/SearchForm/FormItemContainer.js +225 -0
  15. package/dist/components/SearchForm/FormItemWrapper.d.ts +82 -0
  16. package/dist/components/SearchForm/FormItemWrapper.js +62 -0
  17. package/dist/components/SearchForm/SearchForm.d.ts +130 -0
  18. package/dist/components/SearchForm/SearchForm.js +319 -0
  19. package/dist/components/SearchForm/index.d.ts +2 -0
  20. package/dist/components/SearchForm/index.js +2 -0
  21. package/dist/components/Toolbar/FullscreenIcon.d.ts +26 -0
  22. package/dist/components/Toolbar/FullscreenIcon.js +22 -0
  23. package/dist/components/Toolbar/ListToolBar.d.ts +111 -0
  24. package/dist/components/Toolbar/ListToolBar.js +101 -0
  25. package/dist/components/Toolbar/index.d.ts +103 -0
  26. package/dist/components/Toolbar/index.js +101 -0
  27. package/dist/components/Toolbar/style.d.ts +8 -0
  28. package/dist/components/{ListToolBar → Toolbar}/style.js +32 -27
  29. package/dist/context/TableContext.d.ts +15 -27
  30. package/dist/context/TableContext.js +3 -3
  31. package/dist/hooks/index.d.ts +16 -0
  32. package/dist/hooks/index.js +16 -0
  33. package/dist/hooks/useBreakpoints.d.ts +13 -0
  34. package/dist/hooks/useBreakpoints.js +57 -0
  35. package/dist/hooks/useCellRender.d.ts +13 -0
  36. package/dist/hooks/useCellRender.js +28 -0
  37. package/dist/hooks/useColumnResize.d.ts +30 -0
  38. package/dist/hooks/useColumnResize.js +110 -0
  39. package/dist/hooks/useColumns.d.ts +35 -24
  40. package/dist/hooks/useColumns.js +89 -56
  41. package/dist/hooks/useFetchData.d.ts +40 -65
  42. package/dist/hooks/useFetchData.js +157 -172
  43. package/dist/hooks/useFitPage.d.ts +19 -0
  44. package/dist/hooks/useFitPage.js +90 -0
  45. package/dist/hooks/useKeepAliveReload.d.ts +21 -0
  46. package/dist/hooks/useKeepAliveReload.js +24 -0
  47. package/dist/hooks/useLoading.d.ts +18 -7
  48. package/dist/hooks/useLoading.js +26 -8
  49. package/dist/hooks/usePagination.d.ts +10 -7
  50. package/dist/hooks/usePagination.js +37 -26
  51. package/dist/hooks/useRequestOptions.d.ts +18 -0
  52. package/dist/hooks/useRequestOptions.js +39 -0
  53. package/dist/hooks/useRowSelection.d.ts +27 -15
  54. package/dist/hooks/useRowSelection.js +92 -77
  55. package/dist/hooks/useTable.d.ts +19 -77
  56. package/dist/hooks/useTable.js +66 -54
  57. package/dist/hooks/useTableForm.d.ts +15 -83
  58. package/dist/hooks/useTableForm.js +93 -57
  59. package/dist/hooks/useTableScroll.d.ts +33 -31
  60. package/dist/hooks/useTableScroll.js +71 -26
  61. package/dist/hooks/useTableSize.d.ts +17 -7
  62. package/dist/hooks/useTableSize.js +20 -6
  63. package/dist/index.d.ts +10 -7
  64. package/dist/index.js +9 -3
  65. package/dist/interface.d.ts +492 -0
  66. package/dist/pro-table.esm.js +3512 -3965
  67. package/dist/pro-table.js +1 -1
  68. package/dist/style/fit-page.d.ts +4 -2
  69. package/dist/style/fit-page.js +9 -3
  70. package/dist/style/index.d.ts +4 -6
  71. package/dist/style/index.js +24 -74
  72. package/dist/style/list.d.ts +4 -2
  73. package/dist/style/list.js +1 -10
  74. package/dist/style/resizable.d.ts +8 -0
  75. package/dist/style/resizable.js +18 -0
  76. package/dist/style/scroll.d.ts +4 -2
  77. package/dist/style/scroll.js +8 -6
  78. package/dist/style/search.d.ts +8 -0
  79. package/dist/{components/Form/style.js → style/search.js} +22 -8
  80. package/dist/theme/augment.d.ts +8 -0
  81. package/dist/theme/interface/components.d.ts +8 -0
  82. package/dist/utils/dateFormat.d.ts +9 -0
  83. package/dist/utils/dateFormat.js +29 -0
  84. package/dist/utils/formConstants.d.ts +9 -0
  85. package/dist/utils/formConstants.js +29 -0
  86. package/dist/utils/valueFormat.d.ts +9 -0
  87. package/dist/utils/valueFormat.js +27 -0
  88. package/package.json +10 -9
  89. package/dist/components/Form/components/RequestSelect.d.ts +0 -50
  90. package/dist/components/Form/components/RequestSelect.js +0 -56
  91. package/dist/components/Form/hooks/useForm.d.ts +0 -11
  92. package/dist/components/Form/hooks/useForm.js +0 -30
  93. package/dist/components/Form/index.d.ts +0 -32
  94. package/dist/components/Form/index.js +0 -504
  95. package/dist/components/Form/style.d.ts +0 -6
  96. package/dist/components/Form/utils/config.d.ts +0 -9
  97. package/dist/components/Form/utils/config.js +0 -29
  98. package/dist/components/Form/utils/dateFormat.d.ts +0 -22
  99. package/dist/components/Form/utils/dateFormat.js +0 -43
  100. package/dist/components/ListToolBar/index.d.ts +0 -59
  101. package/dist/components/ListToolBar/index.js +0 -123
  102. package/dist/components/ListToolBar/style.d.ts +0 -6
  103. package/dist/components/ScrollBar/Bar/index.d.ts +0 -49
  104. package/dist/components/ScrollBar/Bar/index.js +0 -68
  105. package/dist/components/ScrollBar/Bar/props.d.ts +0 -25
  106. package/dist/components/ScrollBar/Bar/props.js +0 -17
  107. package/dist/components/ScrollBar/Thumb/index.d.ts +0 -40
  108. package/dist/components/ScrollBar/Thumb/props.d.ts +0 -20
  109. package/dist/components/ScrollBar/Thumb/props.js +0 -17
  110. package/dist/components/TableCell/index.d.ts +0 -37
  111. package/dist/components/TableCell/index.js +0 -69
  112. package/dist/components/ToolBar/FullscreenIcon.d.ts +0 -7
  113. package/dist/components/ToolBar/FullscreenIcon.js +0 -11
  114. package/dist/components/ToolBar/index.d.ts +0 -34
  115. package/dist/components/ToolBar/index.js +0 -97
  116. package/dist/hooks/tryOnActivated.d.ts +0 -6
  117. package/dist/hooks/tryOnActivated.js +0 -12
  118. package/dist/hooks/useDebounceFn.d.ts +0 -8
  119. package/dist/hooks/useDebounceFn.js +0 -31
  120. package/dist/hooks/useScrollArea.d.ts +0 -24
  121. package/dist/hooks/useScrollArea.js +0 -102
  122. package/dist/props.d.ts +0 -340
  123. package/dist/props.js +0 -247
  124. package/dist/types/ColumnTypings.d.ts +0 -130
  125. package/dist/types/SlotsTypings.d.ts +0 -63
  126. package/dist/types/SlotsTypings.js +0 -12
  127. package/dist/types/TableTypings.d.ts +0 -359
  128. package/dist/types/index.d.ts +0 -9
  129. package/dist/utils/utils.d.ts +0 -10
  130. package/dist/utils/utils.js +0 -89
  131. /package/dist/{types/ColumnTypings.js → interface.js} +0 -0
  132. /package/dist/{types/TableTypings.js → theme/augment.js} +0 -0
  133. /package/dist/{types/index.js → theme/interface/components.js} +0 -0
package/dist/ProTable.js CHANGED
@@ -1,539 +1,839 @@
1
- import { provideTableContext } from "./context/TableContext.js";
2
- import { proTableProps, tableProps } from "./props.js";
3
- import ProTableForm from "./components/Form/index.js";
4
- import { genListToolBarStyle } from "./components/ListToolBar/style.js";
5
- import Bar from "./components/ScrollBar/Bar/index.js";
6
- import TableCell from "./components/TableCell/index.js";
7
- import ToolbarRender from "./components/ToolBar/index.js";
8
- import { tryOnActivated } from "./hooks/tryOnActivated.js";
9
- import { useColumns } from "./hooks/useColumns.js";
10
- import { useConfigFetchData, useFetchData } from "./hooks/useFetchData.js";
1
+ import Bar_default from "./components/ScrollBar/Bar.js";
2
+ import { useProBreakpoints } from "./hooks/useBreakpoints.js";
3
+ import ProTableSearchForm from "./components/SearchForm/SearchForm.js";
4
+ import "./components/SearchForm/index.js";
5
+ import { useProvideTableContext } from "./context/TableContext.js";
6
+ import { Toolbar } from "./components/Toolbar/index.js";
7
+ import { useCellRender } from "./hooks/useCellRender.js";
8
+ import { applyIndexColumn, useColumns } from "./hooks/useColumns.js";
9
+ import { useColumnResize } from "./hooks/useColumnResize.js";
10
+ import { useFetchData } from "./hooks/useFetchData.js";
11
+ import { useFitPage } from "./hooks/useFitPage.js";
12
+ import { useKeepAliveReload } from "./hooks/useKeepAliveReload.js";
11
13
  import { useLoading } from "./hooks/useLoading.js";
12
14
  import { usePagination } from "./hooks/usePagination.js";
13
15
  import { useRowSelection } from "./hooks/useRowSelection.js";
14
- import { getCurrentData, valueFormat } from "./utils/utils.js";
15
- import { useScrollArea } from "./hooks/useScrollArea.js";
16
16
  import { useTableForm } from "./hooks/useTableForm.js";
17
17
  import { useTableScroll } from "./hooks/useTableScroll.js";
18
18
  import { useTableSize } from "./hooks/useTableSize.js";
19
- import { genProTableFitPage } from "./style/fit-page.js";
20
- import { genProTableList } from "./style/list.js";
21
- import { genProTableScroll } from "./style/scroll.js";
22
- import { genProTableStyle } from "./style/index.js";
23
- import { Fragment, Teleport, cloneVNode, computed, createVNode, defineComponent, h, isVNode, mergeProps, ref, toRaw, toRef, unref, watchEffect } from "vue";
19
+ import "./hooks/index.js";
20
+ import style_default from "./style/index.js";
21
+ import { Fragment, Teleport, computed, createVNode, defineComponent, mergeDefaults, mergeProps, ref, toRef, watch } from "vue";
24
22
  import { useProAppContext } from "@gx-design-vue/pro-app";
25
- import { useBreakpoint } from "@gx-design-vue/pro-hooks";
26
- import { unit, useProStyle } from "@gx-design-vue/pro-provider";
27
- import { classNames, cloneDeep, convertValueBoolean, deepMerge, filterEmpty, getPrefixCls, getRandomNumber, getSlot, getSlotVNode, getSlotsProps, handleEmptyField, handleShowIndex, isArray, isObject } from "@gx-design-vue/pro-utils";
28
- import { useFullscreen, useWindowSize } from "@vueuse/core";
29
- import { Empty, Pagination, Spin, Table } from "ant-design-vue";
30
- import { omit, pick } from "es-toolkit";
23
+ import { classNames, getSlotVNode } from "@gx-design-vue/pro-utils";
24
+ import { useFullscreen } from "@vueuse/core";
25
+ import { Pagination, Spin, Table } from "antdv-next";
26
+ import { useBaseConfig } from "antdv-next/config-provider/context";
27
+ import useCSSVarCls from "antdv-next/config-provider/hooks/useCSSVarCls";
31
28
  //#region src/ProTable.tsx
32
- const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
33
- const ProTable = /* @__PURE__ */ defineComponent({
34
- name: "GProTable",
35
- inheritAttrs: false,
36
- props: proTableProps,
37
- emits: [
38
- "reset",
39
- "reload",
40
- "submit",
41
- "sizeChange",
42
- "expandedRowsChange",
43
- "expand",
44
- "change",
45
- "requestError",
46
- "columnsStateChange",
47
- "loadingChange"
48
- ],
49
- slots: Object,
50
- setup(props, { emit, slots, expose }) {
51
- const baseClassName = getPrefixCls({
52
- suffixCls: "table",
53
- isPor: true
54
- });
55
- const { wrapSSR, hashId } = useProStyle("ProBaseTable", [
56
- genProTableStyle,
57
- genProTableScroll,
58
- genProTableFitPage,
59
- genProTableList,
60
- genListToolBarStyle
61
- ], baseClassName);
62
- const screens = useBreakpoint();
63
- const { width: screenWidth } = useWindowSize();
64
- const activated = ref(false);
65
- const appContext = useProAppContext();
66
- const tableRef = ref();
67
- const tableFormRef = ref();
68
- const waitRequest = ref(props.waitRequest);
69
- watchEffect(() => waitRequest.value = props.waitRequest);
70
- const { toggle, isFullscreen } = useFullscreen(tableRef);
71
- const isMobile = computed(() => !screens.value.xl);
72
- const formRef = computed(() => {
73
- if (props.form === false) return false;
74
- const defaultConfig = {
75
- actions: { resetReload: true },
76
- autoRequest: false,
77
- span: {
78
- xxl: 5,
79
- xl: 5,
80
- lg: 3
81
- },
82
- resetText: "重置",
83
- searchText: "查询"
84
- };
85
- if (isObject(props.form)) return deepMerge(defaultConfig, props.form);
86
- return defaultConfig;
87
- });
88
- const formConfig = computed(() => formRef.value === false ? {} : formRef.value);
89
- const formAutoRequest = computed(() => formConfig.value?.autoRequest ?? props.autoRequest);
90
- const formActions = computed(() => formConfig.value?.actions);
91
- const cacheColumns = computed(() => {
92
- function initColumns(data) {
93
- return data.filter((item) => item.key || item.dataIndex).filter((item) => item.show ?? true).map((item, order) => {
94
- const key = item.key || item.dataIndex;
95
- item.key = key;
96
- item.order = order;
97
- item.dataIndex = key;
98
- item.align = item.align || props.align || "left";
99
- item.uuid = item.uuid || getRandomNumber().uuid(15);
100
- if (item.children) item.children = initColumns(item.children);
101
- return item;
102
- });
103
- }
104
- return handleShowIndex(initColumns(cloneDeep(props.columns || [])), {
105
- align: props.align || "left",
106
- showIndex: props.showIndex ?? false
107
- });
29
+ const defaults = {
30
+ rowKey: "id",
31
+ align: "left",
32
+ columns: [],
33
+ dataSource: [],
34
+ pagination: void 0,
35
+ params: {},
36
+ waitRequest: false,
37
+ immediate: true,
38
+ autoRequest: true,
39
+ debounceTime: 10,
40
+ polling: false,
41
+ pollingTime: 2e3,
42
+ showLoading: true,
43
+ keepAliveReload: false
44
+ };
45
+ const TABLE_PASSTHROUGH_KEYS = [
46
+ "bordered",
47
+ "expandable",
48
+ "showHeader",
49
+ "showSorterTooltip",
50
+ "sortDirections",
51
+ "sticky",
52
+ "tableLayout",
53
+ "virtual",
54
+ "locale",
55
+ "getPopupContainer",
56
+ "dropdownPrefixCls",
57
+ "rowClassName",
58
+ "rowHoverable",
59
+ "rootClass",
60
+ "prefixCls",
61
+ "classes",
62
+ "styles"
63
+ ];
64
+ const ForwardProTable = /* @__PURE__ */ defineComponent((props, { attrs, slots, emit, expose }) => {
65
+ const { prefixCls } = useBaseConfig("pro-table", props);
66
+ const rootCls = useCSSVarCls(prefixCls);
67
+ const [hashId, cssVarCls] = style_default(prefixCls, rootCls);
68
+ const appContext = useProAppContext();
69
+ const rootEl = ref();
70
+ const { toggle: toggleFullscreen, isFullscreen } = useFullscreen(rootEl);
71
+ watch(isFullscreen, (val) => {
72
+ emit("fullscreenChange", val);
73
+ });
74
+ const rootClassNames = computed(() => {
75
+ return classNames(prefixCls.value, hashId.value, cssVarCls.value, rootCls.value, attrs.class, props.proClasses?.root, fullPageClass.value);
76
+ });
77
+ const mergedStyle = computed(() => {
78
+ return [props.proStyles?.root, attrs.style];
79
+ });
80
+ const { isMobile, screenWidth, screens } = useProBreakpoints();
81
+ const { paginationInfo, paginationAlign, requestPagination, setPagination } = usePagination({ pagination: toRef(props, "pagination") });
82
+ const { tableSize, setTableSize } = useTableSize({
83
+ size: computed(() => props.size),
84
+ onChange: (s) => emit("sizeChange", s)
85
+ });
86
+ const { loading: internalLoading, setLoading } = useLoading({
87
+ loading: computed(() => props.loading),
88
+ onChange: (val) => props.onLoadingChange?.(val)
89
+ });
90
+ const { selectedRowKeys, selectedItems, mergedRowSelection, select: selectRow, selectAll: selectAllRows, remove: removeSelectedKeys, clear: clearSelectedKeys, sync: syncSelectedRows } = useRowSelection({
91
+ rowKey: computed(() => props.rowKey),
92
+ rowSelection: computed(() => props.rowSelection),
93
+ dataSource: computed(() => props.dataSource ?? [])
94
+ });
95
+ const columnsForScroll = computed(() => {
96
+ return applyIndexColumn(props.columns ?? [], props.indexColumn, props.align ?? "left");
97
+ });
98
+ const { tableScroll: policyTableScroll, shouldFixActionColumn } = useTableScroll({
99
+ scroll: computed(() => props.scroll),
100
+ columns: columnsForScroll,
101
+ rowSelection: computed(() => props.rowSelection),
102
+ screens,
103
+ screenWidth,
104
+ scrollPolicy: computed(() => props.scrollPolicy)
105
+ });
106
+ const { tableColumns, cacheColumns, setColumns } = useColumns({
107
+ columns: computed(() => props.columns ?? []),
108
+ align: computed(() => props.align ?? "left"),
109
+ indexColumn: computed(() => props.indexColumn),
110
+ shouldFixActionColumn,
111
+ wrapColumnRender: useCellRender({
112
+ columnEmptyText: computed(() => props.columnEmptyText),
113
+ prefixCls
114
+ }).wrapColumnRender
115
+ });
116
+ const { resizableColumns, resizableComponents } = useColumnResize({
117
+ columns: tableColumns,
118
+ onResize: (w, col) => emit("resizeColumn", w, col)
119
+ });
120
+ const formConfig = computed(() => props.form === false ? void 0 : props.form);
121
+ const formAutoRequest = computed(() => {
122
+ if (props.form === false) return props.autoRequest ?? true;
123
+ return props.form?.autoRequest ?? props.autoRequest ?? true;
124
+ });
125
+ const formActions = computed(() => {
126
+ if (props.form === false) return void 0;
127
+ return props.form?.actions;
128
+ });
129
+ const { formColumns, defaultFormSearch, formState, getFormSearch, resetFormState } = useTableForm({
130
+ searchMap: computed(() => props.searchMap ?? []),
131
+ columns: computed(() => props.columns ?? [])
132
+ });
133
+ const { dataSource, setTableDataList, operateTableDataRow, handleTableChange, reload, run } = useFetchData({
134
+ rowKey: computed(() => props.rowKey),
135
+ polling: computed(() => props.polling ?? false),
136
+ pollingTime: computed(() => props.pollingTime ?? 2e3),
137
+ request: props.request,
138
+ postData: props.postData,
139
+ dataSource: computed(() => props.dataSource),
140
+ immediate: computed(() => props.immediate ?? true),
141
+ waitRequest: computed(() => props.waitRequest ?? false),
142
+ autoRequest: computed(() => props.autoRequest ?? true),
143
+ debounceTime: computed(() => props.debounceTime ?? 10),
144
+ params: computed(() => props.params),
145
+ defaultFormSearch,
146
+ onLoadingChange: props.onLoadingChange,
147
+ onRequestError: props.onRequestError,
148
+ onBeforeSearchSubmit: props.onBeforeSearchSubmit
149
+ }, {
150
+ pageInfo: requestPagination,
151
+ paginationInfo,
152
+ setPagination,
153
+ setLoading,
154
+ setColumns,
155
+ removeRowKeys: removeSelectedKeys,
156
+ syncSelectedRows,
157
+ columns: cacheColumns
158
+ });
159
+ useKeepAliveReload({
160
+ enabled: computed(() => props.keepAliveReload ?? false),
161
+ reload
162
+ });
163
+ const cardEl = ref();
164
+ const { scrollY: fitPageScrollY, overflowHidden, fullPageClass, scrollEl, barRef } = useFitPage({
165
+ fitPage: computed(() => !policyTableScroll.value?.y && !!props.fitPage),
166
+ cardEl,
167
+ prefixCls
168
+ });
169
+ const tableScroll = computed(() => ({
170
+ ...policyTableScroll.value ?? {},
171
+ ...fitPageScrollY.value > 0 ? { y: fitPageScrollY.value } : {}
172
+ }));
173
+ useProvideTableContext({
174
+ reload,
175
+ setPagination,
176
+ tableSize,
177
+ setTableSize,
178
+ formAutoRequest,
179
+ formConfig,
180
+ formActions,
181
+ isMobile,
182
+ screenWidth,
183
+ toggleFullscreen,
184
+ isFullscreen
185
+ });
186
+ const isCustomRenderMode = computed(() => !!(props.customRender || slots.customRender));
187
+ const shouldRenderForm = computed(() => {
188
+ if (props.form === false) return false;
189
+ return formColumns.value.length > 0 || !!slots.form;
190
+ });
191
+ function handleTableSubmit(params, action) {
192
+ if (formAutoRequest.value) {
193
+ reload({ params });
194
+ return;
195
+ }
196
+ if (action === "reset") {
197
+ emit("reset", params);
198
+ if (props.request && formActions.value?.resetReload) reload({ params });
199
+ } else if (props.request) {
200
+ emit("submit", params);
201
+ reload({ params });
202
+ }
203
+ }
204
+ function sliceCurrentPageData(fullData) {
205
+ const pagination = paginationInfo.value;
206
+ if (!pagination) return fullData;
207
+ const { current = 1, pageSize = 10 } = pagination;
208
+ return fullData.filter((_, index) => index >= (current - 1) * pageSize && index < current * pageSize);
209
+ }
210
+ function renderCustomContent() {
211
+ const customRenderFn = props.customRender || slots.customRender;
212
+ if (!customRenderFn) return null;
213
+ const tableData = dataSource.value;
214
+ if (!tableData?.length) return renderEmptyText();
215
+ if (typeof customRenderFn === "function") return customRenderFn({
216
+ dataSource: tableData,
217
+ currentData: sliceCurrentPageData(tableData)
108
218
  });
109
- /**
110
- * @Author gx12358
111
- * @DateTime 2022/1/21
112
- * @lastTime 2022/1/21
113
- * @description Table-loading hooks 方法
114
- */
115
- const [loading, setLoading] = useLoading({
116
- loading: toRef(props, "loading"),
117
- onChange: (value) => {
118
- props.onLoadingChange && props.onLoadingChange(value);
119
- }
219
+ return null;
220
+ }
221
+ function renderEmptyText() {
222
+ const emptyTextSlot = getSlotVNode({
223
+ slots,
224
+ props,
225
+ key: "emptyText"
120
226
  });
121
- /**
122
- * @Author gx12358
123
- * @DateTime 2022/1/21
124
- * @lastTime 2022/1/21
125
- * @description Table-size hooks 方法
126
- */
127
- const [tableSize, setTableSize] = useTableSize({
128
- size: toRef(props, "size"),
129
- onChange: (value) => {
130
- props.onSizeChange && props.onSizeChange(value);
227
+ if (emptyTextSlot !== false && appContext?.emptyText?.value !== false) return emptyTextSlot || appContext?.emptyText?.value;
228
+ return null;
229
+ }
230
+ function onCustomPaginationChange(currentPage, currentPageSize) {
231
+ onTableChange({
232
+ current: currentPage,
233
+ pageSize: currentPageSize
234
+ }, {}, {}, {});
235
+ }
236
+ const loadingState = computed(() => {
237
+ if (props.showLoading === false) return false;
238
+ return internalLoading.value;
239
+ });
240
+ const passThroughProps = computed(() => {
241
+ const result = {};
242
+ for (const key of TABLE_PASSTHROUGH_KEYS) {
243
+ if (key === "classes") {
244
+ const userClasses = props.classes;
245
+ const tableClass = props.proClasses?.table;
246
+ if (userClasses || tableClass) result.classes = {
247
+ ...userClasses ?? {},
248
+ ...tableClass ? { root: classNames(userClasses?.root, tableClass) } : {}
249
+ };
250
+ continue;
131
251
  }
252
+ const val = props[key];
253
+ if (val !== void 0) result[key] = val;
254
+ }
255
+ return result;
256
+ });
257
+ function onTableChange(paginationConfig, filters, sorter, extra) {
258
+ handleTableChange(paginationConfig, filters, sorter, extra);
259
+ props.onChange?.(paginationConfig, filters, sorter, extra);
260
+ }
261
+ function onTableExpandedRowKeysChange(keys) {
262
+ emit("update:expandedRowKeys", keys);
263
+ }
264
+ function onTableScroll(e) {
265
+ emit("scroll", e);
266
+ }
267
+ const passthroughSlotKeys = [
268
+ "title",
269
+ "footer",
270
+ "summary",
271
+ "expandIcon",
272
+ "expandedRowRender",
273
+ "filterDropdown",
274
+ "filterIcon"
275
+ ];
276
+ const tableSlots = computed(() => {
277
+ const result = {};
278
+ for (const key of passthroughSlotKeys) if (slots[key]) result[key] = slots[key];
279
+ if (slots.bodyCell) result.bodyCell = (ctx) => slots.bodyCell(ctx);
280
+ if (slots.headerCell) result.headerCell = (ctx) => slots.headerCell(ctx);
281
+ const emptyTextRender = getSlotVNode({
282
+ slots,
283
+ props,
284
+ key: "emptyText"
132
285
  });
133
- /**
134
- * @Author gx12358
135
- * @DateTime 2022/1/21
136
- * @lastTime 2022/1/21
137
- * @description Table-page hooks 方法
138
- */
139
- const { paginationInfo, requestPagination, setPagination } = usePagination({
140
- pagination: toRef(props, "pagination"),
141
- pageItemRender: getSlot({
142
- slots,
143
- props,
144
- key: "pageItemRender"
145
- })
146
- });
147
- /**
148
- * @Author gx12358
149
- * @DateTime 2022/1/21
150
- * @lastTime 2022/1/21
151
- * @description Table-scroll hooks 方法
152
- */
153
- const { proScroll, breakpoint } = useTableScroll({
154
- scroll: toRef(props, "scroll"),
155
- autoScroll: toRef(props, "autoScroll"),
156
- modalScroll: toRef(props, "modalScroll"),
157
- neverScroll: toRef(props, "neverScroll"),
158
- rowSelection: toRef(props, "rowSelection"),
159
- scrollBreakpoint: toRef(props, "scrollBreakpoint"),
160
- innerWidth: screenWidth,
161
- columns: cacheColumns,
162
- screens
163
- });
164
- /**
165
- * @Author gx12358
166
- * @DateTime 2022/1/21
167
- * @lastTime 2022/1/21
168
- * @description Table-columns hooks 方法
169
- */
170
- const { proColumns, setColumns, resizeColumnWidth } = useColumns({
171
- draggable: toRef(props, "draggable"),
172
- neverScroll: toRef(props, "neverScroll"),
173
- autoScroll: toRef(props, "autoScroll"),
174
- breakpoint,
175
- scroll: proScroll,
176
- columns: cacheColumns
177
- });
178
- /**
179
- * @Author gx12358
180
- * @DateTime 2022/1/21
181
- * @lastTime 2022/1/21
182
- * @description Table-setting columns hooks 方法
183
- */
184
- /**
185
- * @Author gx12358
186
- * @DateTime 2022/1/21
187
- * @lastTime 2022/1/21
188
- * @description Table-Form(搜索) hooks 方法
189
- */
190
- const { formCols, defaultFormSearch } = useTableForm({
191
- searchMap: toRef(props, "searchMap"),
192
- columns: cacheColumns
193
- });
194
- const { selectedKeys, selectedItems, changeRowKey, selectRowKey, selectAllRowKey, syncSelectedRows, removeRowKeys, clearAllRowKeys } = useRowSelection(toRef(props, "rowKey"), toRef(props, "rowSelection"));
195
- const { run, setTableDataList, operateTableDataRow, isTreeDataRef, dataSource, handleTableChange } = useFetchData({
196
- ...useConfigFetchData(props),
197
- waitRequest
198
- }, {
199
- loading,
200
- paginationInfo,
286
+ if (emptyTextRender || appContext?.emptyText?.value) result.emptyText = () => emptyTextRender || appContext?.emptyText?.value;
287
+ return result;
288
+ });
289
+ expose({
290
+ actionRef: () => ({
291
+ loading: internalLoading,
292
+ dataSource,
201
293
  pageInfo: requestPagination,
294
+ reload,
295
+ reloadAndReset: (options) => {
296
+ setPagination({ current: 1 });
297
+ resetFormState();
298
+ run();
299
+ options?.callBack?.();
300
+ },
202
301
  setPagination,
203
- removeRowKeys,
204
- syncSelectedRows,
302
+ setPageInfo: (pagination, filters, sorter, extra) => {
303
+ setPagination(pagination);
304
+ handleTableChange(pagination, filters ?? {}, sorter ?? {}, extra ?? {});
305
+ },
306
+ setTableDataList,
307
+ operateTableDataRow,
205
308
  setLoading,
206
- setColumns,
207
- columns: proColumns,
208
- defaultFormSearch,
209
- params: toRef(props, "params"),
210
- onRequestError: props.onRequestError,
211
- onBeforeSearchSubmit: props.onBeforeSearchSubmit,
212
- hasCustomRender: computed(() => convertValueBoolean(props.customRender || slots?.customRender))
213
- }, emit);
214
- const { tableCardEl, tableScrollYHeight, tableListToolsHeight, tableScrollEl, tableOverHidden, barRef } = useScrollArea({
215
- hashId,
216
- scroll: proScroll,
217
- baseClassName,
218
- fitPage: computed(() => proScroll.value?.y ? false : props.fitPage)
219
- });
220
- const tableScrollState = computed(() => {
221
- const fitScrollY = tableScrollYHeight.value && props.fitPage ? { y: tableScrollYHeight.value } : {};
222
- return {
223
- ...unref(proScroll),
224
- ...fitScrollY
225
- };
226
- });
227
- const tablePropsValues = computed(() => {
228
- return {
229
- ...omit(props, Object.keys(tableProps).concat([
230
- "style",
231
- "class",
232
- "loading",
233
- "rowKey",
234
- "transformCellText",
235
- "rowSelection",
236
- "onChange",
237
- "onExpandedRowsChange",
238
- "onExpand",
239
- "onResizeColumn"
240
- ])),
241
- size: unref(tableSize),
242
- scroll: unref(tableScrollState),
243
- dataSource: unref(dataSource),
244
- pagination: unref(paginationInfo),
245
- columns: unref(proColumns).filter((column) => column.show || column.show === void 0)
246
- };
247
- });
248
- const loadingState = computed(() => {
249
- const spinningProps = isObject(props.loading) ? omit(props.loading, ["spinning"]) : {};
250
- if (!spinningProps.indicator && appContext?.indicator?.value) spinningProps.indicator = appContext?.indicator?.value;
251
- return {
252
- spinning: props.showLoading ? convertValueBoolean(loading.value) : false,
253
- ...spinningProps
254
- };
255
- });
256
- const paginationPosition = computed(() => {
257
- let positionClass;
258
- const defaultPosition = props.direction === "rtl" ? "bottomLeft" : "right";
259
- const tablePosition = unref(paginationInfo)?.position;
260
- if (tablePosition !== null && Array.isArray(tablePosition)) {
261
- const topPos = tablePosition.find((p) => p.includes("top"));
262
- const bottomPos = tablePosition.find((p) => p.includes("bottom"));
263
- const isDisable = tablePosition.every((p) => `${p}` === "none");
264
- if (!topPos && !bottomPos && !isDisable) positionClass = defaultPosition;
265
- if (topPos) positionClass = topPos.toLowerCase().replace("top", "");
266
- if (bottomPos) positionClass = bottomPos.toLowerCase().replace("bottom", "");
267
- } else positionClass = defaultPosition;
268
- return positionClass;
269
- });
270
- function getFormSearch() {
271
- const search = {
272
- ...toRaw(defaultFormSearch.value),
273
- ...tableFormRef.value?.getFormSearch()
274
- };
275
- return {
276
- ...search,
277
- ...omit(props.params || {}, Object.keys(search))
278
- };
279
- }
280
- function reload(info = {}) {
281
- run({
282
- ...info,
283
- params: deepMerge(getFormSearch(), info.params || {})
284
- });
285
- }
286
- tryOnActivated(() => {
287
- if (activated.value) {
288
- if (props.keepAliveReload) run({ params: getFormSearch() });
289
- } else activated.value = true;
290
- });
291
- const handleTableSubmit = async (value, action) => {
292
- if (formAutoRequest.value) {
293
- run({ params: value });
294
- return;
309
+ selectedKeys: selectedRowKeys,
310
+ selectedItems,
311
+ rowsSelection: {
312
+ clear: clearSelectedKeys,
313
+ select: selectRow,
314
+ selectAll: selectAllRows,
315
+ remove: removeSelectedKeys,
316
+ sync: syncSelectedRows
295
317
  }
296
- if (action === "reset") {
297
- emit("reset", value);
298
- if (props.request && formActions.value?.resetReload) run({ params: value });
299
- } else if (props.request) {
300
- emit("submit", value);
301
- run({ params: value });
318
+ }),
319
+ formRef: () => ({
320
+ getFormSearch,
321
+ getFormInnerState: () => formState.value,
322
+ restFormState: (callback) => {
323
+ resetFormState();
324
+ callback?.();
302
325
  }
303
- };
304
- /**
305
- * @Author gx12358
306
- * @DateTime 2021/7/14
307
- * @lastTime 2021/7/14
308
- * @description ant-table原始方法
309
- */
310
- const changePage = (pagination, filters, sorter, extra) => {
311
- handleTableChange(pagination, filters, sorter, extra);
312
- props.onChange?.(pagination, filters, sorter, extra);
313
- };
314
- const expandedRowsChange = (expandedRows) => props.onExpandedRowsChange?.(expandedRows);
315
- const expand = (expanded, record) => props.onExpand?.(expanded, record);
316
- const handleResizeColumn = (w, col) => {
317
- resizeColumnWidth(w, col);
318
- props.onResizeColumn?.(w, col);
319
- };
320
- function renderEmptyText() {
321
- const emptyTextRender = getSlotVNode({
322
- slots,
323
- props,
324
- key: "emptyText"
325
- });
326
- if (emptyTextRender !== false && appContext?.emptyText?.value !== false) {
327
- const extraProps = props.emptyTextProps?.extraProps || {};
328
- const emptyRender = emptyTextRender || appContext?.emptyText?.value;
329
- const isNode = isVNode(emptyRender);
330
- const customEmpty = isNode ? h(emptyRender, extraProps) : filterEmpty(isArray(emptyRender) ? emptyRender : [emptyRender]);
331
- return createVNode("div", {
332
- "class": classNames(`${baseClassName}-empty-text`, hashId.value, props.emptyTextProps?.class),
333
- "style": props.emptyTextProps?.style
334
- }, [isNode ? customEmpty : isArray(customEmpty) && customEmpty.length ? customEmpty.map((item) => cloneVNode(item, extraProps)) : createVNode(Empty, { "image": simpleImage }, null)]);
326
+ })
327
+ });
328
+ return () => {
329
+ const actionsRender = slots.actions?.() || props.actionProps?.actions;
330
+ return createVNode("div", {
331
+ "ref": rootEl,
332
+ "class": rootClassNames.value,
333
+ "style": mergedStyle.value
334
+ }, [createVNode("div", {
335
+ "class": classNames(props.proClasses?.content, `${prefixCls.value}-content`),
336
+ "style": props.proStyles?.content
337
+ }, [shouldRenderForm.value && createVNode(ProTableSearchForm, {
338
+ "prefixCls": prefixCls.value,
339
+ "formColumns": formColumns.value,
340
+ "formState": formState.value,
341
+ "defaultFormSearch": defaultFormSearch.value,
342
+ "formConfig": formConfig.value,
343
+ "formAutoRequest": formAutoRequest.value,
344
+ "formActions": formActions.value,
345
+ "loading": loadingState.value,
346
+ "cardBordered": props.cardBordered,
347
+ "proClasses": props.proClasses ?? {},
348
+ "proStyles": props.proStyles ?? {},
349
+ "onSearch": handleTableSubmit,
350
+ "onReset": (params) => emit("reset", params)
351
+ }, { default: () => [slots.form?.()] }), createVNode("div", {
352
+ "ref": cardEl,
353
+ "class": classNames(props.proClasses?.card, `${prefixCls.value}-card`, props.cardBordered && `${prefixCls.value}-card-border`),
354
+ "style": props.proStyles?.card
355
+ }, [createVNode(Toolbar, {
356
+ "prefixCls": prefixCls.value,
357
+ "options": props.options,
358
+ "titleTipText": props.titleTipText,
359
+ "actionsPlacement": props.actionProps?.placement,
360
+ "actions": actionsRender,
361
+ "headerTitle": slots.headerTitle?.() ?? props.headerTitle,
362
+ "headerTitleTip": slots.headerTitleTip?.() ?? props.headerTitleTip,
363
+ "listToolAfter": slots.listToolAfter?.() ?? props.listToolAfter,
364
+ "proClasses": props.proClasses ?? {},
365
+ "proStyles": props.proStyles ?? {}
366
+ }, null), isCustomRenderMode.value ? createVNode(Spin, { "spinning": !!loadingState.value }, { default: () => [createVNode("div", { "class": classNames(`${prefixCls.value}-list`, props.proClasses?.list) }, [createVNode("div", {
367
+ "class": classNames(`${prefixCls.value}-list-content`, props.proClasses?.listContent),
368
+ "style": props.proStyles?.listContent
369
+ }, [renderCustomContent()]), paginationInfo.value !== false && dataSource.value?.length > 0 && createVNode(Pagination, mergeProps(paginationInfo.value, {
370
+ "align": paginationAlign.value,
371
+ "class": classNames(`${prefixCls.value}-pagination`, props.proClasses?.pagination),
372
+ "style": props.proStyles?.pagination,
373
+ "onChange": onCustomPaginationChange
374
+ }), null)])] }) : createVNode(Fragment, null, [createVNode(Table, mergeProps(passThroughProps.value, {
375
+ "scroll": tableScroll.value,
376
+ "dataSource": dataSource.value,
377
+ "columns": props.draggable ? resizableColumns.value : tableColumns.value,
378
+ "components": props.draggable ? resizableComponents.value : passThroughProps.value.components,
379
+ "rowKey": props.rowKey,
380
+ "size": tableSize.value,
381
+ "pagination": paginationInfo.value,
382
+ "loading": loadingState.value,
383
+ "rowSelection": mergedRowSelection.value,
384
+ "onChange": onTableChange,
385
+ "onUpdate:expandedRowKeys": onTableExpandedRowKeysChange,
386
+ "onScroll": onTableScroll,
387
+ "classes": {
388
+ ...passThroughProps.value.classes,
389
+ ...overflowHidden.value ? { root: `${prefixCls.value}-overflow-hidden` } : {}
335
390
  }
336
- return null;
391
+ }), tableSlots.value), scrollEl.value && createVNode(Teleport, { "to": scrollEl.value }, { default: () => [createVNode(Bar_default, {
392
+ "ref": barRef,
393
+ "hasScrollY": !!tableScroll.value.y
394
+ }, null)] })])])])]);
395
+ };
396
+ }, {
397
+ props: /* @__PURE__ */ mergeDefaults({
398
+ loading: {
399
+ type: [Boolean, Object],
400
+ required: false,
401
+ default: void 0
402
+ },
403
+ rowKey: { required: false },
404
+ columns: {
405
+ type: Array,
406
+ required: false
407
+ },
408
+ indexColumn: {
409
+ type: [Boolean, Object],
410
+ required: false,
411
+ default: void 0
412
+ },
413
+ scrollPolicy: {
414
+ type: [Boolean, Object],
415
+ required: false,
416
+ default: void 0
417
+ },
418
+ fitPage: {
419
+ type: Boolean,
420
+ required: false,
421
+ default: void 0
422
+ },
423
+ dataSource: {
424
+ type: Array,
425
+ required: false
426
+ },
427
+ proClasses: {
428
+ type: Object,
429
+ required: false
430
+ },
431
+ proStyles: {
432
+ type: Object,
433
+ required: false
434
+ },
435
+ cardBordered: {
436
+ type: Boolean,
437
+ required: false,
438
+ default: void 0
439
+ },
440
+ align: {
441
+ type: String,
442
+ required: false
443
+ },
444
+ waitRequest: {
445
+ type: Boolean,
446
+ required: false,
447
+ default: void 0
448
+ },
449
+ polling: {
450
+ type: Boolean,
451
+ required: false,
452
+ default: void 0
453
+ },
454
+ pollingTime: {
455
+ type: Number,
456
+ required: false
457
+ },
458
+ request: {
459
+ type: Function,
460
+ required: false
461
+ },
462
+ immediate: {
463
+ type: Boolean,
464
+ required: false,
465
+ default: void 0
466
+ },
467
+ autoRequest: {
468
+ type: Boolean,
469
+ required: false,
470
+ default: void 0
471
+ },
472
+ debounceTime: {
473
+ type: Number,
474
+ required: false
475
+ },
476
+ showLoading: {
477
+ type: Boolean,
478
+ required: false,
479
+ default: void 0
480
+ },
481
+ params: { required: false },
482
+ postData: {
483
+ type: Function,
484
+ required: false
485
+ },
486
+ form: {
487
+ type: [Object, Boolean],
488
+ required: false,
489
+ default: void 0
490
+ },
491
+ searchMap: {
492
+ type: Array,
493
+ required: false
494
+ },
495
+ pagination: {
496
+ type: [Object, Boolean],
497
+ required: false,
498
+ default: void 0
499
+ },
500
+ onChange: {
501
+ type: Function,
502
+ required: false
503
+ },
504
+ onReset: {
505
+ type: Function,
506
+ required: false
507
+ },
508
+ onReload: {
509
+ type: Function,
510
+ required: false
511
+ },
512
+ onSubmit: {
513
+ type: Function,
514
+ required: false
515
+ },
516
+ onLoadingChange: {
517
+ type: Function,
518
+ required: false
519
+ },
520
+ onRequestError: {
521
+ type: Function,
522
+ required: false
523
+ },
524
+ onSizeChange: {
525
+ type: Function,
526
+ required: false
527
+ },
528
+ onBeforeSearchSubmit: {
529
+ type: Function,
530
+ required: false
531
+ },
532
+ onResizeColumn: {
533
+ type: Function,
534
+ required: false
535
+ },
536
+ draggable: {
537
+ type: Boolean,
538
+ required: false,
539
+ default: void 0
540
+ },
541
+ keepAliveReload: {
542
+ type: Boolean,
543
+ required: false,
544
+ default: void 0
545
+ },
546
+ columnEmptyText: {
547
+ type: [String, Function],
548
+ required: false
549
+ },
550
+ options: {
551
+ type: [Object, Boolean],
552
+ required: false,
553
+ default: void 0
554
+ },
555
+ titleTipText: {
556
+ type: String,
557
+ required: false
558
+ },
559
+ actionProps: {
560
+ type: Object,
561
+ required: false
562
+ },
563
+ onFullscreenChange: {
564
+ type: Function,
565
+ required: false
566
+ },
567
+ emptyText: {
568
+ type: [
569
+ Function,
570
+ Object,
571
+ String,
572
+ Number,
573
+ Boolean,
574
+ null,
575
+ Array
576
+ ],
577
+ required: false,
578
+ default: void 0
579
+ },
580
+ headerTitle: {
581
+ type: [
582
+ Function,
583
+ Object,
584
+ String,
585
+ Number,
586
+ Boolean,
587
+ null,
588
+ Array
589
+ ],
590
+ required: false,
591
+ default: void 0
592
+ },
593
+ headerTitleTip: {
594
+ type: [
595
+ Function,
596
+ Object,
597
+ String,
598
+ Number,
599
+ Boolean,
600
+ null,
601
+ Array
602
+ ],
603
+ required: false,
604
+ default: void 0
605
+ },
606
+ listToolAfter: {
607
+ type: [
608
+ Function,
609
+ Object,
610
+ String,
611
+ Number,
612
+ Boolean,
613
+ null,
614
+ Array
615
+ ],
616
+ required: false,
617
+ default: void 0
618
+ },
619
+ customRender: {
620
+ type: Boolean,
621
+ required: false,
622
+ skipCheck: true,
623
+ default: void 0
624
+ },
625
+ pageItemRender: {
626
+ type: Boolean,
627
+ required: false,
628
+ skipCheck: true,
629
+ default: void 0
630
+ },
631
+ classes: {
632
+ type: [Object, Function],
633
+ required: false
634
+ },
635
+ styles: {
636
+ type: [Object, Function],
637
+ required: false
638
+ },
639
+ dropdownPrefixCls: {
640
+ type: String,
641
+ required: false
642
+ },
643
+ size: {
644
+ type: [String, null],
645
+ required: false
646
+ },
647
+ bordered: {
648
+ type: Boolean,
649
+ required: false,
650
+ default: void 0
651
+ },
652
+ locale: {
653
+ type: Object,
654
+ required: false
655
+ },
656
+ rowSelection: {
657
+ type: Object,
658
+ required: false
659
+ },
660
+ getPopupContainer: {
661
+ type: Function,
662
+ required: false
663
+ },
664
+ scroll: {
665
+ type: Object,
666
+ required: false
667
+ },
668
+ sortDirections: {
669
+ type: Array,
670
+ required: false
671
+ },
672
+ showSorterTooltip: {
673
+ type: [Boolean, Object],
674
+ required: false,
675
+ default: void 0
676
+ },
677
+ virtual: {
678
+ type: Boolean,
679
+ required: false,
680
+ default: void 0
681
+ },
682
+ rootClass: {
683
+ type: String,
684
+ required: false
685
+ },
686
+ prefixCls: {
687
+ type: String,
688
+ required: false
689
+ },
690
+ tableLayout: {
691
+ type: String,
692
+ required: false
693
+ },
694
+ expandable: {
695
+ type: Object,
696
+ required: false
697
+ },
698
+ indentSize: {
699
+ type: Number,
700
+ required: false
701
+ },
702
+ rowClassName: {
703
+ type: [String, Function],
704
+ required: false
705
+ },
706
+ title: {
707
+ type: Function,
708
+ required: false
709
+ },
710
+ footer: {
711
+ type: Function,
712
+ required: false
713
+ },
714
+ summary: {
715
+ type: Function,
716
+ required: false
717
+ },
718
+ headerCell: {
719
+ type: Function,
720
+ required: false
721
+ },
722
+ bodyCell: {
723
+ type: Function,
724
+ required: false
725
+ },
726
+ caption: { required: false },
727
+ id: {
728
+ type: String,
729
+ required: false
730
+ },
731
+ showHeader: {
732
+ type: Boolean,
733
+ required: false,
734
+ default: void 0
735
+ },
736
+ components: {
737
+ type: Object,
738
+ required: false
739
+ },
740
+ onRow: {
741
+ type: Function,
742
+ required: false
743
+ },
744
+ onHeaderRow: {
745
+ type: Function,
746
+ required: false
747
+ },
748
+ direction: {
749
+ type: String,
750
+ required: false
751
+ },
752
+ sticky: {
753
+ type: [Boolean, Object],
754
+ required: false,
755
+ default: void 0
756
+ },
757
+ rowHoverable: {
758
+ type: Boolean,
759
+ required: false,
760
+ default: void 0
761
+ },
762
+ tailor: {
763
+ type: Boolean,
764
+ required: false,
765
+ default: void 0
766
+ },
767
+ getContainerWidth: {
768
+ type: Function,
769
+ required: false
770
+ },
771
+ measureRowRender: {
772
+ type: Function,
773
+ required: false
774
+ },
775
+ expandedRowKeys: {
776
+ type: Array,
777
+ required: false
778
+ },
779
+ defaultExpandedRowKeys: {
780
+ type: Array,
781
+ required: false
782
+ },
783
+ expandedRowRender: {
784
+ type: Function,
785
+ required: false
786
+ },
787
+ expandRowByClick: {
788
+ type: Boolean,
789
+ required: false,
790
+ default: void 0
791
+ },
792
+ expandIcon: {
793
+ type: Function,
794
+ required: false
795
+ },
796
+ onExpand: {
797
+ type: Function,
798
+ required: false
799
+ },
800
+ onExpandedRowsChange: {
801
+ type: Function,
802
+ required: false
803
+ },
804
+ defaultExpandAllRows: {
805
+ type: Boolean,
806
+ required: false,
807
+ default: void 0
808
+ },
809
+ expandIconColumnIndex: {
810
+ type: Number,
811
+ required: false
812
+ },
813
+ expandedRowClassName: {
814
+ type: Function,
815
+ required: false
816
+ },
817
+ childrenColumnName: {
818
+ type: String,
819
+ required: false
337
820
  }
338
- const renderCustomize = () => {
339
- const customRender = getSlot({
340
- slots,
341
- props,
342
- key: "customRender"
343
- });
344
- if (customRender) {
345
- if (dataSource.value?.length) {
346
- const tableData = cloneDeep(unref(dataSource));
347
- return customRender?.({
348
- dataSource: tableData,
349
- currentData: getCurrentData(tableData, paginationInfo.value)
350
- });
351
- }
352
- return renderEmptyText();
353
- }
354
- return createVNode(Fragment, null, null);
355
- };
356
- provideTableContext({
357
- hashId,
358
- prefixCls: baseClassName,
359
- tableScrollState,
360
- tableSize,
361
- columns: proColumns,
362
- cacheColumns,
363
- isMobile,
364
- formConfig,
365
- formAutoRequest,
366
- formActions,
367
- screenWidth,
368
- tableListToolsHeight,
369
- styles: toRef(props, "styles"),
370
- classNames: toRef(props, "classNames"),
371
- action: {
372
- setTableSize,
373
- reload,
374
- toggle
375
- },
376
- setPagination
377
- });
378
- expose({
379
- formRef: () => ({
380
- getFormSearch,
381
- getFormInnerState: () => tableFormRef.value?.getFormSearch() || {},
382
- restFormState: (callBack) => {
383
- waitRequest.value = true;
384
- callBack && callBack?.();
385
- tableFormRef.value?.resetForm(false);
386
- waitRequest.value = false;
387
- }
388
- }),
389
- actionRef: () => ({
390
- loading,
391
- dataSource,
392
- pageInfo: requestPagination,
393
- pagination: paginationInfo.value,
394
- selectedKeys: computed(() => selectedKeys.value),
395
- selectedItems: computed(() => selectedItems.value),
396
- rowsSelection: {
397
- clear: clearAllRowKeys,
398
- select: selectRowKey,
399
- remove: removeRowKeys,
400
- sync: syncSelectedRows,
401
- selectAll: selectAllRowKey
402
- },
403
- reload,
404
- getLoadingStatus: () => unref(loading),
405
- reloadAndReset: async (options) => {
406
- waitRequest.value = true;
407
- setPagination({
408
- current: 1,
409
- pageSize: requestPagination?.pageSize || 10
410
- });
411
- if (options && options?.callBack) if (options.wait) await options.callBack();
412
- else options.callBack();
413
- tableFormRef.value?.resetForm(true);
414
- waitRequest.value = false;
415
- },
416
- setPageInfo: changePage,
417
- setTableDataList,
418
- setPagination,
419
- operateTableDataRow,
420
- setLoading
421
- })
422
- });
423
- return () => {
424
- const hasCustom = convertValueBoolean(props.customRender || slots.customRender);
425
- const actionsRender = slots.actions?.() || props.actionProps?.actions;
426
- const slotsPropsVNode = getSlotsProps({
427
- slots,
428
- props,
429
- keys: [
430
- "headerTitle",
431
- "headerTitleTip",
432
- "listToolAfter"
433
- ],
434
- render: true
435
- });
436
- return wrapSSR(createVNode("div", {
437
- "ref": tableRef,
438
- "class": classNames(baseClassName, hashId.value, props.class, props.classNames?.root, [{
439
- [`${baseClassName}-no-scroll`]: !Object.keys(unref(proScroll) || {}).length,
440
- [`${baseClassName}-table-tree`]: isTreeDataRef.value,
441
- [`${baseClassName}-full-page`]: props.fitPage,
442
- [`${baseClassName}-full-screen`]: isFullscreen.value
443
- }]),
444
- "style": {
445
- ...props.style,
446
- ...props.styles?.root || {}
447
- }
448
- }, [createVNode("div", {
449
- "class": classNames(`${baseClassName}-content`, hashId.value, props.classNames?.content),
450
- "style": props.styles?.content
451
- }, [(formCols.value.length > 0 || !!slots.form) && props.form !== false && createVNode(ProTableForm, {
452
- "ref": tableFormRef,
453
- "modalScroll": props.modalScroll,
454
- "cardBordered": props.cardBordered,
455
- "formCols": formCols.value,
456
- "prefixCls": baseClassName,
457
- "loading": unref(loading),
458
- "onSearch": handleTableSubmit,
459
- "defaultFormSearch": defaultFormSearch.value
460
- }, { default: slots.form ? () => slots.form?.() : null }), createVNode("div", {
461
- "ref": tableCardEl,
462
- "class": classNames(props.classNames?.card, hashId.value, `${baseClassName}-card`, props.cardBordered && `${baseClassName}-card-border`),
463
- "style": props.styles?.card
464
- }, [createVNode(ToolbarRender, {
465
- "options": props.options ? isObject(props.options) ? props.options : {} : false,
466
- "titleTipText": props.titleTipText,
467
- "actionsPlacement": props.actionProps?.placement,
468
- "actionsRender": actionsRender,
469
- "headerTitle": slotsPropsVNode.headerTitle,
470
- "listToolAfter": slotsPropsVNode.listToolAfter,
471
- "headerTitleTip": slotsPropsVNode.headerTitleTip
472
- }, null), hasCustom ? createVNode(Spin, loadingState.value, { default: () => [createVNode("div", {
473
- "class": classNames(`${baseClassName}-list ${hashId.value}`, props.classNames?.list),
474
- "style": props.styles?.list
475
- }, [createVNode("div", {
476
- "class": classNames(`${baseClassName}-list-content`, hashId.value, props.classNames?.listContent),
477
- "style": {
478
- ...props.styles?.listContent || {},
479
- height: tableScrollYHeight.value ? unit(tableScrollYHeight.value) : props.styles?.listContent?.height
480
- }
481
- }, [renderCustomize()]), props.pagination !== false && dataSource.value?.length > 0 && createVNode(Pagination, mergeProps(toRaw(unref(paginationInfo)), {
482
- "class": classNames(hashId.value, `${baseClassName}-pagination`, `${baseClassName}-pagination-${paginationPosition.value}`, props.classNames?.pagination),
483
- "style": props.styles?.pagination,
484
- "onChange": (current, pageSize) => changePage({
485
- current,
486
- pageSize
487
- })
488
- }), null)])] }) : createVNode(Fragment, null, [createVNode(Table, mergeProps(pick(props, Object.keys(tableProps)), unref(tablePropsValues), {
489
- "style": props.styles?.table,
490
- "class": classNames(props.classNames?.table, hashId.value, tableOverHidden.value && `${baseClassName}-overflow-hidden`),
491
- "loading": loadingState.value,
492
- "rowKey": (record) => record[props.rowKey],
493
- "transformCellText": (options) => {
494
- if (props.transformCellText && typeof props.transformCellText === "function") props.transformCellText?.(options);
495
- const { column, record } = options;
496
- if (!column) return options.text;
497
- const key = column?.key || column?.dataIndex;
498
- let text = options.text;
499
- if (isArray(text)) {
500
- if (text.length === 0 || text.length === 1 && !isVNode(text[0])) text = text?.[0];
501
- else if (text[0]?.type === "template") text = text[0]?.children;
502
- }
503
- text = valueFormat(text, column?.valueType || props.columns?.find((item) => (item.key || item.dataIndex) === key)?.valueType, baseClassName, hashId.value);
504
- const columnEmptyText = column?.columnEmptyText || props?.columnEmptyText;
505
- const { value, success } = handleEmptyField(text, columnEmptyText ? typeof columnEmptyText === "function" ? columnEmptyText(record) : columnEmptyText : "");
506
- if (success && column?.ellipsis && text) return createVNode(TableCell, {
507
- "text": value,
508
- "column": column,
509
- "className": baseClassName,
510
- "hashId": hashId.value
511
- }, null);
512
- return value;
513
- },
514
- "rowSelection": props.rowSelection ? {
515
- ...omit(props.rowSelection, [
516
- "onSelect",
517
- "onSelectAll",
518
- "onChange",
519
- "selectedRowKeys"
520
- ]),
521
- selectedRowKeys: selectedKeys.value || [],
522
- onSelect: selectRowKey,
523
- onSelectAll: selectAllRowKey,
524
- onChange: changeRowKey
525
- } : void 0,
526
- "rowClassName": () => "aaa",
527
- "onChange": changePage,
528
- "onExpandedRowsChange": expandedRowsChange,
529
- "onExpand": expand,
530
- "onResizeColumn": (w, col) => handleResizeColumn(w, col)
531
- }), {
532
- ...slots,
533
- emptyText: () => renderEmptyText()
534
- }), tableScrollEl.value && !hasCustom && createVNode(Teleport, { "to": tableScrollEl.value }, { default: () => [createVNode(Bar, { "ref": barRef }, null)] })])])])]));
535
- };
536
- }
821
+ }, defaults),
822
+ emits: [
823
+ "change",
824
+ "reset",
825
+ "reload",
826
+ "submit",
827
+ "loadingChange",
828
+ "requestError",
829
+ "sizeChange",
830
+ "resizeColumn",
831
+ "fullscreenChange",
832
+ "update:expandedRowKeys",
833
+ "scroll"
834
+ ],
835
+ name: "GProTable",
836
+ inheritAttrs: false
537
837
  });
538
838
  //#endregion
539
- export { ProTable as default };
839
+ export { ForwardProTable as default };