ts-glitter 21.3.8 → 21.3.9

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 (132) 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-models/product.ts +13 -0
  65. package/nxv0ptv53w.json +1 -0
  66. package/package.json +1 -1
  67. package/src/api-public/controllers/shop.js +2 -2
  68. package/src/api-public/controllers/shop.js.map +1 -1
  69. package/src/api-public/controllers/shop.ts +5 -2
  70. package/src/api-public/controllers/stock.js +1 -1
  71. package/src/api-public/controllers/stock.js.map +1 -1
  72. package/src/api-public/controllers/stock.ts +93 -81
  73. package/src/api-public/models/glitter-finance.js +2 -1
  74. package/src/api-public/models/glitter-finance.js.map +1 -1
  75. package/src/api-public/services/checkout-event.js +1 -0
  76. package/src/api-public/services/checkout-event.js.map +1 -1
  77. package/src/api-public/services/checkout-event.ts +2 -2
  78. package/src/api-public/services/data-analyze.d.ts +1 -1
  79. package/src/api-public/services/diff-record.d.ts +25 -0
  80. package/src/api-public/services/diff-record.js +158 -0
  81. package/src/api-public/services/diff-record.js.map +1 -0
  82. package/src/api-public/services/diff-record.ts +217 -0
  83. package/src/api-public/services/ezpay/tool.d.ts +1 -0
  84. package/src/api-public/services/financial-serviceV2.js +7 -17
  85. package/src/api-public/services/financial-serviceV2.js.map +1 -1
  86. package/src/api-public/services/public-table-check.js +25 -7
  87. package/src/api-public/services/public-table-check.js.map +1 -1
  88. package/src/api-public/services/public-table-check.ts +53 -31
  89. package/src/api-public/services/shopping.d.ts +2 -12
  90. package/src/api-public/services/shopping.js +16 -7
  91. package/src/api-public/services/shopping.js.map +1 -1
  92. package/src/api-public/services/shopping.ts +33 -7
  93. package/src/api-public/services/stock.d.ts +1 -1
  94. package/src/api-public/services/stock.js +19 -17
  95. package/src/api-public/services/stock.js.map +1 -1
  96. package/src/api-public/services/stock.ts +711 -696
  97. package/src/api-public/services/user.d.ts +1 -1
  98. package/src/api-public/services/user.js +18 -8
  99. package/src/api-public/services/user.js.map +1 -1
  100. package/src/api-public/services/user.ts +34 -27
  101. package/src/app-project/serverless/src/index.js +7 -17
  102. package/src/app-project/serverless/src/index.js.map +1 -1
  103. package/src/app-project/serverless/src/modules/CryptoJS.js +7 -17
  104. package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
  105. package/src/app-project/serverless/src/modules/database.d.ts +1 -1
  106. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  107. package/src/app-project/serverless/src/modules/ssh.js +7 -17
  108. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  109. package/src/firebase/message.js +2 -1
  110. package/src/firebase/message.js.map +1 -1
  111. package/src/helper/app_creater.js +2 -1
  112. package/src/helper/app_creater.js.map +1 -1
  113. package/src/helper/glitter-util.d.ts +1 -0
  114. package/src/index.js +17 -7
  115. package/src/index.js.map +5 -1
  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/saas-table-check.js +2 -2
  130. package/src/services/saas-table-check.js.map +1 -1
  131. package/src/services/ses.js +2 -1
  132. package/src/services/ses.js.map +1 -1
