@luck-design-biz/luckda 1.0.0-5-alpha → 1.0.0-7-alpha

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 (89) hide show
  1. package/es/components/ComplexItem/index.js +65 -49
  2. package/es/components/LdGridForm/index.js +2 -1
  3. package/es/helper/ldBuilder.js +8 -3
  4. package/es/locales/zh-CN.js +35 -0
  5. package/es/lowcode/engine/meta/fieldcomplex.props.default.json +1 -0
  6. package/es/lowcode/engine/meta/fieldcomplex.props.json +7 -0
  7. package/es/lowcode/engine/meta/form.props.json +3 -3
  8. package/es/lowcode/engine/meta/js-editor/auto-complete.json +18 -0
  9. package/es/lowcode/engine/meta/page.props.json +6 -0
  10. package/es/lowcode/engine/provider/ContextProvider/index.js +28 -5
  11. package/es/lowcode/engine/provider/ContextProvider/router.js +1 -1
  12. package/es/lowcode/engine/{tools → provider/ContextProvider}/usePageDataStore.js +9 -7
  13. package/es/lowcode/engine/{tools → provider/ContextProvider}/useTodo.js +4 -6
  14. package/es/lowcode/engine/provider/RemoteSourceProvider.js +1 -2
  15. package/es/lowcode/engine/tools/helper.js +7 -2
  16. package/es/lowcode/engine/tools/initDS.js +263 -0
  17. package/es/lowcode/engine/tools/useCombinedRefs.js +3 -2
  18. package/es/lowcode/painter/components/TipIcon.js +16 -0
  19. package/es/lowcode/painter/components/VarEditor.js +456 -0
  20. package/es/lowcode/painter/components/code-editor/JSEditor.js +3 -1
  21. package/es/lowcode/painter/components/code-editor/VisionEditor.js +81 -0
  22. package/es/lowcode/painter/components/field-setting/SettingUI.js +17 -3
  23. package/es/lowcode/painter/components/field-setting/index.js +1 -1
  24. package/es/lowcode/painter/index.js +1 -0
  25. package/es/lowcode/painter/panel-section/ComplexPop.js +241 -0
  26. package/es/lowcode/painter/panel-section/DataSetSelector.js +8 -0
  27. package/es/lowcode/painter/panel-section/FieldsSetting.js +9 -1
  28. package/es/lowcode/painter/panel-section/ImpExp.js +1 -27
  29. package/es/lowcode/painter/panel-section/PageVars.js +296 -0
  30. package/es/lowcode/painter/services/complexPop.js +21 -0
  31. package/es/lowcode/painter/style/page-vars.less +25 -0
  32. package/es/lowcode/preview/index.js +1 -0
  33. package/es/lowcode/view/Canvas.js +11 -34
  34. package/es/lowcode/view/Loading.js +5 -7
  35. package/es/lowcode/view/Page.js +37 -15
  36. package/es/lowcode/view/index.js +1 -0
  37. package/es/lowcode/view/lc-components/FieldComplex/meta.json +7 -0
  38. package/es/lowcode/view/lc-components/Form/index.js +11 -4
  39. package/es/lowcode/view/lc-components/Form/meta.json +3 -3
  40. package/es/lowcode/view/lc-components/Page/meta.json +6 -0
  41. package/es/lowcode/view/lc-components/Table/index.js +17 -3
  42. package/es/lowcode/view/style/loading.less +14 -0
  43. package/es/utils/form.js +3 -3
  44. package/es/utils/grid.js +1 -1
  45. package/lib/components/ComplexItem/index.js +62 -47
  46. package/lib/components/LdGridForm/index.js +2 -1
  47. package/lib/helper/ldBuilder.js +8 -3
  48. package/lib/locales/zh-CN.js +35 -0
  49. package/lib/lowcode/engine/meta/fieldcomplex.props.default.json +1 -0
  50. package/lib/lowcode/engine/meta/fieldcomplex.props.json +7 -0
  51. package/lib/lowcode/engine/meta/form.props.json +3 -3
  52. package/lib/lowcode/engine/meta/js-editor/auto-complete.json +18 -0
  53. package/lib/lowcode/engine/meta/page.props.json +6 -0
  54. package/lib/lowcode/engine/provider/ContextProvider/index.js +29 -12
  55. package/lib/lowcode/engine/provider/ContextProvider/router.js +1 -1
  56. package/lib/lowcode/engine/{tools → provider/ContextProvider}/usePageDataStore.js +9 -7
  57. package/lib/lowcode/engine/{tools → provider/ContextProvider}/useTodo.js +4 -6
  58. package/lib/lowcode/engine/provider/RemoteSourceProvider.js +2 -3
  59. package/lib/lowcode/engine/tools/helper.js +7 -2
  60. package/lib/lowcode/engine/tools/initDS.js +270 -0
  61. package/lib/lowcode/engine/tools/useCombinedRefs.js +2 -1
  62. package/lib/lowcode/painter/components/TipIcon.js +23 -0
  63. package/lib/lowcode/painter/components/VarEditor.js +463 -0
  64. package/lib/lowcode/painter/components/code-editor/JSEditor.js +3 -1
  65. package/lib/lowcode/painter/components/code-editor/VisionEditor.js +88 -0
  66. package/lib/lowcode/painter/components/field-setting/SettingUI.js +17 -3
  67. package/lib/lowcode/painter/components/field-setting/index.js +1 -1
  68. package/lib/lowcode/painter/index.js +1 -0
  69. package/lib/lowcode/painter/panel-section/ComplexPop.js +249 -0
  70. package/lib/lowcode/painter/panel-section/DataSetSelector.js +8 -0
  71. package/lib/lowcode/painter/panel-section/FieldsSetting.js +9 -1
  72. package/lib/lowcode/painter/panel-section/ImpExp.js +0 -26
  73. package/lib/lowcode/painter/panel-section/PageVars.js +304 -0
  74. package/lib/lowcode/painter/services/complexPop.js +28 -0
  75. package/lib/lowcode/painter/style/page-vars.less +25 -0
  76. package/lib/lowcode/preview/index.js +1 -0
  77. package/lib/lowcode/view/Canvas.js +12 -35
  78. package/lib/lowcode/view/Loading.js +5 -7
  79. package/lib/lowcode/view/Page.js +35 -13
  80. package/lib/lowcode/view/index.js +1 -0
  81. package/lib/lowcode/view/lc-components/FieldComplex/meta.json +7 -0
  82. package/lib/lowcode/view/lc-components/Form/index.js +11 -4
  83. package/lib/lowcode/view/lc-components/Form/meta.json +3 -3
  84. package/lib/lowcode/view/lc-components/Page/meta.json +6 -0
  85. package/lib/lowcode/view/lc-components/Table/index.js +18 -4
  86. package/lib/lowcode/view/style/loading.less +14 -0
  87. package/lib/utils/form.js +2 -2
  88. package/lib/utils/grid.js +1 -1
  89. package/package.json +1 -1
