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.
- package/ed8x60j4nn.json +1 -0
- package/gkh2p2jhta.json +1 -0
- package/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/cms-plugin/pos-pages/models.js +18 -15
- package/lowcode/cms-plugin/pos-pages/models.ts +30 -25
- package/lowcode/cms-plugin/pos-pages/payment-function.js +53 -57
- package/lowcode/cms-plugin/pos-pages/payment-function.ts +92 -100
- package/lowcode/form-view/editor/image-selector.js +7 -3
- package/lowcode/form-view/editor/image-selector.ts +75 -69
- package/lowcode/glitter-base/route/shopping.js +2 -0
- package/lowcode/glitter-base/route/shopping.ts +6 -4
- package/lowcode/official_view_component/official/component.js +1 -3
- package/lowcode/official_view_component/official/component.ts +3 -4
- package/lowcode/public-components/footer/footer-01.js +1 -1
- package/lowcode/public-components/footer/footer-01.ts +1 -1
- package/lowcode/public-components/footer/footer-02.js +1 -1
- package/lowcode/public-components/footer/footer-02.ts +1 -1
- package/lowcode/public-components/footer/footer-03.js +1 -1
- package/lowcode/public-components/footer/footer-03.ts +1 -1
- package/lowcode/public-components/product/pd-card-01.js +22 -11
- package/lowcode/public-components/product/pd-card-01.ts +23 -11
- package/lowcode/public-components/product/pd-card-02.js +22 -11
- package/lowcode/public-components/product/pd-card-02.ts +22 -11
- package/lowcode/public-components/product/pd-card-03.js +22 -11
- package/lowcode/public-components/product/pd-card-03.ts +23 -11
- package/lowcode/public-components/product/product-detail.js +7 -0
- package/lowcode/public-components/product/product-detail.ts +5 -1
- package/lowcode/public-components/user-manager/um-voucher.ts +1 -0
- package/package.json +1 -1
- package/src/api-public/controllers/shop.js +44 -33
- package/src/api-public/controllers/shop.js.map +1 -1
- package/src/api-public/controllers/shop.ts +54 -35
- package/src/api-public/services/shopping.d.ts +2 -1
- package/src/api-public/services/shopping.js +110 -109
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +174 -117
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/index.ts +1 -0
- package/src/seo-config.d.ts +1 -0
- package/src/seo-config.js +40 -1
- package/src/seo-config.js.map +1 -1
- package/src/seo-config.ts +46 -3
- 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(`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
669
|
-
if (type
|
|
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
|
-
|
|
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 = (
|
|
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 = (
|
|
773
|
+
shipment_setting.support = (_d = shipment_setting.support) !== null && _d !== void 0 ? _d : [];
|
|
771
774
|
shipment_setting.info =
|
|
772
|
-
(
|
|
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: (
|
|
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(((
|
|
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
|
-
|
|
890
|
-
|
|
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 &&
|
|
893
|
-
if (
|
|
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
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
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
|
-
|
|
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'
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
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
|
|
939
|
-
variant.stock =
|
|
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
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
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
|
-
|
|
1061
|
-
|
|
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
|
-
|
|
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 (
|
|
1083
|
+
for (const b of (_m = dd.add_on_products) !== null && _m !== void 0 ? _m : []) {
|
|
1091
1084
|
index++;
|
|
1092
|
-
const pdDqlData = ((
|
|
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 &&
|
|
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 = (
|
|
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((
|
|
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 {
|