@bit-sun/business-component 2.1.23 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) 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/RightContent/index.d.ts +2 -2
  11. package/dist/components/Business/BsLayouts/Components/SearchFunc/index.d.ts +2 -2
  12. package/dist/components/Business/BsLayouts/index.d.ts +2 -2
  13. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +2 -2
  14. package/dist/components/Business/JsonQueryTable/components/FieldsModifyModal.d.ts +2 -0
  15. package/dist/components/Business/JsonQueryTable/components/FieldsSettingsTable.d.ts +2 -0
  16. package/dist/components/Business/JsonQueryTable/components/Formula.d.ts +6 -0
  17. package/dist/components/Business/JsonQueryTable/components/MaintainOptions.d.ts +2 -0
  18. package/dist/components/Business/JsonQueryTable/drawer/index.d.ts +2 -0
  19. package/dist/components/Business/JsonQueryTable/function.d.ts +37 -0
  20. package/dist/components/Business/JsonQueryTable/index.d.ts +4 -0
  21. package/dist/components/Business/JsonQueryTable/static.d.ts +39 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.esm.js +11841 -1245
  24. package/dist/index.js +11838 -1237
  25. package/dist/utils/TableUtils.d.ts +2 -2
  26. package/dist/utils/utils.d.ts +3 -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 +77 -71
  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/components/Business/AddSelectBusiness/index.md +42 -42
  62. package/src/components/Business/AddSelectBusiness/index.tsx +341 -341
  63. package/src/components/Business/BsLayouts/Components/AllFunc/drawContent.tsx +111 -111
  64. package/src/components/Business/BsLayouts/Components/AllFunc/index.less +153 -153
  65. package/src/components/Business/BsLayouts/Components/AllFunc/index.tsx +70 -70
  66. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.less +90 -90
  67. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.tsx +37 -37
  68. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.tsx +242 -242
  69. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.tsx +384 -384
  70. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.tsx +285 -285
  71. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.tsx +74 -74
  72. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/drawContent.less +170 -170
  73. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.less +64 -64
  74. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.tsx +153 -153
  75. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.less +72 -72
  76. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.tsx +157 -157
  77. package/src/components/Business/BsLayouts/Components/RightContent/LoginModal.tsx +85 -85
  78. package/src/components/Business/BsLayouts/Components/RightContent/home.less +218 -218
  79. package/src/components/Business/BsLayouts/Components/RightContent/index.tsx +156 -156
  80. package/src/components/Business/BsLayouts/Components/SearchFunc/index.less +160 -160
  81. package/src/components/Business/BsLayouts/Components/SearchFunc/index.tsx +75 -75
  82. package/src/components/Business/BsLayouts/index.less +79 -79
  83. package/src/components/Business/BsLayouts/index.tsx +1479 -1479
  84. package/src/components/Business/BsLayouts/service.ts +10 -10
  85. package/src/components/Business/BsLayouts/utils.tsx +230 -230
  86. package/src/components/Business/BsSulaQueryTable/index.less +219 -219
  87. package/src/components/Business/BsSulaQueryTable/index.tsx +476 -476
  88. package/src/components/Business/BsSulaQueryTable/setting.tsx +802 -802
  89. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  90. package/src/components/Business/BsSulaQueryTable/utils.tsx +688 -688
  91. package/src/components/Business/CommodityEntry/index.md +70 -70
  92. package/src/components/Business/CommodityEntry/index.tsx +80 -80
  93. package/src/components/Business/CommonAlert/index.tsx +23 -23
  94. package/src/components/Business/CommonGuideWrapper/index.less +111 -111
  95. package/src/components/Business/CommonGuideWrapper/index.md +39 -39
  96. package/src/components/Business/CommonGuideWrapper/index.tsx +83 -83
  97. package/src/components/Business/DetailPageWrapper/index.less +79 -79
  98. package/src/components/Business/DetailPageWrapper/index.tsx +335 -335
  99. package/src/components/Business/DetailPageWrapper/utils.tsx +100 -100
  100. package/src/components/Business/HomePageWrapper/index.less +33 -33
  101. package/src/components/Business/HomePageWrapper/index.md +45 -45
  102. package/src/components/Business/HomePageWrapper/index.tsx +162 -162
  103. package/src/components/Business/JsonQueryTable/components/FieldsModifyModal.tsx +824 -0
  104. package/src/components/Business/JsonQueryTable/components/FieldsSettingsTable.tsx +202 -0
  105. package/src/components/Business/JsonQueryTable/components/Formula.tsx +205 -0
  106. package/src/components/Business/JsonQueryTable/components/MaintainOptions.tsx +127 -0
  107. package/src/components/Business/JsonQueryTable/configButton/index.js +20 -0
  108. package/src/components/Business/JsonQueryTable/configTree/component/compactArrayView.js +25 -0
  109. package/src/components/Business/JsonQueryTable/configTree/component/compactObjectView.js +30 -0
  110. package/src/components/Business/JsonQueryTable/configTree/index.js +82 -0
  111. package/src/components/Business/JsonQueryTable/configTree/index.less +44 -0
  112. package/src/components/Business/JsonQueryTable/configTree/parser/highlight.js +57 -0
  113. package/src/components/Business/JsonQueryTable/configTree/parser/index.js +124 -0
  114. package/src/components/Business/JsonQueryTable/configTree/render/iconRender.js +29 -0
  115. package/src/components/Business/JsonQueryTable/configTree/render/nameRender.js +22 -0
  116. package/src/components/Business/JsonQueryTable/configTree/treeNode.js +116 -0
  117. package/src/components/Business/JsonQueryTable/drawer/index.tsx +12 -0
  118. package/src/components/Business/JsonQueryTable/function.ts +62 -0
  119. package/src/components/Business/JsonQueryTable/index.less +17 -0
  120. package/src/components/Business/JsonQueryTable/index.md +328 -0
  121. package/src/components/Business/JsonQueryTable/index.tsx +320 -0
  122. package/src/components/Business/JsonQueryTable/jsonEditor/index.js +346 -0
  123. package/src/components/Business/JsonQueryTable/jsonEditor/index.less +22 -0
  124. package/src/components/Business/JsonQueryTable/jsonEditor/lint/basicType.js +147 -0
  125. package/src/components/Business/JsonQueryTable/jsonEditor/lint/index.js +389 -0
  126. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/actions.js +118 -0
  127. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/dependency.js +22 -0
  128. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/index.js +21 -0
  129. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/request.js +65 -0
  130. package/src/components/Business/JsonQueryTable/static.ts +356 -0
  131. package/src/components/Business/SearchSelect/BusinessUtils.ts +1586 -1586
  132. package/src/components/Business/SearchSelect/common.ts +53 -53
  133. package/src/components/Business/SearchSelect/index.md +1254 -1254
  134. package/src/components/Business/SearchSelect/index.tsx +51 -51
  135. package/src/components/Business/SearchSelect/utils.ts +100 -100
  136. package/src/components/Business/StateFlow/index.less +130 -130
  137. package/src/components/Business/StateFlow/index.md +60 -60
  138. package/src/components/Business/StateFlow/index.tsx +29 -29
  139. package/src/components/Business/TreeSearchSelect/index.md +126 -126
  140. package/src/components/Business/TreeSearchSelect/index.tsx +34 -34
  141. package/src/components/Business/TreeSearchSelect/utils.ts +60 -60
  142. package/src/components/Business/columnSettingTable/columnSetting.tsx +764 -764
  143. package/src/components/Business/columnSettingTable/index.less +247 -247
  144. package/src/components/Business/columnSettingTable/index.md +357 -357
  145. package/src/components/Business/columnSettingTable/index.tsx +232 -232
  146. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +240 -240
  147. package/src/components/Business/columnSettingTable/utils.tsx +68 -68
  148. package/src/components/Business/moreTreeTable/index.less +99 -99
  149. package/src/components/Business/moreTreeTable/index.md +508 -508
  150. package/src/components/Business/moreTreeTable/index.tsx +315 -315
  151. package/src/components/Business/moreTreeTable/utils.ts +126 -126
  152. package/src/components/Functional/AddSelect/index.less +367 -367
  153. package/src/components/Functional/AddSelect/index.md +154 -154
  154. package/src/components/Functional/AddSelect/index.tsx +994 -994
  155. package/src/components/Functional/BillEntry/index.less +371 -371
  156. package/src/components/Functional/BillEntry/index.md +39 -39
  157. package/src/components/Functional/BillEntry/index.tsx +670 -671
  158. package/src/components/Functional/DataImport/index.less +63 -63
  159. package/src/components/Functional/DataImport/index.md +44 -44
  160. package/src/components/Functional/DataImport/index.tsx +695 -695
  161. package/src/components/Functional/DataValidation/index.less +63 -63
  162. package/src/components/Functional/DataValidation/index.md +39 -39
  163. package/src/components/Functional/DataValidation/index.tsx +687 -687
  164. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  165. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +59 -59
  166. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  167. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  168. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  169. package/src/components/Functional/SearchSelect/index.less +115 -115
  170. package/src/components/Functional/SearchSelect/index.md +141 -141
  171. package/src/components/Functional/SearchSelect/index.tsx +813 -813
  172. package/src/components/Functional/SearchSelect/utils.ts +3 -6
  173. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  174. package/src/components/Functional/TreeSearchSelect/index.tsx +149 -149
  175. package/src/index.ts +34 -32
  176. package/src/styles/bsDefault.less +1906 -1906
  177. package/src/utils/CheckOneUser/index.md +39 -39
  178. package/src/utils/CheckOneUser/index.ts +51 -51
  179. package/src/utils/TableUtils.tsx +18 -18
  180. package/src/utils/checkUtils.ts +39 -39
  181. package/src/utils/enumConfig.ts +10 -10
  182. package/src/utils/getFormMode.js +12 -0
  183. package/src/utils/index.ts +2 -2
  184. package/src/utils/requestUtils.ts +33 -33
  185. package/src/utils/serialize.js +7 -0
  186. package/src/utils/utils.ts +182 -142
  187. package/tsconfig.json +29 -29
  188. package/typings.d.ts +4 -4
