@cloudbase/weda-ui 3.4.3 → 3.4.5

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 (277) hide show
  1. package/dist/configs/components/chart/bar.json +117 -8
  2. package/dist/configs/components/chart/line.js +127 -18
  3. package/dist/configs/components/chart/pie.json +117 -8
  4. package/dist/configs/components/chart/statisticsCard.json +57 -0
  5. package/dist/configs/components/dataView.js +507 -0
  6. package/dist/configs/components/form/location.json +2 -1
  7. package/dist/configs/components/form/userTreeSelect.json +55 -0
  8. package/dist/configs/components/formdetail.json +12 -2
  9. package/dist/configs/components/graphicCard.json +1 -1
  10. package/dist/configs/components/grid/col.js +125 -0
  11. package/dist/configs/components/grid/grid.js +131 -0
  12. package/dist/configs/components/grid/row.js +143 -0
  13. package/dist/configs/components/image.js +11 -1
  14. package/dist/configs/components/link.js +11 -1
  15. package/dist/configs/components/listView.js +1092 -0
  16. package/dist/configs/components/navLayout.json +1 -1
  17. package/dist/configs/components/navigationBar.json +9 -1
  18. package/dist/configs/components/repeater-item.json +17 -0
  19. package/dist/configs/components/repeater.js +125 -0
  20. package/dist/configs/components/table.json +187 -29
  21. package/dist/configs/components/text.js +12 -1
  22. package/dist/configs/components/wd-bubble.js +204 -0
  23. package/dist/configs/components/wd-button.js +417 -0
  24. package/dist/configs/components/wd-divider.js +89 -0
  25. package/dist/configs/components/wd-icon.js +126 -0
  26. package/dist/configs/components/wd-image.js +164 -0
  27. package/dist/configs/components/wd-link.js +234 -0
  28. package/dist/configs/components/wd-table.js +59 -0
  29. package/dist/configs/components/wd-text.js +142 -0
  30. package/dist/configs/components/wxOpenApi/phone.js +2 -2
  31. package/dist/configs/components/wxOpenApi/phoneCode.js +2 -2
  32. package/dist/configs/index.js +34 -3
  33. package/dist/configs/type-utils/index.js +4 -1
  34. package/dist/docs/common/componentList.js +144 -0
  35. package/dist/docs/common/components/classes-view.js +34 -0
  36. package/dist/docs/common/components/event-view.js +46 -0
  37. package/dist/docs/common/components/json-schema-view.js +18 -0
  38. package/dist/docs/common/components/methods-view.js +32 -0
  39. package/dist/docs/common/components/properties-view.js +45 -0
  40. package/dist/docs/common/format.js +60 -35
  41. package/dist/docs/common/helper.js +1 -0
  42. package/dist/docs/common/tableView.js +61 -50
  43. package/dist/enum/index.js +521 -0
  44. package/dist/index.js +1 -1
  45. package/dist/style/index.scss +1 -0
  46. package/dist/web/actions/showMessage/index.css +0 -3
  47. package/dist/web/actions/showMessage/index.js +1 -1
  48. package/dist/web/actions/showModal/index.css +0 -3
  49. package/dist/web/components/button/index.css +2 -5
  50. package/dist/web/components/button/index.js +3 -3
  51. package/dist/web/components/calendar/index.css +29 -32
  52. package/dist/web/components/calendar/index.js +37 -35
  53. package/dist/web/components/carousel/index.css +11 -14
  54. package/dist/web/components/carousel/index.js +3 -1
  55. package/dist/web/components/chart/common/core/eChartBar.js +10 -2
  56. package/dist/web/components/chart/common/core/eChartLine.js +16 -8
  57. package/dist/web/components/chart/common/core/eChartPie.js +2 -1
  58. package/dist/web/components/chart/common/data-transform.js +1 -1
  59. package/dist/web/components/chart/statisticsCard/index.css +12 -15
  60. package/dist/web/components/chart/statisticsCard/index.js +7 -2
  61. package/dist/web/components/dataView/index.js +3 -3
  62. package/dist/web/components/emptyContent/index.css +26 -0
  63. package/dist/web/components/emptyContent/index.js +46 -0
  64. package/dist/web/components/flow/components/FlowModuleText/index.css +1 -4
  65. package/dist/web/components/flow/components/FlowUserSelect/index.css +29 -32
  66. package/dist/web/components/flow/components/HighlightTextarea/index.css +5 -8
  67. package/dist/web/components/flow/components/UserSelectModel/UserSelect.js +9 -8
  68. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.css +1 -4
  69. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.js +3 -4
  70. package/dist/web/components/flow/components/WedaUserTransfer/index.css +0 -3
  71. package/dist/web/components/flow/frame/getCommonFlowData.js +3 -1
  72. package/dist/web/components/flow/frame/index.js +18 -1
  73. package/dist/web/components/flow/frame/types.js +6 -0
  74. package/dist/web/components/flow/frame/utils.js +20 -11
  75. package/dist/web/components/flow/modules/basic/Basic.css +3 -6
  76. package/dist/web/components/flow/modules/basic/BasicMobile.css +9 -12
  77. package/dist/web/components/flow/modules/chart/Chart.js +2 -2
  78. package/dist/web/components/flow/modules/chart/index.css +23 -29
  79. package/dist/web/components/flow/modules/chart/isString.js +5 -0
  80. package/dist/web/components/flow/modules/control/ApprovalDrawer.css +44 -47
  81. package/dist/web/components/flow/modules/control/ApprovalPopup.css +34 -37
  82. package/dist/web/components/flow/modules/control/ApprovalPopup.js +12 -9
  83. package/dist/web/components/flow/modules/control/Control.css +7 -10
  84. package/dist/web/components/flow/modules/control/Control.js +31 -16
  85. package/dist/web/components/flow/modules/control/ControlMobile.css +41 -12
  86. package/dist/web/components/flow/modules/control/ControlMobile.js +28 -13
  87. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.css +0 -3
  88. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.js +4 -4
  89. package/dist/web/components/flow/modules/control/provider/useControlModel.js +20 -11
  90. package/dist/web/components/flow/modules/control/provider/useMobileModel.js +0 -2
  91. package/dist/web/components/flow/modules/control/provider/useRevokeAndBackHook.js +2 -0
  92. package/dist/web/components/flow/modules/control/utils/index.js +1 -0
  93. package/dist/web/components/flow/modules/control/utils/tools.js +3 -0
  94. package/dist/web/components/flow/modules/layout/index.css +0 -3
  95. package/dist/web/components/flow/modules/process/Process.js +1 -1
  96. package/dist/web/components/flow/modules/process/ProcessMobile.js +1 -1
  97. package/dist/web/components/flow/modules/process/index.css +49 -43
  98. package/dist/web/components/form/form/index.css +2 -5
  99. package/dist/web/components/form/form/index.js +48 -4
  100. package/dist/web/components/form/formcell/index.css +29 -17
  101. package/dist/web/components/form/input/index.css +5 -8
  102. package/dist/web/components/form/input/index.js +11 -0
  103. package/dist/web/components/form/location/common/mapChoose.css +88 -91
  104. package/dist/web/components/form/location/common/selectModal.css +10 -13
  105. package/dist/web/components/form/location/components/LocationH5/index.css +17 -20
  106. package/dist/web/components/form/location/components/LocationH5/location.h5.js +2 -3
  107. package/dist/web/components/form/location/components/LocationH5/location.module.css +0 -3
  108. package/dist/web/components/form/location/components/LocationPC/index.css +10 -13
  109. package/dist/web/components/form/location/components/LocationPC/location.PC.js +2 -3
  110. package/dist/web/components/form/location/index.css +0 -3
  111. package/dist/web/components/form/radio/index.css +0 -3
  112. package/dist/web/components/form/select/allTimePicker/calendar.css +15 -18
  113. package/dist/web/components/form/select/allTimePicker/index.css +53 -27
  114. package/dist/web/components/form/select/dropdown-select/h5.js +23 -12
  115. package/dist/web/components/form/select/dropdown-select/index.css +34 -27
  116. package/dist/web/components/form/select/dropdown-select/index.js +37 -4
  117. package/dist/web/components/form/select/dropdown-select/pc.js +57 -17
  118. package/dist/web/components/form/select/dropdown-select/ui.js +5 -2
  119. package/dist/web/components/form/select/index.css +12 -8
  120. package/dist/web/components/form/select/index.js +4 -9
  121. package/dist/web/components/form/select/status/index.css +10 -13
  122. package/dist/web/components/form/switch/switch.module.css +0 -3
  123. package/dist/web/components/form/textarea/index.css +1 -4
  124. package/dist/web/components/form/textarea/index.js +1 -1
  125. package/dist/web/components/form/tips/index.css +11 -2
  126. package/dist/web/components/form/uploader/index.css +14 -17
  127. package/dist/web/components/form/uploaderFile/index.css +64 -66
  128. package/dist/web/components/form/uploaderFile/uploadFile.h5.js +10 -11
  129. package/dist/web/components/form/uploaderFile/uploadFile.pc.js +3 -2
  130. package/dist/web/components/form/userOrgSelect/common/fetch-data-service.js +120 -38
  131. package/dist/web/components/form/userOrgSelect/common/utils.js +89 -1
  132. package/dist/web/components/form/userOrgSelect/component/depart-breadcrumb.js +15 -0
  133. package/dist/web/components/form/userOrgSelect/component/depart-select/depart-select-pc.js +63 -0
  134. package/dist/web/components/form/userOrgSelect/component/depart-select/index.js +96 -0
  135. package/dist/web/components/form/userOrgSelect/component/depart-select/org-modal-pc.js +69 -0
  136. package/dist/web/components/form/userOrgSelect/{user-select-pc → component}/error-tips.js +0 -0
  137. package/dist/web/components/form/userOrgSelect/component/index.css +323 -0
  138. package/dist/web/components/form/userOrgSelect/component/input-tags.js +21 -0
  139. package/dist/web/components/form/userOrgSelect/component/modal-search-h5.js +25 -0
  140. package/dist/web/components/form/userOrgSelect/component/modal-search.js +11 -0
  141. package/dist/web/components/form/userOrgSelect/component/modal-select-h5.js +201 -0
  142. package/dist/web/components/form/userOrgSelect/component/org-tree-h5.js +19 -0
  143. package/dist/web/components/form/userOrgSelect/component/org-tree.js +33 -0
  144. package/dist/web/components/form/userOrgSelect/component/selected-list-h5.js +44 -0
  145. package/dist/web/components/form/userOrgSelect/component/selected-list.js +15 -0
  146. package/dist/web/components/form/userOrgSelect/component/user-org-list.js +55 -0
  147. package/dist/web/components/form/userOrgSelect/component/user-select-h5/index.js +168 -0
  148. package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-list-h5.js +107 -0
  149. package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-select-h5.js +59 -0
  150. package/dist/web/components/form/userOrgSelect/component/user-select-pc/error-tips.js +11 -0
  151. package/dist/web/components/form/userOrgSelect/{user-select-pc → component/user-select-pc}/model-user-list.js +9 -9
  152. package/dist/web/components/form/userOrgSelect/component/user-select-pc/org-tree.js +10 -0
  153. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +75 -0
  154. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-select-pc.js +65 -0
  155. package/dist/web/components/form/userOrgSelect/component/userOrgSelect.css +1160 -0
  156. package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.h5.js +54 -87
  157. package/dist/web/components/form/userOrgSelect/hooks/use-depart-data.js +30 -35
  158. package/dist/web/components/form/userOrgSelect/hooks/use-views-data.js +48 -0
  159. package/dist/web/components/formdetail/index.css +34 -31
  160. package/dist/web/components/formdetail/index.js +12 -3
  161. package/dist/web/components/graphicCard/index.css +15 -18
  162. package/dist/web/components/grid/_utils.css +67 -0
  163. package/dist/web/components/grid/col.js +33 -0
  164. package/dist/web/components/grid/grid.css +1185 -0
  165. package/dist/web/components/grid/grid.js +19 -0
  166. package/dist/web/components/grid/row.js +14 -0
  167. package/dist/web/components/image/image.js +9 -1
  168. package/dist/web/components/image/index.css +2 -5
  169. package/dist/web/components/index.js +17 -3
  170. package/dist/web/components/link/index.css +0 -3
  171. package/dist/web/components/listView/index.css +21 -23
  172. package/dist/web/components/listView/index.js +215 -81
  173. package/dist/web/components/lottery/index.css +72 -75
  174. package/dist/web/components/modal/h5.css +19 -21
  175. package/dist/web/components/modal/modal.h5.js +11 -10
  176. package/dist/web/components/navLayout/index.css +14 -139
  177. package/dist/web/components/navigationBar/common.js +5 -4
  178. package/dist/web/components/navigationBar/h5Menu.js +12 -10
  179. package/dist/web/components/navigationBar/horizontalMenu.js +42 -35
  180. package/dist/web/components/navigationBar/index.css +130 -86
  181. package/dist/web/components/navigationBar/index.js +6 -4
  182. package/dist/web/components/navigationBar/verticalMenu.js +13 -9
  183. package/dist/web/components/pageLayout/PageContent/index.css +7 -10
  184. package/dist/web/components/pageLayout/index.css +0 -3
  185. package/dist/web/components/pageLayout/index.js +2 -1
  186. package/dist/web/components/repeater/index.js +17 -0
  187. package/dist/web/components/repeater-item/index.js +9 -0
  188. package/dist/web/components/richText/index.css +5 -8
  189. package/dist/web/components/richText/index.js +4 -2
  190. package/dist/web/components/richText/richtext.module.css +1 -4
  191. package/dist/web/components/richTextView/index.css +9 -10
  192. package/dist/web/components/swiper/index.css +10 -13
  193. package/dist/web/components/swiper/index.js +25 -5
  194. package/dist/web/components/table/BaseTable.js +355 -286
  195. package/dist/web/components/table/ExportFileModalByApi/index.css +9 -0
  196. package/dist/web/components/table/ExportFileModalByApi/index.js +150 -0
  197. package/dist/web/components/table/FieldRender.js +25 -18
  198. package/dist/web/components/table/FilterFields.js +17 -11
  199. package/dist/web/components/table/Form/Location.css +2 -5
  200. package/dist/web/components/table/ImportFileModal/csvTemplate.json +65 -6
  201. package/dist/web/components/table/ImportFileModalByApi/index.css +130 -0
  202. package/dist/web/components/table/ImportFileModalByApi/index.js +321 -0
  203. package/dist/web/components/table/ImportFileModalByApi/uploadCSVFile.js +115 -0
  204. package/dist/web/components/table/InOrOutRecordModeal.js +139 -0
  205. package/dist/web/components/table/SelectableBlock/index.css +0 -2
  206. package/dist/web/components/table/UserDepartment/viewCell.css +3 -6
  207. package/dist/web/components/table/baseTable.css +579 -0
  208. package/dist/web/components/table/hooks/useImportingStatus.js +69 -0
  209. package/dist/web/components/table/hooks/useInOutFieldsRecords.js +23 -0
  210. package/dist/web/components/table/index.css +275 -508
  211. package/dist/web/components/table/index.js +6 -4
  212. package/dist/web/components/tabs/index.css +19 -18
  213. package/dist/web/components/tabs/tabs.h5.js +7 -16
  214. package/dist/web/components/text/index.css +6 -9
  215. package/dist/web/components/uploaderFileView/index.css +0 -3
  216. package/dist/web/components/uploaderView/index.css +5 -8
  217. package/dist/web/components/wd-bubble/index.js +3 -17
  218. package/dist/web/components/wd-bubble/wd-bubble.js +17 -0
  219. package/dist/web/components/wd-button/convert-legacy-props.js +14 -0
  220. package/dist/web/components/wd-button/index.js +3 -0
  221. package/dist/web/components/wd-button/wd-button.js +89 -0
  222. package/dist/web/components/wd-config-provider/index.js +1 -0
  223. package/dist/web/components/wd-config-provider/wd-config-context.js +5 -0
  224. package/dist/web/components/wd-config-provider/wd-config-provider.js +12 -0
  225. package/dist/web/components/wd-divider/index.js +3 -0
  226. package/dist/web/components/wd-divider/wd-divider.js +29 -0
  227. package/dist/web/components/wd-icon/convert-legacy-props.js +14 -0
  228. package/dist/web/components/wd-icon/index.js +3 -0
  229. package/dist/web/components/wd-icon/wd-icon.js +63 -0
  230. package/dist/web/components/wd-image/image.js +171 -0
  231. package/dist/web/components/wd-image/index.js +82 -0
  232. package/dist/web/components/wd-link/index.js +3 -0
  233. package/dist/web/components/wd-link/wd-link.js +105 -0
  234. package/dist/web/components/wd-table/index.js +3 -0
  235. package/dist/web/components/wd-table/wd-table.js +24 -0
  236. package/dist/web/components/wd-text/convert-legacy-props.js +14 -0
  237. package/dist/web/components/wd-text/index.js +3 -0
  238. package/dist/web/components/wd-text/wd-text.js +91 -0
  239. package/dist/web/components/wedaVideo/index.css +2 -5
  240. package/dist/web/components/wedaVideo/index.js +8 -6
  241. package/dist/web/index.js +1 -1
  242. package/dist/web/utils/config-context/index.js +1 -0
  243. package/dist/web/utils/config-context/use-config.js +9 -0
  244. package/dist/web/utils/constant.js +1 -0
  245. package/dist/web/utils/datasource.js +19 -7
  246. package/dist/web/utils/file.js +22 -0
  247. package/dist/web/utils/hooks/CreatePortal.js +6 -0
  248. package/dist/web/utils/hooks/EnumHoc.js +23 -3
  249. package/dist/web/utils/hooks/context.js +5 -1
  250. package/dist/web/utils/hooks/use-cloud-id-temp-url.js +2 -1
  251. package/dist/web/utils/platform.js +40 -12
  252. package/dist/web/utils/pollingInterface.js +61 -0
  253. package/dist/web/utils/tcb.js +16 -0
  254. package/dist/web/utils/tool.js +88 -0
  255. package/dist/web/utils/widget-api/index.js +18 -0
  256. package/dist/web/weda-ui.css +128 -4
  257. package/package.json +51 -33
  258. package/dist/configs/components/dataView.json +0 -305
  259. package/dist/configs/components/listView.json +0 -515
  260. package/dist/configs/components/wd-bubble.json +0 -170
  261. package/dist/web/components/form/userOrgSelect/comTool.js +0 -102
  262. package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.pc.js +0 -155
  263. package/dist/web/components/form/userOrgSelect/departTreeSelect/index.js +0 -17
  264. package/dist/web/components/form/userOrgSelect/getUserService.js +0 -165
  265. package/dist/web/components/form/userOrgSelect/index.js +0 -17
  266. package/dist/web/components/form/userOrgSelect/user-select-pc/index.css +0 -216
  267. package/dist/web/components/form/userOrgSelect/user-select-pc/index.js +0 -195
  268. package/dist/web/components/form/userOrgSelect/user-select-pc/org-tree.js +0 -15
  269. package/dist/web/components/form/userOrgSelect/user-select-pc/search-user.js +0 -80
  270. package/dist/web/components/form/userOrgSelect/user-select-pc/selected-user-list.js +0 -12
  271. package/dist/web/components/form/userOrgSelect/user-select-pc/user-model.js +0 -36
  272. package/dist/web/components/form/userOrgSelect/userOrgSelect.css +0 -824
  273. package/dist/web/components/form/userOrgSelect/userTreeSelect.h5.js +0 -302
  274. package/dist/web/components/form/userOrgSelect/utils.js +0 -95
  275. package/dist/web/components/table/ImportFileModal/index.css +0 -263
  276. package/dist/web/components/wd-bubble/index.css +0 -21
  277. package/dist/web/utils/hooks/useRequest.js +0 -25
