ts-glitter 21.9.4 → 21.9.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 (78) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-blog.js +2 -0
  4. package/lowcode/backend-manager/bg-blog.ts +4 -0
  5. package/lowcode/backend-manager/bg-product.js +3 -3
  6. package/lowcode/backend-manager/bg-product.ts +3 -3
  7. package/lowcode/backend-manager/bg-widget.js +15 -11
  8. package/lowcode/backend-manager/bg-widget.ts +30 -21
  9. package/lowcode/cms-plugin/menus-setting.js +389 -141
  10. package/lowcode/cms-plugin/menus-setting.ts +519 -228
  11. package/lowcode/cms-plugin/shopping-collections.js +5 -38
  12. package/lowcode/cms-plugin/shopping-collections.ts +5 -47
  13. package/lowcode/jspage/function-page/setting_editor.js +0 -27
  14. package/lowcode/jspage/function-page/setting_editor.ts +27 -27
  15. package/lowcode/public-components/footer/footer-01.js +183 -158
  16. package/lowcode/public-components/footer/footer-01.ts +275 -256
  17. package/lowcode/public-components/footer/footer-02.js +83 -63
  18. package/lowcode/public-components/footer/footer-02.ts +160 -145
  19. package/lowcode/public-components/footer/footer-03.js +78 -60
  20. package/lowcode/public-components/footer/footer-03.ts +149 -137
  21. package/lowcode/public-components/headers/sy-02.js +17 -2
  22. package/lowcode/public-components/headers/sy-02.ts +18 -6
  23. package/lowcode/public-components/headers/sy-03.js +18 -4
  24. package/lowcode/public-components/headers/sy-03.ts +26 -15
  25. package/lowcode/public-components/headers/sy-04.js +18 -4
  26. package/lowcode/public-components/headers/sy-04.ts +26 -15
  27. package/lowcode/public-components/headers/sy-05.js +93 -68
  28. package/lowcode/public-components/headers/sy-05.ts +174 -151
  29. package/lowcode/public-components/product/pd-class.js +27 -8
  30. package/lowcode/public-components/product/pd-class.ts +60 -35
  31. package/package.json +1 -1
  32. package/src/api-public/controllers/index.js.map +1 -1
  33. package/src/api-public/controllers/user.js +2 -2
  34. package/src/api-public/controllers/user.js.map +1 -1
  35. package/src/api-public/controllers/user.ts +2 -3
  36. package/src/api-public/services/ai-robot.d.ts +0 -1
  37. package/src/api-public/services/fb-api.d.ts +0 -1
  38. package/src/api-public/services/fb-message.d.ts +0 -1
  39. package/src/api-public/services/fb-service.js +4 -4
  40. package/src/api-public/services/fb-service.js.map +1 -1
  41. package/src/api-public/services/financial-service.d.ts +0 -1
  42. package/src/api-public/services/financial-serviceV2.d.ts +0 -1
  43. package/src/api-public/services/line-message.d.ts +0 -1
  44. package/src/api-public/services/monitor.d.ts +0 -1
  45. package/src/api-public/services/share-permission.d.ts +1 -1
  46. package/src/api-public/services/shopee.d.ts +3 -4
  47. package/src/api-public/services/shopee.js +17 -7
  48. package/src/api-public/services/user.d.ts +0 -1
  49. package/src/api-public/services/user.js +19 -9
  50. package/src/api-public/services/user.js.map +1 -1
  51. package/src/api-public/services/user.ts +2 -2
  52. package/src/api-public/utils/ut-permission.d.ts +0 -1
  53. package/src/config.d.ts +1 -1
  54. package/src/index.js +20 -10
  55. package/src/modules/AWSLib.js +2 -3
  56. package/src/modules/AWSLib.js.map +1 -1
  57. package/src/modules/database.d.ts +1 -1
  58. package/src/modules/redis.d.ts +1 -1
  59. package/src/modules/tool.d.ts +4 -4
  60. package/src/modules/tool.js +1 -2
  61. package/src/modules/tool.js.map +1 -1
  62. package/src/run.js +1 -2
  63. package/src/run.js.map +1 -1
  64. package/src/seo-config.d.ts +0 -1
  65. package/src/seo-config.js +3 -3
  66. package/src/seo-config.js.map +1 -1
  67. package/src/services/app.d.ts +0 -1
  68. package/src/services/app.js +17 -7
  69. package/src/services/app.js.map +1 -1
  70. package/src/services/backend-service.js +17 -7
  71. package/src/services/backend-service.js.map +1 -1
  72. package/src/services/create-instance.js +3 -4
  73. package/src/services/create-instance.js.map +1 -1
  74. package/src/services/saas-table-check.js +2 -2
  75. package/src/services/seo.d.ts +0 -1
  76. package/src/services/template.d.ts +0 -1
  77. package/src/services/tool.js +2 -3
  78. package/src/services/tool.js.map +1 -1
