ts-glitter 20.6.8 → 20.7.0

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 (175) hide show
  1. package/lowcode/Entry.js +2 -2
  2. package/lowcode/Entry.ts +2 -2
  3. package/lowcode/backend-manager/bg-blog.js +617 -621
  4. package/lowcode/backend-manager/bg-blog.ts +2323 -2325
  5. package/lowcode/backend-manager/bg-line.js +5 -4
  6. package/lowcode/backend-manager/bg-line.ts +5 -4
  7. package/lowcode/backend-manager/bg-list-component.js +9 -0
  8. package/lowcode/backend-manager/bg-list-component.ts +15 -1
  9. package/lowcode/backend-manager/bg-notify.js +6 -4
  10. package/lowcode/backend-manager/bg-notify.ts +6 -4
  11. package/lowcode/backend-manager/bg-product.js +145 -0
  12. package/lowcode/backend-manager/bg-product.ts +153 -0
  13. package/lowcode/backend-manager/bg-sns.js +5 -3
  14. package/lowcode/backend-manager/bg-sns.ts +5 -3
  15. package/lowcode/backend-manager/bg-widget.js +92 -4
  16. package/lowcode/backend-manager/bg-widget.ts +122 -6
  17. package/lowcode/backend-manager/splitPage.js +0 -39
  18. package/lowcode/backend-manager/splitPage.ts +0 -40
  19. package/lowcode/cms-plugin/auto-fcm-advertise.js +17 -5
  20. package/lowcode/cms-plugin/auto-fcm-advertise.ts +19 -6
  21. package/lowcode/cms-plugin/auto-fcm-history.js +2732 -0
  22. package/lowcode/cms-plugin/auto-fcm-history.ts +2995 -0
  23. package/lowcode/cms-plugin/cms-router.js +5 -0
  24. package/lowcode/cms-plugin/cms-router.ts +6 -0
  25. package/lowcode/cms-plugin/filter-options.js +80 -27
  26. package/lowcode/cms-plugin/filter-options.ts +83 -27
  27. package/lowcode/cms-plugin/language-backend.js +50 -39
  28. package/lowcode/cms-plugin/language-backend.ts +109 -95
  29. package/lowcode/cms-plugin/menus-setting.js +175 -151
  30. package/lowcode/cms-plugin/menus-setting.ts +620 -591
  31. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  32. package/lowcode/cms-plugin/module/data.js +7 -7
  33. package/lowcode/cms-plugin/module/data.ts +262 -233
  34. package/lowcode/cms-plugin/module/delivery-html.js +18 -10
  35. package/lowcode/cms-plugin/module/delivery-html.ts +26 -10
  36. package/lowcode/cms-plugin/module/order-setting.js +458 -328
  37. package/lowcode/cms-plugin/module/order-setting.ts +622 -351
  38. package/lowcode/cms-plugin/module/product-excel.js +1 -1
  39. package/lowcode/cms-plugin/module/product-excel.ts +2 -1
  40. package/lowcode/cms-plugin/order/order-module.js +90 -1
  41. package/lowcode/cms-plugin/order/order-module.ts +106 -1
  42. package/lowcode/cms-plugin/pos-pages/payment-page.js +11 -8
  43. package/lowcode/cms-plugin/pos-pages/payment-page.ts +28 -15
  44. package/lowcode/cms-plugin/pos-pages/products-page.js +0 -39
  45. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -40
  46. package/lowcode/cms-plugin/shopping-collections.ts +1 -3
  47. package/lowcode/cms-plugin/shopping-finance-setting.js +19 -80
  48. package/lowcode/cms-plugin/shopping-finance-setting.ts +19 -87
  49. package/lowcode/cms-plugin/shopping-order-manager.js +122 -38
  50. package/lowcode/cms-plugin/shopping-order-manager.ts +160 -58
  51. package/lowcode/cms-plugin/shopping-product-setting.js +364 -376
  52. package/lowcode/cms-plugin/shopping-product-setting.ts +406 -415
  53. package/lowcode/cms-plugin/shopping-setting-advance.js +57 -16
  54. package/lowcode/cms-plugin/shopping-setting-advance.ts +69 -18
  55. package/lowcode/cms-plugin/stock-history.js +75 -63
  56. package/lowcode/cms-plugin/stock-history.ts +390 -376
  57. package/lowcode/cms-plugin/user/user-module.js +2 -43
  58. package/lowcode/cms-plugin/user/user-module.ts +2 -46
  59. package/lowcode/cms-plugin/user-list.js +4 -6
  60. package/lowcode/cms-plugin/user-list.ts +35 -38
  61. package/lowcode/css/editor.css +42 -3
  62. package/lowcode/glitter-base/global/language.js +6 -1
  63. package/lowcode/glitter-base/global/language.ts +10 -4
  64. package/lowcode/glitter-base/global/payment-config.js +19 -16
  65. package/lowcode/glitter-base/global/payment-config.ts +22 -16
  66. package/lowcode/glitter-base/global/shipment-config.js +6 -5
  67. package/lowcode/glitter-base/global/shipment-config.ts +12 -10
  68. package/lowcode/glitter-base/route/fcm.js +21 -1
  69. package/lowcode/glitter-base/route/fcm.ts +22 -2
  70. package/lowcode/glitter-base/route/shopping.js +8 -32
  71. package/lowcode/glitter-base/route/shopping.ts +10 -33
  72. package/lowcode/glitter-base/route/stock.ts +1 -0
  73. package/lowcode/glitter-base/route/user.js +11 -2
  74. package/lowcode/glitter-base/route/user.ts +23 -12
  75. package/lowcode/jspage/function-page/setting_editor.js +9 -0
  76. package/lowcode/jspage/function-page/setting_editor.ts +9 -0
  77. package/lowcode/public-components/blogs/list.js +223 -195
  78. package/lowcode/public-components/blogs/list.ts +383 -352
  79. package/lowcode/public-components/product/product-list.js +8 -4
  80. package/lowcode/public-components/product/product-list.ts +9 -4
  81. package/lowcode/public-components/terms-related/index.js +1 -1
  82. package/lowcode/public-components/terms-related/index.ts +1 -1
  83. package/lowcode/public-components/user-manager/um-login.js +1 -1
  84. package/lowcode/public-components/user-manager/um-login.ts +2 -2
  85. package/lowcode/public-components/user-manager/um-order.js +41 -5
  86. package/lowcode/public-components/user-manager/um-order.ts +58 -20
  87. package/lowcode/public-components/user-manager/um-voucher.ts +2 -2
  88. package/nhi4veq3gk.json +1 -0
  89. package/package.json +1 -1
  90. package/src/Language.d.ts +2 -0
  91. package/src/Language.js +66 -65
  92. package/src/Language.js.map +1 -1
  93. package/src/Language.ts +719 -715
  94. package/src/api-public/config/shipment-config.js +3 -2
  95. package/src/api-public/config/shipment-config.js.map +1 -1
  96. package/src/api-public/config/shipment-config.ts +3 -2
  97. package/src/api-public/controllers/ai-chat.js.map +1 -1
  98. package/src/api-public/controllers/ai-chat.ts +1 -2
  99. package/src/api-public/controllers/fcm.js +23 -58
  100. package/src/api-public/controllers/fcm.js.map +1 -1
  101. package/src/api-public/controllers/fcm.ts +28 -56
  102. package/src/api-public/controllers/shop.js +7 -1
  103. package/src/api-public/controllers/shop.js.map +1 -1
  104. package/src/api-public/controllers/shop.ts +17 -10
  105. package/src/api-public/controllers/user.js +1 -0
  106. package/src/api-public/controllers/user.js.map +1 -1
  107. package/src/api-public/controllers/user.ts +2 -0
  108. package/src/api-public/services/auto-send-email.js +247 -187
  109. package/src/api-public/services/auto-send-email.js.map +1 -1
  110. package/src/api-public/services/auto-send-email.ts +568 -505
  111. package/src/api-public/services/delivery.js +1 -1
  112. package/src/api-public/services/delivery.js.map +1 -1
  113. package/src/api-public/services/delivery.ts +6 -5
  114. package/src/api-public/services/financial-service.js +1 -2
  115. package/src/api-public/services/financial-service.js.map +1 -1
  116. package/src/api-public/services/financial-service.ts +4 -6
  117. package/src/api-public/services/manager.d.ts +4 -3
  118. package/src/api-public/services/manager.js +8 -12
  119. package/src/api-public/services/manager.js.map +1 -1
  120. package/src/api-public/services/manager.ts +57 -59
  121. package/src/api-public/services/model/handlePaymentTransaction.d.ts +1 -1
  122. package/src/api-public/services/model/handlePaymentTransaction.js +23 -3
  123. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  124. package/src/api-public/services/model/handlePaymentTransaction.ts +25 -36
  125. package/src/api-public/services/schedule.d.ts +1 -0
  126. package/src/api-public/services/schedule.js +27 -0
  127. package/src/api-public/services/schedule.js.map +1 -1
  128. package/src/api-public/services/schedule.ts +30 -0
  129. package/src/api-public/services/shopping.d.ts +22 -2
  130. package/src/api-public/services/shopping.js +371 -95
  131. package/src/api-public/services/shopping.js.map +1 -1
  132. package/src/api-public/services/shopping.ts +499 -141
  133. package/src/api-public/services/stock.js +0 -3
  134. package/src/api-public/services/stock.js.map +1 -1
  135. package/src/api-public/services/stock.ts +3 -3
  136. package/src/api-public/services/user.d.ts +1 -0
  137. package/src/api-public/services/user.js +32 -12
  138. package/src/api-public/services/user.js.map +1 -1
  139. package/src/api-public/services/user.ts +38 -19
  140. package/src/api-public/services/workers.js +3 -3
  141. package/src/api-public/services/workers.js.map +1 -1
  142. package/src/api-public/services/workers.ts +103 -103
  143. package/src/app-project/ios/proshake/AppDelegate.swift +51 -7
  144. package/src/app-project/ios/proshake/Info.plist +11 -9
  145. package/src/app-project/ios/proshake/SceneDelegate.swift +18 -0
  146. package/src/app-project/ios/proshake/glitter-interface/BasicUtil.swift +43 -2
  147. package/src/app-project/ios/proshake/glitter-interface/Ecommerce.swift +56 -0
  148. package/src/app-project/ios/proshake.xcodeproj/project.xcworkspace/xcuserdata/jianzhi.wang.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  149. package/src/app-project/serverless/src/modules/database.js +1 -1
  150. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  151. package/src/app-project/serverless/src/modules/database.ts +171 -171
  152. package/src/controllers/template.d.ts +1 -1
  153. package/src/controllers/template.js +16 -16
  154. package/src/controllers/template.js.map +1 -1
  155. package/src/controllers/template.ts +98 -84
  156. package/src/modules/database.js +3 -1
  157. package/src/modules/database.js.map +1 -1
  158. package/src/modules/database.ts +185 -181
  159. package/src/modules/firebase.d.ts +17 -0
  160. package/src/modules/firebase.js +126 -0
  161. package/src/modules/firebase.js.map +1 -1
  162. package/src/modules/firebase.ts +169 -0
  163. package/src/public-config-initial/auto-fcm.js +8 -2
  164. package/src/public-config-initial/auto-fcm.js.map +1 -1
  165. package/src/public-config-initial/auto-fcm.ts +15 -6
  166. package/src/services/app.d.ts +2 -1
  167. package/src/services/app.js.map +1 -1
  168. package/src/services/app.ts +2 -1
  169. package/src/services/ios-project.js +12 -6
  170. package/src/services/ios-project.js.map +1 -1
  171. package/src/services/ios-project.ts +12 -6
  172. package/src/services/template.d.ts +3 -2
  173. package/src/services/template.js +2 -1
  174. package/src/services/template.js.map +1 -1
  175. package/src/services/template.ts +13 -20