@@ -1,20 +1,24 @@
1
1
  import React, { useMemo, useEffect, useRef, useImperativeHandle, useState, } from 'react';
2
- import { Icon, Table, Button, Justify, Modal, message, TagSearchBox, useClassNames, Card, Row, Col, Checkbox, Text, LoadingTip, Dropdown, List, Radio, Collapse, Form, } from 'tea-component';
2
+ import { Icon, Table, Button, Justify, Modal, message, TagSearchBox, useClassNames, Card, Row, Col, Checkbox, LoadingTip, Dropdown, List, Radio, Collapse, Form, } from 'tea-component';
3
3
  import InfiniteScroll from 'react-infinite-scroll-component';
4
4
  import { getColumns, isProcessHoldOrLocked, formatDataToXlsx, getSearchAttributes, filterCustomColumns, filterCustomFields, getFixedColumnSets, slotRender, } from './FieldRender';
5
5
  import { FilterFieldsPanel } from './FilterFields';
6
6
  import { SelectableBlock } from './SelectableBlock';
7
7
  import { REL_DICT, CELL_CUSTOM_OPTION } from '../../utils/constant';
8
- import { ImportFileModal } from './ImportFileModal';
8
+ import { ImportFileModalByApi } from './ImportFileModalByApi';
9
+ import { ExportFileModalByApi } from './ExportFileModalByApi';
10
+ import { InOrOutRecordModeal } from './InOrOutRecordModeal';
9
11
  import isObjectEqual from '../../utils/isObjectEqual';
