ts-glitter 21.0.4 → 21.0.6

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 (164) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-blog.js +22 -37
  4. package/lowcode/backend-manager/bg-blog.ts +45 -34
  5. package/lowcode/backend-manager/bg-list-component.js +2 -2
  6. package/lowcode/backend-manager/bg-list-component.ts +2 -2
  7. package/lowcode/backend-manager/bg-widget.js +21 -0
  8. package/lowcode/backend-manager/bg-widget.ts +21 -0
  9. package/lowcode/cms-plugin/filter-options.js +3 -3
  10. package/lowcode/cms-plugin/filter-options.ts +1 -1
  11. package/lowcode/cms-plugin/pos-pages/models.ts +1 -0
  12. package/lowcode/cms-plugin/pos-pages/payment-page.js +74 -8
  13. package/lowcode/cms-plugin/pos-pages/payment-page.ts +98 -19
  14. package/lowcode/cms-plugin/product-service.js +2 -1
  15. package/lowcode/cms-plugin/product-service.ts +3 -2
  16. package/lowcode/cms-plugin/shopping-finance-setting.js +251 -6
  17. package/lowcode/cms-plugin/shopping-finance-setting.ts +291 -6
  18. package/lowcode/cms-plugin/shopping-order-manager.js +56 -46
  19. package/lowcode/cms-plugin/shopping-order-manager.ts +59 -47
  20. package/lowcode/cms-plugin/shopping-product-setting.js +10 -5
  21. package/lowcode/cms-plugin/shopping-product-setting.ts +14 -6
  22. package/lowcode/cms-plugin/shopping-setting-advance.js +21 -72
  23. package/lowcode/cms-plugin/shopping-setting-advance.ts +31 -98
  24. package/lowcode/css/editor.css +48 -16
  25. package/lowcode/css/front-end.css +16 -17
  26. package/lowcode/glitter-base/global/language.js +2 -0
  27. package/lowcode/glitter-base/global/language.ts +3 -0
  28. package/lowcode/glitter-base/global/shipment-config.js +4 -4
  29. package/lowcode/glitter-base/global/shipment-config.ts +1 -1
  30. package/lowcode/glitter-base/route/shopping.js +11 -0
  31. package/lowcode/glitter-base/route/shopping.ts +12 -0
  32. package/lowcode/official_view_component/form-widget/input-custom.js +0 -1
  33. package/lowcode/official_view_component/form-widget/input-custom.ts +0 -1
  34. package/lowcode/public-components/checkout/index.js +578 -780
  35. package/lowcode/public-components/checkout/index.ts +2457 -2652
  36. package/lowcode/public-components/headers/header-class.js +252 -324
  37. package/lowcode/public-components/headers/header-class.ts +389 -480
  38. package/lowcode/public-components/modules/cart-module.js +433 -0
  39. package/lowcode/public-components/modules/cart-module.ts +491 -0
  40. package/lowcode/public-components/modules/product-module.js +45 -0
  41. package/lowcode/public-components/modules/product-module.ts +58 -0
  42. package/lowcode/public-components/product/product-detail.js +178 -184
  43. package/lowcode/public-components/product/product-detail.ts +564 -579
  44. package/lowcode/public-components/user-manager/um-order.js +162 -32
  45. package/lowcode/public-components/user-manager/um-order.ts +181 -46
  46. package/lowcode/public-models/product.ts +1 -0
  47. package/package.json +1 -1
  48. package/src/Language.js +1 -0
  49. package/src/Language.js.map +1 -1
  50. package/src/Language.ts +3 -0
  51. package/src/api-public/controllers/article.js +33 -29
  52. package/src/api-public/controllers/article.js.map +1 -1
  53. package/src/api-public/controllers/article.ts +152 -146
  54. package/src/api-public/controllers/index.js +2 -0
  55. package/src/api-public/controllers/index.js.map +1 -1
  56. package/src/api-public/controllers/index.ts +2 -0
  57. package/src/api-public/controllers/shop.js +125 -47
  58. package/src/api-public/controllers/shop.js.map +1 -1
  59. package/src/api-public/controllers/shop.ts +148 -61
  60. package/src/api-public/controllers/user.js +51 -52
  61. package/src/api-public/controllers/user.js.map +1 -1
  62. package/src/api-public/controllers/user.ts +63 -52
  63. package/src/api-public/models/glitter-finance.js +2 -1
  64. package/src/api-public/models/glitter-finance.js.map +5 -1
  65. package/src/api-public/services/checkout-event.d.ts +1 -0
  66. package/src/api-public/services/checkout-event.js +38 -13
  67. package/src/api-public/services/checkout-event.js.map +1 -1
  68. package/src/api-public/services/checkout-event.ts +38 -10
  69. package/src/api-public/services/factories/payment-strategy-factory.d.ts +6 -0
  70. package/src/api-public/services/factories/payment-strategy-factory.js +49 -0
  71. package/src/api-public/services/factories/payment-strategy-factory.js.map +1 -0
  72. package/src/api-public/services/factories/payment-strategy-factory.ts +71 -0
  73. package/src/api-public/services/fb-service.js +4 -4
  74. package/src/api-public/services/fb-service.js.map +1 -1
  75. package/src/api-public/services/financial-service.d.ts +2 -1
  76. package/src/api-public/services/financial-service.js +48 -53
  77. package/src/api-public/services/financial-service.js.map +1 -1
  78. package/src/api-public/services/financial-service.ts +29 -38
  79. package/src/api-public/services/financial-serviceV2.d.ts +298 -0
  80. package/src/api-public/services/financial-serviceV2.js +1158 -0
  81. package/src/api-public/services/financial-serviceV2.js.map +1 -0
  82. package/src/api-public/services/financial-serviceV2.ts +1518 -0
  83. package/src/api-public/services/interface/payment-keys-interface.d.ts +37 -0
  84. package/src/api-public/services/interface/payment-keys-interface.js +3 -0
  85. package/src/api-public/services/interface/payment-keys-interface.js.map +1 -0
  86. package/src/api-public/services/interface/payment-keys-interface.ts +46 -0
  87. package/src/api-public/services/interface/payment-strategy-interface.d.ts +17 -0
  88. package/src/api-public/services/interface/payment-strategy-interface.js +3 -0
  89. package/src/api-public/services/interface/payment-strategy-interface.js.map +1 -0
  90. package/src/api-public/services/interface/payment-strategy-interface.ts +48 -0
  91. package/src/api-public/services/migrate-event/public-user-config.d.ts +5 -0
  92. package/src/api-public/services/migrate-event/public-user-config.js +81 -0
  93. package/src/api-public/services/migrate-event/public-user-config.js.map +1 -0
  94. package/src/api-public/services/migrate-event/public-user-config.ts +106 -0
  95. package/src/api-public/services/model/handlePaymentTransaction.js +0 -68
  96. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  97. package/src/api-public/services/model/handlePaymentTransaction.ts +62 -54
  98. package/src/api-public/services/monitor.d.ts +1 -0
  99. package/src/api-public/services/payment-service.d.ts +12 -0
  100. package/src/api-public/services/payment-service.js +83 -0
  101. package/src/api-public/services/payment-service.js.map +1 -0
  102. package/src/api-public/services/payment-service.ts +112 -0
  103. package/src/api-public/services/shopping.d.ts +2 -1
  104. package/src/api-public/services/shopping.js +60 -23
  105. package/src/api-public/services/shopping.js.map +1 -1
  106. package/src/api-public/services/shopping.ts +88 -16
  107. package/src/api-public/services/strategies/ecpay-strategy.d.ts +8 -0
  108. package/src/api-public/services/strategies/ecpay-strategy.js +26 -0
  109. package/src/api-public/services/strategies/ecpay-strategy.js.map +1 -0
  110. package/src/api-public/services/strategies/ecpay-strategy.ts +30 -0
  111. package/src/api-public/services/strategies/ezpay-strategy.d.ts +8 -0
  112. package/src/api-public/services/strategies/ezpay-strategy.js +26 -0
  113. package/src/api-public/services/strategies/ezpay-strategy.js.map +1 -0
  114. package/src/api-public/services/strategies/ezpay-strategy.ts +31 -0
  115. package/src/api-public/services/strategies/jkopay-strategy.d.ts +8 -0
  116. package/src/api-public/services/strategies/jkopay-strategy.js +32 -0
  117. package/src/api-public/services/strategies/jkopay-strategy.js.map +1 -0
  118. package/src/api-public/services/strategies/jkopay-strategy.ts +36 -0
  119. package/src/api-public/services/strategies/linepay-strategy.d.ts +8 -0
  120. package/src/api-public/services/strategies/linepay-strategy.js +32 -0
  121. package/src/api-public/services/strategies/linepay-strategy.js.map +1 -0
  122. package/src/api-public/services/strategies/linepay-strategy.ts +35 -0
  123. package/src/api-public/services/strategies/paynow-strategy.d.ts +8 -0
  124. package/src/api-public/services/strategies/paynow-strategy.js +26 -0
  125. package/src/api-public/services/strategies/paynow-strategy.js.map +1 -0
  126. package/src/api-public/services/strategies/paynow-strategy.ts +29 -0
  127. package/src/api-public/services/strategies/paypal-strategy.d.ts +8 -0
  128. package/src/api-public/services/strategies/paypal-strategy.js +28 -0
  129. package/src/api-public/services/strategies/paypal-strategy.js.map +1 -0
  130. package/src/api-public/services/strategies/paypal-strategy.ts +31 -0
  131. package/src/api-public/services/updated-table-checked.d.ts +1 -0
  132. package/src/api-public/services/updated-table-checked.js +37 -15
  133. package/src/api-public/services/updated-table-checked.js.map +1 -1
  134. package/src/api-public/services/updated-table-checked.ts +56 -36
  135. package/src/api-public/utils/ut-permission.d.ts +1 -0
  136. package/src/app-project/serverless/src/index.js +17 -7
  137. package/src/app-project/serverless/src/index.js.map +1 -1
  138. package/src/app-project/serverless/src/modules/CryptoJS.js +17 -7
  139. package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
  140. package/src/app-project/serverless/src/modules/ssh.js +17 -7
  141. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  142. package/src/config.d.ts +1 -1
  143. package/src/modules/AWSLib.js +3 -2
  144. package/src/modules/AWSLib.js.map +1 -1
  145. package/src/modules/CryptoJS.js +17 -7
  146. package/src/modules/CryptoJS.js.map +1 -1
  147. package/src/modules/database.d.ts +1 -1
  148. package/src/modules/redis.d.ts +1 -1
  149. package/src/modules/ssh.js +17 -7
  150. package/src/modules/ssh.js.map +1 -1
  151. package/src/modules/tool.d.ts +4 -4
  152. package/src/modules/tool.js +2 -1
  153. package/src/modules/tool.js.map +1 -1
  154. package/src/run.js +2 -1
  155. package/src/run.js.map +1 -1
  156. package/src/services/create-instance.js +4 -3
  157. package/src/services/create-instance.js.map +1 -1
  158. package/src/services/saas-table-check.js +2 -2
  159. package/src/services/saas-table-check.js.map +5 -1
  160. package/src/services/tool.js +3 -2
  161. package/src/services/tool.js.map +1 -1
  162. package/vp00rqhw1r.json +1 -0
  163. package/src/api-public/services/product-migrate.d.ts +0 -8
  164. package/src/api-public/services/product-migrate.js.map +0 -1
