ts-glitter 17.2.0 → 17.2.2

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 (45) hide show
  1. package/ed8x60j4nn.json +1 -0
  2. package/gkh2p2jhta.json +1 -0
  3. package/lowcode/Entry.js +1 -1
  4. package/lowcode/Entry.ts +1 -1
  5. package/lowcode/cms-plugin/pos-pages/models.js +18 -15
  6. package/lowcode/cms-plugin/pos-pages/models.ts +30 -25
  7. package/lowcode/cms-plugin/pos-pages/payment-function.js +53 -57
  8. package/lowcode/cms-plugin/pos-pages/payment-function.ts +92 -100
  9. package/lowcode/form-view/editor/image-selector.js +7 -3
  10. package/lowcode/form-view/editor/image-selector.ts +75 -69
  11. package/lowcode/glitter-base/route/shopping.js +2 -0
  12. package/lowcode/glitter-base/route/shopping.ts +6 -4
  13. package/lowcode/official_view_component/official/component.js +1 -3
  14. package/lowcode/official_view_component/official/component.ts +3 -4
  15. package/lowcode/public-components/footer/footer-01.js +1 -1
  16. package/lowcode/public-components/footer/footer-01.ts +1 -1
  17. package/lowcode/public-components/footer/footer-02.js +1 -1
  18. package/lowcode/public-components/footer/footer-02.ts +1 -1
  19. package/lowcode/public-components/footer/footer-03.js +1 -1
  20. package/lowcode/public-components/footer/footer-03.ts +1 -1
  21. package/lowcode/public-components/product/pd-card-01.js +22 -11
  22. package/lowcode/public-components/product/pd-card-01.ts +23 -11
  23. package/lowcode/public-components/product/pd-card-02.js +22 -11
  24. package/lowcode/public-components/product/pd-card-02.ts +22 -11
  25. package/lowcode/public-components/product/pd-card-03.js +22 -11
  26. package/lowcode/public-components/product/pd-card-03.ts +23 -11
  27. package/lowcode/public-components/product/product-detail.js +7 -0
  28. package/lowcode/public-components/product/product-detail.ts +5 -1
  29. package/lowcode/public-components/user-manager/um-voucher.ts +1 -0
  30. package/package.json +1 -1
  31. package/src/api-public/controllers/shop.js +44 -33
  32. package/src/api-public/controllers/shop.js.map +1 -1
  33. package/src/api-public/controllers/shop.ts +54 -35
  34. package/src/api-public/services/shopping.d.ts +2 -1
  35. package/src/api-public/services/shopping.js +110 -109
  36. package/src/api-public/services/shopping.js.map +1 -1
  37. package/src/api-public/services/shopping.ts +174 -117
  38. package/src/index.js +1 -0
  39. package/src/index.js.map +1 -1
  40. package/src/index.ts +1 -0
  41. package/src/seo-config.d.ts +1 -0
  42. package/src/seo-config.js +40 -1
  43. package/src/seo-config.js.map +1 -1
  44. package/src/seo-config.ts +46 -3
  45. package/src/services/page.ts +0 -1
@@ -52,6 +52,7 @@ const app_1 = __importDefault(require("../../app"));
52
52
  const glitter_finance_js_1 = require("../models/glitter-finance.js");
53
53
  const app_js_1 = require("../../services/app.js");
54
54
  const stock_1 = require("./stock");
55
+ const seo_config_js_1 = require("../../seo-config.js");
55
56
  class Shopping {
56
57
  constructor(app, token) {
57
58
  this.app = app;
@@ -368,6 +369,9 @@ class Shopping {
368
369
  dd.content.seo.domain === decodeURIComponent(query.domain));
369
370
  }) || products.data[0];
370
371
  }
372
+ if ((query.domain || query.id)) {
373
+ products.data.json_ld = await seo_config_js_1.SeoConfig.getProductJsonLd(this.app, products.data.content);
374
+ }
371
375
  return products;
372
376
  }
373
377
  catch (e) {
@@ -595,7 +599,7 @@ class Shopping {
595
599
  }
596
600
  }