@@ -0,0 +1,456 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import React from 'react';
4
+ import { useDebounceFn, useCreation, useSet, useMemoizedFn } from 'ahooks';
5
+ import { Form, Input, Switch, Segmented, Dropdown, Menu } from 'luck-design/antd';
6
+ import styled from 'styled-components';
7
+ import { set, unset, get, intersection, keys } from 'lodash';
8
+ import { formatMessage } from '@luck-design-biz/base/utils';
9
+ import VisionEditor from "./code-editor/VisionEditor";
10
+ import JSEditor from "./code-editor/JSEditor";
11
+ import TipIcon from "./TipIcon";
12
+ var _I18N_PREFIX_ = 'luckda.lowcode.painter.pageVars';
13
+ var StyledForm = styled(Form).withConfig({
14
+ displayName: "StyledForm",
15
+ componentId: "luckda-6530__sc-iq6k7e-0"
16
+ })(["font-size:12px;.ant-form-item{font-size:12px;margin-bottom:0;}label{font-size:12px;}"]);
17
+ var StyledSegmented = styled(Segmented).withConfig({
18
+ displayName: "StyledSegmented",
19
+ componentId: "luckda-6530__sc-iq6k7e-1"
20
+ })(["width:100%;"]);
21
+ var EditorWrapper = styled.div.withConfig({
22
+ displayName: "EditorWrapper",
23
+ componentId: "luckda-6530__sc-iq6k7e-2"
24
+ })(["width:100%;height:80px;border:1px solid #d9d9d9;border-radius:4px;margin:8px 0;"]);
25
+ var LabelLine = styled.div.withConfig({
26
+ displayName: "LabelLine",
27
+ componentId: "luckda-6530__sc-iq6k7e-3"
28
+ })(["height:28px;background:rgba(31,56,88,0.04);border-top:1px solid rgba(31,56,88,0.1);border-bottom:1px solid rgba(31,56,88,0.1);margin:8px 0;line-height:26px;padding:0 12px;", ""], function (props) {
29
+ return props.$flex ? {
30
+ display: 'flex',
31
+ 'align-items': 'center',
32
+ 'justify-content': 'space-between'
33
+ } : null;
34
+ });
35
+ var _EDITOR_OPTIONS = {
36
+ minimap: {
37
+ enabled: false
38
+ },
39
+ lineNumbers: 'off'
40
+ };
41
+ var _TASK_TYPE_OPTIONS = [{
42
+ label: formatMessage({
43
+ id: "".concat(_I18N_PREFIX_, ".taskType.serial"),
44
+ label: '串行'
45
+ }),
46
+ value: 'serial'
47
+ }, {
48
+ label: formatMessage({
49
+ id: "".concat(_I18N_PREFIX_, ".taskType.parallel"),
50
+ label: '并行'
51
+ }),
52
+ value: 'parallel'
53
+ }];
54
+ var _METHOD_OPTIONS = [{
55
+ label: formatMessage({
56
+ id: "".concat(_I18N_PREFIX_, ".method.jsonp"),
57
+ label: 'JSONP'
58
+ }),
59
+ value: 'jsonp'
60
+ }, {
61
+ label: formatMessage({
62
+ id: "".concat(_I18N_PREFIX_, ".method.get"),
63
+ label: 'GET'
64
+ }),
65
+ value: 'get'
66
+ }, {
67
+ label: formatMessage({
68
+ id: "".concat(_I18N_PREFIX_, ".taskType.post"),
69
+ label: 'POST'
70
+ }),
71
+ value: 'post'
72
+ }, {
73
+ label: formatMessage({
74
+ id: "".concat(_I18N_PREFIX_, ".taskType.put"),
75
+ label: 'PUT'
76
+ }),
77
+ value: 'put'
78
+ }, {
79
+ label: formatMessage({
80
+ id: "".concat(_I18N_PREFIX_, ".taskType.delete"),
81
+ label: 'DELETE'
82
+ }),
83
+ value: 'delete'
84
+ }];
85
+ var _DEFAULT_PROCESS_ = {
86
+ willFetch: {
87
+ code: 'function willFetch(vars, config){\n\t\n}',
88
+ title: formatMessage({
89
+ id: "".concat(_I18N_PREFIX_, ".willFetch"),
90
+ label: "\u8BF7\u6C42\u53D1\u9001\u524D\u5904\u7406\u51FD\u6570(willFetch)"
91
+ })
92
+ },
93
+ didFetch: {
94
+ code: 'function didFetch(content){\n\t\n}',
95
+ title: formatMessage({
96
+ id: "".concat(_I18N_PREFIX_, ".didFetch"),
97
+ label: "\u8BF7\u6C42\u53D1\u9001\u524D\u5904\u7406\u51FD\u6570(didFetch)"
98
+ })
99
+ },
100
+ onError: {
101
+ code: 'function onError(error){\n\t\n}',
102
+ title: formatMessage({
103
+ id: "".concat(_I18N_PREFIX_, ".onError"),
104
+ label: "\u8BF7\u6C42\u53D1\u9001\u524D\u5904\u7406\u51FD\u6570(onError)"
105
+ })
106
+ }
107
+ };
108
+ var getBasicFormItem = function getBasicFormItem(form, item) {
109
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form.Item, {
110
+ label: formatMessage({
111
+ id: "".concat(_I18N_PREFIX_, ".name"),
112
+ label: '名称'
113
+ })
114
+ }, form.getFieldDecorator('name', {
115
+ initialValue: item.name,
116
+ rules: [{
117
+ required: true,
118
+ message: formatMessage({
119
+ id: "".concat(_I18N_PREFIX_, ".messag.name"),
120
+ label: '请输入变量名'
121
+ })
122
+ }]
123
+ })( /*#__PURE__*/React.createElement(Input, {
124
+ size: "small"
125
+ }))), /*#__PURE__*/React.createElement(Form.Item, {
126
+ label: formatMessage({
127
+ id: "".concat(_I18N_PREFIX_, ".desc"),
128
+ label: '描述'
129
+ })
130
+ }, form.getFieldDecorator('desc', {
131
+ initialValue: item.desc
132
+ })( /*#__PURE__*/React.createElement(Input, {
133
+ size: "small",
134
+ placeholder: formatMessage({
135
+ id: "".concat(_I18N_PREFIX_, ".placeholder"),
136
+ label: '请输入'
137
+ })
138
+ }))));
139
+ };
140
+ var VarForm = Form.create({
141
+ name: 'var_form',
142
+ onValuesChange: function onValuesChange(_ref, values) {
143
+ var dispatch = _ref.dispatch,
144
+ item = _ref.item;
145
+ dispatch({
146
+ type: 'edit',
147
+ payload: {
148
+ id: item.id,
149
+ data: values
150
+ }
151
+ });
152
+ }
153
+ })(function (_ref2) {
154
+ var form = _ref2.form,
155
+ item = _ref2.item,
156
+ dispatch = _ref2.dispatch;
157
+ var _useDebounceFn = useDebounceFn(function (code) {
158
+ dispatch({
159
+ type: 'edit',
160
+ payload: {
161
+ id: item.id,
162
+ data: {
163
+ data: code
164
+ }
165
+ }
166
+ });
167
+ }, {
168
+ wait: 500
169
+ }),
170
+ handleEditorValueChange = _useDebounceFn.run;
171
+ return /*#__PURE__*/React.createElement(StyledForm, {
172
+ layout: "horizontal",
173
+ labelCol: {
174
+ span: 6
175
+ },
176
+ wrapperCol: {
177
+ span: 17
178
+ },
179
+ hideRequiredMark: true
180
+ }, getBasicFormItem(form, item), /*#__PURE__*/React.createElement(LabelLine, null, formatMessage({
181
+ id: "".concat(_I18N_PREFIX_, ".data"),
182
+ label: '数据'
183
+ }), /*#__PURE__*/React.createElement(TipIcon, {
184
+ type: "question-circle",
185
+ style: {
186
+ marginLeft: 4
187
+ },
188
+ title: formatMessage({
189
+ id: "".concat(_I18N_PREFIX_, ".tip.data"),
190
+ label: "\u8F93\u5165\u6846\u5185\u652F\u6301\u8F93\u5165JS\u7684\u57FA\u672C\u7C7B\u578B\u53D8\u91CF\uFF0C\u5982\u5B57\u7B26\u4E32:\"string\"\uFF0C\u6570\u5B57:123\uFF0C\u5E03\u5C14\u503C:true/false\uFF0C\u6570\u7EC4:[1,2,3]\uFF0C\u5BF9\u8C61:{\"name\": \"test\"}\uFF0C\u7A7A\u503C:null"
191
+ })
192
+ })), /*#__PURE__*/React.createElement("div", {
193
+ style: {
194
+ width: '100%',
195
+ height: 300
196
+ }
197
+ }, /*#__PURE__*/React.createElement(VisionEditor, {
198
+ onChange: handleEditorValueChange
199
+ }, item.data)));
200
+ });
201
+ var ApiForm = Form.create({
202
+ name: 'api_form',
203
+ onValuesChange: function onValuesChange(_ref3, values, all) {
204
+ var dispatch = _ref3.dispatch,
205
+ item = _ref3.item;
206
+ var auto = get(values, 'data.auto');
207
+ if (auto) {
208
+ set(all, 'data.taskType', 'parallel');
209
+ } else if (auto === false) {
210
+ unset(all, 'data.taskType');
211
+ }
212
+ dispatch({
213
+ type: 'edit',
214
+ payload: {
215
+ id: item.id,
216
+ data: all
217
+ }
218
+ });
219
+ }
220
+ })(function (_ref4) {
221
+ var _item$data, _item$data2, _item$data3, _item$data4, _item$data5, _item$data6, _item$data7, _item$data8, _item$data9, _item$data10, _item$data11;
222
+ var form = _ref4.form,
223
+ item = _ref4.item,
224
+ dispatch = _ref4.dispatch;
225
+ var _useSet = useSet(intersection(['willFetch', 'didFetch', 'onError'], keys(item))),
226
+ _useSet2 = _slicedToArray(_useSet, 2),
227
+ processSet = _useSet2[0],
228
+ _useSet2$ = _useSet2[1],
229
+ add = _useSet2$.add,
230
+ remove = _useSet2$.remove;
231
+ var _useDebounceFn2 = useDebounceFn(function (field, code) {
232
+ var obj = {};
233
+ set(obj, field, code);
234
+ form.setFieldsValue(obj);
235
+ }, {
236
+ wait: 500
237
+ }),
238
+ handleEditorValueChange = _useDebounceFn2.run;
239
+ var handleAddProcessFun = useMemoizedFn(function (_ref5) {
240
+ var key = _ref5.key;
241
+ if (!processSet.has(key)) {
242
+ add(key);
243
+ dispatch({
244
+ type: 'edit',
245
+ payload: {
246
+ id: item.id,
247
+ data: _defineProperty({}, key, _DEFAULT_PROCESS_[key].code)
248
+ }
249
+ });
250
+ }
251
+ });
252
+ var handleDelProcessFun = useMemoizedFn(function (_ref6) {
253
+ var key = _ref6.key;
254
+ remove(key);
255
+ dispatch({
256
+ type: 'edit',
257
+ payload: {
258
+ id: item.id,
259
+ data: _defineProperty({}, key, void 0)
260
+ }
261
+ });
262
+ });
263
+ var renderProcess = useMemoizedFn(function (processKey) {
264
+ return processSet.has(processKey) ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LabelLine, {
265
+ $flex: true
266
+ }, _DEFAULT_PROCESS_[processKey].title, /*#__PURE__*/React.createElement(TipIcon, {
267
+ type: "delete",
268
+ onClick: function onClick() {
269
+ return handleDelProcessFun(processKey);
270
+ }
271
+ })), /*#__PURE__*/React.createElement(Form.Item, {
272
+ wrapperCol: {
273
+ span: 24
274
+ }
275
+ }, form.getFieldDecorator(processKey, {
276
+ initialValue: item[processKey] || _DEFAULT_PROCESS_[processKey].code
277
+ })( /*#__PURE__*/React.createElement(EditorWrapper, {
278
+ style: {
279
+ margin: '4px 18px',
280
+ width: 'calc(100% - 36px)'
281
+ }
282
+ }, /*#__PURE__*/React.createElement(JSEditor, {
283
+ options: _EDITOR_OPTIONS,
284
+ onChange: function onChange(code) {
285
+ return handleEditorValueChange(processKey, code);
286
+ }
287
+ }, item[processKey] || _DEFAULT_PROCESS_[processKey].code))))) : null;
288
+ });
289
+ var menu = useCreation(function () {
290
+ return /*#__PURE__*/React.createElement(Menu, {
291
+ onClick: handleAddProcessFun
292
+ }, /*#__PURE__*/React.createElement(Menu.Item, {
293
+ key: "willFetch"
294
+ }, _DEFAULT_PROCESS_.willFetch.title), /*#__PURE__*/React.createElement(Menu.Item, {
295
+ key: "didFetch"
296
+ }, _DEFAULT_PROCESS_.didFetch.title), /*#__PURE__*/React.createElement(Menu.Item, {
297
+ key: "onError"
298
+ }, _DEFAULT_PROCESS_.onError.title));
299
+ }, []);
300
+ return /*#__PURE__*/React.createElement(StyledForm, {
301
+ layout: "horizontal",
302
+ labelCol: {
303
+ span: 6
304
+ },
305
+ wrapperCol: {
306
+ span: 17
307
+ },
308
+ hideRequiredMark: true
309
+ }, getBasicFormItem(form, item), /*#__PURE__*/React.createElement(Form.Item, {
310
+ label: formatMessage({
311
+ id: "".concat(_I18N_PREFIX_, ".auto"),
312
+ label: '自动加载'
313
+ })
314
+ }, form.getFieldDecorator('data.auto', {
315
+ valuePropName: 'checked',
316
+ initialValue: Boolean((_item$data = item.data) === null || _item$data === void 0 ? void 0 : _item$data.auto)
317
+ })( /*#__PURE__*/React.createElement(Switch, {
318
+ size: "small"
319
+ }))), form.getFieldValue('data.auto') ? /*#__PURE__*/React.createElement(Form.Item, {
320
+ label: formatMessage({
321
+ id: "".concat(_I18N_PREFIX_, ".taskType"),
322
+ label: '加载方式'
323
+ })
324
+ }, form.getFieldDecorator('data.taskType', {
325
+ initialValue: ((_item$data2 = item.data) === null || _item$data2 === void 0 ? void 0 : _item$data2.taskType) || 'parallel'
326
+ })( /*#__PURE__*/React.createElement(StyledSegmented, {
327
+ size: "small",
328
+ options: _TASK_TYPE_OPTIONS
329
+ }))) : null, /*#__PURE__*/React.createElement(Form.Item, {
330
+ label: formatMessage({
331
+ id: "".concat(_I18N_PREFIX_, ".url"),
332
+ label: '请求地址'
333
+ })
334
+ }, form.getFieldDecorator('data.url', {
335
+ initialValue: ((_item$data3 = item.data) === null || _item$data3 === void 0 ? void 0 : _item$data3.url) || ''
336
+ })( /*#__PURE__*/React.createElement(EditorWrapper, null, /*#__PURE__*/React.createElement(VisionEditor, {
337
+ options: _EDITOR_OPTIONS,
338
+ onChange: function onChange(code) {
339
+ return handleEditorValueChange('data.url', code);
340
+ }
341
+ }, ((_item$data4 = item.data) === null || _item$data4 === void 0 ? void 0 : _item$data4.url) || '')))), /*#__PURE__*/React.createElement(Form.Item, {
342
+ label: formatMessage({
343
+ id: "".concat(_I18N_PREFIX_, ".method"),
344
+ label: '请求方式'
345
+ })
346
+ }, form.getFieldDecorator('data.method', {
347
+ initialValue: ((_item$data5 = item.data) === null || _item$data5 === void 0 ? void 0 : _item$data5.method) || 'get'
348
+ })( /*#__PURE__*/React.createElement(StyledSegmented, {
349
+ size: "small",
350
+ options: _METHOD_OPTIONS
351
+ }))), /*#__PURE__*/React.createElement(LabelLine, null, formatMessage({
352
+ id: "".concat(_I18N_PREFIX_, ".urlParams"),
353
+ label: '请求参数'
354
+ }), /*#__PURE__*/React.createElement(TipIcon, {
355
+ type: "question-circle",
356
+ style: {
357
+ marginLeft: 4
358
+ },
359
+ title: formatMessage({
360
+ id: "".concat(_I18N_PREFIX_, ".tip.urlParams"),
361
+ label: 'URL 请求参数,格式为 {key1:value1,key2:value2} ,等价于 ?key1=value1&key2=value2'
362
+ })
363
+ })), /*#__PURE__*/React.createElement(Form.Item, {
364
+ wrapperCol: {
365
+ span: 24
366
+ }
367
+ }, form.getFieldDecorator('data.params', {
368
+ initialValue: ((_item$data6 = item.data) === null || _item$data6 === void 0 ? void 0 : _item$data6.params) || ''
369
+ })( /*#__PURE__*/React.createElement(EditorWrapper, {
370
+ style: {
371
+ margin: '4px 18px',
372
+ width: 'calc(100% - 36px)'
373
+ }
374
+ }, /*#__PURE__*/React.createElement(VisionEditor, {
375
+ options: _EDITOR_OPTIONS,
376
+ onChange: function onChange(code) {
377
+ return handleEditorValueChange('data.params', code);
378
+ }
379
+ }, ((_item$data7 = item.data) === null || _item$data7 === void 0 ? void 0 : _item$data7.params) || '')))), /*#__PURE__*/React.createElement(LabelLine, null, formatMessage({
380
+ id: "".concat(_I18N_PREFIX_, ".body"),
381
+ label: '请求体'
382
+ }), /*#__PURE__*/React.createElement(TipIcon, {
383
+ type: "question-circle",
384
+ style: {
385
+ marginLeft: 4
386
+ },
387
+ title: formatMessage({
388
+ id: "".concat(_I18N_PREFIX_, ".tip.body"),
389
+ label: '接口请求体(body),格式为 {key1:value1,key2:value2}'
390
+ })
391
+ })), /*#__PURE__*/React.createElement(Form.Item, {
392
+ wrapperCol: {
393
+ span: 24
394
+ }
395
+ }, form.getFieldDecorator('data.body', {
396
+ initialValue: ((_item$data8 = item.data) === null || _item$data8 === void 0 ? void 0 : _item$data8.body) || ''
397
+ })( /*#__PURE__*/React.createElement(EditorWrapper, {
398
+ style: {
399
+ margin: '4px 18px',
400
+ width: 'calc(100% - 36px)'
401
+ }
402
+ }, /*#__PURE__*/React.createElement(VisionEditor, {
403
+ options: _EDITOR_OPTIONS,
404
+ onChange: function onChange(code) {
405
+ return handleEditorValueChange('data.body', code);
406
+ }
407
+ }, ((_item$data9 = item.data) === null || _item$data9 === void 0 ? void 0 : _item$data9.body) || '')))), /*#__PURE__*/React.createElement(LabelLine, {
408
+ $flex: true
409
+ }, formatMessage({
410
+ id: "".concat(_I18N_PREFIX_, ".process"),
411
+ label: '数据处理'
412
+ }), /*#__PURE__*/React.createElement(Dropdown, {
413
+ overlay: menu,
414
+ trigger: ['click'],
415
+ getPopupContainer: function getPopupContainer() {
416
+ return document.getElementById('lc-design-workspace');
417
+ }
418
+ }, /*#__PURE__*/React.createElement(TipIcon, {
419
+ type: "plus"
420
+ }))), /*#__PURE__*/React.createElement("div", {
421
+ style: {
422
+ padding: '0 12px'
423
+ }
424
+ }, renderProcess('willFetch'), renderProcess('didFetch'), renderProcess('onError')), /*#__PURE__*/React.createElement(LabelLine, null, formatMessage({
425
+ id: "".concat(_I18N_PREFIX_, ".defaultValue"),
426
+ label: '默认数据'
427
+ })), /*#__PURE__*/React.createElement(Form.Item, {
428
+ wrapperCol: {
429
+ span: 24
430
+ }
431
+ }, form.getFieldDecorator('data.defaultValue', {
432
+ initialValue: (_item$data10 = item.data) === null || _item$data10 === void 0 ? void 0 : _item$data10.defaultValue
433
+ })( /*#__PURE__*/React.createElement(EditorWrapper, {
434
+ style: {
435
+ margin: '4px 18px',
436
+ width: 'calc(100% - 36px)'
437
+ }
438
+ }, /*#__PURE__*/React.createElement(VisionEditor, {
439
+ options: _EDITOR_OPTIONS,
440
+ onChange: function onChange(code) {
441
+ return handleEditorValueChange('data.defaultValue', code);
442
+ }
443
+ }, ((_item$data11 = item.data) === null || _item$data11 === void 0 ? void 0 : _item$data11.defaultValue) || '')))));
444
+ });
445
+ var VarEditor = function VarEditor(_ref7) {
446
+ var item = _ref7.item,
447
+ dispatch = _ref7.dispatch;
448
+ return item.type === 'var' ? /*#__PURE__*/React.createElement(VarForm, {
449
+ item: item,
450
+ dispatch: dispatch
451
+ }) : /*#__PURE__*/React.createElement(ApiForm, {
452
+ item: item,
453
+ dispatch: dispatch
454
+ });
455
+ };
456
+ export default VarEditor;
@@ -10,6 +10,7 @@ import * as monaco from 'monaco-editor';
10
10
  import { isNil, uniqBy, compact } from 'lodash';
