@steedos/service-pages 2.2.3 → 2.2.6
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/applications/app_charts.app.yml +1 -1
- package/main/default/client/builder.client.js +10 -4
- package/main/default/client/onWindowMessage.client.js +39 -0
- package/main/default/client/page.render.client.js +234 -30
- package/main/default/objects/page_assignments/fields/app.field.yml +8 -0
- package/main/default/objects/page_assignments/fields/desktop.field.yml +5 -0
- package/main/default/objects/page_assignments/fields/is_system.field.yml +6 -0
- package/main/default/objects/page_assignments/fields/mobile.field.yml +5 -0
- package/main/default/objects/page_assignments/fields/page.field.yml +5 -0
- package/main/default/objects/page_assignments/fields/profile.field.yml +8 -0
- package/main/default/objects/page_assignments/fields/record_type.field.yml +4 -0
- package/main/default/objects/page_assignments/listviews/all.listview.yml +15 -0
- package/main/default/objects/page_assignments/listviews/recent.listview.yml +15 -0
- package/main/default/objects/page_assignments/page_assignments.object.yml +20 -0
- package/main/default/objects/page_assignments/permissions/admin.permission.yml +10 -0
- package/main/default/objects/page_assignments/permissions/user.permission.yml +10 -0
- 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 +5 -0
- package/main/default/objects/page_versions/fields/schema.field.yml +7 -0
- package/main/default/objects/page_versions/fields/version.field.yml +6 -0
- package/main/default/objects/page_versions/listviews/all.listview.yml +18 -0
- package/main/default/objects/page_versions/listviews/recent.listview.yml +15 -0
- package/main/default/objects/page_versions/page_versions.object.yml +20 -0
- package/main/default/objects/page_versions/permissions/admin.permission.yml +10 -0
- package/main/default/objects/page_versions/permissions/user.permission.yml +10 -0
- package/main/default/objects/pages/fields/is_active.field.yml +5 -0
- package/main/default/objects/pages/fields/is_archived.field.yml +1 -1
- package/main/default/objects/pages/fields/object_name.field.yml +2 -2
- package/main/default/objects/pages/fields/type.field.yml +4 -4
- 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 -1
- package/main/default/objects/pages/permissions/user.permission.yml +2 -2
- package/main/default/routes/design.html +15 -6
- package/main/default/routes/page_design.router.js +10 -1
- package/main/default/routes/page_schema.router.js +33 -0
- package/main/default/services/page.service.js +281 -0
- package/main/default/triggers/page_assignments_check.trigger.js +23 -0
- package/main/default/triggers/page_versions.enable.trigger.js +15 -0
- package/main/default/triggers/page_versions_check.trigger.js +21 -0
- package/main/default/triggers/pages_check.trigger.js +30 -0
- package/main/default/triggers/pages_metadata.trigger.js +12 -47
- package/package.json +2 -2
- package/package.service.js +18 -18
- package/main/default/client/amis.client.js +0 -47
- package/main/default/client/style.client.js +0 -12
- package/main/default/objects/pages/fields/is_default.field.yml +0 -5
- package/public/amis/amis.css +0 -29
- package/public/amis/sdk/sdk.css +0 -48783
- package/public/amis/sdk/sdk.js +0 -3467
- package/public/builder.io/react/dist/builder-react.browser.js +0 -21
|
@@ -9,5 +9,5 @@ optionsFunction: !!js/function |
|
|
|
9
9
|
return Steedos.getObjectsOptions()
|
|
10
10
|
}
|
|
11
11
|
filterable: true
|
|
12
|
-
required: "{{'record' == formData.type
|
|
13
|
-
visible_on: "{{'record' == formData.type
|
|
12
|
+
required: "{{'record' == formData.type || 'list' == formData.type || 'form' == formData.type ? true: false}}"
|
|
13
|
+
visible_on: "{{'record' == formData.type || 'list' == formData.type || 'form' == formData.type ? true: false}}"
|
|
@@ -4,13 +4,13 @@ type: select
|
|
|
4
4
|
defaultValue: app
|
|
5
5
|
required: true
|
|
6
6
|
options:
|
|
7
|
-
- label:
|
|
7
|
+
- label: 应用程序页面
|
|
8
8
|
value: app
|
|
9
|
-
- label:
|
|
9
|
+
- label: 记录页面
|
|
10
10
|
value: record
|
|
11
|
-
- label:
|
|
11
|
+
- label: 列表页面
|
|
12
12
|
value: list
|
|
13
|
-
- label:
|
|
13
|
+
- label: 表单
|
|
14
14
|
value: form
|
|
15
15
|
sort_no: 130
|
|
16
16
|
visible_on: "{{'redash' != formData.render_engine ? true: false}}"
|
|
@@ -22,6 +22,10 @@ form:
|
|
|
22
22
|
afterView: !!js/function |
|
|
23
23
|
function(){
|
|
24
24
|
if(this.doc.name && (this.doc.render_engine === 'redash' || !this.doc.render_engine)){
|
|
25
|
-
SteedosUI.render(stores.ComponentRegistry.components.Page, { pageId: this.doc.name }, $(".slds-template__container")[0])
|
|
25
|
+
return SteedosUI.render(stores.ComponentRegistry.components.Page, { pageId: this.doc.name }, $(".slds-template__container")[0])
|
|
26
26
|
}
|
|
27
|
+
if(this.doc.type === 'app'){
|
|
28
|
+
$('[data-object-name="page_assignments"]').hide()
|
|
29
|
+
}
|
|
30
|
+
$('[data-object-name="page_versions"]').hide()
|
|
27
31
|
}
|
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
<script src="https://builder.steedos.com/js/builder-fiddle/builder-fiddle.umd.js"></script>
|
|
6
6
|
</head>
|
|
7
7
|
|
|
8
|
-
<body>
|
|
8
|
+
<body style="margin: 0;padding: 0;">
|
|
9
9
|
|
|
10
|
-
<builder-fiddle host="
|
|
10
|
+
<builder-fiddle host="SteedosBuilderHost"></builder-fiddle>
|
|
11
11
|
|
|
12
12
|
<script>
|
|
13
13
|
let comp = document.querySelector('builder-fiddle')
|
|
14
14
|
var params = new URLSearchParams(location.search);
|
|
15
15
|
var pageId = params.get("pageId");
|
|
16
|
-
|
|
16
|
+
// /pageVersion/:pageId/latest
|
|
17
|
+
|
|
18
|
+
axios.get(`/service/api/page/pageVersion/${params.get("pageId")}/latest/`).then(function (response) {
|
|
17
19
|
let schema = response.data.schema;
|
|
18
20
|
if (typeof schema === "string") {
|
|
19
21
|
schema = JSON.parse(schema)
|
|
@@ -34,7 +36,7 @@
|
|
|
34
36
|
const { data } = event;
|
|
35
37
|
if (data) {
|
|
36
38
|
if (data.type === 'builder.saveContent') {
|
|
37
|
-
axios.put(
|
|
39
|
+
axios.put(`/service/api/page/pageVersion/${params.get("pageId")}`, {
|
|
38
40
|
schema: JSON.stringify(data.data.AmisSchema) //直接存储json格式会导致react form异常。
|
|
39
41
|
}).then(function (response) {
|
|
40
42
|
window.postMessage(
|
|
@@ -43,6 +45,15 @@
|
|
|
43
45
|
},
|
|
44
46
|
'*'
|
|
45
47
|
);
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
//保存时, 刷新父页面
|
|
51
|
+
if(window.opener){
|
|
52
|
+
window.opener.postMessage(Object.assign({type: "record.edited"}, {objectName: 'pages'}, {record: {}}), "*")
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error(error)
|
|
56
|
+
}
|
|
46
57
|
}).catch(function (error) {
|
|
47
58
|
// handle error
|
|
48
59
|
console.log(error);
|
|
@@ -55,8 +66,6 @@
|
|
|
55
66
|
|
|
56
67
|
window.addEventListener('message', onWindowMessage);
|
|
57
68
|
|
|
58
|
-
|
|
59
|
-
|
|
60
69
|
</script>
|
|
61
70
|
</body>
|
|
62
71
|
|
|
@@ -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 });
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const express = require("express");
|
|
2
|
+
const router = express.Router();
|
|
3
|
+
const objectql = require('@steedos/objectql');
|
|
4
|
+
const core = require('@steedos/core');
|
|
5
|
+
|
|
6
|
+
router.get('/api/pageSchema/:type', core.requireAuthentication, async function (req, res) {
|
|
7
|
+
try {
|
|
8
|
+
|
|
9
|
+
const userSession = req.user;
|
|
10
|
+
|
|
11
|
+
const { app, objectApiName, recordId, pageId, formFactor} = req.query;
|
|
12
|
+
const { type } = req.params;
|
|
13
|
+
|
|
14
|
+
const pageSchema = await objectql.getSteedosSchema().broker.call(`page.getMeSchema`, {
|
|
15
|
+
type,
|
|
16
|
+
app,
|
|
17
|
+
objectApiName,
|
|
18
|
+
recordId,
|
|
19
|
+
pageId,
|
|
20
|
+
formFactor
|
|
21
|
+
}, {
|
|
22
|
+
meta: {
|
|
23
|
+
user: userSession
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
res.send(pageSchema || {});
|
|
28
|
+
} catch (error) {
|
|
29
|
+
res.status(500).send({ message: error.message });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
});
|
|
33
|
+
exports.default = router;
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
const objectql = require('@steedos/objectql');
|
|
2
|
+
|
|
3
|
+
const _ = require('lodash');
|
|
4
|
+
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "page",
|
|
7
|
+
mixins: [],
|
|
8
|
+
/**
|
|
9
|
+
* Settings
|
|
10
|
+
*/
|
|
11
|
+
settings: {
|
|
12
|
+
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Dependencies
|
|
17
|
+
*/
|
|
18
|
+
dependencies: [],
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Actions
|
|
22
|
+
*/
|
|
23
|
+
actions: {
|
|
24
|
+
getMeSchema: {
|
|
25
|
+
async handler(ctx) {
|
|
26
|
+
const userSession = ctx.meta.user;
|
|
27
|
+
const { type, app, objectApiName, recordId, pageId, formFactor } = ctx.params;
|
|
28
|
+
return await this.getMeSchema(type, app, objectApiName, recordId, pageId, formFactor, userSession);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
// enablePageVersion:{
|
|
32
|
+
// rest: {
|
|
33
|
+
// method: "GET",
|
|
34
|
+
// path: "/pageSchema/enable/:pageVersionId"
|
|
35
|
+
// },
|
|
36
|
+
// params: {
|
|
37
|
+
// pageVersionId: { type: "any" }
|
|
38
|
+
// },
|
|
39
|
+
// async handler(ctx) {
|
|
40
|
+
// const userSession = ctx.meta.user;
|
|
41
|
+
// const { pageVersionId } = ctx.params;
|
|
42
|
+
// return await this.enablePageVersion(pageVersionId, userSession);
|
|
43
|
+
// }
|
|
44
|
+
// },
|
|
45
|
+
getLatestPageVersion:{
|
|
46
|
+
rest: {
|
|
47
|
+
method: "GET",
|
|
48
|
+
path: "/pageVersion/:pageId/latest"
|
|
49
|
+
},
|
|
50
|
+
params: {
|
|
51
|
+
pageId: { type: "any" }
|
|
52
|
+
},
|
|
53
|
+
async handler(ctx){
|
|
54
|
+
// const userSession = ctx.meta.user;
|
|
55
|
+
const { pageId } = ctx.params;
|
|
56
|
+
return await this.getLatestPageVersion(pageId);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
changePageVersion:{
|
|
60
|
+
rest: {
|
|
61
|
+
method: "PUT",
|
|
62
|
+
path: "/pageVersion/:pageId"
|
|
63
|
+
},
|
|
64
|
+
params: {
|
|
65
|
+
pageId: { type: "any" },
|
|
66
|
+
schema: { type: "any" }
|
|
67
|
+
},
|
|
68
|
+
async handler(ctx){
|
|
69
|
+
const userSession = ctx.meta.user;
|
|
70
|
+
const { pageId, schema } = ctx.params;
|
|
71
|
+
return await this.changePageVersion(pageId, schema, userSession);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Events
|
|
78
|
+
*/
|
|
79
|
+
events: {
|
|
80
|
+
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Methods
|
|
85
|
+
*/
|
|
86
|
+
methods: {
|
|
87
|
+
getDefaultSchema: {
|
|
88
|
+
async handler(type, app, objectApiName, recordId, formFactor, userSession) {
|
|
89
|
+
if (process.env.DEFAULT_PAGE_RENDER) {
|
|
90
|
+
return await this.broker.call(`${process.env.DEFAULT_PAGE_RENDER}.getDefaultSchema`, {type, app, objectApiName, recordId, formFactor}, {
|
|
91
|
+
meta: {
|
|
92
|
+
user: userSession
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
getTypePages: {
|
|
100
|
+
async handler(type, objectApiName, userSession) {
|
|
101
|
+
const filters = [['type', '=', type], ['is_active', '=', true]];
|
|
102
|
+
if (type === 'list' || type === 'record' || type === 'form') {
|
|
103
|
+
filters.push(['object_name', '=', objectApiName]);
|
|
104
|
+
}
|
|
105
|
+
return await objectql.getObject('pages').find({ filters: filters, sort: 'modified desc' });
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
getAssignments: {
|
|
109
|
+
async handler(formFactor, typePages) {
|
|
110
|
+
if(!typePages || typePages.length < 1){
|
|
111
|
+
return ;
|
|
112
|
+
}
|
|
113
|
+
const filters = [['page', 'in', _.map(typePages, '_id')]];
|
|
114
|
+
if(formFactor === 'SMALL'){
|
|
115
|
+
filters.push(['mobile','=', true])
|
|
116
|
+
}else{
|
|
117
|
+
filters.push(['desktop','=', true])
|
|
118
|
+
}
|
|
119
|
+
return await objectql.getObject("page_assignments").find({ filters: filters, sort: 'modified desc' });
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
getAppProfileAssignment: {
|
|
123
|
+
async handler(app, assignments, userSession) {
|
|
124
|
+
return _.filter(assignments, (assignment) => {
|
|
125
|
+
//TODO Record Type
|
|
126
|
+
return assignment.app === app && arguments.profile === userSession.profile;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
getAppDefaultAssignment: {
|
|
131
|
+
async handler(app, assignments) {
|
|
132
|
+
return _.filter(assignments, (assignment) => {
|
|
133
|
+
return assignment.app === app;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
getOrgDefaultAssignment: {
|
|
138
|
+
async handler(assignments) {
|
|
139
|
+
return _.filter(assignments, (assignment) => {
|
|
140
|
+
return !assignment.app && !assignment.profile
|
|
141
|
+
})
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
getAssignmentPage: {
|
|
145
|
+
async handler(assignment, typePages) {
|
|
146
|
+
const page = _.find(typePages, (typePage) => {
|
|
147
|
+
return typePage.name == assignment.page || typePage._id == assignment.page
|
|
148
|
+
})
|
|
149
|
+
if (page) {
|
|
150
|
+
return page;
|
|
151
|
+
}
|
|
152
|
+
// else {
|
|
153
|
+
// throw new Error(`not find assignment page ${assignment.desktop}`)
|
|
154
|
+
// }
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
getUserPage: {
|
|
158
|
+
/**
|
|
159
|
+
* 自定义记录页面可在不同层面上分配:
|
|
160
|
+
* 1 组织默认设置 记录页面会为对象显示,除非已进行更多特定分配。
|
|
161
|
+
* 2 如果已指定,则应用程序默认设置 页面分配会覆盖组织默认设置。
|
|
162
|
+
* 3 应用程序、记录类型和简档, 分配会覆盖组织和应用程序默认设置。
|
|
163
|
+
*
|
|
164
|
+
*/
|
|
165
|
+
async handler(type, app, objectApiName, recordId, formFactor, userSession) {
|
|
166
|
+
|
|
167
|
+
try {
|
|
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
|
+
|
|
175
|
+
const assignments = await this.getAssignments(formFactor, typePages);
|
|
176
|
+
|
|
177
|
+
const appProfileassignment = await this.getAppProfileAssignment(app, assignments, userSession);
|
|
178
|
+
if (appProfileassignment && appProfileassignment.length > 0) {
|
|
179
|
+
return await this.getAssignmentPage(appProfileassignment[0], typePages)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const appDefaultAssignment = await this.getAppDefaultAssignment(app, assignments);
|
|
183
|
+
if (appDefaultAssignment && appDefaultAssignment.length > 0) {
|
|
184
|
+
return await this.getAssignmentPage(appDefaultAssignment[0], typePages)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const orgDefaultAssignment = await this.getOrgDefaultAssignment(assignments);
|
|
188
|
+
if (orgDefaultAssignment && orgDefaultAssignment.length > 0) {
|
|
189
|
+
return await this.getAssignmentPage(orgDefaultAssignment[0], typePages)
|
|
190
|
+
}
|
|
191
|
+
} catch (error) {
|
|
192
|
+
console.error(`error`, error);
|
|
193
|
+
return ;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
getMeSchema: {
|
|
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
|
+
}
|
|
212
|
+
// 计算 userSchema
|
|
213
|
+
const userPage = await this.getUserPage(type, app, objectApiName, recordId, formFactor, userSession);
|
|
214
|
+
if (userPage) {
|
|
215
|
+
const pageVersion = await this.getLatestPageVersion(userPage._id, true);
|
|
216
|
+
if(pageVersion && pageVersion.schema){
|
|
217
|
+
return Object.assign({}, userPage, {schema: pageVersion.schema});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const defaultSchema = await this.getDefaultSchema(type, app, objectApiName, recordId, formFactor, userSession);
|
|
221
|
+
if(defaultSchema){
|
|
222
|
+
return { render_engine: process.env.DEFAULT_PAGE_RENDER , schema: defaultSchema}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
getLatestPageVersion:{
|
|
227
|
+
async handler(pageId, isArchived) {
|
|
228
|
+
const filters = [['page', '=', pageId]];
|
|
229
|
+
if(isArchived){
|
|
230
|
+
filters.push(['is_active','=',true])
|
|
231
|
+
}
|
|
232
|
+
// 根据pageId 获取 page version
|
|
233
|
+
const pageVersions = await objectql.getObject('page_versions').find({filters: filters, sort: 'version desc', top: 1});
|
|
234
|
+
if(pageVersions.length === 1){
|
|
235
|
+
return pageVersions[0]
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
changePageVersion: {
|
|
240
|
+
async handler(pageId, schema, userSession) {
|
|
241
|
+
// 根据pageId 获取 pageversions
|
|
242
|
+
const pageVersion = await this.getLatestPageVersion(pageId);
|
|
243
|
+
let version = pageVersion ? pageVersion.version :0;
|
|
244
|
+
if(pageVersion && !pageVersion.is_active){
|
|
245
|
+
return await objectql.getObject('page_versions').update(pageVersion._id, {
|
|
246
|
+
schema: schema
|
|
247
|
+
}, userSession);
|
|
248
|
+
}else{
|
|
249
|
+
return await objectql.getObject('page_versions').insert({
|
|
250
|
+
page: pageId,
|
|
251
|
+
is_active: false,
|
|
252
|
+
schema: schema,
|
|
253
|
+
version: ++version,
|
|
254
|
+
space: userSession.spaceId
|
|
255
|
+
}, userSession)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Service created lifecycle event handler
|
|
263
|
+
*/
|
|
264
|
+
async created() {
|
|
265
|
+
|
|
266
|
+
},
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Service started lifecycle event handler
|
|
270
|
+
*/
|
|
271
|
+
async started() {
|
|
272
|
+
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Service stopped lifecycle event handler
|
|
277
|
+
*/
|
|
278
|
+
async stopped() {
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
};
|
|
@@ -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,15 @@
|
|
|
1
|
+
const objectql = require('@steedos/objectql');
|
|
2
|
+
const _ = require('underscore');
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
listenTo: 'page_versions',
|
|
6
|
+
afterUpdate: async function(){
|
|
7
|
+
const {id, doc, previousDoc} = this;
|
|
8
|
+
if(_.has(doc, 'is_archived') && doc.is_archived && previousDoc.is_archived != doc.is_archived ){
|
|
9
|
+
const record = await objectql.getObject('page_versions').findOne(id)
|
|
10
|
+
await objectql.getObject('pages').directUpdate(record.page, {
|
|
11
|
+
is_archived: true
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -24,52 +24,17 @@ module.exports = {
|
|
|
24
24
|
listenTo: 'pages',
|
|
25
25
|
|
|
26
26
|
afterFind: async function(){
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
id = id.replace(/\\/g, '');
|
|
32
|
-
let data = await get(id);
|
|
33
|
-
if(data){
|
|
34
|
-
dataList = [data]
|
|
35
|
-
}
|
|
36
|
-
}else{
|
|
37
|
-
dataList = await getAll();
|
|
38
|
-
if(filters.name){
|
|
39
|
-
dataList = _.filter(dataList, (item)=>{
|
|
40
|
-
return item.name == filters.name
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
}
|
|
27
|
+
let spaceId = this.spaceId;
|
|
28
|
+
this.data.values = this.data.values.concat(await getAll());
|
|
29
|
+
|
|
30
|
+
this.data.values = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
|
|
44
31
|
|
|
45
|
-
if(dataList){
|
|
46
|
-
const dbRecrodsName = _.pluck(this.data.values, 'name');
|
|
47
|
-
this.data.values = this.data.values.concat(_.filter(dataList, function(data){return data._id == data.name && !_.include(dbRecrodsName, data.name) }))
|
|
48
|
-
}
|
|
49
32
|
},
|
|
50
33
|
afterAggregate: async function(){
|
|
51
|
-
let
|
|
52
|
-
|
|
53
|
-
if(filters._id && !filters._id.$ne){
|
|
54
|
-
let id = filters._id
|
|
55
|
-
id = id.replace(/\\/g, '');
|
|
56
|
-
let data = await get(id);
|
|
57
|
-
if(data){
|
|
58
|
-
dataList = [data]
|
|
59
|
-
}
|
|
60
|
-
}else{
|
|
61
|
-
dataList = await getAll();
|
|
62
|
-
if(filters.name){
|
|
63
|
-
dataList = _.filter(dataList, (item)=>{
|
|
64
|
-
return item.name == filters.name
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
}
|
|
34
|
+
let spaceId = this.spaceId;
|
|
35
|
+
this.data.values = this.data.values.concat(await getAll());
|
|
68
36
|
|
|
69
|
-
|
|
70
|
-
const dbRecrodsName = _.pluck(this.data.values, 'name');
|
|
71
|
-
this.data.values = this.data.values.concat(_.filter(dataList, function(data){return data._id == data.name && !_.include(dbRecrodsName, data.name) }))
|
|
72
|
-
}
|
|
37
|
+
this.data.values = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
|
|
73
38
|
},
|
|
74
39
|
afterCount: async function(){
|
|
75
40
|
let result = await objectql.getObject(this.object_name).find(this.query, await auth.getSessionByUserId(this.userId, this.spaceId))
|
|
@@ -77,11 +42,11 @@ module.exports = {
|
|
|
77
42
|
},
|
|
78
43
|
afterFindOne: async function(){
|
|
79
44
|
if(_.isEmpty(this.data.values)){
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
45
|
+
const all = await getAll();
|
|
46
|
+
const id = this.id;
|
|
47
|
+
this.data.values = _.find(all, function(item){
|
|
48
|
+
return item._id === id
|
|
49
|
+
});
|
|
85
50
|
}
|
|
86
51
|
}
|
|
87
52
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-pages",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.6",
|
|
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": "1742aab217ef9d96dc3514cac617db9863956f93"
|
|
15
15
|
}
|