597
601
  async toCheckout(data, type = 'add', replace_order_id) {
598
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
602
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
599
603
  const check_time = new Date().getTime();
600
604
  try {
601
605
  data.line_items = (_a = (data.line_items || data.lineItems)) !== null && _a !== void 0 ? _a : [];
@@ -621,9 +625,7 @@ class Shopping {
621
625
  }
622
626
  }
623
627
  if (data.order_id && type === 'POS') {
624
- const order = (await database_js_1.default.query(`select *
625
- from \`${this.app}\`.t_checkout
626
- where cart_token = '${data.order_id}'`, []))[0];
628
+ const order = (await database_js_1.default.query(`SELECT * FROM \`${this.app}\`.t_checkout WHERE cart_token = ?`, [data.order_id]))[0];
627
629
  if (order) {
628
630
  for (const b of order.orderData.lineItems) {
629
631
  const pdDqlData = (await this.getProduct({
@@ -634,23 +636,24 @@ class Shopping {
634
636
  channel: data.checkOutType === 'POS' ? 'pos' : undefined,
635
637
  })).data;
636
638
  const pd = pdDqlData.content;
637
- const variant = pd.variants.find((dd) => {
638
- return dd.spec.join('-') === b.spec.join('-');
639
- });
640
- Object.keys(b.deduction_log).map((dd) => {
641
- try {
642
- variant.stockList[dd].count += b.deduction_log[dd];
643
- }
644
- catch (e) { }
645
- });
639
+ const variant = pd.variants.find((dd) => dd.spec.join('-') === b.spec.join('-'));
640
+ updateStock(variant, b.deduction_log);
646
641
  await this.updateVariantsWithSpec(variant, b.id, b.spec);
647
- await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\`
648
- SET ?
649
- WHERE 1 = 1
650
- and id = ${pdDqlData.id}`, [{ content: JSON.stringify(pd) }]);
642
+ await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\` SET content = ? WHERE id = ?
643
+ `, [JSON.stringify(pd), pdDqlData.id]);
651
644
  }
652
645
  }
653
646
  }
647
+ async function updateStock(variant, deductionLog) {
648
+ Object.keys(deductionLog).forEach((key) => {
649
+ try {
650
+ variant.stockList[key].count += deductionLog[key];
651
+ }
652
+ catch (e) {
653
+ console.error(`Error updating stock for variant ${variant.id}:`, e);
654
+ }
655
+ });
656
+ }
654
657
  if (data.checkOutType === 'POS') {
655
658
  this.token = undefined;
656
659
  }
@@ -665,27 +668,27 @@ class Shopping {
665
668
  throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'ToCheckout 2 Error:No email address.', null);
666
669
  }
667
670
  }
