@cloudbase/weda-ui 3.30.1 → 3.31.0

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 (222) hide show
  1. package/README.md +77 -0
  2. package/dist/configs/components/button.d.ts +5 -4
  3. package/dist/configs/components/calendar.d.ts +1 -1
  4. package/dist/configs/components/chart/bar.d.ts +1 -1
  5. package/dist/configs/components/chart/line.d.ts +1 -1
  6. package/dist/configs/components/chart/pie.d.ts +1 -1
  7. package/dist/configs/components/chart/statisticsCard.d.ts +2 -2
  8. package/dist/configs/components/form-date.d.ts +2 -2
  9. package/dist/configs/components/form-depart-tree-select.d.ts +2 -2
  10. package/dist/configs/components/form-email.d.ts +2 -2
  11. package/dist/configs/components/form-image-uploader.d.ts +2 -2
  12. package/dist/configs/components/form-input.d.ts +4 -4
  13. package/dist/configs/components/form-location.d.ts +6 -6
  14. package/dist/configs/components/form-multi-region.d.ts +2 -2
  15. package/dist/configs/components/form-phone.d.ts +2 -2
  16. package/dist/configs/components/form-region.d.ts +2 -2
  17. package/dist/configs/components/form-select-multiple.d.ts +2 -2
  18. package/dist/configs/components/form-select.d.ts +2 -2
  19. package/dist/configs/components/form-text-area.d.ts +2 -2
  20. package/dist/configs/components/form-time.d.ts +2 -2
  21. package/dist/configs/components/form-url.d.ts +2 -2
  22. package/dist/configs/components/form-user-tree-select.d.ts +2 -2
  23. package/dist/configs/components/grid/col.d.ts +6 -6
  24. package/dist/configs/components/grid/row.d.ts +4 -4
  25. package/dist/configs/components/image.d.ts +4 -4
  26. package/dist/configs/components/link.d.ts +1 -0
  27. package/dist/configs/components/modal.d.ts +1 -0
  28. package/dist/configs/components/qr_code.d.ts +1 -1
  29. package/dist/configs/components/swiper.d.ts +2 -0
  30. package/dist/configs/components/swiper.js +25 -6
  31. package/dist/configs/components/tabs.d.ts +1 -0
  32. package/dist/configs/components/wd-bubble.d.ts +7 -6
  33. package/dist/configs/components/wd-button.d.ts +1 -1
  34. package/dist/configs/components/wd-calendar.d.ts +1 -1
  35. package/dist/configs/components/wd-canvas.d.ts +1 -1
  36. package/dist/configs/components/wd-card.d.ts +1 -0
  37. package/dist/configs/components/wd-cascader.d.ts +9 -9
  38. package/dist/configs/components/wd-checkbox.d.ts +3 -3
  39. package/dist/configs/components/wd-code-editor.d.ts +3 -3
  40. package/dist/configs/components/wd-date-range.d.ts +8 -8
  41. package/dist/configs/components/wd-date.d.ts +8 -8
  42. package/dist/configs/components/wd-department.d.ts +11 -11
  43. package/dist/configs/components/wd-drawer.d.ts +1 -0
  44. package/dist/configs/components/wd-form-arr.d.ts +3 -3
  45. package/dist/configs/components/wd-form-detail.d.ts +2 -2
  46. package/dist/configs/components/wd-form-obj.d.ts +3 -3
  47. package/dist/configs/components/wd-form.d.ts +7 -6
  48. package/dist/configs/components/wd-icon.d.ts +2 -2
  49. package/dist/configs/components/wd-image.d.ts +4 -4
  50. package/dist/configs/components/wd-input-email.d.ts +35 -35
  51. package/dist/configs/components/wd-input-number.d.ts +10 -10
  52. package/dist/configs/components/wd-input-phone.d.ts +37 -35
  53. package/dist/configs/components/wd-input-phone.js +22 -3
  54. package/dist/configs/components/wd-input-url.d.ts +35 -35
  55. package/dist/configs/components/wd-input.d.ts +5 -5
  56. package/dist/configs/components/wd-layout.d.ts +1 -0
  57. package/dist/configs/components/wd-link.d.ts +1 -0
  58. package/dist/configs/components/wd-location.d.ts +5 -5
  59. package/dist/configs/components/wd-member.d.ts +13 -13
  60. package/dist/configs/components/wd-menu-layout.d.ts +7 -6
  61. package/dist/configs/components/wd-modal.d.ts +1 -0
  62. package/dist/configs/components/wd-progress.d.ts +7 -6
  63. package/dist/configs/components/wd-radio.d.ts +3 -3
  64. package/dist/configs/components/wd-rating.d.ts +6 -6
  65. package/dist/configs/components/wd-region.d.ts +9 -9
  66. package/dist/configs/components/wd-rich-text.d.ts +3 -3
  67. package/dist/configs/components/wd-select-multiple.d.ts +10 -10
  68. package/dist/configs/components/wd-select.d.ts +9 -9
  69. package/dist/configs/components/wd-side-tab.d.ts +2 -1
  70. package/dist/configs/components/wd-switch.d.ts +6 -6
  71. package/dist/configs/components/wd-table.d.ts +10 -9
  72. package/dist/configs/components/wd-tag-select.d.ts +7 -7
  73. package/dist/configs/components/wd-text.d.ts +3 -3
  74. package/dist/configs/components/wd-textarea.d.ts +3 -3
  75. package/dist/configs/components/wd-time.d.ts +8 -8
  76. package/dist/configs/components/wd-top-tab.d.ts +2 -1
  77. package/dist/configs/components/wd-tree.d.ts +1 -0
  78. package/dist/configs/components/wd-upload-file.d.ts +5 -5
  79. package/dist/configs/components/wd-upload-image.d.ts +13 -13
  80. package/dist/configs/components/wedaVideo.d.ts +2 -2
  81. package/dist/configs/components/wxOpenApi/phone.d.ts +2 -2
  82. package/dist/configs/components/wxOpenApi/phoneCode.d.ts +1 -1
  83. package/dist/configs/components/wxOpenApi/share.d.ts +2 -2
  84. package/dist/configs/components/wxOpenApi/userInfo.d.ts +4 -4
  85. package/dist/configs/index.d.ts +533 -528
  86. package/dist/configs/type-utils/index.d.ts +1 -1
  87. package/dist/style/index.css +4 -0
  88. package/dist/style/index.scss +1 -1
  89. package/dist/style/weda-ui.min.css +3 -3
  90. package/dist/web/components/chart/common/chart-custom-connector.d.ts +1 -0
  91. package/dist/web/components/flow/common/hooks/useFlowConfig.d.ts +1 -0
  92. package/dist/web/components/flow/modules/basic/Basic.d.ts +1 -0
  93. package/dist/web/components/flow/modules/basic/BasicMobile.d.ts +1 -0
  94. package/dist/web/components/flow/modules/combination/index.d.ts +1 -0
  95. package/dist/web/components/flow/modules/operations/control.d.ts +1 -0
  96. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/index.d.ts +1 -0
  97. package/dist/web/components/flow/modules/operations/controls-items/flow-task-info-modal/view-model.d.ts +1 -0
  98. package/dist/web/components/flow/modules/operations/controls-items/flow-task-info-modal.d.ts +1 -0
  99. package/dist/web/components/flow/modules/operations/controls-items/index.d.ts +1 -0
  100. package/dist/web/components/flow/modules/operations/view-model.d.ts +1 -0
  101. package/dist/web/components/flow/process/constants.d.ts +3 -3
  102. package/dist/web/components/form/enumSelect/NormalSelect.d.ts +1 -0
  103. package/dist/web/components/form/location/common/useLocationInfo.d.ts +1 -0
  104. package/dist/web/components/form/select/h5.d.ts +1 -1
  105. package/dist/web/components/form/userOrgSelect/component/depart-breadcrumb.d.ts +1 -0
  106. package/dist/web/components/form/userOrgSelect/component/depart-select/org-modal-pc.d.ts +1 -0
  107. package/dist/web/components/form/userOrgSelect/component/error-tips.d.ts +1 -0
  108. package/dist/web/components/form/userOrgSelect/component/input-tags.d.ts +1 -0
  109. package/dist/web/components/form/userOrgSelect/component/modal-search-h5.d.ts +1 -0
  110. package/dist/web/components/form/userOrgSelect/component/modal-search.d.ts +1 -0
  111. package/dist/web/components/form/userOrgSelect/component/modal-select-h5.d.ts +1 -0
  112. package/dist/web/components/form/userOrgSelect/component/org-tree-h5.d.ts +1 -0
  113. package/dist/web/components/form/userOrgSelect/component/org-tree.d.ts +1 -0
  114. package/dist/web/components/form/userOrgSelect/component/selected-list-h5.d.ts +1 -0
  115. package/dist/web/components/form/userOrgSelect/component/selected-list.d.ts +1 -0
  116. package/dist/web/components/form/userOrgSelect/component/user-org-list.d.ts +1 -0
  117. package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-list-h5.d.ts +1 -0
  118. package/dist/web/components/form/userOrgSelect/component/user-select-pc/error-tips.d.ts +1 -0
  119. package/dist/web/components/form/userOrgSelect/component/user-select-pc/model-user-list.d.ts +1 -0
  120. package/dist/web/components/form/userOrgSelect/component/user-select-pc/org-tree.d.ts +1 -0
  121. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.d.ts +1 -0
  122. package/dist/web/components/form-date/index.d.ts +9 -9
  123. package/dist/web/components/form-depart-tree-select/index.d.ts +9 -9
  124. package/dist/web/components/form-email/index.d.ts +7 -7
  125. package/dist/web/components/form-image-uploader/index.d.ts +9 -9
  126. package/dist/web/components/form-input/index.d.ts +14 -14
  127. package/dist/web/components/form-input-hooks/index.d.ts +1 -1
  128. package/dist/web/components/form-location/index.d.ts +13 -13
  129. package/dist/web/components/form-multi-region/index.d.ts +7 -7
  130. package/dist/web/components/form-phone/index.d.ts +7 -7
  131. package/dist/web/components/form-radio/index.d.ts +7 -7
  132. package/dist/web/components/form-region/index.d.ts +7 -7
  133. package/dist/web/components/form-rich-text/index.d.ts +5 -5
  134. package/dist/web/components/form-select/index.d.ts +12 -12
  135. package/dist/web/components/form-select-multiple/index.d.ts +11 -11
  136. package/dist/web/components/form-switch/index.d.ts +4 -4
  137. package/dist/web/components/form-text-area/index.d.ts +8 -8
  138. package/dist/web/components/form-time/index.d.ts +8 -8
  139. package/dist/web/components/form-upload-file/index.d.ts +10 -10
  140. package/dist/web/components/form-url/index.d.ts +7 -7
  141. package/dist/web/components/form-user-tree-select/index.d.ts +10 -10
  142. package/dist/web/components/grid/col.d.ts +2 -2
  143. package/dist/web/components/grid/row.d.ts +1 -1
  144. package/dist/web/components/lottery/index.d.ts +2 -2
  145. package/dist/web/components/pageLayout/PageContent/index.d.ts +1 -0
  146. package/dist/web/components/phone/index.d.ts +1 -0
  147. package/dist/web/components/phoneCode/index.d.ts +1 -0
  148. package/dist/web/components/share/index.d.ts +1 -0
  149. package/dist/web/components/swiper/index.d.ts +1 -1
  150. package/dist/web/components/swiper/index.js +35 -16
  151. package/dist/web/components/table/BaseTable.d.ts +1 -0
  152. package/dist/web/components/table/FieldRender.d.ts +2 -1
  153. package/dist/web/components/table/FilterFields.d.ts +1 -0
  154. package/dist/web/components/table/Form/Enum.d.ts +1 -0
  155. package/dist/web/components/table/Form/Location.d.ts +1 -0
  156. package/dist/web/components/table/QuoteModal.d.ts +1 -0
  157. package/dist/web/components/table/UserDepartment/ViewCell.d.ts +1 -0
  158. package/dist/web/components/table/UserDepartment/utils.d.ts +1 -0
  159. package/dist/web/components/userInfo/index.d.ts +1 -0
  160. package/dist/web/components/wd-calendar/MonthSelect.d.ts +1 -0
  161. package/dist/web/components/wd-code-editor/lang/index.d.ts +1 -1
  162. package/dist/web/components/wd-config-provider/wd-config-context.d.ts +1 -1
  163. package/dist/web/components/wd-date/elements/interface.d.ts +1 -1
  164. package/dist/web/components/wd-department/_design/wd-department-select.d.ts +1 -0
  165. package/dist/web/components/wd-form/hooks/use-remote-value.js +39 -8
  166. package/dist/web/components/wd-form/wd-form.d.ts +1 -0
  167. package/dist/web/components/wd-form-cell/wd-form-cell.d.ts +1 -0
  168. package/dist/web/components/wd-form-item/wd-input-group.d.ts +1 -0
  169. package/dist/web/components/wd-form-item/wd-input-wrap.d.ts +1 -0
  170. package/dist/web/components/wd-image/ImagePreview.d.ts +1 -0
  171. package/dist/web/components/wd-input/wd-input.d.ts +23 -23
  172. package/dist/web/components/wd-input-email/wd-input-email.d.ts +15 -15
  173. package/dist/web/components/wd-input-group/wd-input-group.d.ts +1 -0
  174. package/dist/web/components/wd-input-phone/wd-input-phone.d.ts +23 -23
  175. package/dist/web/components/wd-input-phone/wd-input-phone.js +1 -1
  176. package/dist/web/components/wd-input-url/wd-input-url.d.ts +15 -15
  177. package/dist/web/components/wd-layout/wd-layout.d.ts +1 -0
  178. package/dist/web/components/wd-location/_design/wd-location.d.ts +1 -0
  179. package/dist/web/components/wd-member/_design/wd-member-select.d.ts +1 -0
  180. package/dist/web/components/wd-radio/wd-radio.d.ts +1 -0
  181. package/dist/web/components/wd-region/_design/wd-region.d.ts +1 -0
  182. package/dist/web/components/wd-retry/wd-retry.d.ts +1 -0
  183. package/dist/web/components/wd-select/_design/wd-select.d.ts +1 -0
  184. package/dist/web/components/wd-select/hooks/useChooseList.d.ts +1 -1
  185. package/dist/web/components/wd-select/relationSelect/relationalSetting.d.ts +1 -0
  186. package/dist/web/components/wd-table/components/ExportFileModalByApi/index.d.ts +1 -0
  187. package/dist/web/components/wd-table/components/FieldRender/Form/Enum.d.ts +1 -0
  188. package/dist/web/components/wd-table/components/FieldRender/Form/Location.d.ts +1 -0
  189. package/dist/web/components/wd-table/components/FieldRender/ImagePreview.d.ts +1 -0
  190. package/dist/web/components/wd-table/components/FieldRender/QuoteModal.d.ts +1 -0
  191. package/dist/web/components/wd-table/components/FieldRender/UserDepartment/ViewCell.d.ts +1 -0
  192. package/dist/web/components/wd-table/components/FieldRender/UserDepartment/utils.d.ts +1 -0
  193. package/dist/web/components/wd-table/components/FieldRender/index.d.ts +3 -2
  194. package/dist/web/components/wd-table/components/FieldRender/index.js +6 -5
  195. package/dist/web/components/wd-table/components/FilterFieldsPanel/Fields.d.ts +1 -0
  196. package/dist/web/components/wd-table/components/FilterFieldsPanel/FilterFieldItem.d.ts +1 -0
  197. package/dist/web/components/wd-table/components/FilterFieldsPanel/InputAdornment.d.ts +1 -0
  198. package/dist/web/components/wd-table/components/FilterFieldsPanel/SelectSearch.d.ts +1 -0
  199. package/dist/web/components/wd-table/components/FilterFieldsPanel/filterFieldsGenerate.js +24 -1
  200. package/dist/web/components/wd-table/components/FilterFieldsPanel/index.js +187 -181
  201. package/dist/web/components/wd-table/components/ImportFileModalByApi/index.d.ts +1 -0
  202. package/dist/web/components/wd-table/components/InOrOutRecordModal.d.ts +1 -0
  203. package/dist/web/components/wd-table/components/Pagination/index.d.ts +1 -0
  204. package/dist/web/components/wd-table/components/SearchBox/index.d.ts +1 -0
  205. package/dist/web/components/wd-table/hooks/useAuthFields.d.ts +1 -0
  206. package/dist/web/components/wd-table/hooks/useAuthFields.js +12 -4
  207. package/dist/web/components/wd-table/hooks/useTableData.js +4 -4
  208. package/dist/web/components/wd-table/wd-table.js +3 -1
  209. package/dist/web/components/wd-tabs/tabs-h5.d.ts +1 -0
  210. package/dist/web/components/wd-tabs/tabs-pc.d.ts +1 -0
  211. package/dist/web/components/wd-tabs/tabs.d.ts +1 -0
  212. package/dist/web/components/wd-tag/_design.d.ts +1 -0
  213. package/dist/web/components/wd-tree/utils.d.ts +19 -19
  214. package/dist/web/components/wd-upload-file/_design/wd-upload-file.d.ts +1 -0
  215. package/dist/web/components/wd-upload-image/_design/wd-upload-image.d.ts +1 -0
  216. package/dist/web/utils/config-context/use-config.d.ts +1 -1
  217. package/dist/web/utils/datasource.d.ts +1 -0
  218. package/dist/web/utils/datasource.js +13 -25
  219. package/dist/web/utils/getPageQuery.d.ts +1 -0
  220. package/dist/web/utils/i18n/locale/en_US.d.ts +1 -0
  221. package/dist/web/utils/i18n/locale/zh_CN.d.ts +1 -0
  222. package/package.json +6 -4
