ts-glitter 20.8.7 → 20.9.1

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 (180) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-product.js +1 -1
  4. package/lowcode/backend-manager/bg-product.ts +1 -1
  5. package/lowcode/backend-manager/bg-recommend.js +1 -1
  6. package/lowcode/backend-manager/bg-recommend.ts +2 -2
  7. package/lowcode/backend-manager/bg-shopping.js +2 -5
  8. package/lowcode/backend-manager/bg-shopping.ts +2 -5
  9. package/lowcode/cms-plugin/POS-setting.js +58 -34
  10. package/lowcode/cms-plugin/POS-setting.ts +69 -33
  11. package/lowcode/cms-plugin/data-analyze-orders.js +0 -1
  12. package/lowcode/cms-plugin/data-analyze-orders.ts +1 -1
  13. package/lowcode/cms-plugin/data-analyze.js +1 -21
  14. package/lowcode/cms-plugin/data-analyze.ts +25 -25
  15. package/lowcode/cms-plugin/filter-options.js +1 -1
  16. package/lowcode/cms-plugin/filter-options.ts +1 -2
  17. package/lowcode/cms-plugin/information/information-module.js +275 -0
  18. package/lowcode/cms-plugin/information/information-module.ts +308 -0
  19. package/lowcode/cms-plugin/pos-pages/models.ts +3 -1
  20. package/lowcode/cms-plugin/pos-pages/payment-page.js +3 -11
  21. package/lowcode/cms-plugin/pos-pages/payment-page.ts +3 -11
  22. package/lowcode/cms-plugin/pos-pages/pos-function.js +1 -0
  23. package/lowcode/cms-plugin/pos-pages/pos-function.ts +1 -0
  24. package/lowcode/cms-plugin/pos-pages/products-page.js +1 -1
  25. package/lowcode/cms-plugin/pos-pages/products-page.ts +1 -1
  26. package/lowcode/cms-plugin/product-service.js +4 -9
  27. package/lowcode/cms-plugin/product-service.ts +4 -13
  28. package/lowcode/cms-plugin/shopping-discount-setting.js +76 -27
  29. package/lowcode/cms-plugin/shopping-discount-setting.ts +123 -63
  30. package/lowcode/cms-plugin/shopping-information.js +21 -167
  31. package/lowcode/cms-plugin/shopping-information.ts +35 -191
  32. package/lowcode/cms-plugin/shopping-order-return.js +212 -360
  33. package/lowcode/cms-plugin/shopping-order-return.ts +349 -482
  34. package/lowcode/cms-plugin/shopping-product-setting.js +8 -0
  35. package/lowcode/cms-plugin/shopping-product-setting.ts +12 -4
  36. package/lowcode/form-view/e-commerce/product-select.js +59 -51
  37. package/lowcode/form-view/e-commerce/product-select.ts +279 -266
  38. package/lowcode/glitter-base/global/language.js +2 -1
  39. package/lowcode/glitter-base/global/language.ts +2 -1
  40. package/lowcode/public-components/checkout/index.ts +2078 -2078
  41. package/lowcode/public-components/headers/sy-02.js +190 -179
  42. package/lowcode/public-components/headers/sy-02.ts +397 -370
  43. package/lowcode/public-components/headers/sy-03.js +133 -107
  44. package/lowcode/public-components/headers/sy-03.ts +276 -244
  45. package/lowcode/public-components/headers/sy-04.js +181 -146
  46. package/lowcode/public-components/headers/sy-04.ts +289 -247
  47. package/lowcode/public-components/product/pd-class.js +31 -23
  48. package/lowcode/public-components/product/pd-class.ts +51 -29
  49. package/lowcode/public-components/user-manager/um-voucher.js +1 -0
  50. package/lowcode/public-components/user-manager/um-voucher.ts +1 -0
  51. package/package.json +1 -1
  52. package/src/Language.js +1 -1
  53. package/src/Language.js.map +1 -1
  54. package/src/Language.ts +1 -1
  55. package/src/api-public/controllers/ai-chat.js.map +1 -1
  56. package/src/api-public/controllers/chat.js.map +1 -1
  57. package/src/api-public/controllers/customer-sessions.js.map +1 -1
  58. package/src/api-public/controllers/fb-message.js.map +1 -1
  59. package/src/api-public/controllers/fb-service.js.map +1 -1
  60. package/src/api-public/controllers/invoice.js.map +1 -1
  61. package/src/api-public/controllers/line-message.js.map +1 -1
  62. package/src/api-public/controllers/oauth.js.map +1 -1
  63. package/src/api-public/controllers/progress.js.map +1 -1
  64. package/src/api-public/controllers/rebate.js.map +1 -1
  65. package/src/api-public/controllers/recommend.js.map +1 -1
  66. package/src/api-public/controllers/reconciliation.js.map +1 -1
  67. package/src/api-public/controllers/shop.js +5 -2
  68. package/src/api-public/controllers/shop.js.map +1 -1
  69. package/src/api-public/controllers/shop.ts +7 -3
  70. package/src/api-public/controllers/shopee.js.map +1 -1
  71. package/src/api-public/controllers/sms.js.map +1 -1
  72. package/src/api-public/controllers/smtp.js.map +1 -1
  73. package/src/api-public/controllers/stock.js.map +1 -1
  74. package/src/api-public/controllers/track.js.map +1 -1
  75. package/src/api-public/controllers/voucher.js.map +1 -1
  76. package/src/api-public/models/glitter-finance.js +1 -2
  77. package/src/api-public/models/glitter-finance.js.map +1 -1
  78. package/src/api-public/services/EcInvoice.js.map +1 -1
  79. package/src/api-public/services/article.js.map +1 -1
  80. package/src/api-public/services/auto-send-email.js.map +1 -1
  81. package/src/api-public/services/chat.js.map +1 -1
  82. package/src/api-public/services/checkout-event.d.ts +1 -0
  83. package/src/api-public/services/checkout-event.js +17 -7
  84. package/src/api-public/services/checkout-event.js.map +1 -1
  85. package/src/api-public/services/checkout-event.ts +21 -9
  86. package/src/api-public/services/checkout.js.map +1 -1
  87. package/src/api-public/services/custom-code.js.map +1 -1
  88. package/src/api-public/services/customer-sessions.js.map +1 -1
  89. package/src/api-public/services/data-analyze.js +209 -196
  90. package/src/api-public/services/data-analyze.js.map +1 -1
  91. package/src/api-public/services/data-analyze.ts +219 -205
  92. package/src/api-public/services/delivery.js.map +1 -1
  93. package/src/api-public/services/ezpay/tool.d.ts +0 -1
  94. package/src/api-public/services/ezpay/tool.js.map +1 -1
  95. package/src/api-public/services/fake-data-model/fake-order.js.map +1 -1
  96. package/src/api-public/services/fake-data-model/fake-product.js.map +1 -1
  97. package/src/api-public/services/fake-data-model/fake-user.js.map +1 -1
  98. package/src/api-public/services/fb-api.js.map +1 -1
  99. package/src/api-public/services/filter-protect-data.js.map +1 -1
  100. package/src/api-public/services/financial-service.js +0 -1
  101. package/src/api-public/services/financial-service.js.map +1 -1
  102. package/src/api-public/services/form-check.js.map +1 -1
  103. package/src/api-public/services/graph-api.js.map +1 -1
  104. package/src/api-public/services/initial-fake-data.js.map +1 -1
  105. package/src/api-public/services/invoice.d.ts +3 -9
  106. package/src/api-public/services/invoice.js +66 -85
  107. package/src/api-public/services/invoice.js.map +1 -1
  108. package/src/api-public/services/invoice.ts +287 -293
  109. package/src/api-public/services/language-setting.js.map +1 -1
  110. package/src/api-public/services/mail.js.map +1 -1
  111. package/src/api-public/services/manager.js.map +1 -1
  112. package/src/api-public/services/paynow-logistics.js.map +1 -1
  113. package/src/api-public/services/phone-verify.js.map +1 -1
  114. package/src/api-public/services/pos.js.map +1 -1
  115. package/src/api-public/services/post.js.map +1 -1
  116. package/src/api-public/services/product-initial.js.map +1 -1
  117. package/src/api-public/services/rebate.js.map +1 -1
  118. package/src/api-public/services/reconciliation.js.map +1 -1
  119. package/src/api-public/services/schedule.d.ts +1 -0
  120. package/src/api-public/services/schedule.js +27 -0
  121. package/src/api-public/services/schedule.js.map +1 -1
  122. package/src/api-public/services/schedule.ts +30 -0
  123. package/src/api-public/services/shopping.d.ts +4 -3
  124. package/src/api-public/services/shopping.js +40 -20
  125. package/src/api-public/services/shopping.js.map +1 -1
  126. package/src/api-public/services/shopping.ts +52 -28
  127. package/src/api-public/services/stock.js.map +1 -1
  128. package/src/api-public/services/terms-check.js.map +1 -1
  129. package/src/api-public/services/updated-table-checked.js.map +1 -1
  130. package/src/api-public/services/user-update.js.map +1 -1
  131. package/src/api-public/services/user.d.ts +10 -0
  132. package/src/api-public/services/user.js +35 -8
  133. package/src/api-public/services/user.js.map +1 -1
  134. package/src/api-public/services/user.ts +50 -7
  135. package/src/api-public/services/voucher.js.map +1 -1
  136. package/src/api-public/utils/ut-database.js.map +1 -1
  137. package/src/app-project/android/app/src/main/res/xml/network_security_config.xml +3 -3
  138. package/src/app-project/android/app/src/main/res/xml/s.xml +5 -5
  139. package/src/app-project/android/gradlew.bat +94 -94
  140. package/src/app-project/serverless/src/controllers/index.js.map +1 -1
  141. package/src/app-project/serverless/src/controllers/sample.js.map +1 -1
  142. package/src/app-project/serverless/src/modules/database.d.ts +1 -2
  143. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  144. package/src/app-project/serverless/src/modules/exception.js.map +1 -1
  145. package/src/app-project/serverless/src/modules/hooks.js.map +1 -1
  146. package/src/app-project/serverless/src/modules/logger.js.map +1 -1
  147. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  148. package/src/app-project/serverless/src/modules/redis.js.map +1 -1
  149. package/src/app-project/serverless/src/modules/response.js.map +1 -1
  150. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  151. package/src/controllers/ai.js.map +1 -1
  152. package/src/controllers/global-event.js.map +1 -1
  153. package/src/controllers/page.js.map +1 -1
  154. package/src/controllers/private_config.js.map +1 -1
  155. package/src/export/export-test.js.map +1 -1
  156. package/src/firebase/message.js +1 -2
  157. package/src/firebase/message.js.map +1 -1
  158. package/src/helper/app_creater.js +1 -2
  159. package/src/helper/app_creater.js.map +1 -1
  160. package/src/helper/glitter-util.d.ts +0 -1
  161. package/src/helper/glitter-util.js.map +1 -1
  162. package/src/lambda/interface.d.ts +1 -1
  163. package/src/lambda/interface.js +2 -2
  164. package/src/lambda/interface.js.map +1 -1
  165. package/src/modules/database.js +4 -3
  166. package/src/modules/database.js.map +1 -1
  167. package/src/modules/database.ts +4 -4
  168. package/src/modules/exception.js.map +1 -1
  169. package/src/modules/hooks.js.map +1 -1
  170. package/src/modules/response.js.map +1 -1
  171. package/src/modules/ssh.js.map +1 -1
  172. package/src/public-config-initial/auto-fcm.js.map +1 -1
  173. package/src/run.js.map +1 -1
  174. package/src/run.ts +12 -12
  175. package/src/services/ai.js.map +1 -1
  176. package/src/services/ses.js +1 -2
  177. package/src/services/ses.js.map +1 -1
  178. package/src/services/system-schedule.js.map +1 -1
  179. package/src/update-progress-track.js.map +1 -1
  180. package/src/update-script.js.map +1 -1