668
- const userData = await (async () => {
669
- if (type !== 'preview' || (this.token && this.token.userID)) {
670
- return this.token && this.token.userID
671
- ? await userClass.getUserData(this.token.userID, 'userID')
672
- : await userClass.getUserData(data.email || data.user_info.email, 'account');
673
- }
674
- else {
671
+ const getUserDataAsync = async (type, token, data) => {
672
+ if (type === 'preview' && !((token === null || token === void 0 ? void 0 : token.userID) || data.user_info.email)) {
675
673
  return {};
676
674
  }
677
- })();
675
+ if (token === null || token === void 0 ? void 0 : token.userID) {
676
+ return await userClass.getUserData(`${token.userID}`, 'userID');
677
+ }
678
+ const email = data.email || data.user_info.email;
679
+ const dataByAccount = await userClass.getUserData(email, 'account');
680
+ if (dataByAccount && Object.keys(dataByAccount).length > 0) {
681
+ return dataByAccount;
682
+ }
683
+ return await userClass.getUserData(email, 'email_or_phone');
684
+ };
685
+ const userData = await getUserDataAsync(type, this.token, data);
678
686
  console.log(`checkout-time-02=>`, new Date().getTime() - check_time);
679
687
  if (userData && userData.account) {
680
688
  data.email = userData.account;
681
689
  }
682
690
  if (!data.email && type !== 'preview') {
683
- if (data.user_info && data.user_info.email) {
684
- data.email = data.user_info.email;
685
- }
686
- else {
687
- data.email = data.email || 'no-email';
688
- }
691
+ data.email = ((_b = data.user_info) === null || _b === void 0 ? void 0 : _b.email) || 'no-email';
689
692
  }
690
693
  if (data.use_rebate && data.use_rebate > 0) {
691
694
  if (userData) {
@@ -759,7 +762,7 @@ class Shopping {
759
762
  }
760
763
  });
761
764
  console.log(`checkout-time-05=>`, new Date().getTime() - check_time);
762
- shipment_setting.custom_delivery = (_b = shipment_setting.custom_delivery) !== null && _b !== void 0 ? _b : [];
765
+ shipment_setting.custom_delivery = (_c = shipment_setting.custom_delivery) !== null && _c !== void 0 ? _c : [];
763
766
  for (const form of shipment_setting.custom_delivery) {
764
767
  form.form =
765
768
  (await new user_js_1.User(this.app).getConfigV2({
@@ -767,15 +770,15 @@ class Shopping {
767
770
  key: `form_delivery_${form.id}`,
768
771
  })).list || [];
769
772
  }
770
- shipment_setting.support = (_c = shipment_setting.support) !== null && _c !== void 0 ? _c : [];
773
+ shipment_setting.support = (_d = shipment_setting.support) !== null && _d !== void 0 ? _d : [];
771
774
  shipment_setting.info =
772
- (_d = (shipment_setting.language_data && shipment_setting.language_data[data.language] && shipment_setting.language_data[data.language].info)) !== null && _d !== void 0 ? _d : shipment_setting.info;
775
+ (_e = (shipment_setting.language_data && shipment_setting.language_data[data.language] && shipment_setting.language_data[data.language].info)) !== null && _e !== void 0 ? _e : shipment_setting.info;
773
776
  console.log(`checkout-time-06=>`, new Date().getTime() - check_time);
774
777
  const carData = {
775
778
  customer_info: data.customer_info || {},
776
779
  lineItems: [],
777
780
  total: 0,
778
- email: (_e = data.email) !== null && _e !== void 0 ? _e : ((data.user_info && data.user_info.email) || ''),
781
+ email: (_f = data.email) !== null && _f !== void 0 ? _f : ((data.user_info && data.user_info.email) || ''),
779
782
  user_info: data.user_info,
780
783
  shipment_fee: 0,
781
784
  rebate: 0,
@@ -818,7 +821,7 @@ class Shopping {
818
821
  value: 'global_express',
819
822
  },
820
823
  ]
821
- .concat(((_f = shipment_setting.custom_delivery) !== null && _f !== void 0 ? _f : []).map((dd) => {
824
+ .concat(((_g = shipment_setting.custom_delivery) !== null && _g !== void 0 ? _g : []).map((dd) => {
822
825
  return {
823
826
  form: dd.form,
824
827
  name: dd.name,
@@ -886,11 +889,14 @@ class Shopping {
886
889
  return dd.spec.join('-') === b.spec.join('-');
887
890
  });
888
891
  if ((Number.isInteger(variant.stock) || variant.show_understocking === 'false') && Number.isInteger(b.count)) {
889
- if (data.checkOutType === 'POS' && variant.show_understocking !== 'false') {
890
- variant.stock = variant.stockList && variant.stockList[data.pos_store].count;
892
+ const isPOS = data.checkOutType === 'POS';
893
+ const isUnderstockingVisible = variant.show_understocking !== 'false';
894
+ const isManualType = type === 'manual' || type === 'manual-preview';
895
+ if (isPOS && isUnderstockingVisible) {
896
+ variant.stock = ((_j = (_h = variant.stockList) === null || _h === void 0 ? void 0 : _h[data.pos_store]) === null || _j === void 0 ? void 0 : _j.count) || 0;
891
897
  }
892
- if (variant.stock < b.count && variant.show_understocking !== 'false' && type !== 'manual' && type !== 'manual-preview') {
893
- if (data.checkOutType === 'POS') {
898
+ if (variant.stock < b.count && isUnderstockingVisible && !isManualType) {
899
+ if (isPOS) {
894
900
  b.pre_order = true;
895
901
  }
896
902
  else {
@@ -898,48 +904,51 @@ class Shopping {
898
904
  }
899
905
  }
900
906
  if (variant && b.count > 0) {
901
- b.specs = pd.specs;
902
- b.language_data = pd.language_data;
903
- b.preview_image = variant.preview_image || pd.preview_image[0];
904
- b.title = pd.title;
905
- b.sale_price = variant.sale_price;
906
- b.collection = pd['collection'];
907
- b.sku = variant.sku;
908
- b.stock = variant.stock;
909
- b.show_understocking = variant.show_understocking;
910
- b.stockList = variant.stockList;
911
- b.weight = parseInt(`${variant.weight || 0}`, 10);
907
+ Object.assign(b, {
908
+ specs: pd.specs,
909
+ language_data: pd.language_data,
910
+ preview_image: variant.preview_image || pd.preview_image[0],
911
+ title: pd.title,
912
+ sale_price: variant.sale_price,
913
+ collection: pd.collection,
914
+ sku: variant.sku,
915
+ stock: variant.stock,
916
+ show_understocking: variant.show_understocking,
917
+ stockList: variant.stockList,
918
+ weight: parseInt(variant.weight || '0', 10),
919
+ designated_logistics: (_k = pd.designated_logistics) !== null && _k !== void 0 ? _k : { type: 'all', list: [] },
920
+ });
921
+ const shipmentValue = (() => {
922
+ if (!variant.shipment_type || variant.shipment_type === 'none')
923
+ return 0;
924
+ if (variant.shipment_type === 'volume') {
925
+ return b.count * variant.v_length * variant.v_width * variant.v_height;
926
+ }
927
+ if (variant.shipment_type === 'weight') {
928
+ return b.count * variant.weight;
929
+ }
930
+ return 0;
931
+ })();
912
932
  b.shipment_obj = {
913
933
  type: variant.shipment_type,
914
- value: (() => {
915
- if (!variant.shipment_type || variant.shipment_type === 'none') {
916
- return 0;
917
- }
918
- if (variant.shipment_type === 'volume') {
919
- return b.count * variant.v_length * variant.v_width * variant.v_height;
920
- }
921
- if (variant.shipment_type === 'weight') {
922
- return b.count * variant.weight;
923
- }
924
- return 0;
925
- })(),
934
+ value: shipmentValue,
926
935
  };
927
- b.designated_logistics = (_g = pd.designated_logistics) !== null && _g !== void 0 ? _g : { type: 'all', list: [] };
928
- variant.shipment_weight = parseInt(variant.shipment_weight || 0);
936
+ variant.shipment_weight = parseInt(variant.shipment_weight || '0', 10);
929
937
  carData.lineItems.push(b);
930
- if (type !== 'manual' && !pd.productType.giveaway) {
931
- carData.total += variant.sale_price * b.count;
932
- }
933
- if (pd.productType.giveaway) {
934
- b.sale_price = 0;
938
+ if (type !== 'manual') {
939
+ if (pd.productType.giveaway) {
940
+ b.sale_price = 0;
941
+ }
942
+ else {
943
+ carData.total += variant.sale_price * b.count;
944
+ }
935
945
  }
936
946
  }
937
947
  if (type !== 'preview' && type !== 'manual' && type !== 'manual-preview' && variant.show_understocking !== 'false') {
938
- const countless = variant.stock - b.count;
939
- variant.stock = countless > 0 ? countless : 0;
948
+ const remainingStock = Math.max(variant.stock - b.count, 0);
949
+ variant.stock = remainingStock;
940
950
  if (type === 'POS') {
941
- variant.deduction_log = {};
942
- variant.deduction_log[data.pos_store] = b.count;
951
+ variant.deduction_log = { [data.pos_store]: b.count };
943
952
  variant.stockList[data.pos_store].count -= b.count;
944
953
  b.deduction_log = variant.deduction_log;
945
954
  }
@@ -950,12 +959,15 @@ class Shopping {
950
959
  }
951
960
  saveStockArray.push(() => {
952
961
  return new Promise(async (resolve, reject) => {
953
- await this.updateVariantsWithSpec(variant, b.id, b.spec);
954
- await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\`
955
- SET ?
956
- WHERE 1 = 1
957
- and id = ${pdDqlData.id}`, [{ content: JSON.stringify(pd) }]);
958
- resolve(true);
962
+ try {
963
+ await this.updateVariantsWithSpec(variant, b.id, b.spec);
964
+ await database_js_1.default.query(`UPDATE \`${this.app}\`.\`t_manager_post\` SET ? WHERE id = ${pdDqlData.id}
965
+ `, [{ content: JSON.stringify(pd) }]);
966
+ resolve(true);
967
+ }
968
+ catch (error) {
969
+ reject(error);
970
+ }
959
971
  });
960
972
  });
961
973
  }
@@ -1056,46 +1068,27 @@ class Shopping {
1056
1068
  await this.checkVoucher(carData);
1057
1069
  console.log(`checkout-time-check-voucher-2=>`, new Date().getTime() - check_time);
1058
1070
  let can_add_gift = [];
1059
- carData
1060
- .voucherList.filter((dd) => {
1061
- return dd.reBackType === 'giveaway';
1062
- })
1063
- .map((dd) => {
1064
- can_add_gift.push(dd.add_on_products);
1065
- });
1066
- gift_product.map((dd) => {
1067
- let max_count = can_add_gift.filter((d1) => {
1068
- return d1.includes(dd.id);
1069
- }).length;
1071
+ (_l = carData.voucherList) === null || _l === void 0 ? void 0 : _l.filter((dd) => dd.reBackType === 'giveaway').forEach((dd) => can_add_gift.push(dd.add_on_products));
1072
+ gift_product.forEach((dd) => {
1073
+ const max_count = can_add_gift.filter((d1) => d1.includes(dd.id)).length;
1070
1074
  if (dd.count <= max_count) {
1071
1075
  for (let a = 0; a < dd.count; a++) {
1072
- let find = false;
1073
- can_add_gift = can_add_gift.filter((d1) => {
1074
- if (d1.includes(dd.id) || find) {
1075
- find = true;
1076
- return false;
1077
- }
1078
- else {
1079
- return true;
1080
- }
1081
- });
1076
+ can_add_gift = can_add_gift.filter((d1) => !d1.includes(dd.id));
1082
1077
  }
1083
1078
  carData.lineItems.push(dd);
1084
1079
  }
1085
1080
  });
1086
- for (const dd of carData.voucherList.filter((dd) => {
1087
- return dd.reBackType === 'giveaway';
1088
- })) {
1081
+ for (const dd of carData.voucherList.filter((dd) => dd.reBackType === 'giveaway')) {
1089
1082
  let index = -1;
1090
- for (const b of (_h = dd.add_on_products) !== null && _h !== void 0 ? _h : []) {
1083
+ for (const b of (_m = dd.add_on_products) !== null && _m !== void 0 ? _m : []) {
1091
1084
  index++;
1092
- const pdDqlData = ((_j = (await this.getProduct({
1085
+ const pdDqlData = ((_o = (await this.getProduct({
1093
1086
  page: 0,
1094
1087
  limit: 50,
1095
1088
  id: `${b}`,
1096
1089
  status: 'inRange',
1097
1090
  channel: data.checkOutType === 'POS' ? 'pos' : undefined,
1098
- })).data) !== null && _j !== void 0 ? _j : { content: {} }).content;
1091
+ })).data) !== null && _o !== void 0 ? _o : { content: {} }).content;
1099
1092
  pdDqlData.voucher_id = dd.id;
1100
1093
  dd.add_on_products[index] = pdDqlData;
1101
1094
  }
@@ -1231,7 +1224,7 @@ class Shopping {
1231
1224
  carData.discount = data.discount;
1232
1225
  carData.voucherList = [tempVoucher];
1233
1226
  carData.customer_info = data.customer_info;
1234
- carData.total = (_k = data.total) !== null && _k !== void 0 ? _k : 0;
1227
+ carData.total = (_p = data.total) !== null && _p !== void 0 ? _p : 0;
1235
1228
  carData.rebate = tempVoucher.rebate_total;
1236
1229
  if (tempVoucher.reBackType == 'shipment_free') {
1237
1230
  carData.shipment_fee = 0;
@@ -1259,6 +1252,14 @@ class Shopping {
1259
1252
  }
1260
1253
  else if (type === 'POS') {
1261
1254
  carData.orderSource = 'POS';
1255
+ if (data.checkOutType === 'POS' && Array.isArray(data.voucherList)) {
1256
+ const manualVoucher = data.voucherList.find((item) => item.id === 0);
1257
+ if (manualVoucher) {
1258
+ manualVoucher.discount = manualVoucher.discount_total;
1259
+ carData.total -= manualVoucher.discount;
1260
+ carData.voucherList.push(manualVoucher);
1261
+ }
1262
+ }
1262
1263
  const trans = await database_js_1.default.Transaction.build();
1263
1264
  if (data.pre_order) {
1264
1265
  carData.progress = 'pre_order';
@@ -1290,7 +1291,7 @@ class Shopping {
1290
1291
  await Promise.all(saveStockArray.map((dd) => {
1291
1292
  return dd();
1292
1293
  }));
1293
- await new Shopping(this.app).releaseCheckout((_l = data.pay_status) !== null && _l !== void 0 ? _l : 0, carData.orderID);
1294
+ await new Shopping(this.app).releaseCheckout((_q = data.pay_status) !== null && _q !== void 0 ? _q : 0, carData.orderID);
1294
1295
  return { result: 'SUCCESS', message: 'POS訂單新增成功', data: carData };
1295
1296
  }
1296
1297
  else {