@bit-sun/business-component 4.0.0-alpha.3 → 4.0.2

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 (241) hide show
  1. package/.editorconfig +16 -0
  2. package/.fatherrc.ts +5 -0
  3. package/.gitlab-ci.yml +179 -0
  4. package/.prettierignore +7 -0
  5. package/.prettierrc +11 -0
  6. package/.umirc.ts +74 -0
  7. package/dist/components/Business/BsSulaQueryTable/setting.d.ts +1 -1
  8. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +1 -1
  9. package/dist/components/Business/columnSettingTable/columnSetting.d.ts +1 -1
  10. package/dist/components/Business/columnSettingTable/index.d.ts +1 -0
  11. package/dist/components/Common/ParagraphCopier/index.d.ts +8 -0
  12. package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/CustomSelectorModal.d.ts +3 -0
  13. package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/helps.d.ts +2 -0
  14. package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/index.d.ts +3 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.esm.js +1901 -639
  17. package/dist/index.js +1903 -636
  18. package/dist/utils/requestUtils.d.ts +1 -0
  19. package/dist/utils/utils.d.ts +3 -0
  20. package/docs/index.md +21 -0
  21. package/package.json +9 -14
  22. package/src/assets/32.svg +28 -0
  23. package/src/assets/addIcon.svg +18 -0
  24. package/src/assets/allfunc.svg +28 -0
  25. package/src/assets/arrowRight.svg +25 -0
  26. package/src/assets/arrow_top.png +0 -0
  27. package/src/assets/arrow_top.svg +18 -0
  28. package/src/assets/btn-delete.svg +30 -0
  29. package/src/assets/btn-edit.svg +20 -0
  30. package/src/assets/btn-more.svg +18 -0
  31. package/src/assets/btn-submit.svg +20 -0
  32. package/src/assets/caidan.svg +12 -0
  33. package/src/assets/close.svg +26 -0
  34. package/src/assets/closeicon.png +0 -0
  35. package/src/assets/drag.svg +17 -0
  36. package/src/assets/exportFail.svg +38 -0
  37. package/src/assets/exportProcessing.svg +29 -0
  38. package/src/assets/exportSuccess.svg +35 -0
  39. package/src/assets/exportlogo.png +0 -0
  40. package/src/assets/fixed-left-active.svg +12 -0
  41. package/src/assets/fixed-left.svg +16 -0
  42. package/src/assets/fixed-right-active.svg +12 -0
  43. package/src/assets/fixed-right.svg +16 -0
  44. package/src/assets/guanbi.svg +16 -0
  45. package/src/assets/icon-quanping.svg +16 -0
  46. package/src/assets/icon-shezhi.svg +18 -0
  47. package/src/assets/label_icon_bottom.svg +26 -0
  48. package/src/assets/list-no-img.svg +22 -0
  49. package/src/assets/morentouxiang-32.svg +24 -0
  50. package/src/assets/right.png +0 -0
  51. package/src/assets/scanning.svg +25 -0
  52. package/src/assets/upExport.svg +23 -0
  53. package/src/assets/xinglan-icon-out.png +0 -0
  54. package/src/common/ENUM.ts +41 -0
  55. package/src/components/Business/AddSelectBusiness/index.md +398 -0
  56. package/src/components/Business/AddSelectBusiness/index.tsx +1116 -0
  57. package/src/components/Business/BsLayouts/Components/AllFunc/drawContent.tsx +112 -0
  58. package/src/components/Business/BsLayouts/Components/AllFunc/index.less +153 -0
  59. package/src/components/Business/BsLayouts/Components/AllFunc/index.tsx +70 -0
  60. package/src/components/Business/BsLayouts/Components/ChooseStore/index.less +0 -0
  61. package/src/components/Business/BsLayouts/Components/ChooseStore/index.tsx +193 -0
  62. package/src/components/Business/BsLayouts/Components/ChooseStore/services.ts +10 -0
  63. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.less +90 -0
  64. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.tsx +38 -0
  65. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.tsx +243 -0
  66. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.tsx +385 -0
  67. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.tsx +286 -0
  68. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.tsx +75 -0
  69. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/drawContent.less +171 -0
  70. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.less +65 -0
  71. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.tsx +154 -0
  72. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.less +73 -0
  73. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.tsx +163 -0
  74. package/src/components/Business/BsLayouts/Components/RightContent/LoginModal.tsx +85 -0
  75. package/src/components/Business/BsLayouts/Components/RightContent/home.less +218 -0
  76. package/src/components/Business/BsLayouts/Components/RightContent/i18n.ts +9 -0
  77. package/src/components/Business/BsLayouts/Components/RightContent/index.tsx +172 -0
  78. package/src/components/Business/BsLayouts/Components/SearchFunc/index.less +161 -0
  79. package/src/components/Business/BsLayouts/Components/SearchFunc/index.tsx +76 -0
  80. package/src/components/Business/BsLayouts/index.less +80 -0
  81. package/src/components/Business/BsLayouts/index.tsx +1602 -0
  82. package/src/components/Business/BsLayouts/service.ts +11 -0
  83. package/src/components/Business/BsLayouts/utils.tsx +205 -0
  84. package/src/components/Business/BsSulaQueryTable/SearchItemSetting.tsx +566 -0
  85. package/src/components/Business/BsSulaQueryTable/bssulaquerytable.less +5 -0
  86. package/src/components/Business/BsSulaQueryTable/index.less +228 -0
  87. package/src/components/Business/BsSulaQueryTable/index.tsx +817 -0
  88. package/src/components/Business/BsSulaQueryTable/setting.tsx +937 -0
  89. package/src/components/Business/BsSulaQueryTable/utils.less +65 -0
  90. package/src/components/Business/BsSulaQueryTable/utils.tsx +709 -0
  91. package/src/components/Business/CommodityEntry/index.md +84 -0
  92. package/src/components/Business/CommodityEntry/index.tsx +82 -0
  93. package/src/components/Business/CommonAlert/index.less +0 -0
  94. package/src/components/Business/CommonAlert/index.tsx +23 -0
  95. package/src/components/Business/CommonGuideWrapper/index.less +156 -0
  96. package/src/components/Business/CommonGuideWrapper/index.md +61 -0
  97. package/src/components/Business/CommonGuideWrapper/index.tsx +108 -0
  98. package/src/components/Business/DetailPageWrapper/index.less +89 -0
  99. package/src/components/Business/DetailPageWrapper/index.tsx +306 -0
  100. package/src/components/Business/DetailPageWrapper/utils.tsx +166 -0
  101. package/src/components/Business/HomePageWrapper/index.less +36 -0
  102. package/src/components/Business/HomePageWrapper/index.md +45 -0
  103. package/src/components/Business/HomePageWrapper/index.tsx +130 -0
  104. package/src/components/Business/JsonQueryTable/components/FieldsModifyModal.tsx +823 -0
  105. package/src/components/Business/JsonQueryTable/components/FieldsSettingsTable.tsx +206 -0
  106. package/src/components/Business/JsonQueryTable/components/Formula.tsx +205 -0
  107. package/src/components/Business/JsonQueryTable/components/MaintainOptions.tsx +127 -0
  108. package/src/components/Business/JsonQueryTable/configButton/index.js +20 -0
  109. package/src/components/Business/JsonQueryTable/configTree/component/compactArrayView.js +25 -0
  110. package/src/components/Business/JsonQueryTable/configTree/component/compactObjectView.js +30 -0
  111. package/src/components/Business/JsonQueryTable/configTree/index.js +82 -0
  112. package/src/components/Business/JsonQueryTable/configTree/index.less +44 -0
  113. package/src/components/Business/JsonQueryTable/configTree/parser/highlight.js +57 -0
  114. package/src/components/Business/JsonQueryTable/configTree/parser/index.js +124 -0
  115. package/src/components/Business/JsonQueryTable/configTree/render/iconRender.js +29 -0
  116. package/src/components/Business/JsonQueryTable/configTree/render/nameRender.js +22 -0
  117. package/src/components/Business/JsonQueryTable/configTree/treeNode.js +116 -0
  118. package/src/components/Business/JsonQueryTable/drawer/index.tsx +12 -0
  119. package/src/components/Business/JsonQueryTable/function.ts +62 -0
  120. package/src/components/Business/JsonQueryTable/index.less +17 -0
  121. package/src/components/Business/JsonQueryTable/index.md +328 -0
  122. package/src/components/Business/JsonQueryTable/index.tsx +534 -0
  123. package/src/components/Business/JsonQueryTable/jsonEditor/index.js +346 -0
  124. package/src/components/Business/JsonQueryTable/jsonEditor/index.less +22 -0
  125. package/src/components/Business/JsonQueryTable/jsonEditor/lint/basicType.js +147 -0
  126. package/src/components/Business/JsonQueryTable/jsonEditor/lint/index.js +389 -0
  127. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/actions.js +118 -0
  128. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/dependency.js +22 -0
  129. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/index.js +21 -0
  130. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/request.js +65 -0
  131. package/src/components/Business/JsonQueryTable/static.ts +450 -0
  132. package/src/components/Business/SearchSelect/BusinessUtils.tsx +2207 -0
  133. package/src/components/Business/SearchSelect/common.ts +134 -0
  134. package/src/components/Business/SearchSelect/index.md +1570 -0
  135. package/src/components/Business/SearchSelect/index.tsx +55 -0
  136. package/src/components/Business/SearchSelect/utils.ts +125 -0
  137. package/src/components/Business/StateFlow/index.less +131 -0
  138. package/src/components/Business/StateFlow/index.md +60 -0
  139. package/src/components/Business/StateFlow/index.tsx +30 -0
  140. package/src/components/Business/TreeSearchSelect/index.md +239 -0
  141. package/src/components/Business/TreeSearchSelect/index.tsx +33 -0
  142. package/src/components/Business/TreeSearchSelect/utils.ts +115 -0
  143. package/src/components/Business/columnSettingTable/columnSetting.tsx +869 -0
  144. package/src/components/Business/columnSettingTable/index.less +253 -0
  145. package/src/components/Business/columnSettingTable/index.md +373 -0
  146. package/src/components/Business/columnSettingTable/index.tsx +235 -0
  147. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +232 -0
  148. package/src/components/Business/columnSettingTable/utils.tsx +88 -0
  149. package/src/components/Business/moreTreeTable/FixedScrollBar.tsx +87 -0
  150. package/src/components/Business/moreTreeTable/hooks/useSticky.ts +21 -0
  151. package/src/components/Business/moreTreeTable/index.less +100 -0
  152. package/src/components/Business/moreTreeTable/index.md +448 -0
  153. package/src/components/Business/moreTreeTable/index.tsx +387 -0
  154. package/src/components/Business/moreTreeTable/utils.ts +127 -0
  155. package/src/components/Common/ExtendedCollapse/ExtendedPanel.tsx +51 -0
  156. package/src/components/Common/ExtendedCollapse/index.less +33 -0
  157. package/src/components/Common/ExtendedCollapse/index.md +136 -0
  158. package/src/components/Common/ExtendedCollapse/index.tsx +25 -0
  159. package/src/components/Common/ParagraphCopier/index.md +81 -0
  160. package/src/components/Common/ParagraphCopier/index.tsx +56 -0
  161. package/src/components/Common/Section/index.md +120 -0
  162. package/src/components/Common/Section/index.module.less +16 -0
  163. package/src/components/Common/Section/index.tsx +70 -0
  164. package/src/components/Functional/AccessWrapper/index.tsx +34 -0
  165. package/src/components/Functional/AddSelect/helps.ts +81 -0
  166. package/src/components/Functional/AddSelect/index.less +367 -0
  167. package/src/components/Functional/AddSelect/index.md +155 -0
  168. package/src/components/Functional/AddSelect/index.tsx +1072 -0
  169. package/src/components/Functional/AuthButton/index.tsx +15 -0
  170. package/src/components/Functional/BillEntry/index.less +371 -0
  171. package/src/components/Functional/BillEntry/index.md +39 -0
  172. package/src/components/Functional/BillEntry/index.tsx +771 -0
  173. package/src/components/Functional/BsAntdSula/BsCascader/index.md +62 -0
  174. package/src/components/Functional/BsAntdSula/BsCascader/index.tsx +178 -0
  175. package/src/components/Functional/BsAntdSula/index.ts +2 -0
  176. package/src/components/Functional/DataImport/index.less +63 -0
  177. package/src/components/Functional/DataImport/index.md +44 -0
  178. package/src/components/Functional/DataImport/index.tsx +782 -0
  179. package/src/components/Functional/DataValidation/index.less +63 -0
  180. package/src/components/Functional/DataValidation/index.md +52 -0
  181. package/src/components/Functional/DataValidation/index.tsx +788 -0
  182. package/src/components/Functional/EllipsisTooltip/index.d.ts +5 -0
  183. package/src/components/Functional/EllipsisTooltip/index.js +36 -0
  184. package/src/components/Functional/EllipsisTooltip/index.md +30 -0
  185. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -0
  186. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +65 -0
  187. package/src/components/Functional/QueryMutipleInput/index.less +37 -0
  188. package/src/components/Functional/QueryMutipleInput/index.md +33 -0
  189. package/src/components/Functional/QueryMutipleInput/index.tsx +129 -0
  190. package/src/components/Functional/SearchSelect/index.less +121 -0
  191. package/src/components/Functional/SearchSelect/index.md +141 -0
  192. package/src/components/Functional/SearchSelect/index.tsx +1041 -0
  193. package/src/components/Functional/SearchSelect/utils.ts +3 -0
  194. package/src/components/Functional/TreeSearchSelect/index.md +47 -0
  195. package/src/components/Functional/TreeSearchSelect/index.tsx +224 -0
  196. package/src/components/Solution/RuleComponent/CustomPlugin/CustomSelector/CustomSelectorModal.tsx +358 -0
  197. package/src/components/Solution/RuleComponent/CustomPlugin/CustomSelector/function.js +255 -0
  198. package/src/components/Solution/RuleComponent/CustomPlugin/CustomSelector/helps.tsx +58 -0
  199. package/src/components/Solution/RuleComponent/CustomPlugin/CustomSelector/index.tsx +129 -0
  200. package/src/components/Solution/RuleComponent/Formula.tsx +335 -0
  201. package/src/components/Solution/RuleComponent/InnerSelect.tsx +62 -0
  202. package/src/components/Solution/RuleComponent/RenderCompItem.tsx +743 -0
  203. package/src/components/Solution/RuleComponent/index.d.ts +29 -0
  204. package/src/components/Solution/RuleComponent/index.js +1614 -0
  205. package/src/components/Solution/RuleComponent/index.less +247 -0
  206. package/src/components/Solution/RuleComponent/renderSpecificAction.js +99 -0
  207. package/src/components/Solution/RuleComponent/ruleFiled.js +2587 -0
  208. package/src/components/Solution/RuleComponent/services.ts +13 -0
  209. package/src/components/Solution/RuleComponent/util.js +143 -0
  210. package/src/components/Solution/RuleSetter/RuleInstance.tsx +6 -0
  211. package/src/components/Solution/RuleSetter/baseRule.tsx +394 -0
  212. package/src/components/Solution/RuleSetter/function.ts +437 -0
  213. package/src/components/Solution/RuleSetter/index.less +221 -0
  214. package/src/components/Solution/RuleSetter/index.tsx +208 -0
  215. package/src/components/Solution/RuleSetter/service.js +276 -0
  216. package/src/index.ts +46 -0
  217. package/src/plugin/TableColumnSetting/index.less +247 -0
  218. package/src/plugin/TableColumnSetting/index.md +50 -0
  219. package/src/plugin/TableColumnSetting/index.tsx +725 -0
  220. package/src/plugin/TableColumnSetting/utils.ts +19 -0
  221. package/src/styles/bsDefault.less +32 -12
  222. package/src/utils/CheckOneUser/index.md +39 -0
  223. package/src/utils/CheckOneUser/index.ts +52 -0
  224. package/src/utils/CustomLoginInfo.ts +55 -0
  225. package/src/utils/LocalstorageUtils.ts +134 -0
  226. package/src/utils/TableUtils.less +52 -0
  227. package/src/utils/TableUtils.tsx +691 -0
  228. package/src/utils/auth.ts +39 -0
  229. package/src/utils/businessUtils.ts +434 -0
  230. package/src/utils/checkUtils.ts +39 -0
  231. package/src/utils/constant.ts +38 -0
  232. package/src/utils/enumConfig.ts +17 -0
  233. package/src/utils/getFormMode.js +12 -0
  234. package/src/utils/index.ts +19 -0
  235. package/src/utils/request.ts +53 -0
  236. package/src/utils/requestUtils.ts +197 -0
  237. package/src/utils/serialize.js +7 -0
  238. package/src/utils/utils.ts +267 -0
  239. package/src/utils/xlsxUtil.tsx +146 -0
  240. package/tsconfig.json +29 -0
  241. package/typings.d.ts +5 -0
