@bit-sun/business-component 2.3.24 → 2.3.26

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 (213) hide show
  1. package/.editorconfig +16 -16
  2. package/.fatherrc.ts +5 -5
  3. package/.gitlab-ci.yml +179 -179
  4. package/.prettierignore +7 -7
  5. package/.prettierrc +11 -11
  6. package/.umirc.ts +74 -74
  7. package/README.md +27 -27
  8. package/dist/components/Business/BsLayouts/Components/AllFunc/drawContent.d.ts +1 -1
  9. package/dist/components/Business/BsLayouts/Components/AllFunc/index.d.ts +1 -1
  10. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.d.ts +1 -1
  11. package/dist/components/Business/BsLayouts/Components/CustomerMenu/index.d.ts +1 -1
  12. package/dist/components/Business/BsLayouts/Components/RightContent/index.d.ts +2 -2
  13. package/dist/components/Business/BsLayouts/Components/SearchFunc/index.d.ts +2 -2
  14. package/dist/components/Business/BsLayouts/index.d.ts +2 -2
  15. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +2 -2
  16. package/dist/components/Business/JsonQueryTable/static.d.ts +1 -0
  17. package/dist/components/Business/SearchSelect/index.d.ts +1 -1
  18. package/dist/components/Business/moreTreeTable/FixedScrollBar.d.ts +1 -1
  19. package/dist/components/Functional/AddSelect/helps.d.ts +13 -0
  20. package/dist/components/Functional/BsAntdSula/BsCascader/index.d.ts +1 -1
  21. package/dist/components/Functional/SearchSelect/index.d.ts +1 -1
  22. package/dist/components/Solution/RuleComponent/InnerSelect.d.ts +11 -0
  23. package/dist/index.esm.js +1568 -1300
  24. package/dist/index.js +1568 -1300
  25. package/dist/utils/TableUtils.d.ts +2 -2
  26. package/dist/utils/utils.d.ts +1 -1
  27. package/docs/index.md +21 -21
  28. package/lib/assets/drag.svg +17 -17
  29. package/lib/assets/exportFail.svg +37 -37
  30. package/lib/assets/exportProcessing.svg +28 -28
  31. package/lib/assets/exportSuccess.svg +34 -34
  32. package/lib/assets/label_icon_bottom.svg +25 -25
  33. package/lib/assets/upExport.svg +22 -22
  34. package/package.json +78 -78
  35. package/src/assets/32.svg +27 -27
  36. package/src/assets/addIcon.svg +17 -17
  37. package/src/assets/allfunc.svg +27 -27
  38. package/src/assets/arrowRight.svg +24 -24
  39. package/src/assets/btn-delete.svg +29 -29
  40. package/src/assets/btn-edit.svg +19 -19
  41. package/src/assets/btn-more.svg +17 -17
  42. package/src/assets/btn-submit.svg +19 -19
  43. package/src/assets/caidan.svg +11 -11
  44. package/src/assets/close.svg +26 -26
  45. package/src/assets/drag.svg +17 -17
  46. package/src/assets/exportFail.svg +37 -37
  47. package/src/assets/exportProcessing.svg +28 -28
  48. package/src/assets/exportSuccess.svg +34 -34
  49. package/src/assets/fixed-left-active.svg +11 -11
  50. package/src/assets/fixed-left.svg +15 -15
  51. package/src/assets/fixed-right-active.svg +11 -11
  52. package/src/assets/fixed-right.svg +15 -15
  53. package/src/assets/guanbi.svg +15 -15
  54. package/src/assets/icon-quanping.svg +15 -15
  55. package/src/assets/icon-shezhi.svg +17 -17
  56. package/src/assets/label_icon_bottom.svg +25 -25
  57. package/src/assets/list-no-img.svg +21 -21
  58. package/src/assets/morentouxiang-32.svg +23 -23
  59. package/src/assets/scanning.svg +24 -24
  60. package/src/assets/upExport.svg +22 -22
  61. package/src/common/ENUM.ts +41 -41
  62. package/src/components/Business/AddSelectBusiness/index.md +162 -162
  63. package/src/components/Business/AddSelectBusiness/index.tsx +1060 -895
  64. package/src/components/Business/BsLayouts/Components/AllFunc/drawContent.tsx +111 -111
  65. package/src/components/Business/BsLayouts/Components/AllFunc/index.less +153 -153
  66. package/src/components/Business/BsLayouts/Components/AllFunc/index.tsx +70 -70
  67. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.less +90 -90
  68. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.tsx +37 -37
  69. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.tsx +242 -242
  70. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.tsx +384 -384
  71. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.tsx +285 -285
  72. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.tsx +74 -74
  73. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/drawContent.less +170 -170
  74. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.less +64 -64
  75. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.tsx +153 -153
  76. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.less +72 -72
  77. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.tsx +157 -157
  78. package/src/components/Business/BsLayouts/Components/RightContent/LoginModal.tsx +85 -85
  79. package/src/components/Business/BsLayouts/Components/RightContent/home.less +218 -218
  80. package/src/components/Business/BsLayouts/Components/RightContent/index.tsx +155 -155
  81. package/src/components/Business/BsLayouts/Components/SearchFunc/index.less +160 -160
  82. package/src/components/Business/BsLayouts/Components/SearchFunc/index.tsx +75 -75
  83. package/src/components/Business/BsLayouts/index.less +79 -79
  84. package/src/components/Business/BsLayouts/index.tsx +1484 -1484
  85. package/src/components/Business/BsLayouts/service.ts +10 -10
  86. package/src/components/Business/BsLayouts/utils.tsx +203 -203
  87. package/src/components/Business/BsSulaQueryTable/SearchItemSetting.tsx +564 -564
  88. package/src/components/Business/BsSulaQueryTable/index.less +221 -221
  89. package/src/components/Business/BsSulaQueryTable/index.tsx +535 -535
  90. package/src/components/Business/BsSulaQueryTable/setting.tsx +852 -852
  91. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  92. package/src/components/Business/BsSulaQueryTable/utils.tsx +690 -688
  93. package/src/components/Business/CommodityEntry/index.md +70 -70
  94. package/src/components/Business/CommodityEntry/index.tsx +80 -80
  95. package/src/components/Business/CommonAlert/index.tsx +23 -23
  96. package/src/components/Business/CommonGuideWrapper/index.less +111 -111
  97. package/src/components/Business/CommonGuideWrapper/index.md +39 -39
  98. package/src/components/Business/CommonGuideWrapper/index.tsx +83 -83
  99. package/src/components/Business/DetailPageWrapper/index.less +79 -79
  100. package/src/components/Business/DetailPageWrapper/index.tsx +313 -314
  101. package/src/components/Business/DetailPageWrapper/utils.tsx +100 -100
  102. package/src/components/Business/HomePageWrapper/index.less +33 -33
  103. package/src/components/Business/HomePageWrapper/index.md +45 -45
  104. package/src/components/Business/HomePageWrapper/index.tsx +162 -162
  105. package/src/components/Business/JsonQueryTable/components/FieldsModifyModal.tsx +824 -824
  106. package/src/components/Business/JsonQueryTable/components/FieldsSettingsTable.tsx +205 -205
  107. package/src/components/Business/JsonQueryTable/components/Formula.tsx +205 -205
  108. package/src/components/Business/JsonQueryTable/components/MaintainOptions.tsx +127 -127
  109. package/src/components/Business/JsonQueryTable/configButton/index.js +20 -20
  110. package/src/components/Business/JsonQueryTable/configTree/component/compactArrayView.js +25 -25
  111. package/src/components/Business/JsonQueryTable/configTree/component/compactObjectView.js +30 -30
  112. package/src/components/Business/JsonQueryTable/configTree/index.js +82 -82
  113. package/src/components/Business/JsonQueryTable/configTree/index.less +44 -44
  114. package/src/components/Business/JsonQueryTable/configTree/parser/highlight.js +57 -57
  115. package/src/components/Business/JsonQueryTable/configTree/parser/index.js +124 -124
  116. package/src/components/Business/JsonQueryTable/configTree/render/iconRender.js +29 -29
  117. package/src/components/Business/JsonQueryTable/configTree/render/nameRender.js +22 -22
  118. package/src/components/Business/JsonQueryTable/configTree/treeNode.js +116 -116
  119. package/src/components/Business/JsonQueryTable/drawer/index.tsx +12 -12
  120. package/src/components/Business/JsonQueryTable/function.ts +62 -62
  121. package/src/components/Business/JsonQueryTable/index.less +16 -16
  122. package/src/components/Business/JsonQueryTable/index.md +328 -328
  123. package/src/components/Business/JsonQueryTable/index.tsx +535 -535
  124. package/src/components/Business/JsonQueryTable/jsonEditor/index.js +346 -346
  125. package/src/components/Business/JsonQueryTable/jsonEditor/index.less +22 -22
  126. package/src/components/Business/JsonQueryTable/jsonEditor/lint/basicType.js +147 -147
  127. package/src/components/Business/JsonQueryTable/jsonEditor/lint/index.js +389 -389
  128. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/actions.js +118 -118
  129. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/dependency.js +22 -22
  130. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/index.js +21 -21
  131. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/request.js +65 -65
  132. package/src/components/Business/JsonQueryTable/static.ts +407 -390
  133. package/src/components/Business/SearchSelect/BusinessUtils.ts +1762 -1762
  134. package/src/components/Business/SearchSelect/common.ts +75 -75
  135. package/src/components/Business/SearchSelect/index.md +1329 -1329
  136. package/src/components/Business/SearchSelect/index.tsx +55 -55
  137. package/src/components/Business/SearchSelect/utils.ts +100 -100
  138. package/src/components/Business/StateFlow/index.less +130 -130
  139. package/src/components/Business/StateFlow/index.md +60 -60
  140. package/src/components/Business/StateFlow/index.tsx +29 -29
  141. package/src/components/Business/TreeSearchSelect/index.md +185 -156
  142. package/src/components/Business/TreeSearchSelect/index.tsx +33 -33
  143. package/src/components/Business/TreeSearchSelect/utils.ts +86 -75
  144. package/src/components/Business/columnSettingTable/columnSetting.tsx +764 -764
  145. package/src/components/Business/columnSettingTable/index.less +247 -247
  146. package/src/components/Business/columnSettingTable/index.md +357 -357
  147. package/src/components/Business/columnSettingTable/index.tsx +232 -232
  148. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +240 -240
  149. package/src/components/Business/columnSettingTable/utils.tsx +71 -69
  150. package/src/components/Business/moreTreeTable/FixedScrollBar.tsx +87 -87
  151. package/src/components/Business/moreTreeTable/hooks/useSticky.ts +21 -21
  152. package/src/components/Business/moreTreeTable/index.less +99 -99
  153. package/src/components/Business/moreTreeTable/index.md +448 -448
  154. package/src/components/Business/moreTreeTable/index.tsx +387 -387
  155. package/src/components/Business/moreTreeTable/utils.ts +126 -126
  156. package/src/components/Functional/AddSelect/helps.ts +79 -14
  157. package/src/components/Functional/AddSelect/index.less +367 -367
  158. package/src/components/Functional/AddSelect/index.md +155 -155
  159. package/src/components/Functional/AddSelect/index.tsx +1170 -1282
  160. package/src/components/Functional/BillEntry/index.less +371 -371
  161. package/src/components/Functional/BillEntry/index.md +39 -39
  162. package/src/components/Functional/BillEntry/index.tsx +772 -772
  163. package/src/components/Functional/BsAntdSula/BsCascader/index.md +62 -62
  164. package/src/components/Functional/BsAntdSula/BsCascader/index.tsx +178 -178
  165. package/src/components/Functional/BsAntdSula/index.ts +2 -2
  166. package/src/components/Functional/DataImport/index.less +63 -63
  167. package/src/components/Functional/DataImport/index.md +44 -44
  168. package/src/components/Functional/DataImport/index.tsx +695 -695
  169. package/src/components/Functional/DataValidation/index.less +63 -63
  170. package/src/components/Functional/DataValidation/index.md +39 -39
  171. package/src/components/Functional/DataValidation/index.tsx +687 -687
  172. package/src/components/Functional/EllipsisTooltip/index.d.ts +5 -5
  173. package/src/components/Functional/EllipsisTooltip/index.js +36 -36
  174. package/src/components/Functional/EllipsisTooltip/index.md +30 -30
  175. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  176. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +59 -59
  177. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  178. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  179. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  180. package/src/components/Functional/SearchSelect/index.less +115 -115
  181. package/src/components/Functional/SearchSelect/index.md +141 -141
  182. package/src/components/Functional/SearchSelect/index.tsx +879 -879
  183. package/src/components/Functional/SearchSelect/utils.ts +3 -3
  184. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  185. package/src/components/Functional/TreeSearchSelect/index.tsx +199 -199
  186. package/src/components/Solution/RuleComponent/Formula.tsx +335 -335
  187. package/src/components/Solution/RuleComponent/InnerSelect.tsx +62 -0
  188. package/src/components/Solution/RuleComponent/index.d.ts +29 -29
  189. package/src/components/Solution/RuleComponent/index.js +2041 -2032
  190. package/src/components/Solution/RuleComponent/index.less +230 -230
  191. package/src/components/Solution/RuleComponent/renderSpecificAction.js +99 -99
  192. package/src/components/Solution/RuleComponent/ruleFiled.js +2175 -2107
  193. package/src/components/Solution/RuleComponent/services.ts +13 -13
  194. package/src/components/Solution/RuleComponent/util.js +139 -139
  195. package/src/index.ts +38 -38
  196. package/src/plugin/TableColumnSetting/index.less +247 -247
  197. package/src/plugin/TableColumnSetting/index.md +50 -50
  198. package/src/plugin/TableColumnSetting/index.tsx +724 -724
  199. package/src/plugin/TableColumnSetting/utils.ts +19 -19
  200. package/src/styles/bsDefault.less +1912 -1912
  201. package/src/utils/CheckOneUser/index.md +39 -39
  202. package/src/utils/CheckOneUser/index.ts +51 -51
  203. package/src/utils/LocalstorageUtils.ts +95 -95
  204. package/src/utils/TableUtils.tsx +18 -18
  205. package/src/utils/checkUtils.ts +39 -39
  206. package/src/utils/enumConfig.ts +11 -11
  207. package/src/utils/getFormMode.js +12 -12
  208. package/src/utils/index.ts +4 -4
  209. package/src/utils/requestUtils.ts +34 -34
  210. package/src/utils/serialize.js +7 -7
  211. package/src/utils/utils.ts +212 -212
  212. package/tsconfig.json +29 -29
  213. package/typings.d.ts +4 -4
