ts-glitter 20.8.7 → 20.8.9

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 (177) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-product.js +1 -1
  4. package/lowcode/backend-manager/bg-product.ts +1 -1
  5. package/lowcode/backend-manager/bg-recommend.js +1 -1
  6. package/lowcode/backend-manager/bg-recommend.ts +2 -2
  7. package/lowcode/backend-manager/bg-shopping.js +2 -5
  8. package/lowcode/backend-manager/bg-shopping.ts +2 -5
  9. package/lowcode/cms-plugin/POS-setting.js +58 -34
  10. package/lowcode/cms-plugin/POS-setting.ts +69 -33
  11. package/lowcode/cms-plugin/data-analyze-orders.js +0 -1
  12. package/lowcode/cms-plugin/data-analyze-orders.ts +1 -1
  13. package/lowcode/cms-plugin/data-analyze.js +1 -21
  14. package/lowcode/cms-plugin/data-analyze.ts +25 -25
  15. package/lowcode/cms-plugin/filter-options.js +1 -1
  16. package/lowcode/cms-plugin/filter-options.ts +1 -2
  17. package/lowcode/cms-plugin/information/information-module.js +275 -0
  18. package/lowcode/cms-plugin/information/information-module.ts +308 -0
  19. package/lowcode/cms-plugin/pos-pages/models.ts +3 -1
  20. package/lowcode/cms-plugin/pos-pages/payment-page.js +3 -11
  21. package/lowcode/cms-plugin/pos-pages/payment-page.ts +3 -11
  22. package/lowcode/cms-plugin/pos-pages/pos-function.js +1 -0
  23. package/lowcode/cms-plugin/pos-pages/pos-function.ts +1 -0
  24. package/lowcode/cms-plugin/pos-pages/products-page.js +1 -1
  25. package/lowcode/cms-plugin/pos-pages/products-page.ts +1 -1
  26. package/lowcode/cms-plugin/product-service.js +4 -9
  27. package/lowcode/cms-plugin/product-service.ts +4 -13
  28. package/lowcode/cms-plugin/shopping-discount-setting.js +76 -27
  29. package/lowcode/cms-plugin/shopping-discount-setting.ts +123 -63
  30. package/lowcode/cms-plugin/shopping-information.js +21 -167
  31. package/lowcode/cms-plugin/shopping-information.ts +35 -191
  32. package/lowcode/cms-plugin/shopping-order-return.js +212 -360
  33. package/lowcode/cms-plugin/shopping-order-return.ts +349 -482
  34. package/lowcode/cms-plugin/shopping-product-setting.js +8 -0
  35. package/lowcode/cms-plugin/shopping-product-setting.ts +12 -4
  36. package/lowcode/form-view/e-commerce/product-select.js +59 -51
  37. package/lowcode/form-view/e-commerce/product-select.ts +279 -266
  38. package/lowcode/glitter-base/global/language.js +2 -1
  39. package/lowcode/glitter-base/global/language.ts +2 -1
  40. package/lowcode/public-components/checkout/index.ts +2078 -2078
  41. package/lowcode/public-components/headers/sy-02.js +190 -179
  42. package/lowcode/public-components/headers/sy-02.ts +397 -370
  43. package/lowcode/public-components/headers/sy-03.js +133 -107
  44. package/lowcode/public-components/headers/sy-03.ts +276 -244
  45. package/lowcode/public-components/headers/sy-04.js +181 -146
  46. package/lowcode/public-components/headers/sy-04.ts +289 -247
  47. package/lowcode/public-components/product/pd-class.js +31 -23
  48. package/lowcode/public-components/product/pd-class.ts +51 -29
  49. package/lowcode/public-components/user-manager/um-voucher.js +1 -0
  50. package/lowcode/public-components/user-manager/um-voucher.ts +1 -0
  51. package/package.json +1 -1
  52. package/src/Language.js +1 -1
  53. package/src/Language.js.map +1 -1
  54. package/src/Language.ts +1 -1
  55. package/src/api-public/controllers/ai-chat.js.map +1 -1
  56. package/src/api-public/controllers/chat.js.map +1 -1
  57. package/src/api-public/controllers/customer-sessions.js.map +1 -1
  58. package/src/api-public/controllers/fb-message.js.map +1 -1
  59. package/src/api-public/controllers/fb-service.js.map +1 -1
  60. package/src/api-public/controllers/invoice.js.map +1 -1
  61. package/src/api-public/controllers/line-message.js.map +1 -1
  62. package/src/api-public/controllers/oauth.js.map +1 -1
  63. package/src/api-public/controllers/progress.js.map +1 -1
  64. package/src/api-public/controllers/rebate.js.map +1 -1
  65. package/src/api-public/controllers/recommend.js.map +1 -1
  66. package/src/api-public/controllers/reconciliation.js.map +1 -1
  67. package/src/api-public/controllers/shop.js +5 -2
  68. package/src/api-public/controllers/shop.js.map +1 -1
  69. package/src/api-public/controllers/shop.ts +7 -3
  70. package/src/api-public/controllers/shopee.js.map +1 -1
  71. package/src/api-public/controllers/sms.js.map +1 -1
  72. package/src/api-public/controllers/smtp.js.map +1 -1
  73. package/src/api-public/controllers/stock.js.map +1 -1
  74. package/src/api-public/controllers/track.js.map +1 -1
  75. package/src/api-public/controllers/voucher.js.map +1 -1
  76. package/src/api-public/models/glitter-finance.js +1 -2
  77. package/src/api-public/models/glitter-finance.js.map +1 -1
  78. package/src/api-public/services/EcInvoice.js.map +1 -1
  79. package/src/api-public/services/article.js.map +1 -1
  80. package/src/api-public/services/auto-send-email.js.map +1 -1
  81. package/src/api-public/services/chat.js.map +1 -1
  82. package/src/api-public/services/checkout-event.d.ts +1 -0
  83. package/src/api-public/services/checkout-event.js +17 -7
  84. package/src/api-public/services/checkout-event.js.map +1 -1
  85. package/src/api-public/services/checkout-event.ts +21 -9
  86. package/src/api-public/services/checkout.js.map +1 -1
  87. package/src/api-public/services/custom-code.js.map +1 -1
  88. package/src/api-public/services/customer-sessions.js.map +1 -1
  89. package/src/api-public/services/data-analyze.js +209 -196
  90. package/src/api-public/services/data-analyze.js.map +1 -1
  91. package/src/api-public/services/data-analyze.ts +219 -205
  92. package/src/api-public/services/delivery.js.map +1 -1
  93. package/src/api-public/services/ezpay/tool.d.ts +0 -1
  94. package/src/api-public/services/ezpay/tool.js.map +1 -1
  95. package/src/api-public/services/fake-data-model/fake-order.js.map +1 -1
  96. package/src/api-public/services/fake-data-model/fake-product.js.map +1 -1
  97. package/src/api-public/services/fake-data-model/fake-user.js.map +1 -1
  98. package/src/api-public/services/fb-api.js.map +1 -1
  99. package/src/api-public/services/filter-protect-data.js.map +1 -1
  100. package/src/api-public/services/financial-service.js +0 -1
  101. package/src/api-public/services/financial-service.js.map +1 -1
  102. package/src/api-public/services/form-check.js.map +1 -1
  103. package/src/api-public/services/graph-api.js.map +1 -1
  104. package/src/api-public/services/initial-fake-data.js.map +1 -1
  105. package/src/api-public/services/invoice.d.ts +3 -9
  106. package/src/api-public/services/invoice.js +66 -85
  107. package/src/api-public/services/invoice.js.map +1 -1
  108. package/src/api-public/services/invoice.ts +287 -293
  109. package/src/api-public/services/language-setting.js.map +1 -1
  110. package/src/api-public/services/mail.js.map +1 -1
  111. package/src/api-public/services/manager.js.map +1 -1
  112. package/src/api-public/services/paynow-logistics.js.map +1 -1
  113. package/src/api-public/services/phone-verify.js.map +1 -1
  114. package/src/api-public/services/pos.js.map +1 -1
  115. package/src/api-public/services/post.js.map +1 -1
  116. package/src/api-public/services/product-initial.js.map +1 -1
  117. package/src/api-public/services/rebate.js.map +1 -1
  118. package/src/api-public/services/reconciliation.js.map +1 -1
  119. package/src/api-public/services/schedule.d.ts +1 -0
  120. package/src/api-public/services/schedule.js +27 -0
  121. package/src/api-public/services/schedule.js.map +1 -1
  122. package/src/api-public/services/schedule.ts +30 -0
  123. package/src/api-public/services/shopping.d.ts +4 -3
  124. package/src/api-public/services/shopping.js +40 -20
  125. package/src/api-public/services/shopping.js.map +1 -1
  126. package/src/api-public/services/shopping.ts +52 -28
  127. package/src/api-public/services/stock.js.map +1 -1
  128. package/src/api-public/services/terms-check.js.map +1 -1
  129. package/src/api-public/services/updated-table-checked.js.map +1 -1
  130. package/src/api-public/services/user-update.js.map +1 -1
  131. package/src/api-public/services/user.d.ts +10 -0
  132. package/src/api-public/services/user.js +35 -8
  133. package/src/api-public/services/user.js.map +1 -1
  134. package/src/api-public/services/user.ts +50 -7
  135. package/src/api-public/services/voucher.js.map +1 -1
  136. package/src/api-public/utils/ut-database.js.map +1 -1
  137. package/src/app-project/android/app/src/main/res/xml/network_security_config.xml +3 -3
  138. package/src/app-project/android/app/src/main/res/xml/s.xml +5 -5
  139. package/src/app-project/android/gradlew.bat +94 -94
  140. package/src/app-project/serverless/src/controllers/index.js.map +1 -1
  141. package/src/app-project/serverless/src/controllers/sample.js.map +1 -1
  142. package/src/app-project/serverless/src/modules/database.d.ts +1 -2
  143. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  144. package/src/app-project/serverless/src/modules/exception.js.map +1 -1
  145. package/src/app-project/serverless/src/modules/hooks.js.map +1 -1
  146. package/src/app-project/serverless/src/modules/logger.js.map +1 -1
  147. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  148. package/src/app-project/serverless/src/modules/redis.js.map +1 -1
  149. package/src/app-project/serverless/src/modules/response.js.map +1 -1
  150. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  151. package/src/controllers/ai.js.map +1 -1
  152. package/src/controllers/global-event.js.map +1 -1
  153. package/src/controllers/page.js.map +1 -1
  154. package/src/controllers/private_config.js.map +1 -1
  155. package/src/export/export-test.js.map +1 -1
  156. package/src/firebase/message.js +1 -2
  157. package/src/firebase/message.js.map +1 -1
  158. package/src/helper/app_creater.js +1 -2
  159. package/src/helper/app_creater.js.map +1 -1
  160. package/src/helper/glitter-util.d.ts +0 -1
  161. package/src/helper/glitter-util.js.map +1 -1
  162. package/src/lambda/interface.d.ts +1 -1
  163. package/src/lambda/interface.js +2 -2
  164. package/src/lambda/interface.js.map +1 -1
  165. package/src/modules/exception.js.map +1 -1
  166. package/src/modules/hooks.js.map +1 -1
  167. package/src/modules/response.js.map +1 -1
  168. package/src/modules/ssh.js.map +1 -1
  169. package/src/public-config-initial/auto-fcm.js.map +1 -1
  170. package/src/run.js.map +1 -1
  171. package/src/run.ts +12 -12
  172. package/src/services/ai.js.map +1 -1
  173. package/src/services/ses.js +1 -2
  174. package/src/services/ses.js.map +1 -1
  175. package/src/services/system-schedule.js.map +1 -1
  176. package/src/update-progress-track.js.map +1 -1
  177. package/src/update-script.js.map +1 -1
