ts-glitter 21.1.5 → 21.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/create.js +1 -0
  2. package/lowcode/Entry.js +1 -1
  3. package/lowcode/Entry.ts +1 -1
  4. package/lowcode/cms-plugin/module/order-excel.js +256 -132
  5. package/lowcode/cms-plugin/module/order-excel.ts +228 -81
  6. package/lowcode/cms-plugin/shopping-finance-setting.js +1 -1
  7. package/lowcode/cms-plugin/shopping-finance-setting.ts +1 -1
  8. package/lowcode/cms-plugin/shopping-order-manager.js +33 -29
  9. package/lowcode/cms-plugin/shopping-order-manager.ts +36 -30
  10. package/lowcode/editor-components/global-widget/bridge.js +43 -0
  11. package/lowcode/editor-components/global-widget/bridge.ts +46 -0
  12. package/lowcode/editor-components/global-widget/global-widget.js +254 -0
  13. package/lowcode/editor-components/global-widget/global-widget.ts +269 -0
  14. package/lowcode/editor-components/global-widget/src/banner.jpg +0 -0
  15. package/lowcode/editor-components/global-widget/src/footer.jpg +0 -0
  16. package/lowcode/editor-components/global-widget/src/header.png +0 -0
  17. package/lowcode/editor-components/global-widget/src/product.jpg +0 -0
  18. package/lowcode/glitterBundle/plugins/editor-elem.js +14 -4
  19. package/lowcode/glitterBundle/plugins/editor-elem.ts +13 -4
  20. package/lowcode/jspage/function-page/main_editor.js +14 -10
  21. package/lowcode/jspage/function-page/main_editor.ts +14 -10
  22. package/lowcode/jspage/function-page/tool-setting.js +260 -300
  23. package/lowcode/jspage/function-page/tool-setting.ts +350 -384
  24. package/lowcode/official_view_component/official/component.ts +1 -0
  25. package/lowcode/public-components/checkout/index.js +32 -1
  26. package/lowcode/public-components/checkout/index.ts +32 -1
  27. package/lowcode/public-components/product/pd-card-01.js +0 -58
  28. package/lowcode/public-components/product/pd-card-01.ts +0 -45
  29. package/lowcode/public-components/product/pd-card-02.js +1 -59
  30. package/lowcode/public-components/product/pd-card-02.ts +1 -45
  31. package/lowcode/public-components/product/pd-card-03.js +2 -59
  32. package/lowcode/public-components/product/pd-card-03.ts +2 -46
  33. package/package.json +3 -1
  34. package/src/api-public/services/financial-serviceV2.js +17 -7
  35. package/src/api-public/services/financial-serviceV2.js.map +1 -1
  36. package/src/api-public/services/post.js +17 -7
  37. package/src/api-public/services/post.js.map +1 -1
  38. package/src/api-public/services/shopee.js +17 -7
  39. package/src/api-public/services/shopee.js.map +1 -1
  40. package/src/api-public/services/shopping.js.map +1 -1
@@ -1,407 +1,373 @@
1
- import {GVC} from '../../glitterBundle/GVController.js';
2
- import {BgWidget} from '../../backend-manager/bg-widget.js';
3
- import {ApiPageConfig} from '../../api/pageConfig.js';
4
- import {ShareDialog} from '../../glitterBundle/dialog/ShareDialog.js';
5
- import {NormalPageEditor} from "../../editor/normal-page-editor.js";
6
- import {FirstBanner} from "../../public-components/banner/first-banner.js";
1
+ import { GVC } from '../../glitterBundle/GVController.js';
2
+ import { BgWidget } from '../../backend-manager/bg-widget.js';
3
+ import { ApiPageConfig } from '../../api/pageConfig.js';
4
+ import { ShareDialog } from '../../glitterBundle/dialog/ShareDialog.js';
5
+ import { NormalPageEditor } from '../../editor/normal-page-editor.js';
6
+ import { FirstBanner } from '../../public-components/banner/first-banner.js';
7
+ import { GlobalWidget } from '../../editor-components/global-widget/global-widget.js';
7
8
 