@@ -16,6 +16,7 @@ import { FormWidget } from '../../official_view_component/official/form.js';
16
16
  import { Language } from '../../glitter-base/global/language.js';
17
17
  import { CheckInput } from '../../modules/checkInput.js';
18
18
  import { ShipmentConfig } from '../../glitter-base/global/shipment-config.js';
19
+ import { Animation } from '../../glitterBundle/module/Animation.js';
19
20
  const html = String.raw;
20
21
  const css = String.raw;
21
22
  export class UMOrder {
@@ -201,20 +202,33 @@ export class UMOrder {
201
202
  `);
202
203
  }
203
204
  static executePayment(gvc, payment_method, res) {
205
+ var _a, _b, _c, _d;
206
+ const dialog = new ShareDialog(gvc.glitter);
207
+ function showPayError() {
208
+ dialog.infoMessage({
209
+ text: '系統處理您的付款時遇到一些問題,導致交易未能完成。請聯繫我們的客服團隊以取得進一步的協助',
210
+ });
211
+ }
212
+ if (res.result == false) {
213
+ showPayError();
214
+ return;
215
+ }
204
216
  switch (payment_method) {
205
217
  case 'line_pay':
206
218
  if (gvc.glitter.share.is_application) {
207
219
  gvc.glitter.runJsInterFace('intent_url', {
208
- url: res.response.info.paymentUrl.app,
220
+ url: res.response.responseData.info.paymentUrl.app,
209
221
  }, () => { });
210
222
  }
211
223
  else {
212
- console.log("test -");
213
224
  location.href = res.response.info.paymentUrl.web;
214
225
  }
215
226
  break;
216
227
  case 'paypal': {
217
- location.href = res.response.approveLink;
228
+ if (res.response.approveLink) {
229
+ location.href = res.response.approveLink;
230
+ }
231
+ showPayError();
218
232
  break;
219
233
  }
220
234
  case 'jkopay': {
@@ -228,6 +242,111 @@ export class UMOrder {
228
242
  }
229
243
  break;
230
244
  }
245
+ case 'paynow': {
246
+ if (!((_d = (_c = (_b = (_a = res.response) === null || _a === void 0 ? void 0 : _a.responseData) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.secret)) {
247
+ return 'paynow API失敗';
248
+ }
249
+ gvc.glitter.innerDialog((gvc) => {
250
+ document.body.style.setProperty('overflow-y', 'hidden', 'important');
251
+ gvc.addStyle(css `
252
+ .button-bgr {
253
+ width: 100%;
254
+ border: 0;
255
+ border-radius: 0.375rem;
256
+ height: 40px;
257
+ background: #393939;
258
+ padding: 0 24px;
259
+ margin: 18px 0;
260
+ }
261
+ .button-text {
262
+ color: #fff;
263
+ font-size: 16px;
264
+ }
265
+ `);
266
+ return gvc.bindView({
267
+ bind: `paynow`,
268
+ view: () => {
269
+ return html ` <div class="w-100 h-100 d-flex align-items-center justify-content-center">
270
+ ${document.body.clientWidth < 800
271
+ ? `
272
+ <div class="bg-white position-relative vw-100" style="height: ${window.innerHeight}px;overflow-y: auto;
273
+ padding-top:${50 + gvc.glitter.share.top_inset}px;
274
+ ">
275
+ `
276
+ : `<div class="p-3 bg-white position-relative" style="max-height: calc(100vh - 90px);overflow-y:auto;">`}
277
+ <div
278
+ style="position: absolute; right: 15px;top:${15 + gvc.glitter.share.top_inset}px;z-index:1;"
279
+ onclick="${gvc.event(() => {
280
+ gvc.closeDialog();
281
+ })}"
282
+ >
283
+ <i class="fa-regular fa-circle-xmark fs-5 text-dark cursor_pointer"></i>
284
+ </div>
285
+ <div id="paynow-container" class="" style="">
286
+ <div style="width:200px;height:200px;">loading...</div>
287
+ </div>
288
+ <div class="px-3 px-sm-0 w-100">
289
+ <button
290
+ class="button-bgr"
291
+ id="checkoutButton"
292
+ onclick="${gvc.event(() => {
293
+ const PayNow = window.PayNow;
294
+ const dialog = new ShareDialog(gvc.glitter);
295
+ dialog.dataLoading({ visible: true });
296
+ PayNow.checkout().then((response) => {
297
+ dialog.dataLoading({ visible: false });
298
+ if (response.error) {
299
+ dialog.errorMessage({
300
+ text: response.error.message,
301
+ });
302
+ }
303
+ });
304
+ })}"
305
+ >
306
+ <span class="button-text">確認結帳</span>
307
+ </button>
308
+ </div>
309
+ </div>`;
310
+ },
311
+ divCreate: {
312
+ class: ` h-100 d-flex align-items-center justify-content-center`,
313
+ style: `max-width:100vw;${document.body.clientWidth < 800 ? 'width:100%;' : 'width:400px;'};`,
314
+ },
315
+ onCreate: () => {
316
+ var _a, _b;
317
+ const publicKey = (_a = res.response) === null || _a === void 0 ? void 0 : _a.responseData.publicKey;
318
+ const secret = (_b = res.response) === null || _b === void 0 ? void 0 : _b.responseData.data.result.secret;
319
+ const env = res.response.responseData.BETA == 'true' ? 'sandbox' : 'production';
320
+ const PayNow = window.PayNow;
321
+ PayNow.createPayment({
322
+ publicKey: publicKey,
323
+ secret: secret,
324
+ env: env,
325
+ });
326
+ PayNow.mount('#paynow-container', {
327
+ locale: 'zh_tw',
328
+ appearance: {
329
+ variables: {
330
+ fontFamily: 'monospace',
331
+ colorPrimary: '#0078ab',
332
+ colorDefault: '#0a0a0a',
333
+ colorBorder: '#cccccc',
334
+ colorPlaceholder: '#eeeeee',
335
+ borderRadius: '.3rem',
336
+ colorDanger: '#ff3d3d',
337
+ },
338
+ },
339
+ });
340
+ },
341
+ });
342
+ }, `paynow`, {
343
+ animation: document.body.clientWidth > 800 ? Animation.fade : Animation.popup,
344
+ dismiss: () => {
345
+ document.body.style.setProperty('overflow-y', 'auto');
346
+ },
347
+ });
348
+ break;
349
+ }
231
350
  default: {
232
351
  const id = gvc.glitter.getUUID();
233
352
  $('body').append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
@@ -244,25 +363,9 @@ export class UMOrder {
244
363
  return new Promise(() => {
245
364
  ApiShop.repay(id, url.href).then(res => {
246
365
  dialog.dataLoading({ visible: false });
366
+ orderData.payment_method;
247
367
  this.executePayment(gvc, orderData.payment_method, res);
248
368
  dialog.dataLoading({ visible: false });
249
- switch (orderData.payment_method) {
250
- case 'line_pay':
251
- if (gvc.glitter.share.is_application) {
252
- gvc.glitter.runJsInterFace('intent_url', {
253
- url: res.response.info.paymentUrl.app,
254
- }, () => { });
255
- }
256
- else {
257
- location.href = res.response.info.paymentUrl.web;
258
- }
259
- break;
260
- default: {
261
- const id = gvc.glitter.getUUID();
262
- $('body').append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
263
- document.querySelector(`#${id} #submit`).click();
264
- }
265
- }
266
369
  return;
