Skip to content

Commit 2e55bf9

Browse files
authored
Merge pull request #1461 from alibaba/schema-builder
Schema builder 代码开源
2 parents d9027aa + 387996e commit 2e55bf9

29 files changed

+1628
-6
lines changed

docs/schema-builder/api.md

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ mobile: false
3232
## Btn
3333
| 属性 | 描述 | 类型 | 默认值 |
3434
| -------------------- | ------------------------------------------------------------------------ | ------------------- | --------- |
35+
| key | 按钮 key | `string` | 必填 |
3536
| text | 按钮文案 | `string` | - |
3637
| order | 按钮顺序 | `number` | - |
3738
| onClick | 按钮点击回调函数 | `(schema) => void` | - |

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
"@vitest/coverage-c8": "^0.25.8",
6161
"@vitest/ui": "^0.25.7",
6262
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.7",
63-
"antd": "^5.x",
63+
"antd": "^4.x",
6464
"babel-jest": "^27.4.4",
6565
"babel-plugin-import": "^1.13.0",
6666
"babel-plugin-no-debugger": "^0.0.1",

tools/schema-builder/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@xrenders/schema-builder",
3-
"version": "1.0.0-alpha.17",
3+
"version": "1.0.0-alpha.18",
44
"description": "通过 JSON Schema 生成标准 Form,常用于自定义搭建配置界面生成",
55
"keywords": [
66
"Form",

tools/schema-builder/src/createIframe.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const createIframeContent = () => {
1111
<link href="https://alifd.alicdn.com/npm/@alifd/[email protected]/dist/next.var.min.css" rel="stylesheet" />
1212
<link rel="stylesheet" href="https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/css/engine-core.css" />
1313
<link rel="stylesheet" href="https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/css/engine-ext.css" />
14-
<link rel="stylesheet" href="https://g.alicdn.com/fone-lowcode/fr-generator/1.0.14/css/index.css" />
14+
<link rel="stylesheet" href="https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/css/index.css" />
1515
1616
<script>
1717
window.React = window.parent.React;
@@ -25,12 +25,11 @@ const createIframeContent = () => {
2525
<script src="https://g.alicdn.com/code/lib/alifd__next/1.23.24/next.min.js"></script>
2626
<script crossorigin="anonymous" src="https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/js/engine-core.js"></script>
2727
<script crossorigin="anonymous" src="https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/js/engine-ext.js"></script>
28-
2928
</head>
3029
3130
<body>
3231
<div id="lce-container"></div>
33-
<script type="text/javascript" src="https://g.alicdn.com/fone-lowcode/fr-generator/1.0.14/js/index.js"></script>
32+
<script type="text/javascript" src="https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/js/index.js"></script>
3433
</body>
3534
</html>
3635
`;

tools/schema-builder/src/main.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import React, { useEffect, useRef, useImperativeHandle, forwardRef } from 'react';
22
import createIframe from './createIframe';
3+
import * as defaultSetting from './settings';
4+
35
import { TSchemaBuilder } from './type';
46

57
let iframe: any;
@@ -36,7 +38,10 @@ const Design = (props: TSchemaBuilder, ref: any) => {
3638
}
3739

3840
iframe?.contentWindow?.__FR_ENGINE__?.init({
39-
settings,
41+
settings: {
42+
...defaultSetting,
43+
...settings
44+
},
4045
widgets,
4146
// recordEnable: true,
4247
logo: {
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// 常用组件配置
2+
export { default as Input } from './meta/input';
3+
export { default as Number } from './meta/number';
4+
export { default as Select } from './meta/select';
5+
export { default as Radio } from './meta/radio';
6+
export { default as Checkbox } from './meta/checkbox';
7+
export { default as Checkboxes } from './meta/checkboxes';
8+
export { default as Textarea } from './meta/textarea';
9+
export { default as DatePicker } from './meta/date';
10+
export { default as DateRange } from './meta/dateRange';
11+
export { default as TimePicker } from './meta/time';
12+
export { default as TimeRange } from './meta/timeRange';
13+
export { default as Rate } from './meta/rate';
14+
export { default as Switch } from './meta/switch';
15+
export { default as Slider } from './meta/slider';
16+
17+
// 其他组件配置
18+
export { default as Color } from './meta/color';
19+
export { default as ImageInput } from './meta/imageInput';
20+
export { default as UrlInput } from './meta/urlInput';
21+
export { default as TreeSelect } from './meta/treeSelect';
22+
23+
// 容器组件配置
24+
export { default as Form } from './meta/form';
25+
export { default as card } from './meta/card';
26+
export { default as CardList } from './meta/cardList';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import { createMeta } from '../utils';
2+
3+
const props: any = [
4+
{
5+
name: 'title',
6+
title: { label: '标题', tip: 'title | 卡片主题' },
7+
setter: 'StringSetter'
8+
},
9+
{
10+
name: 'code',
11+
title: { label: '字段名', tip: 'key | 字段名' },
12+
setter: 'StringSetter',
13+
},
14+
{
15+
name: 'description',
16+
title: { label: '描述', tip: 'description | 卡片的描述' },
17+
setter: 'StringSetter'
18+
},
19+
{
20+
name: 'column',
21+
title: {
22+
label: '一行多列',
23+
tip: 'column | 表单内容分成几列展示',
24+
},
25+
defaultValue: 1,
26+
setter: {
27+
componentName: 'RadioGroupSetter',
28+
props: {
29+
options: [
30+
{
31+
title: '一列',
32+
value: 1,
33+
},
34+
{
35+
title: '两列',
36+
value: 2,
37+
},
38+
{
39+
title: '三列',
40+
value: 3,
41+
},
42+
{
43+
title: '四列',
44+
value: 4
45+
}
46+
]
47+
}
48+
}
49+
},
50+
{
51+
name: 'widget',
52+
title: {
53+
label: '类型',
54+
tip: 'widget | 类型',
55+
},
56+
defaultValue: 1,
57+
setter: {
58+
componentName: 'RadioGroupSetter',
59+
props: {
60+
options: [
61+
{
62+
title: '卡片',
63+
value: 'card',
64+
},
65+
{
66+
title: '折叠面板',
67+
value: 'collapse',
68+
},
69+
{
70+
title: '标题线',
71+
value: 'lineTitle',
72+
},
73+
{
74+
title: '内联',
75+
value: 'subInline'
76+
}
77+
]
78+
}
79+
}
80+
},
81+
];
82+
83+
const snippets = [
84+
{
85+
title: '对象',
86+
screenshot: 'icon-object',
87+
schema: {
88+
componentName: 'Card',
89+
props: {
90+
title: '卡片主题',
91+
description: '这是一个对象类型',
92+
column: 3,
93+
type: 'object',
94+
widget: 'collapse'
95+
}
96+
}
97+
}
98+
]
99+
100+
export default createMeta('Card', {
101+
title: '对象',
102+
category: '布局',
103+
group: '基础组件',
104+
priority: 1,
105+
props,
106+
snippets,
107+
configure: {
108+
supports: {
109+
loop: false,
110+
condition: false
111+
},
112+
component: {
113+
isContainer: true,
114+
isModal: false,
115+
nestingRule: {
116+
parentWhitelist: ['FormRender', 'Card', 'CardList']
117+
}
118+
}
119+
}
120+
});

0 commit comments

Comments
 (0)