@@ -641,7 +641,6 @@ export class BgSNS {
641
641
  ApiSns.delete({
642
642
  id: vm.data.name,
643
643
  }).then(r => {
644
- console.log('res -- ', r);
645
644
  dialog.dataLoading({ visible: false });
646
645
  if (r.result) {
647
646
  vm.status = 'list';
@@ -837,7 +836,7 @@ export class BgSNS {
837
836
  function setUserList() {
838
837
  let n = 0;
839
838
  postData.userList = [];
840
- dialog.dataLoading({ visible: true, text: '更新預計寄件人...' });
839
+ dialog.dataLoading({ visible: true, text: '1更新預計寄件人...' });
841
840
  new Promise(resolve => {
842
841
  const si = setInterval(() => {
843
842
  if (postData.tagList.length === n) {
@@ -869,6 +868,7 @@ export class BgSNS {
869
868
  page: 0,
870
869
  limit: 99999,
871
870
  id: tagData.filter.join(','),
871
+ only_id: true,
872
872
  }).then(dd => {
873
873
  dd.response.data.map((user) => {
874
874
  if (user.userData.email && user.userData.email.length > 0 && user.userData.phone) {
@@ -891,6 +891,7 @@ export class BgSNS {
891
891
  page: 0,
892
892
  limit: 99999,
893
893
  group: { type: 'level', tag: id },
894
+ only_id: true,
894
895
  }).then(data => {
895
896
  data.response.data.map((user) => {
896
897
  if (user.userData.email && user.userData.phone) {
@@ -924,6 +925,7 @@ export class BgSNS {
924
925
  page: 0,
925
926
  limit: 99999,
926
927
  group: { type: type },
928
+ only_id: true,
927
929
  }).then(data => {
928
930
  let dataArray = data.response.data;
929
931
  if (data.response.extra) {
@@ -957,6 +959,7 @@ export class BgSNS {
957
959
  page: 0,
958
960
  limit: 99999,
959
961
  filter: { birth: tagData.filter },
962
+ only_id: true,
960
963
  }).then(data => {
961
964
  data.response.data.map((user) => {
962
965
  if (user.userData.email && user.userData.phone) {
@@ -975,6 +978,7 @@ export class BgSNS {
975
978
  page: 0,
976
979
  limit: 99999,
977
980
  filter: { tags: tagData.filter },
981
+ only_id: true,
978
982
  }).then(data => {
979
983
  data.response.data.map((user) => {
980
984
  if (user.userData.email) {
@@ -995,6 +999,7 @@ export class BgSNS {
995
999
  page: 0,
996
1000
  limit: 99999,
997
1001
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
1002
+ only_id: true,
998
1003
  }).then(data => {
999
1004
  data.response.data.map((user) => {
1000
1005
  if (user.userData.email && user.userData.phone) {
@@ -1069,11 +1074,15 @@ export class BgSNS {
1069
1074
  <div style="display:flex; align-items: center; gap: 18px; margin: 8px 0;">
1070
1075
  <div class="tx_normal">${postData.userList.length}人</div>
1071
1076
  ${BgWidget.grayButton('查看名單', gvc.event(() => {
1077
+ const dialog = new ShareDialog(gvc.glitter);
1072
1078
  if (postData.userList.length === 0) {
1073
- const dialog = new ShareDialog(gvc.glitter);
1074
1079
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
1075
1080
  return;
1076
1081
  }
1082
+ if (postData.userList.length > 500) {
1083
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
1084
+ return;
1085
+ }
1077
1086
  const userVM = {
1078
1087
  dataList: [],
1079
1088
  };
@@ -1089,6 +1098,7 @@ export class BgSNS {
1089
1098
  page: 0,
1090
1099
  limit: 99999,
1091
1100
  id: postData.userList.map(user => { var _a; return (_a = user.id) !== null && _a !== void 0 ? _a : 0; }).join(','),
1101
+ only_id: true,
1092
1102
  }).then(dd => {
1093
1103
  if (dd.response.data) {
1094
1104
  userVM.dataList = dd.response.data.map((item) => {
@@ -1253,8 +1263,8 @@ export class BgSNS {
1253
1263
  ApiUser.getUserList({
1254
1264
  page: 0,
1255
1265
  limit: 99999,
1256
- only_id: true,
1257
1266
  search: data.query,
1267
+ only_id: true,
1258
1268
  }).then(dd => {
1259
1269
  if (dd.response.data) {
1260
1270
  vm.dataList = dd.response.data
@@ -738,7 +738,6 @@ export class BgSNS {
738
738
  ApiSns.delete({
739
739
  id: vm.data.name,
740
740
  }).then(r => {
741
- console.log('res -- ', r);
742
741
  dialog.dataLoading({ visible: false });
743
742
  if (r.result) {
744
743
  vm.status = 'list';
@@ -939,7 +938,7 @@ export class BgSNS {
939
938
  function setUserList() {
940
939
  let n = 0;
941
940
  postData.userList = [];
942
- dialog.dataLoading({ visible: true, text: '更新預計寄件人...' });
941
+ dialog.dataLoading({ visible: true, text: '1更新預計寄件人...' });
943
942
 
944
943
  new Promise<void>(resolve => {
945
944
  const si = setInterval(() => {
@@ -972,6 +971,7 @@ export class BgSNS {
972
971
  page: 0,
973
972
  limit: 99999,
974
973
  id: tagData.filter.join(','),
974
+ only_id: true,
975
975
  }).then(dd => {
976
976
  dd.response.data.map((user: any) => {
977
977
  if (user.userData.email && user.userData.email.length > 0 && user.userData.phone) {
@@ -994,6 +994,7 @@ export class BgSNS {
994
994
  page: 0,
995
995
  limit: 99999,
996
996
  group: { type: 'level', tag: id },
997
+ only_id: true,
997
998
  }).then(data => {
998
999
  data.response.data.map((user: any) => {
999
1000
  if (user.userData.email && user.userData.phone) {
@@ -1027,6 +1028,7 @@ export class BgSNS {
1027
1028
  page: 0,
1028
1029
  limit: 99999,
1029
1030
  group: { type: type },
1031
+ only_id: true,
1030
1032
  }).then(data => {
1031
1033
  // 加入額外的會員資料,例如有訂閱但未註冊者
1032
1034
  let dataArray = data.response.data;
@@ -1061,6 +1063,7 @@ export class BgSNS {
1061
1063
  page: 0,
1062
1064
  limit: 99999,
1063
1065
  filter: { birth: tagData.filter },
1066
+ only_id: true,
1064
1067
  }).then(data => {
1065
1068
  data.response.data.map((user: any) => {
1066
1069
  if (user.userData.email && user.userData.phone) {
@@ -1079,6 +1082,7 @@ export class BgSNS {
1079
1082
  page: 0,
1080
1083
  limit: 99999,
1081
1084
  filter: { tags: tagData.filter },
1085
+ only_id: true,
1082
1086
  }).then(data => {
1083
1087
  data.response.data.map((user: any) => {
1084
1088
  if (user.userData.email) {
@@ -1099,6 +1103,7 @@ export class BgSNS {
1099
1103
  page: 0,
1100
1104
  limit: 99999,
1101
1105
  filter: { rebate: { key: 'moreThan', value: tagData.filter } },
1106
+ only_id: true,
1102
1107
  }).then(data => {
1103
1108
  data.response.data.map((user: any) => {
1104
1109
  if (user.userData.email && user.userData.phone) {
@@ -1187,14 +1192,22 @@ export class BgSNS {
1187
1192
  ${BgWidget.grayButton(
1188
1193
  '查看名單',
1189
1194
  gvc.event(() => {
1195
+ const dialog = new ShareDialog(gvc.glitter);
1196
+
1190
1197
  if (postData.userList.length === 0) {
1191
- const dialog = new ShareDialog(gvc.glitter);
1192
1198
  dialog.infoMessage({ text: '目前無預計寄件的顧客' });
1193
1199
  return;
1194
1200
  }
1201
+
1202
+ if (postData.userList.length > 500) {
1203
+ dialog.infoMessage({ text: '預覽人數超過500筆,請減少名單人數後再次開啟' });
1204
+ return;
1205
+ }
1206
+
1195
1207
  const userVM = {
1196
1208
  dataList: [] as { key: string; value: string; note: string }[],
1197
1209
  };
1210
+
1198
1211
  BgWidget.selectDropDialog({
1199
1212
  gvc: gvc,
1200
1213
  title: '預計寄件顧客',
@@ -1207,6 +1220,7 @@ export class BgSNS {
1207
1220
  page: 0,
1208
1221
  limit: 99999,
1209
1222
  id: postData.userList.map(user => user.id ?? 0).join(','),
1223
+ only_id: true,
1210
1224
  }).then(dd => {
1211
1225
  if (dd.response.data) {
1212
1226
  userVM.dataList = dd.response.data.map(
@@ -1394,8 +1408,8 @@ export class BgSNS {
1394
1408
  ApiUser.getUserList({
1395
1409
  page: 0,
1396
1410
  limit: 99999,
1397
- only_id: true,
1398
1411
  search: data.query,
1412
+ only_id: true,
1399
1413
  }).then(dd => {
1400
1414
  if (dd.response.data) {
1401
1415
  vm.dataList = dd.response.data
@@ -765,7 +765,7 @@ export class BgWidget {
765
765
  obj.default = e.value;
766
766
  obj.oninput && obj.oninput(e.value);
767
767
  })}"
768
- onclick="${obj.gvc.event((e) => {
768
+ onclick="${obj.gvc.event(e => {
769
769
  obj.onclick && obj.onclick(e);
770
770
  })}"
771
771
  value="${((_e = obj.default) !== null && _e !== void 0 ? _e : '').replace(/"/g, '&quot;')}"
@@ -2294,12 +2294,18 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
2294
2294
  </div>`
2295
2295
  : this.mainCard([
2296
2296
  this.searchPlace(gvc.event(e => {
2297
- search = e.value;
2297
+ search = `${e.value}`.trim();
2298
2298
  gvc.notifyDataChange(id);
2299
2299
  }), search || '', '搜尋', '0', '0'),
2300
- this.multiCheckboxContainer(gvc, data.filter(item => item.name.includes(search)), def, stringArray => {
2301
- def = stringArray;
2302
- callback(stringArray);
2300
+ this.multiCheckboxContainer(gvc, data.filter(item => item.name.toLowerCase().includes(search.toLowerCase())), def, stringArray => {
2301
+ def = [
2302
+ ...new Set(def
2303
+ .filter(tag => {
2304
+ return !tag.toLowerCase().includes(search.toLowerCase());
2305
+ })
2306
+ .concat(stringArray)),
2307
+ ];
2308
+ callback(def);
2303
2309
  }, {
2304
2310
  single: false,
2305
2311
  containerStyle: 'overflow: auto; max-height: 310px;',
@@ -2929,6 +2935,156 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
2929
2935
  />
2930
2936
  </div>`;
2931
2937
  }
2938
+ static searchTagsFilter(gvc, def, callback, placeholder, margin) {
2939
+ const id = gvc.glitter.getUUID();
2940
+ let loading = true;
2941
+ let show = false;
2942
+ let tagList = [];
2943
+ let search = '';
2944
+ let selectTags = def || [];
2945
+ return gvc.bindView({
2946
+ bind: id,
2947
+ view: () => {
2948
+ if (loading) {
2949
+ return '';
2950
+ }
2951
+ if (show) {
2952
+ return html `<div
2953
+ 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;"
2954
+ >
2955
+ <div class="position-relative">
2956
+ <div
2957
+ class="w-100 d-flex align-items-center gap-1 position-sticky mb-1"
2958
+ style="top: 0; background-color: #fff;"
2959
+ >
2960
+ <div class="w-100">
2961
+ <i
2962
+ class="fa-regular fa-magnifying-glass"
2963
+ style="font-size: 18px; color: #A0A0A0; position: absolute; left: 18px; top: 50%; transform: translateY(-50%);"
2964
+ aria-hidden="true"
2965
+ ></i>
2966
+ <input
2967
+ class="form-control h-100"
2968
+ style="border-radius: 10px; border: 1px solid #DDD; padding-left: 50px; height: 100%;"
2969
+ placeholder="${placeholder}"
2970
+ onchange="${gvc.event(e => {
2971
+ search = `${e.value}`.trim();
2972
+ gvc.notifyDataChange(id);
2973
+ })}"
2974
+ value="${search}"
2975
+ />
2976
+ </div>
2977
+ ${this.customButton({
2978
+ button: {
2979
+ color: 'black',
2980
+ size: 'md',
2981
+ },
2982
+ text: {
2983
+ name: '確認',
2984
+ style: 'font-size: 14px;',
2985
+ },
2986
+ event: gvc.event(() => {
2987
+ show = false;
2988
+ gvc.notifyDataChange(id);
2989
+ callback(selectTags);
2990
+ }),
2991
+ })}
2992
+ </div>
2993
+ <div class="p-2">
2994
+ ${this.multiCheckboxContainer(gvc, tagList.filter(tag => tag.name.toLowerCase().includes(search.toLowerCase())), selectTags, text => {
2995
+ if (search) {
2996
+ selectTags = [
2997
+ ...new Set(selectTags
2998
+ .filter(tag => {
2999
+ return !tag.toLowerCase().includes(search.toLowerCase());
3000
+ })
3001
+ .concat(text)),
3002
+ ];
3003
+ }
3004
+ else {
3005
+ selectTags = text;
3006
+ }
3007
+ }, { single: false })}
3008
+ </div>
3009
+ </div>
3010
+ </div>`;
3011
+ }
3012
+ else {
3013
+ return html `<div
3014
+ class="h-100"
3015
+ onclick="${gvc.event(() => {
3016
+ show = true;
3017
+ gvc.notifyDataChange(id);
3018
+ })}"
3019
+ >
3020
+ <i
3021
+ class="fa-regular fa-magnifying-glass"
3022
+ style="font-size: 18px; color: #A0A0A0; position: absolute; left: 18px; top: 50%; transform: translateY(-50%);"
3023
+ aria-hidden="true"
3024
+ ></i>
3025
+ <div
3026
+ class="form-control h-100"
3027
+ style="border-radius: 10px; border: 1px solid #DDD; padding-left: 50px; height: 100%; color: #aeaeae; ${selectTags.length >
3028
+ 0 && false
3029
+ ? 'padding: 0.3rem 3rem;'
3030
+ : ''}"
3031
+ >
3032
+ ${placeholder}
3033
+ <!-- ${selectTags.length > 0
3034
+ ? html `<div class="d-flex flex-wrap gap-2">
3035
+ ${selectTags.map(item => this.normalInsignia(`#${item}`)).join('')}
3036
+ </div>`
3037
+ : placeholder} -->
3038
+ </div>
3039
+ </div>`;
3040
+ }
3041
+ },
3042
+ divCreate: {
3043
+ class: 'w-100 position-relative search-tags-filter',
3044
+ style: `height: 40px !important; margin: ${margin !== null && margin !== void 0 ? margin : 0};`,
3045
+ },
3046
+ onCreate: () => __awaiter(this, void 0, void 0, function* () {
3047
+ if (loading) {
3048
+ tagList = yield ApiUser.getPublicConfig('product_manager_tags', 'manager').then((dd) => {
3049
+ var _b, _c;
3050
+ if (dd.result && ((_c = (_b = dd.response) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.list)) {
3051
+ return dd.response.value.list.map((item) => {
3052
+ return {
3053
+ key: item,
3054
+ name: `#${item}`,
3055
+ };
3056
+ });
3057
+ }
3058
+ return [];
3059
+ });
3060
+ loading = false;
3061
+ gvc.notifyDataChange(id);
3062
+ }
3063
+ else if (show) {
3064
+ function hasSearchTagsFilterAncestor(target) {
3065
+ let el = target;
3066
+ for (let i = 0; i < 10 && el; i++) {
3067
+ if (el.classList.contains('search-tags-filter')) {
3068
+ return true;
3069
+ }
3070
+ el = el.parentElement;
3071
+ }
3072
+ return false;
3073
+ }
3074
+ function clickEvent(event) {
3075
+ if (!hasSearchTagsFilterAncestor(event.target) &&
3076
+ !event.target.classList.contains('form-check-input') &&
3077
+ !event.target.classList.contains('form-check-label')) {
3078
+ show = false;
3079
+ gvc.notifyDataChange(id);
3080
+ window.parent.document.removeEventListener('click', clickEvent);
3081
+ }
3082
+ }
3083
+ setTimeout(() => window.parent.document.addEventListener('click', clickEvent), 100);
3084
+ }
3085
+ }),
3086
+ });
3087
+ }
2932
3088
  static columnFilter(obj) {
2933
3089
  const id = 'columnFilter';
2934
3090
  return html ` <div
@@ -3282,7 +3438,10 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
3282
3438
  <div class="c_dialog_main">
3283
3439
  ${obj.readonly
3284
3440
  ? ''
3285
- : html ` <div class="d-flex" style="gap: 12px;">
3441
+ : html ` <div
3442
+ class="d-flex position-sticky px-1"
3443
+ style="gap: 12px; top: 0; background-color: #fff;"
3444
+ >
3286
3445
  ${this.searchFilter(gvc.event((e, event) => {
3287
3446
  vm.query = e.value;
3288
3447
  vm.loading = true;
@@ -4613,11 +4772,16 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
4613
4772
  if (vm.loading) {
4614
4773
  return html ` <div class="my-4">${this.spinner()}</div>`;
4615
4774
  }
4616
- return html ` <div class="bg-white shadow rounded-3 h-100 d-flex flex-column" style="width: 100%; ">
4617
- <div class="w-100 d-flex align-items-center p-3 border-bottom" style="background: #F2F2F2;">
4618
- <div class="tx_700">${(_b = obj.title) !== null && _b !== void 0 ? _b : '產品列表'}</div>
4775
+ return html ` <div
4776
+ class="bg-white shadow rounded-3 h-100 d-flex flex-column position-relative overflow-hidden"
4777
+ style="width: 100%; padding-top: 61px;"
4778
+ >
4779
+ <div
4780
+ class="w-100 d-flex align-items-center p-3 border-bottom position-absolute"
4781
+ style="background: #F2F2F2;top:0;left:0"
4782
+ >
4783
+ <div class="tx_700 dialog-title">${(_b = obj.title) !== null && _b !== void 0 ? _b : '圖片庫'}</div>
4619
4784
  <div class="flex-fill"></div>
4620
-
4621
4785
  <i
4622
4786
  class="fa-sharp fa-solid fa-xmark fs-5 text-dark cursor_pointer"
4623
4787
  onclick="${gvc.event(() => {
@@ -4628,9 +4792,9 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
4628
4792
  })}"
4629
4793
  ></i>
4630
4794
  </div>
4631
- <div class="c_dialog flex-fill">
4795
+ <div class="c_dialog flex-fill " style="height: 600px;">
4632
4796
  <div class="c_dialog_body d-flex flex-column h-100">
4633
- <div class="c_dialog_main flex-fill" style="gap: 24px;max-height:100%; ">
4797
+ <div class="c_dialog_main flex-fill" style="gap: 24px;max-height:100%;padding-top:0;">
4634
4798
  ${(_c = obj.innerHTML(gvc)) !== null && _c !== void 0 ? _c : ''}
4635
4799
  </div>
4636
4800
  <div class="c_dialog_bar">${(_d = obj.footer_html(gvc)) !== null && _d !== void 0 ? _d : ''}</div>