@antdv-vue/pro-table 0.0.0-stage → 2.0.3

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 (86) hide show
  1. package/CHANGELOG.md +255 -0
  2. package/README.md +106 -2
  3. package/dist/InternalTable.d.ts +360 -0
  4. package/dist/InternalTable.js +444 -0
  5. package/dist/RenderTypings.d.ts +33 -0
  6. package/dist/RenderTypings.js +1 -0
  7. package/dist/ResizableTableTitle.d.ts +24 -0
  8. package/dist/ResizableTableTitle.js +89 -0
  9. package/dist/Store/Provide.d.ts +68 -0
  10. package/dist/Store/Provide.js +132 -0
  11. package/dist/Table.d.ts +363 -0
  12. package/dist/Table.js +151 -0
  13. package/dist/TableRender.d.ts +54 -0
  14. package/dist/TableRender.js +295 -0
  15. package/dist/components/Alert/index.d.ts +45 -0
  16. package/dist/components/Alert/index.js +94 -0
  17. package/dist/components/Alert/style/index.d.ts +8 -0
  18. package/dist/components/Alert/style/index.js +11 -0
  19. package/dist/components/ColumnSetting/CheckboxList.d.ts +24 -0
  20. package/dist/components/ColumnSetting/CheckboxList.js +138 -0
  21. package/dist/components/ColumnSetting/CheckboxListItem.d.ts +17 -0
  22. package/dist/components/ColumnSetting/CheckboxListItem.js +84 -0
  23. package/dist/components/ColumnSetting/GroupCheckboxList.d.ts +22 -0
  24. package/dist/components/ColumnSetting/GroupCheckboxList.js +82 -0
  25. package/dist/components/ColumnSetting/ToolTipIcon.d.ts +12 -0
  26. package/dist/components/ColumnSetting/ToolTipIcon.js +47 -0
  27. package/dist/components/ColumnSetting/index.d.ts +26 -0
  28. package/dist/components/ColumnSetting/index.js +117 -0
  29. package/dist/components/ColumnSetting/style/index.d.ts +8 -0
  30. package/dist/components/ColumnSetting/style/index.js +73 -0
  31. package/dist/components/DragSortTable/index.d.ts +375 -0
  32. package/dist/components/DragSortTable/index.js +166 -0
  33. package/dist/components/DragSortTable/style/index.d.ts +8 -0
  34. package/dist/components/DragSortTable/style/index.js +25 -0
  35. package/dist/components/Dropdown/Button.d.ts +20 -0
  36. package/dist/components/Dropdown/Button.js +155 -0
  37. package/dist/components/Dropdown/index.d.ts +27 -0
  38. package/dist/components/Dropdown/index.js +149 -0
  39. package/dist/components/EditableTable/CellEditorTable.d.ts +63 -0
  40. package/dist/components/EditableTable/CellEditorTable.js +167 -0
  41. package/dist/components/EditableTable/EditableTable.d.ts +67 -0
  42. package/dist/components/EditableTable/EditableTable.js +141 -0
  43. package/dist/components/EditableTable/InternalEditableTable.d.ts +189 -0
  44. package/dist/components/EditableTable/InternalEditableTable.js +508 -0
  45. package/dist/components/EditableTable/RowEditorTable.d.ts +63 -0
  46. package/dist/components/EditableTable/RowEditorTable.js +147 -0
  47. package/dist/components/EditableTable/context.d.ts +9 -0
  48. package/dist/components/EditableTable/context.js +11 -0
  49. package/dist/components/EditableTable/index.d.ts +5 -0
  50. package/dist/components/EditableTable/index.js +5 -0
  51. package/dist/components/Form/FormRender.d.ts +77 -0
  52. package/dist/components/Form/FormRender.js +198 -0
  53. package/dist/components/Form/index.d.ts +33 -0
  54. package/dist/components/Form/index.js +91 -0
  55. package/dist/components/ToolBar/DensityIcon.d.ts +22 -0
  56. package/dist/components/ToolBar/DensityIcon.js +71 -0
  57. package/dist/components/ToolBar/FullScreenIcon.d.ts +6 -0
  58. package/dist/components/ToolBar/FullScreenIcon.js +30 -0
  59. package/dist/components/ToolBar/HeaderMenu.d.ts +22 -0
  60. package/dist/components/ToolBar/HeaderMenu.js +84 -0
  61. package/dist/components/ToolBar/index.d.ts +102 -0
  62. package/dist/components/ToolBar/index.js +322 -0
  63. package/dist/components/ToolBar/style/index.d.ts +8 -0
  64. package/dist/components/ToolBar/style/index.js +116 -0
  65. package/dist/index.d.ts +11 -0
  66. package/dist/index.js +10 -0
  67. package/dist/pro-table.esm.js +3274 -0
  68. package/dist/style/index.d.ts +11 -0
  69. package/dist/style/index.js +162 -0
  70. package/dist/typing.d.ts +409 -0
  71. package/dist/typing.js +1 -0
  72. package/dist/useFetchData.d.ts +10 -0
  73. package/dist/useFetchData.js +243 -0
  74. package/dist/utils/cellRenderToFromItem.d.ts +52 -0
  75. package/dist/utils/cellRenderToFromItem.js +163 -0
  76. package/dist/utils/columnRender.d.ts +54 -0
  77. package/dist/utils/columnRender.js +148 -0
  78. package/dist/utils/columnSort.d.ts +7 -0
  79. package/dist/utils/columnSort.js +17 -0
  80. package/dist/utils/genProColumnsToColumns.d.ts +69 -0
  81. package/dist/utils/genProColumnsToColumns.js +197 -0
  82. package/dist/utils/index.d.ts +122 -0
  83. package/dist/utils/index.js +227 -0
  84. package/dist/utils/useDragSort.d.ts +182 -0
  85. package/dist/utils/useDragSort.js +162 -0
  86. package/package.json +67 -3