@@ -13,7 +13,7 @@ import { ApiUser } from '../glitter-base/route/user.js';
13
13
  import { Currency } from '../glitter-base/global/currency.js';
14
14
  import { LanguageBackend } from './language-backend.js';
15
15
  import { GlobalUser } from '../glitter-base/global/global-user.js';
16
- import { FilterOptions } from './filter-options.js';
16
+ import { InformationModule } from './information/information-module.js';
17
17
  const html = String.raw;
18
18
  export class ShoppingInformation {
19
19
  static main(gvc) {
@@ -134,6 +134,7 @@ export class ShoppingInformation {
134
134
  gvc.notifyDataChange(vm.id);
135
135
  });
136
136
  }
137
+ const infoModule = new InformationModule(gvc, vm, ShoppingInformation);
137
138
  function createSection(title, description) {
138
139
  return html `
139
140
  <div style="color: #393939; font-size: 16px;">${title}</div>
@@ -166,185 +167,36 @@ export class ShoppingInformation {
166
167
  })),
167
168
  })}
168
169
  </div>`);
170
+ }
171
+ function createRow(title, description, elem) {
172
+ return html `
173
+ ${BgWidget.horizontalLine({ margin: 0.5 })}
174
+ <div class="d-flex align-items-center justify-content-between">
175
+ <div class="d-flex flex-column" style="gap:8px;">${createSection(title, description)}</div>
176
+ ${elem}
177
+ </div>
178
+ `;
169
179
  }