@@ -0,0 +1,202 @@
1
+ import React, { useRef, useState } from 'react';
2
+ import BsSulaQueryTable from './../../BsSulaQueryTable';
3
+ import FieldsModifyModal from './FieldsModifyModal';
4
+ import { inputType, choiceType, valueType } from "./../static"
5
+ import _ from 'lodash';
6
+
7
+ // @ts-nocheck
8
+ export default (props:any)=>{
9
+ const {
10
+ businessType,
11
+ fieldGroup='',
12
+ codeProps='',
13
+ moduleType,
14
+ moduleRelationId,
15
+ } = props;
16
+
17
+ const ref = useRef(null);
18
+ const [fieldsModify, setFieldsModify] = useState({
19
+ visible: false,
20
+ inputType,
21
+ choiceType,
22
+ valueType,
23
+ title: '',
24
+ lineDetail:{},
25
+ mode: 'create',
26
+ record: {},
27
+ onParentOk: () => {
28
+ // @ts-ignore
29
+ ref?.current?.tableRef?.current?.refreshTable();
30
+ fieldsModify.onCancel();
31
+ },
32
+ onCancel: () =>
33
+ setFieldsModify({
34
+ ...fieldsModify,
35
+ visible: false,
36
+ }),
37
+ });
38
+ const searchableFlag = codeProps?.columns?true:false; //列表只查询 查询项为是得自定义字段
39
+
40
+ const renderTrueOrFalse = [
41
+ {
42
+ type: 'text',
43
+ props: {
44
+ children: '#{text ? "是" : "否" }',
45
+ },
46
+ },
47
+ ];
48
+
49
+ const tableConfig = {
50
+ needPageHeader: false,
51
+ noConditionOpts: true,
52
+ remoteDataSource: {
53
+ url: `/basic/flow/businessField?sorter=asc-priority&qp-businessType-eq=${businessType}&qp-fieldGroup-eq=${fieldGroup}`+(searchableFlag?`&qp-searchableFlag-eq=true`:''),
54
+ convertParams: 'bs-tableConvertParamsType',
55
+ converter: 'bs-tableConvertType',
56
+ },
57
+ actionsRender: [
58
+ {
59
+ type: 'button',
60
+ props: {
61
+ children: '新增',
62
+ type: 'primary',
63
+ },
64
+ action: () => {
65
+ setFieldsModify({
66
+ ...fieldsModify,
67
+ visible: true,
68
+ record: {
69
+ fieldGroup,
70
+ businessType,
71
+ },
72
+ lineDetail: {},
73
+ mode: 'create',
74
+ title: `新增字段`,
75
+ });
76
+ }
77
+ },
78
+ ],
79
+ fields: [
80
+ {
81
+ name: 'qp-name-like',
82
+ label: '字段名称',
83
+ field: 'input',
84
+ },
85
+ ],
86
+ columns: [
87
+ {
88
+ key: 'code',
89
+ title: '字段编号',
90
+ width: 75
91
+ },
92
+ {
93
+ key: 'name',
94
+ title: '字段名称',
95
+ width: 100
96
+ },
97
+ {
98
+ key: 'code',
99
+ title: '是否使用',
100
+ width: 70,
101
+ render: ({text}:any) => {
102
+ const jsonEditorVal=localStorage.getItem('jsonEditorVal')||'';
103
+ console.log('jsonEditorVal',jsonEditorVal);
104
+ return jsonEditorVal.indexOf(text) >= 0 ? '是' : "否"
105
+ }
106
+ },
107
+ {
108
+ key: 'code',
109
+ title: '代码片段',
110
+ render: ({text,record}:any) => {
111
+ if (!codeProps.columns) {
112
+ return <div>表单:{`{"name": "extensionFields,${record.code}","label": "${record.name}"},`}</div>
113
+ }
114
+ return (
115
+ <>
116
+ <div>列表:{`{"key": "extensionFields,${record.code}","title": "${record.name}"},`}</div>
117
+ <div>表单:{`{"name": "extensionFields,${record.code}","label": "${record.name}"},`}</div>
118
+ </>
119
+ )
120
+ },
121
+ },
122
+ {
123
+ key: 'requiredFlag',
124
+ title: '是否必填',
125
+ render: renderTrueOrFalse,
126
+ width: 70
127
+ },
128
+ {
129
+ key: 'searchableFlag',
130
+ title: '是否查询项',
131
+ render: renderTrueOrFalse,
132
+ width: 80
133
+ },
134
+ {
135
+ key: 'inputType',
136
+ title: '显示类型',
137
+ render: ({ text }: any) => {
138
+ return inputType[text] || '- -'
139
+ } ,
140
+ width: 80
141
+ },
142
+ {
143
+ key: 'valueType',
144
+ title: '字段类型',
145
+ render: ({ text }: any) => valueType[text] || '- -',
146
+ width: 80
147
+ },
148
+ {
149
+ key: 'operation',
150
+ title: '操作',
151
+ render: [
152
+ {
153
+ type: 'link',
154
+ props: {
155
+ children: '编辑',
156
+ },
157
+ action: ({ record: rec }: any) => {
158
+ setFieldsModify({
159
+ ...fieldsModify,
160
+ visible: true,
161
+ mode: 'edit',
162
+ lineDetail: {
163
+ moduleType,
164
+ moduleRelationId
165
+ },
166
+ title: `编辑字段`,
167
+ record: rec,
168
+ });
169
+ },
170
+ },
171
+ {
172
+ type: 'link',
173
+ props: {
174
+ children: '删除',
175
+ danger: true,
176
+ },
177
+ action: [
178
+ {
179
+ url: `/basic/flow/businessField`,
180
+ method: 'DELETE',
181
+ data: {
182
+ id: '#{record.id}',
183
+ },
184
+ successMessage: '删除成功!',
185
+ },
186
+ 'refreshTable',
187
+ ],
188
+ },
189
+ ],
190
+ },
191
+ ],
192
+ size: "small",
193
+ tableCode: "customerFieldsTable"
194
+ };
195
+
196
+ return (
197
+ <>
198
+ <BsSulaQueryTable {...tableConfig} forwardedRef={ref} />
199
+ {fieldsModify.visible && <FieldsModifyModal {...fieldsModify} />}
200
+ </>
201
+ )
202
+ }
@@ -0,0 +1,205 @@
1
+ import { Button, Modal, Row, Col, Input } from 'antd';
2
+ import React, { useState, useEffect } from 'react';
3
+ import { CloseCircleOutlined } from '@ant-design/icons';
4
+ import {
5
+ SortableContainer,
6
+ SortableElement,
7
+ SortableHandle,
8
+ } from 'react-sortable-hoc';
9
+ import { arrayMoveImmutable } from 'array-move';
10
+ import { ModalForm, request } from 'bssula';
11
+
12
+
13
+ const App = ({
14
+ record,
15
+ setValue,
16
+ formula
17
+ }:{
18
+ record:any,
19
+ setValue:any,
20
+ formula:any,
21
+ }) => {
22
+ const [formul, setFormul] = useState(record.formula)
23
+ const [state, UpdateState]:any = useState([])
24
+ const [fieldList, UpdateFiedList] = useState([])
25
+
26
+ useEffect(() => {
27
+ request({
28
+ url: '/basic/flow/businessField/listNoPage',
29
+ params: {
30
+ 'qp-businessType-eq': record.businessType,
31
+ 'qp-fieldGroup-eq': record.fieldGroup,
32
+ },
33
+ converter: ({ response, data }:any) => {
34
+ if (response.code === '000000') {
35
+ // UpdateFiedList(data.filter(item => item.valueType == 20 || item.valueType == 21 || item.valueType == 22))
36
+ const resData = data.filter((item:any) => item.inputType != 40 && (item.valueType == 20 || item.valueType == 21 || item.valueType == 22)).map((item:any) => ({value: item.code, name: item.name}))
37
+ UpdateFiedList(resData)
38
+ let res:any = [];
39
+ formul && formul.replace(/(\w+|\+|\-|\*|\/|\(|\))/g, (item:any) => {
40
+ if (resData.filter((initem:any) => initem.value === item).length) {
41
+ res = res.concat(resData.filter((initem:any) => initem.value === item))
42
+ } else {
43
+ res = res.concat(['+', '-', '*', '/', '(', ')'].filter(initem => initem === item).map(item => ({value: item, name: item})))
44
+ }
45
+ })
46
+
47
+ UpdateState(res)
48
+ }
49
+ }
50
+ })
51
+ }, [])
52
+
53
+ const [isModalVisible, setIsModalVisible] = useState(false);
54
+
55
+ const showModal = () => {
56
+ setIsModalVisible(true);
57
+ };
58
+
59
+ const handleOk = () => {
60
+ setIsModalVisible(false);
61
+ setValue(state);
62
+ setFormul(state.map((item:any) => {
63
+ if (['+', '-', '*', '/', '(', ')'].indexOf(item.value) == -1) {
64
+ return `{${item.value}}`
65
+ }
66
+ return item.value;
67
+ }).join(''))
68
+ };
69
+
70
+ const handleCancel = () => {
71
+ setIsModalVisible(false);
72
+ };
73
+
74
+
75
+ const onSortEnd = ({ oldIndex, newIndex }:any) => {
76
+ UpdateState(arrayMoveImmutable(state, oldIndex, newIndex))
77
+ };
78
+
79
+ const deleteItem = (value:any, indexOrder:any) => {
80
+ UpdateState([].concat(state).filter((item, index) => index !== indexOrder))
81
+
82
+ }
83
+
84
+ const SortableItem = SortableElement(({ value, sortIndex }:any) => {
85
+ debugger
86
+ return <span style={{
87
+ // height: '100px',
88
+ padding: '5px 10px',
89
+ margin: '10px',
90
+ height: '40px',
91
+ lineHeight: '30px',
92
+ flexBasis: '1',
93
+ border: '1px solid #e8eaee',
94
+ borderRadius: '5px',
95
+ cursor: 'pointer',
96
+ }}>{value} &nbsp; <CloseCircleOutlined onClick={(e) => {
97
+ deleteItem(value, sortIndex)
98
+ }} /></span>
99
+ });
100
+
101
+ const SortableList = SortableContainer(({ items }:any) => {
102
+ return (
103
+ <div style={{ display: 'flex', flexWrap: 'wrap' }}>
104
+ {items.map((value:any, index:any) => (
105
+ <>
106
+ {/* @ts-ignore */}
107
+ <SortableItem key={`item-${value.value}`} sortIndex={index} index={index} value={value.name} />
108
+ </>
109
+ ))}
110
+ </div>
111
+ );
112
+ });
113
+
114
+ const add = ((item:any) => {
115
+ UpdateState([...state, item])
116
+ })
117
+
118
+ const formatFormul = () => {
119
+ if (!fieldList.length || !formul) return '';
120
+ let res = formul.replace(/\w+/g, (item:any) => {
121
+ // @ts-ignore
122
+ return fieldList.filter((inneritem:any) => inneritem.value === item)[0].name
123
+ })
124
+
125
+ return res.replace(/(\{|\})/g, '')
126
+ }
127
+
128
+
129
+ return (
130
+ <>
131
+ <>
132
+ <Input value={formatFormul()} style={{width: '540px'}} disabled />
133
+ <Button type="primary" onClick={showModal}>
134
+ 编辑表达式
135
+ </Button>
136
+ <Modal title="编辑表达式" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel} width={1000}>
137
+ <div style={{ height: '600px' }}>
138
+ <Row>
139
+ <Col span={6}>
140
+ <div style={{
141
+ border: '1px solid #e8eaee',
142
+ padding: '10px',
143
+ display: 'flex',
144
+ justifyContent: 'space-around',
145
+ borderRadius: '5px',
146
+ flexWrap: 'wrap',
147
+ overflow: 'auto',
148
+ maxHeight: '600px'
149
+ }}
150
+ >
151
+ {[...fieldList].map((item:any) => (
152
+ <span onClick={() => { add(item) }} style={{
153
+ width: '80px',
154
+ // height: '100px',
155
+ padding: '10px',
156
+ margin: '10px 0px',
157
+ flexBasis: '1',
158
+ border: '1px solid #e8eaee',
159
+ borderRadius: '5px',
160
+ cursor: 'pointer',
161
+ }}>{item.name}</span>
162
+ ))}
163
+ </div>
164
+ </Col>
165
+ <Col span={18}>
166
+ <Row>
167
+ <div>
168
+ {['+', '-', '*', '/', '(', ')'].map(item => <span onClick={() => { add({name: item, value: item}) }} style={{
169
+ width: '50px',
170
+ textAlign: 'center',
171
+ display: 'inline-block',
172
+ padding: '5px 10px',
173
+ margin: '10px',
174
+ height: '40px',
175
+ lineHeight: '30px',
176
+ flexBasis: '1',
177
+ border: '1px solid #e8eaee',
178
+ borderRadius: '5px',
179
+ cursor: 'pointer',
180
+ }}>{item}</span>)}
181
+ </div>
182
+ </Row>
183
+ <Row>
184
+ <div style={{
185
+ width: '700px',
186
+ padding: '10px',
187
+ marginLeft: '10px',
188
+ flexBasis: '1',
189
+ border: '1px solid #e8eaee',
190
+ minHeight: '560px'
191
+ }}>
192
+ {/* @ts-ignore */}
193
+ <SortableList distance={20} helperClass="row-dragging" items={state} axis='xy' onSortEnd={onSortEnd} />
194
+ </div>
195
+ </Row>
196
+ </Col>
197
+ </Row>
198
+ </div>
199
+ </Modal>
200
+ </>
201
+ </>
202
+ );
203
+ };
204
+
205
+ export default App;
@@ -0,0 +1,127 @@
1
+ import React, { useRef } from 'react';
2
+ import { Button, Input, Modal } from 'antd';
3
+ import { Table } from 'bssula';
4
+ import { uuid } from '@/utils/utils';
5
+
6
+ export default (props: any) => {
7
+ const tableRef:any = useRef(null);
8
+ const { onParentOk, record } = props;
9
+ const config = {
10
+ initialDataSource:
11
+ Object.keys(record.choiceInfo || {})?.map((d: any) => ({
12
+ text: record.choiceInfo[d],
13
+ value: d,
14
+ id: uuid(),
15
+ })) || [],
16
+ columns: [
17
+ {
18
+ key: 'value',
19
+ title: '值',
20
+ render: ({ text, record }: any) => {
21
+ return (
22
+ <Input
23
+ onChange={(e) => {
24
+ record['value'] = e.target.value;
25
+ }}
26
+ value={text}
27
+ />
28
+ );
29
+ },
30
+ },
31
+ {
32
+ key: 'text',
33
+ title: '文本',
34
+ render: ({ record, text }: any) => {
35
+ return (
36
+ <Input
37
+ onChange={(e) => {
38
+ record['text'] = e.target.value;
39
+ }}
40
+ value={text}
41
+ />
42
+ );
43
+ },
44
+ },
45
+ {
46
+ key: 'operation',
47
+ title: '操作',
48
+ render: [
49
+ {
50
+ type: 'link',
51
+ props: {
52
+ children: '删除',
53
+ },
54
+ action: ({ record, table }: any) => {
55
+ table.setDataSource(
56
+ table.getDataSource().filter((d: any) => d.id !== record.id),
57
+ );
58
+ },
59
+ },
60
+ ],
61
+ },
62
+ ],
63
+ rowKey: 'id',
64
+ onChange: (pag:any) => {
65
+ tableRef?.current?.setPagination(pag);
66
+ },
67
+ footer: () => {
68
+ return (
69
+ <div>
70
+ <Button
71
+ type={'primary'}
72
+ onClick={() => {
73
+ const data = tableRef?.current?.getDataSource();
74
+ tableRef?.current?.setDataSource([
75
+ ...data,
76
+ {
77
+ id: uuid(),
78
+ },
79
+ ]);
80
+ }}
81
+ >
82
+ 添加一行
83
+ </Button>
84
+ <Button
85
+ onClick={() => {
86
+ const data = tableRef?.current?.getDataSource();
87
+ tableRef?.current?.setDataSource([
88
+ ...data,
89
+ {
90
+ id: uuid(),
91
+ },
92
+ {
93
+ id: uuid(),
94
+ },
95
+ {
96
+ id: uuid(),
97
+ },
98
+ {
99
+ id: uuid(),
100
+ },
101
+ {
102
+ id: uuid(),
103
+ },
104
+ ]);
105
+ }}
106
+ >
107
+ 添加五行
108
+ </Button>
109
+ </div>
110
+ );
111
+ },
112
+ };
113
+ return (
114
+ <Modal
115
+ {...props}
116
+ maskClosable={false}
117
+ onOk={() => {
118
+ onParentOk(
119
+ tableRef?.current?.getDataSource().filter((d: any) => d.text && d.value),
120
+ );
121
+ }}
122
+ >
123
+ <Table {...config} style={{ width: '500px' }} ref={tableRef} />
124
+ </Modal>
125
+ );
126
+ };
127
+
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { Affix, Button } from 'antd';
3
+ import { SettingOutlined } from '@ant-design/icons';
4
+
5
+ export default props => {
6
+ const { onClick } = props;
7
+
8
+ const style = { position: 'fixed', top: 360, right: 24, zIndex: 1001 };
9
+
10
+ return (
11
+ <Affix style={style}>
12
+ <Button
13
+ style={{ width: 50, height: 50, lineHeight: '57px' }}
14
+ icon={<SettingOutlined style={{ fontSize: 30 }} />}
15
+ type="primary"
16
+ onClick={onClick}
17
+ />
18
+ </Affix>
19
+ );
20
+ };
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+
3
+ const prefixCls = 'tree-compact';
4
+
5
+ export default class CompactArrayView extends React.Component {
6
+ shouldComponentUpdate(nextProps) {
7
+ return nextProps.array.length !== this.props.array.length;
8
+ }
9
+
10
+ render() {
11
+ let { array } = this.props;
12
+ let count = array.length;
13
+
14
+ if (count === 0) {
15
+ return <span>{'[ ]'}</span>;
16
+ }
17
+ return (
18
+ <span className={prefixCls}>
19
+ <span>{'['}</span>
20
+ <span>{count + ' element' + (count > 1 ? 's' : '')}</span>
21
+ <span>{']'}</span>
22
+ </span>
23
+ );
24
+ }
25
+ }
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+
3
+ const prefixCls = 'tree-compact';
4
+
5
+ export default class CompactObjectView extends React.Component {
6
+ shouldComponentUpdate(nextProps) {
7
+ const nextLength = Object.keys(nextProps.object).length;
8
+ const prevLength = Object.keys(this.props.object).length;
9
+ return nextLength !== prevLength;
10
+ }
11
+
12
+ render() {
13
+ let keys = this.props.object.map(v => v.name);
14
+ let count = keys.length;
15
+
16
+ if (count === 0) {
17
+ return <span>{'{ }'}</span>;
18
+ }
19
+ if (count > 2) {
20
+ keys = keys.slice(0, 2).concat([`... +${count - 2}`]);
21
+ }
22
+ return (
23
+ <span className={prefixCls}>
24
+ <span>{'{'}</span>
25
+ <span>{keys.join(', ')}</span>
26
+ <span>{'}'}</span>
27
+ </span>
28
+ );
29
+ }
30
+ }
@@ -0,0 +1,82 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import castArray from 'lodash/castArray';
3
+ import createTreeData, { getConfigNode } from './parser';
4
+ import { createHighLightTreeData, clearActiveNode } from './parser/highlight';
5
+ import TreeNode from './treeNode';
6
+ import iconRender from './render/iconRender';
7
+ import nameRender from './render/nameRender';
8
+
9
+ import './index.less';
10
+
11
+ export { iconRender, nameRender };
12
+
13
+ function parseData(data) {
14
+ let res;
15
+ try {
16
+ res = createTreeData(getConfigNode(data));
17
+ } catch (e) {}
18
+
19
+ return res;
20
+ }
21
+
22
+ export default props => {
23
+ const {
24
+ data,
25
+ onToggle,
26
+ onSelect,
27
+ nameRender,
28
+ iconRender,
29
+ contextMenuRender,
30
+ style,
31
+ level = 0,
32
+ currentLine,
33
+ } = props;
34
+ const [treeData, setTreeData] = useState(parseData(data));
35
+ const [activeLine, setActiveLine] = useState(-1);
36
+
37
+ useEffect(() => {
38
+ setTreeData(parseData(data));
39
+ }, [data]);
40
+
41
+ useEffect(() => {
42
+ if (!treeData || !treeData[0]) {
43
+ setActiveLine(-1);
44
+ } else {
45
+ setActiveLine(currentLine);
46
+ }
47
+ }, [treeData, currentLine]);
48
+
49
+ useEffect(() => {
50
+ setTimeout(() => {
51
+ setTreeData(createHighLightTreeData(treeData, activeLine));
52
+ });
53
+ }, [activeLine]);
54
+
55
+ const handleSelect = (node, hasChildren) => {
56
+ const noActiveData = clearActiveNode(treeData);
57
+ setTreeData(noActiveData);
58
+ onSelect(node, hasChildren);
59
+ };
60
+
61
+ return (
62
+ <div className="si-tree" style={style}>
63
+ {castArray(treeData).map((node, index) => {
64
+ if (!node) return;
65
+
66
+ return (
67
+ <TreeNode
68
+ data={node}
69
+ onToggle={onToggle}
70
+ onSelect={handleSelect}
71
+ nameRender={nameRender}
72
+ iconRender={iconRender}
73
+ contextMenuRender={contextMenuRender}
74
+ key={node.name || index}
75
+ level={level}
76
+ activeLine={activeLine}
77
+ />
78
+ );
79
+ })}
80
+ </div>
81
+ );
82
+ };