ts-glitter 21.3.8 → 21.4.0

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 (134) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-line.js +12 -1
  4. package/lowcode/backend-manager/bg-line.ts +16 -1
  5. package/lowcode/backend-manager/bg-notify.js +13 -2
  6. package/lowcode/backend-manager/bg-notify.ts +17 -2
  7. package/lowcode/backend-manager/bg-product.js +81 -30
  8. package/lowcode/backend-manager/bg-product.ts +95 -34
  9. package/lowcode/backend-manager/bg-recommend.js +109 -141
  10. package/lowcode/backend-manager/bg-recommend.ts +122 -144
  11. package/lowcode/backend-manager/bg-sns.js +14 -4
  12. package/lowcode/backend-manager/bg-sns.ts +18 -4
  13. package/lowcode/backend-manager/bg-widget.js +176 -12
  14. package/lowcode/backend-manager/bg-widget.ts +198 -13
  15. package/lowcode/cms-plugin/auto-fcm-advertise.js +13 -2
  16. package/lowcode/cms-plugin/auto-fcm-advertise.ts +16 -2
  17. package/lowcode/cms-plugin/auto-fcm-history.js +13 -2
  18. package/lowcode/cms-plugin/auto-fcm-history.ts +16 -2
  19. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  20. package/lowcode/cms-plugin/module/order-excel.js +18 -2
  21. package/lowcode/cms-plugin/module/order-excel.ts +20 -9
  22. package/lowcode/cms-plugin/module/product-setting.js +2 -1
  23. package/lowcode/cms-plugin/module/product-setting.ts +2 -1
  24. package/lowcode/cms-plugin/module/user-excel.js +1 -1
  25. package/lowcode/cms-plugin/module/user-excel.ts +2 -2
  26. package/lowcode/cms-plugin/pos-pages/payment-page.js +3 -2
  27. package/lowcode/cms-plugin/pos-pages/payment-page.ts +11 -5
  28. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -1
  29. package/lowcode/cms-plugin/shopping-allowance-manager.js +3 -2
  30. package/lowcode/cms-plugin/shopping-allowance-manager.ts +3 -2
  31. package/lowcode/cms-plugin/shopping-discount-setting.js +2 -0
  32. package/lowcode/cms-plugin/shopping-discount-setting.ts +2 -0
  33. package/lowcode/cms-plugin/shopping-invoice-manager.js +7 -4
  34. package/lowcode/cms-plugin/shopping-invoice-manager.ts +12 -11
  35. package/lowcode/cms-plugin/shopping-order-manager.js +21 -4
  36. package/lowcode/cms-plugin/shopping-order-manager.ts +30 -11
  37. package/lowcode/cms-plugin/shopping-product-setting.js +45 -41
  38. package/lowcode/cms-plugin/shopping-product-setting.ts +55 -48
  39. package/lowcode/cms-plugin/shopping-rebate.js +52 -46
  40. package/lowcode/cms-plugin/shopping-rebate.ts +402 -396
  41. package/lowcode/cms-plugin/shopping-setting-advance.js +6 -6
  42. package/lowcode/cms-plugin/shopping-setting-advance.ts +7 -7
  43. package/lowcode/cms-plugin/shopping-setting-basic.js +44 -0
  44. package/lowcode/cms-plugin/shopping-setting-basic.ts +63 -1
  45. package/lowcode/cms-plugin/shopping-setting-stock-log.js +57 -0
  46. package/lowcode/cms-plugin/shopping-setting-stock-log.ts +101 -0
  47. package/lowcode/cms-plugin/user-list.js +10 -9
  48. package/lowcode/cms-plugin/user-list.ts +11 -8
  49. package/lowcode/css/editor.css +1 -1
  50. package/lowcode/form-view/editor/image-selector.js +83 -82
  51. package/lowcode/form-view/editor/image-selector.ts +115 -107
  52. package/lowcode/glitter-base/route/user.js +27 -34
  53. package/lowcode/glitter-base/route/user.ts +31 -40
  54. package/lowcode/glitterBundle/dialog/ShareDialog.js +1 -0
  55. package/lowcode/glitterBundle/dialog/ShareDialog.ts +2 -0
  56. package/lowcode/glitterBundle/dialog/dialog.js +2 -2
  57. package/lowcode/glitterBundle/dialog/dialog.ts +2 -2
  58. package/lowcode/glitterBundle/plugins/editor-elem.js +5 -11
  59. package/lowcode/glitterBundle/plugins/editor-elem.ts +11 -11
  60. package/lowcode/modules/image-library.js +836 -486
  61. package/lowcode/modules/image-library.ts +1760 -1418
  62. package/lowcode/modules/tool.js +10 -9
  63. package/lowcode/modules/tool.ts +11 -10
  64. package/lowcode/public-components/checkout/index.js +4 -2
  65. package/lowcode/public-components/checkout/index.ts +5 -3
  66. package/lowcode/public-models/product.ts +13 -0
  67. package/nxv0ptv53w.json +1 -0
  68. package/package.json +1 -1
  69. package/src/api-public/controllers/shop.js +2 -2
  70. package/src/api-public/controllers/shop.js.map +1 -1
  71. package/src/api-public/controllers/shop.ts +5 -2
  72. package/src/api-public/controllers/stock.js +1 -1
  73. package/src/api-public/controllers/stock.js.map +1 -1
  74. package/src/api-public/controllers/stock.ts +93 -81
  75. package/src/api-public/models/glitter-finance.js +2 -1
  76. package/src/api-public/models/glitter-finance.js.map +1 -1
  77. package/src/api-public/services/checkout-event.js +1 -0
  78. package/src/api-public/services/checkout-event.js.map +1 -1
  79. package/src/api-public/services/checkout-event.ts +2 -2
  80. package/src/api-public/services/data-analyze.d.ts +1 -1
  81. package/src/api-public/services/diff-record.d.ts +25 -0
  82. package/src/api-public/services/diff-record.js +158 -0
  83. package/src/api-public/services/diff-record.js.map +1 -0
  84. package/src/api-public/services/diff-record.ts +217 -0
  85. package/src/api-public/services/ezpay/tool.d.ts +1 -0
  86. package/src/api-public/services/financial-serviceV2.js +7 -17
  87. package/src/api-public/services/financial-serviceV2.js.map +1 -1
  88. package/src/api-public/services/public-table-check.js +25 -7
  89. package/src/api-public/services/public-table-check.js.map +1 -1
  90. package/src/api-public/services/public-table-check.ts +53 -31
  91. package/src/api-public/services/shopping.d.ts +2 -12
  92. package/src/api-public/services/shopping.js +16 -7
  93. package/src/api-public/services/shopping.js.map +1 -1
  94. package/src/api-public/services/shopping.ts +33 -7
  95. package/src/api-public/services/stock.d.ts +1 -1
  96. package/src/api-public/services/stock.js +19 -17
  97. package/src/api-public/services/stock.js.map +1 -1
  98. package/src/api-public/services/stock.ts +711 -696
  99. package/src/api-public/services/user.d.ts +1 -1
  100. package/src/api-public/services/user.js +25 -25
  101. package/src/api-public/services/user.js.map +1 -1
  102. package/src/api-public/services/user.ts +34 -27
  103. package/src/app-project/serverless/src/index.js +7 -17
  104. package/src/app-project/serverless/src/index.js.map +1 -1
  105. package/src/app-project/serverless/src/modules/CryptoJS.js +7 -17
  106. package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
  107. package/src/app-project/serverless/src/modules/database.d.ts +1 -1
  108. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  109. package/src/app-project/serverless/src/modules/ssh.js +7 -17
  110. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  111. package/src/firebase/message.js +2 -1
  112. package/src/firebase/message.js.map +1 -1
  113. package/src/helper/app_creater.js +2 -1
  114. package/src/helper/app_creater.js.map +1 -1
  115. package/src/helper/glitter-util.d.ts +1 -0
  116. package/src/lambda/interface.js +2 -2
  117. package/src/lambda/interface.js.map +1 -1
  118. package/src/modules/CryptoJS.js +7 -17
  119. package/src/modules/CryptoJS.js.map +1 -1
  120. package/src/modules/database.d.ts +1 -1
  121. package/src/modules/ssh.js +7 -17
  122. package/src/modules/ssh.js.map +1 -1
  123. package/src/modules/tool.d.ts +5 -0
  124. package/src/modules/tool.js +19 -0
  125. package/src/modules/tool.js.map +1 -1
  126. package/src/modules/tool.ts +27 -0
  127. package/src/run.js +2 -1
  128. package/src/run.js.map +1 -1
  129. package/src/services/app.js +7 -17
  130. package/src/services/app.js.map +1 -1
  131. package/src/services/saas-table-check.js +2 -2
  132. package/src/services/saas-table-check.js.map +1 -1
  133. package/src/services/ses.js +2 -1
  134. package/src/services/ses.js.map +1 -1
