@steedos/service-pages 2.2.5 → 2.2.8

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 +86 -80
  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 +28 -9
  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
@@ -1,9 +1,18 @@
1
1
  const express = require("express");
2
2
  const router = express.Router();
3
+ const core = require('@steedos/core');
4
+ const fs = require('fs');
3
5
 
4
- router.get('/api/pageDesign', async function (req, res) {
6
+ router.get('/api/pageDesign', core.requireAuthentication, async function (req, res) {
5
7
  try {
6
8
  res.set('Content-Type', 'text/html');
9
+ const userSession = req.user;
10
+ const steedosBuilderHost = `https://builder.steedos.com/amis?assetUrl=https://unpkg.com/@steedos-ui/builder-widgets/dist/assets.js&rootUrl=${__meteor_runtime_config__.ROOT_URL}&authToken=${userSession.authToken}&userId=${userSession.userId}&tenantId=${userSession.spaceId}&__q=`;
11
+
12
+ let data = fs.readFileSync(__dirname+'/design.html', 'utf8');
13
+ res.send(data.replace('SteedosBuilderHost',steedosBuilderHost));
14
+
15
+
7
16
  res.sendFile(__dirname+'/design.html')
8
17
  } catch (error) {
9
18
  res.status(500).send({ message: error.message });
@@ -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:{
@@ -98,7 +98,7 @@ 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
  }
@@ -166,6 +166,12 @@ module.exports = {
166
166
 
167
167
  try {
168
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
+
169
175
  const assignments = await this.getAssignments(formFactor, typePages);
170
176
 
171
177
  const appProfileassignment = await this.getAppProfileAssignment(app, assignments, userSession);
@@ -189,7 +195,20 @@ module.exports = {
189
195
  }
190
196
  },
191
197
  getMeSchema: {
192
- 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
+ }
193
212
  // 计算 userSchema
194
213
  const userPage = await this.getUserPage(type, app, objectApiName, recordId, formFactor, userSession);
195
214
  if (userPage) {
@@ -208,7 +227,7 @@ module.exports = {
208
227
  async handler(pageId, isArchived) {
209
228
  const filters = [['page', '=', pageId]];
210
229
  if(isArchived){
211
- filters.push(['is_archived','=',true])
230
+ filters.push(['is_active','=',true])
212
231
  }
213
232
  // 根据pageId 获取 page version
214
233
  const pageVersions = await objectql.getObject('page_versions').find({filters: filters, sort: 'version desc', top: 1});
@@ -222,14 +241,14 @@ module.exports = {
222
241
  // 根据pageId 获取 pageversions
223
242
  const pageVersion = await this.getLatestPageVersion(pageId);
224
243
  let version = pageVersion ? pageVersion.version :0;
225
- if(pageVersion && !pageVersion.is_archived){
244
+ if(pageVersion && !pageVersion.is_active){
226
245
  return await objectql.getObject('page_versions').update(pageVersion._id, {
227
246
  schema: schema
228
247
  }, userSession);
229
248
  }else{
230
249
  return await objectql.getObject('page_versions').insert({
231
250
  page: pageId,
232
- is_archived: false,
251
+ is_active: false,
233
252
  schema: schema,
234
253
  version: ++version,
235
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.5",
3
+ "version": "2.2.8",
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": "260131162c3eb25ec8d51e915b773610c7b2653c"
14
+ "gitHead": "fc6272b2c000e68dce4dd0c785dae2b6f63ae858"
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