@steedos/service-pages 2.5.11-beta.9 → 2.5.11

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.
@@ -80,6 +80,8 @@ fields:
80
80
  label: Version Number
81
81
  help:
82
82
  description:
83
+ allow_anonymous:
84
+ label: Allow anonymous access
83
85
  listviews:
84
86
  all:
85
87
  label: All Pages
@@ -98,3 +100,5 @@ actions:
98
100
  label: Reset Schema
99
101
  showDesign:
100
102
  label: Show Design
103
+ viewPage:
104
+ label: View
@@ -80,6 +80,8 @@ fields:
80
80
  label: 版本号
81
81
  help:
82
82
  description:
83
+ allow_anonymous:
84
+ label: 允许匿名访问
83
85
  listviews:
84
86
  all:
85
87
  label: 所有
@@ -98,3 +100,5 @@ actions:
98
100
  label: 重置
99
101
  showDesign:
100
102
  label: 设计器
103
+ viewPage:
104
+ label: 查看
@@ -0,0 +1,22 @@
1
+ /*
2
+ * @Author: baozhoutaon@hotoa.com
3
+ * @Date: 2022-03-29 20:33:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-08-02 16:29:54
6
+ * @Description:
7
+ */
8
+ module.exports = {
9
+ viewPage: function (object_name, record_id) {
10
+ console.log(`viewPaga`, this)
11
+ const { record } = this.record;
12
+ if(record.allow_anonymous){
13
+ window.open(`/api/page/public/${record_id}`)
14
+ }else{
15
+ window.open(`/api/page/view/${record_id}`)
16
+ }
17
+ },
18
+ viewPageVisible: function (object_name, record_id, permission, data) {
19
+ var record = data && data.record;
20
+ return record && record.type === 'app';
21
+ }
22
+ }
@@ -0,0 +1,6 @@
1
+ name: viewPage
2
+ is_enable: true
3
+ label: 查看
4
+ 'on': record_only
5
+ visible: true
6
+ sort: 9999
@@ -0,0 +1,5 @@
1
+ name: allow_anonymous
2
+ label: Allow anonymous access
3
+ type: toggle
4
+ sort_no: 470
5
+ visible_on: "{{'app' == formData.type ? true: false}}"
@@ -0,0 +1,197 @@
1
+ <!--
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2023-08-01 17:47:18
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-08-02 16:54:35
6
+ * @Description:
7
+ -->
8
+ <html>
9
+ <head>
10
+ <style>
11
+ body { background-color: #fff; }
12
+ html {
13
+ background-color: #fff;
14
+ background: #fff !important;
15
+ }
16
+ </style>
17
+ <meta charset="utf-8">
18
+ <title><%=Title%></title>
19
+
20
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
21
+ <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
22
+ <meta name="mobile-web-app-capable" content="yes">
23
+ <meta name="theme-color" content="#000">
24
+ <meta name="application-name">
25
+ <meta name="apple-mobile-web-app-capable" content="yes">
26
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
27
+ <meta name="apple-mobile-web-app-title">
28
+
29
+ <link rel="stylesheet" href="/tailwind/tailwind-base.css" />
30
+
31
+ <script>
32
+ window.Creator = {};
33
+ window.Steedos = {
34
+ isMobile: ()=>{
35
+ return window.innerWidth <= 768;
36
+ }
37
+ };
38
+ window.__meteor_runtime_config__ = <%- JSON.stringify(__meteor_runtime_config__) %>
39
+ window.Meteor = {
40
+ isCordova: false
41
+ }
42
+ </script>
43
+
44
+
45
+ <script src="/lib/jquery/jquery-1.11.2.min.js"></script>
46
+
47
+ <!-- lodash,低代码编辑器的依赖 -->
48
+ <script src="<%=STEEDOS_UNPKG_URL%>/lodash@4.17.21/lodash.min.js"></script>
49
+ <script src="<%=STEEDOS_UNPKG_URL%>/marked@4.0.17/marked.min.js"></script>
50
+
51
+ <script src="<%=STEEDOS_UNPKG_URL%>/crypto-js@4.1.1/crypto-js.js"></script>
52
+
53
+ <!-- Steedos Builder -->
54
+ <script src="<%=STEEDOS_UNPKG_URL%>/@steedos-builder/sdk@0.2.36/dist/index.umd.js"></script>
55
+
56
+ <script src="<%=STEEDOS_AMIS_URL%>/sdk/sdk.js"></script>
57
+
58
+
59
+
60
+ <link rel="stylesheet" type="text/css" href="<%=STEEDOS_UNPKG_URL%>/@salesforce-ux/design-system@2.19.0/assets/styles/salesforce-lightning-design-system.min.css">
61
+ <link rel="stylesheet" href="<%=STEEDOS_AMIS_URL%>/lib/themes/antd.css" />
62
+ <link rel="stylesheet" href="<%=STEEDOS_AMIS_URL%>/lib/helper.css" />
63
+ <link rel="stylesheet" href="<%=STEEDOS_AMIS_URL%>/sdk/iconfont.css" />
64
+ <link rel="stylesheet" href="<%=STEEDOS_UNPKG_URL%>/@fortawesome/fontawesome-free@6.2.0/css/all.min.css" />
65
+
66
+ <link rel="stylesheet" href="<%=ROOT_URL%>/tailwind/tailwind-steedos.css" />
67
+ <link rel="stylesheet" href="<%=ROOT_URL%>/amis/amis.css" />
68
+ </head>
69
+
70
+ <body>
71
+
72
+ <div class="page-template-root"></div>
73
+
74
+ <script>
75
+ window.lodash = _;
76
+ window.MonacoEnvironment = {};
77
+ window.t = (k)=>{
78
+ console.log(`not support window.t`);
79
+ return k;
80
+ }
81
+
82
+ window.FlowRouter = {
83
+ current: ()=>{
84
+ return {
85
+ path: location.pathname,
86
+ queryParams: {}
87
+ }
88
+ }
89
+ }
90
+
91
+ </script>
92
+
93
+ <script src="/pages/js/builder.client.js"></script>
94
+ <script src="/pages/js/page.render.client.js"></script>
95
+ <script src="/pages/js/builder.client.js"></script>
96
+
97
+ <script src="/amis-pages/js/amis.render.client.js"></script>
98
+ <script src="/amis-pages/js/amis.util.client.js"></script>
99
+ <script src="/amis-pages/js/creator.function.client.js"></script>
100
+ <script src="/amis-pages/js/onWindowMessage.client.js"></script>
101
+
102
+
103
+ <script >
104
+ window.Creator.USER_CONTEXT = <%- JSON.stringify(USER_CONTEXT) %>
105
+ window.Builder = BuilderSDK.Builder;
106
+ window.builder = BuilderSDK.builder;
107
+ window.builder.init('steedos');
108
+
109
+ let searchParams = new URLSearchParams(location.search);
110
+ if (searchParams.get('assetUrls')) {
111
+ sessionStorage.setItem('assetUrls', searchParams.get('assetUrls'))
112
+ }
113
+
114
+ let assetUrls = "<%=STEEDOS_PUBLIC_PAGE_ASSETURLS%>"
115
+ if(_.isString(assetUrls)){
116
+ assetUrls = assetUrls.split(',');
117
+ }
118
+
119
+ const getBrowserLocale = function() {
120
+ var l, locale;
121
+ l = window.navigator.userLanguage || window.navigator.language || 'en';
122
+ if (l.indexOf("zh") >= 0) {
123
+ locale = "zh-cn";
124
+ } else {
125
+ locale = "en-us";
126
+ }
127
+ return locale;
128
+ };
129
+
130
+
131
+ Builder.set({
132
+ nodeEnv: "<%=NODE_ENV%>",
133
+ rootUrl: "<%=ROOT_URL%>",
134
+ unpkgUrl: "<%=STEEDOS_UNPKG_URL%>",
135
+ steedosVersion: "<%=STEEDOS_VERSION%>",
136
+ assetUrls: assetUrls,
137
+ steedosAmisVersion: "<%=STEEDOS_AMIS_VERSION%>",
138
+ locale: "<%=STEEDOS_LOCALE%>" || getBrowserLocale()
139
+ });
140
+
141
+ window.axios = amisRequire('axios');
142
+ window.moment = amisRequire('moment');
143
+ window.React = amisRequire('react');
144
+ window.ReactDOM = amisRequire('react-dom');
145
+
146
+ window.addEventListener('message', function (event) {
147
+ const { data } = event;
148
+ if (data.type === 'Builder.loaded') {
149
+ Builder.registerRemoteAssets(Builder.settings.assetUrls);
150
+ }
151
+ })
152
+
153
+ if ("<%=STEEDOS_PUBLIC_SCRIPT_VCONSOLE%>") {
154
+ let scriptTag = document.createElement("script");
155
+ scriptTag.setAttribute("src", "<%=STEEDOS_PUBLIC_SCRIPT_VCONSOLE%>");
156
+ document.getElementsByTagName("head")[0].appendChild(scriptTag);
157
+ scriptTag.onload = function(script){
158
+ window.vConsole = new window.VConsole();
159
+ }
160
+ }
161
+
162
+ if ("<%=STEEDOS_PUBLIC_SCRIPT_PLUGINS%>") {
163
+ "<%=STEEDOS_PUBLIC_SCRIPT_PLUGINS%>".split(',').forEach(function (src) {
164
+ let scriptTag = document.createElement("script");
165
+ scriptTag.setAttribute("src", src);
166
+ document.getElementsByTagName("head")[0].appendChild(scriptTag);
167
+ })
168
+ }
169
+
170
+ if ("<%=STEEDOS_PUBLIC_STYLE_PLUGINS%>") {
171
+ "<%=STEEDOS_PUBLIC_STYLE_PLUGINS%>".split(',').forEach(function (src) {
172
+ let styleTag = document.createElement("link");
173
+ styleTag.setAttribute("rel", "stylesheet");
174
+ styleTag.setAttribute("type", "text/css");
175
+ styleTag.setAttribute("href", src);
176
+ document.getElementsByTagName("head")[0].appendChild(styleTag);
177
+ })
178
+ }
179
+
180
+
181
+ const appId = 'admin';
182
+
183
+ const page = {
184
+ render_engine: 'amis',
185
+ name: "<%=pageApiName%>",
186
+ schema: <%- JSON.stringify(pageSchema) %>
187
+ }
188
+
189
+ const container = $(".page-template-root")[0];
190
+
191
+ Steedos.Page.render(container, page, Object.assign({}, {
192
+ appId: appId
193
+ }));
194
+
195
+ </script>
196
+ </body>
197
+ </html>
@@ -0,0 +1,140 @@
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-04-04 16:34:28
4
+ * @Description:
5
+ */
6
+ const express = require('express');
7
+ const router = express.Router();
8
+ const auth = require('@steedos/auth');
9
+ const ejs = require('ejs');
10
+ const fs = require('fs');
11
+ const _ = require('lodash');
12
+ const path = require('path');
13
+ const objectql = require('@steedos/objectql');
14
+
15
+ router.get('/api/page/view/:pageId', auth.authentication, async function (req, res) {
16
+ try {
17
+ res.set('Content-Type', 'text/html');
18
+ const userSession = req.user;
19
+ const { pageId } = req.params;
20
+ const page = await objectql.getObject('pages').findOne(pageId)
21
+ const pageVersion = await objectql.broker.call(`page.getLatestPageVersion`, {pageId: pageId});
22
+ if(!pageVersion){
23
+ return res.status(404).send({ message: 'Page not found' });
24
+ }else if(page.type != 'app'){
25
+ // 如果不是app类型的page,则返回错误信息
26
+ return res.status(404).send({ message: 'Must be App page.' });
27
+ }
28
+
29
+ // 如果当前用户未登录,且页面不允许匿名访问,则跳转到登录页面
30
+ if(!userSession && !page.allow_anonymous){
31
+ return res.redirect(`/accounts/a/#/login?redirect_uri=${encodeURIComponent(`/api/page/view/${pageId}`)}`);
32
+ }
33
+
34
+ let assetUrls = req.query.assetUrls;
35
+
36
+ let locale = "zh-CN";
37
+ if (req.query.locale == "en-us") {
38
+ locale = "en-US";
39
+ } else if (req.query.locale == "zh-cn") {
40
+ locale = "zh-CN";
41
+ }
42
+
43
+ const filename = __dirname+'/page_view.ejs';
44
+ const data = {
45
+ Title: page.label,
46
+ pageApiName: page.name,
47
+ STEEDOS_UNPKG_URL: process.env.STEEDOS_UNPKG_URL,
48
+ STEEDOS_AMIS_URL: process.env.STEEDOS_AMIS_URL,
49
+ STEEDOS_PUBLIC_PAGE_ASSETURLS: assetUrls || process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS,
50
+ NODE_ENV: process.env.NODE_ENV,
51
+ ROOT_URL: __meteor_runtime_config__.ROOT_URL,
52
+ STEEDOS_VERSION: process.env.STEEDOS_VERSION,
53
+ STEEDOS_AMIS_VERSION: process.env.STEEDOS_AMIS_VERSION,
54
+ STEEDOS_PUBLIC_SCRIPT_VCONSOLE: process.env.STEEDOS_PUBLIC_SCRIPT_VCONSOLE,
55
+ STEEDOS_PUBLIC_SCRIPT_PLUGINS: process.env.STEEDOS_PUBLIC_SCRIPT_PLUGINS,
56
+ STEEDOS_PUBLIC_STYLE_PLUGINS: process.env.STEEDOS_PUBLIC_STYLE_PLUGINS,
57
+ STEEDOS_LOCALE: locale,
58
+ USER_CONTEXT: {
59
+ user: userSession,
60
+ userId: userSession.userId,
61
+ spaceId: userSession.spaceId
62
+ },
63
+ pageSchema: _.isString(pageVersion.schema) ? JSON.parse(pageVersion.schema) : pageVersion.schema,
64
+ __meteor_runtime_config__: __meteor_runtime_config__
65
+ }
66
+ const options = {}
67
+ ejs.renderFile(filename, data, options, function(err, str){
68
+ // str => Rendered HTML string
69
+ if(err){
70
+ console.log(`err`, err)
71
+ }
72
+ res.send(str);
73
+ });
74
+
75
+ } catch (error) {
76
+ res.status(500).send({ message: error.message });
77
+ }
78
+
79
+ });
80
+
81
+ router.get('/api/page/public/:pageId', async function (req, res) {
82
+ try {
83
+ res.set('Content-Type', 'text/html');
84
+ const { pageId } = req.params;
85
+ const page = await objectql.getObject('pages').findOne(pageId)
86
+ const pageVersion = await objectql.broker.call(`page.getLatestPageVersion`, {pageId: pageId});
87
+ if(!pageVersion){
88
+ return res.status(404).send({ message: 'Page not found' });
89
+ }else if(page.type != 'app'){
90
+ // 如果不是app类型的page,则返回错误信息
91
+ return res.status(404).send({ message: 'Must be App page.' });
92
+ }
93
+
94
+ let assetUrls = req.query.assetUrls;
95
+
96
+ let locale = "zh-CN";
97
+ if (req.query.locale == "en-us") {
98
+ locale = "en-US";
99
+ } else if (req.query.locale == "zh-cn") {
100
+ locale = "zh-CN";
101
+ }
102
+
103
+ const filename = __dirname+'/page_view.ejs';
104
+ const data = {
105
+ Title: page.label,
106
+ pageApiName: page.name,
107
+ STEEDOS_UNPKG_URL: process.env.STEEDOS_UNPKG_URL,
108
+ STEEDOS_AMIS_URL: process.env.STEEDOS_AMIS_URL,
109
+ STEEDOS_PUBLIC_PAGE_ASSETURLS: assetUrls || process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS,
110
+ NODE_ENV: process.env.NODE_ENV,
111
+ ROOT_URL: __meteor_runtime_config__.ROOT_URL,
112
+ STEEDOS_VERSION: process.env.STEEDOS_VERSION,
113
+ STEEDOS_AMIS_VERSION: process.env.STEEDOS_AMIS_VERSION,
114
+ STEEDOS_PUBLIC_SCRIPT_VCONSOLE: process.env.STEEDOS_PUBLIC_SCRIPT_VCONSOLE,
115
+ STEEDOS_PUBLIC_SCRIPT_PLUGINS: process.env.STEEDOS_PUBLIC_SCRIPT_PLUGINS,
116
+ STEEDOS_PUBLIC_STYLE_PLUGINS: process.env.STEEDOS_PUBLIC_STYLE_PLUGINS,
117
+ STEEDOS_LOCALE: locale,
118
+ USER_CONTEXT: {
119
+ user: {},
120
+ userId: "",
121
+ spaceId: ""
122
+ },
123
+ pageSchema: _.isString(pageVersion.schema) ? JSON.parse(pageVersion.schema) : pageVersion.schema,
124
+ __meteor_runtime_config__: __meteor_runtime_config__
125
+ }
126
+ const options = {}
127
+ ejs.renderFile(filename, data, options, function(err, str){
128
+ // str => Rendered HTML string
129
+ if(err){
130
+ console.log(`err`, err)
131
+ }
132
+ res.send(str);
133
+ });
134
+
135
+ } catch (error) {
136
+ res.status(500).send({ message: error.message });
137
+ }
138
+
139
+ });
140
+ exports.default = router;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-pages",
3
- "version": "2.5.11-beta.9",
3
+ "version": "2.5.11",
4
4
  "main": "package.service.js",
5
5
  "scripts": {},
6
6
  "license": "MIT",
@@ -8,7 +8,7 @@
8
8
  "publishConfig": {
9
9
  "access": "public"
10
10
  },
11
- "gitHead": "e1cca47d712bc36ed0748e257da560b24330b788",
11
+ "gitHead": "fa315255231ac336e95125366f6c4362a1a3200e",
12
12
  "dependencies": {
13
13
  "ejs": "^3.1.8"
14
14
  }
@@ -4,7 +4,8 @@ const packageName = project.name;
4
4
  const packageLoader = require('@steedos/service-package-loader');
5
5
  const objectql = require('@steedos/objectql');
6
6
  const _ = require(`lodash`);
7
-
7
+ const path = require('path');
8
+ const fs = require("fs");
8
9
  const getCharts = async(apiName)=>{
9
10
  const charts = await objectql.getObject('charts').find({ filters: [['name', '=', apiName]] });
10
11
  if(charts.length > 0){
@@ -35,7 +36,8 @@ module.exports = {
35
36
  path: __dirname,
36
37
  name: this.name,
37
38
  isPackage: false
38
- }
39
+ },
40
+ loadedPublicClientJS: false,
39
41
  },
40
42
 
41
43
  /**
@@ -144,14 +146,59 @@ module.exports = {
144
146
  * Events
145
147
  */
146
148
  events: {
147
-
149
+ "steedos-server.started": {
150
+ async handler() {
151
+ await this.publicClientJS();
152
+ }
153
+ },
154
+ "space.initialized": {
155
+ async handler() {
156
+ await this.publicClientJS();
157
+ }
158
+ }
148
159
  },
149
160
 
150
161
  /**
151
162
  * Methods
152
163
  */
153
164
  methods: {
154
-
165
+ publicClientJS: {
166
+ handler() {
167
+ let packageInfo = this.settings.packageInfo;
168
+ if (!packageInfo) {
169
+ return;
170
+ }
171
+ const { path : packagePath } = packageInfo;
172
+ let publicPath = path.join(packagePath, 'main', 'default', 'client');
173
+ try {
174
+ if (!fs.existsSync(publicPath) || this.settings.loadedPublicClientJS || typeof WebApp == 'undefined') {
175
+ return;
176
+ }
177
+ } catch (error) {
178
+ return
179
+ }
180
+
181
+ try {
182
+ const express = require('express');
183
+ this.settings.loadedPublicClientJS = true;
184
+ try {
185
+ const router = require('@steedos/router').staticRouter();
186
+ let routerPath = "";
187
+ if (__meteor_runtime_config__.ROOT_URL_PATH_PREFIX) {
188
+ routerPath = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;
189
+ }
190
+ const cacheTime = 86400000 * 1; // one day
191
+ router.use(`${routerPath}/pages/js`, express.static(publicPath, { maxAge: cacheTime }));
192
+ // WebApp.connectHandlers.use(router);
193
+ } catch (error) {
194
+ console.error(error)
195
+ this.settings.loadedPublicClientJS = false;
196
+ }
197
+ } catch (error) {
198
+
199
+ }
200
+ }
201
+ },
155
202
  },
156
203
 
157
204
  /**
@@ -165,7 +212,9 @@ module.exports = {
165
212
  * Service started lifecycle event handler
166
213
  */
167
214
  async started() {
168
-
215
+ this.broker.waitForServices("steedos-server").then(async () => {
216
+ await this.publicClientJS()
217
+ });
169
218
  },
170
219
 
171
220
  /**