@gx-design-vue/pro-table 0.2.0-alpha.2 → 0.2.0-alpha.20

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