ts-glitter 21.2.1 → 21.2.2

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.
@@ -1,1473 +1,1542 @@
1
- import {GVC, init} from '../glitterBundle/GVController.js';
2
- import {Editor} from './editor.js';
3
- import {ApiPageConfig} from '../api/pageConfig.js';
4
- import {Swal} from '../modules/sweetAlert.js';
5
- import {Main_editor} from './function-page/main_editor.js';
6
- import {Page_editor} from './function-page/page_editor.js';
7
- import {Setting_editor} from './function-page/setting_editor.js';
1
+ import { GVC, init } from '../glitterBundle/GVController.js';
2
+ import { Editor } from './editor.js';
3
+ import { ApiPageConfig } from '../api/pageConfig.js';
4
+ import { Swal } from '../modules/sweetAlert.js';
5
+ import { Main_editor } from './function-page/main_editor.js';
6
+ import { Page_editor } from './function-page/page_editor.js';
7
+ import { Setting_editor } from './function-page/setting_editor.js';
8
8
  import * as triggerBridge from '../editor-bridge/trigger-event.js';
9
- import {TriggerEvent} from '../glitterBundle/plugins/trigger-event.js';
10
- import {StoreHelper} from '../helper/store-helper.js';
11
- import {Storage} from '../glitterBundle/helper/storage.js';
12
- import {ServerEditor} from './function-page/server-editor/server-editor.js';
13
- import {AddComponent} from '../editor/add-component.js';
14
- import {PageSettingView} from '../editor/page-setting-view.js';
15
- import {AddPage} from '../editor/add-page.js';
16
- import {SetGlobalValue} from '../editor/set-global-value.js';
17
- import {PageCodeSetting} from '../editor/page-code-setting.js';
18
- import {NormalPageEditor} from '../editor/normal-page-editor.js';
19
- import {EditorConfig} from '../editor-config.js';
20
- import {BgCustomerMessage} from '../backend-manager/bg-customer-message.js';
21
- import {BgGuide} from "../backend-manager/bg-guide.js";
22
- import {ApiShop} from "../glitter-base/route/shopping.js";
23
- import {ShareDialog} from "../glitterBundle/dialog/ShareDialog.js";
24
- import {SearchIdea} from "../editor/search-idea.js";
25
- import {AiMessage} from "../cms-plugin/ai-message.js";
26
- import {GlobalWidget} from "../glitterBundle/html-component/global-widget.js";
27
- import {BgWidget} from "../backend-manager/bg-widget.js";
28
- import {ApiUser} from "../glitter-base/route/user.js";
29
- import {BaseApi} from "../glitterBundle/api/base.js";
30
- import {GlobalUser} from "../glitter-base/global/global-user.js";
31
- import {Article} from "../glitter-base/route/article.js";
32
- import {AiChat} from "../glitter-base/route/ai-chat.js";
33
- import {BgMobileGuide} from "../backend-manager/bg-mobile-guide.js";
34
- import {SaasViewModel} from "../view-model/saas-view-model.js";
9
+ import { TriggerEvent } from '../glitterBundle/plugins/trigger-event.js';
10
+ import { StoreHelper } from '../helper/store-helper.js';
11
+ import { Storage } from '../glitterBundle/helper/storage.js';
12
+ import { ServerEditor } from './function-page/server-editor/server-editor.js';
13
+ import { AddComponent } from '../editor/add-component.js';
14
+ import { PageSettingView } from '../editor/page-setting-view.js';
15
+ import { AddPage } from '../editor/add-page.js';
16
+ import { SetGlobalValue } from '../editor/set-global-value.js';
17
+ import { PageCodeSetting } from '../editor/page-code-setting.js';
18
+ import { NormalPageEditor } from '../editor/normal-page-editor.js';
19
+ import { EditorConfig } from '../editor-config.js';
20
+ import { BgCustomerMessage } from '../backend-manager/bg-customer-message.js';
21
+ import { BgGuide } from '../backend-manager/bg-guide.js';
22
+ import { ApiShop } from '../glitter-base/route/shopping.js';
23
+ import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
24
+ import { SearchIdea } from '../editor/search-idea.js';
25
+ import { AiMessage } from '../cms-plugin/ai-message.js';
26
+ import { GlobalWidget } from '../glitterBundle/html-component/global-widget.js';
27
+ import { BgWidget } from '../backend-manager/bg-widget.js';
28
+ import { ApiUser } from '../glitter-base/route/user.js';
29
+ import { BaseApi } from '../glitterBundle/api/base.js';
30
+ import { GlobalUser } from '../glitter-base/global/global-user.js';
31
+ import { Article } from '../glitter-base/route/article.js';
32
+ import { AiChat } from '../glitter-base/route/ai-chat.js';
33
+ import { BgMobileGuide } from '../backend-manager/bg-mobile-guide.js';
34
+ import { SaasViewModel } from '../view-model/saas-view-model.js';
35
35
 
36
36
  const html = String.raw;
37
37
  //
38
38
  const editorContainerID = `HtmlEditorContainer`;
