@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.
Files changed (40) hide show
  1. package/docs//350/207/252/345/256/232/344/271/211form/347/273/204/344/273/266.md +39 -0
  2. package/main/default/client/builder.client.js +11 -10
  3. package/main/default/client/onWindowMessage.client.js +39 -0
  4. package/main/default/client/page.render.client.js +101 -58
  5. package/main/default/objects/page_assignments/fields/app.field.yml +2 -0
  6. package/main/default/objects/page_assignments/fields/desktop.field.yml +1 -1
  7. package/main/default/objects/page_assignments/fields/mobile.field.yml +1 -1
  8. package/main/default/objects/page_assignments/permissions/user.permission.yml +2 -2
  9. package/main/default/objects/page_versions/buttons/standard_delete.button.js +5 -0
  10. package/main/default/objects/page_versions/buttons/standard_delete.button.yml +4 -0
  11. package/main/default/objects/page_versions/buttons/standard_delete_many.button.js +5 -0
  12. package/main/default/objects/page_versions/buttons/standard_delete_many.button.yml +4 -0
  13. package/main/default/objects/page_versions/buttons/standard_new.button.js +5 -0
  14. package/main/default/objects/page_versions/buttons/standard_new.button.yml +5 -0
  15. package/main/default/objects/page_versions/fields/is_active.field.yml +4 -0
  16. package/main/default/objects/page_versions/fields/page.field.yml +2 -1
  17. package/main/default/objects/page_versions/fields/schema.field.yml +2 -2
  18. package/main/default/objects/page_versions/fields/version.field.yml +2 -1
  19. package/main/default/objects/page_versions/listviews/all.listview.yml +1 -1
  20. package/main/default/objects/page_versions/listviews/recent.listview.yml +1 -1
  21. package/main/default/objects/page_versions/permissions/admin.permission.yml +1 -1
  22. package/main/default/objects/page_versions/permissions/user.permission.yml +2 -2
  23. package/main/default/objects/pages/fields/is_active.field.yml +5 -0
  24. package/main/default/objects/pages/fields/is_archived.field.yml +2 -2
  25. package/main/default/objects/pages/fields/type.field.yml +2 -2
  26. package/main/default/objects/pages/listviews/all.listview.yml +1 -0
  27. package/main/default/objects/pages/listviews/recent.listview.yml +1 -0
  28. package/main/default/objects/pages/pages.object.yml +5 -2
  29. package/main/default/objects/pages/permissions/user.permission.yml +2 -2
  30. package/main/default/routes/design.html +10 -1
  31. package/main/default/routes/page_design.router.js +10 -1
  32. package/main/default/routes/page_schema.router.js +2 -1
  33. package/main/default/services/page.service.js +32 -15
  34. package/main/default/triggers/page_assignments_check.trigger.js +23 -0
  35. package/main/default/triggers/page_versions_check.trigger.js +21 -0
  36. package/main/default/triggers/pages_check.trigger.js +30 -0
  37. package/package.json +2 -2
  38. package/docs/amis.md +0 -53
  39. package/main/default/objects/page_versions/fields/is_archived.field.yml +0 -4
  40. 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, userSession);
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, formFactor, recordId, userSession) {
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], ['is_archived', '=', true]];
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(['is_archived','=',true])
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.is_archived){
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
- is_archived: false,
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.4",
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": "a0c0e8d900f7f4fd2045d976b36c9bef465a6ce3"
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的配套接口
@@ -1,4 +0,0 @@
1
- name: is_archived
2
- label: 启用
3
- sort_no: 130
4
- type: toggle