@steedos/service-pages 2.2.4 → 2.2.7
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/docs//350/207/252/345/256/232/344/271/211form/347/273/204/344/273/266.md +39 -0
- package/main/default/client/builder.client.js +11 -10
- package/main/default/client/onWindowMessage.client.js +39 -0
- package/main/default/client/page.render.client.js +101 -58
- package/main/default/objects/page_assignments/fields/app.field.yml +2 -0
- package/main/default/objects/page_assignments/fields/desktop.field.yml +1 -1
- package/main/default/objects/page_assignments/fields/mobile.field.yml +1 -1
- package/main/default/objects/page_assignments/permissions/user.permission.yml +2 -2
- package/main/default/objects/page_versions/buttons/standard_delete.button.js +5 -0
- package/main/default/objects/page_versions/buttons/standard_delete.button.yml +4 -0
- package/main/default/objects/page_versions/buttons/standard_delete_many.button.js +5 -0
- package/main/default/objects/page_versions/buttons/standard_delete_many.button.yml +4 -0
- package/main/default/objects/page_versions/buttons/standard_new.button.js +5 -0
- package/main/default/objects/page_versions/buttons/standard_new.button.yml +5 -0
- package/main/default/objects/page_versions/fields/is_active.field.yml +4 -0
- package/main/default/objects/page_versions/fields/page.field.yml +2 -1
- package/main/default/objects/page_versions/fields/schema.field.yml +2 -2
- package/main/default/objects/page_versions/fields/version.field.yml +2 -1
- package/main/default/objects/page_versions/listviews/all.listview.yml +1 -1
- package/main/default/objects/page_versions/listviews/recent.listview.yml +1 -1
- package/main/default/objects/page_versions/permissions/admin.permission.yml +1 -1
- package/main/default/objects/page_versions/permissions/user.permission.yml +2 -2
- package/main/default/objects/pages/fields/is_active.field.yml +5 -0
- package/main/default/objects/pages/fields/is_archived.field.yml +2 -2
- package/main/default/objects/pages/fields/type.field.yml +2 -2
- package/main/default/objects/pages/listviews/all.listview.yml +1 -0
- package/main/default/objects/pages/listviews/recent.listview.yml +1 -0
- package/main/default/objects/pages/pages.object.yml +5 -2
- package/main/default/objects/pages/permissions/user.permission.yml +2 -2
- package/main/default/routes/design.html +10 -1
- package/main/default/routes/page_design.router.js +10 -1
- package/main/default/routes/page_schema.router.js +2 -1
- package/main/default/services/page.service.js +32 -15
- package/main/default/triggers/page_assignments_check.trigger.js +23 -0
- package/main/default/triggers/page_versions_check.trigger.js +21 -0
- package/main/default/triggers/pages_check.trigger.js +30 -0
- package/package.json +2 -2
- package/docs/amis.md +0 -53
- package/main/default/objects/page_versions/fields/is_archived.field.yml +0 -4
- package/public/builder.io/react/dist/builder-react.browser.js +0 -21
|
@@ -8,7 +8,7 @@ router.get('/api/pageSchema/:type', core.requireAuthentication, async function (
|
|
|
8
8
|
|
|
9
9
|
const userSession = req.user;
|
|
10
10
|
|
|
11
|
-
const { app, objectApiName, recordId, formFactor} = req.query;
|
|
11
|
+
const { app, objectApiName, recordId, pageId, formFactor} = req.query;
|
|
12
12
|
const { type } = req.params;
|
|
13
13
|
|
|
14
14
|
const pageSchema = await objectql.getSteedosSchema().broker.call(`page.getMeSchema`, {
|
|
@@ -16,6 +16,7 @@ router.get('/api/pageSchema/:type', core.requireAuthentication, async function (
|
|
|
16
16
|
app,
|
|
17
17
|
objectApiName,
|
|
18
18
|
recordId,
|
|
19
|
+
pageId,
|
|
19
20
|
formFactor
|
|
20
21
|
}, {
|
|
21
22
|
meta: {
|
|
@@ -24,8 +24,8 @@ module.exports = {
|
|
|
24
24
|
getMeSchema: {
|
|
25
25
|
async handler(ctx) {
|
|
26
26
|
const userSession = ctx.meta.user;
|
|
27
|
-
const { type, app, objectApiName, recordId, formFactor } = ctx.params;
|
|
28
|
-
return await this.getMeSchema(type, app, objectApiName, recordId, formFactor, userSession);
|
|
27
|
+
const { type, app, objectApiName, recordId, pageId, formFactor } = ctx.params;
|
|
28
|
+
return await this.getMeSchema(type, app, objectApiName, recordId, pageId, formFactor, userSession);
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
// enablePageVersion:{
|
|
@@ -51,9 +51,9 @@ module.exports = {
|
|
|
51
51
|
pageId: { type: "any" }
|
|
52
52
|
},
|
|
53
53
|
async handler(ctx){
|
|
54
|
-
const userSession = ctx.meta.user;
|
|
54
|
+
// const userSession = ctx.meta.user;
|
|
55
55
|
const { pageId } = ctx.params;
|
|
56
|
-
return await this.getLatestPageVersion(pageId
|
|
56
|
+
return await this.getLatestPageVersion(pageId);
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
changePageVersion:{
|
|
@@ -85,7 +85,7 @@ module.exports = {
|
|
|
85
85
|
*/
|
|
86
86
|
methods: {
|
|
87
87
|
getDefaultSchema: {
|
|
88
|
-
async handler(type, app, objectApiName,
|
|
88
|
+
async handler(type, app, objectApiName, recordId, formFactor, userSession) {
|
|
89
89
|
if (process.env.DEFAULT_PAGE_RENDER) {
|
|
90
90
|
return await this.broker.call(`${process.env.DEFAULT_PAGE_RENDER}.getDefaultSchema`, {type, app, objectApiName, recordId, formFactor}, {
|
|
91
91
|
meta: {
|
|
@@ -98,11 +98,11 @@ module.exports = {
|
|
|
98
98
|
},
|
|
99
99
|
getTypePages: {
|
|
100
100
|
async handler(type, objectApiName, userSession) {
|
|
101
|
-
const filters = [['type', '=', type], ['
|
|
101
|
+
const filters = [['type', '=', type], ['is_active', '=', true]];
|
|
102
102
|
if (type === 'list' || type === 'record' || type === 'form') {
|
|
103
103
|
filters.push(['object_name', '=', objectApiName]);
|
|
104
104
|
}
|
|
105
|
-
return await objectql.getObject('pages').find({ filters: filters });
|
|
105
|
+
return await objectql.getObject('pages').find({ filters: filters, sort: 'modified desc' });
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
getAssignments: {
|
|
@@ -116,7 +116,7 @@ module.exports = {
|
|
|
116
116
|
}else{
|
|
117
117
|
filters.push(['desktop','=', true])
|
|
118
118
|
}
|
|
119
|
-
return await objectql.getObject("page_assignments").find({ filters: filters });
|
|
119
|
+
return await objectql.getObject("page_assignments").find({ filters: filters, sort: 'modified desc' });
|
|
120
120
|
}
|
|
121
121
|
},
|
|
122
122
|
getAppProfileAssignment: {
|
|
@@ -161,13 +161,17 @@ module.exports = {
|
|
|
161
161
|
* 2 如果已指定,则应用程序默认设置 页面分配会覆盖组织默认设置。
|
|
162
162
|
* 3 应用程序、记录类型和简档, 分配会覆盖组织和应用程序默认设置。
|
|
163
163
|
*
|
|
164
|
-
* TODO form factors "LARGE","SMALL"
|
|
165
|
-
* TODO 页面分配有多条时的优先级处理(始终是最新的分配生效)。
|
|
166
164
|
*/
|
|
167
165
|
async handler(type, app, objectApiName, recordId, formFactor, userSession) {
|
|
168
166
|
|
|
169
167
|
try {
|
|
170
168
|
const typePages = await this.getTypePages(type, objectApiName, userSession);
|
|
169
|
+
|
|
170
|
+
//如果是app 类型,则直接返回最新的.
|
|
171
|
+
if(type === 'app'){
|
|
172
|
+
return typePages.length > 0 ? typePages[0] : null;
|
|
173
|
+
}
|
|
174
|
+
|
|
171
175
|
const assignments = await this.getAssignments(formFactor, typePages);
|
|
172
176
|
|
|
173
177
|
const appProfileassignment = await this.getAppProfileAssignment(app, assignments, userSession);
|
|
@@ -191,7 +195,20 @@ module.exports = {
|
|
|
191
195
|
}
|
|
192
196
|
},
|
|
193
197
|
getMeSchema: {
|
|
194
|
-
async handler(type, app, objectApiName, recordId, formFactor, userSession) {
|
|
198
|
+
async handler(type, app, objectApiName, recordId, pageId, formFactor, userSession) {
|
|
199
|
+
if(pageId){
|
|
200
|
+
const records = await objectql.getObject('pages').find({filters: [['name', '=', pageId]]});
|
|
201
|
+
let pageInfo = {};
|
|
202
|
+
if(records.length > 0){
|
|
203
|
+
pageInfo = records[0];
|
|
204
|
+
const pageVersion = await this.getLatestPageVersion(pageInfo._id, true);
|
|
205
|
+
if(pageVersion && pageVersion.schema){
|
|
206
|
+
return Object.assign({}, pageInfo, {schema: pageVersion.schema});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return ;
|
|
210
|
+
|
|
211
|
+
}
|
|
195
212
|
// 计算 userSchema
|
|
196
213
|
const userPage = await this.getUserPage(type, app, objectApiName, recordId, formFactor, userSession);
|
|
197
214
|
if (userPage) {
|
|
@@ -202,7 +219,7 @@ module.exports = {
|
|
|
202
219
|
}
|
|
203
220
|
const defaultSchema = await this.getDefaultSchema(type, app, objectApiName, recordId, formFactor, userSession);
|
|
204
221
|
if(defaultSchema){
|
|
205
|
-
return {schema: defaultSchema}
|
|
222
|
+
return { render_engine: process.env.DEFAULT_PAGE_RENDER , schema: defaultSchema}
|
|
206
223
|
}
|
|
207
224
|
}
|
|
208
225
|
},
|
|
@@ -210,7 +227,7 @@ module.exports = {
|
|
|
210
227
|
async handler(pageId, isArchived) {
|
|
211
228
|
const filters = [['page', '=', pageId]];
|
|
212
229
|
if(isArchived){
|
|
213
|
-
filters.push(['
|
|
230
|
+
filters.push(['is_active','=',true])
|
|
214
231
|
}
|
|
215
232
|
// 根据pageId 获取 page version
|
|
216
233
|
const pageVersions = await objectql.getObject('page_versions').find({filters: filters, sort: 'version desc', top: 1});
|
|
@@ -224,14 +241,14 @@ module.exports = {
|
|
|
224
241
|
// 根据pageId 获取 pageversions
|
|
225
242
|
const pageVersion = await this.getLatestPageVersion(pageId);
|
|
226
243
|
let version = pageVersion ? pageVersion.version :0;
|
|
227
|
-
if(pageVersion && !pageVersion.
|
|
244
|
+
if(pageVersion && !pageVersion.is_active){
|
|
228
245
|
return await objectql.getObject('page_versions').update(pageVersion._id, {
|
|
229
246
|
schema: schema
|
|
230
247
|
}, userSession);
|
|
231
248
|
}else{
|
|
232
249
|
return await objectql.getObject('page_versions').insert({
|
|
233
250
|
page: pageId,
|
|
234
|
-
|
|
251
|
+
is_active: false,
|
|
235
252
|
schema: schema,
|
|
236
253
|
version: ++version,
|
|
237
254
|
space: userSession.spaceId
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const objectql = require('@steedos/objectql');
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
listenTo: 'page_assignments',
|
|
5
|
+
beforeInsert: async function(){
|
|
6
|
+
const {doc, spaceId} = this;
|
|
7
|
+
if(doc.page){
|
|
8
|
+
const record = await objectql.getObject('pages').findOne(doc.page);
|
|
9
|
+
if(record.type === 'app'){
|
|
10
|
+
throw new Error('禁止给应用程序页面分配权限');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
beforeUpdate: async function(){
|
|
15
|
+
const {object_name, doc, spaceId, id} = this;
|
|
16
|
+
if(doc.page){
|
|
17
|
+
const record = await objectql.getObject('pages').findOne(doc.page);
|
|
18
|
+
if(record.type === 'app'){
|
|
19
|
+
throw new Error('禁止给应用程序页面分配权限');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const objectql = require('@steedos/objectql');
|
|
2
|
+
const _ = require('underscore');
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
listenTo: 'page_versions',
|
|
6
|
+
beforeUpdate: async function(){
|
|
7
|
+
const {id, doc} = this;
|
|
8
|
+
const record = await objectql.getObject('page_versions').findOne(id);
|
|
9
|
+
if(record){
|
|
10
|
+
const getLatestPageVersion = await objectql.getSteedosSchema().broker.call('page.getLatestPageVersion', {
|
|
11
|
+
pageId: record.page
|
|
12
|
+
})
|
|
13
|
+
if(getLatestPageVersion._id != id){
|
|
14
|
+
throw new Error('禁止修改非最新版');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// if(_.has(doc, 'is_archived') && !doc.is_archived){
|
|
18
|
+
|
|
19
|
+
// }
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const objectql = require('@steedos/objectql');
|
|
2
|
+
const _ = require('lodash');
|
|
3
|
+
module.exports = {
|
|
4
|
+
listenTo: 'pages',
|
|
5
|
+
beforeUpdate: async function(){
|
|
6
|
+
const {object_name, doc, spaceId, id} = this;
|
|
7
|
+
if(_.has(doc, 'type') || _.has(doc, 'render_engine')){
|
|
8
|
+
const record = await objectql.getObject('pages').findOne(id);
|
|
9
|
+
if(_.has(doc, 'type') && doc.type != record.type){
|
|
10
|
+
throw new Error('禁止修改页面类型');
|
|
11
|
+
}
|
|
12
|
+
if(_.has(doc, 'render_engine') && doc.render_engine != record.render_engine){
|
|
13
|
+
throw new Error('禁止修改页面渲染器');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if(_.has(doc, 'is_archived') && !doc.is_archived){
|
|
18
|
+
let type = null;
|
|
19
|
+
if(_.has(doc, 'type')){
|
|
20
|
+
type = doc.type
|
|
21
|
+
}else{
|
|
22
|
+
const record = await objectql.getObject('pages').findOne(id);
|
|
23
|
+
type = record.type;
|
|
24
|
+
}
|
|
25
|
+
if(type === 'app'){
|
|
26
|
+
throw new Error('禁止停用应用程序页面');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-pages",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.7",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"scripts": {},
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@builder.io/react": "^1.1.50"
|
|
13
13
|
},
|
|
14
|
-
"gitHead": "
|
|
14
|
+
"gitHead": "72067dc4759d5062f1e0c6b78e807802b53d3b08"
|
|
15
15
|
}
|
package/docs/amis.md
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
## 集成 Amis
|
|
2
|
-
- 集成Amis 设计器
|
|
3
|
-
- 集成Amis 渲染器
|
|
4
|
-
|
|
5
|
-
## 新增对象
|
|
6
|
-
- 新增对象Pages,用于保存 amis schema
|
|
7
|
-
- 详细页面添加按钮:设计器,点击后打开Amis设计器
|
|
8
|
-
- 新增对象Page assignments, 用于记录page分配。
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## 调整页面渲染引擎
|
|
12
|
-
|
|
13
|
-
- 自定义应用
|
|
14
|
-
|
|
15
|
-
- 列表页面
|
|
16
|
-
|
|
17
|
-
- 详细页面
|
|
18
|
-
|
|
19
|
-
- 表单页面
|
|
20
|
-
|
|
21
|
-
## 将 Steedos React 组件 整合到 Amis
|
|
22
|
-
- 列表组件:
|
|
23
|
-
- 没有react组件:切换列表视图
|
|
24
|
-
- 没有react组件:列表按钮
|
|
25
|
-
- 没有react组件:下载列表数据
|
|
26
|
-
- 没有react组件:自定义列表
|
|
27
|
-
- 没有react组件:过滤器
|
|
28
|
-
- 数据展示:
|
|
29
|
-
- Table
|
|
30
|
-
- Tree Table
|
|
31
|
-
- 记录详细
|
|
32
|
-
- 各种字段类型
|
|
33
|
-
- 相关表
|
|
34
|
-
- 是否显示总数
|
|
35
|
-
- 按钮
|
|
36
|
-
- 快速编辑
|
|
37
|
-
- 相关表快速链接
|
|
38
|
-
- 相关表名称
|
|
39
|
-
- 相关表记录总数
|
|
40
|
-
|
|
41
|
-
## 页面布局设计器(无法使用Amis 实现)
|
|
42
|
-
- 分组
|
|
43
|
-
- 选对象字段
|
|
44
|
-
- 根据对象的定义,将对象的字段转化为Amis的自定义组件,供用户使用。
|
|
45
|
-
- 选对象按钮
|
|
46
|
-
- 选子表
|
|
47
|
-
|
|
48
|
-
## 服务端
|
|
49
|
-
- amis service
|
|
50
|
-
- actions
|
|
51
|
-
- getDefaultSchema(type, app, objectApiName, recordId): 获取默认Schema
|
|
52
|
-
- API:getMeSchema(type, app, objectApiName, recordId): 获取分配的Schema
|
|
53
|
-
- amis的配套接口
|