@@ -1,3 +1,3 @@
1
- export const handleSourceName = (sName: any) => {
2
- return sName
3
- }
1
+ export const handleSourceName = (sName: any) => {
2
+ return sName
3
+ }
@@ -1,47 +1,47 @@
1
- ---
2
- nav:
3
- title: '组件'
4
- order: 1
5
- group:
6
- title: 功能组件
7
- order: 0
8
- title: 树型选择器
9
- order: 4
10
- ---
11
-
12
- ## TreeSearchSelect
13
-
14
- 部门选择器Demo:
15
-
16
- ```tsx
17
- import React, { useState } from 'react';
18
- import { TreeSearchSelect } from '../../../index';
19
-
20
- export default () => {
21
-
22
- const [value, setValue] = useState();
23
-
24
- const props = {
25
- mode: 'create',
26
- remoteSource: {
27
- url: `/user/orgViewNode/common/getTreeForOrgViewAndTenant`,
28
- initialParams: { 'orgViewCode': 'administrative-organization-view' },
29
- resKeyValue: ['code', 'name'],
30
- },
31
- value,
32
- isChoose: false, // 控制是否父节点可选中,默认不可选中
33
- treeCheckable: true,
34
- onChange: (v) => {
35
- setValue(v)
36
- }
37
- };
38
-
39
- return (
40
- <div>
41
- <TreeSearchSelect {...props} />
42
- </div>
43
- );
44
- };
45
- ```
46
-
47
- More skills for writing demo: https://d.umijs.org/guide/demo-principle
1
+ ---
2
+ nav:
3
+ title: '组件'
4
+ order: 1
5
+ group:
6
+ title: 功能组件
7
+ order: 0
8
+ title: 树型选择器
9
+ order: 4
10
+ ---
11
+
12
+ ## TreeSearchSelect
13
+
14
+ 部门选择器Demo:
15
+
16
+ ```tsx
17
+ import React, { useState } from 'react';
18
+ import { TreeSearchSelect } from '../../../index';
19
+
20
+ export default () => {
21
+
22
+ const [value, setValue] = useState();
23
+
24
+ const props = {
25
+ mode: 'create',
26
+ remoteSource: {
27
+ url: `/user/orgViewNode/common/getTreeForOrgViewAndTenant`,
28
+ initialParams: { 'orgViewCode': 'administrative-organization-view' },
29
+ resKeyValue: ['code', 'name'],
30
+ },
31
+ value,
32
+ isChoose: false, // 控制是否父节点可选中,默认不可选中
33
+ treeCheckable: true,
34
+ onChange: (v) => {
35
+ setValue(v)
36
+ }
37
+ };
38
+
39
+ return (
40
+ <div>
41
+ <TreeSearchSelect {...props} />
42
+ </div>
43
+ );
44
+ };
45
+ ```
46
+
47
+ More skills for writing demo: https://d.umijs.org/guide/demo-principle
@@ -1,199 +1,199 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { TreeSelect, Tooltip, Tag } from 'antd';
3
- import axios from 'axios';
4
- import { stringify } from 'querystring';
5
- import _ from "lodash"
6
-
7
- const TreeSearchSelect = (props: any) => {
8
- const [treeData, setTreeData] = useState([]);
9
- const {
10
- ctx, // ctx中有自己的name
11
- value,
12
- valueName, // 当labelInValue为true时,值为null
13
- onChange,
14
- onChangeName, // 当labelInValue为true时,此函数无意义,故无需传
15
- placeholder,
16
- remoteSource,
17
- initialValue,
18
- treeCheckable = false,
19
- showSearch = true,
20
- maxTagCount = 1,
21
- multiple = false,
22
- isChoose = false, // 默认父节点不可选;传true则不限制
23
- rootDisabled = false, // 默认根节点可选
24
- mode,
25
- getPopupContainer,
26
- labelInValue = false,
27
- showArrow = true,
28
- allowClear = true,
29
- showCheckedStrategy = props?.treeCheckStrictly ? TreeSelect.SHOW_ALL : TreeSelect.SHOW_PARENT,
30
- style = { width: '100%' },
31
- getTreeData,
32
- disabled,
33
- ...restProps
34
- } = props;
35
-
36
- const {
37
- url,
38
- headers,
39
- paramsKey = 'qp-name-like',
40
- resKeyValue = ['id', 'name'],
41
- initialParams = {},
42
- } = remoteSource;
43
-
44
- const mapSearchTree = (treeDataItem: any) => {
45
- const haveChildren = Array.isArray(treeDataItem.children) && treeDataItem.children.length > 0; // 盘算是否为父节点
46
- const isRoot = treeDataItem?.id == '0'; // 判断是否为根节点
47
- return {
48
- title: treeDataItem[resKeyValue[1]],
49
- key: treeDataItem[resKeyValue[0]],
50
- value: treeDataItem[resKeyValue[0]],
51
- parentId: treeDataItem.parent,
52
- data: { ...treeDataItem },
53
- isLeaf: !haveChildren,
54
- disabled: isDisabled(haveChildren,isRoot),
55
- children: haveChildren ? treeDataItem.children.map((i: any) => mapSearchTree(i)) : [],
56
- };
57
- };
58
-
59
- const isDisabled = (isParent: boolean,isRoot: boolean) => {
60
- if (isChoose) {
61
- if(rootDisabled && isRoot){
62
- return rootDisabled
63
- }
64
- return false;
65
- }
66
- return isParent;
67
- }
68
-
69
- /* 实时查询 但是目前用的直接是完整数据源, 所以没有使用 */
70
- const handleSearch = (q: string) => {
71
- const paramsData = {
72
- [`${paramsKey}`]: q,
73
- ...initialParams,
74
- }
75
- axios.get(`${url}?${stringify(paramsData)}`, {headers}).then(async (res: any) => {
76
- const resData = res?.data || [];
77
- let coverData;
78
-
79
- if(resData.status === '0' || resData.code === '000000') {
80
- const { data } = resData;
81
- if (remoteSource.converter) {
82
- coverData = await remoteSource.converter({ data: [data] })
83
- } else {
84
- const dataList = (data && Array.isArray(data)) ? data : (data && [data] || []);
85
- coverData = dataList.length && dataList.map((ites: any) => mapSearchTree(ites)) || [];
86
- }
87
- } else {
88
- coverData = []
89
- }
90
-
91
- setTreeData(coverData);
92
- ctx?.form?.setFieldSource(ctx.name, coverData);
93
- });
94
- };
95
-
96
- const formatData = (value: any) => {
97
- if (labelInValue) {
98
- const formatResult = multiple||treeCheckable ? value.map((i: any) => ({...i, key: i.value})) : { ...value, key: value?.value };
99
- return formatResult
100
- } else {
101
- const formatResult = multiple||treeCheckable ? value.map((i: any) => (i?.value || i)) : (_.get(value?.[0], 'value') || value)
102
- return formatResult
103
- }
104
- }
105
- const parallelData = (data: any,result: any) => {
106
- data.forEach((i: any) => {
107
- result.push(i);
108
- if (i.children) {
109
- parallelData(i.children, result);
110
- }
111
- });
112
- return result;
113
- }
114
- const getSelectItem = (tData: any,selectValue: any) => {
115
- const handleList = tData||[];
116
- let result = [];
117
- if(labelInValue) {
118
- result = multiple||treeCheckable ? (selectValue?.map((i: any) => {
119
- if(handleList.some((s: any) => s.key == i.value)){
120
- return handleList.find((s: any) => s.key == i.value)
121
- }
122
- }) || []) : (handleList?.find((s: any) => s.key == selectValue?.value)||{})
123
- } else {
124
- const cValue = _.get(selectValue?.[0], 'value', selectValue);
125
- result = multiple||treeCheckable ? (selectValue?.map((i: any) => {
126
- if(handleList.some((s: any) => s.key == i)){
127
- return handleList.find((s: any) => s.key == i)
128
- }
129
- }) || []) : (handleList?.find((s: any) => s.key == cValue)||{})
130
- }
131
- return result;
132
- }
133
- const handleChange = (data: any, dataName: any) => {
134
- const handleData = formatData(data);
135
- // 获取选中树节点当条数据,并返回给调用业务
136
- const parallelTreeData = parallelData(treeData,[])
137
- const currentItem = getSelectItem(parallelTreeData,data)
138
- onChange(handleData,data,currentItem,parallelTreeData);
139
- onChangeName && onChangeName(dataName);
140
- getTreeData && getTreeData(treeData); // 把树节点暴露出去
141
- ctx?.form?.setFieldValue(ctx.name, handleData);
142
- };
143
-
144
- useEffect(() => {
145
- handleSearch(initialValue);
146
- }, []);
147
-
148
- const maxTagPlaceholder = (selectedValues: any) => {
149
- const onClose = (e: any,item: any) => {
150
- e.preventDefault();
151
- 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)
152
- const newValueName = labelInValue ? null: JSON.parse(JSON.stringify(valueName)).filter((i: any) => i !== item.label)
153
- handleChange(newValue, newValueName);
154
- }
155
- return (
156
- <Tooltip title={selectedValues.map((i: any) => (
157
- <Tag
158
- closable={true}
159
- onClose={(e) => onClose(e,i)}
160
- style={{ marginRight: 3, background: '#f5f5f5', height: '24px', border: '1px solid #f0f0f0' }}
161
- >
162
- {i.label}
163
- </Tag>
164
- ))}>
165
- {`+ ${selectedValues?.length}`}
166
- </Tooltip>
167
- )
168
- }
169
-
170
- return (
171
- <div className={'tree_search_select'}>
172
- <TreeSelect
173
- {...restProps}
174
- treeCheckable={treeCheckable}
175
- maxTagCount={maxTagCount}
176
- showSearch={showSearch}
177
- style={style}
178
- value={value}
179
- dropdownStyle={{ maxHeight: 400, maxWidth: 100, overflow: 'auto' }}
180
- treeData={treeData}
181
- placeholder={placeholder}
182
- allowClear={allowClear}
183
- labelInValue={labelInValue}
184
- showArrow={showArrow}
185
- showCheckedStrategy={showCheckedStrategy}
186
- treeNodeFilterProp={'title'}
187
- treeDefaultExpandAll
188
- multiple={multiple} // 支持多选(当设置 treeCheckable 时自动变为 true)
189
- maxTagPlaceholder={maxTagPlaceholder}
190
- onChange={handleChange}
191
- disabled={disabled || mode==='view' || ctx?.mode === 'view'}
192
- getPopupContainer={(triggerNode) => (getPopupContainer && getPopupContainer(triggerNode)) || document.body}
193
- >
194
- </TreeSelect>
195
- </div>
196
- );
197
- };
198
-
199
- export default TreeSearchSelect;
1
+ import React, { useState, useEffect } from 'react';
2
+ import { TreeSelect, Tooltip, Tag } from 'antd';
3
+ import axios from 'axios';
4
+ import { stringify } from 'querystring';
5
+ import _ from "lodash"
6
+
7
+ const TreeSearchSelect = (props: any) => {
8
+ const [treeData, setTreeData] = useState([]);
9
+ const {
10
+ ctx, // ctx中有自己的name
11
+ value,
12
+ valueName, // 当labelInValue为true时,值为null
13
+ onChange,
14
+ onChangeName, // 当labelInValue为true时,此函数无意义,故无需传
15
+ placeholder,
16
+ remoteSource,
17
+ initialValue,
18
+ treeCheckable = false,
19
+ showSearch = true,
20
+ maxTagCount = 1,
21
+ multiple = false,
22
+ isChoose = false, // 默认父节点不可选;传true则不限制
23
+ rootDisabled = false, // 默认根节点可选
24
+ mode,
25
+ getPopupContainer,
26
+ labelInValue = false,
27
+ showArrow = true,
28
+ allowClear = true,
29
+ showCheckedStrategy = props?.treeCheckStrictly ? TreeSelect.SHOW_ALL : TreeSelect.SHOW_PARENT,
30
+ style = { width: '100%' },
31
+ getTreeData,
32
+ disabled,
33
+ ...restProps
34
+ } = props;
35
+
36
+ const {
37
+ url,
38
+ headers,
39
+ paramsKey = 'qp-name-like',
40
+ resKeyValue = ['id', 'name'],
41
+ initialParams = {},
42
+ } = remoteSource;
43
+
44
+ const mapSearchTree = (treeDataItem: any) => {
45
+ const haveChildren = Array.isArray(treeDataItem.children) && treeDataItem.children.length > 0; // 盘算是否为父节点
46
+ const isRoot = treeDataItem?.id == '0'; // 判断是否为根节点
47
+ return {
48
+ title: treeDataItem[resKeyValue[1]],
49
+ key: treeDataItem[resKeyValue[0]],
50
+ value: treeDataItem[resKeyValue[0]],
51
+ parentId: treeDataItem.parent,
52
+ data: { ...treeDataItem },
53
+ isLeaf: !haveChildren,
54
+ disabled: isDisabled(haveChildren,isRoot),
55
+ children: haveChildren ? treeDataItem.children.map((i: any) => mapSearchTree(i)) : [],
56
+ };
57
+ };
58
+
59
+ const isDisabled = (isParent: boolean,isRoot: boolean) => {
60
+ if (isChoose) {
61
+ if(rootDisabled && isRoot){
62
+ return rootDisabled
63
+ }
64
+ return false;
65
+ }
66
+ return isParent;
67
+ }
68
+
69
+ /* 实时查询 但是目前用的直接是完整数据源, 所以没有使用 */
70
+ const handleSearch = (q: string) => {
71
+ const paramsData = {
72
+ [`${paramsKey}`]: q,
73
+ ...initialParams,
74
+ }
75
+ axios.get(`${url}?${stringify(paramsData)}`, {headers}).then(async (res: any) => {
76
+ const resData = res?.data || [];
77
+ let coverData;
78
+
79
+ if(resData.status === '0' || resData.code === '000000') {
80
+ const { data } = resData;
81
+ if (remoteSource.converter) {
82
+ coverData = await remoteSource.converter({ data: [data] })
83
+ } else {
84
+ const dataList = (data && Array.isArray(data)) ? data : (data && [data] || []);
85
+ coverData = dataList.length && dataList.map((ites: any) => mapSearchTree(ites)) || [];
86
+ }
87
+ } else {
88
+ coverData = []
89
+ }
90
+
91
+ setTreeData(coverData);
92
+ ctx?.form?.setFieldSource(ctx.name, coverData);
93
+ });
94
+ };
95
+
96
+ const formatData = (value: any) => {
97
+ if (labelInValue) {
98
+ const formatResult = multiple||treeCheckable ? value.map((i: any) => ({...i, key: i.value})) : { ...value, key: value?.value };
99
+ return formatResult
100
+ } else {
101
+ const formatResult = multiple||treeCheckable ? value.map((i: any) => (i?.value || i)) : (_.get(value?.[0], 'value') || value)
102
+ return formatResult
103
+ }
104
+ }
105
+ const parallelData = (data: any,result: any) => {
106
+ data.forEach((i: any) => {
107
+ result.push(i);
108
+ if (i.children) {
109
+ parallelData(i.children, result);
110
+ }
111
+ });
112
+ return result;
113
+ }
114
+ const getSelectItem = (tData: any,selectValue: any) => {
115
+ const handleList = tData||[];
116
+ let result = [];
117
+ if(labelInValue) {
118
+ result = multiple||treeCheckable ? (selectValue?.map((i: any) => {
119
+ if(handleList.some((s: any) => s.key == i.value)){
120
+ return handleList.find((s: any) => s.key == i.value)
121
+ }
122
+ }) || []) : (handleList?.find((s: any) => s.key == selectValue?.value)||{})
123
+ } else {
124
+ const cValue = _.get(selectValue?.[0], 'value', selectValue);
125
+ result = multiple||treeCheckable ? (selectValue?.map((i: any) => {
126
+ if(handleList.some((s: any) => s.key == i)){
127
+ return handleList.find((s: any) => s.key == i)
128
+ }
129
+ }) || []) : (handleList?.find((s: any) => s.key == cValue)||{})
130
+ }
131
+ return result;
132
+ }
133
+ const handleChange = (data: any, dataName: any) => {
134
+ const handleData = formatData(data);
135
+ // 获取选中树节点当条数据,并返回给调用业务
136
+ const parallelTreeData = parallelData(treeData,[])
137
+ const currentItem = getSelectItem(parallelTreeData,data)
138
+ onChange(handleData,data,currentItem,parallelTreeData);
139
+ onChangeName && onChangeName(dataName);
140
+ getTreeData && getTreeData(treeData); // 把树节点暴露出去
141
+ ctx?.form?.setFieldValue(ctx.name, handleData);
142
+ };
143
+
144
+ useEffect(() => {
145
+ handleSearch(initialValue);
146
+ }, []);
147
+
148
+ const maxTagPlaceholder = (selectedValues: any) => {
149
+ const onClose = (e: any,item: any) => {
150
+ e.preventDefault();
151
+ 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)
152
+ const newValueName = labelInValue ? null: JSON.parse(JSON.stringify(valueName)).filter((i: any) => i !== item.label)
153
+ handleChange(newValue, newValueName);
154
+ }
155
+ return (
156
+ <Tooltip title={selectedValues.map((i: any) => (
157
+ <Tag
158
+ closable={true}
159
+ onClose={(e) => onClose(e,i)}
160
+ style={{ marginRight: 3, background: '#f5f5f5', height: '24px', border: '1px solid #f0f0f0' }}
161
+ >
162
+ {i.label}
163
+ </Tag>
164
+ ))}>
165
+ {`+ ${selectedValues?.length}`}
166
+ </Tooltip>
167
+ )
168
+ }
169
+
170
+ return (
171
+ <div className={'tree_search_select'}>
172
+ <TreeSelect
173
+ {...restProps}
174
+ treeCheckable={treeCheckable}
175
+ maxTagCount={maxTagCount}
176
+ showSearch={showSearch}
177
+ style={style}
178
+ value={value}
179
+ dropdownStyle={{ maxHeight: 400, maxWidth: 100, overflow: 'auto' }}
180
+ treeData={treeData}
181
+ placeholder={placeholder}
182
+ allowClear={allowClear}
183
+ labelInValue={labelInValue}
184
+ showArrow={showArrow}
185
+ showCheckedStrategy={showCheckedStrategy}
186
+ treeNodeFilterProp={'title'}
187
+ treeDefaultExpandAll
188
+ multiple={multiple} // 支持多选(当设置 treeCheckable 时自动变为 true)
189
+ maxTagPlaceholder={maxTagPlaceholder}
190
+ onChange={handleChange}
191
+ disabled={disabled || mode==='view' || ctx?.mode === 'view'}
192
+ getPopupContainer={(triggerNode) => (getPopupContainer && getPopupContainer(triggerNode)) || document.body}
193
+ >
194
+ </TreeSelect>
195
+ </div>
196
+ );
197
+ };
198
+
199
+ export default TreeSearchSelect;