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.
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/uform/FormEditor.d.ts +21 -0
- package/uform/FormEditor.js +101 -0
- package/uform/FormViewer.d.ts +12 -0
- package/uform/FormViewer.js +71 -0
- package/uform/hooks/useEditor.d.ts +28 -0
- package/uform/hooks/useEditor.js +144 -0
- package/uform/hooks/useForm.d.ts +4 -0
- package/uform/hooks/useForm.js +7 -0
- package/uform/index.d.ts +5 -0
- package/uform/index.js +35 -0
- package/uform/inputs/_advance.d.ts +2 -0
- package/uform/inputs/_advance.js +57 -0
- package/uform/inputs/_date.d.ts +2 -0
- package/uform/inputs/_date.js +178 -0
- package/uform/inputs/_input.d.ts +6 -0
- package/uform/inputs/_input.js +139 -0
- package/uform/inputs/_select.d.ts +2 -0
- package/uform/inputs/_select.js +241 -0
- package/uform/inputs/_specific.d.ts +2 -0
- package/uform/inputs/_specific.js +107 -0
- package/uform/inputs/index.d.ts +6 -0
- package/uform/inputs/index.js +18 -0
- package/uform/inputs/register.d.ts +25 -0
- package/uform/inputs/register.js +47 -0
- package/uform/panel/Editor/GroupEditor.d.ts +7 -0
- package/uform/panel/Editor/GroupEditor.js +126 -0
- package/uform/panel/Editor/ListEditor.d.ts +4 -0
- package/uform/panel/Editor/ListEditor.js +77 -0
- package/uform/panel/Editor/_FieldItems.d.ts +5 -0
- package/uform/panel/Editor/_FieldItems.js +45 -0
- package/uform/panel/Editor/_GroupCollapse.d.ts +3 -0
- package/uform/panel/Editor/_GroupCollapse.js +24 -0
- package/uform/panel/Editor/_GroupDefault.d.ts +3 -0
- package/uform/panel/Editor/_GroupDefault.js +24 -0
- package/uform/panel/Editor/_GroupStep.d.ts +3 -0
- package/uform/panel/Editor/_GroupStep.js +49 -0
- package/uform/panel/Editor/_GroupTab.d.ts +3 -0
- package/uform/panel/Editor/_GroupTab.js +41 -0
- package/uform/panel/Editor/index.d.ts +3 -0
- package/uform/panel/Editor/index.js +83 -0
- package/uform/panel/Items/index.d.ts +3 -0
- package/uform/panel/Items/index.js +23 -0
- package/uform/panel/Propreties/CanvasProperties.d.ts +3 -0
- package/uform/panel/Propreties/CanvasProperties.js +42 -0
- package/uform/panel/Propreties/Component/FieldPlugin.d.ts +12 -0
- package/uform/panel/Propreties/Component/FieldPlugin.js +39 -0
- package/uform/panel/Propreties/Component/LinkAsyncFunction.d.ts +8 -0
- package/uform/panel/Propreties/Component/LinkAsyncFunction.js +171 -0
- package/uform/panel/Propreties/Component/LinkSyncFunction.d.ts +8 -0
- package/uform/panel/Propreties/Component/LinkSyncFunction.js +149 -0
- package/uform/panel/Propreties/Component/Links.d.ts +3 -0
- package/uform/panel/Propreties/Component/Links.js +114 -0
- package/uform/panel/Propreties/Component/OptionTable.d.ts +3 -0
- package/uform/panel/Propreties/Component/OptionTable.js +144 -0
- package/uform/panel/Propreties/Component/RegexpModal.d.ts +5 -0
- package/uform/panel/Propreties/Component/RegexpModal.js +74 -0
- package/uform/panel/Propreties/Component/Validate.d.ts +3 -0
- package/uform/panel/Propreties/Component/Validate.js +93 -0
- package/uform/panel/Propreties/Component/ValidateAsyncFunction.d.ts +3 -0
- package/uform/panel/Propreties/Component/ValidateAsyncFunction.js +83 -0
- package/uform/panel/Propreties/Component/ValidateSyncFunction.d.ts +3 -0
- package/uform/panel/Propreties/Component/ValidateSyncFunction.js +77 -0
- package/uform/panel/Propreties/FieldOptions.d.ts +6 -0
- package/uform/panel/Propreties/FieldOptions.js +131 -0
- package/uform/panel/Propreties/FieldProperties.d.ts +3 -0
- package/uform/panel/Propreties/FieldProperties.js +60 -0
- package/uform/panel/Propreties/GroupProperties.d.ts +3 -0
- package/uform/panel/Propreties/GroupProperties.js +17 -0
- package/uform/panel/Propreties/_ItemAdvance.d.ts +4 -0
- package/uform/panel/Propreties/_ItemAdvance.js +140 -0
- package/uform/panel/Propreties/_ItemBase.d.ts +4 -0
- package/uform/panel/Propreties/_ItemBase.js +34 -0
- package/uform/panel/Propreties/_ItemLink.d.ts +4 -0
- package/uform/panel/Propreties/_ItemLink.js +15 -0
- package/uform/panel/Propreties/_ItemValidate.d.ts +4 -0
- package/uform/panel/Propreties/_ItemValidate.js +67 -0
- package/uform/panel/Propreties/_util.d.ts +9 -0
- package/uform/panel/Propreties/_util.js +2 -0
- package/uform/plugins/index.d.ts +15 -0
- package/uform/plugins/index.js +47 -0
- package/uform/schema.d.ts +155 -0
- package/uform/schema.js +2 -0
- package/uform/utils/Const.d.ts +20 -0
- package/uform/utils/Const.js +24 -0
- package/uform/utils/Convert.d.ts +3 -0
- package/uform/utils/Convert.js +274 -0
- package/uform/utils/SchemaConvert.d.ts +6 -0
- package/uform/utils/SchemaConvert.js +169 -0
- package/uform/utils/arr.d.ts +12 -0
- 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 > 10 && value <= 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 > 10 && value <= 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,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;
|