@@ -977,8 +977,8 @@ export class BgWidget {
977
977
  obj.default = e.value;
978
978
  obj.oninput && obj.oninput(e.value);
979
979
  })}"
980
- onclick="${obj.gvc.event((e)=>{
981
- obj.onclick && obj.onclick(e)
980
+ onclick="${obj.gvc.event(e => {
981
+ obj.onclick && obj.onclick(e);
982
982
  })}"
983
983
  value="${(obj.default ?? '').replace(/"/g, '"')}"
984
984
  ${obj.readonly ? `readonly` : ``}
@@ -2784,7 +2784,7 @@ ${obj.default ?? ''}</textarea
2784
2784
  [
2785
2785
  this.searchPlace(
2786
2786
  gvc.event(e => {
2787
- search = e.value;
2787
+ search = `${e.value}`.trim();
2788
2788
  gvc.notifyDataChange(id);
2789
2789
  }),
2790
2790
  search || '',
@@ -2794,11 +2794,19 @@ ${obj.default ?? ''}</textarea
2794
2794
  ),
2795
2795
  this.multiCheckboxContainer(
2796
2796
  gvc,
2797
- data.filter(item => item.name.includes(search)),
2797
+ data.filter(item => item.name.toLowerCase().includes(search.toLowerCase())),
2798
2798
  def,
2799
2799
  stringArray => {
2800
- def = stringArray;
2801
- callback(stringArray);
2800
+ def = [
2801
+ ...new Set(
2802
+ def
2803
+ .filter(tag => {
2804
+ return !tag.toLowerCase().includes(search.toLowerCase());
2805
+ })
2806
+ .concat(stringArray)
2807
+ ),
2808
+ ];
2809
+ callback(def);
2802
2810
  },
2803
2811
  {
2804
2812
  single: false,
@@ -3529,6 +3537,175 @@ ${obj.default ?? ''}</textarea
3529
3537
  </div>`;
3530
3538
  }
3531
3539
 
3540
+ static searchTagsFilter(
3541
+ gvc: GVC,
3542
+ def: string[],
3543
+ callback: (data: string[]) => void,
3544
+ placeholder: string,
3545
+ margin?: string
3546
+ ) {
3547
+ const id = gvc.glitter.getUUID();
3548
+ let loading = true;
3549
+ let show = false;
3550
+ let tagList: { key: string; name: string }[] = [];
3551
+ let search = '';
3552
+ let selectTags: string[] = def || [];
3553
+
3554
+ return gvc.bindView({
3555
+ bind: id,
3556
+ view: () => {
3557
+ if (loading) {
3558
+ return '';
3559
+ }
3560
+
3561
+ if (show) {
3562
+ return html`<div
3563
+ style="margin-top: 1px;border: 8px solid #fff; outline: 1px solid #aeaeae; height: 300px; width: 100%; border-radius: 5px; position: absolute; top: 0; background-color: #fff; border-radius: 5px; overflow: auto;"
3564
+ >
3565
+ <div class="position-relative">
3566
+ <div
3567
+ class="w-100 d-flex align-items-center gap-1 position-sticky mb-1"
3568
+ style="top: 0; background-color: #fff;"
3569
+ >
3570
+ <div class="w-100">
3571
+ <i
3572
+ class="fa-regular fa-magnifying-glass"
3573
+ style="font-size: 18px; color: #A0A0A0; position: absolute; left: 18px; top: 50%; transform: translateY(-50%);"
3574
+ aria-hidden="true"
3575
+ ></i>
3576
+ <input
3577
+ class="form-control h-100"
3578
+ style="border-radius: 10px; border: 1px solid #DDD; padding-left: 50px; height: 100%;"
3579
+ placeholder="${placeholder}"
3580
+ onchange="${gvc.event(e => {
3581
+ search = `${e.value}`.trim();
3582
+ gvc.notifyDataChange(id);
3583
+ })}"
3584
+ value="${search}"
3585
+ />
3586
+ </div>
3587
+ ${this.customButton({
3588
+ button: {
3589
+ color: 'black',
3590
+ size: 'md',
3591
+ },
3592
+ text: {
3593
+ name: '確認',
3594
+ style: 'font-size: 14px;',
3595
+ },
3596
+ event: gvc.event(() => {
3597
+ show = false;
3598
+ gvc.notifyDataChange(id);
3599
+ callback(selectTags);
3600
+ }),
3601
+ })}
3602
+ </div>
3603
+ <div class="p-2">
3604
+ ${this.multiCheckboxContainer(
3605
+ gvc,
3606
+ tagList.filter(tag => tag.name.toLowerCase().includes(search.toLowerCase())),
3607
+ selectTags,
3608
+ text => {
3609
+ if (search) {
3610
+ selectTags = [
3611
+ ...new Set(
3612
+ selectTags
3613
+ .filter(tag => {
3614
+ return !tag.toLowerCase().includes(search.toLowerCase());
3615
+ })
3616
+ .concat(text)
3617
+ ),
3618
+ ];
3619
+ } else {
3620
+ selectTags = text;
3621
+ }
3622
+ },
3623
+ { single: false }
3624
+ )}
3625
+ </div>
3626
+ </div>
3627
+ </div>`;
3628
+ } else {
3629
+ return html`<div
3630
+ class="h-100"
3631
+ onclick="${gvc.event(() => {
3632
+ show = true;
3633
+ gvc.notifyDataChange(id);
3634
+ })}"
3635
+ >
3636
+ <i
3637
+ class="fa-regular fa-magnifying-glass"
3638
+ style="font-size: 18px; color: #A0A0A0; position: absolute; left: 18px; top: 50%; transform: translateY(-50%);"
3639
+ aria-hidden="true"
3640
+ ></i>
3641
+ <div
3642
+ class="form-control h-100"
3643
+ style="border-radius: 10px; border: 1px solid #DDD; padding-left: 50px; height: 100%; color: #aeaeae; ${selectTags.length >
3644
+ 0 && false
3645
+ ? 'padding: 0.3rem 3rem;'
3646
+ : ''}"
3647
+ >
3648
+ ${placeholder}
3649
+ <!-- ${selectTags.length > 0
3650
+ ? html`<div class="d-flex flex-wrap gap-2">
3651
+ ${selectTags.map(item => this.normalInsignia(`#${item}`)).join('')}
3652
+ </div>`
3653
+ : placeholder} -->
3654
+ </div>
3655
+ </div>`;
3656
+ }
3657
+ },
3658
+ divCreate: {
3659
+ class: 'w-100 position-relative search-tags-filter',
3660
+ style: `height: 40px !important; margin: ${margin ?? 0};`,
3661
+ },
3662
+ onCreate: async () => {
3663
+ if (loading) {
3664
+ tagList = await ApiUser.getPublicConfig('product_manager_tags', 'manager').then((dd: any) => {
3665
+ if (dd.result && dd.response?.value?.list) {
3666
+ return dd.response.value.list.map((item: string) => {
3667
+ return {
3668
+ key: item,
3669
+ name: `#${item}`,
3670
+ };
3671
+ });
3672
+ }
3673
+ return [];
3674
+ });
3675
+ loading = false;
3676
+ gvc.notifyDataChange(id);
3677
+ } else if (show) {
3678
+ function hasSearchTagsFilterAncestor(target: EventTarget | null): boolean {
3679
+ let el = target as Element | null;
3680
+
3681
+ for (let i = 0; i < 10 && el; i++) {
3682
+ if (el.classList.contains('search-tags-filter')) {
3683
+ return true;
3684
+ }
3685
+ el = el.parentElement;
3686
+ }
3687
+
3688
+ return false;
3689
+ }
3690
+
3691
+ function clickEvent(event: any) {
3692
+ if (
3693
+ !hasSearchTagsFilterAncestor(event.target) &&
3694
+ !event.target.classList.contains('form-check-input') &&
3695
+ !event.target.classList.contains('form-check-label')
3696
+ ) {
3697
+ show = false;
3698
+ gvc.notifyDataChange(id);
3699
+ window.parent.document.removeEventListener('click', clickEvent);
3700
+ }
3701
+ }
3702
+
3703
+ setTimeout(() => window.parent.document.addEventListener('click', clickEvent), 100);
3704
+ }
3705
+ },
3706
+ });
3707
+ }
3708
+
3532
3709
  static activeFilter = '';