@@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { BgWidget } from '../backend-manager/bg-widget.js';
11
11
  import { ApiUser } from '../glitter-base/route/user.js';
12
- import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
13
12
  import { LanguageBackend } from './language-backend.js';
14
13
  import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
15
14
  const html = String.raw;
@@ -17,18 +16,17 @@ export class MenusSetting {
17
16
  static main(gvc, widget, def) {
18
17
  const html = String.raw;
19
18
  const glitter = gvc.glitter;
19
+ const dialog = new ShareDialog(glitter);
20
20
  const vm = {
21
21
  type: 'list',
22
22
  index: 0,
23
23
  dataList: undefined,
24
24
  query: '',
25
25
  tab: def || 'menu',
26
- select: { title: '', tag: '' }
26
+ select: { title: '', tag: '' },
27
27
  };
28
- const filterID = gvc.glitter.getUUID();
29
- let vmi = undefined;
30
28
  function getDatalist() {
31
- return vm.dataList.map((dd, index) => {
29
+ return vm.dataList.map((dd) => {
32
30
  return [
33
31
  {
34
32
  key: '選單名稱',
@@ -39,9 +37,6 @@ export class MenusSetting {
39
37
  }
40
38
  return gvc.bindView(() => {
41
39
  const id = glitter.getUUID();
42
- function refresh() {
43
- gvc.notifyDataChange(id);
44
- }
45
40
  return {
46
41
  bind: id,
47
42
  dataList: [{ obj: vm, key: 'type' }],
@@ -56,7 +51,6 @@ export class MenusSetting {
56
51
  function next() {
57
52
  var _a;
58
53
  return __awaiter(this, void 0, void 0, function* () {
59
- const dialog = new ShareDialog(gvc.glitter);
60
54
  dialog.dataLoading({ visible: true });
61
55
  const tab = vm.tab === 'menu' ? `頁首選單` : `頁腳選單`;
62
56
  let menu_all = (yield ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
@@ -64,14 +58,14 @@ export class MenusSetting {
64
58
  menu_all.list = [
65
59
  {
66
60
  tag: gvc.glitter.getUUID(),
67
- title: title || [tab, `${(menu_all.list.length + 1)}`].join(''),
68
- tab: vm.tab === 'menu' ? 'menu-setting' : 'footer-setting'
69
- }
61
+ title: title || [tab, `${menu_all.list.length + 1}`].join(''),
62
+ tab: vm.tab === 'menu' ? 'menu-setting' : 'footer-setting',
63
+ },
70
64
  ].concat(menu_all.list);
71
65
  yield ApiUser.setPublicConfig({
72
66
  key: 'menu-setting-list',
73
67
  value: menu_all,
74
- user_id: 'manager'
68
+ user_id: 'manager',
75
69
  });
76
70
  dialog.dataLoading({ visible: false });
77
71
  gvc.notifyDataChange(id);
@@ -84,13 +78,13 @@ export class MenusSetting {
84
78
  return [
85
79
  BgWidget.editeInput({
86
80
  title: '',
87
- callback: (text) => {
81
+ callback: text => {
88
82
  title = text;
89
83
  },
90
84
  default: title,
91
85
  gvc: gvc,
92
- placeHolder: '請輸入選單名稱'
93
- })
86
+ placeHolder: '請輸入選單名稱',
87
+ }),
94
88
  ].join('');
95
89
  },
96
90
  footer_html: (gvc) => {
@@ -99,17 +93,19 @@ export class MenusSetting {
99
93
  gvc.closeDialog();
100
94
  }), '儲存');
101
95
  },
102
- width: 300
96
+ width: 300,
103
97
  });
104
98
  })))}
105
99
  </div>
106
- ${def ? `` : BgWidget.tab([
107
- { title: '主選單', key: 'menu' },
108
- { title: '頁腳', key: 'footer' }
109
- ], gvc, vm.tab, (text) => {
110
- vm.tab = text;
111
- gvc.notifyDataChange(id);
112
- }, `${document.body.clientWidth < 800 ? `` : `margin-bottom:0px !important;`}
100
+ ${def
101
+ ? ''
102
+ : BgWidget.tab([
103
+ { title: '主選單', key: 'menu' },
104
+ { title: '頁腳', key: 'footer' },
105
+ ], gvc, vm.tab, text => {
106
+ vm.tab = text;
107
+ gvc.notifyDataChange(id);
108
+ }, `${document.body.clientWidth < 800 ? '' : `margin-bottom:0px !important;`}
113
109
  `)}
114
110
  ${BgWidget.container(BgWidget.mainCard(BgWidget.tableV3({
115
111
  gvc: gvc,
@@ -119,12 +115,16 @@ export class MenusSetting {
119
115
  let menu_all = (yield ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
120
116
  menu_all.list = (_a = menu_all.list) !== null && _a !== void 0 ? _a : [];
121
117
  vm.dataList = [
122
- { tag: tag, title: `
123
- <div> ${vm.tab === 'menu' ? `頁首選單` : `頁腳選單`} <span style="font-size:12px;color:#36B;">系統預設</span></div>
124
- ` },
125
- ...menu_all.list.filter((d1) => {
126
- return d1.tab === tag;
127
- })
118
+ {
119
+ tag: tag,
120
+ title: html `
121
+ <div>
122
+ ${vm.tab === 'menu' ? '頁首選單' : '頁腳選單'}
123
+ <span style="font-size: 12px; color: #36B;">系統預設</span>
124
+ </div>
125
+ `,
126
+ },
127
+ ...menu_all.list.filter((d1) => d1.tab === tag),
128
128
  ];
129
129
  vmi.pageSize = 1;
130
130
  vmi.originalData = vm.dataList;
@@ -132,7 +132,7 @@ export class MenusSetting {
132
132
  vmi.loading = false;
133
133
  vmi.callback();
134
134
  }),
135
- rowClick: (data, index) => {
135
+ rowClick: (_, index) => {
136
136
  vm.select = vm.dataList[index];
137
137
  vm.type = 'replace';
138
138
  },
@@ -163,8 +163,8 @@ export class MenusSetting {
163
163
  }
164
164
  },
165
165
  divCreate: {
166
- class: `w-100 `,
167
- style: `max-width:100%;`,
166
+ class: 'w-100',
167
+ style: 'max-width: 100%;',
168
168
  },
169
169
  };
170
170
  });
@@ -179,8 +179,10 @@ export class MenusSetting {
179
179
  },
180
180
  selected: false,
181
181
  loading: true,
182
- language: window.parent.store_info.language_setting.def
182
+ language: window.parent.store_info.language_setting.def,
183
183
  };
184
+ const gvc = cf.gvc;
185
+ const dialog = new ShareDialog(gvc.glitter);
184
186
  ApiUser.getPublicConfig(cf.key, 'manager').then((data) => {
185
187
  if (data.response.value) {
186
188
  vm.link = data.response.value;
@@ -200,16 +202,17 @@ export class MenusSetting {
200
202
  vm.link[a] = (_a = vm.link[a]) !== null && _a !== void 0 ? _a : [];
201
203
  clearNoNeedData(vm.link[a]);
202
204
  }
203
- const dialog = new ShareDialog(gvc.glitter);
204
205
  dialog.dataLoading({ visible: true });
205
206
  let menu_all = (yield ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
206
207
  menu_all.list = (_b = menu_all.list) !== null && _b !== void 0 ? _b : [];
207
- const find_ = menu_all.list.find((d1) => { return d1.tag === cf.key; });
208
+ const find_ = menu_all.list.find((d1) => {
209
+ return d1.tag === cf.key;
210
+ });
208
211
  find_ && (find_.title = cf.title);
209
212
  yield ApiUser.setPublicConfig({
210
213
  key: 'menu-setting-list',
211
214
  value: menu_all,
212
- user_id: 'manager'
215
+ user_id: 'manager',
213
216
  });
214
217
  ApiUser.setPublicConfig({
215
218
  key: cf.key,
@@ -258,7 +261,6 @@ export class MenusSetting {
258
261
  return !d1.selected;
259
262
  });
260
263
  }
261
- const gvc = cf.gvc;
262
264
  function refresh() {
263
265
  gvc.notifyDataChange(vm.id);
264
266
  }
@@ -273,8 +275,8 @@ export class MenusSetting {
273
275
  ${BgWidget.goBack(cf.gvc.event(() => {
274
276
  cf.goBack();
275
277
  }))}${BgWidget.title((_b = cf.title) !== null && _b !== void 0 ? _b : '選單設定')}
276
- <div class="mx-2 ${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key) ? `d-none` : ``}">
277
- ${BgWidget.grayButton('重新命名', gvc.event(() => {
278
+ <div class="mx-2 ${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key) ? 'd-none' : ''}">
279
+ ${BgWidget.grayButton('重新命名', gvc.event(() => {
278
280
  BgWidget.settingDialog({
279
281
  gvc: gvc,
280
282
  title: '重新命名',
@@ -282,13 +284,13 @@ export class MenusSetting {
282
284
  return [
283
285
  BgWidget.editeInput({
284
286
  title: '',
285
- callback: (text) => {
287
+ callback: text => {
286
288
  cf.title = text;
287
289
  },
288
290
  default: cf.title,
289
291
  gvc: gvc,
290
- placeHolder: ''
291
- })
292
+ placeHolder: '',
293
+ }),
292
294
  ].join('');
293
295
  },
294
296
  footer_html: (gvc) => {
@@ -297,13 +299,11 @@ export class MenusSetting {
297
299
  refresh();
298
300
  }), '儲存');
299
301
  },
300
- width: 500
302
+ width: 500,
301
303
  });
302
304
  }))}
303
- </div>
304
-
305
+ </div>
305
306
  <div class="flex-fill"></div>
306
-
307
307
  ${LanguageBackend.switchBtn({
308
308
  gvc: gvc,
309
309
  language: vm.language,
@@ -321,19 +321,13 @@ export class MenusSetting {
321
321
  style="width: 100%; left: 0px; top: 0px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; display: inline-flex"
322
322
  >
323
323
  <div
324
- class="w-100 ${getSelectCount({
325
- items: link,
326
- }) > 0
327
- ? ``
328
- : `d-none`}"
324
+ class="w-100 ${getSelectCount({ items: link }) > 0 ? '' : 'd-none'}"
329
325
  style="height: 40px; padding: 12px 18px;background: #F7F7F7; border-radius: 10px; justify-content: flex-end; align-items: center; gap: 8px; display: inline-flex"
330
326
  >
331
327
  <div
332
328
  style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
333
329
  >
334
- 已選取${getSelectCount({
335
- items: link,
336
- })}項
330
+ 已選取${getSelectCount({ items: link })}項
337
331
  </div>
338
332
  <div
339
333
  style="cursor:pointer;padding: 4px 14px;background: white; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.10); border-radius: 20px; border: 1px #DDDDDD solid; justify-content: flex-start; align-items: flex-start; gap: 10px; display: flex"
@@ -356,26 +350,18 @@ export class MenusSetting {
356
350
  <div
357
351
  class="${allSelect({
358
352
  items: link,
359
- selected: !link.find(dd => {
360
- return !dd.selected;
361
- }),
353
+ selected: !link.find(dd => !dd.selected),
362
354
  })
363
- ? `fa-solid fa-square-check`
364
- : `fa-regular fa-square`}"
365
- style="color:#393939;width: 16px; height: 16px;cursor: pointer;"
355
+ ? 'fa-solid fa-square-check'
356
+ : 'fa-regular fa-square'}"
357
+ style="color: #393939; width: 16px; height: 16px; cursor: pointer;"
366
358
  onclick="${cf.gvc.event((e, event) => {
367
359
  event.stopPropagation();
368
- if (link.find(dd => {
369
- return !dd.selected;
370
- })) {
371
- selectAll({
372
- items: link,
373
- });
360
+ if (link.find(dd => !dd.selected)) {
361
+ selectAll({ items: link });
374
362
  }
375
363
  else {
376
- clearAll({
377
- items: link,
378
- });
364
+ clearAll({ items: link });
379
365
  }
380
366
  gvc.notifyDataChange(vm.id);
381
367
  })}"
@@ -400,7 +386,7 @@ export class MenusSetting {
400
386
  .map((dd, index) => {
401
387
  const list = html `
402
388
  <div
403
- class=" w-100 "
389
+ class="w-100"
404
390
  style="width: 100%; justify-content: flex-start; align-items: center; gap: 5px; display: inline-flex;cursor: pointer;"
405
391
  onclick="${cf.gvc.event(() => {
406
392
  if (dd.items && dd.items.length > 0) {
@@ -414,7 +400,7 @@ export class MenusSetting {
414
400
  ? `fa-solid fa-square-check`
415
401
  : `fa-regular fa-square`}"
416
402
  style="color:#393939;width: 16px; height: 16px;"
417
- onclick="${cf.gvc.event((e, event) => {
403
+ onclick="${cf.gvc.event((_, event) => {
418
404
  event.stopPropagation();
419
405
  dd.selected = !dd.selected;
420
406
  if (dd.selected) {
@@ -447,9 +433,9 @@ export class MenusSetting {
447
433
  </div>
448
434
  ${dd.items && dd.items.length > 0
449
435
  ? !dd.toggle
450
- ? `<i class="fa-solid fa-angle-down color39"></i>`
451
- : `<i class="fa-solid fa-angle-up color39"></i>`
452
- : ``}
436
+ ? html `<i class="fa-solid fa-angle-down color39"></i>`
437
+ : html `<i class="fa-solid fa-angle-up color39"></i>`
438
+ : ''}
453
439
  </div>
454
440
  <div
455
441
  style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex;white-space: normal;word-break: break-all;"
@@ -469,11 +455,12 @@ export class MenusSetting {
469
455
  <div class="flex-fill"></div>
470
456
  <div
471
457
  class="child me-2"
472
- onclick="${cf.gvc.event((e, event) => {
458
+ onclick="${cf.gvc.event((_, event) => {
473
459
  event.stopPropagation();
474
460
  MenusSetting.editEvent({
475
461
  link: '',
476
462
  title: '',
463
+ visible_type: 'all',
477
464
  items: [],
478
465
  }, data => {
479
466
  dd.items = dd.items || [];
@@ -486,7 +473,7 @@ export class MenusSetting {
486
473
  </div>
487
474
  <div
488
475
  class="child"
489
- onclick="${cf.gvc.event((e, event) => {
476
+ onclick="${cf.gvc.event((_, event) => {
490
477
  event.stopPropagation();
491
478
  MenusSetting.editEvent(dd, data => {
492
479
  array[index] = data;
@@ -501,13 +488,13 @@ export class MenusSetting {
501
488
  ${dd.items && dd.items.length > 0
502
489
  ? html `
503
490
  <div
504
- class=" w-100 ${dd.toggle ? `` : `d-none`}"
491
+ class=" w-100 ${dd.toggle ? '' : 'd-none'}"
505
492
  style="padding-left: 35px;"
506
493
  >
507
494
  ${renderItems(dd.items)}
508
495
  </div>
509
496
  `
510
- : ``}
497
+ : ''}
511
498
  `;
512
499
  return html `<li class="w-100 ">${list}</li>`;
513
500
  })
@@ -515,8 +502,8 @@ export class MenusSetting {
515
502
  },
516
503
  divCreate: {
517
504
  elem: 'ul',
518
- class: `w-100 my-2`,
519
- style: `display:flex;flex-direction: column;gap:18px;`,
505
+ class: 'w-100 my-2',
506
+ style: 'display:flex; flex-direction: column; gap: 18px;',
520
507
  },
521
508
  onCreate: () => {
522
509
  gvc.glitter.addMtScript([
@@ -528,11 +515,11 @@ export class MenusSetting {
528
515
  if (window.Sortable) {
529
516
  try {
530
517
  gvc.addStyle(`
531
- ul {
532
- list-style: none;
533
- padding: 0;
534
- }
535
- `);
518
+ ul {
519
+ list-style: none;
520
+ padding: 0;
521
+ }
522
+ `);
536
523
  function swapArr(arr, index1, index2) {
537
524
  const data = arr[index1];
538
525
  arr.splice(index1, 1);
@@ -566,6 +553,7 @@ export class MenusSetting {
566
553
  MenusSetting.editEvent({
567
554
  link: '',
568
555
  title: '',
556
+ visible_type: 'all',
569
557
  items: [],
570
558
  }, data => {
571
559
  array.push(data);
@@ -592,26 +580,28 @@ export class MenusSetting {
592
580
  </div>
593
581
  </div>`)}
594
582
  <div class="update-bar-container">
595
- ${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key) ? `` : BgWidget.danger(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
596
- const dialog = new ShareDialog(gvc.glitter);
597
- dialog.checkYesOrNot({
598
- text: '是否確認刪除?',
599
- callback: (response) => __awaiter(this, void 0, void 0, function* () {
600
- if (response) {
601
- dialog.dataLoading({ visible: true });
602
- let menu_all = (yield ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
603
- menu_all.list = menu_all.list.filter((d1) => d1.tag != cf.key);
604
- yield ApiUser.setPublicConfig({
605
- key: 'menu-setting-list',
606
- value: menu_all,
607
- user_id: 'manager'
608
- });
609
- dialog.dataLoading({ visible: false });
610
- cf.goBack();
611
- }
612
- })
613
- });
614
- })))}
583
+ ${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key)
584
+ ? ''
585
+ : BgWidget.danger(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
586
+ dialog.checkYesOrNot({
587
+ text: '是否確認刪除?',
588
+ callback: (response) => __awaiter(this, void 0, void 0, function* () {
589
+ if (response) {
590
+ dialog.dataLoading({ visible: true });
591
+ let menu_all = (yield ApiUser.getPublicConfig('menu-setting-list', 'manager')).response
592
+ .value;
593
+ menu_all.list = menu_all.list.filter((d1) => d1.tag != cf.key);
594
+ yield ApiUser.setPublicConfig({
595
+ key: 'menu-setting-list',
596
+ value: menu_all,
597
+ user_id: 'manager',
598
+ });
599
+ dialog.dataLoading({ visible: false });
600
+ cf.goBack();
601
+ }
602
+ }),
603
+ });
604
+ })))}
615
605
  ${BgWidget.cancel(gvc.event(() => {
616
606
  cf.goBack();
617
607
  }))}
@@ -628,7 +618,226 @@ export class MenusSetting {
628
618
  }
629
619
  static editEvent(data, save) {
630
620
  const gvc = window.parent.glitter.pageConfig[0].gvc;
631
- const rightMenu = window.parent.glitter.share.NormalPageEditor;
621
+ const glitter = gvc.glitter;
622
+ const rightMenu = glitter.share.NormalPageEditor;
623
+ const vm = {
624
+ search: '',
625
+ levelList: undefined,
626
+ userList: undefined,
627
+ visibleDataList: undefined,
628
+ cloneData: structuredClone(data),
629
+ show: false,
630
+ dataLoading: true,
631
+ };
632
+ const ids = {
633
+ main: glitter.getUUID(),
634
+ visibleSelect: glitter.getUUID(),
635
+ dataArray: glitter.getUUID(),
636
+ };
637
+ const setVisibleSelect = () => {
638
+ return gvc.bindView({
639
+ bind: ids.visibleSelect,
640
+ view: () => {
641
+ var _a;
642
+ return html `
643
+ <div class="tx_normal fw-normal">選單可見對象</div>
644
+ <div class="d-flex align-items-center" style="margin-top: 8px; gap: 10px;">
645
+ ${[
646
+ BgWidget.select({
647
+ gvc,
648
+ callback: value => {
649
+ data.visible_type = value;
650
+ data.visible_data_array = [];
651
+ vm.visibleDataList = [];
652
+ vm.show = false;
653
+ vm.dataLoading = true;
654
+ gvc.notifyDataChange([ids.visibleSelect, ids.dataArray]);
655
+ },
656
+ default: (_a = data.visible_type) !== null && _a !== void 0 ? _a : 'all',
657
+ options: [
658
+ { key: 'all', value: '所有顧客' },
659
+ { key: 'loggedIn', value: '已登入顧客' },
660
+ { key: 'user', value: '特定顧客' },
661
+ { key: 'level', value: '特定會員等級' },
662
+ ],
663
+ }),
664
+ ['user', 'level'].includes(data.visible_type)
665
+ ? BgWidget.grayButton('選擇', gvc.event(() => {
666
+ if (!vm.show) {
667
+ vm.show = true;
668
+ gvc.notifyDataChange(ids.dataArray);
669
+ }
670
+ }))
671
+ : '',
672
+ ].join('')}
673
+ </div>
674
+ `;
675
+ },
676
+ divCreate: {
677
+ style: 'margin-top: 8px;',
678
+ },
679
+ });
680
+ };
681
+ const optionView = () => {
682
+ const id = glitter.getUUID();
683
+ return gvc.bindView({
684
+ bind: id,
685
+ view: () => {
686
+ var _a;
687
+ function includesItem(item) {
688
+ var _a, _b;
689
+ const text = vm.search.toLowerCase();
690
+ return ((_a = item.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(text)) || ((_b = item.note) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(text));
691
+ }
692
+ const targetList = data.visible_type === 'user' ? vm.userList : vm.levelList;
693
+ if (!targetList) {
694
+ return BgWidget.spinner({ container: { class: 'w-100' } });
695
+ }
696
+ const filterList = targetList.filter((item) => includesItem(item));
697
+ const filterListIdArray = new Set(filterList.map((item) => item.key));
698
+ return BgWidget.multiCheckboxContainer(gvc, filterList, (_a = data.visible_data_array) !== null && _a !== void 0 ? _a : [], items => {
699
+ var _a;
700
+ data.visible_data_array = [
701
+ ...new Set(((_a = data.visible_data_array) !== null && _a !== void 0 ? _a : [])
702
+ .filter(item => {
703
+ return !filterListIdArray.has(item);
704
+ })
705
+ .concat(items)),
706
+ ];
707
+ });
708
+ },
709
+ divCreate: {
710
+ style: 'max-height: 300px; overflow-y: auto; width: 100%;',
711
+ },
712
+ onCreate: () => {
713
+ if (vm.userList === undefined) {
714
+ this.getUserOption().then(data => {
715
+ vm.userList = data;
716
+ gvc.notifyDataChange(id);
717
+ });
718
+ }
719
+ if (vm.levelList === undefined) {
720
+ this.getLevelOption().then(data => {
721
+ vm.levelList = data;
722
+ gvc.notifyDataChange(id);
723
+ });
724
+ }
725
+ },
726
+ });
727
+ };
728
+ const setVisibleDataArray = () => {
729
+ return gvc.bindView({
730
+ bind: ids.dataArray,
731
+ view: () => {
732
+ if (data.visible_type === 'user' || data.visible_type === 'level') {
733
+ if (!vm.show) {
734
+ if (vm.dataLoading) {
735
+ return BgWidget.spinner({ container: { class: 'w-100' } });
736
+ }
737
+ return html `
738
+ <div class="mt-2">${data.visible_type === 'user' ? '顧客名稱' : '會員等級'}</div>
739
+ ${BgWidget.horizontalLine()}
740
+ <div class="d-flex flex-column gap-1">
741
+ ${Array.isArray(vm.visibleDataList)
742
+ ? data.visible_type === 'user'
743
+ ? vm.visibleDataList
744
+ .map(item => {
745
+ return html `<div class="d-flex gap-1">
746
+ <div>${item.userData.name}</div>
747
+ ${BgWidget.grayNote(item.account)}
748
+ </div>`;
749
+ })
750
+ .join('')
751
+ : vm.visibleDataList
752
+ .map(item => {
753
+ return html `<div class="d-flex gap-1">
754
+ <div>${item.title.replace('會員等級 - ', '')}</div>
755
+ </div>`;
756
+ })
757
+ .join('')
758
+ : ''}
759
+ </div>
760
+ `;
761
+ }
762
+ return BgWidget.mainCard([
763
+ html `<div
764
+ class="d-flex align-items-center cursor_pointer"
765
+ onclick="${gvc.event(() => {
766
+ vm.show = false;
767
+ vm.dataLoading = true;
768
+ gvc.notifyDataChange(ids.dataArray);
769
+ })}"
770
+ >
771
+ ${BgWidget.goBack('')}
772
+ <span>返回</span>
773
+ </div>`,
774
+ BgWidget.searchPlace(gvc.event(e => {
775
+ vm.search = e.value;
776
+ gvc.notifyDataChange(ids.dataArray);
777
+ }), vm.search || '', '搜尋', undefined, '0', 'width: 100%;'),
778
+ optionView(),
779
+ ].join(''), 'd-flex flex-column align-items-start');
780
+ }
781
+ return '';
782
+ },
783
+ divCreate: {
784
+ class: 'mt-1 p-1',
785
+ },
786
+ onCreate: () => {
787
+ if (vm.dataLoading && (data.visible_type === 'user' || data.visible_type === 'level')) {
788
+ Promise.all([
789
+ Array.isArray(data.visible_data_array) && data.visible_data_array.length > 0
790
+ ? data.visible_type === 'user'
791
+ ? this.getUserList(data.visible_data_array)
792
+ : this.getLevelList(data.visible_data_array)
793
+ : [],
794
+ ]).then(([visibleDataList]) => {
795
+ vm.visibleDataList = visibleDataList;
796
+ vm.dataLoading = false;
797
+ gvc.notifyDataChange(ids.dataArray);
798
+ });
799
+ }
800
+ },
801
+ });
802
+ };
803
+ const backToDefault = () => {
804
+ return html `<div
805
+ class="position-absolute bottom-0 left-0 w-100 d-flex align-items-center justify-content-end p-3 border-top pe-4"
806
+ style="gap: 10px; background-color: #fff"
807
+ >
808
+ ${BgWidget.cancel(gvc.event(() => {
809
+ data = vm.cloneData;
810
+ vm.show = false;
811
+ vm.dataLoading = true;
812
+ gvc.notifyDataChange(ids.main);
813
+ }), '回到預設值')}
814
+ </div>`;
815
+ };
816
+ const view = [
817
+ BgWidget.editeInput({
818
+ gvc: gvc,
819
+ title: '選單名稱wwww',
820
+ default: data.title || '',
821
+ placeHolder: '請輸入選單名稱',
822
+ callback: text => {
823
+ data.title = text;
824
+ },
825
+ }),
826
+ BgWidget.linkList({
827
+ gvc: gvc,
828
+ title: '連結位置',
829
+ default: data.link || '',
830
+ placeHolder: '選擇或貼上外部連結',
831
+ callback: text => {
832
+ data.link = text;
833
+ },
834
+ }),
835
+ setVisibleSelect(),
836
+ setVisibleDataArray(),
837
+ backToDefault(),
838
+ ]
839
+ .map(h => html `<div class="w-100">${h}</div>`)
840
+ .join('');
632
841
  rightMenu.closeEvent = () => {
633
842
  if (data.title.length > 0 || data.link.length > 0) {
634
843
  save(data);
@@ -637,39 +846,10 @@ export class MenusSetting {
637
846
  rightMenu.toggle({
638
847
  visible: true,
639
848
  title: '新增選單',
640
- view: [
641
- gvc.bindView(() => {
642
- const id = gvc.glitter.getUUID();
643
- return {
644
- bind: id,
645
- view: () => {
646
- return [
647
- EditorElem.editeInput({
648
- gvc: gvc,
649
- title: '選單名稱',
650
- default: data.title || '',
651
- placeHolder: '請輸入選單名稱',
652
- callback: text => {
653
- data.title = text;
654
- },
655
- }),
656
- BgWidget.linkList({
657
- gvc: gvc,
658
- title: '',
659
- default: data.link || '',
660
- placeHolder: '選擇或貼上外部連結',
661
- callback: text => {
662
- data.link = text;
663
- },
664
- }),
665
- ].join('');
666
- },
667
- divCreate: {
668
- style: `padding:20px;`,
669
- },
670
- };
671
- }),
672
- ].join(''),
849
+ view: gvc.bindView({
850
+ bind: ids.main,
851
+ view: () => html `<div class="d-flex flex-column p-3">${view}</div>`,
852
+ }),
673
853
  right: true,
674
854
  });
675
855
  }
@@ -712,7 +892,7 @@ export class MenusSetting {
712
892
  ].join('');
713
893
  },
714
894
  divCreate: {
715
- style: `padding:20px;`,
895
+ style: 'padding: 20px;',
716
896
  },
717
897
  };
718
898
  }),
@@ -720,5 +900,73 @@ export class MenusSetting {
720
900
  right: true,
721
901
  });
722
902
  }
903
+ static getUserList(visible_data_array) {
904
+ return __awaiter(this, void 0, void 0, function* () {
905
+ return yield ApiUser.getUserList({
906
+ page: 0,
907
+ limit: 15,
908
+ only_id: true,
909
+ id: visible_data_array.join(','),
910
+ }).then(dd => {
911
+ try {
912
+ return dd.response.data;
913
+ }
914
+ catch (error) {
915
+ return [];
916
+ }
917
+ });
918
+ });
919
+ }
920
+ static getUserOption() {
921
+ return __awaiter(this, void 0, void 0, function* () {
922
+ return yield ApiUser.getUserList({
923
+ page: 0,
924
+ limit: 15,
925
+ only_id: true,
926
+ }).then(dd => {
927
+ var _a;
928
+ try {
929
+ return ((_a = dd.response.data.map((item) => {
930
+ var _a;
931
+ return {
932
+ key: item.userID,
933
+ name: (_a = item.userData.name) !== null && _a !== void 0 ? _a : '(尚無姓名)',
934
+ note: item.userData.email,
935
+ };
936
+ })) !== null && _a !== void 0 ? _a : []);
937
+ }
938
+ catch (error) {
939
+ return [];
940
+ }
941
+ });
942
+ });
943
+ }
944
+ static getLevelList(visible_data_array) {
945
+ return __awaiter(this, void 0, void 0, function* () {
946
+ return yield ApiUser.getUserGroupList('level').then(r => {
947
+ var _a;
948
+ if (r.result && Array.isArray((_a = r.response) === null || _a === void 0 ? void 0 : _a.data)) {
949
+ return r.response.data.filter((d) => {
950
+ return visible_data_array === null || visible_data_array === void 0 ? void 0 : visible_data_array.includes(d.tag === '' ? 'default' : d.tag);
951
+ });
952
+ }
953
+ return [];
954
+ });
955
+ });
956
+ }
957
+ static getLevelOption() {
958
+ return __awaiter(this, void 0, void 0, function* () {
959
+ return yield ApiUser.getUserGroupList('level').then(r => {
960
+ var _a;
961
+ if (r.result && Array.isArray((_a = r.response) === null || _a === void 0 ? void 0 : _a.data)) {
962
+ return r.response.data.map((d) => ({
963
+ key: d.tag || 'default',
964
+ name: d.title.replace('會員等級 - ', ''),
965
+ }));
966
+ }
967
+ return [];
968
+ });
969
+ });
970
+ }
723
971
  }
724
972
  window.glitter.setModule(import.meta.url, MenusSetting);