170
180
  function createPickUpModeDialog(title, description) {
171
181
  return createRow(title, description, BgWidget.customButton({
172
182
  button: { color: 'snow', size: 'md' },
173
183
  text: { name: '編輯' },
174
- event: gvc.event(() => {
175
- BgWidget.settingDialog({
176
- gvc,
177
- title,
178
- width: 600,
179
- innerHTML: gvc => {
180
- return `<div class="d-flex flex-column" style="gap:5px;">${[
181
- html ` <div class="d-flex align-items-center" style="gap:10px;">
182
- <div style="color: #393939; font-size: 16px;">啟用功能</div>
183
- <div class="cursor_pointer form-check form-switch m-0 p-0" style="min-width: 50px;">
184
- <input
185
- class="form-check-input m-0"
186
- type="checkbox"
187
- onchange="${gvc.event(() => {
188
- vm.data.pickup_mode = !vm.data.pickup_mode;
189
- gvc.recreateView();
190
- })}"
191
- ${vm.data.pickup_mode ? `checked` : ''}
192
- />
193
- </div>
194
- ${vm.data.pickup_mode ? `<div class="fw-bold fs-6 d-flex align-items-center">當前號碼 : ${vm.data.pickup_now || vm.data.pickup_start || 0}
195
- <div class="mx-2"></div>
196
- ${BgWidget.customButton({
197
- button: {
198
- color: 'snow',
199
- size: 'sm',
200
- },
201
- text: {
202
- name: '重置號碼'
203
- },
204
- event: gvc.event(() => {
205
- const dialog = new ShareDialog(gvc.glitter);
206
- dialog.checkYesOrNot({
207
- text: '是否確認重置號碼?',
208
- callback: (response) => {
209
- if (response) {
210
- vm.data.pickup_now = vm.data.pickup_start || '0';
211
- gvc.recreateView();
212
- }
213
- }
214
- });
215
- })
216
- })}
217
- </div>` : ``}
218
- </div>`,
219
- ...(() => {
220
- if (vm.data.pickup_mode) {
221
- return [
222
- BgWidget.editeInput({
223
- gvc: gvc,
224
- title: '初始號碼',
225
- default: vm.data.pickup_start || '0',
226
- callback: text => {
227
- vm.data.pickup_start = text;
228
- },
229
- placeHolder: '請輸入初始號碼',
230
- type: 'number',
231
- }),
232
- BgWidget.editeInput({
233
- gvc: gvc,
234
- title: html `<div class="d-flex flex-column">
235
- ${['結束號碼', BgWidget.grayNote('輸入零則無上限')].join('')}
236
- </div>`,
237
- default: vm.data.pickup_end || '0',
238
- callback: text => {
239
- vm.data.pickup_end = text;
240
- },
241
- placeHolder: '請輸入結束號碼',
242
- type: 'number',
243
- }),
244
- ];
245
- }
246
- else {
247
- return [];
248
- }
249
- })(),
250
- ].join(BgWidget.horizontalLine())}</div>`;
251
- },
252
- footer_html: gvc => {
253
- return [
254
- BgWidget.cancel(gvc.event(() => {
255
- gvc.closeDialog();
256
- })),
257
- BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
258
- dialog.dataLoading({ visible: true });
259
- yield vm.save_info();
260
- yield Promise.all(ShoppingInformation.saveArray.map(dd => dd()));
261
- ShoppingInformation.saveArray = [];
262
- dialog.dataLoading({ visible: false });
263
- dialog.successMessage({ text: '儲存成功' });
264
- gvc.closeDialog();
265
- }))),
266
- ].join('');
267
- },
268
- });
269
- }),
184
+ event: infoModule.pickUpMode(title),
270
185
  }));
