ts-glitter 21.0.4 → 21.0.5

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 (159) 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/shopping-finance-setting.js +251 -6
  12. package/lowcode/cms-plugin/shopping-finance-setting.ts +291 -6
  13. package/lowcode/cms-plugin/shopping-order-manager.js +56 -46
  14. package/lowcode/cms-plugin/shopping-order-manager.ts +59 -47
  15. package/lowcode/cms-plugin/shopping-product-setting.js +10 -5
  16. package/lowcode/cms-plugin/shopping-product-setting.ts +14 -6
  17. package/lowcode/cms-plugin/shopping-setting-advance.js +21 -72
  18. package/lowcode/cms-plugin/shopping-setting-advance.ts +31 -98
  19. package/lowcode/css/editor.css +48 -16
  20. package/lowcode/css/front-end.css +16 -17
  21. package/lowcode/glitter-base/global/language.js +2 -0
  22. package/lowcode/glitter-base/global/language.ts +3 -0
  23. package/lowcode/glitter-base/global/shipment-config.js +4 -4
  24. package/lowcode/glitter-base/global/shipment-config.ts +1 -1
  25. package/lowcode/glitter-base/route/shopping.js +11 -0
  26. package/lowcode/glitter-base/route/shopping.ts +12 -0
  27. package/lowcode/official_view_component/form-widget/input-custom.js +0 -1
  28. package/lowcode/official_view_component/form-widget/input-custom.ts +0 -1
  29. package/lowcode/public-components/checkout/index.js +578 -780
  30. package/lowcode/public-components/checkout/index.ts +2457 -2652
  31. package/lowcode/public-components/headers/header-class.js +252 -324
  32. package/lowcode/public-components/headers/header-class.ts +389 -480
  33. package/lowcode/public-components/modules/cart-module.js +433 -0
  34. package/lowcode/public-components/modules/cart-module.ts +491 -0
  35. package/lowcode/public-components/modules/product-module.js +45 -0
  36. package/lowcode/public-components/modules/product-module.ts +58 -0
  37. package/lowcode/public-components/product/product-detail.js +178 -184
  38. package/lowcode/public-components/product/product-detail.ts +564 -579
  39. package/lowcode/public-components/user-manager/um-order.js +162 -32
  40. package/lowcode/public-components/user-manager/um-order.ts +181 -46
  41. package/lowcode/public-models/product.ts +1 -0
  42. package/package.json +1 -1
  43. package/src/Language.js +1 -0
  44. package/src/Language.js.map +1 -1
  45. package/src/Language.ts +3 -0
  46. package/src/api-public/controllers/article.js +33 -29
  47. package/src/api-public/controllers/article.js.map +1 -1
  48. package/src/api-public/controllers/article.ts +152 -146
  49. package/src/api-public/controllers/index.js +2 -0
  50. package/src/api-public/controllers/index.js.map +1 -1
  51. package/src/api-public/controllers/index.ts +2 -0
  52. package/src/api-public/controllers/shop.js +125 -47
  53. package/src/api-public/controllers/shop.js.map +1 -1
  54. package/src/api-public/controllers/shop.ts +148 -61
  55. package/src/api-public/controllers/user.js +51 -52
  56. package/src/api-public/controllers/user.js.map +1 -1
  57. package/src/api-public/controllers/user.ts +63 -52
  58. package/src/api-public/models/glitter-finance.js +2 -1
  59. package/src/api-public/models/glitter-finance.js.map +5 -1
  60. package/src/api-public/services/checkout-event.d.ts +1 -0
  61. package/src/api-public/services/checkout-event.js +18 -10
  62. package/src/api-public/services/checkout-event.js.map +1 -1
  63. package/src/api-public/services/checkout-event.ts +18 -7
  64. package/src/api-public/services/factories/payment-strategy-factory.d.ts +6 -0
  65. package/src/api-public/services/factories/payment-strategy-factory.js +49 -0
  66. package/src/api-public/services/factories/payment-strategy-factory.js.map +1 -0
  67. package/src/api-public/services/factories/payment-strategy-factory.ts +71 -0
  68. package/src/api-public/services/fb-service.js +4 -4
  69. package/src/api-public/services/fb-service.js.map +1 -1
  70. package/src/api-public/services/financial-service.d.ts +2 -1
  71. package/src/api-public/services/financial-service.js +48 -53
  72. package/src/api-public/services/financial-service.js.map +1 -1
  73. package/src/api-public/services/financial-service.ts +29 -38
  74. package/src/api-public/services/financial-serviceV2.d.ts +298 -0
  75. package/src/api-public/services/financial-serviceV2.js +1158 -0
  76. package/src/api-public/services/financial-serviceV2.js.map +1 -0
  77. package/src/api-public/services/financial-serviceV2.ts +1518 -0
  78. package/src/api-public/services/interface/payment-keys-interface.d.ts +37 -0
  79. package/src/api-public/services/interface/payment-keys-interface.js +3 -0
  80. package/src/api-public/services/interface/payment-keys-interface.js.map +1 -0
  81. package/src/api-public/services/interface/payment-keys-interface.ts +46 -0
  82. package/src/api-public/services/interface/payment-strategy-interface.d.ts +17 -0
  83. package/src/api-public/services/interface/payment-strategy-interface.js +3 -0
  84. package/src/api-public/services/interface/payment-strategy-interface.js.map +1 -0
  85. package/src/api-public/services/interface/payment-strategy-interface.ts +48 -0
  86. package/src/api-public/services/migrate-event/public-user-config.d.ts +5 -0
  87. package/src/api-public/services/migrate-event/public-user-config.js +81 -0
  88. package/src/api-public/services/migrate-event/public-user-config.js.map +1 -0
  89. package/src/api-public/services/migrate-event/public-user-config.ts +106 -0
  90. package/src/api-public/services/model/handlePaymentTransaction.js +0 -68
  91. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  92. package/src/api-public/services/model/handlePaymentTransaction.ts +62 -54
  93. package/src/api-public/services/monitor.d.ts +1 -0
  94. package/src/api-public/services/payment-service.d.ts +12 -0
  95. package/src/api-public/services/payment-service.js +83 -0
  96. package/src/api-public/services/payment-service.js.map +1 -0
  97. package/src/api-public/services/payment-service.ts +112 -0
  98. package/src/api-public/services/shopping.d.ts +2 -1
  99. package/src/api-public/services/shopping.js +60 -23
  100. package/src/api-public/services/shopping.js.map +1 -1
  101. package/src/api-public/services/shopping.ts +88 -16
  102. package/src/api-public/services/strategies/ecpay-strategy.d.ts +8 -0
  103. package/src/api-public/services/strategies/ecpay-strategy.js +26 -0
  104. package/src/api-public/services/strategies/ecpay-strategy.js.map +1 -0
  105. package/src/api-public/services/strategies/ecpay-strategy.ts +30 -0
  106. package/src/api-public/services/strategies/ezpay-strategy.d.ts +8 -0
  107. package/src/api-public/services/strategies/ezpay-strategy.js +26 -0
  108. package/src/api-public/services/strategies/ezpay-strategy.js.map +1 -0
  109. package/src/api-public/services/strategies/ezpay-strategy.ts +31 -0
  110. package/src/api-public/services/strategies/jkopay-strategy.d.ts +8 -0
  111. package/src/api-public/services/strategies/jkopay-strategy.js +32 -0
  112. package/src/api-public/services/strategies/jkopay-strategy.js.map +1 -0
  113. package/src/api-public/services/strategies/jkopay-strategy.ts +36 -0
  114. package/src/api-public/services/strategies/linepay-strategy.d.ts +8 -0
  115. package/src/api-public/services/strategies/linepay-strategy.js +32 -0
  116. package/src/api-public/services/strategies/linepay-strategy.js.map +1 -0
  117. package/src/api-public/services/strategies/linepay-strategy.ts +35 -0
  118. package/src/api-public/services/strategies/paynow-strategy.d.ts +8 -0
  119. package/src/api-public/services/strategies/paynow-strategy.js +26 -0
  120. package/src/api-public/services/strategies/paynow-strategy.js.map +1 -0
  121. package/src/api-public/services/strategies/paynow-strategy.ts +29 -0
  122. package/src/api-public/services/strategies/paypal-strategy.d.ts +8 -0
  123. package/src/api-public/services/strategies/paypal-strategy.js +28 -0
  124. package/src/api-public/services/strategies/paypal-strategy.js.map +1 -0
  125. package/src/api-public/services/strategies/paypal-strategy.ts +31 -0
  126. package/src/api-public/services/updated-table-checked.d.ts +1 -0
  127. package/src/api-public/services/updated-table-checked.js +37 -15
  128. package/src/api-public/services/updated-table-checked.js.map +1 -1
  129. package/src/api-public/services/updated-table-checked.ts +56 -36
  130. package/src/api-public/utils/ut-permission.d.ts +1 -0
  131. package/src/app-project/serverless/src/index.js +17 -7
  132. package/src/app-project/serverless/src/index.js.map +1 -1
  133. package/src/app-project/serverless/src/modules/CryptoJS.js +17 -7
  134. package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
  135. package/src/app-project/serverless/src/modules/ssh.js +17 -7
  136. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  137. package/src/config.d.ts +1 -1
  138. package/src/modules/AWSLib.js +3 -2
  139. package/src/modules/AWSLib.js.map +1 -1
  140. package/src/modules/CryptoJS.js +17 -7
  141. package/src/modules/CryptoJS.js.map +1 -1
  142. package/src/modules/database.d.ts +1 -1
  143. package/src/modules/redis.d.ts +1 -1
  144. package/src/modules/ssh.js +17 -7
  145. package/src/modules/ssh.js.map +1 -1
  146. package/src/modules/tool.d.ts +4 -4
  147. package/src/modules/tool.js +2 -1
  148. package/src/modules/tool.js.map +1 -1
  149. package/src/run.js +2 -1
  150. package/src/run.js.map +1 -1
  151. package/src/services/create-instance.js +4 -3
  152. package/src/services/create-instance.js.map +1 -1
  153. package/src/services/saas-table-check.js +2 -2
  154. package/src/services/saas-table-check.js.map +5 -1
  155. package/src/services/tool.js +3 -2
  156. package/src/services/tool.js.map +1 -1
  157. package/vp00rqhw1r.json +1 -0
  158. package/src/api-public/services/product-migrate.d.ts +0 -8
  159. package/src/api-public/services/product-migrate.js.map +0 -1
