vap1 0.1.4 → 0.1.5

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 (92) hide show
  1. package/index.d.ts +1 -1
  2. package/package.json +1 -1
  3. package/uform/FormEditor.d.ts +21 -0
  4. package/uform/FormEditor.js +101 -0
  5. package/uform/FormViewer.d.ts +12 -0
  6. package/uform/FormViewer.js +71 -0
  7. package/uform/hooks/useEditor.d.ts +28 -0
  8. package/uform/hooks/useEditor.js +144 -0
  9. package/uform/hooks/useForm.d.ts +4 -0
  10. package/uform/hooks/useForm.js +7 -0
  11. package/uform/index.d.ts +5 -0
  12. package/uform/index.js +35 -0
  13. package/uform/inputs/_advance.d.ts +2 -0
  14. package/uform/inputs/_advance.js +57 -0
  15. package/uform/inputs/_date.d.ts +2 -0
  16. package/uform/inputs/_date.js +178 -0
  17. package/uform/inputs/_input.d.ts +6 -0
  18. package/uform/inputs/_input.js +139 -0
  19. package/uform/inputs/_select.d.ts +2 -0
  20. package/uform/inputs/_select.js +241 -0
  21. package/uform/inputs/_specific.d.ts +2 -0
  22. package/uform/inputs/_specific.js +107 -0
  23. package/uform/inputs/index.d.ts +6 -0
  24. package/uform/inputs/index.js +18 -0
  25. package/uform/inputs/register.d.ts +25 -0
  26. package/uform/inputs/register.js +47 -0
  27. package/uform/panel/Editor/GroupEditor.d.ts +7 -0
  28. package/uform/panel/Editor/GroupEditor.js +126 -0
  29. package/uform/panel/Editor/ListEditor.d.ts +4 -0
  30. package/uform/panel/Editor/ListEditor.js +77 -0
  31. package/uform/panel/Editor/_FieldItems.d.ts +5 -0
  32. package/uform/panel/Editor/_FieldItems.js +45 -0
  33. package/uform/panel/Editor/_GroupCollapse.d.ts +3 -0
  34. package/uform/panel/Editor/_GroupCollapse.js +24 -0
  35. package/uform/panel/Editor/_GroupDefault.d.ts +3 -0
  36. package/uform/panel/Editor/_GroupDefault.js +24 -0
  37. package/uform/panel/Editor/_GroupStep.d.ts +3 -0
  38. package/uform/panel/Editor/_GroupStep.js +49 -0
  39. package/uform/panel/Editor/_GroupTab.d.ts +3 -0
  40. package/uform/panel/Editor/_GroupTab.js +41 -0
  41. package/uform/panel/Editor/index.d.ts +3 -0
  42. package/uform/panel/Editor/index.js +83 -0
  43. package/uform/panel/Items/index.d.ts +3 -0
  44. package/uform/panel/Items/index.js +23 -0
  45. package/uform/panel/Propreties/CanvasProperties.d.ts +3 -0
  46. package/uform/panel/Propreties/CanvasProperties.js +42 -0
  47. package/uform/panel/Propreties/Component/FieldPlugin.d.ts +12 -0
  48. package/uform/panel/Propreties/Component/FieldPlugin.js +39 -0
  49. package/uform/panel/Propreties/Component/LinkAsyncFunction.d.ts +8 -0
  50. package/uform/panel/Propreties/Component/LinkAsyncFunction.js +171 -0
  51. package/uform/panel/Propreties/Component/LinkSyncFunction.d.ts +8 -0
  52. package/uform/panel/Propreties/Component/LinkSyncFunction.js +149 -0
  53. package/uform/panel/Propreties/Component/Links.d.ts +3 -0
  54. package/uform/panel/Propreties/Component/Links.js +114 -0
  55. package/uform/panel/Propreties/Component/OptionTable.d.ts +3 -0
  56. package/uform/panel/Propreties/Component/OptionTable.js +144 -0
  57. package/uform/panel/Propreties/Component/RegexpModal.d.ts +5 -0
  58. package/uform/panel/Propreties/Component/RegexpModal.js +74 -0
  59. package/uform/panel/Propreties/Component/Validate.d.ts +3 -0
  60. package/uform/panel/Propreties/Component/Validate.js +93 -0
  61. package/uform/panel/Propreties/Component/ValidateAsyncFunction.d.ts +3 -0
  62. package/uform/panel/Propreties/Component/ValidateAsyncFunction.js +83 -0
  63. package/uform/panel/Propreties/Component/ValidateSyncFunction.d.ts +3 -0
  64. package/uform/panel/Propreties/Component/ValidateSyncFunction.js +77 -0
  65. package/uform/panel/Propreties/FieldOptions.d.ts +6 -0
  66. package/uform/panel/Propreties/FieldOptions.js +131 -0
  67. package/uform/panel/Propreties/FieldProperties.d.ts +3 -0
  68. package/uform/panel/Propreties/FieldProperties.js +60 -0
  69. package/uform/panel/Propreties/GroupProperties.d.ts +3 -0
  70. package/uform/panel/Propreties/GroupProperties.js +17 -0
  71. package/uform/panel/Propreties/_ItemAdvance.d.ts +4 -0
  72. package/uform/panel/Propreties/_ItemAdvance.js +140 -0
  73. package/uform/panel/Propreties/_ItemBase.d.ts +4 -0
  74. package/uform/panel/Propreties/_ItemBase.js +34 -0
  75. package/uform/panel/Propreties/_ItemLink.d.ts +4 -0
  76. package/uform/panel/Propreties/_ItemLink.js +15 -0
  77. package/uform/panel/Propreties/_ItemValidate.d.ts +4 -0
  78. package/uform/panel/Propreties/_ItemValidate.js +67 -0
  79. package/uform/panel/Propreties/_util.d.ts +9 -0
  80. package/uform/panel/Propreties/_util.js +2 -0
  81. package/uform/plugins/index.d.ts +15 -0
  82. package/uform/plugins/index.js +47 -0
  83. package/uform/schema.d.ts +155 -0
  84. package/uform/schema.js +2 -0
  85. package/uform/utils/Const.d.ts +20 -0
  86. package/uform/utils/Const.js +24 -0
  87. package/uform/utils/Convert.d.ts +3 -0
  88. package/uform/utils/Convert.js +274 -0
  89. package/uform/utils/SchemaConvert.d.ts +6 -0
  90. package/uform/utils/SchemaConvert.js +169 -0
  91. package/uform/utils/arr.d.ts +12 -0
  92. package/uform/utils/arr.js +175 -0
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const useEditor_1 = require("../../hooks/useEditor");
9
+ const index_1 = require("../../../index");
10
+ exports.default = () => {
11
+ const editor = (0, useEditor_1.useEditor)();
12
+ const { form: { fields, isGroup, groupType, layout, tip, size } } = editor;
13
+ return react_1.default.createElement(react_1.default.Fragment, null,
14
+ react_1.default.createElement(index_1.Form.Item, { label: "\u5206\u7EC4\u6A21\u5F0F" }, fields.length > 0 ? react_1.default.createElement(index_1.Popover, { title: "\u5206\u7EC4\u6A21\u5F0F\u8BF4\u660E", content: react_1.default.createElement(index_1.Alert, { message: "\u5982\u679C\u9700\u8981\u5F00\u542F/\u5173\u95ED\u5206\u7EC4\u6A21\u5F0F\uFF0C\u8BF7\u9009\u5220\u9664\u5168\u90E8\u8868\u5355\u5B57\u6BB5", type: "warning" }) },
15
+ react_1.default.createElement(index_1.Switch, { checked: isGroup, checkedChildren: "\u5F00\u542F", unCheckedChildren: "\u5173\u95ED", size: "small", disabled: true })) : react_1.default.createElement(index_1.Switch, { checked: isGroup, checkedChildren: "\u5F00\u542F", unCheckedChildren: "\u5173\u95ED", onChange: isGroup => editor.setFormProperties({ isGroup }), size: "small" })),
16
+ isGroup && react_1.default.createElement(index_1.Form.Item, { label: "\u5206\u7EC4\u6A21\u5F0F" },
17
+ react_1.default.createElement(index_1.Radio.Group, { value: groupType || '', onChange: evt => editor.setFormProperties({ groupType: evt.target.value }), size: "small", buttonStyle: "solid", optionType: "button" },
18
+ react_1.default.createElement(index_1.Radio.Button, { value: "" }, "\u9ED8\u8BA4"),
19
+ react_1.default.createElement(index_1.Radio.Button, { value: "step" }, "\u8FDB\u5EA6"),
20
+ react_1.default.createElement(index_1.Radio.Button, { value: "collapse" }, "\u624B\u98CE\u7434"),
21
+ react_1.default.createElement(index_1.Radio.Button, { value: "tabs" }, "\u6807\u7B7E"))),
22
+ react_1.default.createElement(index_1.Form.Item, { label: "\u5217\u6570\u91CF", extra: "\u8BF4\u660E\uFF1A\u81EA\u52A8\u6839\u636E\u5B57\u6BB5\u6570\u636E\u81EA\u52A8\u663E\u793A" },
23
+ react_1.default.createElement(index_1.Radio.Group, { value: layout || '', onChange: evt => editor.setFormProperties({ layout: evt.target.value }), size: "small", buttonStyle: "solid", optionType: "button" },
24
+ react_1.default.createElement(index_1.Radio.Button, { value: "" }, "\u81EA\u52A8"),
25
+ react_1.default.createElement(index_1.Radio.Button, { value: "simple" }, "\u4E00\u5217"),
26
+ react_1.default.createElement(index_1.Radio.Button, { value: "common" }, "\u4E8C\u5217"),
27
+ react_1.default.createElement(index_1.Radio.Button, { value: "compress" }, "\u4E09\u5217"))),
28
+ react_1.default.createElement(index_1.Form.Item, { label: "\u5C3A\u5BF8" },
29
+ react_1.default.createElement(index_1.Radio.Group, { value: size, size: "small", onChange: evt => editor.setFormProperties({ size: evt.target.value }), buttonStyle: "solid", optionType: "button" },
30
+ react_1.default.createElement(index_1.Radio.Button, { value: undefined }, "\u6839\u636E\u76AE\u80A4"),
31
+ react_1.default.createElement(index_1.Radio.Button, { value: "small" }, "\u5C0F"),
32
+ react_1.default.createElement(index_1.Radio.Button, { value: "middle" }, "\u4E2D"),
33
+ react_1.default.createElement(index_1.Radio.Button, { value: "large" }, "\u5927"))),
34
+ react_1.default.createElement(index_1.Form.Item, { label: "\u63D0\u793A\u7C7B\u578B" },
35
+ react_1.default.createElement(index_1.Radio.Group, { value: (tip && tip.type) ? tip.type : 'info', size: "small", onChange: evt => editor.setFormProperties({ tip: lodash_1.default.assign({ text: '', type: 'info' }, tip, { type: evt.target.value }) }), buttonStyle: "solid", optionType: "button" },
36
+ react_1.default.createElement(index_1.Radio.Button, { value: "info" }, "\u9ED8\u8BA4"),
37
+ react_1.default.createElement(index_1.Radio.Button, { value: "success" }, "\u6210\u529F"),
38
+ react_1.default.createElement(index_1.Radio.Button, { value: "warning" }, "\u8B66\u544A"),
39
+ react_1.default.createElement(index_1.Radio.Button, { value: "error" }, "\u9519\u8BEF"))),
40
+ react_1.default.createElement(index_1.Form.Item, { label: "\u63D0\u793A\u6587\u6848" },
41
+ react_1.default.createElement(index_1.Input.TextArea, { value: (tip && tip.text) ? tip.text : '', placeholder: "\u8BF7\u8F93\u5165\u63D0\u793A\u6587\u6848", onChange: evt => editor.setFormProperties({ tip: lodash_1.default.assign({ type: 'info', }, tip, { text: evt.target.value }) }) })));
42
+ };
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { PluginSlot } from '../../../plugins';
3
+ import type { ItemPanelProps } from '../_util';
4
+ /**
5
+ *
6
+ * 插件参数
7
+ */
8
+ type PluginProps = ItemPanelProps & {
9
+ slot: PluginSlot;
10
+ };
11
+ export declare const FieldPlugin: React.FC<PluginProps>;
12
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FieldPlugin = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const index_1 = require("../../../../index");
29
+ const utils_1 = require("../../../../utils");
30
+ const FieldPlugin = (props) => {
31
+ const plugins = (0, react_1.useMemo)(() => {
32
+ return [];
33
+ }, [props.field.type, props.slot]);
34
+ if (plugins.length == 0)
35
+ return utils_1.Const.NONE;
36
+ return react_1.default.createElement(react_1.default.Fragment, null,
37
+ react_1.default.createElement(index_1.Divider, { orientation: "left" }, "\u6269\u5C55\u5C5E\u6027"));
38
+ };
39
+ exports.FieldPlugin = FieldPlugin;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { UModalProps } from '../../../../index';
3
+ import type { FormItem, FormGroup } from "../../../schema";
4
+ export declare const LinkAsyncFunction: React.FC<Omit<UModalProps, 'fields'> & {
5
+ field: FormItem;
6
+ fields: (FormItem[]) | (FormGroup[]);
7
+ isGroup: boolean;
8
+ }>;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.LinkAsyncFunction = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const dayjs_1 = __importDefault(require("dayjs"));
33
+ const index_1 = require("../../../../index");
34
+ const CodeTip = () => react_1.default.createElement(index_1.Popover, { overlayStyle: { width: 540 }, content: react_1.default.createElement(react_1.default.Fragment, null,
35
+ react_1.default.createElement("h5", null, "\u793A\u4F8B\u4EE3\u78011\uFF0C\u6570\u5B57\u7C7B\u578B"),
36
+ react_1.default.createElement("pre", { style: { border: '1px solid #ccc', padding: '6px 12px 2px', backgroundColor: '#f1e8af' }, dangerouslySetInnerHTML: {
37
+ __html: `//示例1: 只联动值
38
+ // 打印值,用于调试,不影响结果
39
+ console.log(value);
40
+ // 支持 lodash: 变量名 : _
41
+ _.map([1,2,3,4],console.log);
42
+ // 打印结果
43
+ print(value &gt; 10 && value &lt;= 100);
44
+ //说明:必须使用 print(true/false) 打印出结果`
45
+ } }),
46
+ react_1.default.createElement("h5", null, "\u793A\u4F8B\u4EE3\u78012\uFF0C\u5B57\u7B26\u4E32\u7C7B\u578B"),
47
+ react_1.default.createElement("pre", { style: { border: '1px solid #ccc', padding: '6px 12px 2px', backgroundColor: '#f1e8af' }, dangerouslySetInnerHTML: {
48
+ __html: `//示例2: 联动值,选项,显示状态,置灰状态,必选状态
49
+ // 说明:不能使用 return 语句,使用 if/else 控制
50
+ if( value=='' || value==null ){
51
+ print(false)
52
+ }else if(value.length < 8){
53
+ print(false);
54
+ }else if(_.endsWith(value,'.jpg')){
55
+ print(true);
56
+ }else if(/xxoo/.test(value)){
57
+ print(true);
58
+ }else if(value.substring(3).indexOf('abc')){
59
+ print(true)
60
+ }else{
61
+ print(false)
62
+ }`
63
+ } })) },
64
+ react_1.default.createElement("a", null, "\u53C2\u8003\u793A\u4F8B"));
65
+ const LinkAsyncFunction = props => {
66
+ const targetOptions = (0, react_1.useMemo)(() => {
67
+ let options = [];
68
+ const used = new Set();
69
+ used.add(props.field.field);
70
+ (props.field._links || []).map(item => used.add(item.field));
71
+ if (props.isGroup) {
72
+ props.fields.map((group) => group.fields.map(f => {
73
+ if (used.has(f.field))
74
+ return;
75
+ options.push({ label: react_1.default.createElement("span", null,
76
+ f.title,
77
+ " ",
78
+ react_1.default.createElement("small", null,
79
+ "(",
80
+ f.field,
81
+ ")")), value: f.field });
82
+ }));
83
+ }
84
+ else {
85
+ props.fields.map(f => {
86
+ if (used.has(f.field))
87
+ return;
88
+ options.push({ label: react_1.default.createElement("span", null,
89
+ f.title,
90
+ " ",
91
+ react_1.default.createElement("small", null,
92
+ "(",
93
+ f.field,
94
+ ")")), value: f.field });
95
+ });
96
+ }
97
+ return options;
98
+ }, [props.field._links, props.fields]);
99
+ return react_1.default.createElement(index_1.UFormModal, { tip: react_1.default.createElement(index_1.Alert, { type: "info", message: react_1.default.createElement("ul", { style: { padding: 0, margin: 0 } },
100
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
101
+ "\u8054\u52A8\u65B9\u6CD5\u8BF4\u660E\uFF1A",
102
+ react_1.default.createElement(CodeTip, null)),
103
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
104
+ "\u8054\u52A8\u503C\u4E3A\u53D8\u91CF ",
105
+ react_1.default.createElement("b", null, "value")),
106
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
107
+ "\u8054\u52A8\u8868\u5355\u53D8\u91CF ",
108
+ react_1.default.createElement("b", null, "from")),
109
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
110
+ "\u65B9\u6CD5\u6269\u5C55\u4F9D\u8D56 \uFF1Alodash : ",
111
+ react_1.default.createElement("b", null, "_"),
112
+ " , dayjs:",
113
+ react_1.default.createElement("b", null, "dayjs")),
114
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
115
+ "\u65B9\u6CD5\u8FD4\u56DE\u6253\u5370 \uFF1A",
116
+ react_1.default.createElement("b", null, "print"))) }), title: props.isEdit ? '编辑联动方法' : '添加联动方法', default: { method: 'GET', url: '/api/${value}' }, fields: [
117
+ { field: 'field', title: '被联动字段', required: true, options: targetOptions, type: 'select' },
118
+ {
119
+ field: 'url,method', title: '请求',
120
+ type: 'input-with-select',
121
+ config: { selectProps: { style: { width: 96 }, placeholder: '请求方法' } },
122
+ required: true,
123
+ options: [{ label: 'GET', value: 'GET' }, { label: 'POST', value: 'POST' }],
124
+ link: [{
125
+ field: 'param',
126
+ call: (value) => {
127
+ if (value.method == 'POST') {
128
+ return {
129
+ show: true, required: true, value: `{
130
+ "value":"\${value}"
131
+ }`
132
+ };
133
+ }
134
+ return { show: false, required: true, value: '' };
135
+ }
136
+ }]
137
+ },
138
+ { field: 'param', title: 'POST传参', type: 'textarea', show: false, config: { rows: 4 }, ignore: true },
139
+ { field: 'code', title: '联动代码', required: true, type: 'textarea', ignore: true, config: { rows: 8 } },
140
+ ], data: props.data, isEdit: props.isEdit, open: props.open, onCancel: props.onCancel, onOk: data => {
141
+ const fn = `<%
142
+ ${data.code}
143
+ %>`;
144
+ try {
145
+ var compiled = lodash_1.default.template(fn, { imports: { _: lodash_1.default, dayjs: dayjs_1.default } });
146
+ try {
147
+ let result = compiled({ value: '1', form: {}, extra: null, response: { list: [], data: {}, code: '0', message: '' } });
148
+ if (typeof result != 'string')
149
+ throw (new Error());
150
+ if (result === '')
151
+ throw (new Error('没有检测到返回值'));
152
+ const test = JSON.parse(result);
153
+ if (lodash_1.default.isPlainObject(test)) {
154
+ index_1.message.success('测试结果 为返回对象: ' + result);
155
+ }
156
+ else {
157
+ throw (new Error());
158
+ }
159
+ }
160
+ catch (e) {
161
+ index_1.message.success('测试结果 为抛出值: ' + e);
162
+ }
163
+ props.onOk(data);
164
+ }
165
+ catch (e) {
166
+ console.log(e);
167
+ index_1.message.error('代码测试失败');
168
+ }
169
+ } });
170
+ };
171
+ exports.LinkAsyncFunction = LinkAsyncFunction;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { UModalProps } from '../../../../index';
3
+ import type { FormItem, FormGroup } from "../../../schema";
4
+ export declare const LinkSyncFunction: React.FC<Omit<UModalProps, 'fields'> & {
5
+ field: FormItem;
6
+ fields: (FormItem[]) | (FormGroup[]);
7
+ isGroup: boolean;
8
+ }>;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.LinkSyncFunction = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const dayjs_1 = __importDefault(require("dayjs"));
33
+ const index_1 = require("../../../../index");
34
+ const CodeTip = () => react_1.default.createElement(index_1.Popover, { overlayStyle: { width: 540 }, content: react_1.default.createElement(react_1.default.Fragment, null,
35
+ react_1.default.createElement("h5", null, "\u793A\u4F8B\u4EE3\u78011\uFF0C\u6570\u5B57\u7C7B\u578B"),
36
+ react_1.default.createElement("pre", { style: { border: '1px solid #ccc', padding: '6px 12px 2px', backgroundColor: '#f1e8af' }, dangerouslySetInnerHTML: {
37
+ __html: `//示例1: 只联动值
38
+ // 打印值,用于调试,不影响结果
39
+ console.log(value);
40
+ // 支持 lodash: 变量名 : _
41
+ _.map([1,2,3,4],console.log);
42
+ // 打印结果
43
+ print(value &gt; 10 && value &lt;= 100);
44
+ //说明:必须使用 print(true/false) 打印出结果`
45
+ } }),
46
+ react_1.default.createElement("h5", null, "\u793A\u4F8B\u4EE3\u78012\uFF0C\u5B57\u7B26\u4E32\u7C7B\u578B"),
47
+ react_1.default.createElement("pre", { style: { border: '1px solid #ccc', padding: '6px 12px 2px', backgroundColor: '#f1e8af' }, dangerouslySetInnerHTML: {
48
+ __html: `//示例2: 联动值,选项,显示状态,置灰状态,必选状态
49
+ // 说明:不能使用 return 语句,使用 if/else 控制
50
+ if( value=='' || value==null ){
51
+ print(false)
52
+ }else if(value.length < 8){
53
+ print(false);
54
+ }else if(_.endsWith(value,'.jpg')){
55
+ print(true);
56
+ }else if(/xxoo/.test(value)){
57
+ print(true);
58
+ }else if(value.substring(3).indexOf('abc')){
59
+ print(true)
60
+ }else{
61
+ print(false)
62
+ }`
63
+ } })) },
64
+ react_1.default.createElement("a", null, "\u53C2\u8003\u793A\u4F8B"));
65
+ const LinkSyncFunction = props => {
66
+ const targetOptions = (0, react_1.useMemo)(() => {
67
+ let options = [];
68
+ const used = new Set();
69
+ used.add(props.field.field);
70
+ (props.field._links || []).map(item => used.add(item.field));
71
+ if (props.isGroup) {
72
+ props.fields.map((group) => group.fields.map(f => {
73
+ if (used.has(f.field))
74
+ return;
75
+ options.push({ label: react_1.default.createElement("span", null,
76
+ f.title,
77
+ " ",
78
+ react_1.default.createElement("small", null,
79
+ "(",
80
+ f.field,
81
+ ")")), value: f.field });
82
+ }));
83
+ }
84
+ else {
85
+ props.fields.map(f => {
86
+ if (used.has(f.field))
87
+ return;
88
+ options.push({ label: react_1.default.createElement("span", null,
89
+ f.title,
90
+ " ",
91
+ react_1.default.createElement("small", null,
92
+ "(",
93
+ f.field,
94
+ ")")), value: f.field });
95
+ });
96
+ }
97
+ return options;
98
+ }, [props.field._links, props.fields]);
99
+ return react_1.default.createElement(index_1.UFormModal, { tip: react_1.default.createElement(index_1.Alert, { type: "info", message: react_1.default.createElement("ul", { style: { padding: 0, margin: 0 } },
100
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
101
+ "\u8054\u52A8\u65B9\u6CD5\u8BF4\u660E\uFF1A",
102
+ react_1.default.createElement(CodeTip, null)),
103
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
104
+ "\u8054\u52A8\u503C\u4E3A\u53D8\u91CF ",
105
+ react_1.default.createElement("b", null, "value")),
106
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
107
+ "\u8054\u52A8\u8868\u5355\u53D8\u91CF ",
108
+ react_1.default.createElement("b", null, "from")),
109
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
110
+ "\u65B9\u6CD5\u6269\u5C55\u4F9D\u8D56 \uFF1Alodash : ",
111
+ react_1.default.createElement("b", null, "_"),
112
+ " , dayjs:",
113
+ react_1.default.createElement("b", null, "dayjs")),
114
+ react_1.default.createElement("li", { style: { listStyle: 'none' } },
115
+ "\u65B9\u6CD5\u8FD4\u56DE\u6253\u5370 \uFF1A",
116
+ react_1.default.createElement("b", null, "print"))) }), title: props.isEdit ? '编辑联动方法' : '添加联动方法', fields: [
117
+ { field: 'field', title: '被联动字段', required: true, options: targetOptions, type: 'select' },
118
+ { field: 'code', title: '联动代码', required: true, type: 'textarea', ignore: true, config: { rows: 8 } },
119
+ ], data: props.data, isEdit: props.isEdit, open: props.open, onCancel: props.onCancel, onOk: data => {
120
+ const fn = `<%
121
+ ${data.code}
122
+ %>`;
123
+ try {
124
+ var compiled = lodash_1.default.template(fn, { imports: { _: lodash_1.default, dayjs: dayjs_1.default } });
125
+ let result = compiled({ value: '199', form: {}, extra: null });
126
+ if (typeof result != 'string')
127
+ throw (new Error());
128
+ if (result === '')
129
+ throw (new Error('没有检测到返回值'));
130
+ try {
131
+ const test = JSON.parse(result);
132
+ if (lodash_1.default.isPlainObject(test)) {
133
+ index_1.message.success('测试结果 为返回对象: ' + result);
134
+ }
135
+ else {
136
+ throw (new Error());
137
+ }
138
+ }
139
+ catch (e) {
140
+ index_1.message.success('测试结果 为单返回值: ' + result);
141
+ }
142
+ props.onOk(data);
143
+ }
144
+ catch (e) {
145
+ index_1.message.error('代码测试失败');
146
+ }
147
+ } });
148
+ };
149
+ exports.LinkSyncFunction = LinkSyncFunction;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { ItemPanelProps } from '../_util';
3
+ export declare const Links: (props: ItemPanelProps) => React.JSX.Element;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Links = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const index_1 = require("../../../../index");
33
+ const hooks_1 = require("../../../../hooks");
34
+ const useEditor_1 = require("../../../hooks/useEditor");
35
+ const utils_1 = require("../../../../utils");
36
+ const LinkSyncFunction_1 = require("./LinkSyncFunction");
37
+ const LinkAsyncFunction_1 = require("./LinkAsyncFunction");
38
+ const callRender = (rule) => {
39
+ if (rule.async) {
40
+ return react_1.default.createElement("span", null,
41
+ react_1.default.createElement(index_1.Tag, { color: "cyan-inverse" }, "\u8BF7\u6C42"),
42
+ " ",
43
+ rule.method,
44
+ " ",
45
+ rule.url);
46
+ }
47
+ return react_1.default.createElement("span", null,
48
+ react_1.default.createElement(index_1.Tag, { color: "magenta-inverse" }, "\u65B9\u6CD5"));
49
+ };
50
+ const Links = (props) => {
51
+ const { form: { fields, isGroup } } = (0, useEditor_1.useEditor)();
52
+ const fieldsCount = (0, react_1.useMemo)(() => {
53
+ if (fields == null || fields.length == 0)
54
+ return 0;
55
+ if (!isGroup)
56
+ return fields.length;
57
+ return lodash_1.default.sum(fields.map(group => group.fields.length));
58
+ }, [fields]);
59
+ const { field, setFieldProperties } = props;
60
+ const syncFn = (0, hooks_1.useOpenState)();
61
+ const asyncFn = (0, hooks_1.useOpenState)();
62
+ const addLink = (0, react_1.useCallback)((data) => setFieldProperties('_links', utils_1.ArrayUtil.add(field._links, data)), [field._links]);
63
+ const editLink = (0, react_1.useCallback)((data) => setFieldProperties('_links', utils_1.ArrayUtil.update(field._links, data)), [field._links]);
64
+ const delLink = (0, react_1.useCallback)((data) => setFieldProperties('_links', utils_1.ArrayUtil.del(field._links, data.id)), [field._links]);
65
+ return react_1.default.createElement(react_1.default.Fragment, null,
66
+ react_1.default.createElement(index_1.STable, { list: field._links || [], actionBar: [
67
+ {
68
+ label: '异步联动', icon: 'plus', onClick: () => {
69
+ if (fieldsCount <= 1) {
70
+ index_1.message.warning('没有可以被联动的字段');
71
+ return;
72
+ }
73
+ asyncFn.show(null, false);
74
+ }
75
+ },
76
+ {
77
+ label: '同步联动', type: 'primary', icon: 'plus', onClick: () => {
78
+ if (fieldsCount <= 1) {
79
+ index_1.message.warning('没有可以被联动的字段');
80
+ return;
81
+ }
82
+ syncFn.show(null, false);
83
+ }
84
+ },
85
+ ], showIndex: false, pagination: false, columns: [
86
+ { title: '目标字段', dataIndex: 'field' },
87
+ { title: '方法', render: callRender },
88
+ index_1.STable.COL_OPERACTION((record) => [
89
+ react_1.default.createElement(index_1.STable.EDIT, { onClick: () => {
90
+ record.async ? asyncFn.show(record, true) : syncFn.show(record, true);
91
+ } }),
92
+ react_1.default.createElement(index_1.STable.DELETE, { onClick: () => delLink(record) }),
93
+ ])
94
+ ] }),
95
+ react_1.default.createElement(LinkSyncFunction_1.LinkSyncFunction, { open: syncFn.open, onCancel: syncFn.hide, isEdit: syncFn.extra, field: field, fields: fields, isGroup: isGroup, data: syncFn.data, onOk: (data) => {
96
+ syncFn.hide();
97
+ if (syncFn.extra) {
98
+ editLink(data);
99
+ }
100
+ else {
101
+ addLink(Object.assign(Object.assign({}, data), { async: false, id: utils_1.StringUtil.genKey() }));
102
+ }
103
+ } }),
104
+ react_1.default.createElement(LinkAsyncFunction_1.LinkAsyncFunction, { open: asyncFn.open, onCancel: asyncFn.hide, isEdit: asyncFn.extra, field: field, fields: fields, isGroup: isGroup, data: asyncFn.data, onOk: (data) => {
105
+ asyncFn.hide();
106
+ if (asyncFn.extra) {
107
+ editLink(data);
108
+ }
109
+ else {
110
+ addLink(Object.assign(Object.assign({}, data), { async: true, id: utils_1.StringUtil.genKey() }));
111
+ }
112
+ } }));
113
+ };
114
+ exports.Links = Links;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { ItemPanelProps } from '../_util';
3
+ export declare const OptionTable: (props: ItemPanelProps) => React.JSX.Element;