@qin-ui/antd-vue-pro 2.1.15 → 2.2.1

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 (124) hide show
  1. package/AI-CONTEXT.md +52 -38
  2. package/LICENSE +9 -0
  3. package/api.json +42 -31
  4. package/es/antd-vue-pro.css +9 -9
  5. package/es/components/component-provider/components/index.vue.d.ts +35 -0
  6. package/es/components/component-provider/components/index.vue.d.ts.map +1 -0
  7. package/es/components/component-provider/constants/index.d.ts +16 -0
  8. package/es/components/component-provider/constants/index.d.ts.map +1 -0
  9. package/es/components/component-provider/index.d.ts +4 -0
  10. package/es/components/component-provider/index.d.ts.map +1 -0
  11. package/es/components/component-provider/types/index.d.ts +63 -0
  12. package/es/components/component-provider/types/index.d.ts.map +1 -0
  13. package/es/components/form/components/BaseField/index.vue.d.ts +13 -0
  14. package/es/components/form/components/BaseField/index.vue.d.ts.map +1 -0
  15. package/es/components/form/components/BaseField/utils/index.d.ts +3 -0
  16. package/es/components/form/components/BaseField/utils/index.d.ts.map +1 -0
  17. package/es/components/form/components/BaseFormItem/index.vue.d.ts +9 -0
  18. package/es/components/form/components/BaseFormItem/index.vue.d.ts.map +1 -0
  19. package/es/components/form/components/ContainerFragment/index.vue.d.ts +23 -0
  20. package/es/components/form/components/ContainerFragment/index.vue.d.ts.map +1 -0
  21. package/es/components/form/components/GroupedFieldAttrs/index.vue.d.ts +29 -0
  22. package/es/components/form/components/GroupedFieldAttrs/index.vue.d.ts.map +1 -0
  23. package/es/components/form/components/PathProvider/index.vue.d.ts +24 -0
  24. package/es/components/form/components/PathProvider/index.vue.d.ts.map +1 -0
  25. package/es/components/form/components/ProForm/index.vue.d.ts +36 -0
  26. package/es/components/form/components/ProForm/index.vue.d.ts.map +1 -0
  27. package/es/components/form/components/SlotComponent/index.vue.d.ts +7 -0
  28. package/es/components/form/components/SlotComponent/index.vue.d.ts.map +1 -0
  29. package/es/components/form/components/index.d.ts +12 -0
  30. package/es/components/form/components/index.d.ts.map +1 -0
  31. package/es/components/form/constants/index.d.ts +78 -0
  32. package/es/components/form/constants/index.d.ts.map +1 -0
  33. package/es/components/form/hooks/index.d.ts +5 -0
  34. package/es/components/form/hooks/index.d.ts.map +1 -0
  35. package/es/components/form/hooks/useFields.d.ts +57 -0
  36. package/es/components/form/hooks/useFields.d.ts.map +1 -0
  37. package/es/components/form/hooks/useForm.d.ts +93 -0
  38. package/es/components/form/hooks/useForm.d.ts.map +1 -0
  39. package/es/components/form/hooks/useFormRef.d.ts +30 -0
  40. package/es/components/form/hooks/useFormRef.d.ts.map +1 -0
  41. package/es/components/form/index.d.ts +7 -0
  42. package/es/components/form/index.d.ts.map +1 -0
  43. package/es/components/form/types/index.d.ts +207 -0
  44. package/es/components/form/types/index.d.ts.map +1 -0
  45. package/es/components/table/components/ColumnControl.vue.d.ts +9 -0
  46. package/es/components/table/components/ColumnControl.vue.d.ts.map +1 -0
  47. package/es/components/table/components/DefaultSearchFormContainer.vue.d.ts +18 -0
  48. package/es/components/table/components/DefaultSearchFormContainer.vue.d.ts.map +1 -0
  49. package/es/components/table/components/DefaultTableContainer.vue.d.ts +18 -0
  50. package/es/components/table/components/DefaultTableContainer.vue.d.ts.map +1 -0
  51. package/es/components/table/components/ProTable.vue.d.ts +100 -0
  52. package/es/components/table/components/ProTable.vue.d.ts.map +1 -0
  53. package/es/components/table/components/SearchForm.vue.d.ts +48 -0
  54. package/es/components/table/components/SearchForm.vue.d.ts.map +1 -0
  55. package/es/components/table/components/SizeControl.vue.d.ts +12 -0
  56. package/es/components/table/components/SizeControl.vue.d.ts.map +1 -0
  57. package/es/components/table/components/icons/ColumnHeightOutlined.vue.d.ts +3 -0
  58. package/es/components/table/components/icons/ColumnHeightOutlined.vue.d.ts.map +1 -0
  59. package/es/components/table/components/icons/DownOutlined.vue.d.ts +3 -0
  60. package/es/components/table/components/icons/DownOutlined.vue.d.ts.map +1 -0
  61. package/es/components/table/components/icons/FilterOutlined.vue.d.ts +3 -0
  62. package/es/components/table/components/icons/FilterOutlined.vue.d.ts.map +1 -0
  63. package/es/components/table/components/index.d.ts +5 -0
  64. package/es/components/table/components/index.d.ts.map +1 -0
  65. package/es/components/table/hooks/index.d.ts +2 -0
  66. package/es/components/table/hooks/index.d.ts.map +1 -0
  67. package/es/components/table/hooks/useTable.d.ts +112 -0
  68. package/es/components/table/hooks/useTable.d.ts.map +1 -0
  69. package/es/components/table/index.d.ts +8 -0
  70. package/es/components/table/index.d.ts.map +1 -0
  71. package/es/components/table/types/index.d.ts +70 -0
  72. package/es/components/table/types/index.d.ts.map +1 -0
  73. package/es/index.d.ts +76 -1622
  74. package/es/index.d.ts.map +1 -0
  75. package/es/index.js +1314 -25
  76. package/es/index.js.map +1 -0
  77. package/es/shared/core/index.d.ts +6 -0
  78. package/es/shared/core/index.d.ts.map +1 -0
  79. package/es/shared/ui/index.d.ts +15 -0
  80. package/es/shared/ui/index.d.ts.map +1 -0
  81. package/package.json +20 -17
  82. package/src/components/component-provider/components/index.vue +81 -0
  83. package/src/components/component-provider/constants/index.ts +165 -0
  84. package/src/components/component-provider/index.ts +6 -0
  85. package/src/components/component-provider/types/index.ts +90 -0
  86. package/src/components/form/components/BaseField/index.vue +188 -0
  87. package/src/components/form/components/BaseField/utils/index.ts +16 -0
  88. package/src/components/form/components/BaseFormItem/index.vue +163 -0
  89. package/src/components/form/components/ContainerFragment/index.vue +24 -0
  90. package/src/components/form/components/GroupedFieldAttrs/index.vue +118 -0
  91. package/src/components/form/components/PathProvider/index.vue +19 -0
  92. package/src/components/form/components/ProForm/index.vue +109 -0
  93. package/src/components/form/components/SlotComponent/index.vue +26 -0
  94. package/src/components/form/components/index.ts +15 -0
  95. package/src/components/form/constants/index.ts +135 -0
  96. package/src/components/form/hooks/index.ts +5 -0
  97. package/src/components/form/hooks/useFields.ts +67 -0
  98. package/src/components/form/hooks/useForm.ts +110 -0
  99. package/src/components/form/hooks/useFormRef.ts +35 -0
  100. package/src/components/form/index.ts +29 -0
  101. package/src/components/form/types/index.ts +271 -0
  102. package/src/components/table/components/ColumnControl.vue +132 -0
  103. package/src/components/table/components/DefaultSearchFormContainer.vue +20 -0
  104. package/src/components/table/components/DefaultTableContainer.vue +20 -0
  105. package/src/components/table/components/ProTable.vue +366 -0
  106. package/src/components/table/components/SearchForm.vue +295 -0
  107. package/src/components/table/components/SizeControl.vue +59 -0
  108. package/src/components/table/components/icons/ColumnHeightOutlined.vue +4 -0
  109. package/src/components/table/components/icons/DownOutlined.vue +4 -0
  110. package/src/components/table/components/icons/FilterOutlined.vue +4 -0
  111. package/src/components/table/components/index.ts +4 -0
  112. package/src/components/table/hooks/index.ts +1 -0
  113. package/src/components/table/hooks/useTable.ts +130 -0
  114. package/src/components/table/index.ts +14 -0
  115. package/src/components/table/types/index.ts +74 -0
  116. package/src/index.ts +80 -0
  117. package/src/shared/core/index.ts +37 -0
  118. package/src/shared/ui/index.ts +60 -0
  119. package/es/component-provider/index-Dmz32tSB.js +0 -174
  120. package/es/component-provider/index.js +0 -4
  121. package/es/core/index-ghYuQ3Sy.js +0 -360
  122. package/es/form/index.js +0 -451
  123. package/es/table/index.js +0 -703
  124. package/es/vendor/utils/lodash-es-p6jau26B.js +0 -1120
