@bit-sun/business-component 2.4.19 → 2.4.21

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 (197) 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/index.esm.js +10 -6
  9. package/dist/index.js +10 -6
  10. package/docs/index.md +21 -21
  11. package/lib/assets/drag.svg +17 -17
  12. package/lib/assets/exportFail.svg +37 -37
  13. package/lib/assets/exportProcessing.svg +28 -28
  14. package/lib/assets/exportSuccess.svg +34 -34
  15. package/lib/assets/label_icon_bottom.svg +25 -25
  16. package/lib/assets/upExport.svg +22 -22
  17. package/package.json +79 -79
  18. package/src/assets/32.svg +27 -27
  19. package/src/assets/addIcon.svg +17 -17
  20. package/src/assets/allfunc.svg +27 -27
  21. package/src/assets/arrowRight.svg +24 -24
  22. package/src/assets/btn-delete.svg +29 -29
  23. package/src/assets/btn-edit.svg +19 -19
  24. package/src/assets/btn-more.svg +17 -17
  25. package/src/assets/btn-submit.svg +19 -19
  26. package/src/assets/caidan.svg +11 -11
  27. package/src/assets/close.svg +26 -26
  28. package/src/assets/drag.svg +17 -17
  29. package/src/assets/exportFail.svg +37 -37
  30. package/src/assets/exportProcessing.svg +28 -28
  31. package/src/assets/exportSuccess.svg +34 -34
  32. package/src/assets/fixed-left-active.svg +11 -11
  33. package/src/assets/fixed-left.svg +15 -15
  34. package/src/assets/fixed-right-active.svg +11 -11
  35. package/src/assets/fixed-right.svg +15 -15
  36. package/src/assets/guanbi.svg +15 -15
  37. package/src/assets/icon-quanping.svg +15 -15
  38. package/src/assets/icon-shezhi.svg +17 -17
  39. package/src/assets/label_icon_bottom.svg +25 -25
  40. package/src/assets/list-no-img.svg +21 -21
  41. package/src/assets/morentouxiang-32.svg +23 -23
  42. package/src/assets/scanning.svg +24 -24
  43. package/src/assets/upExport.svg +22 -22
  44. package/src/common/ENUM.ts +41 -41
  45. package/src/components/Business/AddSelectBusiness/index.md +162 -162
  46. package/src/components/Business/AddSelectBusiness/index.tsx +1061 -1061
  47. package/src/components/Business/BsLayouts/Components/AllFunc/drawContent.tsx +111 -111
  48. package/src/components/Business/BsLayouts/Components/AllFunc/index.less +153 -153
  49. package/src/components/Business/BsLayouts/Components/AllFunc/index.tsx +70 -70
  50. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.less +90 -90
  51. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.tsx +37 -37
  52. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.tsx +242 -242
  53. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.tsx +384 -384
  54. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.tsx +285 -285
  55. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.tsx +74 -74
  56. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/drawContent.less +170 -170
  57. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.less +64 -64
  58. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.tsx +153 -153
  59. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.less +72 -72
  60. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.tsx +157 -157
  61. package/src/components/Business/BsLayouts/Components/RightContent/LoginModal.tsx +85 -85
  62. package/src/components/Business/BsLayouts/Components/RightContent/home.less +218 -218
  63. package/src/components/Business/BsLayouts/Components/RightContent/index.tsx +155 -155
  64. package/src/components/Business/BsLayouts/Components/SearchFunc/index.less +160 -160
  65. package/src/components/Business/BsLayouts/Components/SearchFunc/index.tsx +75 -75
  66. package/src/components/Business/BsLayouts/index.less +79 -79
  67. package/src/components/Business/BsLayouts/index.tsx +1484 -1484
  68. package/src/components/Business/BsLayouts/service.ts +10 -10
  69. package/src/components/Business/BsLayouts/utils.tsx +203 -203
  70. package/src/components/Business/BsSulaQueryTable/SearchItemSetting.tsx +566 -566
  71. package/src/components/Business/BsSulaQueryTable/index.less +221 -221
  72. package/src/components/Business/BsSulaQueryTable/index.tsx +558 -558
  73. package/src/components/Business/BsSulaQueryTable/setting.tsx +854 -854
  74. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  75. package/src/components/Business/BsSulaQueryTable/utils.tsx +690 -690
  76. package/src/components/Business/CommodityEntry/index.md +70 -70
  77. package/src/components/Business/CommodityEntry/index.tsx +80 -80
  78. package/src/components/Business/CommonAlert/index.tsx +23 -23
  79. package/src/components/Business/CommonGuideWrapper/index.less +111 -111
  80. package/src/components/Business/CommonGuideWrapper/index.md +39 -39
  81. package/src/components/Business/CommonGuideWrapper/index.tsx +83 -83
  82. package/src/components/Business/DetailPageWrapper/index.less +79 -79
  83. package/src/components/Business/DetailPageWrapper/index.tsx +315 -315
  84. package/src/components/Business/DetailPageWrapper/utils.tsx +100 -100
  85. package/src/components/Business/HomePageWrapper/index.less +33 -33
  86. package/src/components/Business/HomePageWrapper/index.md +45 -45
  87. package/src/components/Business/HomePageWrapper/index.tsx +162 -162
  88. package/src/components/Business/JsonQueryTable/components/FieldsModifyModal.tsx +824 -824
  89. package/src/components/Business/JsonQueryTable/components/FieldsSettingsTable.tsx +205 -205
  90. package/src/components/Business/JsonQueryTable/components/Formula.tsx +206 -206
  91. package/src/components/Business/JsonQueryTable/components/MaintainOptions.tsx +127 -127
  92. package/src/components/Business/JsonQueryTable/configButton/index.js +20 -20
  93. package/src/components/Business/JsonQueryTable/configTree/component/compactArrayView.js +25 -25
  94. package/src/components/Business/JsonQueryTable/configTree/component/compactObjectView.js +30 -30
  95. package/src/components/Business/JsonQueryTable/configTree/index.js +82 -82
  96. package/src/components/Business/JsonQueryTable/configTree/index.less +44 -44
  97. package/src/components/Business/JsonQueryTable/configTree/parser/highlight.js +57 -57
  98. package/src/components/Business/JsonQueryTable/configTree/parser/index.js +124 -124
  99. package/src/components/Business/JsonQueryTable/configTree/render/iconRender.js +29 -29
  100. package/src/components/Business/JsonQueryTable/configTree/render/nameRender.js +22 -22
  101. package/src/components/Business/JsonQueryTable/configTree/treeNode.js +116 -116
  102. package/src/components/Business/JsonQueryTable/drawer/index.tsx +12 -12
  103. package/src/components/Business/JsonQueryTable/function.ts +62 -62
  104. package/src/components/Business/JsonQueryTable/index.less +16 -16
  105. package/src/components/Business/JsonQueryTable/index.md +328 -328
  106. package/src/components/Business/JsonQueryTable/index.tsx +537 -537
  107. package/src/components/Business/JsonQueryTable/jsonEditor/index.js +346 -346
  108. package/src/components/Business/JsonQueryTable/jsonEditor/index.less +22 -22
  109. package/src/components/Business/JsonQueryTable/jsonEditor/lint/basicType.js +147 -147
  110. package/src/components/Business/JsonQueryTable/jsonEditor/lint/index.js +389 -389
  111. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/actions.js +118 -118
  112. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/dependency.js +22 -22
  113. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/index.js +21 -21
  114. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/request.js +65 -65
  115. package/src/components/Business/JsonQueryTable/static.ts +450 -450
  116. package/src/components/Business/SearchSelect/BusinessUtils.ts +2057 -2057
  117. package/src/components/Business/SearchSelect/common.ts +134 -134
  118. package/src/components/Business/SearchSelect/index.md +1444 -1444
  119. package/src/components/Business/SearchSelect/index.tsx +55 -55
  120. package/src/components/Business/SearchSelect/utils.ts +101 -101
  121. package/src/components/Business/StateFlow/index.less +130 -130
  122. package/src/components/Business/StateFlow/index.md +60 -60
  123. package/src/components/Business/StateFlow/index.tsx +29 -29
  124. package/src/components/Business/TreeSearchSelect/index.md +185 -185
  125. package/src/components/Business/TreeSearchSelect/index.tsx +33 -33
  126. package/src/components/Business/TreeSearchSelect/utils.ts +104 -104
  127. package/src/components/Business/columnSettingTable/columnSetting.tsx +766 -766
  128. package/src/components/Business/columnSettingTable/index.less +247 -247
  129. package/src/components/Business/columnSettingTable/index.md +357 -357
  130. package/src/components/Business/columnSettingTable/index.tsx +235 -234
  131. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +243 -242
  132. package/src/components/Business/columnSettingTable/utils.tsx +71 -71
  133. package/src/components/Business/moreTreeTable/FixedScrollBar.tsx +87 -87
  134. package/src/components/Business/moreTreeTable/hooks/useSticky.ts +21 -21
  135. package/src/components/Business/moreTreeTable/index.less +99 -99
  136. package/src/components/Business/moreTreeTable/index.md +448 -448
  137. package/src/components/Business/moreTreeTable/index.tsx +387 -387
  138. package/src/components/Business/moreTreeTable/utils.ts +126 -126
  139. package/src/components/Functional/AddSelect/helps.ts +80 -80
  140. package/src/components/Functional/AddSelect/index.less +367 -367
  141. package/src/components/Functional/AddSelect/index.md +155 -155
  142. package/src/components/Functional/AddSelect/index.tsx +1171 -1171
  143. package/src/components/Functional/BillEntry/index.less +371 -371
  144. package/src/components/Functional/BillEntry/index.md +39 -39
  145. package/src/components/Functional/BillEntry/index.tsx +773 -773
  146. package/src/components/Functional/BsAntdSula/BsCascader/index.md +62 -62
  147. package/src/components/Functional/BsAntdSula/BsCascader/index.tsx +178 -178
  148. package/src/components/Functional/BsAntdSula/index.ts +2 -2
  149. package/src/components/Functional/DataImport/index.less +63 -63
  150. package/src/components/Functional/DataImport/index.md +44 -44
  151. package/src/components/Functional/DataImport/index.tsx +696 -696
  152. package/src/components/Functional/DataValidation/index.less +63 -63
  153. package/src/components/Functional/DataValidation/index.md +39 -39
  154. package/src/components/Functional/DataValidation/index.tsx +688 -688
  155. package/src/components/Functional/EllipsisTooltip/index.d.ts +5 -5
  156. package/src/components/Functional/EllipsisTooltip/index.js +36 -36
  157. package/src/components/Functional/EllipsisTooltip/index.md +30 -30
  158. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  159. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +60 -60
  160. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  161. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  162. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  163. package/src/components/Functional/SearchSelect/index.less +115 -115
  164. package/src/components/Functional/SearchSelect/index.md +141 -141
  165. package/src/components/Functional/SearchSelect/index.tsx +896 -896
  166. package/src/components/Functional/SearchSelect/utils.ts +3 -3
  167. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  168. package/src/components/Functional/TreeSearchSelect/index.tsx +204 -204
  169. package/src/components/Solution/RuleComponent/Formula.tsx +335 -335
  170. package/src/components/Solution/RuleComponent/InnerSelect.tsx +62 -62
  171. package/src/components/Solution/RuleComponent/index.d.ts +29 -29
  172. package/src/components/Solution/RuleComponent/index.js +2073 -2073
  173. package/src/components/Solution/RuleComponent/index.less +230 -230
  174. package/src/components/Solution/RuleComponent/renderSpecificAction.js +99 -99
  175. package/src/components/Solution/RuleComponent/ruleFiled.js +2281 -2281
  176. package/src/components/Solution/RuleComponent/services.ts +13 -13
  177. package/src/components/Solution/RuleComponent/util.js +143 -143
  178. package/src/index.ts +38 -38
  179. package/src/plugin/TableColumnSetting/index.less +247 -247
  180. package/src/plugin/TableColumnSetting/index.md +50 -50
  181. package/src/plugin/TableColumnSetting/index.tsx +725 -725
  182. package/src/plugin/TableColumnSetting/utils.ts +19 -19
  183. package/src/styles/bsDefault.less +1912 -1912
  184. package/src/utils/CheckOneUser/index.md +39 -39
  185. package/src/utils/CheckOneUser/index.ts +51 -51
  186. package/src/utils/CustomLoginInfo.ts +55 -55
  187. package/src/utils/LocalstorageUtils.ts +95 -95
  188. package/src/utils/TableUtils.tsx +18 -18
  189. package/src/utils/checkUtils.ts +39 -39
  190. package/src/utils/enumConfig.ts +11 -11
  191. package/src/utils/getFormMode.js +12 -12
  192. package/src/utils/index.ts +4 -4
  193. package/src/utils/requestUtils.ts +166 -166
  194. package/src/utils/serialize.js +7 -7
  195. package/src/utils/utils.ts +195 -195
  196. package/tsconfig.json +29 -29
  197. package/typings.d.ts +4 -4