@@ -0,0 +1,54 @@
1
+ import { FilterValue, ProColumns, ProTableProps, UseFetchDataAction } from "./typing.js";
2
+ import * as _$vue from "vue";
3
+ import { ParamsType } from "@antdv-vue/pro-provider";
4
+ import { ProFieldValueObjectType, ProFieldValueType, UseEditableUtilType } from "@antdv-vue/pro-utils";
5
+ import { GetRowKey, SortOrder } from "antdv-next/dist/table/interface";
6
+ import { VueNode as VueNode$1 } from "@v-c/util/dist/type";
7
+
8
+ //#region src/TableRender.d.ts
9
+ declare const TableRender: new <RecordType extends Record<string, any> = Record<string, any>, Params extends ParamsType = ParamsType, ValueType extends (ProFieldValueType | ProFieldValueObjectType) = "text">(props: Omit<ProTableProps<RecordType, Params, ValueType>, "dataSource" | "errorBoundaryRender" | "request"> & {
10
+ tableColums?: ProColumns<RecordType, ValueType>[];
11
+ action?: UseFetchDataAction<RecordType>;
12
+ editableUtils?: UseEditableUtilType<RecordType>;
13
+ toolbarDom?: VueNode$1;
14
+ alertDom?: VueNode$1;
15
+ getRowKey?: GetRowKey<RecordType>;
16
+ isLightFilter?: boolean;
17
+ searchNode?: VueNode$1;
18
+ hideToolbar?: boolean;
19
+ onSortChange?: (sort: Record<string, SortOrder>) => void;
20
+ onFilterChange?: (filter: Record<string, FilterValue | null>) => void;
21
+ } & {} & _$vue.VNodeProps & _$vue.AllowedComponentProps & _$vue.ComponentCustomProps) => _$vue.CreateComponentPublicInstanceWithMixins<Omit<ProTableProps<RecordType, Params, ValueType>, "dataSource" | "errorBoundaryRender" | "request"> & {
22
+ tableColums?: ProColumns<RecordType, ValueType>[];
23
+ action?: UseFetchDataAction<RecordType>;
24
+ editableUtils?: UseEditableUtilType<RecordType>;
25
+ toolbarDom?: VueNode$1;
26
+ alertDom?: VueNode$1;
27
+ getRowKey?: GetRowKey<RecordType>;
28
+ isLightFilter?: boolean;
29
+ searchNode?: VueNode$1;
30
+ hideToolbar?: boolean;
31
+ onSortChange?: (sort: Record<string, SortOrder>) => void;
32
+ onFilterChange?: (filter: Record<string, FilterValue | null>) => void;
33
+ } & {}, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, _$vue.PublicProps, {}, false, {}, {}, {}, {}, string, {}, any, _$vue.ComponentProvideOptions, {
34
+ P: {};
35
+ B: {};
36
+ D: {};
37
+ C: {};
38
+ M: {};
39
+ Defaults: {};
40
+ }, Omit<ProTableProps<RecordType, Params, ValueType>, "dataSource" | "errorBoundaryRender" | "request"> & {
41
+ tableColums?: ProColumns<RecordType, ValueType>[];
42
+ action?: UseFetchDataAction<RecordType>;
43
+ editableUtils?: UseEditableUtilType<RecordType>;
44
+ toolbarDom?: VueNode$1;
45
+ alertDom?: VueNode$1;
46
+ getRowKey?: GetRowKey<RecordType>;
47
+ isLightFilter?: boolean;
48
+ searchNode?: VueNode$1;
49
+ hideToolbar?: boolean;
50
+ onSortChange?: (sort: Record<string, SortOrder>) => void;
51
+ onFilterChange?: (filter: Record<string, FilterValue | null>) => void;
52
+ } & {}, {}, {}, {}, {}, {}>;
53
+ //#endregion
54
+ export { TableRender as default };
@@ -0,0 +1,295 @@
1
+ import { flattenColumns, genColumnKey, getServerFilterResult, getServerSorterResult, isBordered } from "./utils/index.js";
2
+ import { useTableContextInject } from "./Store/Provide.js";
3
+ import ResizableTableTitle from "./ResizableTableTitle.js";
4
+ import { Fragment, computed, createVNode, defineComponent, isVNode, mergeProps } from "vue";
5
+ import ProForm$1 from "@antdv-vue/pro-form";
6
+ import { editableRowByKey, omitUndefined, recordKeyToString } from "@antdv-vue/pro-utils";
7
+ import { classNames } from "@v-c/util";
8
+ import { ConfigProvider, Table } from "antdv-next";
9
+ import ProCard from "@antdv-vue/pro-card";
10
+ //#region src/TableRender.tsx
11
+ function _isSlot(s) {
12
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
13
+ }
14
+ function getEditableDataSource({ dataSource, editableUtils, pagination, getRowKey, childrenColumnName }) {
15
+ const baseData = Array.isArray(dataSource) ? [...dataSource] : [];
16
+ const newLineConfig = editableUtils?.newLineRecord;
17
+ const defaultValue = newLineConfig?.value?.defaultValue;
18
+ if (!newLineConfig?.value || !defaultValue) return baseData;
19
+ const { options: newLineOptions } = newLineConfig.value;
20
+ const childrenName = childrenColumnName || "children";
21
+ if (newLineOptions?.parentKey) {
22
+ const newRow = {
23
+ ...defaultValue,
24
+ map_row_parentKey: recordKeyToString(typeof newLineOptions.parentKey === "function" ? newLineOptions.parentKey() : newLineOptions.parentKey)?.toString()
25
+ };
26
+ return editableRowByKey({
27
+ data: baseData,
28
+ getRowKey,
29
+ row: newRow,
30
+ key: newLineOptions?.recordKey ?? getRowKey?.(newRow, -1),
31
+ childrenColumnName: childrenName
32
+ }, newLineOptions?.position === "top" ? "top" : "update");
33
+ }
34
+ if (newLineOptions?.position === "top") return [defaultValue, ...baseData];
35
+ const pageConfig = pagination && typeof pagination === "object" ? pagination : void 0;
36
+ if (pageConfig?.current && pageConfig?.pageSize) {
37
+ if (pageConfig.pageSize > baseData.length) {
38
+ baseData.push(defaultValue);
39
+ return baseData;
40
+ }
41
+ const insertIndex = pageConfig.current * pageConfig.pageSize - 1;
42
+ baseData.splice(insertIndex, 0, defaultValue);
43
+ return baseData;
44
+ }
45
+ baseData.push(defaultValue);
46
+ return baseData;
47
+ }
48
+ function getTableCardBodyStyle({ propsCardProps, notNeedCardDom, name, hideToolbar, toolbarDom }) {
49
+ if (propsCardProps === false || notNeedCardDom || !!name) return {};
50
+ if (hideToolbar) return { padding: 0 };
51
+ if (toolbarDom) return { paddingBlockStart: 0 };
52
+ return { padding: 0 };
53
+ }
54
+ function mergeResizableTableComponents(components) {
55
+ if (components?.header?.cell) return components;
56
+ return {
57
+ ...components,
58
+ header: {
59
+ ...components?.header,
60
+ cell: ResizableTableTitle
61
+ }
62
+ };
63
+ }
64
+ const TableRender = /* @__PURE__ */ defineComponent((props, { slots, expose, attrs }) => {
65
+ const counter = useTableContextInject();
66
+ /** 需要遍历一下,不然不支持嵌套表格 */
67
+ const columns = computed(() => {
68
+ const loopFilter = (column) => {
69
+ if (!Array.isArray(column)) return [];
70
+ return column?.map((item) => {
71
+ const columnKey = genColumnKey(item.key, item.index);
72
+ const config = counter.columnsMap?.value?.[columnKey];
73
+ if (config && config.show === false) return false;
74
+ if (item.children) return {
75
+ ...item,
76
+ children: loopFilter(item.children)
77
+ };
78
+ return item;
79
+ }).filter(Boolean);
80
+ };
81
+ return loopFilter(props.tableColums) ?? [];
82
+ });
83
+ const mergedDataSource = computed(() => getEditableDataSource({
84
+ dataSource: props.action?.dataSource.value,
85
+ editableUtils: props.editableUtils,
86
+ pagination: props.pagination,
87
+ getRowKey: props.getRowKey,
88
+ childrenColumnName: props.expandable?.childrenColumnName || "children"
89
+ }));
90
+ const useFilterColumns = computed(() => {
91
+ return flattenColumns(columns.value).filter((column) => !!column.filters);
92
+ });
93
+ expose({});
94
+ return () => {
95
+ const { tableViewRender, cardProps, isLightFilter, options, type = "table", search, headerTitle, tableRender, toolBarRender, rowKey, size, columnsState, dateFormatter, debounceTime, defaultData, onSizeChange, form, prefixCls, ghost, hideToolbar, editableUtils, searchNode, action, pagination, tableColums, rowSelection, name: isEditorTable, manualRequest, onDataSourceChange, tableExtraRender, alertDom, beforeSearchSubmit, cardBordered, onLoad, onSubmit, optionsRender, params, polling, postData, toolbar, tooltip, tableClass, tableStyle, toolbarDom, revalidateOnFocus, searchFormRender, onLoadingChange, onRequestError, onReset, getRowKey, tableAlertOptionRender, tableAlertRender, columnEmptyText, onFilterChange, onSortChange, editable, columns: propsColumns, ...rest } = props;
96
+ const EditableMessageContextHolder = editableUtils?.messageContextHolder;
97
+ const tableProps = {
98
+ ...rest,
99
+ size: counter.tableSize?.value,
100
+ rowSelection: rowSelection === false ? void 0 : rowSelection,
101
+ class: tableClass,
102
+ style: tableStyle,
103
+ columns: columns.value,
104
+ components: mergeResizableTableComponents(rest.components),
105
+ loading: action?.loading.value,
106
+ dataSource: mergedDataSource.value,
107
+ pagination,
108
+ onChange: (changePagination, filters, sorter, extra) => {
109
+ rest.onChange?.(changePagination, filters, sorter, extra);
110
+ const serverFilter = getServerFilterResult(filters, useFilterColumns.value);
111
+ onFilterChange?.(omitUndefined(serverFilter));
112
+ const serverSorter = getServerSorterResult(sorter);
113
+ onSortChange?.(omitUndefined(serverSorter));
114
+ }
115
+ };
116
+ /** 默认的 table dom,如果是编辑模式,外面还要包个 form */
117
+ const baseTableDom = createVNode(Table, mergeProps(tableProps, { "rowKey": typeof rowKey === "function" ? (record, index) => rowKey(record, index) : rowKey?.toString() }), slots);
118
+ /** 自定义的 render */
119
+ const tableDom = tableViewRender ? tableViewRender({
120
+ ...tableProps,
121
+ rowSelection: rowSelection !== false ? rowSelection : void 0
122
+ }, baseTableDom) : baseTableDom;
123
+ const tableContentDom = editable && !isEditorTable ? createVNode(Fragment, null, [
124
+ toolbarDom,
125
+ alertDom,
126
+ createVNode(ProForm$1, mergeProps({ "ref": editable?.formProps?.formRef }, editable?.formProps, {
127
+ "key": "table",
128
+ "submitter": false,
129
+ "omitNil": false,
130
+ "onValuesChange": (changedValues, values) => editableUtils?.onValuesChange?.(changedValues, values),
131
+ "dateFormatter": dateFormatter
132
+ }), _isSlot(tableDom) ? tableDom : { default: () => [tableDom] })
133
+ ]) : createVNode(Fragment, null, [
134
+ toolbarDom,
135
+ alertDom,
136
+ tableDom
137
+ ]);
138
+ /**
139
+ * 是否需要 card 来包裹
140
+ */
141
+ const notNeedCardDom = search === false && !headerTitle && toolBarRender === false;
142
+ const cardBodyStyle = getTableCardBodyStyle({
143
+ propsCardProps: cardProps,
144
+ notNeedCardDom,
145
+ name: props.name,
146
+ hideToolbar,
147
+ toolbarDom
148
+ });
149
+ /** ProTable:有搜索/工具栏/标题时使用卡片包裹;可编辑表格(name)不包裹 */
150
+ /** ProListy:始终使用卡片包裹(除非 cardProps 为 false) */
151
+ const useCard = cardProps !== false && !isEditorTable && !notNeedCardDom || cardProps !== false && type === "listy";
152
+ const resolvedCardProps = cardProps === false ? {} : cardProps ?? {};
153
+ /** Table 区域的 dom,为了方便 render */
154
+ const tableAreaDom = !useCard ? tableContentDom : createVNode(ProCard, mergeProps(resolvedCardProps, {
155
+ "ghost": ghost,
156
+ "variant": isBordered("table", typeof cardBordered === "string" ? true : cardBordered) ? "outlined" : "borderless",
157
+ "styles": {
158
+ ...resolvedCardProps.styles,
159
+ body: {
160
+ ...cardBodyStyle,
161
+ ...resolvedCardProps.styles?.body ?? {}
162
+ }
163
+ }
164
+ }), _isSlot(tableContentDom) ? tableContentDom : { default: () => [tableContentDom] });
165
+ const renderTable = () => {
166
+ if (tableRender) return tableRender(props, tableAreaDom, {
167
+ toolbar: toolbarDom || void 0,
168
+ alert: alertDom || void 0,
169
+ table: tableDom || void 0
170
+ });
171
+ return tableAreaDom;
172
+ };
173
+ const proTableDom = createVNode("div", {
174
+ "class": classNames(attrs.class, { [`${prefixCls}-polling`]: action?.pollingLoading.value }),
175
+ "style": attrs.style,
176
+ "ref": counter.rootDomRef
177
+ }, [
178
+ isLightFilter ? null : searchNode,
179
+ type !== "form" && props.tableExtraRender && createVNode("div", { "class": classNames(attrs.class, `${prefixCls}-extra`) }, [props.tableExtraRender(props, action?.dataSource.value || [])]),
180
+ type !== "form" && renderTable(),
181
+ EditableMessageContextHolder ? createVNode(EditableMessageContextHolder, null, null) : null
182
+ ]);
183
+ if (!options || !options?.fullScreen) return proTableDom;
184
+ return createVNode(ConfigProvider, { "getPopupContainer": () => counter.rootDomRef?.value || document.body }, _isSlot(proTableDom) ? proTableDom : { default: () => [proTableDom] });
185
+ };
186
+ }, {
187
+ name: "TableRender",
188
+ inheritAttrs: false,
189
+ props: [
190
+ "searchNode",
191
+ "isLightFilter",
192
+ "editableUtils",
193
+ "hideToolbar",
194
+ "action",
195
+ "alertDom",
196
+ "getRowKey",
197
+ "toolbarDom",
198
+ "beforeSearchSubmit",
199
+ "tableColums",
200
+ "columnEmptyText",
201
+ "editable",
202
+ "options",
203
+ "tooltip",
204
+ "search",
205
+ "headerTitle",
206
+ "tableStyle",
207
+ "toolBarRender",
208
+ "optionsRender",
209
+ "columnsState",
210
+ "onSizeChange",
211
+ "toolbar",
212
+ "bodyCell",
213
+ "bordered",
214
+ "caption",
215
+ "cardBordered",
216
+ "cardProps",
217
+ "childrenColumnName",
218
+ "classes",
219
+ "columns",
220
+ "components",
221
+ "dateFormatter",
222
+ "debounceTime",
223
+ "defaultData",
224
+ "defaultExpandAllRows",
225
+ "defaultExpandedRowKeys",
226
+ "direction",
227
+ "dropdownPrefixCls",
228
+ "expandIcon",
229
+ "expandIconColumnIndex",
230
+ "expandRowByClick",
231
+ "expandable",
232
+ "expandedRowClassName",
233
+ "expandedRowKeys",
234
+ "expandedRowRender",
235
+ "footer",
236
+ "form",
237
+ "getContainerWidth",
238
+ "getPopupContainer",
239
+ "ghost",
240
+ "headerCell",
241
+ "id",
242
+ "indentSize",
243
+ "loading",
244
+ "locale",
245
+ "manualRequest",
246
+ "measureRowRender",
247
+ "name",
248
+ "onDataSourceChange",
249
+ "onExpand",
250
+ "onExpandedRowsChange",
251
+ "onHeaderRow",
252
+ "onLoad",
253
+ "onLoadingChange",
254
+ "onRequestError",
255
+ "onReset",
256
+ "onRow",
257
+ "onSubmit",
258
+ "pagination",
259
+ "params",
260
+ "polling",
261
+ "postData",
262
+ "prefixCls",
263
+ "revalidateOnFocus",
264
+ "rootClass",
265
+ "rowClassName",
266
+ "rowHoverable",
267
+ "rowKey",
268
+ "rowSelection",
269
+ "scroll",
270
+ "searchFormRender",
271
+ "showHeader",
272
+ "showSorterTooltip",
273
+ "size",
274
+ "sortDirections",
275
+ "sticky",
276
+ "styles",
277
+ "summary",
278
+ "tableClass",
279
+ "tableExtraRender",
280
+ "tableLayout",
281
+ "tableRender",
282
+ "tableViewRender",
283
+ "tailor",
284
+ "title",
285
+ "type",
286
+ "virtual",
287
+ "tableAlertRender",
288
+ "tableAlertOptionRender",
289
+ "onSortChange",
290
+ "onFilterChange",
291
+ "defaultSize"
292
+ ]
293
+ });
294
+ //#endregion
295
+ export { TableRender as default };
@@ -0,0 +1,45 @@
1
+ import { TableAlertRender } from "../../RenderTypings.js";
2
+ import * as _$vue from "vue";
3
+ import { Key } from "@antdv-vue/pro-utils";
4
+ import { AlertProps } from "antdv-next";
5
+
6
+ //#region src/components/Alert/index.d.ts
7
+ type TableAlertProps<T> = AlertProps & {
8
+ selectedRowKeys?: Key[];
9
+ selectedRows?: any[];
10
+ alwaysShowAlert?: boolean;
11
+ alertInfoRender?: TableAlertRender<T>;
12
+ onCleanSelected?: () => void;
13
+ alertOptionRender?: TableAlertRender<T>;
14
+ };
15
+ declare const TableAlert: new <T = Key>(props: AlertProps & {
16
+ selectedRowKeys?: Key[];
17
+ selectedRows?: any[];
18
+ alwaysShowAlert?: boolean;
19
+ alertInfoRender?: TableAlertRender<T> | undefined;
20
+ onCleanSelected?: () => void;
21
+ alertOptionRender?: TableAlertRender<T> | undefined;
22
+ } & {} & _$vue.VNodeProps & _$vue.AllowedComponentProps & _$vue.ComponentCustomProps) => _$vue.CreateComponentPublicInstanceWithMixins<AlertProps & {
23
+ selectedRowKeys?: Key[];
24
+ selectedRows?: any[];
25
+ alwaysShowAlert?: boolean;
26
+ alertInfoRender?: TableAlertRender<T> | undefined;
27
+ onCleanSelected?: () => void;
28
+ alertOptionRender?: TableAlertRender<T> | undefined;
29
+ } & {}, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, _$vue.PublicProps, {}, false, {}, {}, {}, {}, string, {}, any, _$vue.ComponentProvideOptions, {
30
+ P: {};
31
+ B: {};
32
+ D: {};
33
+ C: {};
34
+ M: {};
35
+ Defaults: {};
36
+ }, AlertProps & {
37
+ selectedRowKeys?: Key[];
38
+ selectedRows?: any[];
39
+ alwaysShowAlert?: boolean;
40
+ alertInfoRender?: TableAlertRender<T> | undefined;
41
+ onCleanSelected?: () => void;
42
+ alertOptionRender?: TableAlertRender<T> | undefined;
43
+ } & {}, {}, {}, {}, {}, {}>;
44
+ //#endregion
45
+ export { TableAlertProps, TableAlert as default };
@@ -0,0 +1,94 @@
1
+ import style_default from "./style/index.js";
2
+ import { computed, createTextVNode, createVNode, defineComponent } from "vue";
3
+ import { useIntl } from "@antdv-vue/pro-provider";
4
+ import { classNames } from "@v-c/util";
5
+ import { useConfig } from "antdv-next/config-provider/context";
6
+ import { Alert, Space } from "antdv-next";
7
+ //#region src/components/Alert/index.tsx
8
+ function defaultAlertOptionRender(props) {
9
+ const { intl, onCleanSelected } = props;
10
+ return createVNode("a", {
11
+ "onClick": onCleanSelected,
12
+ "key": "0"
13
+ }, [intl.getMessage({
14
+ id: "alert.clear",
15
+ defaultMessage: "清空"
16
+ })]);
17
+ }
18
+ const TableAlert = /* @__PURE__ */ defineComponent((props) => {
19
+ const config = useConfig();
20
+ const prefixCls = computed(() => props.prefixCls || config.value.getPrefixCls("pro"));
21
+ const baseClassName = computed(() => `${prefixCls.value}-table-alert`);
22
+ const [hashId, cssVarCls] = style_default(baseClassName);
23
+ const intl = useIntl();
24
+ return () => {
25
+ const { selectedRowKeys = [], onCleanSelected, alwaysShowAlert, selectedRows, alertInfoRender = ({ intl }) => createVNode(Space, null, { default: () => [
26
+ intl.getMessage({
27
+ id: "alert.selected",
28
+ defaultMessage: "已选择"
29
+ }),
30
+ selectedRowKeys.length,
31
+ intl.getMessage({
32
+ id: "alert.item",
33
+ defaultMessage: "项"
34
+ }),
35
+ createTextVNode("\xA0\xA0")
36
+ ] }), alertOptionRender = defaultAlertOptionRender } = props;
37
+ const option = alertOptionRender && alertOptionRender({
38
+ onCleanSelected,
39
+ selectedRowKeys,
40
+ selectedRows,
41
+ intl: intl.value
42
+ });
43
+ if (alertInfoRender === false) return null;
44
+ const dom = alertInfoRender({
45
+ intl: intl.value,
46
+ selectedRowKeys,
47
+ selectedRows,
48
+ onCleanSelected
49
+ });
50
+ if (dom === false || selectedRowKeys.length < 1 && !alwaysShowAlert) return null;
51
+ return createVNode(Alert, { "class": classNames(baseClassName.value, hashId.value, cssVarCls.value) }, {
52
+ message: () => dom,
53
+ action: () => option
54
+ });
55
+ };
56
+ }, {
57
+ name: "TableAlert",
58
+ inheritAttrs: false,
59
+ props: [
60
+ "action",
61
+ "afterClose",
62
+ "alertInfoRender",
63
+ "alertOptionRender",
64
+ "alwaysShowAlert",
65
+ "banner",
66
+ "classes",
67
+ "closable",
68
+ "closeIcon",
69
+ "description",
70
+ "icon",
71
+ "id",
72
+ "message",
73
+ "onCleanSelected",
74
+ "icon",
75
+ "id",
76
+ "message",
77
+ "onCleanSelected",
78
+ "onClick",
79
+ "onClose",
80
+ "onMouseenter",
81
+ "onMouseleave",
82
+ "prefixCls",
83
+ "role",
84
+ "rootClass",
85
+ "selectedRowKeys",
86
+ "selectedRows",
87
+ "showIcon",
88
+ "styles",
89
+ "title",
90
+ "type"
91
+ ]
92
+ });
93
+ //#endregion
94
+ export { TableAlert as default };
@@ -0,0 +1,8 @@
1
+ import * as _$vue from "vue";
2
+ import { ProAliasCssVarToken } from "@antdv-vue/pro-provider";
3
+
4
+ //#region src/components/Alert/style/index.d.ts
5
+ interface ProTableAlertToken extends ProAliasCssVarToken {}
6
+ declare const _default: (prefixCls: _$vue.Ref<string>, rootCls?: _$vue.Ref<string | undefined>) => readonly [_$vue.Ref<string, string>, _$vue.ComputedRef<string | undefined>];
7
+ //#endregion
8
+ export { ProTableAlertToken, _default as default };
@@ -0,0 +1,11 @@
1
+ import { useStyle } from "@antdv-vue/pro-provider";
2
+ import { mergeToken } from "@antdv-next/cssinjs";
3
+ //#region src/components/Alert/style/index.ts
4
+ const genProTableAlertStyle = (token) => {
5
+ return { [`${token.componentCls}${token.antCls}-alert`]: { marginBlockEnd: token.margin } };
6
+ };
7
+ var style_default = useStyle("ProTableAlert", (token) => {
8
+ return [genProTableAlertStyle(mergeToken(token, {}))];
9
+ });
10
+ //#endregion
11
+ export { style_default as default };
@@ -0,0 +1,24 @@
1
+ import { ProColumns } from "../../typing.js";
2
+ import * as _$vue from "vue";
3
+ import { ProFieldValueObjectType, ProFieldValueType } from "@antdv-vue/pro-utils";
4
+
5
+ //#region src/components/ColumnSetting/CheckboxList.d.ts
6
+ interface CheckboxListProps<T, ValueType> {
7
+ title?: string;
8
+ list?: ProColumns<T, ValueType>[];
9
+ draggable?: boolean;
10
+ checkable?: boolean;
11
+ showListItemOption?: boolean;
12
+ showTitle?: boolean;
13
+ listsHeight?: number;
14
+ }
15
+ declare const CheckboxList: new <T extends Record<string, any>, ValueType extends (ProFieldValueType | ProFieldValueObjectType)>(props: CheckboxListProps<T, ValueType> & {} & _$vue.VNodeProps & _$vue.AllowedComponentProps & _$vue.ComponentCustomProps) => _$vue.CreateComponentPublicInstanceWithMixins<CheckboxListProps<T, ValueType> & {}, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, _$vue.PublicProps, {}, false, {}, {}, {}, {}, string, {}, any, _$vue.ComponentProvideOptions, {
16
+ P: {};
17
+ B: {};
18
+ D: {};
19
+ C: {};
20
+ M: {};
21
+ Defaults: {};
22
+ }, CheckboxListProps<T, ValueType> & {}, {}, {}, {}, {}, {}>;
23
+ //#endregion
24
+ export { CheckboxListProps, CheckboxList as default };
@@ -0,0 +1,138 @@
1
+ import { genColumnKey } from "../../utils/genProColumnsToColumns.js";
2
+ import { useTableContextInject } from "../../Store/Provide.js";
3
+ import CheckboxListItem from "./CheckboxListItem.js";
4
+ import { Fragment, computed, createVNode, defineComponent, isVNode, mergeProps } from "vue";
5
+ import { useProConfig } from "@antdv-vue/pro-provider";
6
+ import { runFunction } from "@antdv-vue/pro-utils";
7
+ import { classNames, omit } from "@v-c/util";
8
+ import { Tree, TypographyText } from "antdv-next";
9
+ import { unit } from "@antdv-next/cssinjs";
10
+ //#region src/components/ColumnSetting/CheckboxList.tsx
11
+ function _isSlot(s) {
12
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
13
+ }
14
+ const CheckboxList = /* @__PURE__ */ defineComponent((props, { attrs }) => {
15
+ const proProvide = useProConfig();
16
+ const { columnsMap, sortKeyColumns, setColumnsMap, setSortKeyColumns } = useTableContextInject();
17
+ const show = computed(() => props.list && props.list.length > 0);
18
+ const treeDataConfig = computed(() => {
19
+ if (!show.value) return {};
20
+ const checkedKeys = [];
21
+ const treeMap = /* @__PURE__ */ new Map();
22
+ const loopData = (data, parentConfig) => data.map(({ key, dataIndex, children, title, ...rest }) => {
23
+ const columnKey = genColumnKey(key, [parentConfig?.columnKey, rest.index].filter(Boolean).join("-"));
24
+ const config = columnsMap?.value?.[columnKey || "null"] || { show: true };
25
+ if (config.show !== false && !children) checkedKeys.push(columnKey);
26
+ const item = {
27
+ key: columnKey,
28
+ ...omit(rest, ["className"]),
29
+ title,
30
+ selectable: false,
31
+ disabled: config.disable === true,
32
+ disableCheckbox: typeof config.disable === "boolean" ? config.disable : config.disable?.checkbox,
33
+ isLeaf: parentConfig ? true : void 0
34
+ };
35
+ if (children) {
36
+ item.children = loopData(children, {
37
+ ...config,
38
+ columnKey
39
+ });
40
+ if (item.children?.every((childrenItem) => checkedKeys?.includes(childrenItem.key))) checkedKeys.push(columnKey);
41
+ }
42
+ treeMap.set(key, {
43
+ ...item,
44
+ parentKey: parentConfig?.columnKey
45
+ });
46
+ return item;
47
+ });
48
+ return {
49
+ list: loopData(props.list),
50
+ keys: checkedKeys,
51
+ map: treeMap
52
+ };
53
+ });
54
+ /** 移动到指定的位置 */
55
+ const move = (id, targetId, dropPosition) => {
56
+ const newMap = { ...columnsMap?.value };
57
+ const newColumns = [...sortKeyColumns?.value || []];
58
+ const findIndex = newColumns.findIndex((columnKey) => columnKey === id);
59
+ const targetIndex = newColumns.findIndex((columnKey) => columnKey === targetId);
60
+ const isDownWard = dropPosition >= findIndex;
61
+ if (findIndex < 0) return;
62
+ const targetItem = newColumns[findIndex];
63
+ newColumns.splice(findIndex, 1);
64
+ if (dropPosition === 0) newColumns.unshift(targetItem);
65
+ else newColumns.splice(isDownWard ? targetIndex : targetIndex + 1, 0, targetItem);
66
+ newColumns.forEach((key, order) => {
67
+ newMap[key] = {
68
+ ...newMap[key] || {},
69
+ order
70
+ };
71
+ });
72
+ setColumnsMap?.(newMap);
73
+ setSortKeyColumns?.(newColumns);
74
+ };
75
+ return () => {
76
+ const { showTitle = true, title, draggable, listsHeight = 280, showListItemOption, checkable } = props;
77
+ if (!show.value) return null;
78
+ const listDom = createVNode(Tree, {
79
+ "itemHeight": 24,
80
+ "draggable": draggable && !!treeDataConfig.value.list?.length && treeDataConfig.value.list?.length > 1,
81
+ "checkable": checkable,
82
+ "onDrop": (info) => {
83
+ const dropKey = info.node.key;
84
+ const dragKey = info.dragNode?.key;
85
+ const { dropPosition, dropToGap } = info;
86
+ move(dragKey, dropKey, dropPosition === -1 || !dropToGap ? dropPosition + 1 : dropPosition);
87
+ },
88
+ "blockNode": true,
89
+ "height": listsHeight,
90
+ "onCheck": (_, e) => {
91
+ const newColumnMap = { ...columnsMap?.value };
92
+ const loopSetShow = (key) => {
93
+ const newSetting = { ...newColumnMap[key] };
94
+ newSetting.show = e.checked;
95
+ if (treeDataConfig.value.map?.get(key)?.children) treeDataConfig.value.map.get(key)?.children?.forEach((item) => loopSetShow(item.key));
96
+ newColumnMap[key] = newSetting;
97
+ };
98
+ loopSetShow(e.node.key);
99
+ setColumnsMap?.({ ...newColumnMap });
100
+ },
101
+ "checkedKeys": treeDataConfig.value.keys,
102
+ "showLine": false,
103
+ "titleRender": (_node) => {
104
+ const node = {
105
+ ..._node,
106
+ children: void 0
107
+ };
108
+ if (!node.title) return null;
109
+ const normalizedTitle = runFunction(node.title, node);
110
+ const wrappedTitle = createVNode(TypographyText, {
111
+ "style": { width: unit(80) },
112
+ "ellipsis": { tooltip: normalizedTitle }
113
+ }, _isSlot(normalizedTitle) ? normalizedTitle : { default: () => [normalizedTitle] });
114
+ return createVNode(CheckboxListItem, mergeProps({ "class": attrs.class }, omit(node, ["key"]), {
115
+ "showListItemOption": showListItemOption,
116
+ "title": wrappedTitle,
117
+ "columnKey": node.key
118
+ }), null);
119
+ },
120
+ "treeData": treeDataConfig.value.list?.map(({ disabled, ...config }) => config)
121
+ }, null);
122
+ return createVNode(Fragment, null, [showTitle && createVNode("span", { "class": classNames(`${attrs.class}-list-title`, proProvide.value.hashId) }, [title]), listDom]);
123
+ };
124
+ }, {
125
+ name: "CheckboxList",
126
+ inheritAttrs: false,
127
+ props: [
128
+ "checkable",
129
+ "draggable",
130
+ "list",
131
+ "listsHeight",
132
+ "showListItemOption",
133
+ "showTitle",
134
+ "title"
135
+ ]
136
+ });
137
+ //#endregion
138
+ export { CheckboxList as default };