271
186
  }
272
187
  function createCheckoutModeDialog(title, description) {
273
188
  return createRow(title, description, BgWidget.customButton({
274
189
  button: { color: 'snow', size: 'md' },
275
190
  text: { name: '編輯' },
276
- event: gvc.event(() => {
277
- const originData = structuredClone(vm.data);
278
- BgWidget.settingDialog({
279
- gvc,
280
- title,
281
- width: 600,
282
- innerHTML: gvc => {
283
- const modes = vm.data.checkout_mode;
284
- const arr = [
285
- {
286
- key: 'orderStatus',
287
- name: '訂單狀態',
288
- data: FilterOptions.orderStatusOptions,
289
- },
290
- {
291
- key: 'payload',
292
- name: '付款狀態',
293
- data: FilterOptions.payloadStatusOptions,
294
- },
295
- {
296
- key: 'progress',
297
- name: '出貨狀況',
298
- data: FilterOptions.progressOptions,
299
- },
300
- ];
301
- return html `${BgWidget.grayNote('提示:勾選項目後,該項目將會作為訂單累積與分析數據的篩選條件')}
302
- <div class="d-flex flex-column gap-1">
303
- ${arr
304
- .map(obj => {
305
- return BgWidget.inlineCheckBox({
306
- gvc,
307
- title: obj.name,
308
- def: modes[obj.key],
309
- array: obj.data.map(item => ({ title: item.name, value: item.key })),
310
- callback: (array) => {
311
- modes[obj.key] = array;
312
- },
313
- type: 'multiple',
314
- });
315
- })
316
- .join(BgWidget.mbContainer(12))}
317
- </div>`;
318
- },
319
- footer_html: gvc => {
320
- return [
321
- BgWidget.cancel(gvc.event(() => {
322
- vm.data = originData;
323
- gvc.closeDialog();
324
- })),
325
- BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
326
- dialog.dataLoading({ visible: true });
327
- yield vm.save_info();
328
- yield Promise.all(ShoppingInformation.saveArray.map(dd => dd()));
329
- ShoppingInformation.saveArray = [];
330
- dialog.dataLoading({ visible: false });
331
- dialog.successMessage({ text: '儲存成功' });
332
- gvc.closeDialog();
333
- }))),
334
- ].join('');
335
- },
336
- });
337
- }),
191
+ event: infoModule.checkoutMode(title),
338
192
  }));