10
12
  import { useEnumContext } from '../../utils/hooks/context';
11
13
  import { useSetState } from '../../utils/hooks/useSetState';
12
- import { useRequest } from '../../utils/hooks/useRequest';
13
14
  import { alertErrorMessage, isInIde, navigateToModelPage, usePlatform, } from '../../utils/platform';
14
- import { callWedaApi, appCloudGetWedaUserId } from '../../utils/tcb';
15
+ import { callWedaApi, appCloudGetWedaUserId, getIsExitApi, } from '../../utils/tcb';
15
16
  import { exportData } from '../../utils/file';
16
17
  import { DataSource, getDataSourceByName, getPrimaryField, getDataSourceFieldsWithAuth, } from '../../utils/datasource';
17
- import './index.css';
18
+ import { getUuid, getFieldsTypeName } from '../../utils/tool';
19
+ import EmptyContent from '../emptyContent';
20
+ import './baseTable.css';
21
+ // eslint-disable-next-line prettier/prettier
18
22
  const { sortable, radioable, selectable, pageable, autotip, injectable } = Table.addons;
19
23
  /**
20
24
  * 基础表格
@@ -39,19 +43,22 @@ export const BaseTable = (props) => {
39
43
  selectableBlockEvents, // 选区按钮事件对象
40
44
  filterType = 'searchbox', // 搜索方式
41
45
  filterFields, // 筛选字段
42
- connectorParams = {}, // API查询入参
46
+ connectorParams: rawConnectorParams = {}, // API查询入参
43
47
  isModel = true, // 数据源类型
44
48
  connectorMethod, // API方法
45
49
  isOrderBy, rowColor, // 背景色,可以是字符串或方法的引用
46
50
  columnSets, // 动态列设置, array, 为 undefined 时表示不存在列管理,使用默认列值
47
51
  slots, // 动态插槽, object
48
52
  events, // 事件
49
- outerRef, where, // 筛选条件
53
+ outerRef, where: rawWhere, // 筛选条件
50
54
  orderBy: defaultOrderBy, // 排序字段
51
55
  orderType: defaultOrderType, // 排序方式
52
56
  fixedFront, // 冻结首列至本列
53
57
  fixedEnd, // 冻结本列至尾列
58
+ emptyText, // 空状态提示
54
59
  } = props;
60
+ const connectorParams = rawConnectorParams && JSON.parse(JSON.stringify(rawConnectorParams));
61
+ const where = rawWhere && JSON.parse(JSON.stringify(rawWhere));
55
62
  const connectorParamsRef = React.useRef({});
56
63
  const selectedViewRef = React.useRef([]);
57
64
  const whereRef = React.useRef(undefined);
@@ -61,15 +68,22 @@ export const BaseTable = (props) => {
61
68
  const { Margin } = useClassNames();
62
69
  const chooseList = useRef([]);
63
70
  const searchThrottleWait = useRef(0);
64
- const emptyTextRef = useRef('');
65
- const [visible, setVisible] = useState(false);
71
+ const [isInOrOutRecordModealVisible, setIsInOrOutRecordModealVisible] = useState(null);
72
+ const [isImportFileModalByApiVisible, setIsImportFileModalByApiVisible] = useState(false);
73
+ const [isExportFileModalByApiVisible, setIsExportFileModalByApiVisible] = useState(false);
74
+ const [getRecordParams, setGetRecordParams] = useState({
75
+ orderBy: undefined,
76
+ orderType: undefined,
77
+ where: {},
78
+ });
79
+ const fetchRef = useRef({ version: '' });
66
80
  const { enumOptions } = useEnumContext();
67
81
  // 搜索和分页参数
68
82
  const [{ pageIndex = 1, pageSize, sort, selectedKeys, isLoading, searchValues, filterCollapse, cardList = [],
69
83
  // 视图选择相关
70
84
  selectedViewId = '', viewList = [], fields = isViewTable ? [] : showFields,
71
85
  // 数据源名称
72
- datasourceTitle, }, setState,] = useSetState({
86
+ datasourceTitle, records, total, }, setState,] = useSetState({
73
87
  sort: [],
74
88
  pageIndex: 1,
75
89
  pageSize: 10,
@@ -79,6 +93,8 @@ export const BaseTable = (props) => {
79
93
  filterCollapse: true,
80
94
  cardList: [],
81
95
  pageableInfo: undefined,
96
+ records: [],
97
+ total: 0,
82
98
  });
83
99
  React.useMemo(() => {
84
100
  if (!isModel) {
@@ -98,32 +114,41 @@ export const BaseTable = (props) => {
98
114
  if (Array.isArray(where) && (where === null || where === void 0 ? void 0 : where.length)) {
99
115
  groupLogicList = where.map((item1, index1) => {
100
116
  const item1Result = {};
101
- let item1ResultList = [];
117
+ const item1ResultList = [];
102
118
  let secondGroupLogicTyp = 'and';
103
119
  if (index1 === 1) {
104
120
  // 每组之间统一取且/或,只有一组 groupLogic 默认值为 null
105
121
  firstGroupLogicTyp = item1 === null || item1 === void 0 ? void 0 : item1.groupLogic;
106
122
  }
107
123
  if (Array.isArray(item1 === null || item1 === void 0 ? void 0 : item1.logicData)) {
108
- item1ResultList = item1 === null || item1 === void 0 ? void 0 : item1.logicData.map((item2, index2) => {
124
+ item1.logicData.forEach((item2, index2) => {
109
125
  const item2Result = {};
110
126
  const rule = {};
111
127
  if (index2 === 1) {
112
128
  // 每组之间统一取且/或,只有一组 groupLogic 默认值为 null
113
129
  secondGroupLogicTyp = item2 === null || item2 === void 0 ? void 0 : item2.logic;
114
130
  }
115
- let [rel, val] = [REL_DICT[item2 === null || item2 === void 0 ? void 0 : item2.rel], item2 === null || item2 === void 0 ? void 0 : item2.value];
131
+ let [rel, val] = [
132
+ REL_DICT[item2 === null || item2 === void 0 ? void 0 : item2.rel] || (item2 === null || item2 === void 0 ? void 0 : item2.rel),
133
+ item2 === null || item2 === void 0 ? void 0 : item2.value,
134
+ ];
135
+ // 去掉空字符串、undefined(接口不支持)、对象类型(接口不支持)
136
+ if (val === '' ||
137
+ val === undefined ||
138
+ Object.prototype.toString.call(val) === '[object Object]') {
139
+ console.error(`${item2 === null || item2 === void 0 ? void 0 : item2.key}筛选值为:${val},不符合查询条件,请检查绑定变量值是否正确`);
140
+ return;
141
+ }
116
142
  if ('_begin_with' === rel) {
117
143
  rel = 'regex';
118
144
  val = `^${val}`;
119
145
  }
120
146
  if ('_exclude' === rel) {
121
- rel = 'regex';
122
- val = `^((?!${val}).)*$`;
147
+ rel = 'nsearch';
123
148
  }
124
149
  rule['$' + rel] = val;
125
150
  item2Result[item2 === null || item2 === void 0 ? void 0 : item2.key] = rule;
126
- return item2Result;
151
+ item1ResultList.push(item2Result);
127
152
  });
128
153
  }
129
154
  item1Result['$' + secondGroupLogicTyp] = item1ResultList;
@@ -184,7 +209,7 @@ export const BaseTable = (props) => {
184
209
  });
185
210
  return data;
186
211
  };
187
- const getViews = async () => {
212
+ const getViews = async (isControlAuth = true) => {
188
213
  try {
189
214
  const queryParams = {
190
215
  action: 'DescribeRuntimeDataViewList',
@@ -214,12 +239,10 @@ export const BaseTable = (props) => {
214
239
  }
215
240
  return itemProperties;
216
241
  });
217
- // 根据x-layoutShow显示隐藏
218
- item.fields = (_b = item.fields) === null || _b === void 0 ? void 0 : _b.filter((item) => item['x-layoutShow'] === true).sort((a, b) => a['x-index'] - b['x-index']);
219
242
  // 筛选条件
220
243
  if (item.SearchConfig) {
221
- item.SearchConfig = (_c = JSON.parse(item.SearchConfig)
222
- .condition) === null || _c === void 0 ? void 0 : _c.filter((item) => item.IsQuery).map((item) => {
244
+ item.SearchConfig = (_b = JSON.parse(item.SearchConfig)
245
+ .condition) === null || _b === void 0 ? void 0 : _b.filter((item) => item.IsQuery).map((item) => {
223
246
  var _a, _b;
224
247
  // 当规则为包含/不包含当前用户时,设计态无法获取当前用户uid需要 运行态主动获取
225
248
  if (item.Rel === 'eq-current-user' ||
@@ -242,17 +265,19 @@ export const BaseTable = (props) => {
242
265
  };
243
266
  }
244
267
  // 排序
245
- const sortItem = (_d = item.fields) === null || _d === void 0 ? void 0 : _d.filter((item) => item['x-sortable'])[0];
268
+ const sortItem = (_c = item.fields) === null || _c === void 0 ? void 0 : _c.filter((item) => item['x-sortable'])[0];
246
269
  if (sortItem) {
247
270
  item.sortItem = {
248
271
  orderBy: sortItem.name,
249
272
  orderType: sortItem['x-defaultSort'],
250
273
  };
251
274
  }
252
- // 设置字段权限,关联模型字段权限,接口没返回暂不进行校验:['x-viewType']
253
- item.fields = (_e = getDataSourceFieldsWithAuth(item.fields, ResourceCheckInfos)) === null || _e === void 0 ? void 0 : _e.filter((value) => value.readWriteAuth === 'rw' ||
254
- value.readWriteAuth === 'r' ||
255
- (value === null || value === void 0 ? void 0 : value['x-viewType']));
275
+ // 根据x-layoutShow显示隐藏
276
+ item.fields = (_d = item.fields) === null || _d === void 0 ? void 0 : _d.filter((item) => item['x-layoutShow'] === true).sort((a, b) => a['x-index'] - b['x-index']);
277
+ if (isControlAuth) {
278
+ // 设置字段权限,关联模型字段权限,接口没返回暂不进行校验:['x-viewType']
279
+ item.fields = (_e = getDataSourceFieldsWithAuth(item.fields, ResourceCheckInfos)) === null || _e === void 0 ? void 0 : _e.filter((value) => value.readWriteAuth === 'rw' || value.readWriteAuth === 'r');
280
+ }
256
281
  return item;
257
282
  });
258
283
  setState({
@@ -338,34 +363,44 @@ export const BaseTable = (props) => {
338
363
  };
339
364
  // 获取视图列表
340
365
  useEffect(() => {
341
- if (!isModel)
342
- return;
343
- if (!isObjectEqual(selectedViewRef.current, selectedView)) {
344
- if (selectedView.length === 0) {
345
- setState({ fields: showFields });
346
- }
347
- else {
348
- // 兼容私有环境,新接口不存在的情况,产品策略完善后移除
349
- if (window === null || window === void 0 ? void 0 : window._isPrivate) {
350
- getViewsCompatibleProvite();
366
+ const getViewsList = async () => {
367
+ if (!isModel)
368
+ return;
369
+ if (!isObjectEqual(selectedViewRef.current, selectedView)) {
370
+ if (selectedView.length === 0) {
371
+ setState({ fields: showFields });
351
372
  }
352
373
  else {
353
- getViews();
374
+ // 兼容私有环境,新接口不存在的情况,产品策略完善后移除
375
+ if (window === null || window === void 0 ? void 0 : window._isPrivate) {
376
+ const describeRuntimeDataViewPropertiesListStatus = await getIsExitApi({
377
+ action: 'DescribeRuntimeDataViewPropertiesList',
378
+ data: { DatasourceName: dbName },
379
+ });
380
+ // 私有环境DescribeRuntimeDataViewPropertiesList接口存在,可以展示关联模型字,同时兼容权限不存在
381
+ describeRuntimeDataViewPropertiesListStatus
382
+ ? getViews()
383
+ : getViewsCompatibleProvite();
384
+ }
385
+ else {
386
+ getViews();
387
+ }
354
388
  }
389
+ selectedViewRef.current = selectedView;
355
390
  }
356
- selectedViewRef.current = selectedView;
357
- }
391
+ };
392
+ getViewsList();
358
393
  }, [dbName, selectedView, isModel]);
359
394
  // 视图变化再次请求
360
395
  useEffect(() => {
361
396
  if (!selectedViewId)
362
397
  return;
363
398
  const selectedView = viewList.filter((item) => item.ViewId === selectedViewId)[0];
364
- if (!selectedView)
399
+ if (!selectedView) {
400
+ setState({ isLoading: false });
365
401
  return;
366
- setState({
367
- fields: selectedView.fields,
368
- });
402
+ }
403
+ setState({ fields: selectedView.fields });
369
404
  fetchData({ pageNo: pageIndex, pageSize });
370
405
  }, [selectedViewId]);
371
406
  useEffect(() => {
@@ -381,23 +416,21 @@ export const BaseTable = (props) => {
381
416
  }
382
417
  }, [where]);
383
418
  useEffect(() => {
384
- try {
385
- if (connectorParams &&
386
- !isObjectEqual(connectorParamsRef.current, connectorParams)) {
387
- fetchData({ pageNo: pageIndex, pageSize });
388
- connectorParamsRef.current = JSON.parse(JSON.stringify(connectorParams));
389
- }
390
- }
391
- catch (e) {
392
- console.error(e);
419
+ if (connectorParams &&
420
+ !isObjectEqual(connectorParamsRef.current, connectorParams)) {
421
+ fetchData({ pageNo: pageIndex, pageSize });
422
+ connectorParamsRef.current = connectorParams;
393
423
  }
394
424
  }, [connectorParams]);
395
- // 移动端和自定义APIs场景不支持导入功能,监听变化存到表格上下文中
425
+ // 移动端和APIs场景不支持导入功能,监听变化存到表格上下文中
396
426
  useEffect(() => {
397
427
  handleContext({ state: { isH5, isModel } });
398
428
  }, [isH5, isModel]);
429
+ useEffect(() => {
430
+ fetchData();
431
+ }, [sort, defaultOrderBy, defaultOrderType, isViewTable]);
399
432
  // 查询子系数据库
400
- const { run: getChooseList } = useRequest(async (params = {}) => {
433
+ const getChooseList = async (params) => {
401
434
  var _a, _b, _c, _d, _e;
402
435
  const child = (_b = (_a = chooseList.current) === null || _a === void 0 ? void 0 : _a.find((child) => child.format === params.format)) === null || _b === void 0 ? void 0 : _b.list.find((item) => item.childDbName === params.childDbName);
403
436
  if (!child)
@@ -426,202 +459,186 @@ export const BaseTable = (props) => {
426
459
  data: relData,
427
460
  size: ((_e = data === null || data === void 0 ? void 0 : data.records) === null || _e === void 0 ? void 0 : _e.length) || 0,
428
461
  };
429
- }, { manual: true, throttleWait: searchThrottleWait.current });
462
+ };
430
463
  // 搜索和分页事件
431
- const { loading, run: fetchData, data: { records = [], total = 0 } = {}, } = useRequest(async (params = {}) => {
432
- var _a, _b, _c, _d;
433
- // h5模式下,查询收起filter,清空选中状态
434
- if (isH5) {
435
- setState({ filterCollapse: false, selectedKeys: [] });
436
- }
437
- // H5端加载等待状态
438
- setState({
439
- isLoading: true,
440
- });
441
- const { searchValues, pageNo = 1, empty = true, pageSize = 10 } = params;
442
- // 分页
443
- const queryParams = {
444
- pageSize,
445
- pageNo,
446
- };
447
- let viewed, data;
448
- let SearchConfig = [];
449
- let ConditionConfig = {};
450
- // 区分是否模型逻辑
451
- if (isModel) {
452
- if (isViewTable) {
453
- viewed = viewList === null || viewList === void 0 ? void 0 : viewList.filter((item) => item.ViewId === selectedViewId)[0];
454
- // 视图筛选条件
455
- SearchConfig = viewed === null || viewed === void 0 ? void 0 : viewed.SearchConfig;
456
- ConditionConfig = viewed === null || viewed === void 0 ? void 0 : viewed.ConditionConfig;
457
- }
458
- // 首次加载,属性区配置了视图,但数据源接口还未获取到全部视图配置
459
- if (isViewTable && !viewed)
460
- return;
461
- // 搜索
462
- const wList = whereList();
463
- if (searchValues !== undefined ||
464
- defaultSearchValue !== undefined ||
465
- SearchConfig !== undefined ||
466
- ConditionConfig !== undefined ||
467
- wList !== undefined) {
468
- queryParams.where = [
469
- ...(searchValues || []),
470
- ...(defaultSearchValue || []),
471
- ...(SearchConfig || []),
472
- ...(wList || []),
473
- ConditionConfig,
474
- ];
464
+ const fetchData = async (params = {}) => {
465
+ var _a, _b, _c, _d, _e;
466
+ try {
467
+ const fetchVersion = (fetchRef.current.version = getUuid());
468
+ // h5模式下,查询收起filter,清空选中状态
469
+ if (isH5) {
470
+ setState({ filterCollapse: false, selectedKeys: [] });
475
471
  }
476
- // 如果设计态存在排序条件
477
- if (viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) {
478
- queryParams.orderBy = (_a = viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) === null || _a === void 0 ? void 0 : _a.orderBy;
479
- queryParams.orderType = (_b = viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) === null || _b === void 0 ? void 0 : _b.orderType;
472
+ // H5端加载等待状态
473
+ setState({ isLoading: true });
474
+ const { searchValues, pageNo = 1, empty = true, pageSize = 10 } = params;
475
+ // 分页
476
+ let queryParams = { pageSize, pageNo };
477
+ let viewed, data;
478
+ let SearchConfig = [];
479
+ let ConditionConfig = {};
480
+ // 区分是否模型逻辑
481
+ if (isModel) {
482
+ if (isViewTable) {
483
+ viewed = viewList === null || viewList === void 0 ? void 0 : viewList.filter((item) => item.ViewId === selectedViewId)[0];
484
+ // 视图筛选条件
485
+ SearchConfig = viewed === null || viewed === void 0 ? void 0 : viewed.SearchConfig;
486
+ ConditionConfig = viewed === null || viewed === void 0 ? void 0 : viewed.ConditionConfig;
487
+ }
488
+ // 首次加载,属性区配置了视图,但数据源接口还未获取到全部视图配置
489
+ if (isViewTable && !viewed)
490
+ return;
491
+ // 搜索
492
+ const wList = whereList();
493
+ if (searchValues !== undefined ||
494
+ defaultSearchValue !== undefined ||
495
+ SearchConfig !== undefined ||
496
+ ConditionConfig !== undefined ||
497
+ wList !== undefined) {
498
+ queryParams.where = [
499
+ ...(searchValues || []),
500
+ ...(defaultSearchValue || []),
501
+ ...(SearchConfig || []),
502
+ ...(wList || []),
503
+ ConditionConfig,
504
+ ];
505
+ }
506
+ // 如果设计态存在排序条件
507
+ if (viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) {
508
+ queryParams.orderBy = (_a = viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) === null || _a === void 0 ? void 0 : _a.orderBy;
509
+ queryParams.orderType = (_b = viewed === null || viewed === void 0 ? void 0 : viewed.sortItem) === null || _b === void 0 ? void 0 : _b.orderType;
510
+ }
511
+ // 存在排序属性配置
512
+ if (!isViewTable && defaultOrderBy && defaultOrderType) {
513
+ queryParams.orderBy = defaultOrderBy;
514
+ queryParams.orderType = defaultOrderType;
515
+ }
516
+ // 运行态主动排序进行覆盖
517
+ if ((sort === null || sort === void 0 ? void 0 : sort.length) && sort[0].order) {
518
+ queryParams.orderBy = sort[0].by;
519
+ queryParams.orderType = sort[0].order;
520
+ }
521
+ setGetRecordParams(queryParams);
522
+ data = await datasource.getRecordList(queryParams);
480
523
  }
481
- // 存在排序属性配置
482
- if (!isViewTable && defaultOrderBy && defaultOrderType) {
483
- queryParams.orderBy = defaultOrderBy;
484
- queryParams.orderType = defaultOrderType;
524
+ else {
525
+ // 搜索
526
+ if (defaultSearchValue !== undefined) {
527
+ queryParams.where = [...(defaultSearchValue || [])];
528
+ }
529
+ // API排序
530
+ if (isOrderBy && (sort === null || sort === void 0 ? void 0 : sort.length) && sort[0].order) {
531
+ queryParams.orderBy = sort[0].by;
532
+ queryParams.orderType = sort[0].order;
533
+ }
534
+ queryParams = Object.assign({}, connectorParams, queryParams);
535
+ setGetRecordParams(queryParams);
536
+ data = await datasource.getConnect(connectorMethod, queryParams);
485
537
  }
486
- // 运行态主动排序进行覆盖
487
- if ((sort === null || sort === void 0 ? void 0 : sort.length) && sort[0].order) {
488
- queryParams.orderBy = sort[0].by;
489
- queryParams.orderType = sort[0].order;
538
+ if (fetchVersion !== fetchRef.current.version)
539
+ return;
540
+ data.records =
541
+ ((_c = data === null || data === void 0 ? void 0 : data.records) === null || _c === void 0 ? void 0 : _c.map((item) => {
542
+ const temp = getPrimaryField(item);
543
+ return { ...temp };
544
+ })) || [];
545
+ // 关联模型字段
546
+ const relationViewsFields = (_d = viewed === null || viewed === void 0 ? void 0 : viewed.fields) === null || _d === void 0 ? void 0 : _d.filter((item) => item['x-viewType']);
547
+ if ((relationViewsFields === null || relationViewsFields === void 0 ? void 0 : relationViewsFields.length) > 0) {
548
+ data.records = data.records.map((item) => {
549
+ relationViewsFields.forEach((_viewFields) => {
550
+ var _a, _b;
551
+ const parentRelationRecord = (_b = (_a = item[_viewFields['x-parentRelationKey']]) === null || _a === void 0 ? void 0 : _a.v1) === null || _b === void 0 ? void 0 : _b.record;
552
+ item[_viewFields.name] = parentRelationRecord
553
+ ? parentRelationRecord[_viewFields === null || _viewFields === void 0 ? void 0 : _viewFields.parentRelationRecordsName]
554
+ : '';
555
+ });
556
+ return item;
557
+ });
490
558
  }
491
- data = await datasource.getRecordList(queryParams);
492
- events === null || events === void 0 ? void 0 : events.querySuccess({ data: Object.assign({}, data, queryParams) });
493
- }
494
- else {
495
- // 搜索
496
- if (defaultSearchValue !== undefined) {
497
- queryParams.where = [...(defaultSearchValue || [])];
559
+ data = { total: 0, records: [], ...data };
560
+ // 小屏列表更新
561
+ if (data.total && ((_e = data.records) === null || _e === void 0 ? void 0 : _e.length) > 0) {
562
+ // empty :是否清空列表
563
+ if (empty) {
564
+ setState(() => ({ cardList: data.records }));
565
+ }
566
+ else {
567
+ setState((pre) => ({ cardList: [...pre.cardList, ...data.records] }));
568
+ }
498
569
  }
499
- // API排序
500
- if (isOrderBy && (sort === null || sort === void 0 ? void 0 : sort.length) && sort[0].order) {
501
- queryParams.orderBy = sort[0].by;
502
- queryParams.orderType = sort[0].order;
570
+ else {
571
+ setState({ cardList: [] });
503
572
  }
504
- const connectQueryParams = Object.assign({}, connectorParams, queryParams);
505
- data = await datasource.getConnect(connectorMethod, connectQueryParams);
506
- events === null || events === void 0 ? void 0 : events.querySuccess({
507
- data: Object.assign({}, data, connectQueryParams),
573
+ handleContext({
574
+ state: { pageNo, pageSize, total: data.total },
575
+ records: data.records,
508
576
  });
509
- }
510
- data.records = (_c = data === null || data === void 0 ? void 0 : data.records) === null || _c === void 0 ? void 0 : _c.map((item) => {
511
- const data = getPrimaryField(item);
512
- return {
513
- ...data,
514
- };
515
- });
516
- // 关联模型字段
517
- const relationViewsFields = (_d = viewed === null || viewed === void 0 ? void 0 : viewed.fields) === null || _d === void 0 ? void 0 : _d.filter((item) => item['x-viewType']);
518
- if ((relationViewsFields === null || relationViewsFields === void 0 ? void 0 : relationViewsFields.length) > 0) {
519
- data.records = data.records.map((item) => {
520
- relationViewsFields.forEach((_viewFields) => {
521
- var _a, _b;
522
- const parentRelationRecord = (_b = (_a = item[_viewFields['x-parentRelationKey']]) === null || _a === void 0 ? void 0 : _a.v1) === null || _b === void 0 ? void 0 : _b.record;
523
- item[_viewFields.name] = parentRelationRecord
524
- ? parentRelationRecord[_viewFields === null || _viewFields === void 0 ? void 0 : _viewFields.parentRelationRecordsName]
525
- : '';
526
- });
527
- return item;
577
+ events === null || events === void 0 ? void 0 : events.querySuccess({ data: Object.assign({}, data, queryParams) });
578
+ setState({
579
+ isLoading: false,
580
+ searchValues,
581
+ pageIndex: pageNo,
582
+ pageSize,
583
+ records: data.records,
584
+ total: data.total,
528
585
  });
529
586
  }
530
- // 小屏列表更新
531
- if ((data === null || data === void 0 ? void 0 : data.total) && data.records) {
532
- // empty :是否清空列表
533
- if (empty) {
534
- setState(() => ({ cardList: data.records }));
535
- }
536
- else {
537
- setState((pre) => ({ cardList: [...pre.cardList, ...data.records] }));
538
- }
539
- }
540
- else {
541
- setState({ cardList: [] });
542
- }
543
- handleContext({
544
- state: { pageNo, pageSize, total: data.total },
545
- records: data.records,
546
- });
547
- setState({ isLoading: false, searchValues, pageIndex: pageNo, pageSize });
548
- emptyTextRef.current = '暂无数据';
549
- return data || { total: 0, records: [] };
550
- }, {
551
- refreshDeps: [sort, defaultOrderBy, defaultOrderType, isViewTable],
552
- onError: (e) => {
553
- emptyTextRef.current = '暂无数据';
587
+ catch (e) {
554
588
  alertErrorMessage({ message: `加载数据错误 ${e.message}` });
555
- },
556
- });
557
- // 删除数据事件
558
- const { run: deleteRecord } = useRequest(async (keys) => {
559
- if (!isModel) {
560
- return alertErrorMessage({
561
- message: '当前表格组件绑定了APIs,暂不支持进行数据删除',
562
- });
589
+ setState({ isLoading: false });
563
590
  }
564
- if (!(keys === null || keys === void 0 ? void 0 : keys.length) && !(selectedKeys === null || selectedKeys === void 0 ? void 0 : selectedKeys.length)) {
565
- alertErrorMessage({ message: '请选择需要删除的记录' });
566
- return;
567
- }
568
- const msg = !(keys === null || keys === void 0 ? void 0 : keys.length) && (selectedKeys === null || selectedKeys === void 0 ? void 0 : selectedKeys.length)
569
- ? '确认删除选定的条目?'
570
- : '确认删除此条目?';
571
- const modal = Modal.show({
572
- className: 'modal-table-delete',
573
- caption: '操作确认',
574
- onClose: () => modal.destroy(),
575
- children: (React.createElement(React.Fragment, null,
576
- React.createElement("div", null, msg),
577
- React.createElement(Modal.Footer, null,
578
- React.createElement(Button, { type: "primary", onClick: async () => {
579
- try {
580
- modal.destroy();
581
- message.loading({
582
- content: '删除数据中',
583
- });
584
- await datasource.batchDeleteRecord(keys || selectedKeys);
585
- // 清除选中的 key
586
- setState({
587
- selectedKeys: [],
588
- });
589
- // 重新加载数据
590
- fetchData(pageSize);
591
- message.success({ content: '删除数据成功' });
592
- }
593
- catch (error) {
594
- console.error('删除', error);
595
- alertErrorMessage({
596
- message: `删除数据失败: ${error.message}`,
597
- });
598
- }
599
- } }, "\u786E\u8BA4")))),
600
- });
601
- }, {
602
- manual: true,
603
- onError: (e) => alertErrorMessage({ message: `删除数据失败: ${e.message}` }),
604
- });
605
- // 批量上传数据事件
606
- const { run: dataBatchCreate } = useRequest(async (res) => {
591
+ };
592
+ // 删除数据事件
593
+ const deleteRecord = async (keys) => {
607
594
  try {
608
- await datasource.batchCreateRecord(res.data);
609
- if (res.cb) {
610
- res.cb({ type: 'success' });
595
+ if (!isModel) {
596
+ return alertErrorMessage({
597
+ message: '当前表格组件绑定了APIs,暂不支持进行数据删除',
598
+ });
611
599
  }
612
- // 重新加载数据
613
- fetchData();
614
- message.success({ content: '导入数据成功' });
615
- }
616
- catch (error) {
617
- if (res.cb) {
618
- res.cb({ type: 'error', message: (error === null || error === void 0 ? void 0 : error.message) || '未知错误' });
600
+ if (!(keys === null || keys === void 0 ? void 0 : keys.length) && !(selectedKeys === null || selectedKeys === void 0 ? void 0 : selectedKeys.length)) {
601
+ alertErrorMessage({ message: '请选择需要删除的记录' });
602
+ return;
619
603
  }
604
+ const msg = !(keys === null || keys === void 0 ? void 0 : keys.length) && (selectedKeys === null || selectedKeys === void 0 ? void 0 : selectedKeys.length)
605
+ ? '确认删除选定的条目?'
606
+ : '确认删除此条目?';
607
+ const modal = Modal.show({
608
+ className: 'modal-table-delete',
609
+ caption: '操作确认',
610
+ onClose: () => modal.destroy(),
611
+ children: (React.createElement(React.Fragment, null,
612
+ React.createElement("div", null, msg),
613
+ React.createElement(Modal.Footer, null,
614
+ React.createElement(Button, { type: "primary", onClick: async () => {
615
+ try {
616
+ modal.destroy();
617
+ message.loading({
618
+ content: '删除数据中',
619
+ });
620
+ await datasource.batchDeleteRecord(keys || selectedKeys);
621
+ // 清除选中的 key
622
+ setState({
623
+ selectedKeys: [],
624
+ });
625
+ // 重新加载数据
626
+ fetchData(pageSize);
627
+ message.success({ content: '删除数据成功' });
628
+ }
629
+ catch (error) {
630
+ console.error('删除', error);
631
+ alertErrorMessage({
632
+ message: `删除数据失败: ${error.message}`,
633
+ });
634
+ }
635
+ } }, "\u786E\u8BA4")))),
636
+ });
620
637
  }
621
- }, {
622
- manual: true,
623
- onError: (e) => alertErrorMessage({ message: `导入数据错误: ${e.message}` }),
624
- });
638
+ catch (e) {
639
+ alertErrorMessage({ message: `删除数据失败: ${e.message}` });
640
+ }
641
+ };
625
642
  useImperativeHandle(outerRef, () => ({
626
643
  methods: {
627
644
  deleteOne: (params) => {
@@ -635,14 +652,16 @@ export const BaseTable = (props) => {
635
652
  // 删除选中数据
636
653
  deleteSelected: () => deleteRecord(),
637
654
  // 导入
638
- import: () => importHandle(),
655
+ import: () => importHandleByApi(),
639
656
  // 导出
640
657
  export: () => exportHandle(),
658
+ // 后端导出
659
+ exportOptionalMode: () => exportHandleByApi(),
641
660
  refresh: () => fetchData({ searchValues, pageSize, pageNo: 1 }),
642
661
  // 刷新表格(查看当前页数据)
643
662
  refreshKeepPage: () => fetchData({ searchValues, pageSize, pageNo: pageIndex }),
644
663
  },
645
- }));
664
+ }), [pageIndex, pageSize, searchValues, selectedKeys, records]);
646
665
  // 表格选中事件
647
666
  const handleRowsSelect = (keys) => {
648
667
  if (events === null || events === void 0 ? void 0 : events.rowsSelect) {
@@ -659,6 +678,7 @@ export const BaseTable = (props) => {
659
678
  _records = [].concat(_records || records);
660
679
  const selectedRecords = _records.filter((_) => _keys.find((key) => _._id === key));
661
680
  events.onDataChange({
681
+ data: _records,
662
682
  state: {
663
683
  total,
664
684
  pageNo: pageIndex,
@@ -678,7 +698,9 @@ export const BaseTable = (props) => {
678
698
  ? sortable({
679
699
  value: sort,
680
700
  columns: fields
681
- .filter((field) => field.type !== 'array' && field.type !== 'object')
701
+ .filter((field) => field.type !== 'array' &&
702
+ field.type !== 'object' &&
703
+ !(field === null || field === void 0 ? void 0 : field.name.includes('@')))
682
704
  .map((_) => _.name),
683
705
  onChange: (value, context) => {
684
706
  setState({
@@ -726,8 +748,8 @@ export const BaseTable = (props) => {
726
748
  }),
727
749
  // 加载、错误信息提示
728
750
  autotip({
729
- isLoading: loading || !emptyTextRef.current,
730
- emptyText: emptyTextRef.current,
751
+ isLoading,
752
+ emptyText: emptyText && (React.createElement(EmptyContent, { emptyText: emptyText, component: "table" })),
731
753
  // isError: Boolean(tableError),
732
754
  // isFound: Boolean(searchKeyword),
733
755
  onClear: () => {
@@ -782,8 +804,14 @@ export const BaseTable = (props) => {
782
804
  ? props.disabled ||
783
805
  isProcessHoldOrLocked(record['!!Weda!!ProcessHold'], record['!!Weda!!LOCK'])
784
806
  : props.disabled, compId: compId, exportValue: { record, recordKey: recordkey }, actionMap: settingsMap, actionParams: { dbName, recordkey }, selectableBlockEvents: selectableBlockEvents }));
785
- // 导出、搜索框字段按列管理过滤
786
- const exportFields = filterCustomFields({ fields, columnSets });
807
+ // 搜索框字段按列管理过滤
808
+ const searchFields = filterCustomFields({ fields, columnSets });
809
+ // 导出字段按列管理过滤,不过滤自定义列,自定义列只导出映射字段值
810
+ const exportFields = filterCustomFields({
811
+ fields,
812
+ columnSets,
813
+ isFilterGenre: true,
814
+ });
787
815
  // 表格 columns
788
816
  const columns = useMemo(() => {
789
817
  const defaultColumns = getColumns(fields, isH5);
@@ -818,12 +846,12 @@ export const BaseTable = (props) => {
818
846
  align: 'left',
819
847
  fixed: 'right',
820
848
  render: (record, recordkey) => !isInIde() ? (React.createElement(React.Fragment, null, settings === null || settings === void 0 ? void 0 :
821
- settings.map((props, index) => index < 3 && (React.createElement(BlockButton, { props: props, index: index, record: record, recordkey: recordkey }))),
849
+ settings.map((props, index) => index < 3 && (React.createElement(BlockButton, { key: index, props: props, index: index, record: record, recordkey: recordkey }))),
822
850
  settings.length > 3 && (React.createElement(Dropdown, { boxStyle: {
823
851
  minWidth: '80px',
824
852
  }, overlayStyle: { zIndex: 998 }, className: "adminPortal_dropdown", clickClose: false, button: "\u66F4\u591A", appearance: "link", placement: "bottom" },
825
853
  React.createElement(List, { type: "option" }, settings === null || settings === void 0 ? void 0 : settings.map((props, index) => index > 2 &&
826
- props.show && (React.createElement(List.Item, null,
854
+ props.show && (React.createElement(List.Item, { key: index },
827
855
  React.createElement(BlockButton, { props: props, index: index, record: record, recordkey: recordkey }))))))))) : (settings === null || settings === void 0 ? void 0 : settings.map((props, index) => (React.createElement(SelectableBlock, { key: index, ...props, component: "Button", blockKey: "settings", index: index, disabled: props.action === 'edit' || props.action === 'del'
828
856
  ? props.disabled ||
829
857
  isProcessHoldOrLocked(record['!!Weda!!ProcessHold'], record['!!Weda!!LOCK'])
@@ -871,9 +899,9 @@ export const BaseTable = (props) => {
871
899
  onSelectCancel === null || onSelectCancel === void 0 ? void 0 : onSelectCancel();
872
900
  } }, "\u53D6\u6D88"))));
873
901
  /**
874
- * 表格导入方法
902
+ * 后端表格导入方法
875
903
  */