@@ -0,0 +1,275 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { ShareDialog } from '../../glitterBundle/dialog/ShareDialog.js';
11
+ import { BgWidget } from '../../backend-manager/bg-widget.js';
12
+ import { FilterOptions } from '../filter-options.js';
13
+ const html = String.raw;
14
+ export class InformationModule {
15
+ constructor(gvc, vm, ShoppingInformation) {
16
+ this.gvc = gvc;
17
+ this.vm = vm;
18
+ this.ShoppingInformation = ShoppingInformation;
19
+ }
20
+ pickUpMode(title) {
21
+ const gvc = this.gvc;
22
+ const vm = this.vm;
23
+ const dialog = new ShareDialog(gvc.glitter);
24
+ return gvc.event(() => {
25
+ BgWidget.settingDialog({
26
+ gvc,
27
+ title,
28
+ width: 600,
29
+ innerHTML: gvc => {
30
+ return html `<div class="d-flex flex-column" style="gap:5px;">
31
+ ${[
32
+ html ` <div class="d-flex align-items-center" style="gap:10px;">
33
+ <div style="color: #393939; font-size: 16px;">啟用功能</div>
34
+ <div class="cursor_pointer form-check form-switch m-0 p-0" style="min-width: 50px;">
35
+ <input
36
+ class="form-check-input m-0"
37
+ type="checkbox"
38
+ onchange="${gvc.event(() => {
39
+ vm.data.pickup_mode = !vm.data.pickup_mode;
40
+ gvc.recreateView();
41
+ })}"
42
+ ${vm.data.pickup_mode ? `checked` : ''}
43
+ />
44
+ </div>
45
+ ${vm.data.pickup_mode
46
+ ? html `<div class="fw-bold fs-6 d-flex align-items-center">
47
+ 當前號碼 : ${vm.data.pickup_now || vm.data.pickup_start || 0}
48
+ <div class="mx-2"></div>
49
+ ${BgWidget.customButton({
50
+ button: {
51
+ color: 'snow',
52
+ size: 'sm',
53
+ },
54
+ text: {
55
+ name: '重置號碼',
56
+ },
57
+ event: gvc.event(() => {
58
+ const dialog = new ShareDialog(gvc.glitter);
59
+ dialog.checkYesOrNot({
60
+ text: '是否確認重置號碼?',
61
+ callback: response => {
62
+ if (response) {
63
+ vm.data.pickup_now = vm.data.pickup_start || '0';
64
+ gvc.recreateView();
65
+ }
66
+ },
67
+ });
68
+ }),
69
+ })}
70
+ </div>`
71
+ : ``}
72
+ </div>`,
73
+ ...(() => {
74
+ if (vm.data.pickup_mode) {
75
+ return [
76
+ BgWidget.editeInput({
77
+ gvc: gvc,
78
+ title: '初始號碼',
79
+ default: vm.data.pickup_start || '0',
80
+ callback: text => {
81
+ vm.data.pickup_start = text;
82
+ },
83
+ placeHolder: '請輸入初始號碼',
84
+ type: 'number',
85
+ }),
86
+ BgWidget.editeInput({
87
+ gvc: gvc,
88
+ title: html `<div class="d-flex flex-column">
89
+ ${['結束號碼', BgWidget.grayNote('輸入零則無上限')].join('')}
90
+ </div>`,
91
+ default: vm.data.pickup_end || '0',
92
+ callback: text => {
93
+ vm.data.pickup_end = text;
94
+ },
95
+ placeHolder: '請輸入結束號碼',
96
+ type: 'number',
97
+ }),
98
+ ];
99
+ }
100
+ else {
101
+ return [];
102
+ }
103
+ })(),
104
+ ].join(BgWidget.horizontalLine())}
105
+ </div>`;
106
+ },
107
+ footer_html: gvc => {
108
+ return [
109
+ BgWidget.cancel(gvc.event(() => {
110
+ gvc.closeDialog();
111
+ })),
112
+ BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
113
+ dialog.dataLoading({ visible: true });
114
+ yield vm.save_info();
115
+ yield Promise.all(this.ShoppingInformation.saveArray.map((dd) => dd()));
116
+ this.ShoppingInformation.saveArray = [];
117
+ dialog.dataLoading({ visible: false });
118
+ dialog.successMessage({ text: '儲存成功' });
119
+ gvc.closeDialog();
120
+ }))),
121
+ ].join('');
122
+ },
123
+ });
124
+ });
125
+ }
126
+ checkoutMode(title) {
127
+ const gvc = this.gvc;
128
+ const vm = this.vm;
129
+ const dialog = new ShareDialog(gvc.glitter);
130
+ return gvc.event(() => {
131
+ const originData = structuredClone(vm.data);
132
+ BgWidget.settingDialog({
133
+ gvc,
134
+ title,
135
+ width: 600,
136
+ innerHTML: gvc => {
137
+ const modes = vm.data.checkout_mode;
138
+ const arr = [
139
+ {
140
+ key: 'orderStatus',
141
+ name: '訂單狀態',
142
+ data: FilterOptions.orderStatusOptions,
143
+ },
144
+ {
145
+ key: 'payload',
146
+ name: '付款狀態',
147
+ data: FilterOptions.payloadStatusOptions,
148
+ },
149
+ {
150
+ key: 'progress',
151
+ name: '出貨狀況',
152
+ data: FilterOptions.progressOptions,
153
+ },
154
+ ];
155
+ return html `${BgWidget.grayNote('提示:勾選項目後,該項目將會作為訂單累積與分析數據的篩選條件')}
156
+ <div class="d-flex flex-column gap-1">
157
+ ${arr
158
+ .map(obj => {
159
+ return BgWidget.inlineCheckBox({
160
+ gvc,
161
+ title: obj.name,
162
+ def: modes[obj.key],
163
+ array: obj.data.map(item => ({ title: item.name, value: item.key })),
164
+ callback: (array) => {
165
+ modes[obj.key] = array;
166
+ },
167
+ type: 'multiple',
168
+ });
169
+ })
170
+ .join(BgWidget.mbContainer(12))}
171
+ </div>`;
172
+ },
173
+ footer_html: gvc => {
174
+ return [
175
+ BgWidget.cancel(gvc.event(() => {
176
+ vm.data = originData;
177
+ gvc.closeDialog();
178
+ })),
179
+ BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
180
+ dialog.dataLoading({ visible: true });
181
+ yield vm.save_info();
182
+ yield Promise.all(this.ShoppingInformation.saveArray.map((dd) => dd()));
183
+ this.ShoppingInformation.saveArray = [];
184
+ dialog.dataLoading({ visible: false });
185
+ dialog.successMessage({ text: '儲存成功' });
186
+ gvc.closeDialog();
187
+ }))),
188
+ ].join('');
189
+ },
190
+ });
191
+ });
192
+ }
193
+ invoiceMode(title) {
194
+ const gvc = this.gvc;
195
+ const vm = this.vm;
196
+ const dialog = new ShareDialog(gvc.glitter);
197
+ return gvc.event(() => {
198
+ const originData = structuredClone(vm.data);
199
+ BgWidget.settingDialog({
200
+ gvc,
201
+ title,
202
+ width: 600,
203
+ innerHTML: gvc => {
204
+ const modes = vm.data.invoice_mode;
205
+ const arr = [
206
+ {
207
+ key: 'orderStatus',
208
+ name: '訂單狀態',
209
+ data: FilterOptions.orderStatusOptions,
210
+ },
211
+ {
212
+ key: 'payload',
213
+ name: '付款狀態',
214
+ data: FilterOptions.payloadStatusOptions,
215
+ },
216
+ {
217
+ key: 'progress',
218
+ name: '出貨狀況',
219
+ data: FilterOptions.progressOptions,
220
+ },
221
+ ];
222
+ return html `${BgWidget.grayNote('提示:勾選項目後,該項目將會作為開立發票時的篩選條件')}
223
+ <div class="d-flex flex-column gap-1">
224
+ ${arr
225
+ .map(obj => {
226
+ return BgWidget.inlineCheckBox({
227
+ gvc,
228
+ title: obj.name,
229
+ def: modes[obj.key],
230
+ array: obj.data.map(item => ({ title: item.name, value: item.key })),
231
+ callback: (array) => {
232
+ modes[obj.key] = array;
233
+ },
234
+ type: 'multiple',
235
+ });
236
+ })
237
+ .join(BgWidget.mbContainer(12))}
238
+ ${BgWidget.editeInput({
239
+ gvc,
240
+ title: '若達成觸發時機,幾天後發送',
241
+ default: `${modes.afterDays || 0}`,
242
+ placeHolder: '輸入 0 則立即發送',
243
+ callback: value => {
244
+ const n = parseInt(`${value}`, 0);
245
+ if (isNaN(n) || n < 0) {
246
+ dialog.errorMessage({ text: '請輸入 0 或大於 0 的數字' });
247
+ return;
248
+ }
249
+ modes.afterDays = n;
250
+ },
251
+ divStyle: 'margin-top: 12px;',
252
+ })}
253
+ </div>`;
254
+ },
255
+ footer_html: gvc => {
256
+ return [
257
+ BgWidget.cancel(gvc.event(() => {
258
+ vm.data = originData;
259
+ gvc.closeDialog();
260
+ })),
261
+ BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
262
+ dialog.dataLoading({ visible: true });
263
+ yield vm.save_info();
264
+ yield Promise.all(this.ShoppingInformation.saveArray.map((dd) => dd()));
265
+ this.ShoppingInformation.saveArray = [];
266
+ dialog.dataLoading({ visible: false });
267
+ dialog.successMessage({ text: '儲存成功' });
268
+ gvc.closeDialog();
269
+ }))),
270
+ ].join('');
271
+ },
272
+ });
273
+ });
274
+ }
275
+ }
@@ -0,0 +1,308 @@
1
+ import { GVC } from '../../glitterBundle/GVController.js';
2
+ import { ShareDialog } from '../../glitterBundle/dialog/ShareDialog.js';
3
+ import { BgWidget } from '../../backend-manager/bg-widget.js';
4
+ import { FilterOptions } from '../filter-options.js';
5
+
6
+ export type ViewModel = {
7
+ id: string;
8
+ tableId: string;
9
+ filterId: string;
10
+ type: 'basic' | 'function' | 'global';
11
+ data: any;
12
+ SEOData: any;
13
+ domain: any;
14
+ dataList: any;
15
+ query?: string;
16
+ mainLoading: boolean;
17
+ SEOLoading: boolean;
18
+ domainLoading: boolean;
19
+ save_info: () => Promise<any>;
20
+ };
21
+
22
+ const html = String.raw;
23
+
24
+ export class InformationModule {
25
+ gvc: GVC;
26
+ vm: ViewModel;
27
+ ShoppingInformation: any;
28
+
29
+ constructor(gvc: GVC, vm: any, ShoppingInformation: any) {
30
+ this.gvc = gvc;
31
+ this.vm = vm;
32
+ this.ShoppingInformation = ShoppingInformation;
33
+ }
34
+
35
+ pickUpMode(title: string) {
36
+ const gvc = this.gvc;
37
+ const vm = this.vm;
38
+ const dialog = new ShareDialog(gvc.glitter);
39
+
40
+ return gvc.event(() => {
41
+ BgWidget.settingDialog({
42
+ gvc,
43
+ title,
44
+ width: 600,
45
+ innerHTML: gvc => {
46
+ return html`<div class="d-flex flex-column" style="gap:5px;">
47
+ ${[
48
+ html` <div class="d-flex align-items-center" style="gap:10px;">
49
+ <div style="color: #393939; font-size: 16px;">啟用功能</div>
50
+ <div class="cursor_pointer form-check form-switch m-0 p-0" style="min-width: 50px;">
51
+ <input
52
+ class="form-check-input m-0"
53
+ type="checkbox"
54
+ onchange="${gvc.event(() => {
55
+ vm.data.pickup_mode = !vm.data.pickup_mode;
56
+ gvc.recreateView();
57
+ })}"
58
+ ${vm.data.pickup_mode ? `checked` : ''}
59
+ />
60
+ </div>
61
+ ${vm.data.pickup_mode
62
+ ? html`<div class="fw-bold fs-6 d-flex align-items-center">
63
+ 當前號碼 : ${vm.data.pickup_now || vm.data.pickup_start || 0}
64
+ <div class="mx-2"></div>
65
+ ${BgWidget.customButton({
66
+ button: {
67
+ color: 'snow',
68
+ size: 'sm',
69
+ },
70
+ text: {
71
+ name: '重置號碼',
72
+ },
73
+ event: gvc.event(() => {
74
+ const dialog = new ShareDialog(gvc.glitter);
75
+ dialog.checkYesOrNot({
76
+ text: '是否確認重置號碼?',
77
+ callback: response => {
78
+ if (response) {
79
+ vm.data.pickup_now = vm.data.pickup_start || '0';
80
+ gvc.recreateView();
81
+ }
82
+ },
83
+ });
84
+ }),
85
+ })}
86
+ </div>`
87
+ : ``}
88
+ </div>`,
89
+ ...(() => {
90
+ if (vm.data.pickup_mode) {
91
+ return [
92
+ BgWidget.editeInput({
93
+ gvc: gvc,
94
+ title: '初始號碼',
95
+ default: vm.data.pickup_start || '0',
96
+ callback: text => {
97
+ vm.data.pickup_start = text;
98
+ },
99
+ placeHolder: '請輸入初始號碼',
100
+ type: 'number',
101
+ }),
102
+ BgWidget.editeInput({
103
+ gvc: gvc,
104
+ title: html`<div class="d-flex flex-column">
105
+ ${['結束號碼', BgWidget.grayNote('輸入零則無上限')].join('')}
106
+ </div>`,
107
+ default: vm.data.pickup_end || '0',
108
+ callback: text => {
109
+ vm.data.pickup_end = text;
110
+ },
111
+ placeHolder: '請輸入結束號碼',
112
+ type: 'number',
113
+ }),
114
+ ];
115
+ } else {
116
+ return [];
117
+ }
118
+ })(),
119
+ ].join(BgWidget.horizontalLine())}
120
+ </div>`;
121
+ },
122
+ footer_html: gvc => {
123
+ return [
124
+ BgWidget.cancel(
125
+ gvc.event(() => {
126
+ gvc.closeDialog();
127
+ })
128
+ ),
129
+ BgWidget.save(
130
+ gvc.event(async () => {
131
+ dialog.dataLoading({ visible: true });
132
+ await vm.save_info();
133
+ await Promise.all(this.ShoppingInformation.saveArray.map((dd: any) => dd()));
134
+ this.ShoppingInformation.saveArray = [];
135
+ dialog.dataLoading({ visible: false });
136
+ dialog.successMessage({ text: '儲存成功' });
137
+ gvc.closeDialog();
138
+ })
139
+ ),
140
+ ].join('');
141
+ },
142
+ });
143
+ });
144
+ }
145
+
146
+ checkoutMode(title: string) {
147
+ const gvc = this.gvc;
148
+ const vm = this.vm;
149
+ const dialog = new ShareDialog(gvc.glitter);
150
+
151
+ return gvc.event(() => {
152
+ const originData = structuredClone(vm.data);
153
+ BgWidget.settingDialog({
154
+ gvc,
155
+ title,
156
+ width: 600,
157
+ innerHTML: gvc => {
158
+ const modes = vm.data.checkout_mode;
159
+ const arr = [
160
+ {
161
+ key: 'orderStatus',
162
+ name: '訂單狀態',
163
+ data: FilterOptions.orderStatusOptions,
164
+ },
165
+ {
166
+ key: 'payload',
167
+ name: '付款狀態',
168
+ data: FilterOptions.payloadStatusOptions,
169
+ },
170
+ {
171
+ key: 'progress',
172
+ name: '出貨狀況',
173
+ data: FilterOptions.progressOptions,
174
+ },
175
+ ];
176
+
177
+ return html`${BgWidget.grayNote('提示:勾選項目後,該項目將會作為訂單累積與分析數據的篩選條件')}
178
+ <div class="d-flex flex-column gap-1">
179
+ ${arr
180
+ .map(obj => {
181
+ return BgWidget.inlineCheckBox({
182
+ gvc,
183
+ title: obj.name,
184
+ def: modes[obj.key],
185
+ array: obj.data.map(item => ({ title: item.name, value: item.key })),
186
+ callback: (array: any) => {
187
+ modes[obj.key] = array;
188
+ },
189
+ type: 'multiple',
190
+ });
191
+ })
192
+ .join(BgWidget.mbContainer(12))}
193
+ </div>`;
194
+ },
195
+ footer_html: gvc => {
196
+ return [
197
+ BgWidget.cancel(
198
+ gvc.event(() => {
199
+ vm.data = originData;
200
+ gvc.closeDialog();
201
+ })
202
+ ),
203
+ BgWidget.save(
204
+ gvc.event(async () => {
205
+ dialog.dataLoading({ visible: true });
206
+ await vm.save_info();
207
+ await Promise.all(this.ShoppingInformation.saveArray.map((dd: any) => dd()));
208
+ this.ShoppingInformation.saveArray = [];
209
+ dialog.dataLoading({ visible: false });
210
+ dialog.successMessage({ text: '儲存成功' });
211
+ gvc.closeDialog();
212
+ })
213
+ ),
214
+ ].join('');
215
+ },
216
+ });
217
+ });
218
+ }
219
+
220
+ invoiceMode(title: string) {
221
+ const gvc = this.gvc;
222
+ const vm = this.vm;
223
+ const dialog = new ShareDialog(gvc.glitter);
224
+
225
+ return gvc.event(() => {
226
+ const originData = structuredClone(vm.data);
227
+ BgWidget.settingDialog({
228
+ gvc,
229
+ title,
230
+ width: 600,
231
+ innerHTML: gvc => {
232
+ const modes = vm.data.invoice_mode;
233
+ const arr = [
234
+ {
235
+ key: 'orderStatus',
236
+ name: '訂單狀態',
237
+ data: FilterOptions.orderStatusOptions,
238
+ },
239
+ {
240
+ key: 'payload',
241
+ name: '付款狀態',
242
+ data: FilterOptions.payloadStatusOptions,
243
+ },
244
+ {
245
+ key: 'progress',
246
+ name: '出貨狀況',
247
+ data: FilterOptions.progressOptions,
248
+ },
249
+ ];
250
+
251
+ return html`${BgWidget.grayNote('提示:勾選項目後,該項目將會作為開立發票時的篩選條件')}
252
+ <div class="d-flex flex-column gap-1">
253
+ ${arr
254
+ .map(obj => {
255
+ return BgWidget.inlineCheckBox({
256
+ gvc,
257
+ title: obj.name,
258
+ def: modes[obj.key],
259
+ array: obj.data.map(item => ({ title: item.name, value: item.key })),
260
+ callback: (array: any) => {
261
+ modes[obj.key] = array;
262
+ },
263
+ type: 'multiple',
264
+ });
265
+ })
266
+ .join(BgWidget.mbContainer(12))}
267
+ ${BgWidget.editeInput({
268
+ gvc,
269
+ title: '若達成觸發時機,幾天後發送',
270
+ default: `${modes.afterDays || 0}`,
271
+ placeHolder: '輸入 0 則立即發送',
272
+ callback: value => {
273
+ const n = parseInt(`${value}`, 0);
274
+ if (isNaN(n) || n < 0) {
275
+ dialog.errorMessage({ text: '請輸入 0 或大於 0 的數字' });
276
+ return;
277
+ }
278
+ modes.afterDays = n;
279
+ },
280
+ divStyle: 'margin-top: 12px;',
281
+ })}
282
+ </div>`;
283
+ },
284
+ footer_html: gvc => {
285
+ return [
286
+ BgWidget.cancel(
287
+ gvc.event(() => {
288
+ vm.data = originData;
289
+ gvc.closeDialog();
290
+ })
291
+ ),
292
+ BgWidget.save(
293
+ gvc.event(async () => {
294
+ dialog.dataLoading({ visible: true });
295
+ await vm.save_info();
296
+ await Promise.all(this.ShoppingInformation.saveArray.map((dd: any) => dd()));
297
+ this.ShoppingInformation.saveArray = [];
298
+ dialog.dataLoading({ visible: false });
299
+ dialog.successMessage({ text: '儲存成功' });
300
+ gvc.closeDialog();
301
+ })
302
+ ),
303
+ ].join('');
304
+ },
305
+ });
306
+ });
307
+ }
308
+ }
@@ -83,6 +83,8 @@ export class OrderDetail {
83
83
  public static singleInstance: OrderDetail = new OrderDetail(0, 0);
84
84
  }