@@ -1,389 +1,389 @@
1
- import * as basicTypes from './basicType';
2
- let monaco;
3
- let editor;
4
-
5
- const {
6
- isArrayType,
7
- isStringType,
8
- isNumberType,
9
- isBooleanType,
10
- isNameType,
11
- isFieldRenderType,
12
- isLayoutType,
13
- isObjectType,
14
- isMethodType,
15
- isFunctionType,
16
- isModeType,
17
- isColumnRender,
18
- isActionType,
19
- } = basicTypes;
20
-
21
- const errorMarks = (node, message = '类型错误') => {
22
- const name = node?.key?.name || node?.key?.value || node.value || '';
23
- const { loc } = node;
24
-
25
- monaco.editor.setModelMarkers(editor.getModel(), 'propFunc', [
26
- {
27
- startLineNumber: loc.start.line,
28
- startColumn: loc.start.column + 1,
29
- endLineNumber: loc.end.line,
30
- endColumn: loc.end.column + 1,
31
- message: `${name} ${message}`,
32
- severity: monaco.MarkerSeverity.Error,
33
- },
34
- ]);
35
- };
36
-
37
- function requiredValidate(field, name) {
38
- const nameList = Array.isArray(name) ? name : [name];
39
- const { properties } = field;
40
- if (!properties) return;
41
- if (
42
- !properties.some(item => {
43
- const itemName = item?.key?.name || item?.key?.value || item.value;
44
- return nameList.some(v => itemName === v);
45
- })
46
- ) {
47
- errorMarks(field, `缺少必填项${name}`);
48
- }
49
- }
50
-
51
- export default (data, _monaco, _editor) => {
52
- if (!data) return;
53
- monaco = _monaco;
54
- editor = _editor;
55
- const { properties = [] } = data;
56
-
57
- properties.forEach(node => {
58
- const { key } = node;
59
- const name = key?.name || key?.value;
60
- if (node?.loc?.start?.column < 5) {
61
- // 仅对最外层校验,内部校验直接处理外部字段
62
- validate(node, name);
63
- }
64
- });
65
- };
66
-
67
- function validate(node, name) {
68
- return true
69
- /**
70
- * fields字段校验
71
- */
72
- const fieldTypes = ['fields'];
73
- if (fieldTypes.includes(name)) {
74
- if (!isArrayType(node)) {
75
- errorMarks(node, '应为数组类型');
76
- return;
77
- }
78
- const { elements } = node.value || {};
79
- elements.forEach(field => {
80
- if (!isObjectType(field)) {
81
- errorMarks(field, '应为对象类型');
82
- return;
83
- }
84
-
85
- const { properties } = field;
86
- if (!properties) return;
87
- if (
88
- !properties.some(item => {
89
- const itemName = item?.key?.name || item?.key?.value || item.value;
90
- return itemName === 'fields';
91
- })
92
- ) {
93
- requiredValidate(field, 'name');
94
- requiredValidate(field, ['field', 'render']);
95
- }
96
-
97
- properties.forEach(item => {
98
- const itemName = item?.key?.name || item?.key?.value || item.value;
99
- if (itemName === 'name' && !isNameType(item)) {
100
- errorMarks(item);
101
- return;
102
- }
103
- if (itemName === 'label') {
104
- if (!isStringType(item)) {
105
- errorMarks(item);
106
- return;
107
- }
108
- }
109
- if (itemName === 'field') {
110
- if (!isFieldRenderType(item)) {
111
- errorMarks(item);
112
- return;
113
- }
114
- if (isObjectType(item)) {
115
- const { properties: renderProperties } = item.value;
116
- if (!renderProperties) return;
117
- renderProperties.forEach(renderItem => {
118
- const renderItemName =
119
- renderItem.key.name || renderItem.key.value;
120
- if (renderItemName === 'type') {
121
- if (!isStringType(renderItem) && !isFunctionType(renderItem)) {
122
- errorMarks(renderItem);
123
- return;
124
- }
125
- }
126
- });
127
- }
128
- }
129
-
130
- if (itemName === 'valuePropName' && !isStringType(item)) {
131
- errorMarks(item);
132
- return;
133
- }
134
- if (itemName === 'rules' && !isArrayType(item)) {
135
- errorMarks(item);
136
- return;
137
- }
138
- if (itemName === 'wrapFormItem' && !isBooleanType(item)) {
139
- errorMarks(item);
140
- return;
141
- }
142
- if (itemName === 'initialDisabled' && !isBooleanType(item)) {
143
- errorMarks(item);
144
- return;
145
- }
146
- if (itemName === 'initialVisible' && !isBooleanType(item)) {
147
- errorMarks(item);
148
- return;
149
- }
150
- if (itemName === 'dependency') {
151
- if (!isObjectType(item)) {
152
- errorMarks(item);
153
- return;
154
- }
155
- const { properties: depProperties } = item.value;
156
- if (!depProperties) return;
157
- depProperties.forEach(depItem => {
158
- const depName = depItem.key.name || depItem.key.value;
159
- const depType = ['value', 'source', 'disabled', 'visible'];
160
- if (!depType.includes(depName)) {
161
- errorMarks(
162
- depType,
163
- 'dependency 只可以包含value source disabled visible四种类型',
164
- );
165
- return;
166
- }
167
- if (!isObjectType(depItem)) {
168
- errorMarks(depItem);
169
- return;
170
- }
171
- const { properties: depItemProperties } = depItem.value;
172
- if (!depItemProperties) return;
173
- depItemProperties.forEach(depNode => {
174
- const depNodeName = depNode.key.name || depNode.key.value;
175
- const allowDepTypes = [
176
- 'relates',
177
- 'inputs',
178
- 'cases',
179
- 'ignores',
180
- 'type',
181
- 'output',
182
- 'defaultOutput',
183
- ];
184
- if (!allowDepTypes.includes(depNodeName)) {
185
- errorMarks(depNode, '多余类型');
186
- return;
187
- }
188
-
189
- if (depNodeName === 'relates') {
190
- if (!isArrayType(depNode)) {
191
- errorMarks(depNode);
192
- return;
193
- }
194
- }
195
- if (depNodeName === 'inputs') {
196
- if (!isArrayType(depNode)) {
197
- errorMarks(depNode);
198
- return;
199
- }
200
- }
201
- if (depNodeName === 'cases') {
202
- if (!isArrayType(depNode)) {
203
- errorMarks(depNode);
204
- return;
205
- }
206
- }
207
- if (depNodeName === 'ignores') {
208
- if (!isArrayType(depNode)) {
209
- errorMarks(depNode);
210
- return;
211
- }
212
- }
213
- });
214
- });
215
- }
216
-
217
- if (itemName === 'render' && !isFieldRenderType(item)) {
218
- errorMarks(item);
219
- return;
220
- }
221
- });
222
- });
223
- }
224
-
225
- /**
226
- * layout
227
- */
228
- if (name === 'layout') {
229
- if (!isLayoutType(node)) {
230
- errorMarks(node);
231
- return;
232
- }
233
- }
234
-
235
- /**
236
- * 请求校验
237
- */
238
- const fetchType = [
239
- 'remoteSource',
240
- 'remoteDataSource',
241
- 'remoteValues',
242
- 'submit',
243
- ];
244
- if (fetchType.includes(name)) {
245
- if (!isObjectType(node)) {
246
- errorMarks(node, '应为对象类型');
247
- return;
248
- }
249
- requiredValidate(node.value, 'url');
250
- const { properties } = node.value;
251
- if (!properties) return;
252
- properties.forEach(item => {
253
- const itemName = item.key.name || item.key.value;
254
- if (itemName === 'url' && !isStringType(item)) {
255
- errorMarks(item);
256
- return;
257
- }
258
- if (itemName === 'method' && !isMethodType(item)) {
259
- errorMarks(item);
260
- return;
261
- }
262
- if (itemName === 'params' && !isObjectType(item)) {
263
- errorMarks(item);
264
- return;
265
- }
266
- if (itemName === 'extraParams' && !isObjectType(item)) {
267
- errorMarks(item);
268
- return;
269
- }
270
- if (itemName === 'convertParams' && !isFunctionType(item)) {
271
- errorMarks(item);
272
- return;
273
- }
274
- if (itemName === 'converter' && !isFunctionType(item)) {
275
- errorMarks(item);
276
- return;
277
- }
278
- });
279
- }
280
-
281
- /**
282
- * columns
283
- */
284
- if (name === 'columns') {
285
- if (!isArrayType(node)) {
286
- errorMarks(node);
287
- return;
288
- }
289
-
290
- const { elements } = node.value || {};
291
- elements.forEach(column => {
292
- if (!isObjectType(column)) {
293
- errorMarks(column, '应为对象类型');
294
- return;
295
- }
296
-
297
- const { properties } = column;
298
- if (!properties) return;
299
- properties.forEach(item => {
300
- const itemName = item?.key?.name || item?.key?.value || item.value;
301
- if (itemName === 'key') {
302
- if (!isStringType(item)) {
303
- errorMarks(item, '应为字符串类型');
304
- return;
305
- }
306
- }
307
- if (itemName === 'title') {
308
- if (!isStringType(item)) {
309
- errorMarks(item, '应为字符串类型');
310
- return;
311
- }
312
- }
313
- if (itemName === 'render') {
314
- if (!isColumnRender(item)) {
315
- errorMarks(item);
316
- return;
317
- }
318
- }
319
- });
320
- });
321
- }
322
-
323
- /**
324
- * mode
325
- */
326
-
327
- if (name === 'mode') {
328
- if (!isModeType(node)) {
329
- errorMarks(node, 'mode可选类型为view create edit');
330
- return;
331
- }
332
- }
333
-
334
- /**
335
- * action
336
- */
337
- if (name === 'actionsRender' || name === 'leftActionsRender') {
338
- if (!isActionType(node)) {
339
- errorMarks(node);
340
- return;
341
- }
342
- }
343
-
344
- /**
345
- * formItem
346
- */
347
- if (name === 'itemLayout') {
348
- if (!isObjectType(node)) {
349
- errorMarks(node);
350
- return;
351
- }
352
-
353
- const { properties } = node.value;
354
- properties.forEach(item => {
355
- const itemName = item?.key?.name || item?.key?.value || item.value;
356
- if (itemName === 'span') {
357
- if (!isNumberType(item)) {
358
- errorMarks(item);
359
- return;
360
- }
361
- }
362
- if (itemName === 'gutter') {
363
- if (!isNumberType(item)) {
364
- errorMarks(item);
365
- return;
366
- }
367
- }
368
- if (itemName === 'offset') {
369
- if (!isNumberType(item)) {
370
- errorMarks(item);
371
- return;
372
- }
373
- }
374
-
375
- if (itemName === 'labelCol') {
376
- if (!isObjectType(item)) {
377
- errorMarks(item);
378
- return;
379
- }
380
- }
381
- if (itemName === 'wrapperCol') {
382
- if (!isObjectType(item)) {
383
- errorMarks(item);
384
- return;
385
- }
386
- }
387
- });
388
- }
389
- }
1
+ import * as basicTypes from './basicType';
2
+ let monaco;
3
+ let editor;
4
+
5
+ const {
6
+ isArrayType,
7
+ isStringType,
8
+ isNumberType,
9
+ isBooleanType,
10
+ isNameType,
11
+ isFieldRenderType,
12
+ isLayoutType,
13
+ isObjectType,
14
+ isMethodType,
15
+ isFunctionType,
16
+ isModeType,
17
+ isColumnRender,
18
+ isActionType,
19
+ } = basicTypes;
20
+
21
+ const errorMarks = (node, message = '类型错误') => {
22
+ const name = node?.key?.name || node?.key?.value || node.value || '';
23
+ const { loc } = node;
24
+
25
+ monaco.editor.setModelMarkers(editor.getModel(), 'propFunc', [
26
+ {
27
+ startLineNumber: loc.start.line,
28
+ startColumn: loc.start.column + 1,
29
+ endLineNumber: loc.end.line,
30
+ endColumn: loc.end.column + 1,
31
+ message: `${name} ${message}`,
32
+ severity: monaco.MarkerSeverity.Error,
33
+ },
34
+ ]);
35
+ };
36
+
37
+ function requiredValidate(field, name) {
38
+ const nameList = Array.isArray(name) ? name : [name];
39
+ const { properties } = field;
40
+ if (!properties) return;
41
+ if (
42
+ !properties.some(item => {
43
+ const itemName = item?.key?.name || item?.key?.value || item.value;
44
+ return nameList.some(v => itemName === v);
45
+ })
46
+ ) {
47
+ errorMarks(field, `缺少必填项${name}`);
48
+ }
49
+ }
50
+
51
+ export default (data, _monaco, _editor) => {
52
+ if (!data) return;
53
+ monaco = _monaco;
54
+ editor = _editor;
55
+ const { properties = [] } = data;
56
+
57
+ properties.forEach(node => {
58
+ const { key } = node;
59
+ const name = key?.name || key?.value;
60
+ if (node?.loc?.start?.column < 5) {
61
+ // 仅对最外层校验,内部校验直接处理外部字段
62
+ validate(node, name);
63
+ }
64
+ });
65
+ };
66
+
67
+ function validate(node, name) {
68
+ return true
69
+ /**
70
+ * fields字段校验
71
+ */
72
+ const fieldTypes = ['fields'];
73
+ if (fieldTypes.includes(name)) {
74
+ if (!isArrayType(node)) {
75
+ errorMarks(node, '应为数组类型');
76
+ return;
77
+ }
78
+ const { elements } = node.value || {};
79
+ elements.forEach(field => {
80
+ if (!isObjectType(field)) {
81
+ errorMarks(field, '应为对象类型');
82
+ return;
83
+ }
84
+
85
+ const { properties } = field;
86
+ if (!properties) return;
87
+ if (
88
+ !properties.some(item => {
89
+ const itemName = item?.key?.name || item?.key?.value || item.value;
90
+ return itemName === 'fields';
91
+ })
92
+ ) {
93
+ requiredValidate(field, 'name');
94
+ requiredValidate(field, ['field', 'render']);
95
+ }
96
+
97
+ properties.forEach(item => {
98
+ const itemName = item?.key?.name || item?.key?.value || item.value;
99
+ if (itemName === 'name' && !isNameType(item)) {
100
+ errorMarks(item);
101
+ return;
102
+ }
103
+ if (itemName === 'label') {
104
+ if (!isStringType(item)) {
105
+ errorMarks(item);
106
+ return;
107
+ }
108
+ }
109
+ if (itemName === 'field') {
110
+ if (!isFieldRenderType(item)) {
111
+ errorMarks(item);
112
+ return;
113
+ }
114
+ if (isObjectType(item)) {
115
+ const { properties: renderProperties } = item.value;
116
+ if (!renderProperties) return;
117
+ renderProperties.forEach(renderItem => {
118
+ const renderItemName =
119
+ renderItem.key.name || renderItem.key.value;
120
+ if (renderItemName === 'type') {
121
+ if (!isStringType(renderItem) && !isFunctionType(renderItem)) {
122
+ errorMarks(renderItem);
123
+ return;
124
+ }
125
+ }
126
+ });
127
+ }
128
+ }
129
+
130
+ if (itemName === 'valuePropName' && !isStringType(item)) {
131
+ errorMarks(item);
132
+ return;
133
+ }
134
+ if (itemName === 'rules' && !isArrayType(item)) {
135
+ errorMarks(item);
136
+ return;
137
+ }
138
+ if (itemName === 'wrapFormItem' && !isBooleanType(item)) {
139
+ errorMarks(item);
140
+ return;
141
+ }
142
+ if (itemName === 'initialDisabled' && !isBooleanType(item)) {
143
+ errorMarks(item);
144
+ return;
145
+ }
146
+ if (itemName === 'initialVisible' && !isBooleanType(item)) {
147
+ errorMarks(item);
148
+ return;
149
+ }
150
+ if (itemName === 'dependency') {
151
+ if (!isObjectType(item)) {
152
+ errorMarks(item);
153
+ return;
154
+ }
155
+ const { properties: depProperties } = item.value;
156
+ if (!depProperties) return;
157
+ depProperties.forEach(depItem => {
158
+ const depName = depItem.key.name || depItem.key.value;
159
+ const depType = ['value', 'source', 'disabled', 'visible'];
160
+ if (!depType.includes(depName)) {
161
+ errorMarks(
162
+ depType,
163
+ 'dependency 只可以包含value source disabled visible四种类型',
164
+ );
165
+ return;
166
+ }
167
+ if (!isObjectType(depItem)) {
168
+ errorMarks(depItem);
169
+ return;
170
+ }
171
+ const { properties: depItemProperties } = depItem.value;
172
+ if (!depItemProperties) return;
173
+ depItemProperties.forEach(depNode => {
174
+ const depNodeName = depNode.key.name || depNode.key.value;
175
+ const allowDepTypes = [
176
+ 'relates',
177
+ 'inputs',
178
+ 'cases',
179
+ 'ignores',
180
+ 'type',
181
+ 'output',
182
+ 'defaultOutput',
183
+ ];
184
+ if (!allowDepTypes.includes(depNodeName)) {
185
+ errorMarks(depNode, '多余类型');
186
+ return;
187
+ }
188
+
189
+ if (depNodeName === 'relates') {
190
+ if (!isArrayType(depNode)) {
191
+ errorMarks(depNode);
192
+ return;
193
+ }
194
+ }
195
+ if (depNodeName === 'inputs') {
196
+ if (!isArrayType(depNode)) {
197
+ errorMarks(depNode);
198
+ return;
199
+ }
200
+ }
201
+ if (depNodeName === 'cases') {
202
+ if (!isArrayType(depNode)) {
203
+ errorMarks(depNode);
204
+ return;
205
+ }
206
+ }
207
+ if (depNodeName === 'ignores') {
208
+ if (!isArrayType(depNode)) {
209
+ errorMarks(depNode);
210
+ return;
211
+ }
212
+ }
213
+ });
214
+ });
215
+ }
216
+
217
+ if (itemName === 'render' && !isFieldRenderType(item)) {
218
+ errorMarks(item);
219
+ return;
220
+ }
221
+ });
222
+ });
223
+ }
224
+
225
+ /**
226
+ * layout
227
+ */
228
+ if (name === 'layout') {
229
+ if (!isLayoutType(node)) {
230
+ errorMarks(node);
231
+ return;
232
+ }
233
+ }
234
+
235
+ /**
236
+ * 请求校验
237
+ */
238
+ const fetchType = [
239
+ 'remoteSource',
240
+ 'remoteDataSource',
241
+ 'remoteValues',
242
+ 'submit',
243
+ ];
244
+ if (fetchType.includes(name)) {
245
+ if (!isObjectType(node)) {
246
+ errorMarks(node, '应为对象类型');
247
+ return;
248
+ }
249
+ requiredValidate(node.value, 'url');
250
+ const { properties } = node.value;
251
+ if (!properties) return;
252
+ properties.forEach(item => {
253
+ const itemName = item.key.name || item.key.value;
254
+ if (itemName === 'url' && !isStringType(item)) {
255
+ errorMarks(item);
256
+ return;
257
+ }
258
+ if (itemName === 'method' && !isMethodType(item)) {
259
+ errorMarks(item);
260
+ return;
261
+ }
262
+ if (itemName === 'params' && !isObjectType(item)) {
263
+ errorMarks(item);
264
+ return;
265
+ }
266
+ if (itemName === 'extraParams' && !isObjectType(item)) {
267
+ errorMarks(item);
268
+ return;
269
+ }
270
+ if (itemName === 'convertParams' && !isFunctionType(item)) {
271
+ errorMarks(item);
272
+ return;
273
+ }
274
+ if (itemName === 'converter' && !isFunctionType(item)) {
275
+ errorMarks(item);
276
+ return;
277
+ }
278
+ });
279
+ }
280
+
281
+ /**
282
+ * columns
283
+ */
284
+ if (name === 'columns') {
285
+ if (!isArrayType(node)) {
286
+ errorMarks(node);
287
+ return;
288
+ }
289
+
290
+ const { elements } = node.value || {};
291
+ elements.forEach(column => {
292
+ if (!isObjectType(column)) {
293
+ errorMarks(column, '应为对象类型');
294
+ return;
295
+ }
296
+
297
+ const { properties } = column;
298
+ if (!properties) return;
299
+ properties.forEach(item => {
300
+ const itemName = item?.key?.name || item?.key?.value || item.value;
301
+ if (itemName === 'key') {
302
+ if (!isStringType(item)) {
303
+ errorMarks(item, '应为字符串类型');
304
+ return;
305
+ }
306
+ }
307
+ if (itemName === 'title') {
308
+ if (!isStringType(item)) {
309
+ errorMarks(item, '应为字符串类型');
310
+ return;
311
+ }
312
+ }
313
+ if (itemName === 'render') {
314
+ if (!isColumnRender(item)) {
315
+ errorMarks(item);
316
+ return;
317
+ }
318
+ }
319
+ });
320
+ });
321
+ }
322
+
323
+ /**
324
+ * mode
325
+ */
326
+
327
+ if (name === 'mode') {
328
+ if (!isModeType(node)) {
329
+ errorMarks(node, 'mode可选类型为view create edit');
330
+ return;
331
+ }
332
+ }
333
+
334
+ /**
335
+ * action
336
+ */
337
+ if (name === 'actionsRender' || name === 'leftActionsRender') {
338
+ if (!isActionType(node)) {
339
+ errorMarks(node);
340
+ return;
341
+ }
342
+ }
343
+
344
+ /**
345
+ * formItem
346
+ */
347
+ if (name === 'itemLayout') {
348
+ if (!isObjectType(node)) {
349
+ errorMarks(node);
350
+ return;
351
+ }
352
+
353
+ const { properties } = node.value;
354
+ properties.forEach(item => {
355
+ const itemName = item?.key?.name || item?.key?.value || item.value;
356
+ if (itemName === 'span') {
357
+ if (!isNumberType(item)) {
358
+ errorMarks(item);
359
+ return;
360
+ }
361
+ }
362
+ if (itemName === 'gutter') {
363
+ if (!isNumberType(item)) {
364
+ errorMarks(item);
365
+ return;
366
+ }
367
+ }
368
+ if (itemName === 'offset') {
369
+ if (!isNumberType(item)) {
370
+ errorMarks(item);
371
+ return;
372
+ }
373
+ }
374
+
375
+ if (itemName === 'labelCol') {
376
+ if (!isObjectType(item)) {
377
+ errorMarks(item);
378
+ return;
379
+ }
380
+ }
381
+ if (itemName === 'wrapperCol') {
382
+ if (!isObjectType(item)) {
383
+ errorMarks(item);
384
+ return;
385
+ }
386
+ }
387
+ });
388
+ }
389
+ }