@@ -0,0 +1,1041 @@
1
+ // @ts-nocheck
2
+ import React, { useState, useEffect, forwardRef, useImperativeHandle } from 'react';
3
+ import { useDebounceFn } from 'ahooks';
4
+ import { Input, Button, Modal, Select, Divider, message, Spin, Form, Table, Checkbox, TreeSelect, Tooltip, Tag } from 'antd';
5
+ import { SearchOutlined, CopyOutlined, CaretLeftOutlined } from '@ant-design/icons';
6
+ import request from '@/utils/request';
7
+ import { stringify } from 'querystring';
8
+ import _, { escapeRegExp, isNil } from "lodash"
9
+ import './index.less';
10
+ import { BusinessSearchSelect, QueryMutipleInput } from '@/index';
11
+ import { handleSourceName } from './utils';
12
+ import { judgeIsRequestError } from '@/utils/requestUtils';
13
+
14
+ const { Option } = Select;
15
+
16
+ const SearchSelect = forwardRef((props: any, ref: any) => {
17
+ const {
18
+ value, // 必传
19
+ onChange: onChangeTemp,
20
+ selectProps = {},
21
+ modalTableProps = {},
22
+ labelInValue = false,
23
+ requestConfig,
24
+ ctx,
25
+ onlyShowStr = false,
26
+ sourceName,
27
+ needModalTable = true,
28
+ getPopupContainer = undefined,
29
+ fieldComponent,
30
+ selectBusinessType,
31
+ } = props;
32
+ const {
33
+ url,
34
+ otherParams,// 默认参数
35
+ isMap,
36
+ fixedparameter,
37
+ fieldValToParam,
38
+ fixedparamsDisabled = false,
39
+ mappingTextField = 'name',
40
+ mappingTextShowKeyField,
41
+ mappingValueField = 'code',
42
+ mappingTextShowTextField,
43
+ init = true,// 是否初始请求
44
+ extralHeaders = {},// 额外请求头参数
45
+ specialBracket = false,// 是否使用特殊括弧显示选项 【value】text
46
+ noNeedSplit = false,// label显示不需要任何特殊化
47
+ } = requestConfig || {};
48
+ const resultSourceKey = handleSourceName(sourceName || requestConfig?.sourceName || ctx?.name || 'supplierCode')
49
+
50
+ const selectMode = selectProps?.mode // 设定当前选择器 为单选或者多选模式 无设定为单选模式(默认)
51
+ const initVal = value || (selectMode ? [] : null);
52
+ const pageSize = 100 // 下拉框默认分页 条数
53
+ const tableInitPageSize = 10 // 弹框默认分页 条数
54
+ const currentPage = 1
55
+ const selectParamsKey = requestConfig?.filter || 'qp-codeAndName-like'
56
+ const selectParamsInitKey = requestConfig?.filterInit || selectParamsKey
57
+ const currentSelectProps = {
58
+ ...selectProps,
59
+ // 以下属性不可更改----设计配置项
60
+ showSearch: false,
61
+ filterOption: false,
62
+ allowClear: true,
63
+ listHeight: 160,
64
+ optionLabelProp: "label",
65
+ autoClearSearchValue: false
66
+ }
67
+ const tableInitPagination = { showQuickJumper: true, total: 0, current: 1, pageSize: tableInitPageSize }
68
+
69
+ const [items, setItems] = useState([]);
70
+ const [scrollPage, setScrollPage] = useState(1);
71
+ const [itemsTotal, setItemsTotal] = useState(0);
72
+ const [fetching, setFetching] = useState(false);
73
+ const [searchValue, setSearchValue] = useState('');
74
+ const [isModalVisible, setIsModalVisible] = useState(false);
75
+ const [popvalue, setPopValue] = useState(initVal);
76
+ const [uniqueValue, setUniqueValue] = useState(resultSourceKey)
77
+ const { run } = useDebounceFn(
78
+ (v?: any) => {
79
+ // 优化搜索参数 支持传多个
80
+ let searchParams = {};
81
+ if (typeof selectParamsKey === 'string') {
82
+ let selectParamsInitValue = initVal
83
+ if (labelInValue) {
84
+ selectParamsInitValue = Array.isArray(initVal) ? initVal.map((i: any) => i.value || i.key).join(',') : initVal
85
+ } else {
86
+ selectParamsInitValue = Array.isArray(initVal) ? initVal.join(',') : initVal
87
+ }
88
+ searchParams = v ? { [selectParamsInitKey]: selectParamsInitValue } : { [selectParamsKey]: searchValue }
89
+ }
90
+ if (Array.isArray(selectParamsKey)) {
91
+ selectParamsKey.forEach((i: any) => {
92
+ searchParams = { ...searchParams, [i]: searchValue }
93
+ })
94
+ }
95
+ // 防抖函数 待定
96
+ getData(searchParams)
97
+ },
98
+ {
99
+ wait: 1000,
100
+ },
101
+ );
102
+
103
+ const [form] = Form.useForm();
104
+ const [caretLeftFlag, setCaretLeftFlag] = useState(true);
105
+ const [tableData, setTableData] = useState([]);
106
+ const [tablePagination, setTablePagination] = useState(tableInitPagination)
107
+ const [selectedRowKeys, setSelectedRowKeys] = useState([]);
108
+ const [selectedRows, setSelectedRows] = useState([]);
109
+ const [checkedAll, setCheckedAll] = useState(false)
110
+ const [indeterminate, setIndeterminate] = useState(false)
111
+ const [tableFormParams, setTableFormParams] = useState({});
112
+ const [tooltipVisible, setTooltipVisible] = useState(false);
113
+
114
+ useImperativeHandle(ref, () => ({
115
+ refreshDataSource: (reset: boolean = false) => {
116
+ if (reset) {
117
+ if (init) {
118
+ run('init');
119
+ } else {
120
+ setItems([]);
121
+ setItemsTotal(0);
122
+ }
123
+ } else {
124
+ run();
125
+ }
126
+ },
127
+ clearDataSource: () => {
128
+ setItems([]);
129
+ setItemsTotal(0);
130
+ },
131
+ getTableFormRef: () => form,
132
+ // 解决下拉框数据源的问题
133
+ getSelectDataSource: () => items,
134
+ setSelectDataSource: (list: any, listTotal: number) => {
135
+ setItems(list);
136
+ setItemsTotal(listTotal);
137
+ },
138
+ refreshSelectDataSource: () => {
139
+ refreshItems()
140
+ }
141
+ }))
142
+
143
+ // 获取数据源 (type: 1下拉框 2/3弹框 不传值默认为下拉框)
144
+ const getData = (params = {}, type = 1,callback?: any) => {
145
+ if (!requestConfig) return;
146
+
147
+ setFetching(true)
148
+
149
+ // 处理dependence参数
150
+ const fixedParam = {};
151
+ if (fixedparameter && fieldValToParam && ctx) {
152
+ fixedparameter.forEach((item: any, index: any) => {
153
+ const fixedParamVal = ctx.form.getFieldValue(fieldValToParam[index]);
154
+ if(fixedParamVal) {
155
+ fixedParam[item] = fixedParamVal;
156
+ // 解决依赖项在弹窗中回显/更改(如果不能更改,传参fixedparamsDisabled为true即可)
157
+ if(type == 2 || type == 3) {
158
+ const fixedChangeParamVal = form.getFieldValue(item);
159
+ let isDependenceValueChange = false;
160
+ let dependenceValue = fixedParamVal;
161
+ // 依赖项在弹窗form中更改--①更换依赖值;②去掉依赖值
162
+ if(!fixedparamsDisabled) {
163
+ isDependenceValueChange =
164
+ (fixedChangeParamVal && fixedChangeParamVal !== fixedParamVal)
165
+ || (type == 2 && !fixedChangeParamVal);
166
+ dependenceValue = isDependenceValueChange ? fixedChangeParamVal : fixedParamVal;
167
+ }
168
+ fixedParam[item] = dependenceValue;
169
+ form.setFieldsValue({ ...form?.getFieldsValue(), [item]: dependenceValue })
170
+ if(isDependenceValueChange) {
171
+ ctx.form.setFieldValue(fieldValToParam[index],fixedChangeParamVal) // 更改依赖项
172
+ ctx.form.setFieldValue(resultSourceKey,null) // 同时清空之前依赖项对应的选择项
173
+ refreshItems()
174
+ }
175
+ }
176
+ }
177
+ });
178
+ }
179
+
180
+ // 数组对象处理,对带有特殊标记的name进行处理
181
+ for (const key in params) {
182
+ if (Object.prototype.hasOwnProperty.call(params, key)) {
183
+ const element = params[key];
184
+ if (element && key.indexOf('*number*') >= 0) {
185
+ const dataParams = key.split('*number*');
186
+ dataParams.forEach((value, index) => {
187
+ params[value] = element[index];
188
+ });
189
+ delete params[key];
190
+ } else if (element && key.indexOf('*address*') >= 0) {
191
+ const dataParams = key.split('*address*');
192
+ dataParams.forEach((value, index) => {
193
+ params[value] = element.PCDCode[index];
194
+ });
195
+ delete params[key];
196
+ } else if (element && key.indexOf('*costType*') >= 0) {
197
+ const dataParams = key.split('*costType*');
198
+ // eslint-disable-next-line prefer-destructuring
199
+ params[dataParams[0]] = element[1];
200
+ delete params[key];
201
+ } else if (element && key.indexOf('*fullDate*') >= 0) {
202
+ const dataParams = key.split('*fullDate*');
203
+ dataParams.forEach((value, index) => {
204
+ if (index === 0) {
205
+ params[value] = moment(element[index])
206
+ .millisecond(0)
207
+ .second(0)
208
+ .minute(0)
209
+ .hour(0)
210
+ .format('YYYY-MM-DD HH:mm:ss');
211
+ } else {
212
+ params[value] = moment(element[index])
213
+ .millisecond(59)
214
+ .second(59)
215
+ .minute(59)
216
+ .hour(23)
217
+ .format('YYYY-MM-DD HH:mm:ss');
218
+ }
219
+ });
220
+ delete params[key];
221
+ } else if (typeof element === 'boolean' && key.indexOf('*checkBox*') >= 0) {
222
+ const dataParams = key.split('*checkBox*');
223
+ if (element) {
224
+ params[dataParams[0]] = 0
225
+ }
226
+ delete params[key];
227
+ } else if (element && key.indexOf('*cascader*') >= 0) {
228
+ const dataParams = key.split('*cascader*');
229
+ params[dataParams[0]] = element[element.length - 1]
230
+ delete params[key];
231
+ } else if (element && key.indexOf('*date*') >= 0) {
232
+ const dataParams = key.split('*date*')
233
+ dataParams.forEach((value, index) => {
234
+ if (index === 0) {
235
+ params[value] = moment(element[index])
236
+ .format('YYYY-MM-DD');
237
+ } else {
238
+ params[value] = moment(element[index])
239
+ .format('YYYY-MM-DD');
240
+ }
241
+ });
242
+ delete params[key];
243
+ } else if (element && key.indexOf('*multiInput') >= 0) {
244
+ let name = '',
245
+ value = element['value'];
246
+ if (value.indexOf(',') >= 0) {
247
+ name = `qp-${element['name']}-in`;
248
+ } else {
249
+ name = `qp-${element['name']}-like`;
250
+ }
251
+ params[name] = value;
252
+ delete params[key];
253
+ }
254
+ else if (element && key.indexOf('*') >= 0) {
255
+ const dataParams = key.split('*');
256
+ dataParams.forEach((value, index) => {
257
+ params[value] = element[index].format('YYYY-MM-DD HH:mm:ss');
258
+ });
259
+ delete params[key];
260
+ } else if (element && key.indexOf('_selectNumberRange') >= 0) { // key = xxxxx_selectNumberRange qp-xxxxx-gt
261
+ const dataParams = key.split('_selectNumberRange')[0]
262
+ if (params[key][0] === 'range') {
263
+ if (params[key][1][0]) {
264
+ params[`qp-${dataParams}-ge`] = params[key][1][0]
265
+ }
266
+ if (params[key][1][1]) {
267
+ params[`qp-${dataParams}-le`] = params[key][1][1]
268
+ }
269
+ } else {
270
+ params[`qp-${dataParams}-${params[key][0]}`] = params[key][1]
271
+ }
272
+ delete params[key]
273
+ } else if (Array.isArray(element)) {
274
+ params[key] = element.join(',');
275
+ } else if (element == null || element === undefined || String(element).trim() === '') {
276
+ delete params[key]
277
+ }
278
+ }
279
+ }
280
+
281
+ const queryParams = {
282
+ pageSize,
283
+ currentPage,
284
+ ...otherParams, // 默认参数
285
+ ...fixedParam,
286
+ ...params,
287
+ };
288
+ if (isNil(queryParams[selectParamsKey])) {
289
+ queryParams[selectParamsKey] = searchValue;
290
+ }
291
+ request
292
+ .get(
293
+ `${url}?${stringify(queryParams)}`,
294
+ {
295
+ headers: { ...extralHeaders }
296
+ })
297
+ .then((result: any) => {
298
+ setFetching(false)
299
+ result = result.data;
300
+ if (judgeIsRequestError(result)) {
301
+ message.error(result.msg);
302
+ return;
303
+ }
304
+ const res = result.data;
305
+ let source = [];
306
+ if (isMap) {
307
+ source = Object.keys(res).map((d, i) => {
308
+ return {
309
+ text: Object.values(res)[i],
310
+ value: d,
311
+ };
312
+ });
313
+ } else {
314
+ const keys = res.list ? 'list' : 'items';
315
+ source = res
316
+ ? res[keys]
317
+ ? res[keys].map((item: any) => {
318
+ let textShowText = item[mappingTextField]
319
+ if (mappingTextShowTextField) {
320
+ textShowText = []
321
+ if (Array.isArray(mappingTextShowTextField)) {
322
+ mappingTextShowTextField.forEach((r: any) => {
323
+ textShowText.push(item[r])
324
+ })
325
+ } else {
326
+ textShowText = item[mappingTextShowTextField]
327
+ }
328
+ }
329
+ return {
330
+ ...item,
331
+ text: specialBracket
332
+ ? `【${item[mappingValueField]}】${item[mappingTextField]}`
333
+ : item[mappingTextField],
334
+ textShowText,
335
+ textShowKey: item[mappingTextShowKeyField || mappingValueField],
336
+ value: item[mappingValueField],
337
+ };
338
+ })
339
+ : Array.isArray(res) &&
340
+ res?.map((item: Record<string, any>) => {
341
+ let textShowText = item[mappingTextField]
342
+ if (mappingTextShowTextField) {
343
+ textShowText = []
344
+ if (Array.isArray(mappingTextShowTextField)) {
345
+ mappingTextShowTextField.forEach((r: any) => {
346
+ textShowText.push(item[r])
347
+ })
348
+ } else {
349
+ textShowText = item[mappingTextShowTextField]
350
+ }
351
+ }
352
+ return {
353
+ ...item,
354
+ text: specialBracket
355
+ ? `【${item[mappingValueField]}】${item[mappingTextField]}`
356
+ : item[mappingTextField],
357
+ textShowText,
358
+ textShowKey: item[mappingTextShowKeyField || mappingValueField],
359
+ value: item[mappingValueField],
360
+ };
361
+ })
362
+ : [];
363
+ }
364
+ source = Array.isArray(source) ? source : []
365
+ if(callback) {
366
+ callback(source)
367
+ } else {
368
+ if (type === 1) {
369
+ ctx?.form?.setFieldSource(resultSourceKey, source)
370
+ setItems(source)
371
+ setItemsTotal(Number(res?.total || res?.totalCount || source.length))
372
+ } else {
373
+ setTableData(source)
374
+ setTablePagination({ ...tablePagination, total: Number(res?.total || res?.totalCount || source.length), pageSize: Number(res?.size || res?.pageSize || (params?.pageSize || pageSize)), current: Number(res?.page || res?.currentPage || (params?.currentPage || currentPage)) })
375
+ }
376
+ }
377
+ })
378
+ .catch((err) => { setFetching(false) });
379
+ }
380
+
381
+ const SelectScroll = e => {
382
+ e.persist();
383
+ const { target } = e;
384
+ const totalPage = Math.ceil(itemsTotal / pageSize)
385
+ // 判断是否滑动到底部
386
+ const isTouchGround = target.scrollTop + target.offsetHeight === target.scrollHeight // >=scrollHeight
387
+ // 判断数据是否还没有加载到了最后一页
388
+ const canPageAdd = scrollPage < totalPage
389
+ if (isTouchGround && canPageAdd) {
390
+ const nextScrollPage = scrollPage + 1;
391
+ setScrollPage(nextScrollPage);
392
+ getData({ currentPage: nextScrollPage }); // 调用api方法
393
+ }
394
+
395
+ //判断是否滑动到顶部
396
+ const isTouchTop = target.scrollTop === 0 // <=0
397
+ // 判断数据是否到第一页
398
+ const canPageJian = scrollPage > 1
399
+ if (isTouchTop && canPageJian) {
400
+ const preScrollPage = scrollPage - 1;
401
+ setScrollPage(preScrollPage);
402
+ getData({ currentPage: preScrollPage }); // 调用api方法
403
+ }
404
+ }
405
+
406
+ // 下拉框改变事件
407
+ const onChange = (...arg) => {
408
+ onChangeTemp(...arg)
409
+ if(props?.selectChangeCallback){
410
+ props.selectChangeCallback(...arg)
411
+ }
412
+ if(props?.selectProps?.selectChangeCallback) {
413
+ props.selectProps.selectChangeCallback(...arg)
414
+ }
415
+ }
416
+
417
+ useEffect(() => {
418
+ if (init) {
419
+ run('init')
420
+ }
421
+ }, [])
422
+
423
+ useEffect(() => {
424
+ if (value) {
425
+ setPopValue(value);
426
+ }
427
+ }, [value]);
428
+
429
+ useEffect(() => {
430
+ makeUniqueValue();
431
+ }, [resultSourceKey])
432
+
433
+ useEffect(() => {
434
+ if (init) {
435
+ setItems([]);
436
+ setItemsTotal(0);
437
+ run('init')
438
+ }
439
+ },[selectBusinessType])
440
+
441
+ const showModal = () => {
442
+ getData({ pageSize: tableInitPageSize, currentPage: 1 }, 3)
443
+ setIsModalVisible(true);
444
+ // 回显
445
+ if (value) {
446
+ if (selectMode) {
447
+ setSelectedRowKeys(labelInValue ? value.map(i => i.key) : value)
448
+ setSelectedRows(labelInValue ? value.map(i => ({ [mappingValueField]: i.key, value: i.key, text: i.label })) : value.map(i => ({ [mappingValueField]: i, value: i })))
449
+ setPopValue(labelInValue ? value.map(i => ({ value: i.key, text: i.label })) : value.map(i => ({ value: i })));
450
+ setIndeterminate(!!value.length && value.length < itemsTotal);
451
+ setCheckedAll(itemsTotal && value.length === itemsTotal);
452
+
453
+ } else {
454
+ setSelectedRowKeys(labelInValue ? [value.key] : [value])
455
+ setSelectedRows(labelInValue ? [{ [mappingValueField]: value.key, value: value.key, text: value.label }] : [{ [mappingValueField]: value, value: value }])
456
+ setPopValue(labelInValue ? [{ value: value.key, text: value.label }] : [{ value: value }]);
457
+ }
458
+ }
459
+ };
460
+
461
+ const handleSelectOver = (selectedValue: any) => {
462
+ if (selectedValue?.length) {
463
+ // 解决选择最后1页的sku,返回后,不显示名称问题
464
+ const source = _.uniqBy(items.concat(selectedValue), 'value')
465
+ ctx?.form?.setFieldSource(resultSourceKey, source)
466
+ setItems(source)
467
+ formaData(selectedValue, source);
468
+ } else {
469
+ const formatResult = selectMode ? [] : null
470
+ onChange(formatResult, selectedValue)
471
+ }
472
+ }
473
+
474
+ const handleOk = () => {
475
+ handleSelectOver(popvalue)
476
+ handleCancel();
477
+ };
478
+
479
+ const formaData = (value: any, source: any) => {
480
+ if (labelInValue) {
481
+ const formatResult = value.map((i: any) => ({ key: i[mappingValueField] || i.key, label: i[mappingTextField] || i.label, value: i[mappingValueField] || i.value }))
482
+ onChange(selectMode ? formatResult : formatResult[0], value,source)
483
+ } else {
484
+ const formatResult = selectMode ? value.map((i: any) => i.value) : _.get(value[0], 'value')
485
+ onChange(formatResult, value,source)
486
+ }
487
+ };
488
+
489
+ const clearModalTable = () => {
490
+ form.resetFields();
491
+ setTableFormParams({});
492
+ setTableData([]);
493
+ setTablePagination(tableInitPagination);
494
+ setSelectedRowKeys([]);
495
+ setSelectedRows([]);
496
+ setCheckedAll(false);
497
+ setIndeterminate(false);
498
+ };
499
+
500
+ const handleCancel = () => {
501
+ clearModalTable();
502
+ setIsModalVisible(false);
503
+ if (selectMode) {
504
+ run();
505
+ }
506
+ };
507
+
508
+ const refreshItems = () => {
509
+ // 查看是否存在关联值 如果有关联值 就查询 没有就不能查询
510
+ if (fieldValToParam && ctx && fixedparamsDisabled) {
511
+ let formValueList = [];
512
+ fieldValToParam.forEach((item: any, index: any) => {
513
+ const fixedParamVal = ctx.form.getFieldValue(fieldValToParam[index]);
514
+ formValueList.push(fixedParamVal);
515
+ });
516
+ if (formValueList.filter((item: any) => item).length > 0) {
517
+ run();
518
+ } else {
519
+ setItems([]);
520
+ setItemsTotal(0);
521
+ }
522
+ } else {
523
+ run();
524
+ }
525
+ }
526
+
527
+ const onSearchChange = (e) => {
528
+ setSearchValue(e.target.value);
529
+ refreshItems();
530
+ }
531
+
532
+ const onSearchBlur = () => {
533
+ setSearchValue('');
534
+ refreshItems();
535
+ }
536
+
537
+ const onSearchTable = () => {
538
+ const params = form.getFieldsValue();
539
+ setTableFormParams(params);
540
+ getData({ ...params, pageSize: tableInitPageSize }, 2)
541
+ if (selectMode) {
542
+ getData(params)
543
+ }
544
+ }
545
+
546
+ const onResetTable = () => {
547
+ form.resetFields();
548
+ setTableFormParams({});
549
+ getData({ pageSize: tableInitPageSize, currentPage: 1 }, 2)
550
+ }
551
+
552
+ const handleTableChange = (pagination) => {
553
+ getData({ ...tableFormParams, pageSize: pagination.pageSize, currentPage: pagination.current }, 2)
554
+ }
555
+
556
+ const onCheckAllData = (pSize) => {
557
+ getData({ ...tableFormParams, pageSize: pSize, currentPage: 1 }, 2,(source) => {
558
+ const currentItemsData = JSON.parse(JSON.stringify(source))
559
+ setSelectedRowKeys(currentItemsData.map(i => i.value))
560
+ setPopValue(currentItemsData);
561
+ setSelectedRows(currentItemsData)
562
+ })
563
+ }
564
+
565
+ const onChangeCheckAll = (e) => {
566
+ // 允许用户自定义 全选操作逻辑
567
+ if(modalTableProps?.onCheckAll) {
568
+ modalTableProps?.onCheckAll(e,{items,itemsTotal,tablePagination,onCheckAllData,setSelectedRowKeys,setPopValue,setSelectedRows,setIndeterminate,setCheckedAll})
569
+ return;
570
+ }
571
+
572
+ if (e.target.checked) {
573
+ // 如果下拉框有所有数据就处理选中所有【items.length === itemsTotal】(最多可选100条)
574
+ // 如果超过100条 就默认查出所有数据
575
+ if ((items.length < itemsTotal) || (items.length === itemsTotal && itemsTotal == 0)) {
576
+ const totalCount = tablePagination?.total || itemsTotal // 兼容有查询条件的情况 首次加载是没有所有数据的,默认给加载后端返回的总条数
577
+ const totalPage = Math.ceil(totalCount / tablePagination?.pageSize);
578
+ const allPageSize = totalPage * tablePagination?.pageSize;
579
+ onCheckAllData(allPageSize)
580
+ } else {
581
+ const currentItemsData = JSON.parse(JSON.stringify(items))
582
+ setSelectedRowKeys(currentItemsData.map(i => i.value))
583
+ setPopValue(currentItemsData);
584
+ setSelectedRows(currentItemsData)
585
+ }
586
+ } else {
587
+ setSelectedRowKeys([])
588
+ setPopValue([]);
589
+ setSelectedRows([])
590
+ }
591
+ setIndeterminate(false);
592
+ setCheckedAll(e.target.checked);
593
+ }
594
+
595
+ const LightHeightOption = (props) => {
596
+ const {
597
+ filterTxt, text,
598
+ } = props
599
+ const heightLightTxt = (text, heightTxt) => {
600
+ if (heightTxt === '') {
601
+ return text
602
+ }
603
+ const searchString = escapeRegExp(heightTxt);
604
+ // 前面filterOption 不区分大小写,这里用i
605
+ const regexp = new RegExp(searchString, 'gi')
606
+ return text.replace(regexp, `<span style="color:red">${heightTxt}</span>`)
607
+ }
608
+ return (
609
+ <Tooltip title={text}>
610
+ <div ref={(nodeElement) => {
611
+ if (nodeElement) {
612
+ nodeElement.innerHTML = heightLightTxt(text, filterTxt)
613
+ }
614
+ }}
615
+ />
616
+ </Tooltip>
617
+ )
618
+ }
619
+
620
+ // 扁平化二维数组的方法
621
+ const mapRows = params => {
622
+ var res = [];
623
+ for (var i = 0; i < params.length; i++) {
624
+ if (Array.isArray(params[i])) {
625
+ // 去重
626
+ res = _.uniqBy(res.concat(mapRows(params[i])), 'value');
627
+ } else {
628
+ res.push(params[i]);
629
+ // 去重
630
+ res = _.uniqBy(res, 'value')
631
+ }
632
+ }
633
+ return res.filter(Boolean); //去掉undefined的情况
634
+ };
635
+
636
+ const onChangeSelectedKeys = (selectKeys, selectRows) => {
637
+ let sksResult = selectRows.map((i) => i.value);
638
+
639
+ // 单选 默认直接选中 不需要确定 配置了modalRadioNeedFooter就需要确定
640
+ if(!selectMode && !modalTableProps?.modalRadioNeedFooter) {
641
+ handleSelectOver(selectRows)
642
+ handleCancel();
643
+ }
644
+
645
+ setSelectedRowKeys(sksResult)
646
+ setSelectedRows(selectRows)
647
+ setPopValue(selectRows);
648
+ setIndeterminate(!!selectRows.length && selectRows.length < tablePagination?.total);
649
+ setCheckedAll(selectRows.length === tablePagination?.total);
650
+ }
651
+
652
+ // 生成唯一值
653
+ const makeUniqueValue = () => {
654
+ const generateUnitKey = (((1 + Math.random()) * 0x10000) | 0).toString(16);
655
+ setUniqueValue(generateUnitKey);
656
+ return generateUnitKey;
657
+ }
658
+
659
+ const rowSelection = {
660
+ type: selectMode ? 'checkbox' : 'radio',
661
+ selectedRowKeys,
662
+ preserveSelectedRowKeys: true,
663
+ onChange: (sks, srs) => {
664
+ // 处理翻页后,之前存储的selectedRows变为undefined
665
+ // selectedRows合并新数组,过滤undefined,过滤留下对应selectedRowKeys的集合
666
+ let tmpSelectedRows = selectedRows.concat(srs).filter(item => item != undefined);
667
+ let totalSelectedRows = sks.map(key => tmpSelectedRows.filter(item => item[mappingValueField] == key)[0]).filter(item => item != undefined)
668
+ onChangeSelectedKeys(sks, totalSelectedRows)
669
+ },
670
+ getCheckboxProps: selectProps?.getCheckboxProps ? selectProps?.getCheckboxProps : () => {
671
+ return ({
672
+ disabled: selectProps?.disabled || props?.disabled || (!items.length && !tableData.length),
673
+ })
674
+ },
675
+ };
676
+
677
+ const onDoubleClickSelect = (e, record) => {
678
+ if (!selectMode && !(selectProps?.disabled || props?.disabled || (!items.length && !tableData.length))) {
679
+ const srs = [JSON.parse(JSON.stringify(record))]
680
+ const sks = srs.map((i: any) => i.value)
681
+ onChangeSelectedKeys(sks, srs)
682
+ }
683
+ }
684
+
685
+ const themeColor = { color: '#005cff' }
686
+
687
+ const formItem = (list) => {
688
+ if (isModalVisible && list?.length) {
689
+ const setDisabled = (name: any) => {
690
+ if (fixedparamsDisabled && fixedparameter?.length && fixedparameter.find((item: any) => item === name)) {
691
+ return true
692
+ } else {
693
+ return false
694
+ }
695
+ };
696
+ return list.map((i: any) => {
697
+ if (i?.type === 'select' || i?.field?.type === 'select') {
698
+ return (
699
+ <Form.Item name={i.name} label={i.label} key={i.name}>
700
+ <Select style={{ width: '100%' }} placeholder='请选择' {...i?.field?.props} disabled={setDisabled(i.name)}>
701
+ {i?.initialSource?.length && i?.initialSource.map((m: any) => (
702
+ <Option value={m.value} key={m.value}>{m.text}</Option>
703
+ ))}
704
+ </Select>
705
+ </Form.Item>
706
+ )
707
+ }
708
+
709
+ if (i?.type === 'treeSelect' || i?.field?.type === 'treeSelect') {
710
+ return (
711
+ <Form.Item name={i.name} label={i.label} key={i.name}>
712
+ <TreeSelect style={{ width: '100%' }} placeholder='请选择' {...i?.field?.props} disabled={setDisabled(i.name)}></TreeSelect>
713
+ </Form.Item>
714
+ )
715
+ }
716
+
717
+ if (i?.type === 'businessSearchSelect' || i?.field?.type === 'businessSearchSelect') {
718
+ return (
719
+ <div>
720
+ <Form.Item name={i.name} label={i.label} key={i.name}>
721
+ <BusinessSearchSelect {...i.field.props} disabled={setDisabled(i.name)} />
722
+ </Form.Item>
723
+ </div>
724
+ )
725
+ }
726
+
727
+ if (i?.type === 'multipleQueryInput' || i?.field?.type === 'multipleQueryInput') {
728
+ return (
729
+ <div>
730
+ <Form.Item name={i.name} label={i.label} key={i.name}>
731
+ <QueryMutipleInput onValueChange={(value) => {
732
+ form.setFieldsValue({
733
+ [i.name]: value
734
+ })
735
+ }} />
736
+ </Form.Item>
737
+ </div>
738
+ );
739
+ }
740
+
741
+ // 默认type是input
742
+ return (
743
+ <Form.Item name={i.name} label={i.label} key={i.name}>
744
+ <Input style={{ width: '100%' }} placeholder='请输入' allowClear maxLength={100} {...i?.field?.props} disabled={setDisabled(i.name)} />
745
+ </Form.Item>
746
+ )
747
+ })
748
+ } else {
749
+ return null
750
+ }
751
+ }
752
+
753
+ const maxTagPlaceholder = (selectedValues) => {
754
+ const onClose = (e: any, item: any) => {
755
+ e.preventDefault();
756
+ const newValue = labelInValue ? JSON.parse(JSON.stringify(value)).filter((i: any) => i.value !== item.value) : JSON.parse(JSON.stringify(value)).filter((i: any) => i !== item.value)
757
+ onChange(newValue);
758
+ }
759
+ return (
760
+ <Tooltip title={selectedValues.map((i: any) => (
761
+ <Tag
762
+ closable={true}
763
+ onClose={(e) => onClose(e, i)}
764
+ style={{ marginRight: 3, background: '#f5f5f5', height: '24px', border: '1px solid #f0f0f0' }}
765
+ >
766
+ {i.label}
767
+ </Tag>
768
+ ))}>
769
+ {`+ ${selectedValues?.length}`}
770
+ </Tooltip>
771
+ )
772
+ }
773
+
774
+ const handleSelectOptionsShowValue = (specialBracket: boolean, noNeedSplit: boolean, item: object) => {
775
+ let showText = Array.isArray(item.textShowText) &&
776
+ item.textShowText.join(' ') || item.textShowText;
777
+ if (noNeedSplit) {
778
+ return item.text;
779
+ } else {
780
+ return specialBracket
781
+ ? `【${item.textShowKey || ''}】${showText}`
782
+ : `${item.textShowKey || ''} ${showText}`
783
+ }
784
+ };
785
+
786
+ const getShowLabelTextStr = (kongValue): string => {
787
+ if (selectMode) {
788
+ return Array.isArray(value) && value?.map(item => item.label || item.text || '')?.join(',') || kongValue;
789
+ }
790
+ return (value?.label || value?.text || kongValue) as string;
791
+ };
792
+ const getSelectValueText = (v: any) => {
793
+ return (items || []).filter(item => item.value === v)?.[0]?.text || v || '';
794
+ }
795
+ const getShowValueStr = (kongValue): string => {
796
+ if (selectMode) {
797
+ return Array.isArray(value) && value?.map(item => getSelectValueText(item))?.join(',') || kongValue;
798
+ }
799
+ return (getSelectValueText(value) || kongValue) as string;
800
+ }
801
+ const getShowStr = () => {
802
+ const kongValue = '无'
803
+ // 先判断labelInValue与否,labelInValue可以直接去value中获取字段名称,否则去下拉框数据里面去拿;
804
+ // 再判断是单选还是多选,数据类型不同取值方式也不同
805
+ if (labelInValue) {
806
+ return getShowLabelTextStr(kongValue);
807
+ }
808
+ return getShowValueStr(kongValue);
809
+ }
810
+
811
+ const isShouldShowStr = props.disabled && ctx
812
+ return (
813
+ <div className={'search_select'}>
814
+ {fieldComponent ? (
815
+ <div
816
+ onClick={() => {
817
+ fieldComponent.props?.onClick?.();
818
+ showModal();
819
+ }}
820
+ >
821
+ {fieldComponent}
822
+ </div>
823
+ ) : (
824
+ isShouldShowStr ?
825
+ (<div title={getShowStr()} style={{overflow:'hidden',textOverflow:'ellipsis',whiteSpace:'nowrap'}} className={'search_select_show'}>
826
+ {getShowStr()}
827
+ </div>) :
828
+ <div
829
+ className="search_select_show"
830
+ id={`search_select_div_${uniqueValue}`}
831
+ >
832
+ <Select
833
+ virtual
834
+ labelInValue={labelInValue}
835
+ value={value}
836
+ onChange={onChange}
837
+ disabled={props.disabled}
838
+ dropdownRender={(menu) => (
839
+ <>
840
+ <Input
841
+ value={searchValue}
842
+ style={{ width: '98%', marginLeft: '1%' }}
843
+ placeholder="请输入"
844
+ onChange={(e) => onSearchChange(e)}
845
+ onBlur={onSearchBlur}
846
+ onKeyDown={(e) => {
847
+ // 阻止多选的冒泡
848
+ e.stopPropagation();
849
+ }}
850
+ />
851
+ <Divider style={{ margin: '8px 0' }} />
852
+ {menu}
853
+ </>
854
+ )}
855
+ notFoundContent={
856
+ fetching ? (
857
+ <Spin size="small" className='searchSelectSpin' />
858
+ ) : (
859
+ <div style={{ textAlign: 'center' }}>
860
+ <div style={{ marginBottom: 16 }}>
861
+ <CopyOutlined style={{ fontSize: '50px' }} />
862
+ </div>
863
+ <div>无匹配结果,请更换其他内容再试</div>
864
+ </div>
865
+ )
866
+ }
867
+ onPopupScroll={SelectScroll}
868
+ style={{ width: needModalTable ? 'calc(100% - 30px)' : 'calc(100%)' }}
869
+ placeholder="请选择"
870
+ maxTagPlaceholder={maxTagPlaceholder}
871
+ {...currentSelectProps}
872
+ getPopupContainer={(triggerNode) => (getPopupContainer && getPopupContainer(triggerNode)) || triggerNode.parentElement}
873
+ >
874
+ {items.map(item => (
875
+ <Option key={item.value} label={item.text}>
876
+ {LightHeightOption({
877
+ text: handleSelectOptionsShowValue(specialBracket, noNeedSplit, item),
878
+ filterTxt: searchValue
879
+ })}
880
+ </Option>
881
+ ))}
882
+ </Select>
883
+ {needModalTable && (
884
+ <Button
885
+ style={{ width: '30px', padding: '2px'}}
886
+ onClick={showModal}
887
+ type="primary"
888
+ >
889
+ <SearchOutlined />
890
+ </Button>
891
+ )}
892
+ </div>
893
+ )}
894
+ {needModalTable && isModalVisible && (
895
+ <Modal
896
+ width="80%"
897
+ title={modalTableProps?.modalTableTitle}
898
+ visible={isModalVisible}
899
+ onOk={handleOk}
900
+ onCancel={handleCancel}
901
+ footer={
902
+ selectMode || modalTableProps?.modalRadioNeedFooter
903
+ ? [
904
+ <Button key="back" onClick={handleCancel}>
905
+ 取消
906
+ </Button>,
907
+ <Button
908
+ key="submit"
909
+ type="primary"
910
+ onClick={handleOk}
911
+ disabled={
912
+ !tableData.length ||
913
+ selectProps?.disabled ||
914
+ props?.disabled
915
+ }
916
+ >
917
+ 确定
918
+ </Button>,
919
+ ]
920
+ : null
921
+ }
922
+ {...(modalTableProps?.modalProps || {})}
923
+ >
924
+ <div className={'search_select_wrapper'}>
925
+ <div
926
+ className={'search_select_wrapper_click_flag'}
927
+ onClick={() => setCaretLeftFlag(!caretLeftFlag)}
928
+ >
929
+ <CaretLeftOutlined
930
+ className={
931
+ caretLeftFlag
932
+ ? 'search_select_wrapper_click_flag_arrow'
933
+ : 'search_select_wrapper_click_flag_arrow_1'
934
+ }
935
+ />
936
+ </div>
937
+ <div
938
+ className={
939
+ caretLeftFlag
940
+ ? 'search_select_wrapper_left'
941
+ : 'search_select_wrapper_left1'
942
+ }
943
+ >
944
+ <div className={'select_list_columns'}>
945
+ <div className={'select_list_columns_tips'}>搜索</div>
946
+ <div className={'select_list_columns_formItems'}>
947
+ <Form form={form} layout="vertical" key="modalForm">
948
+ {formItem(modalTableProps?.tableSearchForm)}
949
+ </Form>
950
+ </div>
951
+ </div>
952
+ <div className={'select_list_searchButton'}>
953
+ <Button
954
+ key="reset"
955
+ className={'select_list_button_space'}
956
+ onClick={onResetTable}
957
+ >
958
+ 重置
959
+ </Button>
960
+ <Button key="search" type="primary" onClick={onSearchTable}>
961
+ 查询
962
+ </Button>
963
+ </div>
964
+ </div>
965
+ <div
966
+ className={
967
+ caretLeftFlag
968
+ ? 'search_select_wrapper_right'
969
+ : 'search_select_wrapper_right1'
970
+ }
971
+ >
972
+ <div>
973
+ <div className={'select_list_selectTips'}>
974
+ <div style={{ marginLeft: 8 }}>
975
+ 搜索结果共
976
+ <span style={themeColor}>
977
+ {tablePagination?.total || 0}
978
+ </span>
979
+
980
+ {selectMode ? (
981
+ <span>
982
+ , 本次已选
983
+ <span style={themeColor}>
984
+ {selectedRowKeys?.length || 0}
985
+ </span>
986
+
987
+ </span>
988
+ ) : (
989
+ ''
990
+ )}
991
+ </div>
992
+ <div
993
+ style={{ color: 'rgba(127, 127, 127, 0.6470588235294118)' }}
994
+ >
995
+ {selectMode
996
+ ? '勾选后点击确定按钮完成选择'
997
+ : '双击数据行或点击单选图标完成选择'}
998
+ </div>
999
+ </div>
1000
+ <Table
1001
+ size="small"
1002
+ rowSelection={rowSelection}
1003
+ columns={modalTableProps?.tableColumns}
1004
+ dataSource={tableData}
1005
+ pagination={tablePagination}
1006
+ onChange={handleTableChange}
1007
+ rowKey={mappingValueField}
1008
+ scroll={{
1009
+ x: modalTableProps.overScrollX || 'max-content',
1010
+ y: modalTableProps.overScrollY || null,
1011
+ }}
1012
+ onRow={(record) => {
1013
+ return {
1014
+ onDoubleClick: (event) =>
1015
+ onDoubleClickSelect(event, record),
1016
+ };
1017
+ }}
1018
+ />
1019
+ {(selectMode && !modalTableProps?.isHiddenCheckAll) ? (
1020
+ <div className={'select_list_selectAll'}>
1021
+ <Checkbox
1022
+ indeterminate={indeterminate}
1023
+ checked={checkedAll}
1024
+ onChange={onChangeCheckAll}
1025
+ disabled={selectProps?.disabled || props?.disabled}
1026
+ />{' '}
1027
+ 全选所有页面
1028
+ </div>
1029
+ ) : (
1030
+ ''
1031
+ )}
1032
+ </div>
1033
+ </div>
1034
+ </div>
1035
+ </Modal>
1036
+ )}
1037
+ </div>
1038
+ );
1039
+ });
1040
+
1041
+ export default SearchSelect;