@@ -1,8 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState, useEffect, forwardRef } from 'react';
2
+ import { useState, useEffect, forwardRef, useRef, useCallback, useMemo } from 'react';
3
3
  import { Row, Col, ConfigProvider, Drawer } from 'tea-component';
4
4
  import { dateCalculation } from '../../../../utils/date';
5
- import isObjectEqual from '../../../../utils/isObjectEqual';
6
5
  import { useConfig } from '../../../../utils/config-context';
7
6
  import { FilterFieldItem } from './FilterFieldItem';
8
7
  import { arrayInputType } from './Fields';
@@ -14,6 +13,8 @@ import { useSetWidgetApi } from '../../../../utils/widget-api/use-set-widget-api
14
13
  const escapeRegExp = (string) => {
15
14
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
16
15
  };
16
+ // 提升静态 JSX 到组件外部,避免每次渲染重新创建
17
+ const HiddenSubmitInput = _jsx("input", { type: "submit", style: { display: 'none' } });
17
18
  const getFilterConfig = (data) => data.map(({ name, label, value, fieldCalculationOption = [], fieldCalculation }) => ({
18
19
  name,
19
20
  label,
@@ -21,6 +22,96 @@ const getFilterConfig = (data) => data.map(({ name, label, value, fieldCalculati
21
22
  filterType: fieldCalculation === null || fieldCalculation === void 0 ? void 0 : fieldCalculation.value,
22
23
  filterTypeOption: fieldCalculationOption === null || fieldCalculationOption === void 0 ? void 0 : fieldCalculationOption.map((i) => i === null || i === void 0 ? void 0 : i.value),
23
24
  }));
25
+ // 处理 scope 类型的筛选条件
26
+ const handleScopeFilter = (item, searchValues) => {
27
+ if (item.filterType === 'number') {
28
+ if (item.value[0]) {
29
+ searchValues.push({ key: item.name, val: Number(item.value[0]), rel: 'gte' });
30
+ }
31
+ if (item.value[1]) {
32
+ searchValues.push({ key: item.name, val: Number(item.value[1]), rel: 'lte' });
33
+ }
34
+ }
35
+ else {
36
+ searchValues.push({ key: item.name, val: item.value[0], rel: 'gte' });
37
+ // @ts-ignore 兼容字符串和数字
38
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
39
+ searchValues.push({ key: item.name, val: item.value[1] + 999, rel: 'lte' });
40
+ }
41
+ };
42
+ // 处理字符串类型的默认筛选条件
43
+ const handleStringFilter = (item, searchValues) => {
44
+ var _a, _b;
45
+ const searchItem = { key: item.name, val: item.value, rel: item.fieldCalculation.value };
46
+ if (arrayInputType.includes(item.fieldCalculation.value) && ((_a = searchItem === null || searchItem === void 0 ? void 0 : searchItem.val) === null || _a === void 0 ? void 0 : _a.length)) {
47
+ searchValues.push(searchItem);
48
+ }
49
+ else {
50
+ searchItem.val = (_b = textToString(item.value)) === null || _b === void 0 ? void 0 : _b.trim();
51
+ searchValues.push(searchItem);
52
+ }
53
+ };
54
+ // 处理默认筛选条件
55
+ const handleDefaultFilter = (item, searchValues) => {
56
+ const searchItem = { key: item.name, val: item.value, rel: item.fieldCalculation.value };
57
+ if (item.filterType === 'string') {
58
+ handleStringFilter(item, searchValues);
59
+ }
60
+ else if (item.filterType === 'number') {
61
+ searchItem.val = Number(item.value);
62
+ searchValues.push(searchItem);
63
+ }
64
+ else if (['date', 'datetime', 'time'].includes(item.filterType)) {
65
+ searchItem.val = item.value;
66
+ dateCalculation(searchItem, item.filterType).forEach((calcItem) => {
67
+ searchValues.push(calcItem);
68
+ });
69
+ }
70
+ else {
71
+ searchValues.push(searchItem);
72
+ }
73
+ };
74
+ // 处理单个筛选项
75
+ const processFilterItem = (item, searchValues) => {
76
+ var _a, _b;
77
+ switch (item.fieldCalculation.value) {
78
+ case 'scope':
79
+ handleScopeFilter(item, searchValues);
80
+ break;
81
+ case 'exclude':
82
+ searchValues.push({
83
+ key: item.name,
84
+ val: `^((?!${item.filterType === 'string' ? escapeRegExp(item.value) : item.value}).)*$`,
85
+ rel: 'regex',
86
+ });
87
+ break;
88
+ case 'startWith':
89
+ searchValues.push({ key: item.name, val: `^${(_a = item.value) === null || _a === void 0 ? void 0 : _a.trim()}`, rel: 'regex' });
90
+ break;
91
+ case 'regex':
92
+ searchValues.push({ key: item.name, val: `^${escapeRegExp(item.value)}`, rel: item.fieldCalculation.value });
93
+ break;
94
+ case 'nsearch_ci':
95
+ if (item.filterType === 'string') {
96
+ if (Array.isArray(item.value) && item.value.length) {
97
+ searchValues.push({ key: item.name, val: item.value, rel: item.fieldCalculation.value });
98
+ }
99
+ else if (item.value) {
100
+ searchValues.push({
101
+ key: item.name,
102
+ val: (_b = textToString(item.value)) === null || _b === void 0 ? void 0 : _b.trim(),
103
+ rel: item.fieldCalculation.value,
104
+ });
105
+ }
106
+ }
107
+ else {
108
+ searchValues.push({ key: item.name, val: `${escapeRegExp(item.value)}`, rel: item.fieldCalculation.value });
109
+ }
110
+ break;
111
+ default:
112
+ handleDefaultFilter(item, searchValues);
113
+ }
114
+ };
24
115
  // 筛选表单
25
116
  export const FilterFieldsPanel = forwardRef(function Comp(props, ref) {
26
117
  const { filterFields, fetchData, openMobileFilter, setOpenMobileFilter, setFilterConfig, supportManyRelated } = props;
@@ -31,171 +122,86 @@ export const FilterFieldsPanel = forwardRef(function Comp(props, ref) {
31
122
  const [collapse, setCollapse] = useState(true);
32
123
  const [initFilterData, setInitFilterData] = useState([]);
33
124
  const [filterData, setFilterData] = useState([]);
34
- const updateFilterData = (filterFieldItemConfig) => {
35
- const newData = filterData.map((i) => (i.id === filterFieldItemConfig.id ? filterFieldItemConfig : i));
36
- setFilterData(newData);
37
- setFilterConfig(getFilterConfig(newData));
38
- };
39
- useEffect(() => {
40
- var _a;
41
- const result = filterFieldsGenerate(filterFields);
42
- // 筛选字段改变,重新初始化筛选面板
43
- if (!isObjectEqual(result, initFilterData)) {
44
- const initFilterData = JSON.parse(JSON.stringify(result));
45
- setInitFilterData(initFilterData);
46
- setFilterData(initFilterData);
47
- setFilterConfig(getFilterConfig(initFilterData));
48
- // 如果配置有值则执行查询
49
- if (initFilterData.some((i) => i.value)) {
50
- searchHandle(initFilterData);
51
- }
52
- // 如果折叠的查询条件中有值,则展开面板
53
- if ((_a = initFilterData === null || initFilterData === void 0 ? void 0 : initFilterData.filter((i, index) => index >= maxlength)) === null || _a === void 0 ? void 0 : _a.some((j) => j.value)) {
54
- setCollapse(false);
55
- }
56
- }
57
- // eslint-disable-next-line react-hooks/exhaustive-deps
58
- }, [filterFields]);
59
- const searchHandle = (searchData = filterData) => {
60
- let searchValues = [];
61
- const filterValues = searchData.filter((i) => {
62
- if (Array.isArray(i.value) && i.filterType === 'number' && i.fieldCalculation.value === 'scope') {
63
- // 若筛选字段为number类型,且为范围选择时,只要有一个值则返回
64
- return i.value[0] || i.value[1];
65
- }
66
- return i.value !== null && i.value !== undefined && i.value !== '';
125
+ // 使用 useRef 追踪上一次的 filterFields,避免死循环
126
+ const prevFilterFieldsRef = useRef('');
127
+ // 使用 useCallback + 函数式 setState,保持回调稳定,避免子组件不必要的重渲染
128
+ const updateFilterData = useCallback((filterFieldItemConfig) => {
129
+ setFilterData((prevData) => {
130
+ const newData = prevData.map((i) => (i.id === filterFieldItemConfig.id ? filterFieldItemConfig : i));
131
+ setFilterConfig(getFilterConfig(newData));
132
+ return newData;
67
133
  });
68
- // 为空不为空筛选条件
69
- searchData.forEach((i) => {
70
- var _a, _b;
71
- if (['$empty', '$nempty'].includes((_a = i === null || i === void 0 ? void 0 : i.fieldCalculation) === null || _a === void 0 ? void 0 : _a.value)) {
72
- const $and = searchValues.find((i) => i.$and);
73
- if ($and) {
74
- searchValues = searchValues.map((n) => {
75
- var _a;
76
- if (n.$and) {
77
- return {
78
- $and: [...n.$and, { [i.name]: { [(_a = i === null || i === void 0 ? void 0 : i.fieldCalculation) === null || _a === void 0 ? void 0 : _a.value]: '1' } }],
79
- };
80
- }
81
- return n;
82
- });
83
- }
84
- else {
85
- searchValues.push({
86
- $and: [{ [i.name]: { [(_b = i === null || i === void 0 ? void 0 : i.fieldCalculation) === null || _b === void 0 ? void 0 : _b.value]: '1' } }],
87
- });
88
- }
134
+ }, [setFilterConfig]);
135
+ // searchHandle 使用 useCallback 优化,合并多次遍历为单次遍历
136
+ const searchHandle = useCallback((searchData) => {
137
+ var _a, _b, _c;
138
+ // 确保 searchData 是数组,防止事件对象被误传入
139
+ const data = Array.isArray(searchData) ? searchData : filterData;
140
+ let searchValues = [];
141
+ const andConditions = [];
142
+ const filterValues = [];
143
+ // 单次遍历处理所有逻辑,避免多次 filter/forEach
144
+ for (const item of data) {
145
+ // 处理空/非空筛选条件
146
+ if (['$empty', '$nempty'].includes((_a = item === null || item === void 0 ? void 0 : item.fieldCalculation) === null || _a === void 0 ? void 0 : _a.value)) {
147
+ andConditions.push({ [item.name]: { [(_b = item === null || item === void 0 ? void 0 : item.fieldCalculation) === null || _b === void 0 ? void 0 : _b.value]: '1' } });
148
+ continue;
89
149
  }
90
- });
91
- // 值筛选条件
92
- filterValues.forEach((i) => {
93
- var _a, _b, _c, _d;
94
- switch (i.fieldCalculation.value) {
95
- case 'scope':
96
- if (i.filterType === 'number') {
97
- if (i.value[0]) {
98
- searchValues.push({
99
- key: i.name,
100
- val: Number(i.value[0]),
101
- rel: 'gte',
102
- });
103
- }
104
- if (i.value[1]) {
105
- searchValues.push({
106
- key: i.name,
107
- val: Number(i.value[1]),
108
- rel: 'lte',
109
- });
110
- }
111
- }
112
- else {
113
- searchValues.push({
114
- key: i.name,
115
- val: i.value[0],
116
- rel: 'gte',
117
- });
118
- searchValues.push({
119
- key: i.name,
120
- // @ts-ignore 兼容字符串和数字
121
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers
122
- val: i.value[1] + 999,
123
- rel: 'lte',
124
- });
125
- }
126
- break;
127
- case 'exclude':
128
- searchValues.push({
129
- key: i.name,
130
- val: `^((?!${i.filterType === 'string' ? escapeRegExp(i.value) : i.value}).)*$`,
131
- rel: 'regex',
132
- });
133
- break;
134
- case 'startWith':
135
- searchValues.push({ key: i.name, val: `^${(_a = i.value) === null || _a === void 0 ? void 0 : _a.trim()}`, rel: 'regex' });
136
- break;
137
- case 'regex':
138
- searchValues.push({ key: i.name, val: `^${escapeRegExp(i.value)}`, rel: i.fieldCalculation.value });
139
- break;
140
- case 'nsearch_ci':
141
- {
142
- if (i.filterType === 'string') {
143
- // 数组类型按数组查询
144
- if (Array.isArray(i.value) && i.value.length) {
145
- searchValues.push({ key: i.name, val: i.value, rel: i.fieldCalculation.value });
146
- }
147
- else if (i.value) {
148
- searchValues.push({ key: i.name, val: (_b = textToString(i.value)) === null || _b === void 0 ? void 0 : _b.trim(), rel: i.fieldCalculation.value });
149
- }
150
- }
151
- else {
152
- searchValues.push({ key: i.name, val: `${escapeRegExp(i.value)}`, rel: i.fieldCalculation.value });
153
- }
154
- }
155
- break;
156
- default: {
157
- const searchItem = {
158
- key: i.name,
159
- val: i.value,
160
- rel: i.fieldCalculation.value,
161
- };
162
- if (i.filterType === 'string') {
163
- if (arrayInputType.includes(i.fieldCalculation.value) && ((_c = searchItem === null || searchItem === void 0 ? void 0 : searchItem.val) === null || _c === void 0 ? void 0 : _c.length)) {
164
- searchValues.push(searchItem);
165
- }
166
- else {
167
- searchItem.val = (_d = textToString(i.value)) === null || _d === void 0 ? void 0 : _d.trim();
168
- searchValues.push(searchItem);
169
- }
170
- }
171
- else if (i.filterType === 'number') {
172
- searchItem.val = Number(i.value);
173
- searchValues.push(searchItem);
174
- }
175
- else if (['date', 'datetime', 'time'].includes(i.filterType)) {
176
- searchItem.val = i.value;
177
- dateCalculation(searchItem, i.filterType).forEach((i) => {
178
- searchValues.push(i);
179
- });
180
- }
181
- else {
182
- searchValues.push(searchItem);
183
- }
184
- }
150
+ // 判断是否有值
151
+ const hasValue = Array.isArray(item.value) && item.filterType === 'number' && ((_c = item.fieldCalculation) === null || _c === void 0 ? void 0 : _c.value) === 'scope'
152
+ ? item.value[0] || item.value[1]
153
+ : item.value !== null && item.value !== undefined && item.value !== '';
154
+ if (hasValue) {
155
+ filterValues.push(item);
185
156
  }
186
- });
187
- searchValues = searchValues.map((i) => {
157
+ }
158
+ // 添加 $and 条件
159
+ if (andConditions.length) {
160
+ searchValues.push({ $and: andConditions });
161
+ }
162
+ // 值筛选条件 - 使用提取的处理函数
163
+ for (const item of filterValues) {
164
+ processFilterItem(item, searchValues);
165
+ }
166
+ // 添加 format 字段
167
+ searchValues = searchValues.map((item) => {
188
168
  var _a;
189
- const format = (_a = filterValues.find((j) => j.name === i.key)) === null || _a === void 0 ? void 0 : _a.filterType;
190
- return { ...i, format };
169
+ const format = (_a = filterValues.find((j) => j.name === item.key)) === null || _a === void 0 ? void 0 : _a.filterType;
170
+ return { ...item, format };
191
171
  });
192
172
  fetchData(searchValues);
193
- };
194
- const onFormSubmit = (e) => {
173
+ }, [filterData, fetchData]);
174
+ // 初始化 useEffect
175
+ useEffect(() => {
176
+ var _a;
177
+ // 序列化当前 filterFields 用于比较
178
+ const currentFilterFieldsStr = JSON.stringify(filterFields);
179
+ // 如果和上一次相同,跳过处理
180
+ if (currentFilterFieldsStr === prevFilterFieldsRef.current) {
181
+ return;
182
+ }
183
+ const result = filterFieldsGenerate(filterFields);
184
+ const newFilterData = JSON.parse(JSON.stringify(result));
185
+ // 更新 ref 记录当前值
186
+ prevFilterFieldsRef.current = currentFilterFieldsStr;
187
+ setInitFilterData(newFilterData);
188
+ setFilterData(newFilterData);
189
+ setFilterConfig(getFilterConfig(newFilterData));
190
+ // 如果配置有值则执行查询
191
+ if (newFilterData.some((i) => i.value)) {
192
+ searchHandle(newFilterData);
193
+ }
194
+ // 如果折叠的查询条件中有值,则展开面板
195
+ if ((_a = newFilterData === null || newFilterData === void 0 ? void 0 : newFilterData.filter((i, index) => index >= maxlength)) === null || _a === void 0 ? void 0 : _a.some((j) => j.value)) {
196
+ setCollapse(false);
197
+ }
198
+ // eslint-disable-next-line react-hooks/exhaustive-deps
199
+ }, [filterFields]);
200
+ const onFormSubmit = useCallback((e) => {
195
201
  e.preventDefault();
196
202
  searchHandle();
197
- };
198
- const resetFilter = () => {
203
+ }, [searchHandle]);
204
+ const resetFilter = useCallback(() => {
199
205
  const result = initFilterData.map((i) => ({ ...i, value: '' }));
200
206
  setFilterData(result);
201
207
  setFilterConfig(getFilterConfig(result));
@@ -203,29 +209,29 @@ export const FilterFieldsPanel = forwardRef(function Comp(props, ref) {
203
209
  if (isH5) {
204
210
  setOpenMobileFilter(false);
205
211
  }
206
- };
212
+ }, [initFilterData, setFilterConfig, fetchData, isH5, setOpenMobileFilter]);
213
+ // Memo 化事件对象,避免每次渲染创建新对象导致子组件重渲染
214
+ const resetEvents = useMemo(() => ({ tap: resetFilter }), [resetFilter]);
215
+ const searchEvents = useMemo(() => ({ tap: searchHandle }), [searchHandle]);
216
+ const toggleCollapseHandler = useCallback(() => {
217
+ setCollapse((prev) => !prev);
218
+ }, []);
219
+ const toggleCollapseEvents = useMemo(() => ({
220
+ tap: toggleCollapseHandler,
221
+ }), [toggleCollapseHandler]);
222
+ const mobileSearchHandler = useCallback(() => {
223
+ searchHandle();
224
+ setOpenMobileFilter(false);
225
+ }, [searchHandle, setOpenMobileFilter]);
226
+ const mobileSearchEvents = useMemo(() => ({
227
+ tap: mobileSearchHandler,
228
+ }), [mobileSearchHandler]);
229
+ const drawerCloseHandler = useCallback(() => {
230
+ setOpenMobileFilter(false);
231
+ }, [setOpenMobileFilter]);
207
232
  // eslint-disable-next-line react-hooks/exhaustive-deps
208
233
  useSetWidgetApi(() => ({ resetFilter }), [initFilterData], ref);
209
- return (_jsxs(ConfigProvider, { classPrefix: "wedatea2td", children: [isH5 && (_jsx(Drawer, { className: `${classPrefix}-table-mobile-filter-drawer ${classPrefix}-table-wrap-filter ${classPrefix}-h5-table-wrap-filter`, title: "\u7B5B\u9009\u5668", visible: isH5 && openMobileFilter, onClose: () => {
210
- setOpenMobileFilter(false);
211
- }, children: _jsxs("div", { children: [_jsx("div", { className: `${classPrefix}-table-wrap-filter__body`, children: filterData === null || filterData === void 0 ? void 0 : filterData.map((i) => (_jsx(FilterFieldItem, { ...i, updateFilterData: updateFilterData, fields: filterFields, supportManyRelated: supportManyRelated }, i.id))) }), _jsx("div", { className: `${classPrefix}-table-wrap-filter__footer`, children: _jsxs("div", { className: `${classPrefix}-table-wrap-filter__btn`, children: [_jsx("div", { className: `${classPrefix}-table-wrap-filter__btn-item`, children: _jsx(WdButton, { theme: "primary", variant: "outline", size: "lg", text: "\u91CD\u7F6E", events: {
212
- tap: resetFilter,
213
- } }) }), _jsx("div", { className: `${classPrefix}-table-wrap-filter__btn-item`, children: _jsx(WdButton, { theme: "primary", size: "lg", text: "\u786E\u5B9A", events: {
214
- tap: () => {
215
- searchHandle();
216
- setOpenMobileFilter(false);
217
- },
218
- } }) })] }) })] }) })), !isH5 && !!filterData.length && (_jsx("form", { className: `${classPrefix}-table-wrap-filter`, onSubmit: onFormSubmit, "data-testid": "filter-form", children: _jsxs(Row, { gap: 20, verticalAlign: 'top', style: { justifyContent: 'space-between' }, children: [_jsx(_Fragment, { children: filterData === null || filterData === void 0 ? void 0 : filterData.map((i, index) => (_jsx(Col, { span: 6, style: {
234
+ return (_jsxs(ConfigProvider, { classPrefix: "wedatea2td", children: [isH5 && (_jsx(Drawer, { className: `${classPrefix}-table-mobile-filter-drawer ${classPrefix}-table-wrap-filter ${classPrefix}-h5-table-wrap-filter`, title: "\u7B5B\u9009\u5668", visible: isH5 && openMobileFilter, onClose: drawerCloseHandler, children: _jsxs("div", { children: [_jsx("div", { className: `${classPrefix}-table-wrap-filter__body`, children: filterData === null || filterData === void 0 ? void 0 : filterData.map((i) => (_jsx(FilterFieldItem, { ...i, updateFilterData: updateFilterData, fields: filterFields, supportManyRelated: supportManyRelated }, i.id))) }), _jsx("div", { className: `${classPrefix}-table-wrap-filter__footer`, children: _jsxs("div", { className: `${classPrefix}-table-wrap-filter__btn`, children: [_jsx("div", { className: `${classPrefix}-table-wrap-filter__btn-item`, children: _jsx(WdButton, { theme: "primary", variant: "outline", size: "lg", text: "\u91CD\u7F6E", events: resetEvents }) }), _jsx("div", { className: `${classPrefix}-table-wrap-filter__btn-item`, children: _jsx(WdButton, { theme: "primary", size: "lg", text: "\u786E\u5B9A", events: mobileSearchEvents }) })] }) })] }) })), !isH5 && !!filterData.length && (_jsx("form", { className: `${classPrefix}-table-wrap-filter`, onSubmit: onFormSubmit, "data-testid": "filter-form", children: _jsxs(Row, { gap: 20, verticalAlign: 'top', style: { justifyContent: 'space-between' }, children: [_jsx(_Fragment, { children: filterData === null || filterData === void 0 ? void 0 : filterData.map((i, index) => (_jsx(Col, { span: 6, style: {
219
235
  display: `${index > num && collapse ? 'none' : 'block'}`,
220
- }, children: _jsx(FilterFieldItem, { ...i, updateFilterData: updateFilterData, fields: filterFields, supportManyRelated: supportManyRelated }) }, i.id))) }), _jsx(Col, { span: 24, style: { flex: '1', textAlign: 'right' }, children: _jsxs("div", { className: `${classPrefix}-space`, children: [_jsx("div", { className: `${classPrefix}-space-item`, children: _jsx(WdButton, { size: "md", theme: "secondary", text: "\u91CD\u7F6E", events: {
221
- tap: resetFilter,
222
- } }) }), _jsxs("div", { className: `${classPrefix}-space-item`, children: [_jsx("input", { type: "submit", style: { display: 'none' } }), _jsx(WdButton, { size: "md", theme: "primary", text: "\u67E5\u8BE2", events: {
223
- tap: () => {
224
- searchHandle();
225
- },
226
- } })] }), filterData.length > maxlength && (_jsx("div", { className: `${classPrefix}-space-item`, children: _jsx(WdButton, { icon: collapse ? 'td:chevron-down' : 'td:chevron-up', iconType: "icon-only", theme: "secondary", variant: "text", size: "md", events: {
227
- tap: () => {
228
- setCollapse(!collapse);
229
- },
230
- } }) }))] }) }, "search-button")] }) }))] }));
236
+ }, children: _jsx(FilterFieldItem, { ...i, updateFilterData: updateFilterData, fields: filterFields, supportManyRelated: supportManyRelated }) }, i.id))) }), _jsx(Col, { span: 24, style: { flex: '1', textAlign: 'right' }, children: _jsxs("div", { className: `${classPrefix}-space`, children: [_jsx("div", { className: `${classPrefix}-space-item`, children: _jsx(WdButton, { size: "md", theme: "secondary", text: "\u91CD\u7F6E", events: resetEvents }) }), _jsxs("div", { className: `${classPrefix}-space-item`, children: [HiddenSubmitInput, _jsx(WdButton, { size: "md", theme: "primary", text: "\u67E5\u8BE2", events: searchEvents })] }), filterData.length > maxlength && (_jsx("div", { className: `${classPrefix}-space-item`, children: _jsx(WdButton, { icon: collapse ? 'td:chevron-down' : 'td:chevron-up', iconType: "icon-only", theme: "secondary", variant: "text", size: "md", events: toggleCollapseEvents }) }))] }) }, "search-button")] }) }))] }));
231
237
  });
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  /**
2
3
  * 后端导入弹窗
3
4
  */
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export declare const InOrOutRecordModal: ({ isInOrOutRecordModalVisible, dbName, setIsImportFileModalByApiVisible, setIsExportFileModalByApiVisible, setIsInOrOutRecordModalVisible, }: {
2
3
  isInOrOutRecordModalVisible: any;
3
4
  dbName: any;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export declare const Pagination: ({ total, pageIndex, pageSize, onPagingChange, }: {
2
3
  total?: number;
3
4
  pageIndex: any;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export declare const SearchBox: ({ searchValues, fields, columnSets, fetchData, refresh, }: {
2
3
  searchValues: any;
3
4
  fields: any;
@@ -10,6 +10,7 @@ export declare const useAuthFields: ({ dbName, dbFieldNames, isNewData, isModel,
10
10
  columnSetsKey: any;
11
11
  }) => {
12
12
  authFields: any[];
13
+ noAuthFields: any[];
13
14
  isError: any;
14
15
  fieldsLoading: boolean;
15
16
  };
@@ -1,3 +1,4 @@
1
+ import { useMemo } from 'react';
1
2
  import useSWR from 'swr';
2
3
  import { getAuthFields } from '../../../utils/datasource';
3
4
  export const useAuthFields = ({ dbName, dbFieldNames, isNewData, isModel, connectorMethod, isNoDataSourceBind, isExpression = false, isApis = false, columnSetsKey, }) => {
@@ -13,16 +14,23 @@ export const useAuthFields = ({ dbName, dbFieldNames, isNewData, isModel, connec
13
14
  }
14
15
  return [isModel, dbName, connectorMethod === null || connectorMethod === void 0 ? void 0 : connectorMethod.name, columnSetsKey];
15
16
  }, async () => {
16
- const { showFields } = await getAuthFields(dbName, dbFieldNames, true, !!isNewData, isModel, connectorMethod, false);
17
- if (!(showFields === null || showFields === void 0 ? void 0 : showFields.length)) {
17
+ var _a;
18
+ const data = await getAuthFields(dbName, dbFieldNames, true, !!isNewData, isModel, connectorMethod, false);
19
+ if (!((_a = data === null || data === void 0 ? void 0 : data.showFields) === null || _a === void 0 ? void 0 : _a.length)) {
18
20
  throw {
19
21
  message: '数据源字段返回异常',
20
22
  };
21
23
  }
22
- return showFields;
24
+ return data;
23
25
  });
26
+ // 用 useMemo 稳定数组引用:data?.xxx || [] 会在 data 为 undefined 时每次返回新 [],
27
+ // 该引用会传给上层 wd-table 的 useMemo(columns) 作为依赖,造成无意义的 columns 重算。
28
+ // 仅当 data 引用变化时才重建空数组兜底。
29
+ const authFields = useMemo(() => (data === null || data === void 0 ? void 0 : data.showFields) || [], [data]);
30
+ const noAuthFields = useMemo(() => (data === null || data === void 0 ? void 0 : data.noAuthFields) || [], [data]);
24
31
  return {
25
- authFields: data || [],
32
+ authFields,
33
+ noAuthFields,
26
34
  isError: error,
27
35
  fieldsLoading: !error && !data,
28
36
  };
@@ -31,8 +31,8 @@ export const useTableData = ({ dataSourceAPI, connectorMethod, query, events, is
31
31
  const result = await dataSourceAPI.getRecordListV2(query, { swr });
32
32
  data = {
33
33
  ...data,
34
- total: result.total,
35
- records: result.records || [],
34
+ total: result === null || result === void 0 ? void 0 : result.total,
35
+ records: (result === null || result === void 0 ? void 0 : result.records) || [],
36
36
  };
37
37
  }
38
38
  }
@@ -41,8 +41,8 @@ export const useTableData = ({ dataSourceAPI, connectorMethod, query, events, is
41
41
  const result = await dataSourceAPI.getRecordList(query, { swr });
42
42
  data = {
43
43
  ...data,
44
- total: result.total,
45
- records: result.records || [],
44
+ total: result === null || result === void 0 ? void 0 : result.total,
45
+ records: (result === null || result === void 0 ? void 0 : result.records) || [],
46
46
  };
47
47
  }
48
48
  setIsError(false);
@@ -152,7 +152,7 @@ export const WdTable = forwardRef(function TableComp(tableProps, ref) {
152
152
  });
153
153
  const columnSetsKey = columnSets === null || columnSets === void 0 ? void 0 : columnSets.map((i) => i.key);
154
154
  // 过滤权限字段
155
- const { authFields, fieldsLoading, isError: fieldsError, } = useAuthFields({
155
+ const { authFields, noAuthFields, fieldsLoading, isError: fieldsError, } = useAuthFields({
156
156
  dbName,
157
157
  dbFieldNames,
158
158
  isNewData,
@@ -204,6 +204,7 @@ export const WdTable = forwardRef(function TableComp(tableProps, ref) {
204
204
  return [];
205
205
  }
206
206
  let baseColumns = getTableColumns({
207
+ noAuthFields,
207
208
  fields,
208
209
  columnSets,
209
210
  slots,
@@ -267,6 +268,7 @@ export const WdTable = forwardRef(function TableComp(tableProps, ref) {
267
268
  customOptionTitle,
268
269
  classPrefix,
269
270
  resizeColumns,
271
+ noAuthFields,
270
272
  ]);
271
273
  // 主键
272
274
  const recordKey = getRecordKey({
@@ -1,2 +1,3 @@
1
+ /// <reference types="react" />
1
2
  import { WdTabsProps } from './tabs';
2
3
  export declare const WdTabsH5: ({ isMultipleSlot, tabsDatas, selectedIndex, ...restProps }: WdTabsProps) => JSX.Element;
@@ -1,2 +1,3 @@
1
+ /// <reference types="react" />
1
2
  import { WdTabsProps } from './tabs';
2
3
  export declare const WdTabsPc: ({ isMultipleSlot, tabsDatas, selectedIndex, ...restProps }: WdTabsProps) => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import type { CommonPropsType } from '../../types';
2
3
  export declare const WdTabs: (props: WdTabsProps) => JSX.Element;
3
4
  export interface WdTabsProps extends CommonPropsType {
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import type { CommonPropsType } from '../../types';
2
3
  import type { DataType } from '../../../configs/components/wd-layout';
3
4
  export interface WdTagProps extends CommonPropsType, DataType {