267
370
  });
268
371
  });
@@ -287,6 +390,11 @@ export class UMOrder {
287
390
  }
288
391
  static main(gvc, widget, subData) {
289
392
  this.addStyle(gvc);
393
+ gvc.addMtScript([
394
+ {
395
+ src: `https://js.paynow.com.tw/sdk/v2/index.js?v=20250430`,
396
+ },
397
+ ], () => { }, () => { });
290
398
  UmClass.addStyle(gvc);
291
399
  const glitter = gvc.glitter;
292
400
  const dialog = new ShareDialog(gvc.glitter);
@@ -702,7 +810,7 @@ export class UMOrder {
702
810
  };
703
811
  }),
704
812
  content_type: 'product',
705
- eventID: orderData.orderID
813
+ eventID: orderData.orderID,
706
814
  });
707
815
  Ad.gtagEvent('purchase', {
708
816
  transaction_id: vm.data.cart_token,
@@ -792,23 +900,44 @@ export class UMOrder {
792
900
  }
793
901
  })(),
794
902
  },
903
+ {
904
+ title: Language.text('payment_method'),
905
+ value: Language.text(orderData.customer_info.payment_select),
906
+ },
795
907
  {
796
908
  title: Language.text('payment_status'),
797
909
  value: (() => {
798
- var _a, _b;
910
+ var _a, _b, _c, _d;
799
911
  if (orderData.customer_info.payment_select === 'cash_on_delivery') {
800
912
  return Language.text('cash_on_delivery');
801
913
  }
914
+ const repayBtn = () => {
915
+ return html ` <span class="payment-actions ">
916
+ <button
917
+ class="customer-btn-text ms-3"
918
+ id="repay-button"
919
+ onclick="${gvc.event(() => {
920
+ UMOrder.repay(gvc, vm.data).then(r => { });
921
+ })}"
922
+ >
923
+ 重新付款
924
+ </button>
925
+ </span>`;
926
+ };
802
927
  switch (vm.data.status) {
803
928
  case 0:
804
929
  if (repayArray.includes((_b = (_a = vm.data) === null || _a === void 0 ? void 0 : _a.payment_method) !== null && _b !== void 0 ? _b : '')) {
805
930
  const repayBtn = () => {
806
- return html `
807
- <span class="payment-actions d-none">
808
- <button class="customer-btn-text ms-3" id="repay-button" onclick="${gvc.event(() => {
809
- UMOrder.repay(gvc, vm.data).then(r => {
810
- });
811
- })}">重新付款</button>
931
+ return html ` <span class="payment-actions d-none">
932
+ <button
933
+ class="customer-btn-text ms-3"
934
+ id="repay-button"
935
+ onclick="${gvc.event(() => {
936
+ UMOrder.repay(gvc, vm.data).then(r => { });
937
+ })}"
938
+ >
939
+ 重新付款
940
+ </button>
812
941
  </span>`;
813
942
  };
814
943
  return Language.text('awaiting_verification') + repayBtn();
@@ -819,6 +948,9 @@ export class UMOrder {
819
948
  case 1:
820
949
  return Language.text('paid');
821
950
  case -1:
951
+ if (repayArray.includes((_d = (_c = vm.data) === null || _c === void 0 ? void 0 : _c.payment_method) !== null && _d !== void 0 ? _d : '')) {
952
+ return Language.text('payment_failed') + repayBtn();
953
+ }
822
954
  return Language.text('payment_failed');
823
955
  case -2:
824
956
  return Language.text('refunded');
@@ -966,10 +1098,8 @@ export class UMOrder {
966
1098
  orderData.user_info.area,
967
1099
  orderData.user_info.address,
968
1100
  ]
969
- .filter(dd => {
970
- return dd;
971
- })
972
- .join(','),
1101
+ .filter(Boolean)
1102
+ .join(''),
973
1103
  });
974
1104
  }
975
1105
  arr.push({
@@ -9,6 +9,7 @@ import { FormWidget } from '../../official_view_component/official/form.js';
9
9
  import { Language } from '../../glitter-base/global/language.js';
10
10
  import { CheckInput } from '../../modules/checkInput.js';
11
11
  import { ShipmentConfig } from '../../glitter-base/global/shipment-config.js';
12
+ import { Animation } from '../../glitterBundle/module/Animation.js';
12
13
 
13
14
  const html = String.raw;
14
15
  const css = String.raw;
@@ -439,27 +440,41 @@ export class UMOrder {
439
440
  }
440
441
  `);
441
442
  }
442
- static executePayment(gvc:GVC,payment_method:string , res: any) {
443
- switch (payment_method){
443
+
444
+ static executePayment(gvc: GVC, payment_method: string, res: any) {
445
+ const dialog = new ShareDialog(gvc.glitter);
446
+
447
+ function showPayError() {
448
+ dialog.infoMessage({
449
+ text: '系統處理您的付款時遇到一些問題,導致交易未能完成。請聯繫我們的客服團隊以取得進一步的協助',
450
+ });
451
+ }
452
+
453
+ if (res.result == false) {
454
+ showPayError();
455
+ return;
456
+ }
457
+ switch (payment_method) {
444
458
  case 'line_pay':
445
459
  if (gvc.glitter.share.is_application) {
446
460
  gvc.glitter.runJsInterFace(
447
461
  'intent_url',
448
462
  {
449
- url: res.response.info.paymentUrl.app,
463
+ url: res.response.responseData.info.paymentUrl.app,
450
464
  },
451
465
  () => {}
452
466
  );
453
467
  } else {
454
- console.log("test -");
455
468
  location.href = res.response.info.paymentUrl.web;
456
469
  }
457
- break
458
- case 'paypal':{
459
- location.href = res.response.approveLink;
460
470
  break;
471
+ case 'paypal': {
472
+ if (res.response.approveLink) {
473
+ location.href = res.response.approveLink;
474
+ }
475
+ showPayError();break;
461
476
  }
462
- case 'jkopay':{
477
+ case 'jkopay': {
463
478
  if (gvc.glitter.share.is_application) {
464
479
  gvc.glitter.runJsInterFace(
465
480
  'intent_url',
@@ -471,15 +486,127 @@ export class UMOrder {
471
486
  } else {
472
487
  location.href = res.response.result_object.payment_url;
473
488
  }
474
- break
489
+ break;
475
490
  }
476
- default :{
491
+ case 'paynow': {
492
+ if (!res.response?.responseData?.data?.result?.secret) {
493
+ return 'paynow API失敗';
494
+ }
495
+ gvc.glitter.innerDialog(
496
+ (gvc: GVC) => {
497
+ document.body.style.setProperty('overflow-y', 'hidden', 'important');
498
+ gvc.addStyle(css`
499
+ .button-bgr {
500
+ width: 100%;
501
+ border: 0;
502
+ border-radius: 0.375rem;
503
+ height: 40px;
504
+ background: #393939;
505
+ padding: 0 24px;
506
+ margin: 18px 0;
507
+ }
508
+ .button-text {
509
+ color: #fff;
510
+ font-size: 16px;
511
+ }
512
+ `);
513
+ return gvc.bindView({
514
+ bind: `paynow`,
515
+ view: () => {
516
+ return html` <div class="w-100 h-100 d-flex align-items-center justify-content-center">
517
+ ${document.body.clientWidth < 800
518
+ ? `
519
+ <div class="bg-white position-relative vw-100" style="height: ${window.innerHeight}px;overflow-y: auto;
520
+ padding-top:${50 + gvc.glitter.share.top_inset}px;
521
+ ">
522
+ `
523
+ : `<div class="p-3 bg-white position-relative" style="max-height: calc(100vh - 90px);overflow-y:auto;">`}
524
+ <div
525
+ style="position: absolute; right: 15px;top:${15 + gvc.glitter.share.top_inset}px;z-index:1;"
526
+ onclick="${gvc.event(() => {
527
+ gvc.closeDialog();
528
+ })}"
529
+ >
530
+ <i class="fa-regular fa-circle-xmark fs-5 text-dark cursor_pointer"></i>
531
+ </div>
532
+ <div id="paynow-container" class="" style="">
533
+ <div style="width:200px;height:200px;">loading...</div>
534
+ </div>
535
+ <div class="px-3 px-sm-0 w-100">
536
+ <button
537
+ class="button-bgr"
538
+ id="checkoutButton"
539
+ onclick="${gvc.event(() => {
540
+ // const inputGroup = document.querySelector('#paynow-container');
541
+ // console.log("inputGroup -- " , inputGroup)
542
+ const PayNow = (window as any).PayNow;
543
+ const dialog = new ShareDialog(gvc.glitter);
544
+ dialog.dataLoading({ visible: true });
545
+ PayNow.checkout().then((response: any) => {
546
+ dialog.dataLoading({ visible: false });
547
+ if (response.error) {
548
+ dialog.errorMessage({
549
+ text: response.error.message,
550
+ });
551
+ }
552
+ });
553
+ })}"
554
+ >
555
+ <span class="button-text">確認結帳</span>
556
+ </button>
557
+ </div>
558
+ </div>`;
559
+ },
560
+ divCreate: {
561
+ class: ` h-100 d-flex align-items-center justify-content-center`,
562
+ style: `max-width:100vw;${document.body.clientWidth < 800 ? 'width:100%;' : 'width:400px;'};`,
563
+ },
564
+ onCreate: () => {
565
+ const publicKey = res.response?.responseData.publicKey;
566
+ const secret = res.response?.responseData.data.result.secret;
567
+ const env = res.response.responseData.BETA == 'true' ? 'sandbox' : 'production';
568
+ // res.response.result.secret
569
+ const PayNow = (window as any).PayNow;
570
+ PayNow.createPayment({
571
+ publicKey: publicKey,
572
+ secret: secret,
573
+ env: env,
574
+ });
575
+ PayNow.mount('#paynow-container', {
576
+ locale: 'zh_tw',
577
+ appearance: {
578
+ variables: {
579
+ fontFamily: 'monospace',
580
+ colorPrimary: '#0078ab',
581
+ colorDefault: '#0a0a0a',
582
+ colorBorder: '#cccccc',
583
+ colorPlaceholder: '#eeeeee',
584
+ borderRadius: '.3rem',
585
+ colorDanger: '#ff3d3d',
586
+ },
587
+ },
588
+ });
589
+ },
590
+ });
591
+ },
592
+ `paynow`,
593
+ {
594
+ animation: document.body.clientWidth > 800 ? Animation.fade : Animation.popup,
595
+ dismiss: () => {
596
+ document.body.style.setProperty('overflow-y', 'auto');
597
+ },
598
+ }
599
+ );
600
+ break;
601
+ }
602
+ default: {
477
603
  const id = gvc.glitter.getUUID();
478
604
  $('body').append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
479
605
  (document.querySelector(`#${id} #submit`) as any).click();
480
606
  }
481
607
  }
482
608
  }
609
+
483
610
  static repay(gvc: GVC, orderData: any) {
484
611
  const id = orderData.cart_token;
485
612
  const dialog = new ShareDialog(gvc.glitter);
@@ -488,33 +615,11 @@ export class UMOrder {
488
615
  const url = new URL(redirect as any, location.href);
489
616
  return new Promise(() => {
490
617
  ApiShop.repay(id, url.href).then(res => {
491
-
492
618
  dialog.dataLoading({ visible: false });
493
- this.executePayment(gvc , orderData.payment_method , res);
494
-
619
+ orderData.payment_method;
620
+ this.executePayment(gvc, orderData.payment_method, res);
495
621
 
496
622
  dialog.dataLoading({ visible: false });
497
- switch (orderData.payment_method) {
498
- case 'line_pay':
499
- if (gvc.glitter.share.is_application) {
500
- gvc.glitter.runJsInterFace(
501
- 'intent_url',
502
- {
503
- url: res.response.info.paymentUrl.app,
504
- },
505
- () => {}
506
- );
507
- // location.href = res.response.info.paymentUrl.app;
508
- } else {
509
- location.href = res.response.info.paymentUrl.web;
510
- }
511
- break;
512
- default: {
513
- const id = gvc.glitter.getUUID();
514
- $('body').append(`<div id="${id}" style="display: none;">${res.response.form}</div>`);
515
- (document.querySelector(`#${id} #submit`) as any).click();
516
- }
517
- }
518
623
  return;
519
624
  });
520
625
  });
@@ -752,6 +857,15 @@ export class UMOrder {
752
857
 
753
858
  static main(gvc: GVC, widget: any, subData: any) {
754
859
  this.addStyle(gvc);
860
+ gvc.addMtScript(
861
+ [
862
+ {
863
+ src: `https://js.paynow.com.tw/sdk/v2/index.js?v=20250430`,
864
+ },
865
+ ],
866
+ () => {},
867
+ () => {}
868
+ );
755
869
  UmClass.addStyle(gvc);
756
870
  const glitter = gvc.glitter;
757
871
  const dialog = new ShareDialog(gvc.glitter);
@@ -1202,7 +1316,7 @@ export class UMOrder {
1202
1316
  };
1203
1317
  }),
1204
1318
  content_type: 'product',
1205
- eventID:orderData.orderID
1319
+ eventID: orderData.orderID,
1206
1320
  });
1207
1321
  Ad.gtagEvent('purchase', {
1208
1322
  transaction_id: vm.data.cart_token,
@@ -1298,23 +1412,43 @@ export class UMOrder {
1298
1412
  }
1299
1413
  })(),
1300
1414
  },
1415
+ {
1416
+ title: Language.text('payment_method'),
1417
+ value: Language.text(orderData.customer_info.payment_select),
1418
+ },
1301
1419
  {
1302
1420
  title: Language.text('payment_status'),
1303
1421
  value: (() => {
1304
1422
  if (orderData.customer_info.payment_select === 'cash_on_delivery') {
1305
1423
  return Language.text('cash_on_delivery');
1306
1424
  }
1425
+ const repayBtn = () => {
1426
+ return html` <span class="payment-actions ">
1427
+ <button
1428
+ class="customer-btn-text ms-3"
1429
+ id="repay-button"
1430
+ onclick="${gvc.event(() => {
1431
+ UMOrder.repay(gvc, vm.data).then(r => {});
1432
+ })}"
1433
+ >
1434
+ 重新付款
1435
+ </button>
1436
+ </span>`;
1437
+ };
1307
1438
  switch (vm.data.status) {
1308
1439
  case 0:
1309
1440
  if (repayArray.includes(vm.data?.payment_method ?? '')) {
1310
1441
  const repayBtn = () => {
1311
- return html`
1312
- <span class="payment-actions d-none">
1313
- <button class="customer-btn-text ms-3" id="repay-button" onclick="${gvc.event(()=>{
1314
- UMOrder.repay(gvc, vm.data).then(r => {
1315
-
1316
- });
1317
- })}">重新付款</button>
1442
+ return html` <span class="payment-actions d-none">
1443
+ <button
1444
+ class="customer-btn-text ms-3"
1445
+ id="repay-button"
1446
+ onclick="${gvc.event(() => {
1447
+ UMOrder.repay(gvc, vm.data).then(r => {});
1448
+ })}"
1449
+ >
1450
+ 重新付款
1451
+ </button>
1318
1452
  </span>`;
1319
1453
  };
1320
1454
  return Language.text('awaiting_verification') + repayBtn();
@@ -1325,6 +1459,9 @@ export class UMOrder {
1325
1459
  case 1:
1326
1460
  return Language.text('paid');
1327
1461
  case -1:
1462
+ if (repayArray.includes(vm.data?.payment_method ?? '')) {
1463
+ return Language.text('payment_failed') + repayBtn();
1464
+ }
1328
1465
  return Language.text('payment_failed');
1329
1466
  case -2:
1330
1467
  return Language.text('refunded');
@@ -1486,10 +1623,8 @@ export class UMOrder {
1486
1623
  (orderData.user_info as any).area,
1487
1624
  orderData.user_info.address,
1488
1625
  ]
1489
- .filter(dd => {
1490
- return dd;
1491
- })
1492
- .join(','),
1626
+ .filter(Boolean)
1627
+ .join(''),
1493
1628
  });
1494
1629
  }
1495
1630
  arr.push({
@@ -118,6 +118,7 @@ export interface Product {
118
118
  legacy_by_with?: string[];
119
119
  designated_logistics: {
120
120
  type: 'all' | 'designated';
121
+ group: string[];
121
122
  list: string[];
122
123
  };
123
124
  about_vouchers: VoucherContent[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-glitter",
3
- "version": "21.0.4",
3
+ "version": "21.0.6",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/Language.js CHANGED
@@ -471,6 +471,7 @@ class Language {
471
471
  { key: 'order_status', tw: '訂單狀態', cn: '订单状态', en: 'OrderEvent Status' },
472
472
  { key: 'no_number_order', tw: '無編號訂單', cn: '无编号订单', en: 'No Number OrderEvent' },
473
473
  { key: 'unpaid', tw: '尚未付款', cn: '尚未付款', en: 'Unpaid' },
474
+ { key: 'payment_method', tw: '付款方式', cn: '付款方式', en: 'Payment Method' },
474
475
  { key: 'shipping', tw: '配送中', cn: '配送中', en: 'Shipping' },
475
476
  { key: 'delivered', tw: '已送達', cn: '已送达', en: 'Delivered' },
476
477
  { key: 'preparing', tw: '準備中', cn: '准备中', en: 'Preparing' },