85
85
 
86
+ type VoucherForType = 'all' | 'collection' | 'product' | 'manager_tag';
87
+
86
88
  export interface VoucherData {
87
89
  id: number;
88
90
  title: string;
@@ -90,7 +92,7 @@ export interface VoucherData {
90
92
  reBackType: 'rebate' | 'discount' | 'shipment_free';
91
93
  trigger: 'auto' | 'code';
92
94
  value: number;
93
- for: 'collection' | 'product' | 'all';
95
+ for: VoucherForType;
94
96
  rule: 'min_price' | 'min_count';
95
97
  forKey: string[];
96
98
  ruleValue: number;
@@ -179,9 +179,7 @@ export class PaymentPage {
179
179
  >
180
180
  <div style="height: 20px;"></div>
181
181
  <div
182
- style="width: 70px;height: 70px;
183
- min-width: 70px;min-height: 70px;
184
- border-radius: 5px;background: 50%/cover url('${data.preview_image ||
182
+ style="width: 70px;height: 70px; min-width: 70px;min-height: 70px; border-radius: 5px;background: 50%/cover url('${data.preview_image ||
185
183
  'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg'}')"
186
184
  ></div>
187
185
  <div
@@ -210,19 +208,13 @@ export class PaymentPage {
210
208
  return ``;
211
209
  }
212
210
  else {
213
- return `<div>${BgWidget.dangerInsignia('需預購')}</div>`;
211
+ return html `<div>${BgWidget.dangerInsignia('需預購')}</div>`;
214
212
  }
215
213
  })()}