3533
3710
 
3534
3711
  static setActiveFilter = (gvc: GVC, key: ActiveFilterKeys) => {
@@ -3950,7 +4127,10 @@ ${obj.default ?? ''}</textarea
3950
4127
  <div class="c_dialog_main">
3951
4128
  ${obj.readonly
3952
4129
  ? ''
3953
- : html` <div class="d-flex" style="gap: 12px;">
4130
+ : html` <div
4131
+ class="d-flex position-sticky px-1"
4132
+ style="gap: 12px; top: 0; background-color: #fff;"
4133
+ >
3954
4134
  ${this.searchFilter(
3955
4135
  gvc.event((e, event) => {
3956
4136
  vm.query = e.value;
@@ -5487,11 +5667,16 @@ ${obj.default ?? ''}</textarea
5487
5667
  if (vm.loading) {
5488
5668
  return html` <div class="my-4">${this.spinner()}</div>`;
5489
5669
  }
5490
- return html` <div class="bg-white shadow rounded-3 h-100 d-flex flex-column" style="width: 100%; ">
5491
- <div class="w-100 d-flex align-items-center p-3 border-bottom" style="background: #F2F2F2;">
5492
- <div class="tx_700">${obj.title ?? '產品列表'}</div>
5670
+ return html` <div
5671
+ class="bg-white shadow rounded-3 h-100 d-flex flex-column position-relative overflow-hidden"
5672
+ style="width: 100%; padding-top: 61px;"
5673
+ >
5674
+ <div
5675
+ class="w-100 d-flex align-items-center p-3 border-bottom position-absolute"
5676
+ style="background: #F2F2F2;top:0;left:0"
5677
+ >
5678
+ <div class="tx_700 dialog-title">${obj.title ?? '圖片庫'}</div>
5493
5679
  <div class="flex-fill"></div>
5494
-
5495
5680
  <i
5496
5681
  class="fa-sharp fa-solid fa-xmark fs-5 text-dark cursor_pointer"
5497
5682
  onclick="${gvc.event(() => {
@@ -5502,9 +5687,9 @@ ${obj.default ?? ''}</textarea
5502
5687
  })}"
5503
5688
  ></i>
5504
5689
  </div>
5505
- <div class="c_dialog flex-fill">
5690
+ <div class="c_dialog flex-fill " style="height: 600px;">
5506
5691
  <div class="c_dialog_body d-flex flex-column h-100">
5507
- <div class="c_dialog_main flex-fill" style="gap: 24px;max-height:100%; ">
5692
+ <div class="c_dialog_main flex-fill" style="gap: 24px;max-height:100%;padding-top:0;">
5508
5693
  ${obj.innerHTML(gvc) ?? ''}
5509
5694
  </div>
5510
5695
  <div class="c_dialog_bar">${obj.footer_html(gvc) ?? ''}</div>
@@ -184,6 +184,7 @@ export class AutoFcmAdvertise {
184
184
  page: 0,
185
185
  limit: 99999,
186
186
  id: tagData.filter.join(','),
187
+ only_id: true,
187
188
  }).then(dd => {
188
189
  dd.response.data.map((user) => {
189
190
  postData.userList.push({
@@ -202,6 +203,7 @@ export class AutoFcmAdvertise {
202
203
  page: 0,
203
204
  limit: 99999,
204
205
  group: { type: 'level', tag: id },
206
+ only_id: true,
205
207
  }).then(data => {
206
208
  data.response.data.map((user) => {
207
209
  list.push({
@@ -231,6 +233,7 @@ export class AutoFcmAdvertise {
231
233
  page: 0,
232
234
  limit: 99999,
233
235
  group: { type: type },
236
+ only_id: true,
234
237
  }).then(data => {
235
238
  let dataArray = data.response.data;
236
239
  if (data.response.extra) {
@@ -260,6 +263,7 @@ export class AutoFcmAdvertise {
260
263
  page: 0,
261
264
  limit: 99999,
262
265
  filter: { birth: tagData.filter },
266
+ only_id: true,
263
267
  }).then(data => {
264
268
  data.response.data.map((user) => {
265
269
  postData.userList.push({
@@ -274,6 +278,7 @@ export class AutoFcmAdvertise {
274
278
  page: 0,
275
279
  limit: 99999,
276
280
  filter: { tags: tagData.filter },
281
+ only_id: true,
277
282
  }).then(data => {
278
283
  data.response.data.map((user) => {
279
284
  postData.userList.push({
@@ -290,6 +295,7 @@ export class AutoFcmAdvertise {
290
295
  page: 0,
291
296
  limit: 99999,
292
297
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
298
+ only_id: true,
293
299
  }).then(data => {
294
300
  data.response.data.map((user) => {
295
301
  postData.userList.push({
@@ -357,11 +363,15 @@ export class AutoFcmAdvertise {
357
363
  <div style="display:flex; align-items: center; gap: 18px; margin: 8px 0;">
358
364
  <div class="tx_normal">${postData.userList.length}人</div>
359
365
  ${BgWidget.grayButton('查看名單', gvc.event(() => {
366
+ const dialog = new ShareDialog(gvc.glitter);
360
367
  if (postData.userList.length === 0) {
361
- const dialog = new ShareDialog(gvc.glitter);
362
368
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
363
369
  return;
364
370
  }
371
+ if (postData.userList.length > 500) {
372
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
373
+ return;
374
+ }
365
375
  const userVM = {
366
376
  dataList: [],
367
377
  };
@@ -377,6 +387,7 @@ export class AutoFcmAdvertise {
377
387
  page: 0,
378
388
  limit: 99999,
379
389
  id: postData.userList.map(user => { var _a; return (_a = user.id) !== null && _a !== void 0 ? _a : 0; }).join(','),
390
+ only_id: true,
380
391
  }).then(dd => {
381
392
  if (dd.response.data) {
382
393
  userVM.dataList = dd.response.data.map((item) => {
@@ -520,8 +531,8 @@ export class AutoFcmAdvertise {
520
531
  ApiUser.getUserList({
521
532
  page: 0,
522
533
  limit: 99999,
523
- only_id: true,
524
534
  search: data.query,
535
+ only_id: true,
525
536
  }).then(dd => {
526
537
  if (dd.response.data) {
527
538
  vm.dataList = dd.response.data
@@ -200,6 +200,7 @@ export class AutoFcmAdvertise {
200
200
  page: 0,
201
201
  limit: 99999,
202
202
  id: tagData.filter.join(','),
203
+ only_id: true,
203
204
  }).then(dd => {
204
205
  dd.response.data.map((user: any) => {
205
206
  postData.userList.push({
@@ -218,6 +219,7 @@ export class AutoFcmAdvertise {
218
219
  page: 0,
219
220
  limit: 99999,
220
221
  group: { type: 'level', tag: id },
222
+ only_id: true,
221
223
  }).then(data => {
222
224
  data.response.data.map((user: any) => {
223
225
  list.push({
@@ -247,6 +249,7 @@ export class AutoFcmAdvertise {
247
249
  page: 0,
248
250
  limit: 99999,
249
251
  group: { type: type },
252
+ only_id: true,
250
253
  }).then(data => {
251
254
  // 加入額外的會員資料,例如有訂閱但未註冊者
252
255
  let dataArray = data.response.data;
@@ -277,6 +280,7 @@ export class AutoFcmAdvertise {
277
280
  page: 0,
278
281
  limit: 99999,
279
282
  filter: { birth: tagData.filter },
283
+ only_id: true,
280
284
  }).then(data => {
281
285
  data.response.data.map((user: any) => {
282
286
  postData.userList.push({
@@ -291,6 +295,7 @@ export class AutoFcmAdvertise {
291
295
  page: 0,
292
296
  limit: 99999,
293
297
  filter: { tags: tagData.filter },
298
+ only_id: true,
294
299
  }).then(data => {
295
300
  data.response.data.map((user: any) => {
296
301
  postData.userList.push({
@@ -307,6 +312,7 @@ export class AutoFcmAdvertise {
307
312
  page: 0,
308
313
  limit: 99999,
309
314
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
315
+ only_id: true,
310
316
  }).then(data => {
311
317
  data.response.data.map((user: any) => {
312
318
  postData.userList.push({
@@ -382,11 +388,18 @@ export class AutoFcmAdvertise {
382
388
  ${BgWidget.grayButton(
383
389
  '查看名單',
384
390
  gvc.event(() => {
391
+ const dialog = new ShareDialog(gvc.glitter);
392
+
385
393
  if (postData.userList.length === 0) {
386
- const dialog = new ShareDialog(gvc.glitter);
387
394
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
388
395
  return;
389
396
  }
397
+
398
+ if (postData.userList.length > 500) {
399
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
400
+ return;
401
+ }
402
+
390
403
  const userVM = {
391
404
  dataList: [] as { key: string; value: string; note: string }[],
392
405
  };
@@ -402,6 +415,7 @@ export class AutoFcmAdvertise {
402
415
  page: 0,
403
416
  limit: 99999,
404
417
  id: postData.userList.map(user => user.id ?? 0).join(','),
418
+ only_id: true,
405
419
  }).then(dd => {
406
420
  if (dd.response.data) {
407
421
  userVM.dataList = dd.response.data.map(
@@ -556,8 +570,8 @@ export class AutoFcmAdvertise {
556
570
  ApiUser.getUserList({
557
571
  page: 0,
558
572
  limit: 99999,
559
- only_id: true,
560
573
  search: data.query,
574
+ only_id: true,
561
575
  }).then(dd => {
562
576
  if (dd.response.data) {
563
577
  vm.dataList = dd.response.data
@@ -867,6 +867,7 @@ export class BgNotify {
867
867
  page: 0,
868
868
  limit: 99999,
869
869
  id: tagData.filter.join(','),
870
+ only_id: true,
870
871
  }).then(dd => {
871
872
  dd.response.data.map((user) => {
872
873
  if (user.userData.email && user.userData.email.length > 0) {
@@ -888,6 +889,7 @@ export class BgNotify {
888
889
  page: 0,
889
890
  limit: 99999,
890
891
  group: { type: 'level', tag: id },
892
+ only_id: true,
891
893
  }).then(data => {
892
894
  data.response.data.map((user) => {
893
895
  if (user.userData.email) {
@@ -920,6 +922,7 @@ export class BgNotify {
920
922
  page: 0,
921
923
  limit: 99999,
922
924
  group: { type: type },
925
+ only_id: true,
923
926
  }).then(data => {
924
927
  let dataArray = data.response.data;
925
928
  if (data.response.extra) {
@@ -952,6 +955,7 @@ export class BgNotify {
952
955
  page: 0,
953
956
  limit: 99999,
954
957
  filter: { birth: tagData.filter },
958
+ only_id: true,
955
959
  }).then(data => {
956
960
  data.response.data.map((user) => {
957
961
  if (user.userData.email) {
@@ -969,6 +973,7 @@ export class BgNotify {
969
973
  page: 0,
970
974
  limit: 99999,
971
975
  filter: { tags: tagData.filter },
976
+ only_id: true,
972
977
  }).then(data => {
973
978
  data.response.data.map((user) => {
974
979
  if (user.userData.email) {
@@ -988,6 +993,7 @@ export class BgNotify {
988
993
  page: 0,
989
994
  limit: 99999,
990
995
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
996
+ only_id: true,
991
997
  }).then(data => {
992
998
  data.response.data.map((user) => {
993
999
  if (user.userData.email) {
@@ -1057,11 +1063,15 @@ export class BgNotify {
1057
1063
  <div style="display:flex; align-items: center; gap: 18px; margin: 8px 0;">
1058
1064
  <div class="tx_normal">${postData.userList.length}人</div>
1059
1065
  ${BgWidget.grayButton('查看名單', gvc.event(() => {
1066
+ const dialog = new ShareDialog(gvc.glitter);
1060
1067
  if (postData.userList.length === 0) {
1061
- const dialog = new ShareDialog(gvc.glitter);
1062
1068
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
1063
1069
  return;
1064
1070
  }
1071
+ if (postData.userList.length > 500) {
1072
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
1073
+ return;
1074
+ }
1065
1075
  const userVM = {
1066
1076
  dataList: [],
1067
1077
  };
@@ -1077,6 +1087,7 @@ export class BgNotify {
1077
1087
  page: 0,
1078
1088
  limit: 99999,
1079
1089
  id: postData.userList.map(user => { var _a; return (_a = user.id) !== null && _a !== void 0 ? _a : 0; }).join(','),
1090
+ only_id: true,
1080
1091
  }).then(dd => {
1081
1092
  if (dd.response.data) {
1082
1093
  userVM.dataList = dd.response.data.map((item) => {
@@ -1234,8 +1245,8 @@ export class BgNotify {
1234
1245
  ApiUser.getUserList({
1235
1246
  page: 0,
1236
1247
  limit: 99999,
1237
- only_id: true,
1238
1248
  search: data.query,
1249
+ only_id: true,
1239
1250
  }).then(dd => {
1240
1251
  if (dd.response.data) {
1241
1252
  vm.dataList = dd.response.data
@@ -972,6 +972,7 @@ export class BgNotify {
972
972
  page: 0,
973
973
  limit: 99999,
974
974
  id: tagData.filter.join(','),
975
+ only_id: true,
975
976
  }).then(dd => {
976
977
  dd.response.data.map((user: any) => {
977
978
  if (user.userData.email && user.userData.email.length > 0) {
@@ -993,6 +994,7 @@ export class BgNotify {
993
994
  page: 0,
994
995
  limit: 99999,
995
996
  group: { type: 'level', tag: id },
997
+ only_id: true,
996
998
  }).then(data => {
997
999
  data.response.data.map((user: any) => {
998
1000
  if (user.userData.email) {
@@ -1025,6 +1027,7 @@ export class BgNotify {
1025
1027
  page: 0,
1026
1028
  limit: 99999,
1027
1029
  group: { type: type },
1030
+ only_id: true,
1028
1031
  }).then(data => {
1029
1032
  // 加入額外的會員資料,例如有訂閱但未註冊者
1030
1033
  let dataArray = data.response.data;
@@ -1058,6 +1061,7 @@ export class BgNotify {
1058
1061
  page: 0,
1059
1062
  limit: 99999,
1060
1063
  filter: { birth: tagData.filter },
1064
+ only_id: true,
1061
1065
  }).then(data => {
1062
1066
  data.response.data.map((user: any) => {
1063
1067
  if (user.userData.email) {
@@ -1075,6 +1079,7 @@ export class BgNotify {
1075
1079
  page: 0,
1076
1080
  limit: 99999,
1077
1081
  filter: { tags: tagData.filter },
1082
+ only_id: true,
1078
1083
  }).then(data => {
1079
1084
  data.response.data.map((user: any) => {
1080
1085
  if (user.userData.email) {
@@ -1094,6 +1099,7 @@ export class BgNotify {
1094
1099
  page: 0,
1095
1100
  limit: 99999,
1096
1101
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
1102
+ only_id: true,
1097
1103
  }).then(data => {
1098
1104
  data.response.data.map((user: any) => {
1099
1105
  if (user.userData.email) {
@@ -1171,11 +1177,18 @@ export class BgNotify {
1171
1177
  ${BgWidget.grayButton(
1172
1178
  '查看名單',
1173
1179
  gvc.event(() => {
1180
+ const dialog = new ShareDialog(gvc.glitter);
1181
+
1174
1182
  if (postData.userList.length === 0) {
1175
- const dialog = new ShareDialog(gvc.glitter);
1176
1183
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
1177
1184
  return;
1178
1185
  }
1186
+
1187
+ if (postData.userList.length > 500) {
1188
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
1189
+ return;
1190
+ }
1191
+
1179
1192
  const userVM = {
1180
1193
  dataList: [] as { key: string; value: string; note: string }[],
1181
1194
  };
@@ -1191,6 +1204,7 @@ export class BgNotify {
1191
1204
  page: 0,
1192
1205
  limit: 99999,
1193
1206
  id: postData.userList.map(user => user.id ?? 0).join(','),
1207
+ only_id: true,
1194
1208
  }).then(dd => {
1195
1209
  if (dd.response.data) {
1196
1210
  userVM.dataList = dd.response.data.map(
@@ -1357,8 +1371,8 @@ export class BgNotify {
1357
1371
  ApiUser.getUserList({
1358
1372
  page: 0,
1359
1373
  limit: 99999,
1360
- only_id: true,
1361
1374
  search: data.query,
1375
+ only_id: true,
1362
1376
  }).then(dd => {
1363
1377
  if (dd.response.data) {
1364
1378
  vm.dataList = dd.response.data
@@ -116,6 +116,7 @@ interface OrderData {
116
116
  custom_form_format?: any;
117
117
  custom_form_data?: any;
118
118
  tags?: string[];
119
+ fbp?: string;
119
120
  }
120
121
 
121
122
  interface PaymentFlow {
@@ -121,9 +121,23 @@ export class OrderExcel {
121
121
  const formatJSON = (obj) => Object.fromEntries(Object.entries(obj).filter(([key]) => column.includes(key)));
122
122
  const getOrderJSON = (order, orderData) => {
123
123
  var _b, _c, _d, _e, _f, _g;
124
+ const formatOrderSource = (() => {
125
+ var _b;
126
+ if (orderData.fbp)
127
+ return 'FB廣告';
128
+ if (!orderData.orderSource)
129
+ return '線上';
130
+ const source = {
131
+ pos: 'POS',
132
+ combine: '合併訂單',
133
+ split: '拆分訂單',
134
+ manual: '手動新增',
135
+ };
136
+ return (_b = source[orderData.orderSource]) !== null && _b !== void 0 ? _b : '線上';
137
+ })();
124
138
  return formatJSON({
125
139
  訂單編號: order.cart_token,
126
- 訂單來源: orderData.orderSource === 'POS' ? 'POS' : '手動',
140
+ 訂單來源: formatOrderSource,
127
141
  訂單建立時間: formatDate(order.created_time),
128
142
  會員信箱: (_b = order.email) !== null && _b !== void 0 ? _b : 'no-email',
129
143
  訂單處理狀態: getStatusLabel(orderData.orderStatus, { '-1': '已取消', '1': '已完成', '0': '處理中' }, '處理中'),
@@ -144,6 +158,7 @@ export class OrderExcel {
144
158
  訂單總計: orderData.total,
145
159
  分銷連結代碼: (_e = (_d = orderData.distribution_info) === null || _d === void 0 ? void 0 : _d.code) !== null && _e !== void 0 ? _e : '',
146
160
  分銷連結名稱: (_g = (_f = orderData.distribution_info) === null || _f === void 0 ? void 0 : _f.title) !== null && _g !== void 0 ? _g : '',
161
+ FB廣告追蹤碼: orderData.fbp,
147
162
  });
148
163
  };
149
164
  const getProductJSON = (item) => {
@@ -753,7 +768,7 @@ export class OrderExcel {
753
768
  yield ApiUser.getPublicConfig('customer_form_user_setting', 'manager').then(r => {
754
769
  return Array.isArray(r.response.value.list) ? r.response.value.list : [];
755
770
  }),
756
- (yield ApiUser.getPublicConfig('custom_form_checkout_recipient', 'manager')).response.value
771
+ (yield ApiUser.getPublicConfig('custom_form_checkout_recipient', 'manager')).response.value,
757
772
  ]);
758
773
  return dataArray;
759
774
  });
@@ -802,6 +817,7 @@ OrderExcel.headerColumn = () => __awaiter(void 0, void 0, void 0, function* () {
802
817
  '訂單使用購物金',
803
818
  '分銷連結代碼',
804
819
  '分銷連結名稱',
820
+ 'FB廣告追蹤碼',
805
821
  ],
806
822
  商品: ['商品名稱', '商品規格', '商品SKU', '商品購買數量', '商品價格', '商品折扣'],
807
823
  顧客: [