package/es/table/index.js DELETED
@@ -1,703 +0,0 @@
1
- import { createElementBlock, openBlock, createElementVNode, defineComponent, ref, computed, watch, watchEffect, createBlock, unref, mergeProps, withCtx, createVNode, renderSlot, createCommentVNode, Fragment, resolveDynamicComponent, createTextVNode, toDisplayString, normalizeStyle, useModel, renderList, withModifiers, mergeModels, inject, useAttrs, useSlots, onMounted, normalizeClass, createSlots, normalizeProps, guardReactiveProps, nextTick } from "vue";
2
- import { I as INJECT_CONFIG } from "../component-provider/index-Dmz32tSB.js";
3
- import _sfc_main$9, { ContainerFragment as _sfc_main$a } from "../form/index.js";
4
- import { Space, Button, theme, Dropdown, Menu, MenuItem, Checkbox, MenuDivider, Table } from "ant-design-vue";
5
- import { p as pick } from "../vendor/utils/lodash-es-p6jau26B.js";
6
- import { g as getObject, c as camelizeProperties, f as useTable$1 } from "../core/index-ghYuQ3Sy.js";
7
- import { useConfigContextInject } from "ant-design-vue/es/config-provider/context";
8
- import { tableProps } from "ant-design-vue/es/table";
9
- const _export_sfc = (sfc, props) => {
10
- const target = sfc.__vccOpts || sfc;
11
- for (const [key, val] of props) {
12
- target[key] = val;
13
- }
14
- return target;
15
- };
16
- const _sfc_main$8 = {};
17
- const _hoisted_1$3 = {
18
- focusable: "false",
19
- "data-icon": "down",
20
- width: "1em",
21
- height: "1em",
22
- fill: "currentColor",
23
- "aria-hidden": "true",
24
- viewBox: "64 64 896 896"
25
- };
26
- function _sfc_render$2(_ctx, _cache) {
27
- return openBlock(), createElementBlock("svg", _hoisted_1$3, [..._cache[0] || (_cache[0] = [
28
- createElementVNode("path", { d: "M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" }, null, -1)
29
- ])]);
30
- }
31
- const DownOutlined = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$2]]);
32
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
33
- ...{ name: "SearchForm" },
34
- __name: "SearchForm",
35
- props: {
36
- form: {},
37
- layout: { default: "grid" },
38
- expand: { type: [Boolean, Object], default: true },
39
- searchButton: { type: [Object, Function, Boolean], default: void 0 },
40
- resetButton: { type: [Object, Function, Boolean], default: void 0 },
41
- expandButton: { type: [Object, Function, Boolean], default: void 0 },
42
- rowGap: { default: 16 },
43
- columnGap: { default: 24 },
44
- class: {},
45
- style: {}
46
- },
47
- emits: ["search", "reset"],
48
- setup(__props, { emit: __emit }) {
49
- const emit = __emit;
50
- const proFormHeight = ref("unset");
51
- const collapseHeight = ref(0);
52
- let rowHeight = 32;
53
- const computedExpand = computed(() => {
54
- if (!__props.expand) return false;
55
- if (__props.expand === true) return { minExpandRows: 2, expandStatus: false };
56
- return {
57
- minExpandRows: Math.max(Math.floor(__props.expand.minExpandRows ?? 2), 1),
58
- expandStatus: __props.expand.expandStatus ?? false
59
- };
60
- });
61
- const showExpandToggle = ref(false);
62
- const expandStatus = ref(true);
63
- const changeExpandStatus = () => {
64
- expandStatus.value = !expandStatus.value;
65
- };
66
- const { formRef, getFormData } = __props.form;
67
- const setInitExpandStatus = () => {
68
- expandStatus.value = false;
69
- if (formRef.value && __props.expand) {
70
- const formEl = formRef.value.$el;
71
- const formItemsEl = formEl.querySelectorAll(
72
- "[class*='-form-item'] > [path]"
73
- );
74
- const observer = new IntersectionObserver(
75
- (entries) => {
76
- expandStatus.value = entries.some((e) => {
77
- if (e.intersectionRatio === 0) {
78
- const path = e.target.getAttribute("path");
79
- const searchFieldValue = path ? getFormData == null ? void 0 : getFormData(path) : void 0;
80
- return ![null, void 0].includes(searchFieldValue);
81
- }
82
- return __props.expand.expandStatus;
83
- });
84
- observer.disconnect();
85
- },
86
- { root: formEl }
87
- );
88
- formItemsEl.forEach((element) => {
89
- observer.observe(element);
90
- });
91
- }
92
- };
93
- watch(
94
- [
95
- () => {
96
- var _a, _b, _c;
97
- return (_c = (_b = (_a = __props.form) == null ? void 0 : _a.fields.value) == null ? void 0 : _b.filter((f) => !f.hidden)) == null ? void 0 : _c.length;
98
- },
99
- () => formRef.value,
100
- () => __props.expand
101
- ],
102
- () => {
103
- var _a, _b, _c, _d, _e;
104
- if (!__props.expand || !expandStatus.value || !formRef.value) return;
105
- const proFormEl = (_a = formRef.value) == null ? void 0 : _a.$el;
106
- const { height = 0 } = ((_b = proFormEl == null ? void 0 : proFormEl.getBoundingClientRect) == null ? void 0 : _b.call(proFormEl)) || {};
107
- proFormHeight.value = height;
108
- rowHeight = (_e = (_d = (_c = proFormEl == null ? void 0 : proFormEl.querySelector("[class*='-form-item']")) == null ? void 0 : _c.getBoundingClientRect) == null ? void 0 : _d.call(_c)) == null ? void 0 : _e.height;
109
- },
110
- { flush: "post", immediate: true }
111
- );
112
- watchEffect(
113
- () => {
114
- if (typeof proFormHeight.value !== "number") return;
115
- if (__props.layout === "grid" && computedExpand.value) {
116
- const { minExpandRows } = computedExpand.value;
117
- collapseHeight.value = Math.min(
118
- minExpandRows * rowHeight + (minExpandRows - 1) * __props.rowGap,
119
- +proFormHeight.value
120
- );
121
- showExpandToggle.value = +proFormHeight.value - collapseHeight.value > 1;
122
- if (showExpandToggle.value) {
123
- setInitExpandStatus();
124
- }
125
- } else {
126
- showExpandToggle.value = false;
127
- }
128
- },
129
- { flush: "post" }
130
- );
131
- const layoutProps = computed(
132
- () => __props.layout === "grid" ? {
133
- grid: {
134
- gutter: [__props.columnGap, __props.rowGap],
135
- style: { flex: 1, marginRight: "12px" }
136
- },
137
- style: {
138
- display: "flex",
139
- overflow: "hidden",
140
- height: `${expandStatus.value ? proFormHeight.value : collapseHeight.value}px`
141
- }
142
- } : {
143
- layout: "inline",
144
- style: { gap: `${__props.rowGap}px ${__props.columnGap}px` },
145
- grid: false
146
- }
147
- );
148
- const onReset = () => {
149
- emit("reset");
150
- };
151
- const onSearch = () => {
152
- emit("search");
153
- };
154
- return (_ctx, _cache) => {
155
- return openBlock(), createBlock(unref(_sfc_main$9), mergeProps(layoutProps.value, {
156
- form: __props.form,
157
- class: "pro-table_search-form transition"
158
- }), {
159
- default: withCtx(() => [
160
- createVNode(unref(Space), {
161
- align: "start",
162
- class: "pro-table_search-form_button-group"
163
- }, {
164
- default: withCtx(() => [
165
- renderSlot(_ctx.$slots, "reset-button", { onClick: onReset }, () => [
166
- __props.resetButton !== false ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
167
- __props.resetButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.resetButton), {
168
- key: 0,
169
- onClick: onReset
170
- })) : (openBlock(), createBlock(unref(Button), {
171
- key: 1,
172
- class: "pro-table_search-form_reset-button",
173
- onClick: onReset
174
- }, {
175
- default: withCtx(() => [..._cache[0] || (_cache[0] = [
176
- createTextVNode("重置", -1)
177
- ])]),
178
- _: 1
179
- }))
180
- ], 64)) : createCommentVNode("", true)
181
- ], true),
182
- renderSlot(_ctx.$slots, "search-button", { onClick: onSearch }, () => [
183
- __props.searchButton !== false ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
184
- __props.searchButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.searchButton), {
185
- key: 0,
186
- onClick: onSearch
187
- })) : (openBlock(), createBlock(unref(Button), {
188
- key: 1,
189
- class: "pro-table_search-form_search-button",
190
- type: "primary",
191
- "html-type": "submit",
192
- onClick: onSearch
193
- }, {
194
- default: withCtx(() => [..._cache[1] || (_cache[1] = [
195
- createTextVNode("查询 ", -1)
196
- ])]),
197
- _: 1
198
- }))
199
- ], 64)) : createCommentVNode("", true)
200
- ], true),
201
- renderSlot(_ctx.$slots, "expand-button", { onClick: changeExpandStatus }, () => [
202
- __props.expandButton !== false && showExpandToggle.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
203
- __props.expandButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.expandButton), {
204
- key: 0,
205
- "expand-status": expandStatus.value,
206
- onClick: changeExpandStatus
207
- }, null, 8, ["expand-status"])) : (openBlock(), createBlock(unref(Button), {
208
- key: 1,
209
- type: "link",
210
- class: "pro-table_search-form_expand-toggle-button",
211
- onClick: changeExpandStatus
212
- }, {
213
- default: withCtx(() => [
214
- createTextVNode(toDisplayString(expandStatus.value ? "收起" : "展开") + " ", 1),
215
- createVNode(DownOutlined, {
216
- class: "transition",
217
- style: normalizeStyle([{ "margin-left": "4px" }, { transform: `rotate(${expandStatus.value ? -180 : 0}deg)` }])
218
- }, null, 8, ["style"])
219
- ]),
220
- _: 1
221
- }))
222
- ], 64)) : createCommentVNode("", true)
223
- ], true)
224
- ]),
225
- _: 3
226
- })
227
- ]),
228
- _: 3
229
- }, 16, ["form"]);
230
- };
231
- }
232
- });
233
- const SearchForm = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-b023c914"]]);
234
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
235
- __name: "DefaultSearchFormContainer",
236
- setup(__props) {
237
- const { token } = theme.useToken();
238
- return (_ctx, _cache) => {
239
- return openBlock(), createElementBlock("div", {
240
- class: "pro-table_search-form-container",
241
- style: normalizeStyle({ backgroundColor: unref(token).colorBgContainer })
242
- }, [
243
- renderSlot(_ctx.$slots, "default", {}, void 0, true)
244
- ], 4);
245
- };
246
- }
247
- });
248
- const DefaultSearchFormContainer = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-c385cd54"]]);
249
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
250
- __name: "DefaultTableContainer",
251
- setup(__props) {
252
- const { token } = theme.useToken();
253
- return (_ctx, _cache) => {
254
- return openBlock(), createElementBlock("div", {
255
- class: "pro-table_table-container",
256
- style: normalizeStyle({ backgroundColor: unref(token).colorBgContainer })
257
- }, [
258
- renderSlot(_ctx.$slots, "default", {}, void 0, true)
259
- ], 4);
260
- };
261
- }
262
- });
263
- const DefaultTableContainer = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-ac3cdb51"]]);
264
- const _sfc_main$4 = {};
265
- const _hoisted_1$2 = {
266
- focusable: "false",
267
- "data-icon": "column-height",
268
- width: "1em",
269
- height: "1em",
270
- fill: "currentColor",
271
- "aria-hidden": "true",
272
- viewBox: "64 64 896 896"
273
- };
274
- function _sfc_render$1(_ctx, _cache) {
275
- return openBlock(), createElementBlock("svg", _hoisted_1$2, [..._cache[0] || (_cache[0] = [
276
- createElementVNode("path", { d: "M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z" }, null, -1)
277
- ])]);
278
- }
279
- const ColumnHeightOutlined = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$1]]);
280
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
281
- __name: "SizeControl",
282
- props: {
283
- "size": {},
284
- "sizeModifiers": {}
285
- },
286
- emits: ["update:size"],
287
- setup(__props) {
288
- var _a;
289
- const configContext = useConfigContextInject();
290
- const size = useModel(__props, "size");
291
- size.value = size.value ?? ((_a = configContext.componentSize) == null ? void 0 : _a.value) ?? "large";
292
- const onSizeChange = (val) => {
293
- size.value = val.key;
294
- };
295
- const sizeOptions = [
296
- { label: "默认", key: "large" },
297
- { label: "中等", key: "middle" },
298
- { label: "紧凑", key: "small" }
299
- ];
300
- return (_ctx, _cache) => {
301
- return openBlock(), createBlock(unref(Dropdown), {
302
- arrow: "",
303
- placement: "bottomRight"
304
- }, {
305
- overlay: withCtx(() => [
306
- createVNode(unref(Menu), {
307
- style: { "width": "100px", "text-align": "center" },
308
- "selected-keys": size.value ? [size.value] : [],
309
- items: sizeOptions,
310
- onClick: onSizeChange
311
- }, null, 8, ["selected-keys"])
312
- ]),
313
- default: withCtx(() => [
314
- createVNode(unref(Button), {
315
- type: "text",
316
- class: "pro-table_size-control_button"
317
- }, {
318
- default: withCtx(() => [
319
- createVNode(ColumnHeightOutlined)
320
- ]),
321
- _: 1
322
- })
323
- ]),
324
- _: 1
325
- });
326
- };
327
- }
328
- });
329
- const SizeControl = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-db17998d"]]);
330
- const _sfc_main$2 = {};
331
- const _hoisted_1$1 = {
332
- focusable: "false",
333
- "data-icon": "filter",
334
- width: "1em",
335
- height: "1em",
336
- fill: "currentColor",
337
- "aria-hidden": "true",
338
- viewBox: "64 64 896 896"
339
- };
340
- function _sfc_render(_ctx, _cache) {
341
- return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [
342
- createElementVNode("path", { d: "M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z" }, null, -1)
343
- ])]);
344
- }
345
- const FilterOutlined = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render]]);
346
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
347
- __name: "ColumnControl",
348
- props: {
349
- columns: {},
350
- table: { default: () => void 0 }
351
- },
352
- setup(__props) {
353
- const open = ref(false);
354
- const checkAll = ref(false);
355
- const indeterminate = ref(false);
356
- const checkedColumnsOptions = computed(
357
- () => __props.columns.flatMap(
358
- (item) => item.key && item.title ? {
359
- label: item.title,
360
- value: item.key,
361
- checked: !item.hidden
362
- } : []
363
- )
364
- );
365
- const checkedColumnKeys = computed({
366
- get() {
367
- return checkedColumnsOptions.value.flatMap(
368
- (item) => item.checked ? item.value : []
369
- ) || [];
370
- },
371
- set(val) {
372
- var _a;
373
- (_a = checkedColumnsOptions.value) == null ? void 0 : _a.forEach((item) => {
374
- var _a2, _b;
375
- (_b = (_a2 = __props.table) == null ? void 0 : _a2.setColumn) == null ? void 0 : _b.call(_a2, item.value, {
376
- hidden: !val.includes(item.value)
377
- });
378
- });
379
- }
380
- });
381
- const onCheckAllChange = (e) => {
382
- checkedColumnKeys.value = e.target.checked ? checkedColumnsOptions.value.map((item) => item.value) : [];
383
- indeterminate.value = false;
384
- };
385
- const checkColumnsMenuItemClick = (val) => {
386
- if (checkedColumnKeys.value.includes(val)) {
387
- checkedColumnKeys.value = checkedColumnKeys.value.filter(
388
- (item) => item !== val
389
- );
390
- } else {
391
- checkedColumnKeys.value = [...checkedColumnKeys.value, val];
392
- }
393
- };
394
- watch(
395
- checkedColumnKeys,
396
- (val) => {
397
- indeterminate.value = !!val.length && val.length < checkedColumnsOptions.value.length;
398
- checkAll.value = val.length === checkedColumnsOptions.value.length;
399
- },
400
- { immediate: true }
401
- );
402
- return (_ctx, _cache) => {
403
- return openBlock(), createBlock(unref(Dropdown), {
404
- open: open.value,
405
- "onUpdate:open": _cache[1] || (_cache[1] = ($event) => open.value = $event),
406
- arrow: "",
407
- placement: "bottomRight"
408
- }, {
409
- overlay: withCtx(() => [
410
- createVNode(unref(Menu), {
411
- style: { "min-width": "100px", "max-height": "500px", "overflow-y": "scroll" },
412
- selectable: false
413
- }, {
414
- default: withCtx(() => [
415
- (openBlock(), createBlock(unref(MenuItem), { key: 0 }, {
416
- default: withCtx(() => [
417
- createElementVNode("div", null, [
418
- createVNode(unref(Checkbox), {
419
- checked: checkAll.value,
420
- indeterminate: indeterminate.value,
421
- onChange: onCheckAllChange
422
- }, {
423
- default: withCtx(() => [..._cache[2] || (_cache[2] = [
424
- createTextVNode(" 全选 ", -1)
425
- ])]),
426
- _: 1
427
- }, 8, ["checked", "indeterminate"])
428
- ])
429
- ]),
430
- _: 1
431
- })),
432
- createVNode(unref(MenuDivider)),
433
- (openBlock(true), createElementBlock(Fragment, null, renderList(checkedColumnsOptions.value, (item) => {
434
- return openBlock(), createBlock(unref(MenuItem), {
435
- key: item.value,
436
- onClick: ($event) => checkColumnsMenuItemClick(item.value)
437
- }, {
438
- default: withCtx(() => [
439
- createVNode(unref(Checkbox), {
440
- checked: checkedColumnKeys.value.includes(item.value)
441
- }, {
442
- default: withCtx(() => [
443
- createElementVNode("div", {
444
- onClick: _cache[0] || (_cache[0] = withModifiers(() => {
445
- }, ["stop"]))
446
- }, toDisplayString(item.label), 1)
447
- ]),
448
- _: 2
449
- }, 1032, ["checked"])
450
- ]),
451
- _: 2
452
- }, 1032, ["onClick"]);
453
- }), 128))
454
- ]),
455
- _: 1
456
- })
457
- ]),
458
- default: withCtx(() => [
459
- createVNode(unref(Button), {
460
- type: "text",
461
- class: "pro-table_column-control_button"
462
- }, {
463
- default: withCtx(() => [
464
- createVNode(FilterOutlined)
465
- ]),
466
- _: 1
467
- })
468
- ]),
469
- _: 1
470
- }, 8, ["open"]);
471
- };
472
- }
473
- });
474
- const ColumnControl = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-d503f78a"]]);
475
- const _hoisted_1 = { class: "pro-table_header" };
476
- const _hoisted_2 = {
477
- key: 0,
478
- class: "pro-table_header_button-bar"
479
- };
480
- const _hoisted_3 = {
481
- key: 1,
482
- class: "pro-table_header_toolbar"
483
- };
484
- const _hoisted_4 = {
485
- key: 2,
486
- class: "pro-table_header_size-control"
487
- };
488
- const _hoisted_5 = {
489
- key: 3,
490
- class: "pro-table_header_column-control"
491
- };
492
- const _sfc_main = /* @__PURE__ */ defineComponent({
493
- ...{ name: "ProTable", inheritAttrs: false },
494
- __name: "BaseTable",
495
- props: /* @__PURE__ */ mergeModels({
496
- table: { default: () => void 0 },
497
- search: { type: Function, default: void 0 },
498
- addIndexColumn: { type: Boolean, default: () => void 0 },
499
- immediateSearch: { type: Boolean, default: () => void 0 },
500
- control: { type: [Boolean, Object], default: () => void 0 },
501
- searchFormConfig: { default: () => void 0 },
502
- tableContainer: { type: [Object, Function, Boolean], default: void 0 }
503
- }, {
504
- "size": {},
505
- "sizeModifiers": {},
506
- "loading": { type: Boolean },
507
- "loadingModifiers": {}
508
- }),
509
- emits: ["update:size", "update:loading"],
510
- setup(__props) {
511
- const config = INJECT_CONFIG["pro-table"];
512
- const injectProps = inject(config.injectionKey, config.default);
513
- const tableProperties = Object.keys(tableProps());
514
- const injectAttrs = pick(injectProps, tableProperties);
515
- const computedSearchFormConfig = computed(() => {
516
- var _a, _b;
517
- const container = ((_a = __props.searchFormConfig) == null ? void 0 : _a.container) ?? ((_b = injectProps.searchFormConfig) == null ? void 0 : _b.container) ?? DefaultSearchFormContainer;
518
- return {
519
- ...injectProps.searchFormConfig,
520
- ...getObject(__props.searchFormConfig),
521
- container: container ? container : void 0
522
- };
523
- });
524
- const attrs = useAttrs();
525
- const tableAttrs = computed(() => {
526
- return pick(camelizeProperties(attrs), tableProperties);
527
- });
528
- const { columns, dataSource, searchForm, pageParam, setPageParam } = __props.table || {};
529
- const size = useModel(__props, "size");
530
- const loading = useModel(__props, "loading");
531
- const _search = async () => {
532
- var _a;
533
- try {
534
- loading.value = true;
535
- await ((_a = __props.search) == null ? void 0 : _a.call(__props));
536
- } finally {
537
- loading.value = false;
538
- }
539
- };
540
- const reset = () => {
541
- var _a;
542
- (_a = __props.table) == null ? void 0 : _a.resetQueryParams();
543
- nextTick(() => {
544
- _search();
545
- });
546
- };
547
- const slots = useSlots();
548
- const {
549
- "search-form": searchFormSlot,
550
- "button-bar": buttonBarSlot,
551
- toolbar: toolbarSlot,
552
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
553
- table: tableSlot,
554
- ...tableSlots
555
- } = slots;
556
- const searchPage1st = () => {
557
- setPageParam == null ? void 0 : setPageParam({ current: 1 });
558
- _search();
559
- };
560
- const computedTableProps = computed(() => {
561
- return {
562
- ...injectAttrs,
563
- ...tableAttrs.value,
564
- pagination: void 0,
565
- onChange: void 0
566
- };
567
- });
568
- const computedTableContainer = computed(() => {
569
- const container = __props.tableContainer ?? injectProps.tableContainer ?? DefaultTableContainer;
570
- return container ? container : void 0;
571
- });
572
- const indexColumn = {
573
- title: "序号",
574
- dataIndex: "_index",
575
- width: 80,
576
- customRender: ({ index }) => index + 1
577
- };
578
- const computedColumns = computed(
579
- () => [
580
- ...__props.addIndexColumn ?? injectProps.addIndexColumn ? [indexColumn] : [],
581
- ...(tableAttrs.value.columns ?? (columns == null ? void 0 : columns.value) ?? []).flatMap(
582
- (item, index) => {
583
- if (item.key) return [{ ...item, key: item.key }];
584
- if (item.dataIndex) {
585
- const dataIndexKey = Array.isArray(item.dataIndex) ? item.dataIndex.join(".") : item.dataIndex;
586
- return [{ ...item, key: dataIndexKey }];
587
- }
588
- return [{ ...item, key: index }];
589
- }
590
- )
591
- ]
592
- );
593
- const visibleComputedColumns = computed(() => {
594
- return computedColumns.value.filter((item) => !item.hidden);
595
- });
596
- const computedDataSource = computed(() => {
597
- return tableAttrs.value.dataSource ?? (dataSource == null ? void 0 : dataSource.value);
598
- });
599
- const computedPagination = computed(() => {
600
- if (tableAttrs.value.pagination === false) return false;
601
- return {
602
- ...injectAttrs.pagination,
603
- ...pageParam,
604
- ...tableAttrs.value.pagination
605
- };
606
- });
607
- const onTableChange = (...args) => {
608
- var _a;
609
- setPageParam == null ? void 0 : setPageParam(args[0]);
610
- (_a = attrs.onChange) == null ? void 0 : _a.call(attrs, ...args);
611
- _search();
612
- };
613
- const showSearch = computed(() => {
614
- var _a, _b;
615
- return !!(searchFormSlot || ((_a = computedSearchFormConfig.value) == null ? void 0 : _a.hidden) !== true && searchForm && ((_b = searchForm.fields.value.filter((item) => !item.hidden)) == null ? void 0 : _b.length) > 0);
616
- });
617
- const computedControl = computed(() => {
618
- const mergedControl = __props.control ?? injectProps.control;
619
- const sizeControl = (mergedControl == null ? void 0 : mergedControl.sizeControl) ?? mergedControl;
620
- const columnControl = (mergedControl == null ? void 0 : mergedControl.columnControl) ?? mergedControl;
621
- return { sizeControl, columnControl };
622
- });
623
- onMounted(() => {
624
- if (__props.immediateSearch ?? injectProps.immediateSearch) {
625
- _search();
626
- }
627
- });
628
- return (_ctx, _cache) => {
629
- return openBlock(), createElementBlock("div", {
630
- class: normalizeClass(["pro-table", _ctx.$attrs.class]),
631
- style: normalizeStyle(_ctx.$attrs.style)
632
- }, [
633
- showSearch.value ? (openBlock(), createBlock(unref(_sfc_main$a), {
634
- key: 0,
635
- component: computedSearchFormConfig.value.container
636
- }, {
637
- default: withCtx(() => [
638
- renderSlot(_ctx.$slots, "search-form", {}, () => [
639
- unref(searchForm) ? (openBlock(), createBlock(SearchForm, mergeProps({
640
- key: 0,
641
- form: unref(searchForm)
642
- }, computedSearchFormConfig.value, {
643
- onSearch: searchPage1st,
644
- onReset: reset
645
- }), null, 16, ["form"])) : createCommentVNode("", true)
646
- ], true)
647
- ]),
648
- _: 3
649
- }, 8, ["component"])) : createCommentVNode("", true),
650
- createVNode(unref(_sfc_main$a), { component: computedTableContainer.value }, {
651
- default: withCtx(() => [
652
- createElementVNode("div", _hoisted_1, [
653
- unref(buttonBarSlot) ? (openBlock(), createElementBlock("div", _hoisted_2, [
654
- renderSlot(_ctx.$slots, "button-bar", {}, void 0, true)
655
- ])) : createCommentVNode("", true),
656
- unref(toolbarSlot) ? (openBlock(), createElementBlock("div", _hoisted_3, [
657
- renderSlot(_ctx.$slots, "toolbar", {}, void 0, true)
658
- ])) : createCommentVNode("", true),
659
- computedControl.value.sizeControl ? (openBlock(), createElementBlock("div", _hoisted_4, [
660
- createVNode(unref(SizeControl), {
661
- size: size.value,
662
- "onUpdate:size": _cache[0] || (_cache[0] = ($event) => size.value = $event)
663
- }, null, 8, ["size"])
664
- ])) : createCommentVNode("", true),
665
- computedControl.value.columnControl ? (openBlock(), createElementBlock("div", _hoisted_5, [
666
- createVNode(unref(ColumnControl), {
667
- columns: computedColumns.value,
668
- table: __props.table
669
- }, null, 8, ["columns", "table"])
670
- ])) : createCommentVNode("", true)
671
- ]),
672
- renderSlot(_ctx.$slots, "table", {}, () => [
673
- createVNode(unref(Table), mergeProps({ class: "pro-table_content" }, computedTableProps.value, {
674
- size: size.value,
675
- loading: loading.value,
676
- columns: visibleComputedColumns.value,
677
- "data-source": computedDataSource.value,
678
- pagination: computedPagination.value,
679
- onChange: onTableChange
680
- }), createSlots({ _: 2 }, [
681
- renderList(tableSlots, (_, name) => {
682
- return {
683
- name,
684
- fn: withCtx((scoped) => [
685
- renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(scoped)), void 0, true)
686
- ])
687
- };
688
- })
689
- ]), 1040, ["size", "loading", "columns", "data-source", "pagination"])
690
- ], true)
691
- ]),
692
- _: 3
693
- }, 8, ["component"])
694
- ], 6);
695
- };
696
- }
697
- });
698
- const BaseTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c4d455c8"]]);
699
- const useTable = useTable$1;
700
- export {
701
- BaseTable as default,
702
- useTable
703
- };