@steedos/service-plugin-amis 2.3.0-beta.8 → 2.3.0
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/main/default/client/amis.render.client.js +60 -14
- package/main/default/client/creator.function.client.js +7 -6
- package/main/default/client/load.assets.client.js +19 -0
- package/main/default/pages/apps_form.page.amis.json +554 -0
- package/main/default/pages/apps_form.page.yml +14 -0
- package/main/default/pages/generate_object_tabs.page.amis.json +104 -0
- package/main/default/pages/generate_object_tabs.page.yml +7 -0
- package/main/default/pages/listview_form.page.amis.json +38 -23
- package/main/default/pages/object_layouts.page.amis.json +727 -706
- package/main/default/pages/space_user_info_record.page.amis.json +603 -0
- package/main/default/pages/space_user_info_record.page.yml +7 -0
- package/main/default/services/amis-design.service.js +157 -0
- package/main/default/services/metadata/listviews.service.js +96 -78
- package/main/default/services/metadata/objects.service.js +137 -0
- package/main/default/services/metadata/space_users.service.js +201 -0
- package/main/default/services/utils/fields/index.js +50 -58
- package/main/default/services/utils/graphql.js +2 -2
- package/main/default/services/utils/object-record.js +13 -5
- package/package.json +2 -2
- package/public/amis/amis.css +1 -1
|
@@ -5,17 +5,23 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
; (function () {
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
const loadCss = (href)=>{
|
|
9
10
|
try {
|
|
10
|
-
|
|
11
|
+
// 加载Amis css
|
|
11
12
|
let amisStyle = document.createElement("link");
|
|
12
13
|
amisStyle.setAttribute("rel", "stylesheet");
|
|
13
14
|
amisStyle.setAttribute("type", "text/css");
|
|
14
|
-
amisStyle.setAttribute("href",
|
|
15
|
+
amisStyle.setAttribute("href", href);
|
|
15
16
|
document.getElementsByTagName("head")[0].appendChild(amisStyle);
|
|
16
17
|
} catch (error) {
|
|
17
18
|
console.error(error)
|
|
18
19
|
};
|
|
20
|
+
}
|
|
21
|
+
// loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/sdk.css"))
|
|
22
|
+
loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/helper.css"))
|
|
23
|
+
loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/iconfont.css"))
|
|
24
|
+
loadCss(Steedos.absoluteUrl("/amis/amis.css"))
|
|
19
25
|
|
|
20
26
|
try {
|
|
21
27
|
window['attrAccept'] = function (file, acceptedFiles) {
|
|
@@ -41,16 +47,16 @@
|
|
|
41
47
|
return true;
|
|
42
48
|
}
|
|
43
49
|
|
|
44
|
-
// 加载Amis SDK: 如果直接放到body中会导致meteor 编译后的 cordova.js 加载报错
|
|
50
|
+
// 加载Amis SDK: 如果直接放到body中会导致 meteor 编译后的 cordova.js 加载报错
|
|
45
51
|
let amisSDKScript = document.createElement("script");
|
|
46
|
-
amisSDKScript.setAttribute("src", Steedos.absoluteUrl('/unpkg.com
|
|
52
|
+
amisSDKScript.setAttribute("src", Steedos.absoluteUrl('/unpkg.com/amis/sdk/sdk.js'));
|
|
47
53
|
document.getElementsByTagName("head")[0].appendChild(amisSDKScript);
|
|
48
54
|
} catch (error) {
|
|
49
55
|
console.error(error)
|
|
50
56
|
};
|
|
51
57
|
|
|
52
58
|
const getAmisLng = ()=>{
|
|
53
|
-
locale = Creator.USER_CONTEXT
|
|
59
|
+
locale = Creator.USER_CONTEXT?.user?.language
|
|
54
60
|
if(locale){
|
|
55
61
|
locale = locale.replace('_', '-');
|
|
56
62
|
locale = locale === 'en' ? 'en-US' : locale;
|
|
@@ -63,12 +69,12 @@
|
|
|
63
69
|
|
|
64
70
|
// 此处不能使用import, client js 编译时会将import 转为require, 导致加载失败
|
|
65
71
|
// import('/unpkg.com/@steedos-ui/amis/dist/amis-sdk.umd.min.js').then(() => {
|
|
66
|
-
|
|
67
72
|
Promise.all([
|
|
68
73
|
waitForThing(window, 'assetsLoaded'),
|
|
69
|
-
waitForThing(window, '
|
|
74
|
+
waitForThing(window, 'amis'),
|
|
70
75
|
]).then(()=>{
|
|
71
|
-
|
|
76
|
+
window.React = window.__React;
|
|
77
|
+
window.ReactDOM = window.__ReactDOM;
|
|
72
78
|
const AmisRenderers = [];
|
|
73
79
|
|
|
74
80
|
const amisComps = lodash.filter(Builder.registry['meta-components'], function(item){ return item.componentName && item.amis?.render});
|
|
@@ -77,14 +83,33 @@
|
|
|
77
83
|
const Component = Builder.components.find(item => item.name === comp.componentName);
|
|
78
84
|
if (Component && !AmisRenderers.includes(comp.amis?.render.type)){
|
|
79
85
|
try {
|
|
86
|
+
let AmisWrapper = Component.class
|
|
80
87
|
AmisRenderers.push(comp.amis?.render.type);
|
|
81
|
-
|
|
88
|
+
if(comp.componentType === 'amisSchema'){
|
|
89
|
+
let amisReact = amisRequire('react');
|
|
90
|
+
AmisWrapper = function(props){
|
|
91
|
+
const { body, render } = props
|
|
92
|
+
const [schema, setSchema] = amisReact.useState(null);
|
|
93
|
+
amisReact.useEffect(()=>{
|
|
94
|
+
const result = Component.class(props);
|
|
95
|
+
if(result.then && typeof result.then === 'function'){
|
|
96
|
+
result.then((data)=>{
|
|
97
|
+
setSchema(data);
|
|
98
|
+
})
|
|
99
|
+
}else{
|
|
100
|
+
setSchema(result)
|
|
101
|
+
}
|
|
102
|
+
}, [])
|
|
103
|
+
return amisReact.createElement(amisReact.Fragment, null, amisReact.createElement(amisReact.Fragment, null, schema && render ? render('body', schema) : ''), amisReact.createElement(amisReact.Fragment, null, render ? render('body', body) : ''));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
amisRequire("amis").Renderer(
|
|
82
107
|
{
|
|
83
108
|
type: comp.amis?.render.type,
|
|
84
109
|
weight: comp.amis?.render.weight,
|
|
85
110
|
autoVar: true,
|
|
86
111
|
}
|
|
87
|
-
)(
|
|
112
|
+
)(AmisWrapper);
|
|
88
113
|
} catch(e){console.error(e)}
|
|
89
114
|
}
|
|
90
115
|
});
|
|
@@ -178,7 +203,29 @@
|
|
|
178
203
|
}
|
|
179
204
|
}, env);
|
|
180
205
|
}
|
|
181
|
-
|
|
206
|
+
schema.scopeRef = (ref) => {
|
|
207
|
+
try {
|
|
208
|
+
if(!window.amisScopes){
|
|
209
|
+
window.amisScopes = {};
|
|
210
|
+
}
|
|
211
|
+
if(name){
|
|
212
|
+
window.amisScopes[name] = ref;
|
|
213
|
+
}
|
|
214
|
+
} catch (error) {
|
|
215
|
+
console.error('error', error)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return scoped = ref
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
React.useEffect(()=>{
|
|
222
|
+
amisRequire('amis/embed').embed(`.steedos-amis-render-scope-${name}`,schema, {data, name, locale: getAmisLng()}, Object.assign({}, AmisEnv, env))
|
|
223
|
+
}, [])
|
|
224
|
+
return React.createElement("div", {
|
|
225
|
+
className: "amis-scope"
|
|
226
|
+
}, React.createElement("div", {
|
|
227
|
+
className: `steedos-amis-render-scope-${name}`
|
|
228
|
+
}));
|
|
182
229
|
};
|
|
183
230
|
|
|
184
231
|
const initMonaco = ()=>{
|
|
@@ -199,14 +246,13 @@
|
|
|
199
246
|
return Builder.initMonaco()
|
|
200
247
|
}
|
|
201
248
|
}
|
|
202
|
-
|
|
203
249
|
//Amis SDK 中已清理了monaco, 所以这里需要提前注册,否则会导致amis code类型报错
|
|
204
250
|
initMonaco().catch((err)=>{
|
|
205
251
|
console.error(`Builder.initMonaco error: ${err}`);
|
|
206
252
|
}).finally(()=>{
|
|
207
253
|
const language = getAmisLng()
|
|
208
254
|
axios.get(`/translations/amis/${language}.json`).then((res)=>{
|
|
209
|
-
|
|
255
|
+
amisRequire("amis").registerLocale(`${language}`, res.data)
|
|
210
256
|
Builder.registerComponent(AmisRender, {
|
|
211
257
|
name: 'Amis',
|
|
212
258
|
inputs: [
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* @Author: baozhoutao@steedos.com
|
|
3
3
|
* @Date: 2022-05-20 17:42:20
|
|
4
4
|
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
-
* @LastEditTime: 2022-
|
|
5
|
+
* @LastEditTime: 2022-10-28 11:01:51
|
|
6
6
|
* @Description: 提供辅助函数
|
|
7
7
|
*/
|
|
8
8
|
(function(){
|
|
9
9
|
const filtersAmisSchema = {
|
|
10
10
|
"type": "page",
|
|
11
11
|
"title": t("creator_filters"),
|
|
12
|
-
"name": "
|
|
12
|
+
"name": "steedosFiltersPage",
|
|
13
13
|
"body": [
|
|
14
14
|
{
|
|
15
15
|
"type": "form",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
}
|
|
31
31
|
],
|
|
32
32
|
"id": "filtersForm",
|
|
33
|
+
"name": "filtersForm",
|
|
33
34
|
"wrapWithPanel": false
|
|
34
35
|
}
|
|
35
36
|
],
|
|
@@ -90,16 +91,16 @@
|
|
|
90
91
|
mask: false,
|
|
91
92
|
width: 550,
|
|
92
93
|
style: null,
|
|
93
|
-
extra:
|
|
94
|
+
extra: React17.createElement(
|
|
94
95
|
SteedosUI.components.Space,
|
|
95
96
|
{},
|
|
96
97
|
[
|
|
97
|
-
|
|
98
|
+
React17.createElement(SteedosUI.components.Button, {
|
|
98
99
|
onClick: function(){
|
|
99
100
|
SteedosUI.getRef(pageName)?.close();
|
|
100
101
|
}
|
|
101
102
|
} , t('cancel')),
|
|
102
|
-
|
|
103
|
+
React17.createElement(SteedosUI.components.Button, {
|
|
103
104
|
onClick: canSave ? function(){
|
|
104
105
|
|
|
105
106
|
const formValues = window.amisScopes[pageName].getComponentById("filtersForm").getValues()
|
|
@@ -137,7 +138,7 @@
|
|
|
137
138
|
});
|
|
138
139
|
}
|
|
139
140
|
} : function(){
|
|
140
|
-
const formValues = window.amisScopes[pageName].
|
|
141
|
+
const formValues = window.amisScopes[pageName].getComponentByName("filtersForm").getValues();
|
|
141
142
|
const filters = window.amisConvert.conditionsToFilters(formValues.filters);
|
|
142
143
|
Session.set("filter_items", filters);
|
|
143
144
|
SteedosUI.getRef(pageName)?.close();
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// 解决多个react 问题. 注册组件时, 使用 amis 自带的 react , 运行 steedos 相关组件时, 使用 全局 react
|
|
2
|
+
window.addEventListener('message', function (event) {
|
|
3
|
+
const { data } = event;
|
|
4
|
+
if (data.type === 'Builder.loaded') {
|
|
5
|
+
if(Meteor.settings.public.page && Meteor.settings.public.page.assetUrls){
|
|
6
|
+
const defaultAssetsUrls = Meteor.settings.public.page.assetUrls.split(',')
|
|
7
|
+
Promise.all([
|
|
8
|
+
waitForThing(window, 'amis'),
|
|
9
|
+
]).then(()=>{
|
|
10
|
+
window.__React = window.React;
|
|
11
|
+
window.__ReactDOM = window.ReactDOM;
|
|
12
|
+
window.React = amisRequire('react');
|
|
13
|
+
window.ReactDOM = amisRequire('react-dom');
|
|
14
|
+
window.ReactDom = window.ReactDOM;
|
|
15
|
+
Builder.registerRemoteAssets(defaultAssetsUrls);
|
|
16
|
+
})
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
})
|