11
11
  import prettier from 'prettier/standalone';
12
12
  import parserBabel from 'prettier/parser-babel';
13
+ import useCombinedRefs from "../../../engine/tools/useCombinedRefs";
13
14
  import BaseEditor from "./BaseEditor";
14
15
  function capitalizeFirstLetter(string) {
15
16
  if (isNil(string)) return null;
@@ -125,10 +126,11 @@ var prettierFormetter = function prettierFormetter(unformattedCode) {
125
126
  *
126
127
  * @returns {ReactElement} 返回一个 React 元素,其中包含了一个具有自动完成功能的 JavaScript 编辑器实例。
127
128
  */
128
- var JSEditor = /*#__PURE__*/forwardRef(function (_ref2, ref) {
129
+ var JSEditor = /*#__PURE__*/forwardRef(function (_ref2, outRef) {
129
130
  var children = _ref2.children,
130
131
  keywords = _ref2.keywords,
131
132
  rest = _objectWithoutProperties(_ref2, _excluded);
133
+ var ref = useCombinedRefs(outRef);
132
134
  useEffect(function () {
133
135
  var originalGetValue = ref.current.editor.getValue.bind(ref.current.editor);
134
136
  ref.current.editor.getValue = function () {
@@ -0,0 +1,81 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["children"];
4
+ import React, { forwardRef } from 'react';
5
+ import * as monaco from 'monaco-editor';
6
+ import BaseEditor from "./BaseEditor";
7
+
8
+ // 定义一个简单的JavaScript语言
9
+ monaco.languages.register({
10
+ id: 'vision'
11
+ });
12
+
13
+ // 定义语言的配置
14
+ monaco.languages.setLanguageConfiguration('vision', {
15
+ brackets: [['{', '}'], ['[', ']'], ['(', ')']],
16
+ autoClosingPairs: [{
17
+ open: '{',
18
+ close: '}'
19
+ }, {
20
+ open: '[',
21
+ close: ']'
22
+ }, {
23
+ open: '(',
24
+ close: ')'
25
+ }, {
26
+ open: '"',
27
+ close: '"',
28
+ notIn: ['string']
29
+ }, {
30
+ open: "'",
31
+ close: "'",
32
+ notIn: ['string']
33
+ }]
34
+ });
35
+
36
+ // 定义语言的词法规则
37
+ monaco.languages.setMonarchTokensProvider('vision', {
38
+ tokenizer: {
39
+ root: [[/\b(true|false|null)\b/, 'constant'], [/[{}()\[\]]/, '@brackets'], [/[0-9]+/, 'number'], [/["'](.*?)["']/, 'string'],
40
+ // 新增模板字符串的词法规则
41
+ [/\$\{/, 'delimiter.curly'],
42
+ // 添加对模板表达式起始的支持
43
+ [/\`/, {
44
+ token: 'string.quote',
45
+ bracket: '@open',
46
+ next: '@template_string'
47
+ }] // 处理模板字符串
48
+ ],
49
+ template_string: [[/\$\{/, {
50
+ token: 'delimiter.curly',
51
+ next: '@expression'
52
+ }],
53
+ // 模板表达式开始
54
+ [/\`/, {
55
+ token: 'string.quote',
56
+ bracket: '@close',
57
+ next: '@pop'
58
+ }],
59
+ // 模板字符串结束
60
+ [/./, 'string'] // 模板字符串内的内容
61
+ ],
62
+ expression: [[/\}/, {
63
+ token: 'delimiter.curly',
64
+ next: '@pop'
65
+ }],
66
+ // 模板表达式结束
67
+ [/[0-9]+/, 'number'],
68
+ // 在模板表达式内的数字
69
+ [/[a-zA-Z_]\w*/, 'identifier'] // 在模板表达式内的标识符
70
+ ]
71
+ }
72
+ });
73
+ var VisionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
74
+ var children = _ref.children,
75
+ rest = _objectWithoutProperties(_ref, _excluded);
76
+ return /*#__PURE__*/React.createElement(BaseEditor, _extends({
77
+ ref: ref,
78
+ language: "vision"
79
+ }, rest), children);
80
+ });
81
+ export default /*#__PURE__*/React.memo(VisionEditor);
@@ -13,6 +13,7 @@ import Collapse from "../../components/Collapse";
13
13
  import PanelItem from "../../components/PanelItem";
14
14
  import { ListEditor, ListEditorItem } from "../../components/ListEditor";
15
15
  import WidthHeight from "../../panel-section/WidthHeight";
16
+ import JSEditor from "../../panel-section/JSEditor";
16
17
  import FieldAttrsModal from "./FieldAttrsModal";
17
18
  import FieldRulesModal from "./FieldRulesModal";
18
19
  import { fetchFieldCondition, fetchAttrs } from "../../../constants/api-url";
@@ -70,6 +71,7 @@ var StyledRadio = styled(Radio.Group).withConfig({
70
71
  displayName: "StyledRadio",
71
72
  componentId: "luckda-6530__sc-1n41f3z-2"
72
73
  })(["span.ant-radio + *{padding-left:4px;padding-right:4px;}"]);
74
+ var _DEFAULT_RENDER_CODE = "function render(value, data, rowIndex, params) { \n return value;\n}";
73
75
  var SettingUI = function SettingUI(_ref) {
74
76
  var loading = _ref.loading,
75
77
  data = _ref.data,
@@ -349,7 +351,7 @@ var SettingUI = function SettingUI(_ref) {
349
351
  id: "".concat(_I18N_PREFIX_, ".required"),
350
352
  label: '是否必填'
351
353
  })
352
- }, renderCodeIcon(fieldRequired, FIELD_SCOPES.FIELD_REQUIRED)), ['table', 'tableForm'].includes && /*#__PURE__*/React.createElement(PanelItem, {
354
+ }, renderCodeIcon(fieldRequired, FIELD_SCOPES.FIELD_REQUIRED)), ['table', 'tableForm'].includes(component) && /*#__PURE__*/React.createElement(PanelItem, {
353
355
  label: formatMessage({
354
356
  id: "".concat(_I18N_PREFIX_, ".table.display"),
355
357
  label: '表格中显示'
@@ -369,7 +371,19 @@ var SettingUI = function SettingUI(_ref) {
369
371
  id: "".concat(_I18N_PREFIX_, ".readonly"),
370
372
  label: '是否只读'
371
373
  })
372
- }, renderCodeIcon(fieldReadonly, FIELD_SCOPES.FIELD_READONLY)), !isBatch ? /*#__PURE__*/React.createElement(Collapse, {
374
+ }, renderCodeIcon(fieldReadonly, FIELD_SCOPES.FIELD_READONLY)), !isBatch ? /*#__PURE__*/React.createElement(React.Fragment, null, ['table', 'tableForm'].includes(component) ? /*#__PURE__*/React.createElement(Collapse, {
375
+ label: formatMessage({
376
+ id: "".concat(_I18N_PREFIX_, ".render"),
377
+ label: '内容定制渲染'
378
+ })
379
+ }, /*#__PURE__*/React.createElement(JSEditor, {
380
+ defaultValue: fieldData.render,
381
+ onChange: function onChange(val) {
382
+ return run('render', val);
383
+ },
384
+ mustConfirm: true,
385
+ defaultCode: _DEFAULT_RENDER_CODE
386
+ })) : null, /*#__PURE__*/React.createElement(Collapse, {
373
387
  label: formatMessage({
374
388
  id: "".concat(_I18N_PREFIX_, ".defaultValue"),
375
389
  label: '默认值'
@@ -384,7 +398,7 @@ var SettingUI = function SettingUI(_ref) {
384
398
  }), "\n \u3010").concat(fieldDefaultValue.expression, "\u3011") : formatMessage({
385
399
  id: 'luckda.lowcode.painter.setting',
386
400
  label: '设置'
387
- }))) : null, !isBatch ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Collapse, {
401
+ }))), /*#__PURE__*/React.createElement(Collapse, {
388
402
  label: formatMessage({
389
403
  id: "".concat(_I18N_PREFIX_, ".rules.front"),
390
404
  label: '前端校验规则'
@@ -227,7 +227,7 @@ var FieldSetting = function FieldSetting(_ref) {
227
227
  _context.next = 34;
228
228
  break;
229
229
  case 5:
230
- if (!(key === 'align' || key === 'headerAlign' || key === 'pinned' || key === 'tip')) {
230
+ if (!(key === 'align' || key === 'headerAlign' || key === 'pinned' || key === 'tip' || key === 'render')) {
231
231
  _context.next = 9;
232
232
  break;
233
233
  }
@@ -13,6 +13,7 @@ var Painter = function Painter(_ref) {
13
13
  var className = _ref.className,
14
14
  code = _ref.code;
15
15
  return /*#__PURE__*/React.createElement(EventBusProvider, {
16
+ key: code,
16
17
  runtime: RUNTIME.DESIGN
17
18
  }, /*#__PURE__*/React.createElement(ContextProvider, {
18
19
  code: code