216
214
  ${data.title}
217
215
  </div>
218
216
  <span
219
- style="color: #949494;
220
- font-size: 16px;
221
- font-style: normal;
222
- font-weight: 500;
223
- line-height: normal;
224
- letter-spacing: 0.64px;
225
- text-transform: uppercase;"
217
+ style="color: #949494; font-size: 16px; font-style: normal; font-weight: 500; line-height: normal; letter-spacing: 0.64px; text-transform: uppercase;"
226
218
  >
227
219
  ${(() => {
228
220
  return data.spec.length > 0
@@ -212,9 +212,7 @@ export class PaymentPage {
212
212
  >
213
213
  <div style="height: 20px;"></div>
214
214
  <div
215
- style="width: 70px;height: 70px;
216
- min-width: 70px;min-height: 70px;
217
- border-radius: 5px;background: 50%/cover url('${data.preview_image ||
215
+ style="width: 70px;height: 70px; min-width: 70px;min-height: 70px; border-radius: 5px;background: 50%/cover url('${data.preview_image ||
218
216
  'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg'}')"
219
217
  ></div>
220
218
  <div
@@ -243,19 +241,13 @@ export class PaymentPage {
243
241
  if (!data.pre_order) {
244
242
  return ``;
245
243
  } else {
246
- return `<div>${BgWidget.dangerInsignia('需預購')}</div>`;
244
+ return html`<div>${BgWidget.dangerInsignia('需預購')}</div>`;
247
245
  }
248
246
  })()}
249
247
  ${data.title}
250
248
  </div>
251
249
  <span
252
- style="color: #949494;
253
- font-size: 16px;
254
- font-style: normal;
255
- font-weight: 500;
256
- line-height: normal;
257
- letter-spacing: 0.64px;
258
- text-transform: uppercase;"
250
+ style="color: #949494; font-size: 16px; font-style: normal; font-weight: 500; line-height: normal; letter-spacing: 0.64px; text-transform: uppercase;"
259
251
  >
260
252
  ${(() => {
261
253
  return data.spec.length > 0
@@ -37,6 +37,7 @@ function getVoucherText(gvc, voucherData) {
37
37
  const productForList = [
38
38
  { title: Language.text('all_products'), value: 'all' },
39
39
  { title: Language.text('product_categories'), value: 'collection' },
40
+ { title: Language.text('products'), value: 'manager_tag' },
40
41
  { title: Language.text('products'), value: 'product' },
41
42
  ];
42
43
  const getRebateDescription = (voucherData, rebateTitle) => {