@@ -1,510 +1,419 @@
1
- import {GVC} from '../../glitterBundle/GVController.js';
2
- import {ApiShop} from '../../glitter-base/route/shopping.js';
3
- import {ApiCart} from '../../glitter-base/route/api-cart.js';
4
- import {Tool} from '../../modules/tool.js';
5
- import {Language} from '../../glitter-base/global/language.js';
6
- import {Currency} from '../../glitter-base/global/currency.js';
1
+ import { GVC } from '../../glitterBundle/GVController.js';
2
+ import { ApiShop } from '../../glitter-base/route/shopping.js';
3
+ import { ApiCart } from '../../glitter-base/route/api-cart.js';
4
+ import { Language } from '../../glitter-base/global/language.js';
5
+ import { Currency } from '../../glitter-base/global/currency.js';
7
6
  import { PdClass } from '../product/pd-class.js';
7
+ import { CartModule } from '../modules/cart-module.js';
8
8
 
9
9
  const html = String.raw;
10
10
 
11
11
  export class HeaderClass {
12
- static hideShopperBtn() {
13
- return !(window as any).store_info.web_type.find((dd: any) => {
14
- return ['shop', 'teaching'].includes(dd);
15
- });
16
- }
12
+ static hideShopperBtn() {
13
+ return !(window as any).store_info.web_type.find((dd: any) => {
14
+ return ['shop', 'teaching'].includes(dd);
15
+ });
16
+ }
17
17
 
18
- static spinner(obj?: {
19
- container?: {
20
- class?: string;
21
- style?: string;
22
- };
23
- circle?: {
24
- visible?: boolean;
25
- width?: number;
26
- borderSize?: number;
27
- };
28
- text?: {
29
- value?: string;
30
- visible?: boolean;
31
- fontSize?: number;
32
- };
33
- }) {
34
- const container = {
35
- class: `${obj?.container?.class ?? ''}`,
36
- style: `margin-top: 2rem ;${obj?.container?.style}`,
37
- };
38
- const circleAttr = {
39
- visible: obj?.circle?.visible === false ? false : true,
40
- width: obj?.circle?.width ?? 20,
41
- borderSize: obj?.circle?.borderSize ?? 16,
42
- };
18
+ static spinner(obj?: {
19
+ container?: {
20
+ class?: string;
21
+ style?: string;
22
+ };
23
+ circle?: {
24
+ visible?: boolean;
25
+ width?: number;
26
+ borderSize?: number;
27
+ };
28
+ text?: {
29
+ value?: string;
30
+ visible?: boolean;
31
+ fontSize?: number;
32
+ };
33
+ }) {
34
+ const container = {
35
+ class: `${obj?.container?.class ?? ''}`,
36
+ style: `margin-top: 2rem ;${obj?.container?.style}`,
37
+ };
38
+ const circleAttr = {
39
+ visible: obj?.circle?.visible === false ? false : true,
40
+ width: obj?.circle?.width ?? 20,
41
+ borderSize: obj?.circle?.borderSize ?? 16,
42
+ };
43
43
 
44
- const textAttr = {
45
- value: obj?.text?.value ?? Language.text('loading'),
46
- visible: obj?.text?.visible === false ? false : true,
47
- fontSize: obj?.text?.fontSize ?? 16,
48
- };
49
- return html`
50
- <div class="d-flex align-items-center justify-content-center flex-column w-100 mx-auto ${container.class}"
51
- style="${container.style}">
52
- <div
53
- class="spinner-border ${circleAttr.visible ? '' : 'd-none'}"
54
- style="font-size: ${circleAttr.borderSize}px; width: ${circleAttr.width}px; height: ${circleAttr.width}px;"
55
- role="status"
56
- ></div>
57
- <span class="mt-3 ${textAttr.visible ? '' : 'd-none'}"
58
- style="font-size: ${textAttr.fontSize}px;">${textAttr.value}</span>
59
- </div>`;
60
- }
44
+ const textAttr = {
45
+ value: obj?.text?.value ?? Language.text('loading'),
46
+ visible: obj?.text?.visible === false ? false : true,
47
+ fontSize: obj?.text?.fontSize ?? 16,
48
+ };
49
+ return html` <div
50
+ class="d-flex align-items-center justify-content-center flex-column w-100 mx-auto ${container.class}"
51
+ style="${container.style}"
52
+ >
53
+ <div
54
+ class="spinner-border ${circleAttr.visible ? '' : 'd-none'}"
55
+ style="font-size: ${circleAttr.borderSize}px; width: ${circleAttr.width}px; height: ${circleAttr.width}px;"
56
+ role="status"
57
+ ></div>
58
+ <span class="mt-3 ${textAttr.visible ? '' : 'd-none'}" style="font-size: ${textAttr.fontSize}px;"
59
+ >${textAttr.value}</span
60
+ >
61
+ </div>`;
62
+ }
61
63
 
62
- static isImageUrlValid(url: string): Promise<boolean> {
63
- return new Promise((resolve) => {
64
- const img = new Image();
65
- img.onload = () => resolve(true);
66
- img.onerror = () => resolve(false);
67
- img.src = url;
68
- });
69
- }
64
+ static rightCartMenu(gvc: GVC, widget: any) {
65
+ gvc.glitter.setDrawer(
66
+ gvc.bindView(
67
+ (() => {
68
+ const vm = {
69
+ id: gvc.glitter.getUUID(),
70
+ imageId: gvc.glitter.getUUID(),
71
+ dataList: [] as {
72
+ id: number;
73
+ title: string;
74
+ count: number;
75
+ spec: string[];
76
+ price: number;
77
+ image: string;
78
+ specs: string[];
79
+ }[],
80
+ shippings: [] as {
81
+ name: string;
82
+ value: string;
83
+ }[],
84
+ loading: true,
85
+ };
70
86
 
71
- static noImageURL = 'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg';
87
+ const classPrefix = `header-checkout`;
72
88
 
73
- static rightCartMenu(gvc: GVC, widget: any) {
74
- gvc.glitter.setDrawer(
75
- gvc.bindView(
76
- (() => {
77
- const vm = {
78
- id: gvc.glitter.getUUID(),
79
- imageId: gvc.glitter.getUUID(),
80
- // dataList: [] as {
81
- // id: number;
82
- // title: string;
83
- // count: number;
84
- // spec: string[];
85
- // price: number;
86
- // image: string;
87
- // specs: string[];
88
- // }[],
89
- shippings: [] as {
90
- name: string;
91
- value: string;
92
- }[],
93
- dataList: [] as {
94
- logistic: string;
95
- cart: {
96
- id: number;
97
- title: string;
98
- count: number;
99
- spec: string[];
100
- price: number;
101
- image: string;
102
- specs: string[];
103
- }[];
104
- }[],
105
- loading: true,
106
- };
107
-
108
- const classPrefix = `header-checkout`;
89
+ gvc.addStyle(`
90
+ .${classPrefix}-wh {
91
+ display: flex;
92
+ min-width: 70px;
93
+ min-height: 70px;
94
+ max-width: 70px;
95
+ max-height: 70px;
96
+ width: 100%;
97
+ height: 100%;
98
+ object-fit: cover;
99
+ object-position: center;
100
+ }
109
101
 
110
- gvc.addStyle(`
111
- .${classPrefix}-wh {
112
- display: flex;
113
- min-width: 70px;
114
- min-height: 70px;
115
- max-width: 70px;
116
- max-height: 70px;
117
- width: 100%;
118
- height: 100%;
119
- object-fit: cover;
120
- object-position: center;
121
- }
102
+ .${classPrefix}-select {
103
+ display: flex;
104
+ padding: 7px 30px 7px 18px;
105
+ max-height: 40px;
106
+ align-items: center;
107
+ gap: 6px;
108
+ border-radius: 10px;
109
+ border: 1px solid #ddd;
110
+ background: transparent
111
+ url('https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1718100926212-Vector 89.png') no-repeat;
112
+ background-position-x: calc(100% - 12px);
113
+ background-position-y: 16px;
114
+ appearance: none;
115
+ -webkit-appearance: none;
116
+ -moz-appearance: none;
117
+ color: #393939;
118
+ }
122
119
 
123
- .${classPrefix}-select {
124
- display: flex;
125
- padding: 7px 30px 7px 18px;
126
- max-height: 40px;
127
- align-items: center;
128
- gap: 6px;
129
- border-radius: 10px;
130
- border: 1px solid #ddd;
131
- background: transparent url('https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1718100926212-Vector 89.png') no-repeat;
132
- background-position-x: calc(100% - 12px);
133
- background-position-y: 16px;
134
- appearance: none;
135
- -webkit-appearance: none;
136
- -moz-appearance: none;
137
- color: #393939;
138
- }
120
+ .${classPrefix}-select:focus {
121
+ outline: 0;
122
+ }
139
123
 
140
- .${classPrefix}-select:focus {
141
- outline: 0;
142
- }
124
+ .${classPrefix}-cart-container {
125
+ display: flex;
126
+ width: 100%;
127
+ align-items: center;
128
+ padding: 0;
129
+ margin-bottom: 18px;
130
+ padding: 12px;
131
+ border-bottom: 1px solid #dddddd;
132
+ }
143
133
 
144
- .${classPrefix}-cart-container {
145
- display: flex;
146
- width: 100%;
147
- align-items: center;
148
- padding: 0;
149
- margin-bottom: 18px;
150
- padding: 12px;
151
- border-bottom: 1px solid #dddddd;
152
- }
134
+ .${classPrefix}-cart-title {
135
+ letter-spacing: 4px;
136
+ font-size: 22px;
137
+ font-weight: 700;
138
+ }
153
139
 
154
- .${classPrefix}-cart-title {
155
- letter-spacing: 4px;
156
- font-size: 22px;
157
- font-weight: 700;
158
- }
140
+ .${classPrefix}-shipping-title {
141
+ font-size: 18px;
142
+ font-weight: 600;
143
+ }
159
144
 
160
- .${classPrefix}-shipping-title {
161
- font-size: 18px;
162
- font-weight: 600;
163
- }
145
+ .${classPrefix}-title {
146
+ font-size: 16px;
147
+ }
164
148
 
165
- .${classPrefix}-title {
166
- font-size: 16px;
167
- }
149
+ .${classPrefix}-spec {
150
+ font-size: 14px;
151
+ color: #8d8d8d;
152
+ }
168
153
 
169
- .${classPrefix}-spec {
170
- font-size: 14px;
171
- color: #8d8d8d;
172
- }
154
+ .${classPrefix}-card {
155
+ border-radius: 10px;
156
+ padding: 20px 8px;
157
+ background: #fff;
158
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.12);
159
+ margin: 0 12px;
160
+ }
173
161
 
174
- .${classPrefix}-card {
175
- border-radius: 10px;
176
- padding: 20px 8px;
177
- background: #fff;
178
- box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.12);
179
- margin: 0 12px;
180
- }
162
+ .${classPrefix}-button {
163
+ display: flex;
164
+ padding: 6px 14px;
165
+ max-height: 30px;
166
+ justify-content: center;
167
+ align-items: center;
168
+ gap: 8px;
169
+ border: 1px solid ${widget.formData.theme_color['solid-button-text'] ?? '#fff'};
170
+ border-radius: 10px;
171
+ background: ${widget.formData.theme_color['solid-button-bg'] ?? '#000'};
172
+ cursor: pointer;
173
+ color: ${widget.formData.theme_color['solid-button-text'] ?? '#fff'};
174
+ }
175
+ `);
181
176
 
182
- .${classPrefix}-button {
183
- display: flex;
184
- padding: 6px 14px;
185
- max-height: 30px;
186
- justify-content: center;
187
- align-items: center;
188
- gap: 8px;
189
- border: 1px solid ${widget.formData.theme_color['solid-button-text'] ?? '#fff'};
190
- border-radius: 10px;
191
- background: ${widget.formData.theme_color['solid-button-bg'] ?? '#000'};
192
- cursor: pointer;
193
- color: ${widget.formData.theme_color['solid-button-text'] ?? '#fff'};
194
- }
195
- `);
177
+ function refreshView() {
178
+ setTimeout(() => {
179
+ vm.loading = true;
180
+ gvc.glitter.recreateView('.js-cart-count');
181
+ gvc.glitter.recreateView('.shopping-cart');
182
+ gvc.notifyDataChange(vm.id);
183
+ }, 200);
184
+ }
196
185
 
197
- function refreshView() {
198
- setTimeout(() => {
199
- vm.loading = true;
200
- gvc.glitter.recreateView('.js-cart-count');
201
- gvc.glitter.recreateView('.shopping-cart');
202
- gvc.notifyDataChange(vm.id);
203
- }, 200);
204
- }
186
+ function goToCheckoutButton(id: string) {
187
+ return html` <button
188
+ class="${classPrefix}-button"
189
+ type="button"
190
+ onclick="${gvc.event(() => {
191
+ (window as any).drawer.close();
192
+ ApiCart.toCheckOutPage(id);
193
+ })}"
194
+ >
195
+ ${Language.text('proceed_to_checkout')}
196
+ </button>`;
197
+ }
205
198
 
206
- function goToCheckoutButton(id: string) {
207
- return html`
208
- <button
209
- class="${classPrefix}-button"
210
- type="button"
211
- onclick="${gvc.event(() => {
212
- (window as any).drawer.close();
213
- ApiCart.toCheckOutPage(id);
214
- })}"
199
+ return {
200
+ bind: vm.id,
201
+ view: () => {
202
+ try {
203
+ if (vm.loading) {
204
+ return html` <div class="w-100 vh-100 bg-white">${this.spinner()}</div>`;
205
+ }
206
+ return html` <div class="" style="position: relative;">
207
+ <div class="${classPrefix}-cart-container align-items-center">
208
+ <div
209
+ class="d-flex align-items-center justify-content-center fs-5 py-3 px-2"
210
+ style="cursor:pointer;"
211
+ onclick="${gvc.event(() => {
212
+ gvc.glitter.closeDrawer();
213
+ })}"
214
+ >
215
+ <i class="fa-sharp fa-solid fa-angle-left"></i>
216
+ </div>
217
+ <div class="${classPrefix}-cart-title">${Language.text('cart')}</div>
218
+ <div class="flex-fill"></div>
219
+ ${goToCheckoutButton(ApiCart.globalCart)}
220
+ </div>
221
+ ${(() => {
222
+ if (vm.dataList.length === 0) {
223
+ return html` <div class="container d-flex align-items-center justify-content-center flex-column">
224
+ <lottie-player
225
+ style="max-width: 100%; width: 300px; height: 300px;"
226
+ src="https://lottie.host/38ba8340-3414-41b8-b068-bba18d240bb3/h7e1Q29IQJ.json"
227
+ speed="1"
228
+ loop=""
229
+ autoplay=""
230
+ background="transparent"
231
+ ></lottie-player>
232
+ <div class="mt-3 fw-bold">${Language.text('empty_cart_message')}</div>
233
+ </div>`;
234
+ } else {
235
+ return vm.dataList
236
+ .map(item => {
237
+ return html` <div class="d-flex align-items-center px-3 position-relative" style="gap: 12px;">
238
+ <div
239
+ class="position-absolute"
240
+ style="right:13px;top:0px;cursor:pointer;"
241
+ onclick="${gvc.event(() => {
242
+ new ApiCart().setCart(cartItem => {
243
+ cartItem.line_items = cartItem.line_items.filter(dd => {
244
+ return !(dd.id === item.id && item.spec.join('') === dd.spec.join(''));
245
+ });
246
+ refreshView();
247
+ });
248
+ })}"
215
249
  >
216
- ${Language.text('proceed_to_checkout')}
217
- </button>`;
218
- }
219
-
220
- return {
221
- bind: vm.id,
222
- view: () => {
223
- try {
224
- if (vm.loading) {
225
- return html`
226
- <div class="w-100 vh-100 bg-white">${this.spinner()}</div>`;
227
- } else {
228
- return html`
229
- <div class="" style="position: relative;">
230
- <div class="${classPrefix}-cart-container align-items-center">
231
- <div
232
- class="d-flex align-items-center justify-content-center fs-5 py-3 px-2"
233
- style="cursor:pointer;"
234
- onclick="${gvc.event(() => {
235
- gvc.glitter.closeDrawer();
236
- })}"
237
- >
238
- <i class="fa-sharp fa-solid fa-angle-left"></i>
239
- </div>
240
- <div class="${classPrefix}-cart-title">${Language.text('cart')}</div>
241
- <div class="flex-fill"></div>
242
- ${vm.dataList.length === 1 ? goToCheckoutButton(ApiCart.globalCart) : ''}
243
- </div>
244
- ${(() => {
245
- if (vm.dataList.length === 0) {
246
- return html`
247
- <div class="container d-flex align-items-center justify-content-center flex-column">
248
- <lottie-player
249
- style="max-width: 100%; width: 300px; height: 300px;"
250
- src="https://lottie.host/38ba8340-3414-41b8-b068-bba18d240bb3/h7e1Q29IQJ.json"
251
- speed="1"
252
- loop=""
253
- autoplay=""
254
- background="transparent"
255
- ></lottie-player>
256
- <div class="mt-3 fw-bold">
257
- ${Language.text('empty_cart_message')}
258
- </div>
259
- </div>`;
260
- } else {
261
- console.log(`vm.dataList==>`,vm.dataList)
262
- return vm.dataList
263
- .map((data) => {
264
- const logistic = vm.shippings.find((item) => item.value === data.logistic);
265
- const logiCartID = `${ApiCart.cartPrefix}_${logistic?.value}`;
266
- const logiCart = new ApiCart(logiCartID);
267
- logiCart.clearCart();
268
-
269
- return html`
270
- <div class="${classPrefix}-card">
271
- ${vm.dataList.length !== 1
272
- ? html`
273
- <div class="d-flex justify-content-between align-items-center px-3 mb-2">
274
- <div class="${classPrefix}-shipping-title">
275
- ${logistic?.name}
276
- </div>
277
- ${goToCheckoutButton(logiCartID)}
278
- </div>
279
- `
280
- : ''}
281
- ${data.cart
282
- .map((item) => {
283
- logiCart.addToCart(`${item.id}`, item.spec, item.count);
284
- return html`
285
- <div class="d-flex align-items-center px-3 position-relative"
286
- style="gap: 12px;">
287
- <div
288
- class="position-absolute"
289
- style="right:13px;top:0px;cursor:pointer;"
290
- onclick="${gvc.event(() => {
291
- new ApiCart().setCart((cartItem) => {
292
- cartItem.line_items = cartItem.line_items.filter((dd) => {
293
- return !(dd.id === item.id && item.spec.join('') === dd.spec.join(''));
294
- });
295
- refreshView();
296
- });
297
- })}"
298
- >
299
- <i class="fa-regular fa-trash-can"></i>
300
- </div>
301
- <div class="d-none"
302
- style="width: 10%">
303
- <i
304
- class="fa-solid fa-xmark-large"
305
- style="cursor: pointer;"
306
- onclick="${gvc.event(() => {
307
- new ApiCart().setCart((cartItem) => {
308
- cartItem.line_items = cartItem.line_items.filter((dd) => {
309
- return !(dd.id === item.id && item.spec.join('') === dd.spec.join(''));
310
- });
311
- refreshView();
312
- });
313
- })}"
314
- ></i>
315
- </div>
316
- <div class="d-flex"
317
- style="">
318
- <img src="${item.image}"
319
- class="${classPrefix}-wh rounded-3"/>
320
- </div>
321
- <div class="d-flex flex-column gap-1 flex-fill">
322
- <div class="${classPrefix}-title pe-3"
323
- style="">
324
- ${item.title}
325
- </div>
326
- <div class="${classPrefix}-spec ">
327
- ${(() => {
328
- const spec: any = (() => {
329
- if (item.spec) {
330
- return item.spec.map((dd: string, index: number) => {
331
- try {
332
- return (
333
- (item.specs[index] as any).option.find((d1: any) => {
334
- return d1.title === dd;
335
- }).language_title[Language.getLanguage()] || dd
336
- );
337
- } catch (e) {
338
- return dd;
339
- }
340
- });
341
- } else {
342
- return [];
343
- }
344
- })();
345
- return spec.join(' / ');
346
- })()}
347
- </div>
348
- <div class="d-flex align-items-center justify-content-between">
349
- <div class="d-flex align-items-center gap-1"
350
- style="font-size:14px;">
351
- ${Language.text('quantity')}
352
- :<select
353
- class="${classPrefix}-select"
354
- style="width: 100px;"
355
- onchange="${gvc.event((e) => {
356
- new ApiCart().setCart((cartItem) => {
357
- cartItem.line_items.find((dd) => {
358
- return `${dd.id}` === `${item.id}` && item.spec.join('') === dd.spec.join('');
359
- })!.count = parseInt(e.value, 10);
360
- refreshView();
361
- });
362
- })}"
363
- >
364
- ${[...new Array(99)]
365
- .map((_, index) => {
366
- return html`
367
- <option value="${index + 1}"
368
- ${index + 1 === item.count ? `selected` : ``}>
369
- ${index + 1}
370
- </option>`;
371
- })
372
- .join('')}
373
- </select>
374
- </div>
375
- ${Currency.convertCurrencyText(item.price * item.count)}
376
- </div>
377
- </div>
378
- </div>`;
379
- })
380
- .join(html`
381
- <div class="w-100 border-top my-3"></div>`)}
382
- </div>
383
- `;
384
- })
385
- .join(html`
386
- <div class="w-100 my-3"></div>`);
387
- }
388
- })()}
389
- </div>`;
390
- }
391
- } catch (e) {
392
- console.error(e);
393
- return `${e}`;
394
- }
395
- },
396
- divCreate: {},
397
- onCreate: () => {
398
- if (vm.loading) {
399
- const cart = new ApiCart().cart;
400
-
401
- Promise.all([
402
- new Promise((resolve) => {
403
- ApiShop.getShippingMethod().then((d) => {
404
- resolve(d);
405
- });
406
- }),
407
- new Promise((resolve) => {
408
- ApiShop.getProduct({
409
- page: 0,
410
- limit: 10000,
411
- status: 'inRange',
412
- show_hidden: true,
413
- id_list: [...new Set(cart.line_items.map((item) => item.id))].join(','),
414
- }).then((d) => {
415
- resolve(d);
416
- });
417
- }),
418
- ])
419
- .then(async (dataArray: any) => {
420
- const shippings = dataArray[0];
421
- if (shippings.result && shippings.response) {
422
- vm.shippings = shippings.response;
250
+ <i class="fa-regular fa-trash-can"></i>
251
+ </div>
252
+ <div class="d-none" style="width: 10%">
253
+ <i
254
+ class="fa-solid fa-xmark-large"
255
+ style="cursor: pointer;"
256
+ onclick="${gvc.event(() => {
257
+ new ApiCart().setCart(cartItem => {
258
+ cartItem.line_items = cartItem.line_items.filter(dd => {
259
+ return !(dd.id === item.id && item.spec.join('') === dd.spec.join(''));
260
+ });
261
+ refreshView();
262
+ });
263
+ })}"
264
+ ></i>
265
+ </div>
266
+ <div class="d-flex" style="">
267
+ <img src="${item.image}" class="${classPrefix}-wh rounded-3" />
268
+ </div>
269
+ <div class="d-flex flex-column gap-1 flex-fill">
270
+ <div class="${classPrefix}-title pe-3" style="">${item.title}</div>
271
+ <div class="${classPrefix}-spec ">
272
+ ${(() => {
273
+ const spec: any = (() => {
274
+ if (item.spec) {
275
+ return item.spec.map((dd: string, index: number) => {
276
+ try {
277
+ return (
278
+ (item.specs[index] as any).option.find((d1: any) => {
279
+ return d1.title === dd;
280
+ }).language_title[Language.getLanguage()] || dd
281
+ );
282
+ } catch (e) {
283
+ return dd;
423
284
  }
285
+ });
286
+ } else {
287
+ return [];
288
+ }
289
+ })();
290
+ return spec.join(' / ');
291
+ })()}
292
+ </div>
293
+ <div class="d-flex align-items-center justify-content-between">
294
+ <div class="d-flex align-items-center gap-1" style="font-size:14px;">
295
+ ${Language.text('quantity')} :<select
296
+ class="${classPrefix}-select"
297
+ style="width: 100px;"
298
+ onchange="${gvc.event(e => {
299
+ new ApiCart().setCart(cartItem => {
300
+ cartItem.line_items.find(dd => {
301
+ return `${dd.id}` === `${item.id}` && item.spec.join('') === dd.spec.join('');
302
+ })!.count = parseInt(e.value, 10);
303
+ refreshView();
304
+ });
305
+ })}"
306
+ >
307
+ ${[...new Array(99)]
308
+ .map((_, index) => {
309
+ return html` <option
310
+ value="${index + 1}"
311
+ ${index + 1 === item.count ? `selected` : ``}
312
+ >
313
+ ${index + 1}
314
+ </option>`;
315
+ })
316
+ .join('')}
317
+ </select>
318
+ </div>
319
+ ${Currency.convertCurrencyText(item.price * item.count)}
320
+ </div>
321
+ </div>
322
+ </div>`;
323
+ })
324
+ .join(html` <div class="w-100 border-top my-3"></div>`);
325
+ }
326
+ })()}
327
+ </div>`;
328
+ } catch (e) {
329
+ console.error(e);
330
+ return `${e}`;
331
+ }
332
+ },
333
+ onCreate: () => {
334
+ if (vm.loading) {
335
+ const cart = new ApiCart().cart;
424
336
 
425
- vm.dataList = [
426
- ...vm.shippings.map((item) => {
427
- return {
428
- logistic: item.value,
429
- cart: [],
430
- };
431
- }),
432
- ];
433
- console.log(`vm.shippings=>`, vm.shippings)
434
- console.log(`vm.dataList=>`, vm.dataList);
435
-
436
- const data = dataArray[1];
437
- if (data.result && data.response) {
438
- const products = data.response.data;
439
-
440
- for (const item of cart.line_items) {
441
- const product = products.find((p: {
442
- id: number
443
- }) => `${p.id}` === `${item.id}`);
444
- if (product) {
445
- const variant = PdClass.getVariant(product.content,{
446
- specs:item.spec
447
- });
337
+ Promise.all([
338
+ new Promise(resolve => {
339
+ ApiShop.getShippingMethod().then(d => {
340
+ resolve(d);
341
+ });
342
+ }),
343
+ new Promise(resolve => {
344
+ ApiShop.getProduct({
345
+ page: 0,
346
+ limit: 10000,
347
+ status: 'inRange',
348
+ show_hidden: true,
349
+ id_list: [...new Set(cart.line_items.map(item => item.id))].join(','),
350
+ }).then(d => {
351
+ resolve(d);
352
+ });
353
+ }),
354
+ ])
355
+ .then(async (dataArray: any) => {
356
+ const shippings = dataArray[0];
357
+ if (shippings.result && shippings.response) {
358
+ vm.shippings = shippings.response;
359
+ }
448
360
 
449
- const lineItem = {
450
- id: item.id,
451
- title: product.content.title,
452
- count: item.count,
453
- spec: item.spec,
454
- specs: product.content.specs,
455
- price: variant ? variant.sale_price : 0,
456
- image: await (async () => {
457
- if (!variant) {
458
- if(product.content && product.content.preview_image){
459
- return product.content.preview_image[0]
460
- }
461
- return this.noImageURL;
462
- }
463
- const img = await this.isImageUrlValid(variant.preview_image).then((isValid) => {
464
- return isValid ? variant.preview_image : product.content.preview_image[0] || this.noImageURL;
465
- });
466
- return img;
467
- })(),
468
- };
361
+ const data = dataArray[1];
362
+ const products = data.response.data;
469
363
 
470
- const logistics = product.content.designated_logistics;
471
- for (const data of vm.dataList) {
472
- if (!logistics || logistics.type === 'all' || logistics.list.includes(data.logistic)) {
473
- data.cart.push(lineItem);
474
- }
475
- }
476
- }
477
- }
364
+ for (const item of cart.line_items) {
365
+ const product = products.find((p: { id: number }) => `${p.id}` === `${item.id}`);
366
+ if (product) {
367
+ const variant = PdClass.getVariant(product.content, {
368
+ specs: item.spec,
369
+ });
478
370
 
479
- vm.dataList = vm.dataList.filter((item) => item.cart.length > 0);
480
- const hasFullShipping = vm.dataList.find((item) => {
481
- return item.cart.length === cart.line_items.length;
482
- });
483
- if (hasFullShipping) {
484
- vm.dataList = [hasFullShipping];
485
- }
486
- console.log(`vm.dataList ==>`, vm.dataList)
487
- }
488
- })
489
- .then(() => {
490
- (document.querySelector('.hy-drawer-content') as any).style.background = '#ffffff';
491
- vm.loading = false;
492
- gvc.notifyDataChange(vm.id);
493
- });
371
+ const lineItem = {
372
+ id: item.id,
373
+ title: product.content.title,
374
+ count: item.count,
375
+ spec: item.spec,
376
+ specs: product.content.specs,
377
+ price: variant ? variant.sale_price : 0,
378
+ image: await (async () => {
379
+ if (!variant) {
380
+ if (product.content && product.content.preview_image) {
381
+ return product.content.preview_image[0];
382
+ }
383
+ return CartModule.noImageURL;
494
384
  }
495
- },
496
- };
497
- })()
498
- ),
499
- () => {
500
- if (document.body.clientWidth > 800) {
501
- gvc.glitter.openDrawer(400);
502
- } else if (document.body.clientWidth < 600) {
503
- gvc.glitter.openDrawer(document.body.clientWidth);
504
- } else {
505
- gvc.glitter.openDrawer(document.body.clientWidth * 0.8);
506
- }
507
- }
508
- );
509
- }
385
+ const img = await CartModule.isImageUrlValid(variant.preview_image).then(isValid => {
386
+ return isValid
387
+ ? variant.preview_image
388
+ : product.content.preview_image[0] || CartModule.noImageURL;
389
+ });
390
+ return img;
391
+ })(),
392
+ };
393
+
394
+ vm.dataList.push(lineItem);
395
+ }
396
+ }
397
+ })
398
+ .then(() => {
399
+ (document.querySelector('.hy-drawer-content') as any).style.background = '#ffffff';
400
+ vm.loading = false;
401
+ gvc.notifyDataChange(vm.id);
402
+ });
403
+ }
404
+ },
405
+ };
406
+ })()
407
+ ),
408
+ () => {
409
+ if (document.body.clientWidth > 800) {
410
+ gvc.glitter.openDrawer(400);
411
+ } else if (document.body.clientWidth < 600) {
412
+ gvc.glitter.openDrawer(document.body.clientWidth);
413
+ } else {
414
+ gvc.glitter.openDrawer(document.body.clientWidth * 0.8);
415
+ }
416
+ }
417
+ );
418
+ }
510
419
  }