8
9
  export class ToolSetting {
9
- public static tool_setting_list = [
10
- {
11
- title: '標頭選單',
12
- tag: '標頭元件',
13
- hint: `全館 (首頁,隱形賣場,一頁式網頁) 的標頭將預設為以下樣式`,
14
- class: "guideDesign-2"
15
- },
16
- {
17
- title: '頁腳選單',
18
- tag: '頁腳元件',
19
- hint: `全館 (首頁,隱形賣場,一頁式網頁) 的頁腳將預設為以下樣式`,
20
- },
21
- {
22
- title: '商品卡片',
23
- tag: '商品卡片',
24
- hint: `全館 (首頁,隱形賣場,一頁式網頁) 的商品卡片將預設為以下樣式`,
25
- },
26
- {
27
- title: '首頁廣告',
28
- tag: '廣告輪播',
29
- hint: `用戶於首頁時會彈跳出來的輪播廣告`,
30
- },
31
- ]
10
+ public static tool_setting_list = [
11
+ {
12
+ title: '標頭選單',
13
+ tag: '標頭元件',
14
+ hint: `全館 (首頁,隱形賣場,一頁式網頁) 的標頭將預設為以下樣式`,
15
+ class: 'guideDesign-2',
16
+ },
17
+ {
18
+ title: '頁腳選單',
19
+ tag: '頁腳元件',
20
+ hint: `全館 (首頁,隱形賣場,一頁式網頁) 的頁腳將預設為以下樣式`,
21
+ },
22
+ {
23
+ title: '商品卡片',
24
+ tag: '商品卡片',
25
+ hint: `全館 (首頁,隱形賣場,一頁式網頁) 的商品卡片將預設為以下樣式`,
26
+ },
27
+ {
28
+ title: '首頁廣告',
29
+ tag: '廣告輪播',
30
+ hint: `用戶於首頁時會彈跳出來的輪播廣告`,
31
+ },
32
+ ];
32
33
 
33
- public static main(gvc: GVC) {
34
- const html = String.raw;
35
- const vm: {
36
- id: string;
37
- data: any;
38
- loading: boolean;
39
- function: 'edit' | 'list';
40
- edit_view: string;
41
- } = {
42
- id: gvc.glitter.getUUID(),
43
- data: ToolSetting.tool_setting_list,
44
- loading: true,
45
- function: 'list',
46
- edit_view: '',
47
- };
34
+ public static main(gvc: GVC) {
35
+ const html = String.raw;
36
+ const vm: {
37
+ id: string;
38
+ data: any;
39
+ loading: boolean;
40
+ function: 'edit' | 'list';
41
+ edit_view: string;
42
+ } = {
43
+ id: gvc.glitter.getUUID(),
44
+ data: ToolSetting.tool_setting_list,
45
+ loading: true,
46
+ function: 'list',
47
+ edit_view: '',
48
+ };
48
49
 
49
- return [gvc.bindView(() => {
50
- return {
51
- bind: vm.id,
52
- view: () => {
53
- if (vm.function === 'edit') {
54
- return html`
55
- <div class="px-2 pt-2">${vm.edit_view}</div>`;
56
- }
57
- return html`
58
- ${(() => {
59
- if (document.body.clientWidth < 800) {
60
- return `<div class="w-100 d-flex align-items-center p-3 border-bottom">
50
+ return [
51
+ gvc.bindView(() => {
52
+ return {
53
+ bind: vm.id,
54
+ view: () => {
55
+ if (vm.function === 'edit') {
56
+ return html` <div class="px-2 pt-2">${vm.edit_view}</div>`;
57
+ }
58
+ return html`
59
+ ${(() => {
60
+ if (document.body.clientWidth < 800) {
61
+ return `<div class="w-100 d-flex align-items-center p-3 border-bottom">
61
62
  <h5 class="offcanvas-title " style="max-width: calc(100% - 50px);overflow: hidden;text-overflow: ellipsis;">統一元件設定</h5>
62
63
  <div class="flex-fill"></div>
63
64
  <div
64
65
  class="fs-5 text-black"
65
66
  style="cursor: pointer;"
66
67
  onclick="${gvc.event(() => {
67
- gvc.glitter.closeDrawer()
68
+ gvc.glitter.closeDrawer();
68
69
  })}"
69
70
  >
70
71
  <i class="fa-sharp fa-regular fa-circle-xmark" style=""></i>
71
72
  </div>
72
- </div>`
73
- } else {
74
- return ``
75
- }
76
- })()}
77
- ${gvc.bindView(
78
- (() => {
79
- const vid = gvc.glitter.getUUID();
80
- return {
81
- bind: vid,
82
- view: () => {
83
- return vm.data.map((dd: any) => {
84
- let viewID = gvc.glitter.getUUID();
85
- return gvc.bindView({
86
- bind: viewID,
87
- view: () => {
88
- return html`
89
- <div class="d-flex flex-column w-100 border-bottom">
90
- <div class="hoverF2 w-100 h-100 px-3 d-flex align-items-center justify-content-between p-3 ${dd.class ?? ''}"
91
- style="cursor: pointer;"
92
- onclick="${gvc.event(() => {
93
- let temp = dd.toggle;
94
- vm.data.map((d2: any) => {
95
- d2.toggle = false;
96
- });
97
- dd.toggle = !temp;
98
- gvc.notifyDataChange(vid);
99
- })}">
100
- ${BgWidget.title(dd.title, 'font-size: 16px;')}
101
- ${dd.toggle ? `<i class="fa-solid fa-chevron-down ms-2"></i>` : `<i class="fa-solid fa-chevron-right ms-2"></i>`}
102
- </div>
103
- <div class="px-3 mb-2 ${dd.toggle ? `` : `d-none`}"
104
- style="white-space: normal;t">
105
- ${dd.hint && dd.toggle ? BgWidget.grayNote(dd.hint) : ``}
106
- </div>
107
- ${gvc.bindView(() => {
108
- const id = gvc.glitter.getUUID();
109
- const cvm = {
110
- loading: true,
111
- html: ``,
112
- };
113
-
114
- async function loadData() {
115
- let module_list = (
116
- await ApiPageConfig.getPageTemplate({
117
- template_from: 'all',
118
- page: '0',
119
- limit: '3000',
120
- type: 'module',
121
- tag: dd.tag,
122
- })
123
- ).response.result.data;
124
-
125
- const ci_tag=(()=>{
126
- switch (dd.tag){
127
- case '標頭元件':
128
- return 'c_header'
129
- case '頁腳元件':
130
- return `footer`
131
- case '商品卡片':
132
- return `product_widget`
133
- case '廣告輪播':
134
- return 'advertise'
135
- }
136
- })()
137
- let setting_view = '';
138
- //參照元件
139
- let widget = await (async () => {
140
- if (['標頭元件', '頁腳元件', '商品卡片', '廣告輪播'].includes(dd.tag)) {
141
- return (
142
- await ApiPageConfig.getPage({
143
- appName: (window as any).appName,
144
- type: 'template',
145
- tag:ci_tag,
146
- })
147
- ).response.result[0];
148
- }else{
149
- return {}
150
- }
151
- })();
152
- //主元件
153
- const refer_widget = await (async () => {
154
- if (['標頭元件', '頁腳元件', '商品卡片', '廣告輪播'].includes(dd.tag)) {
155
- return (
156
- await ApiPageConfig.getPage({
157
- appName: widget.config[0].data.refer_app,
158
- type: 'template',
159
- tag: widget.config[0].data.tag,
160
- })
161
- ).response.result[0];
162
- } else {
163
- return {};
164
- }
165
- })();
166
-
167
- const find_showed_widget = gvc.glitter.share.findWidget((d1: any) => {
168
- return (
169
- d1.data &&
170
- d1.data.tag ===
171
- ci_tag
172
- );
173
- });
73
+ </div>`;
74
+ } else {
75
+ return ``;
76
+ }
77
+ })()}
78
+ ${gvc.bindView(
79
+ (() => {
80
+ const vid = gvc.glitter.getUUID();
81
+ return {
82
+ bind: vid,
83
+ view: () => {
84
+ return vm.data
85
+ .map((dd: any) => {
86
+ let viewID = gvc.glitter.getUUID();
87
+ return gvc.bindView({
88
+ bind: viewID,
89
+ view: () => {
90
+ return html`
91
+ <div class="d-flex flex-column w-100 border-bottom">
92
+ <div
93
+ class="hoverF2 w-100 h-100 px-3 d-flex align-items-center justify-content-between p-3 ${dd.class ??
94
+ ''}"
95
+ style="cursor: pointer;"
96
+ onclick="${gvc.event(() => {
97
+ let temp = dd.toggle;
98
+ vm.data.map((d2: any) => {
99
+ d2.toggle = false;
100
+ });
101
+ dd.toggle = !temp;
102
+ gvc.notifyDataChange(vid);
103
+ })}"
104
+ >
105
+ ${BgWidget.title(dd.title, 'font-size: 16px;')}
106
+ ${dd.toggle
107
+ ? `<i class="fa-solid fa-chevron-down ms-2"></i>`
108
+ : `<i class="fa-solid fa-chevron-right ms-2"></i>`}
109
+ </div>
174
110
 
175
- const widget_container = find_showed_widget.container || widget.config;
176
- let widget_edited = find_showed_widget.widget || widget.config[0];
177
- const htmlGenerate = new gvc.glitter.htmlGenerate(widget_container, [], {
178
- editor_updated_callback:(oWidget:any)=>{
179
- if(dd.tag === '廣告輪播'){
180
- FirstBanner.main({
181
- gvc:(document.querySelector('.iframe_view') as any).contentWindow.glitter.pageConfig[0].gvc,
182
- ed_widget:oWidget
183
- })
184
- }
185
- }
186
- }, true);
187
- gvc.glitter.share.editorViewModel.selectItem = widget_edited;
188
- try {
189
- module_list = module_list.filter((dd: any) => {
190
- return dd.appName !== widget.config[0].data.refer_app || dd.tag !== widget.config[0].data.tag;
191
- });
192
- } catch (e) {
193
- module_list = [];
194
- }
111
+ ${ToolSetting.item({
112
+ gvc,
113
+ dd,
114
+ vm,
115
+ })}
116
+ </div>
117
+ `;
118
+ },
119
+ divCreate: { class: ' d-flex align-items-center' },
120
+ });
121
+ })
122
+ .join('');
123
+ },
124
+ };
125
+ })()
126
+ )}
127
+ `;
128
+ },
129
+ divCreate: {
130
+ class: `p-2 mx-n2 mt-n2`,
131
+ },
132
+ };
133
+ }),
134
+ ].join('');
135
+ }
195
136
 
196
- try {
197
- setting_view += html`
198
- <div class="col-12 p-0 m-0">
199
- <div
200
- class="position-relative"
201
- style="width: 100%; padding: 18px 12px;border-radius: 7px; overflow: hidden; border: 1px #DDDDDD solid; flex-direction: column; justify-content: center; align-items: flex-start; gap: 32px; display: inline-flex"
202
- >
203
- <div style="align-self: stretch; justify-content: flex-start; align-items: center; gap: 10px; display: inline-flex">
204
- <div class="rounded-2 shadow"
205
- style="background-position:center;background-repeat: no-repeat;background-size: cover;width:93px;height: 59px;background-image: url('${refer_widget.template_config.image[0] ??
206
- 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/1713445383494-未命名(1080x1080像素).jpg'}');">
137
+ public static item(obj: { gvc: GVC; dd: any; vm?: any }) {
138
+ const { gvc, dd, vm } = obj;
139
+ const html = String.raw;
140
+ return [
141
+ html` <div class="px-2 mb-2 ${dd.toggle ? `` : `d-none`}" style="white-space: normal;t">
142
+ ${dd.hint && dd.toggle ? BgWidget.grayNote(dd.hint) : ``}
143
+ </div>`,
144
+ gvc.bindView(() => {
145
+ const id = gvc.glitter.getUUID();
146
+ const cvm = {
147
+ loading: true,
148
+ html: ``,
149
+ };
207
150
 
208
- </div>
209
- <div style="flex: 1 1 0; flex-direction: column; justify-content: center; align-items: flex-start; gap: 4px; display: inline-flex">
210
- <div style="align-self: stretch; color: #393939; font-size: 15px; font-weight: 400; word-wrap: break-word">
211
- ${refer_widget.template_config.name}
212
- </div>
213
- </div>
151
+ async function loadData() {
152
+ let module_list = (
153
+ await ApiPageConfig.getPageTemplate({
154
+ template_from: 'all',
155
+ page: '0',
156
+ limit: '3000',
157
+ type: 'module',
158
+ tag: dd.tag,
159
+ })
160
+ ).response.result.data;
214
161
 
215
- <div class=""
216
- style="cursor: pointer;color: #36B;font-size: 15px; "
217
- onclick="${gvc.event(() => {
218
- if (dd.tag === '商品卡片') {
219
- gvc.glitter.share.product_edit_w = gvc.glitter.share.product_edit_w ?? widget;
220
- widget = gvc.glitter.share.product_edit_w;
221
- widget_edited = widget.config[0];
222
- gvc.glitter.share.editorViewModel.saveArray[widget.id] = () => {
223
- return ApiPageConfig.setPage({
224
- id: widget.id,
225
- appName: widget.appName,
226
- tag: widget.tag,
227
- config: widget.config,
228
- });
229
- };
230
- }else if(dd.tag === '廣告輪播'){
231
- gvc.glitter.share.first_banner = gvc.glitter.share.first_banner ?? widget;
232
- widget = gvc.glitter.share.first_banner;
233
- widget_edited = widget.config[0];
234
- gvc.glitter.share.editorViewModel.saveArray[widget.id] = () => {
235
- return ApiPageConfig.setPage({
236
- id: widget.id,
237
- appName: widget.appName,
238
- tag: widget.tag,
239
- config: widget.config,
240
- });
241
- };
242
- }
243
- vm.edit_view =
244
- html`` +
245
- htmlGenerate.editor(gvc, {
246
- return_: false,
247
- refreshAll: () => {
248
-
249
- },
250
- setting: [widget_edited],
251
- deleteEvent: () => {
252
- },
253
- });
254
- vm.function = 'edit';
255
- gvc.notifyDataChange(vm.id);
256
- })}">編輯
257
- </div>
258
- </div>
259
- </div>
260
- <div class="w-100 mt-2 ${module_list.length ? ``:`d-none`}">
261
- <div class="bt_border_editor"
262
- data-bs-toggle="dropdown"
263
- aria-haspopup="true"
264
- aria-expanded="false">變更樣式
265
- </div>
266
- <div class="dropdown-menu my-1 p-0 rounded-3 position-fixed "
267
- style="overflow: hidden;max-width: 100%;width: 300px;">
268
- ${(() => {
269
- return `<div class="d-flex flex-column w-100" style="max-height: 300px;overflow-y: auto;">
270
- ${module_list.map((dd: any, index: number) => {
271
- return html`
272
- <div
273
- class="position-relative"
274
- style="max-width: 100%;width: 300px; padding: 18px 12px;border-radius: 7px; overflow: hidden; flex-direction: column; justify-content: center; align-items: flex-start; gap: 32px; display: inline-flex"
275
- onclick="${gvc.event(() => {
276
- const dialog = new ShareDialog(gvc.glitter);
277
- dialog.checkYesOrNot({
278
- text: '是否確認替換樣式?',
279
- callback: (response) => {
280
- if (response) {
281
- dialog.dataLoading({visible: true});
282
- ((window as any).glitterInitialHelper).getPageData({
283
- tag: dd.tag,
284
- appName: dd.appName
285
- }, (d3: any) => {
286
- widget.config[0] = {
287
- id: gvc.glitter.getUUID(),
288
- js: './official_view_component/official.js',
289
- css: {
290
- class: {},
291
- style: {},
292
- },
293
- data: {
294
- refer_app: dd.appName,
295
- refer_form_data: d3.response.result[0].page_config.formData,
296
- tag: dd.tag,
297
- list: [],
298
- carryData: {},
299
- },
300
- type: 'component',
301
- class: 'w-100',
302
- index: 0,
303
- label: dd.name,
304
- style: '',
305
- bundle: {},
306
- global: [],
307
- toggle: false,
308
- stylist: [],
309
- dataType: 'static',
310
- style_from: 'code',
311
- classDataType: 'static',
312
- preloadEvenet: {},
313
- share: {},
314
- "gCount": "single"
315
- };
316
- ApiPageConfig.setPage({
317
- id: widget.id,
318
- appName: widget.appName,
319
- tag: widget.tag,
320
- name: widget.name,
321
- config: widget.config,
322
- group: widget.group,
323
- page_config: widget.page_config,
324
- page_type: widget.page_type,
325
- preview_image: widget.preview_image,
326
- favorite: widget.favorite,
327
- }).then((api) => {
328
- dialog.dataLoading({visible: false});
329
- location.reload();
330
- });
331
- })
332
- }
333
- },
334
- });
335
- })}"
336
- >
337
- <div style="align-self: stretch; justify-content: flex-start; align-items: center; gap: 10px; display: inline-flex">
338
- <div class="rounded-2 shadow"
339
- style="background-position:center;background-repeat: no-repeat;background-size: cover;width:93px;height: 59px;background-image: url('${dd.template_config.image[0] ??
340
- 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/1713445383494-未命名(1080x1080像素).jpg'}');">
162
+ const ci_tag = (() => {
163
+ switch (dd.tag) {
164
+ case '標頭元件':
165
+ return 'c_header';
166
+ case '頁腳元件':
167
+ return `footer`;
168
+ case '商品卡片':
169
+ return `product_widget`;
170
+ case '廣告輪播':
171
+ return 'advertise';
172
+ }
173
+ })();
174
+ //
175
+ let setting_view = '';
176
+ //參照元件
177
+ let widget = await (async () => {
178
+ if (['標頭元件', '頁腳元件', '商品卡片', '廣告輪播'].includes(dd.tag)) {
179
+ return (
180
+ await ApiPageConfig.getPage({
181
+ appName: (window as any).appName,
182
+ type: 'template',
183
+ tag: ci_tag,
184
+ })
185
+ ).response.result[0];
186
+ } else {
187
+ return {};
188
+ }
189
+ })();
190
+ //主元件
191
+ const refer_widget = await (async () => {
192
+ if (['標頭元件', '頁腳元件', '商品卡片', '廣告輪播'].includes(dd.tag)) {
193
+ return (
194
+ await ApiPageConfig.getPage({
195
+ appName: widget.config[0].data.refer_app,
196
+ type: 'template',
197
+ tag: widget.config[0].data.tag,
198
+ })
199
+ ).response.result[0];
200
+ } else {
201
+ return {};
202
+ }
203
+ })();
204
+ const find_showed_widget = gvc.glitter.share.findWidget((d1: any) => {
205
+ return d1.data && d1.data.tag === ci_tag;
206
+ });
207
+ const widget_container = find_showed_widget.container || widget.config;
208
+ let widget_edited = find_showed_widget.widget || widget.config[0];
209
+ const htmlGenerate = new gvc.glitter.htmlGenerate(
210
+ widget_container,
211
+ [],
212
+ {
213
+ editor_updated_callback: (oWidget: any) => {
214
+ if (dd.tag === '廣告輪播') {
215
+ FirstBanner.main({
216
+ gvc: (document.querySelector('.iframe_view') as any).contentWindow.glitter.pageConfig[0].gvc,
217
+ ed_widget: oWidget,
218
+ });
219
+ }
220
+ },
221
+ },
222
+ true
223
+ );
224
+ gvc.glitter.share.editorViewModel.selectItem = widget_edited;
225
+ try {
226
+ module_list = module_list.filter((dd: any) => {
227
+ return dd.appName !== widget.config[0].data.refer_app || dd.tag !== widget.config[0].data.tag;
228
+ });
229
+ } catch (e) {
230
+ module_list = [];
231
+ }
341
232
 
342
- </div>
343
- <div style="flex: 1 1 0; flex-direction: column; justify-content: center; align-items: flex-start; gap: 4px; display: inline-flex">
344
- <div style="align-self: stretch; color: #393939; font-size: 15px; font-weight: 400; word-wrap: break-word">
345
- ${dd.template_config.name}
346
- </div>
347
- </div>
233
+ try {
234
+ setting_view += html`
235
+ <div class="col-12 p-0 m-0">
236
+ <div
237
+ class="position-relative"
238
+ style="width: 100%; padding: 18px 12px;border-radius: 7px; overflow: hidden; border: 1px #DDDDDD solid; flex-direction: column; justify-content: center; align-items: flex-start; gap: 32px; display: inline-flex"
239
+ >
240
+ <div
241
+ style="align-self: stretch; justify-content: flex-start; align-items: center; gap: 10px; display: inline-flex"
242
+ >
243
+ <div
244
+ class="rounded-2 shadow"
245
+ style="background-position:center;background-repeat: no-repeat;background-size: cover;width:93px;height: 59px;background-image: url('${(() => {
246
+ switch (dd.tag) {
247
+ case '標頭元件':
248
+ return `${gvc.glitter.root_path}/editor-components/global-widget/src/header.png`;
249
+ case '頁腳元件':
250
+ return `${gvc.glitter.root_path}/editor-components/global-widget/src/footer.jpg`;
251
+ case '商品卡片':
252
+ return `${gvc.glitter.root_path}/editor-components/global-widget/src/product.jpg`;
253
+ case '廣告輪播':
254
+ return `${gvc.glitter.root_path}/editor-components/global-widget/src/banner.jpg`;
255
+ }
256
+ })()}');"
257
+ ></div>
258
+ <div
259
+ style="flex: 1 1 0; flex-direction: column; justify-content: center; align-items: flex-start; gap: 4px; display: inline-flex"
260
+ >
261
+ <div
262
+ style="align-self: stretch; color: #393939; font-size: 15px; font-weight: 400; word-wrap: break-word"
263
+ >
264
+ ${refer_widget.template_config.name}
265
+ </div>
266
+ </div>
348
267
 
349
- </div>
350
- </div>
351
- `;
352
- }).join(`<div class="w-100 border-top"></div>`)}
353
- </div>`
354
- })()}
355
- </div>
356
- </div>
357
- </div>
358
- `
359
- } catch (e) {
360
- }
268
+ <div
269
+ class="${(vm || (dd as any).editable) ? `` : `d-none`}"
270
+ style="cursor: pointer;color: #36B;font-size: 15px; "
271
+ onclick="${gvc.event(() => {
272
+ if (dd.tag === '商品卡片') {
273
+ gvc.glitter.share.product_edit_w = gvc.glitter.share.product_edit_w ?? widget;
274
+ widget = gvc.glitter.share.product_edit_w;
275
+ widget_edited = widget.config[0];
276
+ gvc.glitter.share.editorViewModel.saveArray[widget.id] = () => {
277
+ return ApiPageConfig.setPage({
278
+ id: widget.id,
279
+ appName: widget.appName,
280
+ tag: widget.tag,
281
+ config: widget.config,
282
+ });
283
+ };
284
+ } else if (dd.tag === '廣告輪播') {
285
+ gvc.glitter.share.first_banner = gvc.glitter.share.first_banner ?? widget;
286
+ widget = gvc.glitter.share.first_banner;
287
+ widget_edited = widget.config[0];
288
+ gvc.glitter.share.editorViewModel.saveArray[widget.id] = () => {
289
+ return ApiPageConfig.setPage({
290
+ id: widget.id,
291
+ appName: widget.appName,
292
+ tag: widget.tag,
293
+ config: widget.config,
294
+ });
295
+ };
296
+ }
297
+ if(vm){
298
+ vm.edit_view =
299
+ html`` +
300
+ htmlGenerate.editor(gvc, {
301
+ return_: false,
302
+ refreshAll: () => {},
303
+ setting: [widget_edited],
304
+ deleteEvent: () => {},
305
+ });
306
+ vm.function = 'edit';
307
+ gvc.notifyDataChange(vm.id);
308
+ }else{
309
+ // glitter.pageConfig[0].gvc.notifyDataChange('right_NAV')
310
+ (gvc.glitter.pageConfig[0] as any).gvc.getBindViewElem('right_NAV')[0].innerHTML=html`<div class="p-2">
311
+ ${htmlGenerate.editor(gvc, {
312
+ return_: false,
313
+ refreshAll: () => {},
314
+ setting: [widget_edited],
315
+ deleteEvent: () => {},
316
+ })}
317
+ </div>`
318
+ ;
319
+ // document.querySelector('.right_scroll')
320
+ }
321
+ })}"
322
+ >
323
+ 編輯
324
+ </div>
325
+ </div>
326
+ </div>
327
+ <div class="w-100 mt-2 ${module_list.length ? `` : `d-none`}">
328
+ <div
329
+ class="bt_border_editor"
330
+ data-bs-toggle="dropdown"
331
+ aria-haspopup="true"
332
+ aria-expanded="false"
333
+ onclick="${gvc.event(() => {
334
+ GlobalWidget.open(gvc, dd.tag);
335
+ })}"
336
+ >
337
+ 變更樣式
338
+ </div>
339
+ </div>
340
+ </div>
341
+ `;
342
+ } catch (e) {}
361
343
 