39
39
  init(import.meta.url, (gvc, glitter, gBundle) => {
40
- glitter.share.loading_dialog = (new ShareDialog(gvc.glitter))
41
- const css = String.raw;
42
- gvc.addStyle(css`
40
+ glitter.share.loading_dialog = new ShareDialog(gvc.glitter);
41
+ const css = String.raw;
42
+ gvc.addStyle(css`
43
+ .hoverHidden div {
44
+ display: none;
45
+ }
43
46
 
44
- .hoverHidden div {
45
- display: none;
46
- }
47
+ .hoverHidden:hover div {
48
+ display: flex;
49
+ }
47
50
 
48
- .hoverHidden:hover div {
49
- display: flex;
50
- }
51
+ .tooltip {
52
+ z-index: 99999 !important;
53
+ }
51
54
 
52
- .tooltip {
53
- z-index: 99999 !important;
54
- }
55
+ .scroll-in {
56
+ animation: slideInFromLeft 0.3s ease-out forwards;
57
+ }
55
58
 
56
- .scroll-in {
57
- animation: slideInFromLeft 0.3s ease-out forwards;
58
- }
59
+ .scroll-out {
60
+ left: 0%; /* 將元素移到畫面外 */
61
+ animation: slideOutFromLeft 0.3s ease-out forwards;
62
+ }
59
63
 
60
- .scroll-out {
61
- left: 0%; /* 將元素移到畫面外 */
62
- animation: slideOutFromLeft 0.3s ease-out forwards;
63
- }
64
+ /* @keyframes 定義動畫 */
65
+ @keyframes slideInFromLeft {
66
+ 0% {
67
+ left: -120%; /* 起始位置在畫面外 */
68
+ }
69
+ 100% {
70
+ left: 0; /* 結束位置在畫面內 */
71
+ }
72
+ }
73
+ /* @keyframes 定義動畫 */
74
+ @keyframes slideOutFromLeft {
75
+ 0% {
76
+ left: 0; /* 起始位置在畫面外 */
77
+ }
78
+ 100% {
79
+ left: -120%; /* 結束位置在畫面內 */
80
+ }
81
+ }
82
+ `);
83
+ gvc.addStyle(css`
84
+ .parent_ {
85
+ position: relative; /* 确保子元素相对于父元素定位 */
86
+ }
64
87
 
65
- /* @keyframes 定義動畫 */
66
- @keyframes slideInFromLeft {
67
- 0% {
68
- left: -120%; /* 起始位置在畫面外 */
69
- }
70
- 100% {
71
- left: 0; /* 結束位置在畫面內 */
72
- }
73
- }
74
- /* @keyframes 定義動畫 */
75
- @keyframes slideOutFromLeft {
76
- 0% {
77
- left: 0; /* 起始位置在畫面外 */
78
- }
79
- 100% {
80
- left: -120%; /* 結束位置在畫面內 */
81
- }
82
- }
83
- `);
84
- gvc.addStyle(css`
85
- .parent_ {
86
- position: relative; /* 确保子元素相对于父元素定位 */
87
- }
88
+ .child_ {
89
+ display: none; /* 默认隐藏子元素 */
90
+ position: absolute; /* 可选:使子元素定位 */
91
+ top: 100%; /* 可选:根据需要调整子元素的位置 */
92
+ left: 0;
93
+ background-color: lightgrey; /* 可选:子元素背景颜色 */
94
+ padding: 10px; /* 可选:子元素内边距 */
95
+ border: 1px solid #ccc; /* 可选:子元素边框 */
96
+ }
88
97
 
89
- .child_ {
90
- display: none; /* 默认隐藏子元素 */
91
- position: absolute; /* 可选:使子元素定位 */
92
- top: 100%; /* 可选:根据需要调整子元素的位置 */
93
- left: 0;
94
- background-color: lightgrey; /* 可选:子元素背景颜色 */
95
- padding: 10px; /* 可选:子元素内边距 */
96
- border: 1px solid #ccc; /* 可选:子元素边框 */
97
- }
98
+ .parent_:hover .child_ {
99
+ display: block; /* 当父元素被 hover 时显示子元素 */
100
+ }
98
101
 
99
- .parent_:hover .child_ {
100
- display: block; /* 当父元素被 hover 时显示子元素 */
101
- }
102
+ .scroll-right-in {
103
+ right: -120%; /* 將元素移到畫面外 */
104
+ animation: slideInRight 0.3s ease-out forwards;
105
+ }
102
106
 
103
- .scroll-right-in {
104
- right: -120%; /* 將元素移到畫面外 */
105
- animation: slideInRight 0.3s ease-out forwards;
106
- }
107
+ .scroll-right-out {
108
+ right: 0; /* 將元素移到畫面外 */
109
+ animation: slideOutRight 0.3s ease-out forwards;
110
+ }
107
111
 
108
- .scroll-right-out {
109
- right: 0; /* 將元素移到畫面外 */
110
- animation: slideOutRight 0.3s ease-out forwards;
111
- }
112
+ /* @keyframes 定義動畫 */
113
+ @keyframes slideInRight {
114
+ 0% {
115
+ right: -120%; /* 起始位置在畫面外 */
116
+ }
117
+ 100% {
118
+ right: 0; /* 結束位置在畫面內 */
119
+ }
120
+ }
121
+ /* @keyframes 定義動畫 */
122
+ @keyframes slideOutRight {
123
+ 0% {
124
+ right: 0; /* 起始位置在畫面外 */
125
+ }
126
+ 100% {
127
+ right: -120%; /* 結束位置在畫面內 */
128
+ }
129
+ }
130
+ `);
131
+ glitter.share.is_blog_editor = () => {
132
+ return (
133
+ glitter.getUrlParameter('page').startsWith('pages/') ||
134
+ glitter.getUrlParameter('page').startsWith('hidden/') ||
135
+ glitter.getUrlParameter('page').startsWith('shop/')
136
+ );
137
+ };
138
+ Storage.lastSelect = '';
139
+ const viewModel: {
140
+ dataList: any;
141
+ data: any;
142
+ loading: boolean;
143
+ selectItem: any;
144
+ initialJS: { name: string; src: { official: string; open: boolean }; route: string }[];
145
+ pluginList: { name: string; src: { staging: string; official: string; open: boolean }; route: string }[];
146
+ initialStyle: { name: string; src: { src: string }; route: string }[];
147
+ initialStyleSheet: { name: string; src: { src: string }; route: string }[];
148
+ globalValue: any;
149
+ initialCode: any;
150
+ initialList: any;
151
+ homePage: string;
152
+ selectContainer: any;
153
+ backendPlugins: any;
154
+ selectIndex: any;
155
+ waitCopy: any;
156
+ appConfig: any;
157
+ originalConfig: any;
158
+ globalScript: any;
159
+ globalStyle: any;
160
+ globalStyleTag: any;
161
+ appName: string;
162
+ originalData: any;
163
+ domain: string;
164
+ originalDomain: string;
165
+ saveArray: any;
166
+ app_config_original: any;
167
+ } = {
168
+ saveArray: {},
169
+ appName: gBundle.appName,
170
+ appConfig: undefined,
171
+ originalConfig: undefined,
172
+ dataList: undefined,
173
+ originalData: undefined,
174
+ data: undefined,
175
+ loading: true,
176
+ selectItem: undefined,
177
+ initialStyle: [],
178
+ globalValue: [],
179
+ initialStyleSheet: [],
180
+ pluginList: [],
181
+ initialJS: [],
182
+ globalStyleTag: [],
183
+ initialCode: '',
184
+ initialList: [],
185
+ backendPlugins: [],
186
+ homePage: '',
187
+ selectContainer: undefined,
188
+ selectIndex: undefined,
189
+ waitCopy: undefined,
190
+ globalScript: undefined,
191
+ globalStyle: undefined,
192
+ domain: '',
193
+ originalDomain: '',
194
+ app_config_original: {},
195
+ };
196
+ initialEditor(gvc, viewModel);
197
+ (window.parent as any).glitter.share.refreshMainLeftEditor = () => {
198
+ gvc.notifyDataChange('MainEditorLeft');
199
+ };
200
+ (window.parent as any).glitter.share.refreshMainRightEditor = () => {
201
+ gvc.notifyDataChange('MainEditorRight');
202
+ };
203
+ const dialog = new ShareDialog(glitter);
112
204
 
113
- /* @keyframes 定義動畫 */
114
- @keyframes slideInRight {
115
- 0% {
116
- right: -120%; /* 起始位置在畫面外 */
117
- }
118
- 100% {
119
- right: 0; /* 結束位置在畫面內 */
120
- }
121
- }
122
- /* @keyframes 定義動畫 */
123
- @keyframes slideOutRight {
124
- 0% {
125
- right: 0; /* 起始位置在畫面外 */
126
- }
127
- 100% {
128
- right: -120%; /* 結束位置在畫面內 */
129
- }
130
- }
131
- `);
132
- glitter.share.is_blog_editor=()=>{
133
- return glitter.getUrlParameter('page').startsWith('pages/') || glitter.getUrlParameter('page').startsWith('hidden/') || glitter.getUrlParameter('page').startsWith('shop/')
205
+ //載入頁面資料
206
+ async function lod() {
207
+ if (EditorConfig.backend_page() !== 'backend-manger') {
208
+ glitter.share.loading_dialog.dataLoading({ text: '模組加載中...', visible: true });
209
+ } else {
210
+ dialog.dataLoading({ visible: true });
134
211
  }
135
- Storage.lastSelect = ''
136
- const viewModel: {
137
- dataList: any;
138
- data: any;
139
- loading: boolean;
140
- selectItem: any;
141
- initialJS: { name: string; src: { official: string; open: boolean }; route: string }[];
142
- pluginList: { name: string; src: { staging: string; official: string; open: boolean }; route: string }[];
143
- initialStyle: { name: string; src: { src: string }; route: string }[];
144
- initialStyleSheet: { name: string; src: { src: string }; route: string }[];
145
- globalValue: any;
146
- initialCode: any;
147
- initialList: any;
148
- homePage: string;
149
- selectContainer: any;
150
- backendPlugins: any;
151
- selectIndex: any;
152
- waitCopy: any;
153
- appConfig: any;
154
- originalConfig: any;
155
- globalScript: any;
156
- globalStyle: any;
157
- globalStyleTag: any;
158
- appName: string;
159
- originalData: any;
160
- domain: string;
161
- originalDomain: string;
162
- saveArray: any;
163
- app_config_original: any;
164
- } = {
165
- saveArray: {},
166
- appName: gBundle.appName,
167
- appConfig: undefined,
168
- originalConfig: undefined,
169
- dataList: undefined,
170
- originalData: undefined,
171
- data: undefined,
172
- loading: true,
173
- selectItem: undefined,
174
- initialStyle: [],
175
- globalValue: [],
176
- initialStyleSheet: [],
177
- pluginList: [],
178
- initialJS: [],
179
- globalStyleTag: [],
180
- initialCode: '',
181
- initialList: [],
182
- backendPlugins: [],
183
- homePage: '',
184
- selectContainer: undefined,
185
- selectIndex: undefined,
186
- waitCopy: undefined,
187
- globalScript: undefined,
188
- globalStyle: undefined,
189
- domain: '',
190
- originalDomain: '',
191
- app_config_original: {},
192
- };
193
- initialEditor(gvc, viewModel);
194
- (window.parent as any).glitter.share.refreshMainLeftEditor = () => {
195
- gvc.notifyDataChange('MainEditorLeft');
196
- };
197
- (window.parent as any).glitter.share.refreshMainRightEditor = () => {
198
- gvc.notifyDataChange('MainEditorRight');
199
- };
200
- const dialog = new ShareDialog(glitter)
201
212
 
202
- //載入頁面資料
203
- async function lod() {
204
- if (EditorConfig.backend_page() !== 'backend-manger') {
205
- glitter.share.loading_dialog.dataLoading({text: '模組加載中...', visible: true})
206
- } else {
207
- dialog.dataLoading({visible: true})
213
+ if (parseInt(glitter.share.top_inset, 10)) {
214
+ gvc.addStyle(css`
215
+ .scroll-in {
216
+ padding-top: ${glitter.share.top_inset}px;
208
217
  }
209
218
 
210
- if (parseInt(glitter.share.top_inset, 10)) {
211
- gvc.addStyle(css`
212
- .scroll-in {
213
- padding-top: ${glitter.share.top_inset}px;
214
- }
215
-
216
- .scroll-right-in {
217
- padding-top: ${glitter.share.top_inset}px;
218
- }
219
- `)
219
+ .scroll-right-in {
220
+ padding-top: ${glitter.share.top_inset}px;
220
221
  }
222
+ `);
223
+ }
221
224
 
222
-
223
-
224
- const waitGetData = [
225
- async () => {
226
- if((EditorConfig.backend_page() === 'backend-manger') && !(gvc.glitter.getUrlParameter('tab'))){
227
- gvc.glitter.setUrlParameter('tab','home_page')
225
+ const waitGetData = [
226
+ async () => {
227
+ if (EditorConfig.backend_page() === 'backend-manger' && !gvc.glitter.getUrlParameter('tab')) {
228
+ gvc.glitter.setUrlParameter('tab', 'home_page');
229
+ }
230
+ return await new Promise(async (resolve, reject) => {
231
+ ApiPageConfig.getAppConfig().then(res => {
232
+ viewModel.app_config_original = res.response.result[0];
233
+ if (
234
+ EditorConfig.backend_page() === 'backend-manger' &&
235
+ viewModel.app_config_original.refer_app &&
236
+ viewModel.app_config_original.refer_app !== viewModel.app_config_original.appName
237
+ ) {
238
+ glitter.setUrlParameter('appName', viewModel.app_config_original.refer_app);
239
+ location.reload();
240
+ return;
228
241
  }
229
- return await new Promise(async (resolve, reject) => {
230
- ApiPageConfig.getAppConfig().then((res) => {
231
- viewModel.app_config_original = res.response.result[0];
232
- if (EditorConfig.backend_page() === 'backend-manger' && ((viewModel.app_config_original.refer_app) && (viewModel.app_config_original.refer_app !== viewModel.app_config_original.appName))) {
233
- glitter.setUrlParameter('appName', viewModel.app_config_original.refer_app)
234
- location.reload()
235
- return
236
- }
237
- viewModel.domain = res.response.result[0].domain;
238
- viewModel.originalDomain = viewModel.domain;
239
- resolve(true);
240
- });
241
- });
242
- },
243
- async () => {
244
- return await new Promise(async (resolve) => {
245
- viewModel.data = await new Promise((resolve, reject) => {
246
- ApiPageConfig.getPage({
247
- tag: glitter.getUrlParameter('page'),
248
- appName: gBundle.appName
249
- }).then((d2)=>{
250
- if (glitter.share.is_blog_editor()) {
251
- Article.get({
252
- page: 0,
253
- limit: 1,
254
- id: glitter.getUrlParameter('page-id')
255
- }).then(async (data) => {
256
- const content=data.response.data[0].content
257
- if(content.language_data && content.language_data[glitter.getUrlParameter('language')] && content.language_data[glitter.getUrlParameter('language')].config){
258
- content.config=content.language_data[glitter.getUrlParameter('language')].config
259
- }
260
- d2.response.result[0].config = content.config
261
- resolve(d2.response.result[0])
262
- })
263
- } else {
264
- resolve(d2.response.result[0])
265
- }
266
- })
267
- });
268
-
269
- if (!glitter.share.editor_vm) {
270
- if (glitter.getUrlParameter('function') === 'backend-manger') {
271
- resolve(true)
272
- return
273
- }
274
- const data = await ApiPageConfig.getPage({
275
- appName: gBundle.appName,
276
- type: 'template',
277
- });
278
- Storage.select_page_type = viewModel.data.page_type;
279
- if (data.result) {
280
- data.response.result.map((dd: any) => {
281
- dd.page_config = dd.page_config ?? {};
282
- return dd;
283
- });
284
- viewModel.dataList = data.response.result;
285
- viewModel.originalData = JSON.parse(JSON.stringify(viewModel.dataList));
286
- glitter.share.allPageResource = JSON.parse(JSON.stringify(data.response.result));
287
-
288
- //設定子層編輯器
289
- function createGenerator() {
290
- (window as any).editerData = new gvc.glitter.htmlGenerate((viewModel.data! as any).config, [Storage.lastSelect], undefined, true);
291
- (window as any).page_config = (viewModel.data! as any).page_config;
292
- }
293
-
294
- createGenerator()
295
- if (!data) {
296
- resolve(false);
297
- } else {
298
- resolve(true);
299
- }
300
- }
301
- } else {
302
- viewModel.dataList = [];
303
- viewModel.data = glitter.share.editor_vm.page_data;
304
- const htmlGenerate = new gvc.glitter.htmlGenerate(viewModel.data.config, [Storage.lastSelect], undefined, true);
305
- (window as any).editerData = htmlGenerate;
306
- (window as any).page_config = (viewModel.data! as any).page_config;
307
- resolve(true);
308
- }
242
+ viewModel.domain = res.response.result[0].domain;
243
+ viewModel.originalDomain = viewModel.domain;
244
+ resolve(true);
245
+ });
246
+ });
247
+ },
248
+ async () => {
249
+ return await new Promise(async resolve => {
250
+ viewModel.data = await new Promise((resolve, reject) => {
251
+ ApiPageConfig.getPage({
252
+ tag: glitter.getUrlParameter('page'),
253
+ appName: gBundle.appName,
254
+ }).then(d2 => {
255
+ if (glitter.share.is_blog_editor()) {
256
+ Article.get({
257
+ page: 0,
258
+ limit: 1,
259
+ id: glitter.getUrlParameter('page-id'),
260
+ }).then(async data => {
261
+ const content = data.response.data[0].content;
262
+ if (
263
+ content.language_data &&
264
+ content.language_data[glitter.getUrlParameter('language')] &&
265
+ content.language_data[glitter.getUrlParameter('language')].config
266
+ ) {
267
+ content.config = content.language_data[glitter.getUrlParameter('language')].config;
268
+ }
269
+ d2.response.result[0].config = content.config;
270
+ resolve(d2.response.result[0]);
309
271
  });
310
- },
311
- async () => {
312
- return await new Promise(async (resolve) => {
313
- const data = glitter.share.appConfigresponse;
314
- data.result = true
315
- if (data.result) {
316
- viewModel.appConfig = data.response.data;
317
- viewModel.originalConfig = JSON.parse(JSON.stringify(viewModel.appConfig));
318
-
272
+ } else {
273
+ resolve(d2.response.result[0]);
274
+ }
275
+ });
276
+ });
319
277
 
320
- viewModel.globalScript = data.response.data.globalScript ?? [];
321
- viewModel.globalStyle = data.response.data.globalStyle ?? [];
322
- viewModel.globalStyleTag = data.response.data.globalStyleTag ?? [];
323
- viewModel.initialList = data.response.data.initialList;
324
- viewModel.initialJS = data.response.data.eventPlugin;
325
- viewModel.pluginList = data.response.data.pagePlugin;
326
- viewModel.initialStyleSheet = data.response.data.initialStyleSheet;
327
- viewModel.initialStyle = data.response.data.initialStyle;
328
- viewModel.initialCode = data.response.data.initialCode ?? '';
329
- viewModel.homePage = data.response.data.homePage ?? '';
330
- viewModel.backendPlugins = data.response.data.backendPlugins ?? [];
331
- viewModel.globalValue = data.response.data.globalValue ?? [];
332
- resolve(true);
278
+ if (!glitter.share.editor_vm) {
279
+ if (glitter.getUrlParameter('function') === 'backend-manger') {
280
+ resolve(true);
281
+ return;
282
+ }
283
+ const data = await ApiPageConfig.getPage({
284
+ appName: gBundle.appName,
285
+ type: 'template',
286
+ });
287
+ Storage.select_page_type = viewModel.data.page_type;
288
+ if (data.result) {
289
+ data.response.result.map((dd: any) => {
290
+ dd.page_config = dd.page_config ?? {};
291
+ return dd;
292
+ });
293
+ viewModel.dataList = data.response.result;
294
+ viewModel.originalData = JSON.parse(JSON.stringify(viewModel.dataList));
295
+ glitter.share.allPageResource = JSON.parse(JSON.stringify(data.response.result));
333
296
 
334
- async function load() {
335
- glitter.share.globalJsList = [
336
- {
337
- src: {
338
- official: './official_event/event.js',
339
- },
340
- },
341
- ].concat(viewModel.initialJS);
342
- for (const a of glitter.share.globalJsList) {
343
- await new Promise((resolve) => {
344
- glitter.addMtScript(
345
- [
346
- {
347
- src: TriggerEvent.getLink(a.src.official),
348
- type: 'module',
349
- },
350
- ],
351
- () => {
352
- resolve(true);
353
- },
354
- () => {
355
- resolve(true);
356
- }
357
- );
358
- });
359
- }
360
- resolve(true);
361
- }
297
+ //設定子層編輯器
298
+ function createGenerator() {
299
+ (window as any).editerData = new gvc.glitter.htmlGenerate(
300
+ (viewModel.data! as any).config,
301
+ [Storage.lastSelect],
302
+ undefined,
303
+ true
304
+ );
305
+ (window as any).page_config = (viewModel.data! as any).page_config;
306
+ }
362
307
 
363
- load();
364
- } else {
365
- resolve(false);
366
- }
367
- }).then((data) => {
368
- return data;
369
- });
370
- },
371
- ];
372
- let count = 0;
373
- let result = await new Promise((resolve, reject) => {
374
- for (const a of waitGetData) {
308
+ createGenerator();
309
+ if (!data) {
310
+ resolve(false);
311
+ } else {
312
+ resolve(true);
313
+ }
314
+ }
315
+ } else {
316
+ viewModel.dataList = [];
317
+ viewModel.data = glitter.share.editor_vm.page_data;
318
+ const htmlGenerate = new gvc.glitter.htmlGenerate(
319
+ viewModel.data.config,
320
+ [Storage.lastSelect],
321
+ undefined,
322
+ true
323
+ );
324
+ (window as any).editerData = htmlGenerate;
325
+ (window as any).page_config = (viewModel.data! as any).page_config;
326
+ resolve(true);
327
+ }
328
+ });
329
+ },
330
+ async () => {
331
+ return await new Promise(async resolve => {
332
+ const data = glitter.share.appConfigresponse;
333
+ data.result = true;
334
+ if (data.result) {
335
+ viewModel.appConfig = data.response.data;
336
+ viewModel.originalConfig = JSON.parse(JSON.stringify(viewModel.appConfig));
375
337
 
376
- a().then((result) => {
377
- if (result) {
378
- count++;
379
- } else {
380
- resolve(false);
381
- console.log(`falseIn`, waitGetData.findIndex((dd) => {
382
- return dd === a
383
- }))
384
- }
385
- if (count === waitGetData.length) {
338
+ viewModel.globalScript = data.response.data.globalScript ?? [];
339
+ viewModel.globalStyle = data.response.data.globalStyle ?? [];
340
+ viewModel.globalStyleTag = data.response.data.globalStyleTag ?? [];
341
+ viewModel.initialList = data.response.data.initialList;
342
+ viewModel.initialJS = data.response.data.eventPlugin;
343
+ viewModel.pluginList = data.response.data.pagePlugin;
344
+ viewModel.initialStyleSheet = data.response.data.initialStyleSheet;
345
+ viewModel.initialStyle = data.response.data.initialStyle;
346
+ viewModel.initialCode = data.response.data.initialCode ?? '';
347
+ viewModel.homePage = data.response.data.homePage ?? '';
348
+ viewModel.backendPlugins = data.response.data.backendPlugins ?? [];
349
+ viewModel.globalValue = data.response.data.globalValue ?? [];
350
+ resolve(true);
386
351
 
387
- resolve(true);
352
+ async function load() {
353
+ glitter.share.globalJsList = [
354
+ {
355
+ src: {
356
+ official: './official_event/event.js',
357
+ },
358
+ },
359
+ ].concat(viewModel.initialJS);
360
+ for (const a of glitter.share.globalJsList) {
361
+ await new Promise(resolve => {
362
+ glitter.addMtScript(
363
+ [
364
+ {
365
+ src: TriggerEvent.getLink(a.src.official),
366
+ type: 'module',
367
+ },
368
+ ],
369
+ () => {
370
+ resolve(true);
371
+ },
372
+ () => {
373
+ resolve(true);
388
374
  }
375
+ );
389
376
  });
377
+ }
378
+ resolve(true);
390
379
  }
380
+
381
+ load();
382
+ } else {
383
+ resolve(false);
384
+ }
385
+ }).then(data => {
386
+ return data;
391
387
  });
392
- if (!result) {
393
- await lod();
394
- return;
395
- }
396
- dialog.dataLoading({visible: false})
397
- viewModel.loading = false;
398
- //推播訂閱
399
- gvc.glitter.runJsInterFace("getFireBaseToken", {}, (response) => {
400
- if (response.token) {
401
- ApiUser.registerFCM(viewModel.app_config_original.user, response.token, (window as any).glitterBase)
402
- }
403
- }, {
404
- webFunction(data: any, callback: (data: any) => void): any {
405
- callback({})
406
- }
407
- })
408
- gvc.notifyDataChange(editorContainerID);
388
+ },
389
+ ];
390
+ let count = 0;
391
+ let result = await new Promise((resolve, reject) => {
392
+ for (const a of waitGetData) {
393
+ a().then(result => {
394
+ if (result) {
395
+ count++;
396
+ } else {
397
+ resolve(false);
398
+ console.log(
399
+ `falseIn`,
400
+ waitGetData.findIndex(dd => {
401
+ return dd === a;
402
+ })
403
+ );
404
+ }
405
+ if (count === waitGetData.length) {
406
+ resolve(true);
407
+ }
408
+ });
409
+ }
410
+ });
411
+ if (!result) {
412
+ await lod();
413
+ return;
409
414
  }
415
+ dialog.dataLoading({ visible: false });
416
+ viewModel.loading = false;
417
+ //推播訂閱
418
+ gvc.glitter.runJsInterFace(
419
+ 'getFireBaseToken',
420
+ {},
421
+ response => {
422
+ if (response.token) {
423
+ ApiUser.registerFCM(viewModel.app_config_original.user, response.token, (window as any).glitterBase);
424
+ }
425
+ },
426
+ {
427
+ webFunction(data: any, callback: (data: any) => void): any {
428
+ callback({});
429
+ },
430
+ }
431
+ );
432
+ gvc.notifyDataChange(editorContainerID);
433
+ }
410
434
 
411
- lod().then(() => {
412
- const dialog = new ShareDialog(gvc.glitter)
413
- dialog.dataLoading({visible: false})
414
- //設定儲存事件
415
- glitter.htmlGenerate.saveEvent = (refresh: boolean = true, callback?: () => void) => {
416
- glitter.closeDiaLog();
417
- glitter.setCookie('jumpToNavScroll', $(`#jumpToNav`).scrollTop());
435
+ lod().then(() => {
436
+ const dialog = new ShareDialog(gvc.glitter);
437
+ dialog.dataLoading({ visible: false });
438
+ //設定儲存事件
439
+ glitter.htmlGenerate.saveEvent = (refresh: boolean = true, callback?: () => void) => {
440
+ glitter.closeDiaLog();
441
+ glitter.setCookie('jumpToNavScroll', $(`#jumpToNav`).scrollTop());
418
442
 
419
- dialog.dataLoading({visible: true, text: '更新中..'})
443
+ dialog.dataLoading({ visible: true, text: '更新中..' });
444
+
445
+ async function saveEvent() {
446
+ for (const b of Object.keys(glitter.share.editorViewModel.saveArray)) {
447
+ await (glitter.share.editorViewModel.saveArray[b] as any)();
448
+ }
449
+ glitter.share.editorViewModel.saveArray = {};
450
+ const waitSave = [
451
+ async () => {
452
+ let haveID: string[] = [];
453
+ const config = JSON.parse(JSON.stringify((viewModel.data as any).config));
420
454
 
421
- async function saveEvent() {
422
- for (const b of Object.keys(glitter.share.editorViewModel.saveArray)) {
423
- await (glitter.share.editorViewModel.saveArray[b] as any)();
455
+ function getID(set: any) {
456
+ set.map((dd: any) => {
457
+ dd.js = dd.js.replace(`${location.origin}/${(window as any).appName}/`, './');
458
+ dd.formData = undefined;
459
+ dd.pageConfig = undefined;
460
+ dd.subData = undefined;
461
+ dd.appConfig = undefined;
462
+ dd.storage = undefined;
463
+ dd.tag = undefined;
464
+ dd.bundle = undefined;
465
+ // dd.editorEvent = undefined;
466
+ dd.share = undefined;
467
+ if (haveID.indexOf(dd.id) !== -1) {
468
+ dd.id = glitter.getUUID();
424
469
  }
425
- glitter.share.editorViewModel.saveArray = {};
426
- const waitSave = [
427
- async () => {
428
- let haveID: string[] = [];
429
- const config = JSON.parse(JSON.stringify((viewModel.data as any).config))
470
+ haveID.push(dd.id);
471
+ if (dd.type === 'container') {
472
+ dd.data.setting = dd.data.setting ?? [];
473
+ getID(dd.data.setting);
474
+ }
475
+ });
476
+ }
430
477
 
431
- function getID(set: any) {
432
- set.map((dd: any) => {
433
- dd.js = dd.js.replace(`${location.origin}/${(window as any).appName}/`, './');
434
- dd.formData = undefined;
435
- dd.pageConfig = undefined;
436
- dd.subData = undefined;
437
- dd.appConfig = undefined;
438
- dd.storage = undefined;
439
- dd.tag = undefined;
440
- dd.bundle = undefined;
441
- // dd.editorEvent = undefined;
442
- dd.share = undefined;
443
- if (haveID.indexOf(dd.id) !== -1) {
444
- dd.id = glitter.getUUID();
445
- }
446
- haveID.push(dd.id);
447
- if (dd.type === 'container') {
448
- dd.data.setting = dd.data.setting ?? [];
449
- getID(dd.data.setting);
450
- }
451
- });
452
- }
478
+ getID(config);
479
+ if (glitter.share.editor_vm) {
480
+ return new Promise((resolve, reject) => {
481
+ resolve(true);
482
+ });
483
+ } else {
484
+ return new Promise(async resolve => {
485
+ let result = true;
486
+ if (glitter.share.is_blog_editor()) {
487
+ Article.get({
488
+ page: 0,
489
+ limit: 1,
490
+ id: glitter.getUrlParameter('page-id'),
491
+ }).then(async data => {
492
+ const content = data.response.data[0].content;
453
493
 
454
- getID(config);
455
- if (glitter.share.editor_vm) {
456
- return new Promise((resolve, reject) => {
457
- resolve(true);
458
- });
459
- } else {
460
- return new Promise(async (resolve) => {
461
- let result = true;
462
- if (glitter.share.is_blog_editor()) {
463
- Article.get({
464
- page: 0,
465
- limit: 1,
466
- id: glitter.getUrlParameter('page-id')
467
- }).then(async (data) => {
468
- const content=data.response.data[0].content
469
- function empty(){
470
- return {
471
- name: '',
472
- seo: {
473
- domain: '',
474
- title: '',
475
- content: '',
476
- keywords: '',
477
- },
478
- text:'',
479
- config:''
480
- }
481
- }
482
- content.language_data=content.language_data ?? {
483
- 'en-US': empty(),
484
- 'zh-CN': empty(),
485
- 'zh-TW': {
486
- name: content.name,
487
- seo:content.seo,
488
- text:content.text,
489
- config:content.config
490
- }
491
- }
492
- content.language_data[glitter.getUrlParameter('language')].config=config;
493
- Article.put(data.response.data[0]).then((response) => {
494
- resolve(response && response.result);
495
- })
496
- })
497
- } else {
498
- ApiPageConfig.setPage({
499
- id: (viewModel.data! as any).id,
500
- appName: gBundle.appName,
501
- tag: (viewModel.data! as any).tag,
502
- name: (viewModel.data! as any).name,
503
- config: config,
504
- group: (viewModel.data! as any).group,
505
- page_config: (viewModel.data! as any).page_config,
506
- page_type: (viewModel.data! as any).page_type,
507
- preview_image: (viewModel.data! as any).preview_image,
508
- favorite: (viewModel.data! as any).favorite,
509
- }).then((api) => {
510
- resolve(result && api.result);
511
- });
512
- }
513
- });
514
- }
515
- },
516
- async () => {
517
- return new Promise(async (resolve) => {
518
- viewModel.appConfig.homePage = viewModel.homePage;
519
- viewModel.appConfig.globalStyle = viewModel.globalStyle;
520
- viewModel.appConfig.globalScript = viewModel.globalScript;
521
- viewModel.appConfig.globalValue = viewModel.globalValue;
522
- viewModel.appConfig.globalStyleTag = viewModel.globalStyleTag;
523
- resolve(await StoreHelper.setPlugin(viewModel.originalConfig, viewModel.appConfig));
524
- });
525
- },
526
- ];
527
- for (const a of waitSave) {
528
- if (!(await a())) {
529
- dialog.dataLoading({visible: false})
530
- dialog.errorMessage({text: '伺服器錯誤'})
531
- return;
494
+ function empty() {
495
+ return {
496
+ name: '',
497
+ seo: {
498
+ domain: '',
499
+ title: '',
500
+ content: '',
501
+ keywords: '',
502
+ },
503
+ text: '',
504
+ config: '',
505
+ };
532
506
  }
507
+
508
+ content.language_data = content.language_data ?? {
509
+ 'en-US': empty(),
510
+ 'zh-CN': empty(),
511
+ 'zh-TW': {
512
+ name: content.name,
513
+ seo: content.seo,
514
+ text: content.text,
515
+ config: content.config,
516
+ },
517
+ };
518
+ content.language_data[glitter.getUrlParameter('language')].config = config;
519
+ Article.put(data.response.data[0]).then(response => {
520
+ resolve(response && response.result);
521
+ });
522
+ });
523
+ } else {
524
+ ApiPageConfig.setPage({
525
+ id: (viewModel.data! as any).id,
526
+ appName: gBundle.appName,
527
+ tag: (viewModel.data! as any).tag,
528
+ name: (viewModel.data! as any).name,
529
+ config: config,
530
+ group: (viewModel.data! as any).group,
531
+ page_config: (viewModel.data! as any).page_config,
532
+ page_type: (viewModel.data! as any).page_type,
533
+ preview_image: (viewModel.data! as any).preview_image,
534
+ favorite: (viewModel.data! as any).favorite,
535
+ }).then(api => {
536
+ resolve(result && api.result);
537
+ });
533
538
  }
534
- dialog.dataLoading({visible: false})
535
- dialog.successMessage({text: '儲存成功'})
536
- if (refresh) {
537
- viewModel.originalConfig = JSON.parse(JSON.stringify(viewModel.appConfig));
538
- (window as any).preloadData = {};
539
- (window as any).glitterInitialHelper.share = {};
540
- lod();
541
- }
542
- if (glitter.share.editor_vm) {
543
- glitter.share.editor_vm.callback(viewModel.data);
544
- } else if (refresh) {
545
- (window as any).preloadData = {};
546
- (window as any).glitterInitialHelper.share = {};
547
- lod();
548
- }
539
+ });
549
540
  }
550
-
551
- saveEvent().then((r) => {
552
- callback && callback();
541
+ },
542
+ async () => {
543
+ return new Promise(async resolve => {
544
+ viewModel.appConfig.homePage = viewModel.homePage;
545
+ viewModel.appConfig.globalStyle = viewModel.globalStyle;
546
+ viewModel.appConfig.globalScript = viewModel.globalScript;
547
+ viewModel.appConfig.globalValue = viewModel.globalValue;
548
+ viewModel.appConfig.globalStyleTag = viewModel.globalStyleTag;
549
+ resolve(await StoreHelper.setPlugin(viewModel.originalConfig, viewModel.appConfig));
553
550
  });
554
- };
555
- glitter.share.selectEditorItem = () => {
556
- localStorage.setItem('rightSelect', 'module');
557
- glitter.share.selectEditorItemTimer && clearInterval(glitter.share.selectEditorItemTimer);
558
- glitter.share.selectEditorItemTimer = setTimeout(() => {
559
- // gvc.notifyDataChange(['MainEditorLeft', 'right_NAV']);
560
- gvc.notifyDataChange(['MainEditorLeft', 'right_NAV']);
561
- }, 10);
562
- // gvc.notifyDataChange('htmlGenerate')
563
- };
564
- glitter.share.reloadEditor = () => {
565
- viewModel.selectItem = undefined;
566
- viewModel.selectContainer = undefined;
567
- lod();
568
- };
569
- });
551
+ },
552
+ ];
553
+ for (const a of waitSave) {
554
+ if (!(await a())) {
555
+ dialog.dataLoading({ visible: false });
556
+ dialog.errorMessage({ text: '伺服器錯誤' });
557
+ return;
558
+ }
559
+ }
560
+ dialog.dataLoading({ visible: false });
561
+ dialog.successMessage({ text: '儲存成功' });
562
+ if (refresh) {
563
+ viewModel.originalConfig = JSON.parse(JSON.stringify(viewModel.appConfig));
564
+ (window as any).preloadData = {};
565
+ (window as any).glitterInitialHelper.share = {};
566
+ lod();
567
+ }
568
+ if (glitter.share.editor_vm) {
569
+ glitter.share.editor_vm.callback(viewModel.data);
570
+ } else if (refresh) {
571
+ (window as any).preloadData = {};
572
+ (window as any).glitterInitialHelper.share = {};
573
+ lod();
574
+ }
575
+ }
576
+
577
+ saveEvent().then(r => {
578
+ callback && callback();
579
+ });
580
+ };
581
+ glitter.share.selectEditorItem = () => {
582
+ localStorage.setItem('rightSelect', 'module');
583
+ glitter.share.selectEditorItemTimer && clearInterval(glitter.share.selectEditorItemTimer);
584
+ glitter.share.selectEditorItemTimer = setTimeout(() => {
585
+ // gvc.notifyDataChange(['MainEditorLeft', 'right_NAV']);
586
+ gvc.notifyDataChange(['MainEditorLeft', 'right_NAV']);
587
+ }, 10);
588
+ // gvc.notifyDataChange('htmlGenerate')
589
+ };
590
+ glitter.share.reloadEditor = () => {
591
+ viewModel.selectItem = undefined;
592
+ viewModel.selectContainer = undefined;
593
+ lod();
594
+ };
595
+ });
570
596
 
571
- return {
572
- onCreateView: () => {
573
- return gvc.bindView({
574
- bind: editorContainerID,
575
- view: () => {
576
- if (viewModel.loading) {
577
- return `<div class="vw-100 vh-100 d-flex align-items-center justify-content-center">
597
+ return {
598
+ onCreateView: () => {
599
+ return gvc.bindView({
600
+ bind: editorContainerID,
601
+ view: () => {
602
+ if (viewModel.loading) {
603
+ return `<div class="vw-100 vh-100 d-flex align-items-center justify-content-center">
578
604
  <div class="spinner-border"></div>
579
605
  </div>`;
580
- } else {
581
- let view: any = [];
582
- if (EditorConfig.backend_page() !== 'backend-manger') {
583
- view.push(AddComponent.leftNav(gvc));
584
- view.push(SetGlobalValue.leftNav(gvc));
585
- view.push(PageSettingView.leftNav(gvc));
586
- view.push(AddPage.leftNav(gvc));
587
- view.push(PageCodeSetting.leftNav(gvc));
588
- }
589
- view.push(BgCustomerMessage.leftNav(gvc));
590
- view.push(NormalPageEditor.leftNav(gvc));
591
- try {
592
- const doc = new Editor(gvc, viewModel);
593
- view.push(
594
- doc.create(
595
- html`
596
- <div class="d-flex overflow-hidden border-end guide-user-editor-1"
597
- style="height:100vh;background:white;">
598
- ${gvc.bindView(() => {
599
- return {
600
- bind: 'left_sm_bar',
601
- view: () => {
602
- return ` ${[
603
- {
604
- src: `fa-duotone fa-window guide-user-editor-1-icon`,
605
- index: 'layout',
606
- hint: '頁面編輯',
607
- },
608
- {
609
- src: `fa-sharp fa-regular fa-globe guide-user-editor-11-icon`,
610
- index: 'color',
611
- hint: '全站樣式'
612
- },
613
- {
614
- src: `fa-regular fa-grid-2 design-guide-1-icon`,
615
- index: 'widget',
616
- hint: '設計元件'
617
- }
618
- ]
619
- .filter((dd) => {
620
- if (gvc.glitter.getUrlParameter('device') === 'mobile') {
621
- return dd.index !== 'widget'
622
- } else {
623
- return true
624
- }
625
- })
626
- .map((da: any) => {
627
- return html`<i
628
- class=" ${da.src} fs-5 fw-bold p-2 rounded"
629
- data-bs-toggle="tooltip"
630
- data-bs-placement="top"
631
- data-bs-custom-class="custom-tooltip"
632
- data-bs-title="${da.hint}"
633
- style="cursor:pointer;
634
- ${Storage.page_setting_item === `${da.index}` ? `background:${EditorConfig.editor_layout.btn_background};color:white;` : ``}
606
+ } else {
607
+ let view: any = [];
608
+ if (EditorConfig.backend_page() !== 'backend-manger') {
609
+ view.push(AddComponent.leftNav(gvc));
610
+ view.push(SetGlobalValue.leftNav(gvc));
611
+ view.push(PageSettingView.leftNav(gvc));
612
+ view.push(AddPage.leftNav(gvc));
613
+ view.push(PageCodeSetting.leftNav(gvc));
614
+ }
615
+ view.push(BgCustomerMessage.leftNav(gvc));
616
+ view.push(NormalPageEditor.leftNav(gvc));
617
+ try {
618
+ const doc = new Editor(gvc, viewModel);
619
+ view.push(
620
+ doc.create(
621
+ html` <div
622
+ class="d-flex overflow-hidden border-end guide-user-editor-1"
623
+ style="height:100vh;background:white;"
624
+ >
625
+ ${gvc.bindView(() => {
626
+ return {
627
+ bind: 'left_sm_bar',
628
+ view: () => {
629
+ return ` ${[
630
+ {
631
+ src: `fa-duotone fa-window guide-user-editor-1-icon`,
632
+ index: 'layout',
633
+ hint: '頁面編輯',
634
+ },
635
+ {
636
+ src: `fa-sharp fa-regular fa-globe guide-user-editor-11-icon`,
637
+ index: 'color',
638
+ hint: '全站樣式',
639
+ },
640
+ {
641
+ src: `fa-regular fa-grid-2 design-guide-1-icon`,
642
+ index: 'widget',
643
+ hint: '設計元件',
644
+ },
645
+ ]
646
+ .filter(dd => {
647
+ if (gvc.glitter.getUrlParameter('device') === 'mobile') {
648
+ return dd.index !== 'widget';
649
+ } else {
650
+ return true;
651
+ }
652
+ })
653
+ .map((da: any) => {
654
+ return html`<i
655
+ class=" ${da.src} fs-5 fw-bold p-2 rounded"
656
+ data-bs-toggle="tooltip"
657
+ data-bs-placement="top"
658
+ data-bs-custom-class="custom-tooltip"
659
+ data-bs-title="${da.hint}"
660
+ style="cursor:pointer;
661
+ ${Storage.page_setting_item === `${da.index}`
662
+ ? `background:${EditorConfig.editor_layout.btn_background};color:white;`
663
+ : ``}
635
664
  "
636
- onclick="${gvc.event(() => {
637
- viewModel.waitCopy = undefined;
638
- viewModel.selectItem = undefined;
639
- Storage.page_setting_item = da.index;
640
- gvc.notifyDataChange(["MainEditorLeft", "left_sm_bar"]);
641
- })}"
642
- ></i>`;
643
- })
644
- .join('')}`;
645
- },
646
- divCreate: {
647
- style: `width:60px;gap:20px;padding-top: 15px;min-width:60px;`,
648
- class: `${
649
- Storage.select_function === 'user-editor' || Storage.select_function === 'page-editor' ? `` : `d-none`
650
- } h-120 border-end d-flex flex-column align-items-center`,
651
- },
652
- onCreate: () => {
653
- $('.tooltip').remove();
654
- ($('[data-bs-toggle="tooltip"]') as any).tooltip();
655
- }
656
- };
657
- })}
658
- <div
659
- class="offcanvas-body swiper scrollbar-hover w-120 ${(() => {
660
- switch (Storage.select_function) {
661
- case 'backend-manger':
662
- case 'server-manager':
663
- return `pt-0`;
664
- case 'page-editor':
665
- return `p-0`;
666
- default:
667
- return `p-0`;
668
- }
669
- })()}"
670
- style="overflow-y: auto;overflow-x:hidden;height:calc(100vh - ${(document.body.clientWidth<800 || document.body.clientWidth>1200) ? 56:(parseInt(glitter.share.top_inset, 10)+56)}px);"
671
- >
672
- <div class="h-120">
673
- ${gvc.bindView(() => {
674
- return {
675
- bind: 'MainEditorLeft',
676
- view: async () => {
677
- const view = await (async () => {
678
- switch (Storage.select_function) {
679
- case 'backend-manger':
680
- return await Setting_editor.left(gvc, viewModel, editorContainerID, gBundle);
681
- case 'server-manager':
682
- return ServerEditor.left(gvc);
683
- case 'page-editor':
684
- case 'user-editor':
685
- //內容編輯模式不允許特定頁面,自動重導向。
686
- if (Storage.select_function === 'user-editor') {
687
- if (!viewModel.data.page_config || viewModel.data.page_config.support_editor !== 'true') {
688
- console.log(glitter.root_path)
689
- // const redirect = viewModel.dataList.find((dd: any) => {
690
- // return dd.page_config && dd.page_config.support_editor === 'true';
691
- // });
692
- // if (redirect) {
693
- // const url = new URL(glitter.root_path + `${redirect.tag}${location.search}`);
694
- // location.href = url.href;
695
- // }
696
- }
697
- }
698
- return Main_editor.left(gvc, viewModel, editorContainerID, gBundle);
699
- default:
700
- return Page_editor.left(gvc, viewModel, editorContainerID, gBundle);
701
- }
702
- })();
703
- if (document.body.offsetWidth < 992) {
704
- glitter.setDrawer(`<div class="bg-white vh-120 overflow-auto">${view}</div>`, () => {});
705
- glitter.share.toggle_left_bar=()=>{
706
- glitter.setDrawer(`<div class="bg-white vh-120 overflow-auto">${view}</div>`, () => {
707
- glitter.openDrawer()
708
- });
709
- }
710
- return ``;
711
- } else {
712
- return view;
713
- }
714
- },
715
- divCreate: {
716
- class: 'h-120',
717
- },
718
- };
719
- })}
720
- </div>
721
- <div class="swiper-scrollbar end-0"></div>
722
- </div>
723
- </div>`,
724
- gvc.bindView({
725
- bind: 'MainEditorRight',
726
- view: () => {
727
- return ``;
728
- },
729
- divCreate: {},
730
- }),
731
- )
732
- );
733
- return view.join('');
734
- } catch (e) {
735
- console.error(e);
736
- return ``;
737
- }
738
- }
739
- },
740
- divCreate: {class: `editorContainer`},
741
- onCreate: () => {
742
- $('#jumpToNav').scroll(function () {
743
- glitter.setCookie('jumpToNavScroll', $(`#jumpToNav`).scrollTop());
744
- });
745
-
746
- function scrollToItem(element: any) {
747
- if (element) {
748
- // 获取元素的位置信息
749
- let elementRect = element.getBoundingClientRect();
750
- let elementTop = elementRect.top;
751
- let elementHeight = elementRect.height;
752
- // 获取窗口的高度
753
- let windowHeight = document.querySelector('.scrollbar-hover')!.scrollHeight;
754
- // 计算滚动位置,以使元素的中心位于窗口的垂直中心
755
- let scrollTo = elementTop - (windowHeight - elementHeight) / 2;
756
- // 滚动页面
757
- document.querySelector('.scrollbar-hover')!.scrollTo({
758
- top: scrollTo,
759
- left: 0,
760
- behavior: 'auto', // 使用平滑滚动效果,如果需要的话
761
- });
762
- }
763
- }
764
-
765
- setTimeout(() => {
766
- scrollToItem(document.querySelector(`.editor_item.active`)!);
767
- }, 200);
768
- if (!viewModel.loading) {
665
+ onclick="${gvc.event(() => {
666
+ viewModel.waitCopy = undefined;
667
+ viewModel.selectItem = undefined;
668
+ Storage.page_setting_item = da.index;
669
+ gvc.notifyDataChange(['MainEditorLeft', 'left_sm_bar']);
670
+ })}"
671
+ ></i>`;
672
+ })
673
+ .join('')}`;
674
+ },
675
+ divCreate: {
676
+ style: `width:60px;gap:20px;padding-top: 15px;min-width:60px;`,
677
+ class: `${
678
+ Storage.select_function === 'user-editor' || Storage.select_function === 'page-editor'
679
+ ? ``
680
+ : `d-none`
681
+ } h-120 border-end d-flex flex-column align-items-center`,
682
+ },
683
+ onCreate: () => {
684
+ $('.tooltip').remove();
685
+ ($('[data-bs-toggle="tooltip"]') as any).tooltip();
686
+ },
687
+ };
688
+ })}
689
+ <div
690
+ class="offcanvas-body swiper scrollbar-hover w-120 ${(() => {
769
691
  switch (Storage.select_function) {
770
- case 'backend-manger': {
771
- let bgGuide = new BgGuide(gvc, 0);
772
- function showTut(){
773
- if (document.body.clientWidth > 1000) {
774
- // ApiShop.getGuideable().then(r => {
775
- // if (!r.response.value || !r.response.value.view) {
776
- // ApiShop.setFEGuideable({})
777
- // bgGuide.drawGuide();
778
- // }
779
- // })
780
- }else {
781
- // if(!localStorage.getItem('see_bg_mobile_guide')){
782
- // let bgMobileGuide = new BgMobileGuide(gvc,1);
783
- // bgMobileGuide.drawGuide();
784
- // localStorage.setItem('see_bg_mobile_guide','true')
692
+ case 'backend-manger':
693
+ case 'server-manager':
694
+ return `pt-0`;
695
+ case 'page-editor':
696
+ return `p-0`;
697
+ default:
698
+ return `p-0`;
699
+ }
700
+ })()}"
701
+ style="overflow-y: auto;overflow-x:hidden;height:calc(100vh - ${document.body.clientWidth < 800 ||
702
+ document.body.clientWidth > 1200
703
+ ? 56
704
+ : parseInt(glitter.share.top_inset, 10) + 56}px);"
705
+ >
706
+ <div class="h-120">
707
+ ${gvc.bindView(() => {
708
+ return {
709
+ bind: 'MainEditorLeft',
710
+ view: async () => {
711
+ const view = await (async () => {
712
+ switch (Storage.select_function) {
713
+ case 'backend-manger':
714
+ return await Setting_editor.left(gvc, viewModel, editorContainerID, gBundle);
715
+ case 'server-manager':
716
+ return ServerEditor.left(gvc);
717
+ case 'page-editor':
718
+ case 'user-editor':
719
+ //內容編輯模式不允許特定頁面,自動重導向。
720
+ if (Storage.select_function === 'user-editor') {
721
+ if (
722
+ !viewModel.data.page_config ||
723
+ viewModel.data.page_config.support_editor !== 'true'
724
+ ) {
725
+ console.log(glitter.root_path);
726
+ // const redirect = viewModel.dataList.find((dd: any) => {
727
+ // return dd.page_config && dd.page_config.support_editor === 'true';
728
+ // });
729
+ // if (redirect) {
730
+ // const url = new URL(glitter.root_path + `${redirect.tag}${location.search}`);
731
+ // location.href = url.href;
785
732
  // }
733
+ }
786
734
  }
735
+ return Main_editor.left(gvc, viewModel, editorContainerID, gBundle);
736
+ default:
737
+ return Page_editor.left(gvc, viewModel, editorContainerID, gBundle);
787
738
  }
788
- //如未填寫聯絡資訊則固定跳彈窗出來
789
- (ApiUser.getSaasUserData(GlobalUser.saas_token, 'me')).then((res)=>{
790
- const userData = res.response;
791
- if(!userData.userData.name || !userData.userData.contact_phone){
792
- SaasViewModel.setContactInfo(gvc)
793
- }else{
794
- showTut()
795
- }
796
- })
739
+ })();
740
+ if (document.body.offsetWidth < 992) {
741
+ glitter.setDrawer(`<div class="bg-white vh-120 overflow-auto">${view}</div>`, () => {});
742
+ glitter.share.toggle_left_bar = () => {
743
+ glitter.setDrawer(`<div class="bg-white vh-120 overflow-auto">${view}</div>`, () => {
744
+ glitter.openDrawer();
745
+ });
746
+ };
747
+ return ``;
748
+ } else {
749
+ return view;
750
+ }
751
+ },
752
+ divCreate: {
753
+ class: 'h-120',
754
+ },
755
+ };
756
+ })}
757
+ </div>
758
+ <div class="swiper-scrollbar end-0"></div>
759
+ </div>
760
+ </div>`,
761
+ gvc.bindView({
762
+ bind: 'MainEditorRight',
763
+ view: () => {
764
+ return ``;
765
+ },
766
+ divCreate: {},
767
+ })
768
+ )
769
+ );
770
+ return view.join('');
771
+ } catch (e) {
772
+ console.error(e);
773
+ return ``;
774
+ }
775
+ }
776
+ },
777
+ divCreate: { class: `editorContainer` },
778
+ onCreate: () => {
779
+ $('#jumpToNav').scroll(function () {
780
+ glitter.setCookie('jumpToNavScroll', $(`#jumpToNav`).scrollTop());
781
+ });
797
782
 
798
- break
799
- }
800
- case 'user-editor': {
801
- // if (document.body.clientWidth > 1000) {
802
- // ApiShop.getFEGuideable().then(r => {
803
- // if (!r.response.value || !r.response.value.view) {
804
- // let bgGuide = new BgGuide(gvc, 0, "user-editor", 0);
805
- // ApiShop.setFEGuideable({})
806
- // bgGuide.drawGuide();
807
- // }
808
- // })
809
- // }
810
- break
811
- }
812
- }
813
- }
783
+ function scrollToItem(element: any) {
784
+ if (element) {
785
+ // 获取元素的位置信息
786
+ let elementRect = element.getBoundingClientRect();
787
+ let elementTop = elementRect.top;
788
+ let elementHeight = elementRect.height;
789
+ // 获取窗口的高度
790
+ let windowHeight = document.querySelector('.scrollbar-hover')!.scrollHeight;
791
+ // 计算滚动位置,以使元素的中心位于窗口的垂直中心
792
+ let scrollTo = elementTop - (windowHeight - elementHeight) / 2;
793
+ // 滚动页面
794
+ document.querySelector('.scrollbar-hover')!.scrollTo({
795
+ top: scrollTo,
796
+ left: 0,
797
+ behavior: 'auto', // 使用平滑滚动效果,如果需要的话
798
+ });
799
+ }
800
+ }
814
801
 
802
+ setTimeout(() => {
803
+ scrollToItem(document.querySelector(`.editor_item.active`)!);
804
+ }, 200);
805
+ if (!viewModel.loading) {
806
+ switch (Storage.select_function) {
807
+ case 'backend-manger': {
808
+ let bgGuide = new BgGuide(gvc, 0);
815
809
 
810
+ function showTut() {
811
+ if (document.body.clientWidth > 1000) {
812
+ // ApiShop.getGuideable().then(r => {
813
+ // if (!r.response.value || !r.response.value.view) {
814
+ // ApiShop.setFEGuideable({})
815
+ // bgGuide.drawGuide();
816
+ // }
817
+ // })
818
+ } else {
819
+ // if(!localStorage.getItem('see_bg_mobile_guide')){
820
+ // let bgMobileGuide = new BgMobileGuide(gvc,1);
821
+ // bgMobileGuide.drawGuide();
822
+ // localStorage.setItem('see_bg_mobile_guide','true')
816
823
  // }
824
+ }
825
+ }
817
826
 
827
+ //如未填寫聯絡資訊則固定跳彈窗出來
828
+ ApiUser.getSaasUserData(GlobalUser.saas_token, 'me').then(res => {
829
+ const userData = res.response;
830
+ if (!userData.userData.name || !userData.userData.contact_phone) {
831
+ SaasViewModel.setContactInfo(gvc);
832
+ } else {
833
+ showTut();
834
+ }
835
+ });
818
836
 
819
- },
820
- });
821
- },
822
- onCreate: () => {
837
+ break;
838
+ }
839
+ case 'user-editor': {
840
+ // if (document.body.clientWidth > 1000) {
841
+ // ApiShop.getFEGuideable().then(r => {
842
+ // if (!r.response.value || !r.response.value.view) {
843
+ // let bgGuide = new BgGuide(gvc, 0, "user-editor", 0);
844
+ // ApiShop.setFEGuideable({})
845
+ // bgGuide.drawGuide();
846
+ // }
847
+ // })
848
+ // }
849
+ break;
850
+ }
851
+ }
852
+ }
823
853
 
854
+ // }
824
855
  },
825
- onResume: () => {
826
- setTimeout(() => {
827
- gvc.notifyDataChange('MainEditorLeft')
828
- }, 100)
829
- }
830
- };
856
+ });
857
+ },
858
+ onCreate: () => {},
859
+ onResume: () => {
860
+ setTimeout(() => {
861
+ gvc.notifyDataChange('MainEditorLeft');
862
+ }, 100);
863
+ },
864
+ };
831
865
  });
832
866
 
833
867
  function initialEditor(gvc: GVC, viewModel: any) {
834
- const glitter = gvc.glitter;
835
- setTimeout(()=>{
836
- if (EditorConfig.backend_page() === 'backend-manger' && (glitter.getUrlParameter('page') !== 'cms')) {
837
- setTimeout(() => {
838
- glitter.setUrlParameter('page', 'cms')
839
- }, 100)
840
- }
841
- glitter.setUrlParameter('function', EditorConfig.backend_page())
842
- },50);
843
-
844
-
845
- //AI聊天室功能開關
846
- glitter.share.ai_message = AiMessage
847
- //AI代碼生成
848
- glitter.share.ai_code_generator=(message:string,callback:(text:string)=>void)=>{
849
- const dialog = new ShareDialog(gvc.glitter)
850
- dialog.dataLoading({visible: true})
851
- AiChat.generateHtml({
852
- app_name: (window as any).appName,
853
- text: message
854
- }).then((res) => {
855
- if (res.result && res.response.data.usage === 0) {
856
- dialog.dataLoading({visible: false})
857
- dialog.errorMessage({text: `很抱歉你的AI代幣不足,請先前往加值`})
858
- } else if (res.result && (!res.response.data.obj.result)) {
859
- dialog.dataLoading({visible: false})
860
- dialog.errorMessage({text: `AI無法理解你的需求,請給出具體一點的描述`})
861
- } else if (!res.result) {
862
- dialog.dataLoading({visible: false})
863
- dialog.errorMessage({text: `發生錯誤`})
864
- } else {
865
- res.response.data.obj.html
866
- AddComponent.addWidget(gvc, {
867
- "id": "s7scs2s9s3s5s8sc",
868
- "js": "./official_view_component/official.js",
869
- "css": {"class": {}, "style": {}},
870
- "data": {
871
- "refer_app": "shop_template_black_style",
872
- "tag": "custom-code",
873
- "list": [],
874
- "carryData": {},
875
- "_style_refer_global": {"index": "0"},
876
- "_style_refer": "custom",
877
- "elem": "div",
878
- "inner": "",
879
- "attr": [],
880
- "_padding": {},
881
- "_margin": {},
882
- "_border": {},
883
- "_max_width": "1200",
884
- "_gap": "",
885
- "_background": "",
886
- "_other": {},
887
- "_radius": "",
888
- "_reverse": "false",
889
- "_hor_position": "center",
890
- "_background_setting": {"type": "none"},
891
- "refer_form_data": {
892
- "code": res.response.data.obj.html,
893
- "width": {"unit": "px", "value": "0px", "number": "0"},
894
- "height": {
895
- "unit": "px",
896
- "value": "50px",
897
- "number": "50"
898
- },
899
- "with_bg": "false",
900
- "background": {
901
- "id": "custom-background",
902
- "title": "#030303",
903
- "content": "#000000",
904
- "sec-title": "#000000",
905
- "background": "#ffffff",
906
- "sec-background": "#FFFFFF",
907
- "solid-button-bg": "#000000",
908
- "border-button-bg": "#000000",
909
- "solid-button-text": "#ffffff",
910
- "border-button-text": "#000000"
911
- }
912
- }
913
- },
914
- "type": "component",
915
- "class": "w-100",
916
- "index": 0,
917
- "label": "自定義HTML代碼",
918
- "style": "",
919
- "bundle": {},
920
- "global": [],
921
- "toggle": true,
922
- "stylist": [],
923
- "dataType": "static",
924
- "style_from": "code",
925
- "classDataType": "static",
926
- "preloadEvenet": {},
927
- "share": {},
928
- "formData": {},
929
- "refreshAllParameter": {},
930
- "editor_bridge": {},
931
- "refreshComponentParameter": {},
932
- "list": [],
933
- "version": "v2",
934
- "storage": {},
935
- "mobile": {
936
- "id": "s7scs2s9s3s5s8sc",
937
- "js": "./official_view_component/official.js",
938
- "css": {"class": {}, "style": {}},
939
- "data": {"refer_app": "shop_template_black_style"},
940
- "type": "component",
941
- "class": "w-100",
942
- "index": 0,
943
- "label": "自定義HTML代碼",
944
- "style": "",
945
- "global": [],
946
- "toggle": true,
947
- "stylist": [],
948
- "dataType": "static",
949
- "style_from": "code",
950
- "classDataType": "static",
951
- "preloadEvenet": {},
952
- "refreshAllParameter": {},
953
- "editor_bridge": {},
954
- "refreshComponentParameter": {},
955
- "list": [],
956
- "version": "v2",
957
- "mobile_editable": [],
958
- "desktop_editable": [],
959
- "container_fonts": 0,
960
- "visible": true,
961
- "refer": "custom"
962
- },
963
- "mobile_editable": [],
964
- "desktop": {
965
- "data": {
966
- "refer_app": "shop_template_black_style",
967
- "refer_form_data": {}
968
- }, "refer": "custom"
969
- },
970
- "desktop_editable": [],
971
- "container_fonts": 0,
972
- "visible": true
973
- });
974
- dialog.successMessage({text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.`})
975
-
976
- }
977
- })
868
+ const glitter = gvc.glitter;
869
+ setTimeout(() => {
870
+ if (EditorConfig.backend_page() === 'backend-manger' && glitter.getUrlParameter('page') !== 'cms') {
871
+ setTimeout(() => {
872
+ glitter.setUrlParameter('page', 'cms');
873
+ }, 100);
978
874
  }
979
- //跳轉至編輯器頁面功能
980
- glitter.share.switch_to_web_builder = (page: string,device:string) => {
981
- glitter.closeDrawer()
982
- glitter.changePage(
983
- 'jspage/main.js',
984
- page,
985
- true,
986
- {
987
- appName: (window.parent as any).glitter.getUrlParameter('appName'),
875
+ glitter.setUrlParameter('function', EditorConfig.backend_page());
876
+ }, 50);
877
+ //AI聊天室功能開關
878
+ glitter.share.ai_message = AiMessage;
879
+ //AI代碼生成
880
+ glitter.share.ai_code_generator = (message: string, callback: (text: string) => void) => {
881
+ const dialog = new ShareDialog(gvc.glitter);
882
+ dialog.dataLoading({ visible: true });
883
+ AiChat.generateHtml({
884
+ app_name: (window as any).appName,
885
+ text: message,
886
+ }).then(res => {
887
+ if (res.result && res.response.data.usage === 0) {
888
+ dialog.dataLoading({ visible: false });
889
+ dialog.errorMessage({ text: `很抱歉你的AI代幣不足,請先前往加值` });
890
+ } else if (res.result && !res.response.data.obj.result) {
891
+ dialog.dataLoading({ visible: false });
892
+ dialog.errorMessage({ text: `AI無法理解你的需求,請給出具體一點的描述` });
893
+ } else if (!res.result) {
894
+ dialog.dataLoading({ visible: false });
895
+ dialog.errorMessage({ text: `發生錯誤` });
896
+ } else {
897
+ res.response.data.obj.html;
898
+ AddComponent.addWidget(gvc, {
899
+ id: 's7scs2s9s3s5s8sc',
900
+ js: './official_view_component/official.js',
901
+ css: { class: {}, style: {} },
902
+ data: {
903
+ refer_app: 'shop_template_black_style',
904
+ tag: 'custom-code',
905
+ list: [],
906
+ carryData: {},
907
+ _style_refer_global: { index: '0' },
908
+ _style_refer: 'custom',
909
+ elem: 'div',
910
+ inner: '',
911
+ attr: [],
912
+ _padding: {},
913
+ _margin: {},
914
+ _border: {},
915
+ _max_width: '1200',
916
+ _gap: '',
917
+ _background: '',
918
+ _other: {},
919
+ _radius: '',
920
+ _reverse: 'false',
921
+ _hor_position: 'center',
922
+ _background_setting: { type: 'none' },
923
+ refer_form_data: {
924
+ code: res.response.data.obj.html,
925
+ width: { unit: 'px', value: '0px', number: '0' },
926
+ height: {
927
+ unit: 'px',
928
+ value: '50px',
929
+ number: '50',
930
+ },
931
+ with_bg: 'false',
932
+ background: {
933
+ id: 'custom-background',
934
+ title: '#030303',
935
+ content: '#000000',
936
+ 'sec-title': '#000000',
937
+ background: '#ffffff',
938
+ 'sec-background': '#FFFFFF',
939
+ 'solid-button-bg': '#000000',
940
+ 'border-button-bg': '#000000',
941
+ 'solid-button-text': '#ffffff',
942
+ 'border-button-text': '#000000',
943
+ },
988
944
  },
989
- {
990
- backGroundColor: `transparent;`,
991
- carry_search:[
992
- {
993
- key:'device',value:device
994
- },
995
- {
996
- key:'function',value:'user-editor'
997
- }
998
- ]
999
- }
1000
- )
1001
- }
1002
- //續費功能
1003
- glitter.share.subscription = async (title: string) => {
1004
- const dialog = new ShareDialog(glitter)
1005
- const vm: {
1006
- total: number,
1007
- note: any,
1008
- return_url: string,
1009
- line_items: any[],
1010
- user_info: {
1011
- email: string,
1012
- invoice_type: 'me' | 'company' | 'donate',
1013
- company: string,
1014
- gui_number: string
1015
- },
1016
- customer_info: any
1017
- } = {
1018
- total: 500,
1019
- note: {},
1020
- line_items: [],
1021
- return_url: (window.parent as any).location.href,
1022
- user_info: {
1023
- email: '',
1024
- invoice_type: 'me',
1025
- company: '',
1026
- gui_number: ''
945
+ },
946
+ type: 'component',
947
+ class: 'w-100',
948
+ index: 0,
949
+ label: '自定義HTML代碼',
950
+ style: '',
951
+ bundle: {},
952
+ global: [],
953
+ toggle: true,
954
+ stylist: [],
955
+ dataType: 'static',
956
+ style_from: 'code',
957
+ classDataType: 'static',
958
+ preloadEvenet: {},
959
+ share: {},
960
+ formData: {},
961
+ refreshAllParameter: {},
962
+ editor_bridge: {},
963
+ refreshComponentParameter: {},
964
+ list: [],
965
+ version: 'v2',
966
+ storage: {},
967
+ mobile: {
968
+ id: 's7scs2s9s3s5s8sc',
969
+ js: './official_view_component/official.js',
970
+ css: { class: {}, style: {} },
971
+ data: { refer_app: 'shop_template_black_style' },
972
+ type: 'component',
973
+ class: 'w-100',
974
+ index: 0,
975
+ label: '自定義HTML代碼',
976
+ style: '',
977
+ global: [],
978
+ toggle: true,
979
+ stylist: [],
980
+ dataType: 'static',
981
+ style_from: 'code',
982
+ classDataType: 'static',
983
+ preloadEvenet: {},
984
+ refreshAllParameter: {},
985
+ editor_bridge: {},
986
+ refreshComponentParameter: {},
987
+ list: [],
988
+ version: 'v2',
989
+ mobile_editable: [],
990
+ desktop_editable: [],
991
+ container_fonts: 0,
992
+ visible: true,
993
+ refer: 'custom',
994
+ },
995
+ mobile_editable: [],
996
+ desktop: {
997
+ data: {
998
+ refer_app: 'shop_template_black_style',
999
+ refer_form_data: {},
1027
1000
  },
1028
- customer_info: {}
1029
- }
1030
- const dd = (await ApiUser.getPublicConfig('ai-points-store', 'manager'))
1031
- if (dd.response.value) {
1032
- vm.user_info = dd.response.value
1033
- }
1034
- const sku = (() => {
1035
- switch (title) {
1036
- case '輕便方案':
1037
- return 'light-year'
1038
- case '標準方案':
1039
- return 'basic-year'
1040
- case '企業方案':
1041
- return 'omo-year'
1042
- case '行動方案':
1043
- return 'app-year'
1044
- }
1045
- return ``
1046
- })()
1047
- // if (gvc.glitter.deviceType === gvc.glitter.deviceTypeEnum.Ios) {
1048
- // dialog.dataLoading({visible: true});
1049
- // gvc.glitter.runJsInterFace("in_app_product", {
1050
- // total: `${sku.replace('-', '_')}_apple`,
1051
- // qty: (() => {
1052
- // switch (title) {
1053
- // case '輕便電商方案':
1054
- // return 1
1055
- // case '標準電商方案':
1056
- // return 2
1057
- // case '通路電商方案':
1058
- // return 4
1059
- // case '行動電商方案':
1060
- // return 4
1061
- // case '旗艦電商方案':
1062
- // return 2
1063
- // }
1064
- // })()
1065
- // }, async (res) => {
1066
- // console.log(`res.receipt_data=>`, res.receipt_data);
1067
- // if (res.receipt_data) {
1068
- // await ApiShop.app_subscription(res.receipt_data, (window as any).appName);
1069
- // window.parent.location.reload();
1070
- // } else {
1071
- // dialog.dataLoading({visible: false});
1072
- // dialog.errorMessage({text: '儲值失敗'})
1073
- // }
1074
- // })
1075
- // return
1076
- // }
1077
- const product = await ApiShop.getProduct({
1078
- limit: 1,
1079
- page: 0,
1080
- searchType: 'sku',
1081
- search: sku,
1082
- app_name: (window.parent as any).glitterBase
1001
+ refer: 'custom',
1002
+ },
1003
+ desktop_editable: [],
1004
+ container_fonts: 0,
1005
+ visible: true,
1083
1006
  });
1084
- vm.line_items = [{
1085
- id: product.response.data[0].id as any,
1086
- spec: product.response.data[0].content.variants.find((dd: any) => {
1087
- return dd.sku === sku
1088
- }).spec,
1089
- count: 1
1090
- }]
1091
- BgWidget.settingDialog({
1007
+ dialog.successMessage({ text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.` });
1008
+ }
1009
+ });
1010
+ };
1011
+ //跳轉至編輯器頁面功能
1012
+ glitter.share.switch_to_web_builder = (page: string, device: string) => {
1013
+ glitter.closeDrawer();
1014
+ glitter.changePage(
1015
+ 'jspage/main.js',
1016
+ page,
1017
+ true,
1018
+ {
1019
+ appName: (window.parent as any).glitter.getUrlParameter('appName'),
1020
+ },
1021
+ {
1022
+ backGroundColor: `transparent;`,
1023
+ carry_search: [
1024
+ {
1025
+ key: 'device',
1026
+ value: device,
1027
+ },
1028
+ {
1029
+ key: 'function',
1030
+ value: 'user-editor',
1031
+ },
1032
+ ],
1033
+ }
1034
+ );
1035
+ };
1036
+ //續費功能
1037
+ glitter.share.subscription = async (title: string) => {
1038
+ const dialog = new ShareDialog(glitter);
1039
+ const vm: {
1040
+ total: number;
1041
+ note: any;
1042
+ return_url: string;
1043
+ line_items: any[];
1044
+ user_info: {
1045
+ email: string;
1046
+ invoice_type: 'me' | 'company' | 'donate';
1047
+ company: string;
1048
+ gui_number: string;
1049
+ };
1050
+ customer_info: any;
1051
+ } = {
1052
+ total: 500,
1053
+ note: {},
1054
+ line_items: [],
1055
+ return_url: (window.parent as any).location.href,
1056
+ user_info: {
1057
+ email: '',
1058
+ invoice_type: 'me',
1059
+ company: '',
1060
+ gui_number: '',
1061
+ },
1062
+ customer_info: {},
1063
+ };
1064
+ const dd = await ApiUser.getPublicConfig('ai-points-store', 'manager');
1065
+ if (dd.response.value) {
1066
+ vm.user_info = dd.response.value;
1067
+ }
1068
+ const sku = (() => {
1069
+ switch (title) {
1070
+ case '輕便方案':
1071
+ return 'light-year';
1072
+ case '標準方案':
1073
+ return 'basic-year';
1074
+ case '企業方案':
1075
+ return 'omo-year';
1076
+ case '行動方案':
1077
+ return 'app-year';
1078
+ }
1079
+ return ``;
1080
+ })();
1081
+ // if (gvc.glitter.deviceType === gvc.glitter.deviceTypeEnum.Ios) {
1082
+ // dialog.dataLoading({visible: true});
1083
+ // gvc.glitter.runJsInterFace("in_app_product", {
1084
+ // total: `${sku.replace('-', '_')}_apple`,
1085
+ // qty: (() => {
1086
+ // switch (title) {
1087
+ // case '輕便電商方案':
1088
+ // return 1
1089
+ // case '標準電商方案':
1090
+ // return 2
1091
+ // case '通路電商方案':
1092
+ // return 4
1093
+ // case '行動電商方案':
1094
+ // return 4
1095
+ // case '旗艦電商方案':
1096
+ // return 2
1097
+ // }
1098
+ // })()
1099
+ // }, async (res) => {
1100
+ // console.log(`res.receipt_data=>`, res.receipt_data);
1101
+ // if (res.receipt_data) {
1102
+ // await ApiShop.app_subscription(res.receipt_data, (window as any).appName);
1103
+ // window.parent.location.reload();
1104
+ // } else {
1105
+ // dialog.dataLoading({visible: false});
1106
+ // dialog.errorMessage({text: '儲值失敗'})
1107
+ // }
1108
+ // })
1109
+ // return
1110
+ // }
1111
+ const product = await ApiShop.getProduct({
1112
+ limit: 1,
1113
+ page: 0,
1114
+ searchType: 'sku',
1115
+ search: sku,
1116
+ app_name: (window.parent as any).glitterBase,
1117
+ });
1118
+ vm.line_items = [
1119
+ {
1120
+ id: product.response.data[0].id as any,
1121
+ spec: product.response.data[0].content.variants.find((dd: any) => {
1122
+ return dd.sku === sku;
1123
+ }).spec,
1124
+ count: 1,
1125
+ },
1126
+ ];
1127
+ BgWidget.settingDialog({
1128
+ gvc: gvc,
1129
+ title: title,
1130
+ innerHTML: (gvc: GVC) => {
1131
+ return `<div class="mt-n2">${[
1132
+ BgWidget.editeInput({
1092
1133
  gvc: gvc,
1093
- title: title,
1094
- innerHTML: (gvc: GVC) => {
1095
- return `<div class="mt-n2">${[
1096
- BgWidget.editeInput({
1097
- gvc: gvc,
1098
- title: `發票寄送電子信箱`,
1099
- placeHolder: '請輸入發票寄送電子信箱',
1100
- callback: (text) => {
1101
- vm.user_info.email = text
1102
- },
1103
- type: 'email',
1104
- default: vm.user_info.email
1105
- }),
1106
- `<div class="tx_normal fw-normal" >發票開立方式</div>`,
1107
- BgWidget.select({
1108
- gvc: gvc, callback: (text) => {
1109
- vm.user_info.invoice_type = text
1110
- gvc.recreateView()
1111
- }, options: [
1112
- {key: 'me', value: '個人單位'},
1113
- {key: 'company', value: '公司行號'}
1114
- ], default: vm.user_info.invoice_type
1115
- }),
1116
- ...(() => {
1117
- if (vm.user_info.invoice_type === 'company') {
1118
- return [
1119
- BgWidget.editeInput({
1120
- gvc: gvc, title: `發票抬頭`, placeHolder: '請輸入發票抬頭', callback: (text) => {
1121
- vm.user_info.company = text
1122
- }, type: 'text', default: `${vm.user_info.company}`
1123
- }),
1124
- BgWidget.editeInput({
1125
- gvc: gvc,
1126
- title: `公司統一編號`,
1127
- placeHolder: '請輸入統一編號',
1128
- callback: (text) => {
1129
- vm.user_info.gui_number = text
1130
- },
1131
- type: 'number',
1132
- default: `${vm.user_info.gui_number}`
1133
- })
1134
- ]
1135
- } else {
1136
- return []
1137
- }
1138
- })()
1139
- ].join(`<div class="my-2"></div>`)}</div>`
1134
+ title: `發票寄送電子信箱`,
1135
+ placeHolder: '請輸入發票寄送電子信箱',
1136
+ callback: text => {
1137
+ vm.user_info.email = text;
1140
1138
  },
1141
- footer_html: (gvc: GVC) => {
1142
- return [BgWidget.cancel(gvc.event(() => {
1143
- gvc.closeDialog()
1144
- })), BgWidget.save(gvc.event(async () => {
1145
- if (vm.user_info.invoice_type !== 'company') {
1146
- vm.user_info.company = ''
1147
- vm.user_info.gui_number = ''
1148
- }
1149
- if (vm.user_info.invoice_type === 'company' && !vm.user_info.company) {
1150
- dialog.errorMessage({text: '請確實填寫發票抬頭'})
1151
- return
1152
- } else if (vm.user_info.invoice_type === 'company' && !vm.user_info.gui_number) {
1153
- dialog.errorMessage({text: '請確實填寫統一編號'})
1154
- return
1155
- } else if (!vm.user_info.email) {
1156
- dialog.errorMessage({text: '請確實填寫信箱'})
1157
- return
1158
- } else if (!BgWidget.isValidEmail(vm.user_info.email)) {
1159
- dialog.errorMessage({text: '請輸入有效信箱'})
1160
- return
1161
- } else if (vm.user_info.invoice_type === 'company' && !BgWidget.isValidNumbers(vm.user_info.gui_number)) {
1162
- dialog.errorMessage({text: '請輸入有效統一編號'})
1163
- return
1164
- }
1165
- dialog.dataLoading({visible: true})
1166
- await ApiUser.setPublicConfig({
1167
- key: 'ai-points-store',
1168
- value: vm.user_info,
1169
- user_id: 'manager',
1170
- })
1171
- vm.note = {
1172
- invoice_data: vm.user_info
1173
- };
1174
- vm.customer_info = {
1175
- "payment_select": "ecPay"
1176
- };
1177
- (vm.user_info as any).appName = (window.parent as any).appName;
1178
- BaseApi.create({
1179
- url: (window.parent as any).saasConfig.config.url + `/api-public/v1/ec/checkout`,
1180
- type: 'POST',
1181
- headers: {
1182
- 'Content-Type': 'application/json',
1183
- 'g-app': 'shopnex',
1184
- 'Authorization': GlobalUser.saas_token,
1185
- },
1186
- data: JSON.stringify(vm),
1187
- }).then(async (res) => {
1188
- dialog.dataLoading({visible: false})
1189
- if (res.response.form) {
1190
- const id = gvc.glitter.getUUID()
1191
- if (gvc.glitter.deviceType === gvc.glitter.deviceTypeEnum.Ios) {
1192
- gvc.glitter.runJsInterFace("toCheckout", {
1193
- form: res.response.form
1194
- }, () => {
1195
- window.parent.location.reload()
1196
- })
1197
- } else {
1198
- (window as any).$('body').append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
1199
- (window as any).document.querySelector(`#${id} #submit`).click();
1200
- }
1201
- gvc.closeDialog()
1202
- } else {
1203
- dialog.errorMessage({text: '發生錯誤'})
1204
- }
1205
- })
1206
- }))].join('')
1139
+ type: 'email',
1140
+ default: vm.user_info.email,
1141
+ }),
1142
+ `<div class="tx_normal fw-normal" >發票開立方式</div>`,
1143
+ BgWidget.select({
1144
+ gvc: gvc,
1145
+ callback: text => {
1146
+ vm.user_info.invoice_type = text;
1147
+ gvc.recreateView();
1148
+ },
1149
+ options: [
1150
+ { key: 'me', value: '個人單位' },
1151
+ { key: 'company', value: '公司行號' },
1152
+ ],
1153
+ default: vm.user_info.invoice_type,
1154
+ }),
1155
+ ...(() => {
1156
+ if (vm.user_info.invoice_type === 'company') {
1157
+ return [
1158
+ BgWidget.editeInput({
1159
+ gvc: gvc,
1160
+ title: `發票抬頭`,
1161
+ placeHolder: '請輸入發票抬頭',
1162
+ callback: text => {
1163
+ vm.user_info.company = text;
1164
+ },
1165
+ type: 'text',
1166
+ default: `${vm.user_info.company}`,
1167
+ }),
1168
+ BgWidget.editeInput({
1169
+ gvc: gvc,
1170
+ title: `公司統一編號`,
1171
+ placeHolder: '請輸入統一編號',
1172
+ callback: text => {
1173
+ vm.user_info.gui_number = text;
1174
+ },
1175
+ type: 'number',
1176
+ default: `${vm.user_info.gui_number}`,
1177
+ }),
1178
+ ];
1179
+ } else {
1180
+ return [];
1207
1181
  }
1208
- })
1209
- }
1210
- //如果是APP版本
1211
- if (gvc.glitter.getUrlParameter('device') === 'mobile') {
1212
- gvc.glitter.setCookie('ViewType', 'mobile')
1213
- GlobalWidget.glitter_view_type = 'mobile';
1182
+ })(),
1183
+ ].join(`<div class="my-2"></div>`)}</div>`;
1184
+ },
1185
+ footer_html: (gvc: GVC) => {
1186
+ return [
1187
+ BgWidget.cancel(
1188
+ gvc.event(() => {
1189
+ gvc.closeDialog();
1190
+ })
1191
+ ),
1192
+ BgWidget.save(
1193
+ gvc.event(async () => {
1194
+ if (vm.user_info.invoice_type !== 'company') {
1195
+ vm.user_info.company = '';
1196
+ vm.user_info.gui_number = '';
1197
+ }
1198
+ if (vm.user_info.invoice_type === 'company' && !vm.user_info.company) {
1199
+ dialog.errorMessage({ text: '請確實填寫發票抬頭' });
1200
+ return;
1201
+ } else if (vm.user_info.invoice_type === 'company' && !vm.user_info.gui_number) {
1202
+ dialog.errorMessage({ text: '請確實填寫統一編號' });
1203
+ return;
1204
+ } else if (!vm.user_info.email) {
1205
+ dialog.errorMessage({ text: '請確實填寫信箱' });
1206
+ return;
1207
+ } else if (!BgWidget.isValidEmail(vm.user_info.email)) {
1208
+ dialog.errorMessage({ text: '請輸入有效信箱' });
1209
+ return;
1210
+ } else if (vm.user_info.invoice_type === 'company' && !BgWidget.isValidNumbers(vm.user_info.gui_number)) {
1211
+ dialog.errorMessage({ text: '請輸入有效統一編號' });
1212
+ return;
1213
+ }
1214
+ dialog.dataLoading({ visible: true });
1215
+ await ApiUser.setPublicConfig({
1216
+ key: 'ai-points-store',
1217
+ value: vm.user_info,
1218
+ user_id: 'manager',
1219
+ });
1220
+ vm.note = {
1221
+ invoice_data: vm.user_info,
1222
+ };
1223
+ vm.customer_info = {
1224
+ payment_select: 'ecPay',
1225
+ };
1226
+ (vm.user_info as any).appName = (window.parent as any).appName;
1227
+ BaseApi.create({
1228
+ url: (window.parent as any).saasConfig.config.url + `/api-public/v1/ec/checkout`,
1229
+ type: 'POST',
1230
+ headers: {
1231
+ 'Content-Type': 'application/json',
1232
+ 'g-app': 'shopnex',
1233
+ Authorization: GlobalUser.saas_token,
1234
+ },
1235
+ data: JSON.stringify(vm),
1236
+ }).then(async res => {
1237
+ dialog.dataLoading({ visible: false });
1238
+ if (res.response.form) {
1239
+ const id = gvc.glitter.getUUID();
1240
+ if (gvc.glitter.deviceType === gvc.glitter.deviceTypeEnum.Ios) {
1241
+ gvc.glitter.runJsInterFace(
1242
+ 'toCheckout',
1243
+ {
1244
+ form: res.response.form,
1245
+ },
1246
+ () => {
1247
+ window.parent.location.reload();
1248
+ }
1249
+ );
1250
+ } else {
1251
+ (window as any)
1252
+ .$('body')
1253
+ .append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
1254
+ (window as any).document.querySelector(`#${id} #submit`).click();
1255
+ }
1256
+ gvc.closeDialog();
1257
+ } else {
1258
+ dialog.errorMessage({ text: '發生錯誤' });
1259
+ }
1260
+ });
1261
+ })
1262
+ ),
1263
+ ].join('');
1264
+ },
1265
+ });
1266
+ };
1267
+ //如果是APP版本
1268
+ if (gvc.glitter.getUrlParameter('device') === 'mobile') {
1269
+ gvc.glitter.setCookie('ViewType', 'mobile');
1270
+ GlobalWidget.glitter_view_type = 'mobile';
1271
+ }
1272
+ //找靈感組件
1273
+ glitter.share.SearchIdea = SearchIdea;
1274
+ glitter.share.editorViewModel = viewModel;
1275
+ //預設為用戶編輯模式
1276
+ localStorage.setItem('editor_mode', localStorage.getItem('editor_mode') || 'user');
1277
+ //Swal載入動畫
1278
+ const swal = new Swal(gvc);
1279
+ glitter.share.swal = swal;
1280
+ //貼上事件
1281
+ glitter.share.pastEvent = () => {
1282
+ if (!glitter.share.copycomponent) {
1283
+ swal.nextStep(`請先複製元件`, () => {}, 'error');
1284
+ return;
1214
1285
  }
1215
- //找靈感組件
1216
- glitter.share.SearchIdea = SearchIdea
1217
- glitter.share.editorViewModel = viewModel;
1218
- //預設為用戶編輯模式
1219
- localStorage.setItem('editor_mode', localStorage.getItem('editor_mode') || 'user');
1220
- //Swal載入動畫
1221
- const swal = new Swal(gvc);
1222
- glitter.share.swal = swal;
1223
- //貼上事件
1224
- glitter.share.pastEvent = () => {
1225
- if (!glitter.share.copycomponent) {
1226
- swal.nextStep(`請先複製元件`, () => {
1227
- }, 'error');
1228
- return;
1229
- }
1230
- let copy = JSON.parse(glitter.share.copycomponent);
1286
+ let copy = JSON.parse(glitter.share.copycomponent);
1231
1287
 
1232
- function checkId(dd: any) {
1233
- dd.id = glitter.getUUID();
1234
- if (dd.type === 'container') {
1235
- dd.data.setting.map((d2: any) => {
1236
- checkId(d2);
1237
- });
1238
- }
1239
- }
1288
+ function checkId(dd: any) {
1289
+ dd.id = glitter.getUUID();
1290
+ if (dd.type === 'container') {
1291
+ dd.data.setting.map((d2: any) => {
1292
+ checkId(d2);
1293
+ });
1294
+ }
1295
+ }
1240
1296
 
1241
- checkId(copy);
1242
- glitter.share.addComponent(copy);
1243
- // glitter.setCookie('lastSelect', copy.id);
1244
- // viewModel.selectContainer.splice(0, 0, copy)
1245
- // viewModel.selectItem = undefined;
1246
- // gvc.notifyDataChange(editorContainerID)
1247
- };
1248
- //清除選項
1249
- glitter.share.clearSelectItem = () => {
1250
- viewModel.selectItem = undefined;
1251
- };
1252
- //提供給編輯器使用
1253
- glitter.share.NormalPageEditor = NormalPageEditor;
1254
- //物件是否可選
1255
- glitter.share.inspect = glitter.share.inspect ?? true;
1256
- //觸發事件橋接
1257
- triggerBridge.initial();
1258
- //更新Editor事件
1259
- glitter.share.refreshAllContainer = () => {
1260
- gvc.notifyDataChange(editorContainerID);
1297
+ checkId(copy);
1298
+ glitter.share.addComponent(copy);
1299
+ // glitter.setCookie('lastSelect', copy.id);
1300
+ // viewModel.selectContainer.splice(0, 0, copy)
1301
+ // viewModel.selectItem = undefined;
1302
+ // gvc.notifyDataChange(editorContainerID)
1303
+ };
1304
+ //清除選項
1305
+ glitter.share.clearSelectItem = () => {
1306
+ viewModel.selectItem = undefined;
1307
+ };
1308
+ //提供給編輯器使用
1309
+ glitter.share.NormalPageEditor = NormalPageEditor;
1310
+ //物件是否可選
1311
+ glitter.share.inspect = glitter.share.inspect ?? true;
1312
+ //觸發事件橋接
1313
+ triggerBridge.initial();
1314
+ //更新Editor事件
1315
+ glitter.share.refreshAllContainer = () => {
1316
+ gvc.notifyDataChange(editorContainerID);
1317
+ };
1318
+ //找到ID索引位置
1319
+ glitter.share.findWidgetIndex = (id: string) => {
1320
+ let find: {
1321
+ widget: any;
1322
+ container: any;
1323
+ index: number;
1324
+ container_cf: any;
1325
+ } = {
1326
+ widget: undefined,
1327
+ container: undefined,
1328
+ container_cf: undefined,
1329
+ index: 0,
1261
1330
  };
1262
- //找到ID索引位置
1263
- glitter.share.findWidgetIndex = (id: string) => {
1264
- let find: {
1265
- widget: any;
1266
- container: any;
1267
- index: number;
1268
- container_cf: any;
1269
- } = {
1270
- widget: undefined,
1271
- container: undefined,
1272
- container_cf: undefined,
1273
- index: 0,
1274
- };
1275
1331
 
1276
- function loop(array: any, container_cf: any) {
1277
- array.map((dd: any, index: number) => {
1278
- if (dd.id === id) {
1279
- find.widget = dd;
1280
- find.container = array;
1281
- find.container_cf = container_cf;
1282
- find.index = index;
1283
- } else if (dd.type === 'container') {
1284
- loop(dd.data.setting, dd);
1285
- }
1286
- });
1332
+ function loop(array: any, container_cf: any) {
1333
+ array.map((dd: any, index: number) => {
1334
+ if (dd.id === id) {
1335
+ find.widget = dd;
1336
+ find.container = array;
1337
+ find.container_cf = container_cf;
1338
+ find.index = index;
1339
+ } else if (dd.type === 'container') {
1340
+ loop(dd.data.setting, dd);
1287
1341
  }
1342
+ });
1343
+ }
1288
1344
 
1289
- loop(glitter.share.editorViewModel.data.config, undefined);
1290
- return find;
1345
+ loop(glitter.share.editorViewModel.data.config, undefined);
1346
+ return find;
1347
+ };
1348
+ //找到ID索引位置
1349
+ glitter.share.findWidget = (where: (data: any) => boolean) => {
1350
+ let find: {
1351
+ widget: any;
1352
+ container: any;
1353
+ index: number;
1354
+ } = {
1355
+ widget: undefined,
1356
+ container: undefined,
1357
+ index: 0,
1291
1358
  };
1292
- //找到ID索引位置
1293
- glitter.share.findWidget = (where: (data: any) => boolean) => {
1294
- let find: {
1295
- widget: any;
1296
- container: any;
1297
- index: number;
1298
- } = {
1299
- widget: undefined,
1300
- container: undefined,
1301
- index: 0,
1302
- };
1303
1359
 
1304
- function loop(array: any) {
1305
- array.map((dd: any, index: number) => {
1306
- if (where(dd)) {
1307
- find.widget = dd;
1308
- find.container = array;
1309
- find.index = index;
1310
- } else if (dd.type === 'container') {
1311
- loop(dd.data.setting);
1312
- }
1313
- });
1360
+ function loop(array: any) {
1361
+ array.map((dd: any, index: number) => {
1362
+ if (where(dd)) {
1363
+ find.widget = dd;
1364
+ find.container = array;
1365
+ find.index = index;
1366
+ } else if (dd.type === 'container') {
1367
+ loop(dd.data.setting);
1314
1368
  }
1369
+ });
1370
+ }
1315
1371
 
1316
- loop(glitter.share.editorViewModel.data.config);
1317
- return find;
1318
- };
1372
+ loop(glitter.share.editorViewModel.data.config);
1373
+ return find;
1374
+ };
1319
1375
 
1320
- function resetId(widget: any) {
1321
- widget.id = glitter.getUUID();
1322
- if (widget.type === 'container') {
1323
- widget.data.setting.map((dd: any) => {
1324
- resetId(dd);
1325
- });
1326
- }
1376
+ function resetId(widget: any) {
1377
+ widget.id = glitter.getUUID();
1378
+ if (widget.type === 'container') {
1379
+ widget.data.setting.map((dd: any) => {
1380
+ resetId(dd);
1381
+ });
1327
1382
  }
1383
+ }
1328
1384
 
1329
- //添加Component至當前頁面
1330
- glitter.share.addComponent = (data: any) => {
1331
- let parentCount=glitter.share.editorViewModel.data.config.length;
1385
+ //添加Component至當前頁面
1386
+ glitter.share.addComponent = (data: any) => {
1387
+ let parentCount = glitter.share.editorViewModel.data.config.length;
1332
1388
 
1333
- glitter.share.loading_dialog.dataLoading({text: '模組添加中...', visible: true})
1334
- if (gvc.glitter.getUrlParameter('toggle-message') === 'true') {
1335
- gvc.glitter.setUrlParameter('toggle-message', undefined)
1336
- BgCustomerMessage.toggle(true, gvc);
1337
- }
1338
- if (!viewModel.selectContainer) {
1339
- viewModel.selectContainer = glitter.share.editorViewModel.data.config
1340
- }
1341
- if (!viewModel.selectContainer.container_config) {
1342
- viewModel.selectContainer.container_config = glitter.share.main_view_config
1343
- }
1344
- glitter.share.left_block_hover = true
1345
- AddComponent.toggle(false);
1346
- resetId(data);
1347
- const url = new URL(location.href);
1348
- url.search = '';
1349
- data.js = data.js.replace(url.href, './');
1350
- viewModel.selectContainer.push(data);
1351
- Storage.lastSelect = data.id;
1352
- glitter.htmlGenerate.hover_items = [Storage.lastSelect];
1353
- data.data._style_refer_global = {
1354
- index: `0`
1355
- }
1356
- console.log('viewModel.selectContainer==>',viewModel.selectContainer)
1357
- console.log('viewModel.selectContainer.container_config==>',viewModel.selectContainer.container_config)
1358
- if (viewModel.selectContainer.length === 1) {
1359
- try {
1360
- viewModel.selectContainer.container_config.getElement().recreateView();
1361
- }catch (e){
1362
- }
1363
- } else {
1364
- $(viewModel.selectContainer.container_config.getElement()).append(
1365
- glitter.htmlGenerate.renderWidgetSingle({
1366
- widget: data,
1367
- gvc: viewModel.selectContainer.container_config.gvc,
1368
- option: viewModel.selectContainer.container_config.option,
1369
- container: viewModel.selectContainer.container_config.container,
1370
- container_id: viewModel.selectContainer.container_config.container_id,
1371
- child_container: viewModel.selectContainer.container_config.child_container,
1372
- sub_data: viewModel.selectContainer.container_config.sub_data,
1373
- root: viewModel.selectContainer.container_config.root,
1374
- })
1375
- );
1376
- }
1389
+ glitter.share.loading_dialog.dataLoading({ text: '模組添加中...', visible: true });
1390
+ if (gvc.glitter.getUrlParameter('toggle-message') === 'true') {
1391
+ gvc.glitter.setUrlParameter('toggle-message', undefined);
1392
+ BgCustomerMessage.toggle(true, gvc);
1393
+ }
1394
+ if (!viewModel.selectContainer) {
1395
+ viewModel.selectContainer = glitter.share.editorViewModel.data.config;
1396
+ }
1397
+ if (!viewModel.selectContainer.container_config) {
1398
+ viewModel.selectContainer.container_config = glitter.share.main_view_config;
1399
+ }
1400
+ glitter.share.left_block_hover = true;
1401
+ AddComponent.toggle(false);
1402
+ resetId(data);
1403
+ const url = new URL(location.href);
1404
+ url.search = '';
1405
+ data.js = data.js.replace(url.href, './');
1406
+ viewModel.selectContainer.push(data);
1407
+ Storage.lastSelect = data.id;
1408
+ glitter.htmlGenerate.hover_items = [Storage.lastSelect];
1409
+ data.data._style_refer_global = {
1410
+ index: `0`,
1411
+ };
1412
+ console.log('viewModel.selectContainer==>', viewModel.selectContainer);
1413
+ console.log('viewModel.selectContainer.container_config==>', viewModel.selectContainer.container_config);
1414
+ if (viewModel.selectContainer.length === 1) {
1415
+ try {
1416
+ viewModel.selectContainer.container_config.getElement().recreateView();
1417
+ } catch (e) {}
1418
+ } else {
1419
+ $(viewModel.selectContainer.container_config.getElement()).append(
1420
+ glitter.htmlGenerate.renderWidgetSingle({
1421
+ widget: data,
1422
+ gvc: viewModel.selectContainer.container_config.gvc,
1423
+ option: viewModel.selectContainer.container_config.option,
1424
+ container: viewModel.selectContainer.container_config.container,
1425
+ container_id: viewModel.selectContainer.container_config.container_id,
1426
+ child_container: viewModel.selectContainer.container_config.child_container,
1427
+ sub_data: viewModel.selectContainer.container_config.sub_data,
1428
+ root: viewModel.selectContainer.container_config.root,
1429
+ })
1430
+ );
1431
+ }
1377
1432
 
1378
- if(parentCount===0){
1379
- Storage.lastSelect = data.id
1380
- gvc.recreateView()
1381
- }else{
1382
- setTimeout(() => {
1383
- Storage.lastSelect = data.id
1384
- glitter.htmlGenerate.selectWidget({
1385
- widget: data,
1386
- widgetComponentID: data.id,
1387
- gvc: viewModel.selectContainer.container_config.gvc,
1388
- scroll_to_hover: true,
1389
- glitter: glitter,
1390
- });
1391
- setTimeout(() => {
1392
- glitter.share.left_block_hover = false
1393
- glitter.share.loading_dialog.dataLoading({visible: false})
1394
- }, 1000)
1395
- }, 100)
1396
- viewModel.selectContainer && viewModel.selectContainer.rerenderReplaceElem && viewModel.selectContainer.rerenderReplaceElem()
1397
- }
1433
+ if (parentCount === 0) {
1434
+ Storage.lastSelect = data.id;
1435
+ gvc.recreateView();
1436
+ } else {
1437
+ setTimeout(() => {
1438
+ Storage.lastSelect = data.id;
1439
+ glitter.htmlGenerate.selectWidget({
1440
+ widget: data,
1441
+ widgetComponentID: data.id,
1442
+ gvc: viewModel.selectContainer.container_config.gvc,
1443
+ scroll_to_hover: true,
1444
+ glitter: glitter,
1445
+ });
1446
+ setTimeout(() => {
1447
+ glitter.share.left_block_hover = false;
1448
+ glitter.share.loading_dialog.dataLoading({ visible: false });
1449
+ }, 1000);
1450
+ }, 100);
1451
+ viewModel.selectContainer &&
1452
+ viewModel.selectContainer.rerenderReplaceElem &&
1453
+ viewModel.selectContainer.rerenderReplaceElem();
1454
+ }
1398
1455
 
1399
- AddComponent.toggle(false);
1456
+ AddComponent.toggle(false);
1457
+ };
1458
+ //添加Component至指定索引
1459
+ glitter.share.addWithIndex = (cf: { data: any; index: string; direction: number }) => {
1460
+ glitter.share.loading_dialog.dataLoading({ text: '模組添加中...', visible: true });
1461
+ glitter.share.left_block_hover = true;
1462
+ AddComponent.toggle(false);
1463
+ resetId(cf.data);
1464
+ const arrayData = glitter.share.findWidgetIndex(cf.index);
1465
+ if (!arrayData.container.container_config) {
1466
+ arrayData.container.container_config = glitter.share.main_view_config;
1467
+ }
1468
+ const url = new URL(location.href);
1469
+ url.search = '';
1470
+ cf.data.js = cf.data.js.replace(url.href, './');
1471
+ if (cf.direction === 1) {
1472
+ arrayData.container.splice(arrayData.index + 1, 0, cf.data);
1473
+ } else {
1474
+ arrayData.container.splice(arrayData.index, 0, cf.data);
1475
+ }
1476
+ Storage.lastSelect = cf.data.id;
1477
+ glitter.htmlGenerate.hover_items = [Storage.lastSelect];
1478
+ const $ = ((document.querySelector('#editerCenter iframe') as any).contentWindow as any).$;
1479
+ $(
1480
+ glitter.htmlGenerate.renderWidgetSingle({
1481
+ widget: cf.data,
1482
+ gvc: arrayData.container.container_config.gvc,
1483
+ option: arrayData.container.container_config.option,
1484
+ container: arrayData.container.container_config.container,
1485
+ container_id: arrayData.container.container_config.container_id,
1486
+ child_container: arrayData.container.container_config.child_container,
1487
+ sub_data: arrayData.container.container_config.sub_data,
1488
+ root: arrayData.container.container_config.root,
1489
+ })
1490
+ )[cf.direction === 1 ? 'insertAfter' : 'insertBefore']($(`.editor_it_${cf.index}`).parent());
1491
+ //
1492
+ setTimeout(() => {
1493
+ console.log(`cf.data.id==>`, cf.data.id);
1494
+ Storage.lastSelect = cf.data.id;
1400
1495
 
1401
- };
1402
- //添加Component至指定索引
1403
- glitter.share.addWithIndex = (cf: { data: any; index: string; direction: number }) => {
1404
- glitter.share.loading_dialog.dataLoading({text: '模組添加中...', visible: true})
1405
- glitter.share.left_block_hover = true
1406
- AddComponent.toggle(false);
1407
- resetId(cf.data);
1408
- const arrayData = glitter.share.findWidgetIndex(cf.index);
1409
- if (!arrayData.container.container_config) {
1410
- arrayData.container.container_config = glitter.share.main_view_config
1411
- }
1412
- const url = new URL(location.href);
1413
- url.search = '';
1414
- cf.data.js = cf.data.js.replace(url.href, './');
1415
- if (cf.direction === 1) {
1416
- arrayData.container.splice(arrayData.index + 1, 0, cf.data);
1417
- } else {
1418
- arrayData.container.splice(arrayData.index, 0, cf.data);
1419
- }
1420
- Storage.lastSelect = cf.data.id;
1421
- glitter.htmlGenerate.hover_items = [Storage.lastSelect];
1422
- const $ = ((document.querySelector('#editerCenter iframe') as any).contentWindow as any).$;
1423
- $(
1424
- glitter.htmlGenerate.renderWidgetSingle({
1425
- widget: cf.data,
1426
- gvc: arrayData.container.container_config.gvc,
1427
- option: arrayData.container.container_config.option,
1428
- container: arrayData.container.container_config.container,
1429
- container_id: arrayData.container.container_config.container_id,
1430
- child_container: arrayData.container.container_config.child_container,
1431
- sub_data: arrayData.container.container_config.sub_data,
1432
- root: arrayData.container.container_config.root,
1433
- })
1434
- )[cf.direction === 1 ? 'insertAfter' : 'insertBefore']($(`.editor_it_${cf.index}`).parent());
1435
- //
1436
- setTimeout(() => {
1437
- console.log(`cf.data.id==>`,cf.data.id)
1438
- Storage.lastSelect = cf.data.id
1439
- function pasteEvent(){
1440
- glitter.htmlGenerate.selectWidget({
1441
- widget: cf.data,
1442
- widgetComponentID: cf.data.id,
1443
- gvc: arrayData.container.container_config.gvc,
1444
- scroll_to_hover: true,
1445
- glitter: glitter,
1446
- });
1447
- }
1448
- pasteEvent()
1449
- setTimeout(() => {
1450
- glitter.share.left_block_hover = false
1451
- glitter.share.loading_dialog.dataLoading({visible: false})
1452
- pasteEvent()
1453
- }, 1000)
1454
- }, 100)
1455
- AddComponent.toggle(false);
1456
- viewModel.selectContainer && viewModel.selectContainer.rerenderReplaceElem && viewModel.selectContainer.rerenderReplaceElem();
1457
- };
1458
- //快捷鍵設定
1459
- shortCutKey(gvc);
1496
+ function pasteEvent() {
1497
+ glitter.htmlGenerate.selectWidget({
1498
+ widget: cf.data,
1499
+ widgetComponentID: cf.data.id,
1500
+ gvc: arrayData.container.container_config.gvc,
1501
+ scroll_to_hover: true,
1502
+ glitter: glitter,
1503
+ });
1504
+ }
1460
1505
 
1506
+ pasteEvent();
1507
+ setTimeout(() => {
1508
+ glitter.share.left_block_hover = false;
1509
+ glitter.share.loading_dialog.dataLoading({ visible: false });
1510
+ pasteEvent();
1511
+ }, 1000);
1512
+ }, 100);
1513
+ AddComponent.toggle(false);
1514
+ viewModel.selectContainer &&
1515
+ viewModel.selectContainer.rerenderReplaceElem &&
1516
+ viewModel.selectContainer.rerenderReplaceElem();
1517
+ };
1518
+ //快捷鍵設定
1519
+ shortCutKey(gvc);
1520
+ //載入全站元件
1521
+ ApiPageConfig.getPageTemplate({
1522
+ template_from: 'all',
1523
+ page: '0',
1524
+ limit: '3000',
1525
+ type: 'module',
1526
+ tag: '標頭元件,商品卡片,頁腳元件',
1527
+ }).then(res => {
1528
+ glitter.share._global_component=res.response.result.data
1529
+ });
1461
1530
  }
1462
1531
 
1463
1532
  function shortCutKey(gvc: GVC) {
1464
- // 添加全局鍵盤事件監聽器
1465
- document.addEventListener('keydown', function (event) {
1466
- // 檢查按下的按鍵碼
1467
- let keyCode = event.keyCode || event.which;
1468
- // Ctrl + G
1469
- if (event.ctrlKey && keyCode === 71) {
1470
- SetGlobalValue.toggle(true);
1471
- }
1472
- });
1533
+ // 添加全局鍵盤事件監聽器
1534
+ document.addEventListener('keydown', function (event) {
1535
+ // 檢查按下的按鍵碼
1536
+ let keyCode = event.keyCode || event.which;
1537
+ // Ctrl + G
1538
+ if (event.ctrlKey && keyCode === 71) {
1539
+ SetGlobalValue.toggle(true);
1540
+ }
1541
+ });
1473
1542
  }