876
- const importHandle = () => {
904
+ const importHandleByApi = () => {
877
905
  if (!isModel) {
878
906
  return alertErrorMessage({
879
907
  message: '当前表格组件绑定了APIs,暂不支持进行数据导入',
@@ -884,31 +912,23 @@ export const BaseTable = (props) => {
884
912
  message: '移动端暂不支持进行数据导入',
885
913
  });
886
914
  }
887
- // 判断数据源是否含有不支持的导入的字段
888
- const unsupportFields = fields.some((field) => {
889
- if (((field === null || field === void 0 ? void 0 : field.type) === 'array' || (field === null || field === void 0 ? void 0 : field.type) === 'object') &&
890
- field['x-required'])
891
- return true;
892
- });
893
- if (unsupportFields) {
894
- const modal = Modal.show({
895
- size: 's',
896
- children: (React.createElement(React.Fragment, null,
897
- React.createElement(Modal.Body, null,
898
- React.createElement(Modal.Message, { icon: "warning", message: "\u5F53\u524D\u8868\u683C\u6682\u4E0D\u652F\u6301\u6570\u636E\u5BFC\u5165", description: "\u5F53\u524D\u8868\u683C\u6709\u6570\u7EC4\u6216\u5BF9\u8C61\u3001\u5730\u7406\u4F4D\u7F6E\u5B57\u6BB5\u8981\u6C42\u5FC5\u586B\uFF0C\u6682\u4E0D\u652F\u6301\u5BFC\u5165\u76F8\u5173\u5B57\u6BB5\u6570\u636E" })),
899
- React.createElement(Modal.Footer, null,
900
- React.createElement(Button, { onClick: () => {
901
- modal.destroy();
902
- } }, "\u53D6\u6D88"),
903
- React.createElement(Button, { type: "primary", onClick: async () => {
904
- modal.destroy();
905
- } }, "\u786E\u8BA4")))),
906
- onClose: () => modal.destroy(),
915
+ setIsImportFileModalByApiVisible(true);
916
+ };
917
+ /**
918
+ * 后端表格导出方法
919
+ */
920
+ const exportHandleByApi = () => {
921
+ if (!isModel) {
922
+ return alertErrorMessage({
923
+ message: '当前表格组件绑定了APIs,暂不支持进行数据导出',
907
924
  });
908
925
  }
909
- else {
910
- setVisible(true);
926
+ if (isH5) {
927
+ return alertErrorMessage({
928
+ message: '移动端暂不支持进行数据导出',
929
+ });
911
930
  }
931
+ setIsExportFileModalByApiVisible(true);
912
932
  };
913
933
  /**
914
934
  * 表格导出方法
@@ -939,7 +959,7 @@ export const BaseTable = (props) => {
939
959
  },
940
960
  del: () => deleteRecord(),
941
961
  export: () => exportHandle(),
942
- import: () => importHandle(),
962
+ import: () => importHandleByApi(),
943
963
  };
944
964
  /**
945
965
  * 表格按钮选区默认事件参数
@@ -955,7 +975,7 @@ export const BaseTable = (props) => {
955
975
  return slotRender(slots.globalButton);
956
976
  }
957
977
  else if (enableGlobalButton === undefined) {
958
- // 移动端和自定义APIs场景不支持导入功能
978
+ // 移动端和APIs场景不支持导入功能
959
979
  const buttonsList = isH5 || !isModel
960
980
  ? buttons.filter((i) => i.action !== 'import')
961
981
  : buttons;
@@ -967,7 +987,7 @@ export const BaseTable = (props) => {
967
987
  * 右上角搜索
968
988
  */
969
989
  const renderSearch = () => (React.createElement("div", { className: "modal-table__search" },
970
- React.createElement(TagSearchBox, { className: "modal-table__search-input", hideHelp: true, minWidth: 400, tips: searchValues ? '' : '搜索', attributesSelectTips: "\u9009\u62E9\u8FDB\u884C\u641C\u7D22\u7684\u5B57\u6BB5", attributes: getSearchAttributes(exportFields), onClearButtonClick: () => fetchData(), onChange: (tags) => {
990
+ React.createElement(TagSearchBox, { className: "modal-table__search-input", hideHelp: true, minWidth: 400, tips: searchValues ? '' : '搜索', attributesSelectTips: "\u9009\u62E9\u8FDB\u884C\u641C\u7D22\u7684\u5B57\u6BB5", attributes: getSearchAttributes(searchFields), onClearButtonClick: () => fetchData(), onChange: (tags) => {
971
991
  const searchValues = tags
972
992
  .map((item) => {
973
993
  var _a, _b, _c;
@@ -1046,7 +1066,7 @@ export const BaseTable = (props) => {
1046
1066
  actionColumn &&
1047
1067
  (settings === null || settings === void 0 ? void 0 : settings.length) > 0 &&
1048
1068
  enableCellCustomOption === undefined && (React.createElement(Dropdown, { clickClose: false, className: "adaptation-table__row-actions", overlayStyle: { zIndex: 998 }, button: React.createElement(Button, { type: "icon", icon: "more", style: { width: '100%' } }), appearance: "pure", ...(isInIde() && recordIndex === 0 ? { open: true } : {}) },
1049
- React.createElement(List, { type: "option" }, settings === null || settings === void 0 ? void 0 : settings.map((props, index) => props.show && (React.createElement(List.Item, null,
1069
+ React.createElement(List, { type: "option" }, settings === null || settings === void 0 ? void 0 : settings.map((props, index) => props.show && (React.createElement(List.Item, { key: index },
1050
1070
  React.createElement(SelectableBlock, { ...props, component: "Button", blockKey: "settings", index: index, disabled: props.action === 'edit' ||
1051
1071
  props.action === 'del'
1052
1072
  ? props.disabled ||
@@ -1087,7 +1107,8 @@ export const BaseTable = (props) => {
1087
1107
  return React.createElement(LoadingTip, { className: "adaptation-table__loading" });
1088
1108
  }
1089
1109
  if (cardList.length === 0 || !dbName) {
1090
- return (!loading && (React.createElement(Text, { theme: "text", align: "center", className: "adaptation-table__nodata" }, "\u6682\u65E0\u6570\u636E")));
1110
+ return (!isLoading &&
1111
+ emptyText && (React.createElement(EmptyContent, { emptyText: emptyText, component: "table", isH5: true })));
1091
1112
  }
1092
1113
  if (multipleSelect) {
1093
1114
  return (React.createElement(Checkbox.Group, { value: selectedKeys, className: "adaptation-table__all-check", onChange: (val) => {
@@ -1128,23 +1149,70 @@ export const BaseTable = (props) => {
1128
1149
  setState((prev) => ({ filterCollapse: !prev.filterCollapse }));
1129
1150
  } }))))));
1130
1151
  /**
1131
- * 导入弹窗
1152
+ * 后端导入弹窗
1153
+ */
1154
+ const renderImportFileModalByApi = () => {
1155
+ var _a;
1156
+ const supportFields = (_a = fields
1157
+ .filter((field) => {
1158
+ // 不支持上传的类型
1159
+ if (!field)
1160
+ return false;
1161
+ if (field['x-system'])
1162
+ return false;
1163
+ // 计算公式不支持
1164
+ if (field['format'] === 'function')
1165
+ return false;
1166
+ // 关联模型的字段不支持
1167
+ if ((field === null || field === void 0 ? void 0 : field['x-viewType']) === 'RELATION_VIEW')
1168
+ return false;
1169
+ return true;
1170
+ })) === null || _a === void 0 ? void 0 : _a.sort((a, b) => (a === null || a === void 0 ? void 0 : a['x-index']) - (b === null || b === void 0 ? void 0 : b['x-index']));
1171
+ return (isImportFileModalByApiVisible && (React.createElement(ImportFileModalByApi, { fields: supportFields, visible: isImportFileModalByApiVisible, datasourceTitle: datasourceTitle, dbName: dbName, onCancel: () => {
1172
+ setIsImportFileModalByApiVisible(false);
1173
+ }, handleInOrOutRecordModealVisible: setIsInOrOutRecordModealVisible, refresh: () => {
1174
+ fetchData({ searchValues, pageSize, pageNo: 1 });
1175
+ } })));
1176
+ };
1177
+ /**
1178
+ * 后端导出弹窗
1132
1179
  */
1133
- const renderImportFileModal = () => {
1134
- const supportFields = fields.filter((field) => {
1180
+ const renderExportFileModalByApi = () => {
1181
+ var _a, _b;
1182
+ const supportFields = (_b = (_a = fields === null || fields === void 0 ? void 0 : fields.filter((field) => {
1135
1183
  // 不支持上传的类型
1136
1184
  if (!field)
1137
1185
  return false;
1138
- if ((field === null || field === void 0 ? void 0 : field.type) === 'array' ||
1139
- (field === null || field === void 0 ? void 0 : field.type) === 'object' ||
1140
- field['x-system'])
1186
+ if (field['x-system'])
1141
1187
  return false;
1142
1188
  return true;
1189
+ })) === null || _a === void 0 ? void 0 : _a.sort((a, b) => (a === null || a === void 0 ? void 0 : a['x-index']) - (b === null || b === void 0 ? void 0 : b['x-index']))) === null || _b === void 0 ? void 0 : _b.filter((item) => {
1190
+ // 筛选出列管理字段
1191
+ const isVisible = columns === null || columns === void 0 ? void 0 : columns.findIndex((column) => (column === null || column === void 0 ? void 0 : column.key) === (item === null || item === void 0 ? void 0 : item.name));
1192
+ return isVisible != -1;
1143
1193
  });
1144
- return (visible && (React.createElement(ImportFileModal, { fields: supportFields, visible: visible, datasourceTitle: datasourceTitle, dataBatchCreate: (data, cb) => {
1145
- dataBatchCreate({ data, cb });
1146
- }, onCancel: () => {
1147
- setVisible(false);
1194
+ // 没有数据标识默认加上数据标识字段
1195
+ const isExitId = supportFields === null || supportFields === void 0 ? void 0 : supportFields.findIndex((item) => (item === null || item === void 0 ? void 0 : item.name) === '_id');
1196
+ if (isExitId === -1) {
1197
+ supportFields.push({
1198
+ name: '_id',
1199
+ title: '数据标识',
1200
+ type: 'string',
1201
+ });
1202
+ }
1203
+ return (isExportFileModalByApiVisible && (React.createElement(ExportFileModalByApi, { fields: getFieldsTypeName(supportFields), selectedKeysList: selectedKeys, visible: isExportFileModalByApiVisible, dbName: dbName, tableColumns: columns, where: getRecordParams === null || getRecordParams === void 0 ? void 0 : getRecordParams.where, whereList: whereList(), orderBy: getRecordParams === null || getRecordParams === void 0 ? void 0 : getRecordParams.orderBy, orderType: getRecordParams === null || getRecordParams === void 0 ? void 0 : getRecordParams.orderType, onCancel: () => {
1204
+ setIsExportFileModalByApiVisible(false);
1205
+ }, handleInOrOutRecordModealVisible: setIsInOrOutRecordModealVisible })));
1206
+ };
1207
+ /*
1208
+ 导入导出记录弹窗
1209
+ */
1210
+ const renderInOrOutRecordModeal = () => {
1211
+ return (isInOrOutRecordModealVisible && (React.createElement(InOrOutRecordModeal, { visible: isInOrOutRecordModealVisible, dbName: dbName, onCancel: () => {
1212
+ isInOrOutRecordModealVisible === 'import'
1213
+ ? setIsImportFileModalByApiVisible(true)
1214
+ : setIsExportFileModalByApiVisible(true);
1215
+ setIsInOrOutRecordModealVisible(false);
1148
1216
  } })));
1149
1217
  };
1150
1218
  return isH5 ? (React.createElement("div", { className: "_wedamodal-fn-data-filter-body-h5 adaptation-table" },
@@ -1159,13 +1227,14 @@ export const BaseTable = (props) => {
1159
1227
  React.createElement(Justify, { className: "adaptation-table__all_check", left: renderH5CheckboxAll(), right: tableSearch && filterType === 'searchbox' && renderSearch() }))),
1160
1228
  renderH5Table()),
1161
1229
  filterType === 'filter' && renderH5Filter(),
1162
- renderFooter(),
1163
- renderImportFileModal())) : (React.createElement(React.Fragment, null,
1230
+ renderFooter())) : (React.createElement(React.Fragment, null,
1164
1231
  React.createElement(Table.ActionPanel, null,
1165
1232
  React.createElement(Justify, { left: tableAction && renderButtons(), right: renderPCViewFilter() })),
1166
1233
  filterType === 'filter' && (React.createElement("div", { className: "_wedamodal-fn-data-filter", style: { display: `${filterCollapse ? 'block' : 'none'}` } },
1167
1234
  React.createElement(FilterFieldsPanel, { data: filterFields, getChooseList: getChooseList, fetchData: queryHandle }))),
1168
- React.createElement(Table, { className: `modal-table ${loading ? 'modal-table-loading' : ''}`, recordKey: "_id", records: loading ? [] : records, addons: tableAddons, columns: columns, hideHeader: !emptyTextRef.current }),
1235
+ React.createElement(Table, { className: `modal-table ${isLoading ? 'modal-table-loading' : ''}`, recordKey: "_id", records: isLoading ? [] : records, addons: tableAddons, columns: fields.length > 0 ? columns : [] }),
1169
1236
  renderFooter(),
1170
- renderImportFileModal()));
1237
+ renderImportFileModalByApi(),
1238
+ renderExportFileModalByApi(),
1239
+ renderInOrOutRecordModeal()));
1171
1240
  };