362
- return setting_view + `<div class="mb-2"></div>`;
363
- }
344
+ return setting_view + `<div class="mb-2"></div>`;
345
+ }
364
346
 
365
- return {
366
- bind: id,
367
- view: () => {
368
- if (!dd.toggle) {
369
- return ``;
370
- } else if (cvm.loading) {
371
- loadData().then((dd) => {
372
- cvm.html = dd;
373
- cvm.loading = false;
374
- gvc.notifyDataChange(id);
375
- });
376
- return html`
377
- <div class="d-flex w-100 align-items-center justify-content-center p-3">
378
- <div class="spinner-border"></div>
379
- </div>`;
380
- } else {
381
- return cvm.html;
382
- }
383
- },
384
- divCreate: {
385
- class: `row m-0 px-2`,
386
- style: 'cursor:pointer;',
387
- },
388
- };
389
- })}
390
- </div>
391
- `
392
- }, divCreate: {class: ' d-flex align-items-center'}
393
- })
394
- }).join('')
395
- },
396
- };
397
- })()
398
- )}
399
- `
400
- },
401
- divCreate: {
402
- class: `p-2 mx-n2 mt-n2`,
403
- },
404
- };
405
- })].join('');
406
- }
347
+ return {
348
+ bind: id,
349
+ view: () => {
350
+ if (!dd.toggle) {
351
+ return ``;
352
+ } else if (cvm.loading) {
353
+ loadData().then(dd => {
354
+ cvm.html = dd;
355
+ cvm.loading = false;
356
+ gvc.notifyDataChange(id);
357
+ });
358
+ return html` <div class="d-flex w-100 align-items-center justify-content-center p-3">
359
+ <div class="spinner-border"></div>
360
+ </div>`;
361
+ } else {
362
+ return cvm.html;
363
+ }
364
+ },
365
+ divCreate: {
366
+ class: `row m-0 px-2`,
367
+ style: 'cursor:pointer;',
368
+ },
369
+ };
370
+ }),
371
+ ].join('');
372
+ }
407
373
  }