339
193
  }
340
- function createRow(title, description, elem) {
341
- return html `
342
- ${BgWidget.horizontalLine({ margin: 0.5 })}
343
- <div class="d-flex align-items-center justify-content-between">
344
- <div class="d-flex flex-column" style="gap:8px;">${createSection(title, description)}</div>
345
- ${elem}
346
- </div>
347
- `;
194
+ function createInvoiceModeDialog(title, description) {
195
+ return createRow(title, description, BgWidget.customButton({
196
+ button: { color: 'snow', size: 'md' },
197
+ text: { name: '編輯' },
198
+ event: infoModule.invoiceMode(title),
199
+ }));
348
200
  }
349
201
  const typeMap = {
350
202
  basic: () => {
@@ -662,10 +514,12 @@ ${BgWidget.customButton({
662
514
  ${createToggle('啟用顧客評論功能', '顧客可以對您的商品進行評論', 'customer_comment')}
663
515
  ${createToggle('啟用 Cookie 聲明', '如需使用廣告追蹤行為,必須啟用 Cookie 聲明,才可發送廣告', 'cookie_check')}
664
516
  ${createToggle('顯示商品剩餘庫存', '啟用此功能,顧客會在商品頁面看到此商品剩餘的庫存數', 'stock_view')}
517
+ ${createToggle('線上商店開放預購商品', '啟用此功能,顧客可以在線上商店的商品無庫存時,進行預購', 'pre_order_status')}
665
518
  ${createToggle('商品卡片顯示區間價格', '啟用後,若商品有多個規格、不同價位,前台商品卡片將會使用價格區間來顯示,關閉則顯示該商品規格中最低價者', 'interval_price_card')}
666
519
  ${createToggle('單獨顯示商品特價', '啟用此功能,會將含有特價的商品價格或區間,單獨使用紅字顯示,關閉則採用刪改線的方式呈現特價', 'independent_special_price')}
667
520
  ${createPickUpModeDialog('取貨號碼', '針對特店取貨功能,開啟取貨號碼功能消費者需告知商家取貨號碼並前往特店取貨')}
668
521
  ${createCheckoutModeDialog('訂單結算模式', '設定訂單結算模式,可調整顧客累積消費金額、會員等級、數據分析的統計機制')}
522
+ ${createInvoiceModeDialog('發票開立時機', '設定發票開立的時機,可在商家想要的時間點,開立並發送訂單發票')}
669
523
  </div>
670
524
  `);
671
525
  },
@@ -5,7 +5,7 @@ import { ApiUser } from '../glitter-base/route/user.js';
5
5
  import { Currency } from '../glitter-base/global/currency.js';
6
6
  import { LanguageBackend } from './language-backend.js';
7
7
  import { GlobalUser } from '../glitter-base/global/global-user.js';
8
- import { FilterOptions } from './filter-options.js';
8
+ import { InformationModule, ViewModel } from './information/information-module.js';
9
9
 
10
10
  const html = String.raw;
11
11
 
@@ -16,21 +16,7 @@ export class ShoppingInformation {
16
16
  const glitter = gvc.glitter;
17
17
  const dialog = new ShareDialog(gvc.glitter);
18
18
 
19
- const vm: {
20
- id: string;
21
- tableId: string;
22
- filterId: string;
23
- type: 'basic' | 'function' | 'global';
24
- data: any;
25
- SEOData: any;
26
- domain: any;
27
- dataList: any;
28
- query?: string;
29
- mainLoading: boolean;
30
- SEOLoading: boolean;
31
- domainLoading: boolean;
32
- save_info: () => Promise<any>;
33
- } = {
19
+ const vm: ViewModel = {
34
20
  id: glitter.getUUID(),
35
21
  tableId: glitter.getUUID(),
36
22
  filterId: glitter.getUUID(),
@@ -165,6 +151,8 @@ export class ShoppingInformation {
165
151
  });
166
152
  }
167
153
 
154
+ const infoModule = new InformationModule(gvc, vm, ShoppingInformation);
155
+
168
156
  function createSection(title: string, description?: string) {
169
157
  return html`
170
158
  <div style="color: #393939; font-size: 16px;">${title}</div>
@@ -209,6 +197,16 @@ export class ShoppingInformation {
209
197
  );
210
198
  }
211
199
 
200
+ function createRow(title: string, description: string, elem: string) {
201
+ return html`
202
+ ${BgWidget.horizontalLine({ margin: 0.5 })}
203
+ <div class="d-flex align-items-center justify-content-between">
204
+ <div class="d-flex flex-column" style="gap:8px;">${createSection(title, description)}</div>
205
+ ${elem}
206
+ </div>
207
+ `;
208
+ }
209
+
212
210
  function createPickUpModeDialog(title: string, description: string) {
213
211
  return createRow(
214
212
  title,
@@ -216,106 +214,7 @@ export class ShoppingInformation {
216
214
  BgWidget.customButton({
217
215
  button: { color: 'snow', size: 'md' },
218
216
  text: { name: '編輯' },
219
- event: gvc.event(() => {
220
- BgWidget.settingDialog({
221
- gvc,
222
- title,
223
- width: 600,
224
- innerHTML: gvc => {
225
- return `<div class="d-flex flex-column" style="gap:5px;">${[
226
- html` <div class="d-flex align-items-center" style="gap:10px;">
227
- <div style="color: #393939; font-size: 16px;">啟用功能</div>
228
- <div class="cursor_pointer form-check form-switch m-0 p-0" style="min-width: 50px;">
229
- <input
230
- class="form-check-input m-0"
231
- type="checkbox"
232
- onchange="${gvc.event(() => {
233
- vm.data.pickup_mode = !vm.data.pickup_mode;
234
- gvc.recreateView();
235
- })}"
236
- ${vm.data.pickup_mode ? `checked` : ''}
237
- />
238
- </div>
239
- ${vm.data.pickup_mode ? `<div class="fw-bold fs-6 d-flex align-items-center">當前號碼 : ${vm.data.pickup_now || vm.data.pickup_start || 0}
240
- <div class="mx-2"></div>
241
- ${BgWidget.customButton({
242
- button:{
243
- color:'snow',
244
- size:'sm',
245
- },
246
- text:{
247
- name:'重置號碼'
248
- },
249
- event:gvc.event(()=>{
250
- const dialog=new ShareDialog(gvc.glitter);
251
- dialog.checkYesOrNot({
252
- text:'是否確認重置號碼?',
253
- callback:(response)=>{
254
- if(response){
255
- vm.data.pickup_now=vm.data.pickup_start || '0';
256
- gvc.recreateView()
257
- }
258
-
259
- }
260
- })
261
- })
262
- })}
263
- </div>`:``}
264
- </div>`,
265
- ...(() => {
266
- if (vm.data.pickup_mode) {
267
- return [
268
- BgWidget.editeInput({
269
- gvc: gvc,
270
- title: '初始號碼',
271
- default: vm.data.pickup_start || '0',
272
- callback: text => {
273
- vm.data.pickup_start = text;
274
- },
275
- placeHolder: '請輸入初始號碼',
276
- type: 'number',
277
- }),
278
- BgWidget.editeInput({
279
- gvc: gvc,
280
- title: html`<div class="d-flex flex-column">
281
- ${['結束號碼', BgWidget.grayNote('輸入零則無上限')].join('')}
282
- </div>`,
283
- default: vm.data.pickup_end || '0',
284
- callback: text => {
285
- vm.data.pickup_end = text;
286
- },
287
- placeHolder: '請輸入結束號碼',
288
- type: 'number',
289
- }),
290
- ];
291
- } else {
292
- return [];
293
- }
294
- })(),
295
- ].join(BgWidget.horizontalLine())}</div>`;
296
- },
297
- footer_html: gvc => {
298
- return [
299
- BgWidget.cancel(
300
- gvc.event(() => {
301
- gvc.closeDialog();
302
- })
303
- ),
304
- BgWidget.save(
305
- gvc.event(async () => {
306
- dialog.dataLoading({ visible: true });
307
- await vm.save_info();
308
- await Promise.all(ShoppingInformation.saveArray.map(dd => dd()));
309
- ShoppingInformation.saveArray = [];
310
- dialog.dataLoading({ visible: false });
311
- dialog.successMessage({ text: '儲存成功' });
312
- gvc.closeDialog()
313
- })
314
- ),
315
- ].join('');
316
- },
317
- });
318
- }),
217
+ event: infoModule.pickUpMode(title),
319
218
  })
320
219
  );
321
220
  }
@@ -327,85 +226,21 @@ ${BgWidget.customButton({
327
226
  BgWidget.customButton({
328
227
  button: { color: 'snow', size: 'md' },
329
228
  text: { name: '編輯' },
330
- event: gvc.event(() => {
331
- const originData = structuredClone(vm.data);
332
- BgWidget.settingDialog({
333
- gvc,
334
- title,
335
- width: 600,
336
- innerHTML: gvc => {
337
- const modes = vm.data.checkout_mode;
338
- const arr = [
339
- {
340
- key: 'orderStatus',
341
- name: '訂單狀態',
342
- data: FilterOptions.orderStatusOptions,
343
- },
344
- {
345
- key: 'payload',
346
- name: '付款狀態',
347
- data: FilterOptions.payloadStatusOptions,
348
- },
349
- {
350
- key: 'progress',
351
- name: '出貨狀況',
352
- data: FilterOptions.progressOptions,
353
- },
354
- ];
355
-
356
- return html`${BgWidget.grayNote('提示:勾選項目後,該項目將會作為訂單累積與分析數據的篩選條件')}
357
- <div class="d-flex flex-column gap-1">
358
- ${arr
359
- .map(obj => {
360
- return BgWidget.inlineCheckBox({
361
- gvc,
362
- title: obj.name,
363
- def: modes[obj.key],
364
- array: obj.data.map(item => ({ title: item.name, value: item.key })),
365
- callback: (array: any) => {
366
- modes[obj.key] = array;
367
- },
368
- type: 'multiple',
369
- });
370
- })
371
- .join(BgWidget.mbContainer(12))}
372
- </div>`;
373
- },
374
- footer_html: gvc => {
375
- return [
376
- BgWidget.cancel(
377
- gvc.event(() => {
378
- vm.data = originData;
379
- gvc.closeDialog();
380
- })
381
- ),
382
- BgWidget.save(
383
- gvc.event(async () => {
384
- dialog.dataLoading({ visible: true });
385
- await vm.save_info();
386
- await Promise.all(ShoppingInformation.saveArray.map(dd => dd()));
387
- ShoppingInformation.saveArray = [];
388
- dialog.dataLoading({ visible: false });
389
- dialog.successMessage({ text: '儲存成功' });
390
- gvc.closeDialog();
391
- })
392
- ),
393
- ].join('');
394
- },
395
- });
396
- }),
229
+ event: infoModule.checkoutMode(title),
397
230
  })
398
231
  );
399
232
  }
400
233
 
401
- function createRow(title: string, description: string, elem: string) {
402
- return html`
403
- ${BgWidget.horizontalLine({ margin: 0.5 })}
404
- <div class="d-flex align-items-center justify-content-between">
405
- <div class="d-flex flex-column" style="gap:8px;">${createSection(title, description)}</div>
406
- ${elem}
407
- </div>
408
- `;
234
+ function createInvoiceModeDialog(title: string, description: string) {
235
+ return createRow(
236
+ title,
237
+ description,
238
+ BgWidget.customButton({
239
+ button: { color: 'snow', size: 'md' },
240
+ text: { name: '編輯' },
241
+ event: infoModule.invoiceMode(title),
242
+ })
243
+ );
409
244
  }
410
245
 
411
246
  const typeMap: Record<string, () => string> = {
@@ -764,6 +599,11 @@ ${BgWidget.customButton({
764
599
  'cookie_check'
765
600
  )}
766
601
  ${createToggle('顯示商品剩餘庫存', '啟用此功能,顧客會在商品頁面看到此商品剩餘的庫存數', 'stock_view')}
602
+ ${createToggle(
603
+ '線上商店開放預購商品',
604
+ '啟用此功能,顧客可以在線上商店的商品無庫存時,進行預購',
605
+ 'pre_order_status'
606
+ )}
767
607
  ${createToggle(
768
608
  '商品卡片顯示區間價格',
769
609
  '啟用後,若商品有多個規格、不同價位,前台商品卡片將會使用價格區間來顯示,關閉則顯示該商品規格中最低價者',
@@ -782,6 +622,10 @@ ${BgWidget.customButton({
782
622
  '訂單結算模式',
783
623
  '設定訂單結算模式,可調整顧客累積消費金額、會員等級、數據分析的統計機制'
784
624
  )}
625
+ ${createInvoiceModeDialog(
626
+ '發票開立時機',
627
+ '設定發票開立的時機,可在商家想要的時間點,開立並發送訂單發票'
628
+ )}
785
629
  </div>
786
630
  `);
787
631
  },