@@ -88,402 +88,390 @@ export class ShoppingProductSetting {
88
88
  window.parent.glitter.share.checkData = () => true;
89
89
  vm.tableId = gvc.glitter.getUUID();
90
90
  vm.dataList = [];
91
- const vmlist = {
92
- id: glitter.getUUID(),
93
- loading: true,
94
- collections: [],
95
- };
96
91
  return gvc.bindView({
97
- bind: vmlist.id,
92
+ bind: glitter.getUUID(),
98
93
  view: () => {
99
- if (vmlist.loading) {
100
- return '';
101
- }
102
- else {
103
- if (FilterOptions.productFunnel.findIndex(item => item.key === 'collection') === -1) {
104
- FilterOptions.productFunnel.push({
105
- key: 'collection',
106
- type: 'multi_checkbox',
107
- name: '商品分類',
108
- data: vmlist.collections.map(item => {
109
- return {
110
- key: `${item.key}`,
111
- name: item.value,
112
- };
113
- }),
94
+ return BgWidget.container(html `
95
+ <div class="title-container">
96
+ ${BgWidget.title((() => {
97
+ const titleMap = {
98
+ addProduct: '加購品',
99
+ giveaway: '贈品',
100
+ product: '商品列表',
101
+ hidden: '隱形賣場商品',
102
+ };
103
+ return titleMap[type] || '';
104
+ })())}
105
+ <div class="flex-fill"></div>
106
+ <div style="display: flex; gap: 10px;">
107
+ ${[
108
+ BgWidget.grayButton('匯入', gvc.event(() => {
109
+ ProductExcel.importDialog(gvc, () => gvc.notifyDataChange(vm.id));
110
+ })),
111
+ BgWidget.grayButton('匯出', gvc.event(() => {
112
+ ProductExcel.exportDialog(gvc, type, vm.apiJSON, vm.checkedData);
113
+ })),
114
+ BgWidget.darkButton('新增', gvc.event(() => {
115
+ var _b, _c, _d, _e;
116
+ ShoppingProductSetting.select_language = (_d = (_c = (_b = window.parent) === null || _b === void 0 ? void 0 : _b.store_info) === null || _c === void 0 ? void 0 : _c.language_setting) === null || _d === void 0 ? void 0 : _d.def;
117
+ const supportProducts = ShoppingProductSetting.getSupportProductCategory();
118
+ if (supportProducts.length <= 1) {
119
+ ShoppingProductSetting.select_product_type = (((_e = supportProducts[0]) === null || _e === void 0 ? void 0 : _e.key) || '');
120
+ vm.type = 'add';
121
+ return;
122
+ }
123
+ ShoppingProductSetting.select_product_type = supportProducts[0].key;
124
+ BgWidget.settingDialog({
125
+ gvc: gvc,
126
+ title: '選擇商品類型',
127
+ innerHTML: (gvc) => {
128
+ return html `
129
+ <div class="d-flex align-items-center">
130
+ ${BgWidget.select({
131
+ gvc: gvc,
132
+ callback: data => {
133
+ ShoppingProductSetting.select_product_type = data;
134
+ },
135
+ options: supportProducts,
136
+ default: ShoppingProductSetting.select_product_type,
137
+ })}
138
+ </div>
139
+ `;
140
+ },
141
+ footer_html: (gvc) => {
142
+ return BgWidget.save(gvc.event(() => {
143
+ vm.type = 'add';
144
+ gvc.closeDialog();
145
+ }), '下一步');
146
+ },
147
+ width: 300,
114
148
  });
115
- }
116
- return BgWidget.container(html `
117
- <div class="title-container">
118
- ${BgWidget.title((() => {
119
- const titleMap = {
120
- addProduct: '加購品',
121
- giveaway: '贈品',
122
- product: '商品列表',
123
- hidden: '隱形賣場商品',
124
- };
125
- return titleMap[type] || '';
126
- })())}
127
- <div class="flex-fill"></div>
128
- <div style="display: flex; gap: 10px;">
129
- ${[
130
- BgWidget.grayButton('匯入', gvc.event(() => {
131
- ProductExcel.importDialog(gvc, () => gvc.notifyDataChange(vm.id));
132
- })),
133
- BgWidget.grayButton('匯出', gvc.event(() => {
134
- ProductExcel.exportDialog(gvc, type, vm.apiJSON, vm.checkedData);
135
- })),
136
- BgWidget.darkButton('新增', gvc.event(() => {
137
- var _b, _c, _d, _e;
138
- ShoppingProductSetting.select_language = (_d = (_c = (_b = window.parent) === null || _b === void 0 ? void 0 : _b.store_info) === null || _c === void 0 ? void 0 : _c.language_setting) === null || _d === void 0 ? void 0 : _d.def;
139
- const supportProducts = ShoppingProductSetting.getSupportProductCategory();
140
- if (supportProducts.length <= 1) {
141
- ShoppingProductSetting.select_product_type = (((_e = supportProducts[0]) === null || _e === void 0 ? void 0 : _e.key) || '');
142
- vm.type = 'add';
143
- return;
144
- }
145
- ShoppingProductSetting.select_product_type = supportProducts[0].key;
146
- BgWidget.settingDialog({
147
- gvc: gvc,
148
- title: '選擇商品類型',
149
- innerHTML: (gvc) => {
150
- return html `
151
- <div class="d-flex align-items-center">
152
- ${BgWidget.select({
153
- gvc: gvc,
154
- callback: data => {
155
- ShoppingProductSetting.select_product_type = data;
156
- },
157
- options: supportProducts,
158
- default: ShoppingProductSetting.select_product_type,
159
- })}
160
- </div>
161
- `;
162
- },
163
- footer_html: (gvc) => {
164
- return BgWidget.save(gvc.event(() => {
165
- vm.type = 'add';
166
- gvc.closeDialog();
167
- }), '下一步');
168
- },
169
- width: 300,
170
- });
171
- }), {
172
- class: `guide5-3`,
173
- }),
174
- ].join('')}
175
- </div>
149
+ }), {
150
+ class: `guide5-3`,
151
+ }),
152
+ ].join('')}
176
153
  </div>
177
- ${BgWidget.container(BgWidget.mainCard([
178
- (() => {
179
- const id = gvc.glitter.getUUID();
180
- return gvc.bindView({
181
- bind: id,
182
- view: () => {
183
- const filterList = [
184
- BgWidget.selectFilter({
185
- gvc,
186
- callback: (value) => {
187
- vm.queryType = value;
188
- gvc.notifyDataChange(vm.tableId);
189
- gvc.notifyDataChange(id);
190
- },
191
- default: vm.queryType || 'title',
192
- options: FilterOptions.productSelect,
193
- style: 'min-width: 160px;',
194
- }),
195
- BgWidget.searchFilter(gvc.event(e => {
196
- vm.query = `${e.value}`.trim();
154
+ </div>
155
+ ${BgWidget.container(BgWidget.mainCard([
156
+ (() => {
157
+ const id = gvc.glitter.getUUID();
158
+ return gvc.bindView({
159
+ bind: id,
160
+ view: () => __awaiter(this, void 0, void 0, function* () {
161
+ const productFunnel = yield FilterOptions.getProductFunnel();
162
+ const filterList = [
163
+ BgWidget.selectFilter({
164
+ gvc,
165
+ callback: (value) => {
166
+ vm.queryType = value;
197
167
  gvc.notifyDataChange(vm.tableId);
198
168
  gvc.notifyDataChange(id);
199
- }), vm.query || '', '搜尋'),
200
- BgWidget.funnelFilter({
201
- gvc,
202
- callback: () => ListComp.showRightMenu(FilterOptions.productFunnel),
203
- }),
204
- BgWidget.updownFilter({
205
- gvc,
206
- callback: (value) => {
207
- vm.orderString = value;
208
- gvc.notifyDataChange(vm.tableId);
209
- gvc.notifyDataChange(id);
210
- },
211
- default: vm.orderString || 'default',
212
- options: FilterOptions.productListOrderBy,
213
- }),
214
- ];
215
- const filterTags = ListComp.getFilterTags(FilterOptions.productFunnel);
216
- return BgListComponent.listBarRWD(filterList, filterTags);
217
- },
218
- });
219
- })(),
220
- gvc.bindView({
221
- bind: vm.tableId,
222
- view: () => {
223
- const limit = 20;
224
- return BgWidget.tableV3({
225
- gvc: gvc,
226
- getData: vmi => {
227
- function loop() {
228
- vm.apiJSON = {
229
- page: vmi.page - 1,
230
- limit: limit,
231
- search: vm.query || undefined,
232
- searchType: vm.queryType || undefined,
233
- orderBy: vm.orderString || undefined,
234
- status: (() => {
235
- if (vm.filter.status && vm.filter.status.length > 0) {
236
- return vm.filter.status.join(',');
237
- }
238
- return undefined;
239
- })(),
240
- channel: (() => {
241
- if (vm.filter.channel && vm.filter.channel.length > 0) {
242
- return vm.filter.channel.join(',');
243
- }
244
- return undefined;
245
- })(),
246
- filter_visible: `${type !== 'hidden'}`,
247
- collection: vm.filter.collection,
248
- accurate_search_collection: true,
249
- productType: type === 'hidden' ? 'product' : type,
250
- };
251
- ApiShop.getProduct(vm.apiJSON).then(data => {
252
- function getDatalist() {
253
- return data.response.data.map((dd) => {
254
- var _b;
255
- return [
256
- {
257
- key: '商品',
258
- value: html ` <div class="d-flex align-items-center">
259
- ${BgWidget.validImageBox({
260
- gvc: gvc,
261
- image: dd.content.preview_image[0],
262
- width: 40,
263
- class: 'rounded border me-2',
264
- })}
265
- <div class="d-flex flex-column" style="">
266
- ${dd.content.shopee_id
267
- ? `<div style="margin-bottom: -10px;"><div class="insignia" style="background: orangered;color: white;">蝦皮</div></div>
268
- `
269
- : ``}
270
- <div>${Tool.truncateString(dd.content.title)}</div>
271
- </div>
272
- </div>`,
273
- },
274
- {
275
- key: '售價',
276
- value: (() => {
277
- var _b;
278
- const numArray = ((_b = dd.content.variants) !== null && _b !== void 0 ? _b : [])
279
- .map((dd) => {
280
- return parseInt(`${dd.sale_price}`, 10);
281
- })
282
- .filter((dd) => {
283
- return !isNaN(dd);
284
- });
285
- if (numArray.length == 0) {
286
- return '尚未設定';
287
- }
288
- return `$ ${Math.min(...numArray).toLocaleString()}`;
289
- })(),
290
- },
291
- {
292
- key: '庫存',
293
- value: (() => {
294
- let sum = 0;
295
- let countStock = 0;
296
- dd.content.variants.forEach((variant) => {
297
- if (variant.show_understocking == 'true') {
298
- countStock++;
299
- sum += variant.stock;
300
- }
301
- });
302
- if (countStock == 0) {
303
- return html ` 無追蹤庫存 `;
304
- }
305
- return html `${countStock}個子類
306
- ${sum > 1
307
- ? `有${sum}件庫存`
308
- : html ` <span style="color:#8E0E2B">有${sum} 件庫存</span>`}`;
309
- })(),
310
- },
311
- {
312
- key: '已售出',
313
- value: ((_b = dd.total_sales) !== null && _b !== void 0 ? _b : '0').toLocaleString(),
314
- },
315
- {
316
- key: '狀態',
317
- value: gvc.bindView(() => {
318
- const id = gvc.glitter.getUUID();
319
- return {
320
- bind: id,
321
- view: () => {
322
- return ShoppingProductSetting.getOnboardStatus(dd.content);
323
- },
324
- divCreate: {
325
- style: 'min-width: 60px;',
326
- option: [
327
- {
328
- key: 'onclick',
329
- value: gvc.event((e, event) => {
330
- event.stopPropagation();
331
- }),
332
- },
333
- ],
334
- },
335
- };
336
- }),
337
- },
338
- ].map(dd => {
339
- dd.value = html ` <div style="line-height:40px;">${dd.value}</div>`;
340
- return dd;
341
- });
342
- });
169
+ },
170
+ default: vm.queryType || 'title',
171
+ options: FilterOptions.productSelect,
172
+ style: 'min-width: 160px;',
173
+ }),
174
+ BgWidget.searchFilter(gvc.event(e => {
175
+ vm.query = `${e.value}`.trim();
176
+ gvc.notifyDataChange(vm.tableId);
177
+ gvc.notifyDataChange(id);
178
+ }), vm.query || '', '搜尋'),
179
+ BgWidget.funnelFilter({
180
+ gvc,
181
+ callback: () => ListComp.showRightMenu(productFunnel),
182
+ }),
183
+ BgWidget.updownFilter({
184
+ gvc,
185
+ callback: (value) => {
186
+ vm.orderString = value;
187
+ gvc.notifyDataChange(vm.tableId);
188
+ gvc.notifyDataChange(id);
189
+ },
190
+ default: vm.orderString || 'default',
191
+ options: FilterOptions.productListOrderBy,
192
+ }),
193
+ ];
194
+ const filterTags = ListComp.getFilterTags(productFunnel);
195
+ return BgListComponent.listBarRWD(filterList, filterTags);
196
+ }),
197
+ });
198
+ })(),
199
+ gvc.bindView({
200
+ bind: vm.tableId,
201
+ view: () => {
202
+ const limit = 20;
203
+ return BgWidget.tableV3({
204
+ gvc: gvc,
205
+ getData: vmi => {
206
+ function loop() {
207
+ vm.apiJSON = {
208
+ page: vmi.page - 1,
209
+ limit: limit,
210
+ search: vm.query || undefined,
211
+ searchType: vm.queryType || undefined,
212
+ orderBy: vm.orderString || undefined,
213
+ status: (() => {
214
+ if (vm.filter.status && vm.filter.status.length > 0) {
215
+ return vm.filter.status.join(',');
343
216
  }
344
- vm.dataList = data.response.data;
345
- vmi.pageSize = Math.ceil(data.response.total / limit);
346
- vmi.originalData = vm.dataList;
347
- vmi.tableData = getDatalist();
348
- vmi.loading = false;
349
- if (ShoppingProductSetting.select_page_index !== vmi.page - 1 &&
350
- ShoppingProductSetting.select_page_index <= vmi.pageSize) {
351
- vmi.page = ShoppingProductSetting.select_page_index + 1;
352
- loop();
217
+ return undefined;
218
+ })(),
219
+ channel: (() => {
220
+ if (vm.filter.channel && vm.filter.channel.length > 0) {
221
+ return vm.filter.channel.join(',');
353
222
  }
354
- else {
355
- ShoppingProductSetting.select_page_index = vmi.page - 1;
356
- vmi.callback();
223
+ return undefined;
224
+ })(),
225
+ filter_visible: `${type !== 'hidden'}`,
226
+ collection: vm.filter.collection,
227
+ accurate_search_collection: true,
228
+ productType: type === 'hidden' ? 'product' : type,
229
+ general_tag: (() => {
230
+ if (vm.filter.general_tag && vm.filter.general_tag.length > 0) {
231
+ return vm.filter.general_tag.join(',');
357
232
  }
358
- });
359
- }
360
- loop();
361
- },
362
- rowClick: (data, index) => {
363
- vm.replaceData = vm.dataList[index].content;
364
- ShoppingProductSetting.select_language = window.parent.store_info.language_setting.def;
365
- vm.type = 'replace';
366
- },
367
- tabClick: vmi => {
368
- ShoppingProductSetting.select_page_index = vmi.page - 1;
369
- },
370
- filter: [
371
- {
372
- name: '上架',
373
- event: checkedData => {
374
- const selCount = checkedData.length;
375
- dialog.dataLoading({ visible: true });
376
- new Promise(resolve => {
377
- let n = 0;
378
- checkedData.map((dd) => {
379
- dd.content.active_schedule = this.getActiveDatetime();
380
- dd.content.status = 'active';
381
- function run() {
382
- return __awaiter(this, void 0, void 0, function* () {
383
- return ApiPost.put({
384
- postData: dd.content,
385
- token: window.parent.config.token,
386
- type: 'manager',
387
- }).then(res => {
388
- res.result ? n++ : run();
233
+ return undefined;
234
+ })(),
235
+ manager_tag: (() => {
236
+ if (vm.filter.manager_tag && vm.filter.manager_tag.length > 0) {
237
+ return vm.filter.manager_tag.join(',');
238
+ }
239
+ return undefined;
240
+ })(),
241
+ };
242
+ ApiShop.getProduct(vm.apiJSON).then(data => {
243
+ function getDatalist() {
244
+ return data.response.data.map((dd) => {
245
+ var _b;
246
+ return [
247
+ {
248
+ key: '商品',
249
+ value: html ` <div class="d-flex align-items-center">
250
+ ${BgWidget.validImageBox({
251
+ gvc: gvc,
252
+ image: dd.content.preview_image[0],
253
+ width: 40,
254
+ class: 'rounded border me-2',
255
+ })}
256
+ <div class="d-flex flex-column" style="">
257
+ ${dd.content.shopee_id
258
+ ? html `<div style="margin-bottom: -10px;">
259
+ <div
260
+ class="insignia"
261
+ style="background: orangered;color: white;"
262
+ >
263
+ 蝦皮
264
+ </div>
265
+ </div> `
266
+ : ''}
267
+ <div>${Tool.truncateString(dd.content.title)}</div>
268
+ </div>
269
+ </div>`,
270
+ },
271
+ {
272
+ key: '售價',
273
+ value: (() => {
274
+ var _b;
275
+ const numArray = ((_b = dd.content.variants) !== null && _b !== void 0 ? _b : [])
276
+ .map((dd) => {
277
+ return parseInt(`${dd.sale_price}`, 10);
278
+ })
279
+ .filter((dd) => {
280
+ return !isNaN(dd);
389
281
  });
390
- });
391
- }
392
- run();
282
+ if (numArray.length == 0) {
283
+ return '尚未設定';
284
+ }
285
+ return `$ ${Math.min(...numArray).toLocaleString()}`;
286
+ })(),
287
+ },
288
+ {
289
+ key: '庫存',
290
+ value: (() => {
291
+ let sum = 0;
292
+ let countStock = 0;
293
+ dd.content.variants.forEach((variant) => {
294
+ if (variant.show_understocking == 'true') {
295
+ countStock++;
296
+ sum += variant.stock;
297
+ }
298
+ });
299
+ if (countStock == 0) {
300
+ return html ` 無追蹤庫存 `;
301
+ }
302
+ return html `${countStock}個子類
303
+ ${sum > 1
304
+ ? `有${sum}件庫存`
305
+ : html ` <span style="color:#8E0E2B">有${sum} 件庫存</span>`}`;
306
+ })(),
307
+ },
308
+ {
309
+ key: '已售出',
310
+ value: ((_b = dd.total_sales) !== null && _b !== void 0 ? _b : '0').toLocaleString(),
311
+ },
312
+ {
313
+ key: '狀態',
314
+ value: gvc.bindView(() => {
315
+ const id = gvc.glitter.getUUID();
316
+ return {
317
+ bind: id,
318
+ view: () => {
319
+ return ShoppingProductSetting.getOnboardStatus(dd.content);
320
+ },
321
+ divCreate: {
322
+ style: 'min-width: 60px;',
323
+ option: [
324
+ {
325
+ key: 'onclick',
326
+ value: gvc.event((e, event) => {
327
+ event.stopPropagation();
328
+ }),
329
+ },
330
+ ],
331
+ },
332
+ };
333
+ }),
334
+ },
335
+ ].map(dd => {
336
+ dd.value = html ` <div style="line-height:40px;">${dd.value}</div>`;
337
+ return dd;
393
338
  });
394
- setInterval(() => {
395
- n === selCount && setTimeout(() => resolve(), 200);
396
- }, 500);
397
- }).then(() => {
398
- dialog.dataLoading({ visible: false });
399
- gvc.notifyDataChange(vm.id);
400
339
  });
401
- },
402
- option: true,
403
- },
404
- {
405
- name: '下架',
406
- event: checkedData => {
407
- const selCount = checkedData.length;
408
- dialog.dataLoading({ visible: true });
409
- new Promise(resolve => {
410
- let n = 0;
411
- checkedData.map((dd) => {
412
- dd.content.active_schedule = this.getInactiveDatetime();
413
- dd.content.status = 'active';
414
- function run() {
415
- return __awaiter(this, void 0, void 0, function* () {
416
- return ApiPost.put({
417
- postData: dd.content,
418
- token: window.parent.config.token,
419
- type: 'manager',
420
- }).then(res => {
421
- res.result ? n++ : run();
422
- });
340
+ }
341
+ vm.dataList = data.response.data;
342
+ vmi.pageSize = Math.ceil(data.response.total / limit);
343
+ vmi.originalData = vm.dataList;
344
+ vmi.tableData = getDatalist();
345
+ vmi.loading = false;
346
+ if (ShoppingProductSetting.select_page_index !== vmi.page - 1 &&
347
+ ShoppingProductSetting.select_page_index <= vmi.pageSize) {
348
+ vmi.page = ShoppingProductSetting.select_page_index + 1;
349
+ loop();
350
+ }
351
+ else {
352
+ ShoppingProductSetting.select_page_index = vmi.page - 1;
353
+ vmi.callback();
354
+ }
355
+ });
356
+ }
357
+ loop();
358
+ },
359
+ rowClick: (data, index) => {
360
+ vm.replaceData = vm.dataList[index].content;
361
+ ShoppingProductSetting.select_language = window.parent.store_info.language_setting.def;
362
+ vm.type = 'replace';
363
+ },
364
+ tabClick: vmi => {
365
+ ShoppingProductSetting.select_page_index = vmi.page - 1;
366
+ },
367
+ filter: [
368
+ {
369
+ name: '上架',
370
+ event: checkedData => {
371
+ const selCount = checkedData.length;
372
+ dialog.dataLoading({ visible: true });
373
+ new Promise(resolve => {
374
+ let n = 0;
375
+ checkedData.map((dd) => {
376
+ dd.content.active_schedule = this.getActiveDatetime();
377
+ dd.content.status = 'active';
378
+ function run() {
379
+ return __awaiter(this, void 0, void 0, function* () {
380
+ return ApiPost.put({
381
+ postData: dd.content,
382
+ token: window.parent.config.token,
383
+ type: 'manager',
384
+ }).then(res => {
385
+ res.result ? n++ : run();
423
386
  });
424
- }
425
- run();
426
- });
427
- setInterval(() => {
428
- n === selCount && setTimeout(() => resolve(), 200);
429
- }, 500);
430
- }).then(() => {
431
- dialog.dataLoading({ visible: false });
432
- gvc.notifyDataChange(vm.id);
387
+ });
388
+ }
389
+ run();
433
390
  });
434
- },
435
- option: true,
391
+ setInterval(() => {
392
+ n === selCount && setTimeout(() => resolve(), 200);
393
+ }, 500);
394
+ }).then(() => {
395
+ dialog.dataLoading({ visible: false });
396
+ gvc.notifyDataChange(vm.id);
397
+ });
436
398
  },
437
- {
438
- name: '刪除',
439
- event: checkedData => {
440
- dialog.checkYesOrNot({
441
- text: '是否確認刪除所選項目?',
442
- callback: response => {
443
- if (response) {
444
- dialog.dataLoading({ visible: true });
445
- ApiShop.delete({
446
- id: checkedData
447
- .map((dd) => {
448
- return dd.id;
449
- })
450
- .join(`,`),
399
+ option: true,
400
+ },
401
+ {
402
+ name: '下架',
403
+ event: checkedData => {
404
+ const selCount = checkedData.length;
405
+ dialog.dataLoading({ visible: true });
406
+ new Promise(resolve => {
407
+ let n = 0;
408
+ checkedData.map((dd) => {
409
+ dd.content.active_schedule = this.getInactiveDatetime();
410
+ dd.content.status = 'active';
411
+ function run() {
412
+ return __awaiter(this, void 0, void 0, function* () {
413
+ return ApiPost.put({
414
+ postData: dd.content,
415
+ token: window.parent.config.token,
416
+ type: 'manager',
451
417
  }).then(res => {
452
- dialog.dataLoading({ visible: false });
453
- if (res.result) {
454
- vm.dataList = undefined;
455
- gvc.notifyDataChange(vm.id);
456
- }
457
- else {
458
- dialog.errorMessage({
459
- text: '刪除失敗',
460
- });
461
- }
418
+ res.result ? n++ : run();
462
419
  });
463
- }
464
- },
420
+ });
421
+ }
422
+ run();
465
423
  });
466
- },
424
+ setInterval(() => {
425
+ n === selCount && setTimeout(() => resolve(), 200);
426
+ }, 500);
427
+ }).then(() => {
428
+ dialog.dataLoading({ visible: false });
429
+ gvc.notifyDataChange(vm.id);
430
+ });
467
431
  },
468
- ],
469
- filterCallback: (dataArray) => {
470
- vm.checkedData = dataArray;
432
+ option: true,
471
433
  },
472
- });
473
- },
474
- }),
475
- ].join('')))}
476
- ${BgWidget.minHeightContainer(240)}
477
- `);
478
- }
479
- },
480
- onCreate: () => {
481
- if (vmlist.loading) {
482
- BgProduct.getCollectionAllOpts(vmlist.collections, () => {
483
- vmlist.loading = false;
484
- gvc.notifyDataChange(vmlist.id);
485
- });
486
- }
434
+ {
435
+ name: '刪除',
436
+ event: checkedData => {
437
+ dialog.checkYesOrNot({
438
+ text: '是否確認刪除所選項目?',
439
+ callback: response => {
440
+ if (response) {
441
+ dialog.dataLoading({ visible: true });
442
+ ApiShop.delete({
443
+ id: checkedData
444
+ .map((dd) => {
445
+ return dd.id;
446
+ })
447
+ .join(`,`),
448
+ }).then(res => {
449
+ dialog.dataLoading({ visible: false });
450
+ if (res.result) {
451
+ vm.dataList = undefined;
452
+ gvc.notifyDataChange(vm.id);
453
+ }
454
+ else {
455
+ dialog.errorMessage({
456
+ text: '刪除失敗',
457
+ });
458
+ }
459
+ });
460
+ }
461
+ },
462
+ });
463
+ },
464
+ },
465
+ ],
466
+ filterCallback: (dataArray) => {
467
+ vm.checkedData = dataArray;
468
+ },
469
+ });
470
+ },
471
+ }),
472
+ ].join('')))}
473
+ ${BgWidget.minHeightContainer(240)}
474
+ `);
487
475
  },
488
476
  });
489
477
  case 'replace':