ts-glitter 18.5.0 → 18.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-list-component.js +150 -0
  4. package/lowcode/backend-manager/bg-list-component.ts +174 -0
  5. package/lowcode/backend-manager/bg-widget.js +1600 -1756
  6. package/lowcode/backend-manager/bg-widget.ts +5069 -5203
  7. package/lowcode/cms-plugin/cms-router.js +9 -0
  8. package/lowcode/cms-plugin/cms-router.ts +9 -0
  9. package/lowcode/cms-plugin/filter-options.js +23 -0
  10. package/lowcode/cms-plugin/filter-options.ts +24 -0
  11. package/lowcode/cms-plugin/list-header-option.js +16 -0
  12. package/lowcode/cms-plugin/list-header-option.ts +17 -0
  13. package/lowcode/cms-plugin/module/user-excel.js +8 -0
  14. package/lowcode/cms-plugin/module/user-excel.ts +8 -0
  15. package/lowcode/cms-plugin/shipment_list.js +6 -0
  16. package/lowcode/cms-plugin/shipment_list.ts +9 -0
  17. package/lowcode/cms-plugin/shopping-finance-setting.js +1 -1
  18. package/lowcode/cms-plugin/shopping-finance-setting.ts +1 -1
  19. package/lowcode/cms-plugin/shopping-information.js +1 -1
  20. package/lowcode/cms-plugin/shopping-information.ts +1 -1
  21. package/lowcode/cms-plugin/shopping-order-manager.js +2313 -2104
  22. package/lowcode/cms-plugin/shopping-order-manager.ts +4882 -4530
  23. package/lowcode/cms-plugin/shopping-order-return.js +3 -1
  24. package/lowcode/cms-plugin/shopping-order-return.ts +4 -1
  25. package/lowcode/cms-plugin/shopping-product-setting.js +1 -1
  26. package/lowcode/cms-plugin/shopping-product-setting.ts +1 -1
  27. package/lowcode/cms-plugin/user-list.js +140 -70
  28. package/lowcode/cms-plugin/user-list.ts +173 -90
  29. package/lowcode/glitter-base/global/language.js +4 -0
  30. package/lowcode/glitter-base/global/language.ts +4 -0
  31. package/lowcode/glitter-base/global/payment-config.js +97 -0
  32. package/lowcode/glitter-base/global/payment-config.ts +88 -0
  33. package/lowcode/glitter-base/global/shipment-config.js +32 -0
  34. package/lowcode/glitter-base/global/shipment-config.ts +28 -0
  35. package/lowcode/glitter-base/route/shopping.js +7 -0
  36. package/lowcode/glitter-base/route/shopping.ts +8 -0
  37. package/lowcode/glitter-base/route/user.js +14 -8
  38. package/lowcode/glitter-base/route/user.ts +16 -8
  39. package/lowcode/glitterBundle/plugins/html-render.js +11 -1
  40. package/lowcode/glitterBundle/plugins/html-render.ts +14 -1
  41. package/lowcode/jspage/function-page/setting_editor.js +20 -2
  42. package/lowcode/jspage/function-page/setting_editor.ts +20 -2
  43. package/lowcode/public-components/checkout/index.js +2 -2
  44. package/lowcode/public-components/checkout/index.ts +2 -2
  45. package/lowcode/public-components/terms-related/index.js +1 -1
  46. package/lowcode/public-components/terms-related/index.ts +1 -1
  47. package/lowcode/public-components/user-manager/um-order.js +24 -0
  48. package/lowcode/public-components/user-manager/um-order.ts +28 -0
  49. package/package.json +1 -1
  50. package/src/api-public/controllers/shop.js +4 -1
  51. package/src/api-public/controllers/shop.js.map +1 -1
  52. package/src/api-public/controllers/shop.ts +4 -1
  53. package/src/api-public/controllers/track.js.map +1 -1
  54. package/src/api-public/services/delivery.js +1 -0
  55. package/src/api-public/services/delivery.js.map +1 -1
  56. package/src/api-public/services/delivery.ts +2 -1
  57. package/src/api-public/services/paynow-logistics.js +1 -1
  58. package/src/api-public/services/paynow-logistics.js.map +1 -1
  59. package/src/api-public/services/paynow-logistics.ts +1 -1
  60. package/src/api-public/services/shopping.d.ts +3 -0
  61. package/src/api-public/services/shopping.js +42 -2
  62. package/src/api-public/services/shopping.js.map +1 -1
  63. package/src/api-public/services/shopping.ts +104 -54
  64. package/src/api-public/services/user.js +88 -147
  65. package/src/api-public/services/user.js.map +1 -1
  66. package/src/api-public/services/user.ts +103 -155
  67. package/src/services/template.js +1 -1
  68. package/src/services/template.js.map +1 -1
  69. package/src/services/template.ts +1 -1
package/lowcode/Entry.js CHANGED
@@ -131,7 +131,7 @@ export class Entry {
131
131
  }
132
132
  window.renderClock = (_b = window.renderClock) !== null && _b !== void 0 ? _b : createClock();
133
133
  console.log(`Entry-time:`, window.renderClock.stop());
134
- glitter.share.editerVersion = 'V_18.5.0';
134
+ glitter.share.editerVersion = 'V_18.5.2';
135
135
  glitter.share.start = new Date();
136
136
  const vm = { appConfig: [] };
137
137
  window.saasConfig = {
package/lowcode/Entry.ts CHANGED
@@ -131,7 +131,7 @@ export class Entry {
131
131
  }
132
132
  (window as any).renderClock = (window as any).renderClock ?? createClock();
133
133
  console.log(`Entry-time:`, (window as any).renderClock.stop());
134
- glitter.share.editerVersion = 'V_18.5.0';
134
+ glitter.share.editerVersion = 'V_18.5.2';
135
135
  glitter.share.start = new Date();
136
136
  const vm = { appConfig: [] };
137
137
  (window as any).saasConfig = {
@@ -210,5 +210,155 @@ export class BgListComponent {
210
210
  right: true,
211
211
  });
212
212
  }
213
+ static rightMenu(obj) {
214
+ const glitter = window.parent.glitter;
215
+ const gvc = glitter.pageConfig[glitter.pageConfig.length - 1].gvc;
216
+ const menu = glitter.share.NormalPageEditor;
217
+ const items = obj.items;
218
+ const menuTitle = obj.menuTitle;
219
+ const cancelType = obj.cancelType;
220
+ const cloneFrame = structuredClone(obj.frame);
221
+ const cloneDefault = structuredClone(obj.default);
222
+ const vmShow = { id: gvc.glitter.getUUID() };
223
+ const vm = {
224
+ id: gvc.glitter.getUUID(),
225
+ filter: obj.default,
226
+ getFilterObject: () => cloneFrame,
227
+ getConfigObject: () => cloneDefault,
228
+ };
229
+ menu.closeEvent = () => gvc.notifyDataChange(vm.id);
230
+ return menu.toggle({
231
+ visible: true,
232
+ title: menuTitle !== null && menuTitle !== void 0 ? menuTitle : '篩選',
233
+ view: gvc.bindView(() => {
234
+ return {
235
+ bind: vmShow.id,
236
+ view: () => {
237
+ return html `<!-- Accordion: 篩選 -->
238
+ <div class="accordion" id="accordion${vmShow.id}">
239
+ ${gvc.map(items.length > 0
240
+ ? items.map((item) => {
241
+ let contentHTML = '';
242
+ switch (item.type) {
243
+ case 'during':
244
+ contentHTML +=
245
+ item.data && item.data.list.length > 0
246
+ ? BgWidget.duringInputContainer(gvc, item.data, vm.filter[item.key], value => {
247
+ vm.filter[item.key] = value;
248
+ })
249
+ : '';
250
+ break;
251
+ case 'multi_checkbox':
252
+ contentHTML +=
253
+ item.data.length > 0
254
+ ? BgWidget.multiCheckboxContainer(gvc, item.data, vm.filter[item.key], value => {
255
+ vm.filter[item.key] = value;
256
+ })
257
+ : '';
258
+ break;
259
+ case 'radio_and_input':
260
+ contentHTML +=
261
+ item.data.length > 0
262
+ ? BgWidget.radioInputContainer(gvc, item.data, vm.filter[item.key], value => {
263
+ vm.filter[item.key] = value;
264
+ })
265
+ : '';
266
+ break;
267
+ }
268
+ return contentHTML.length > 0
269
+ ? html `<!-- Item -->
270
+ <div class="accordion-item border-0 rounded-3 mb-3">
271
+ <h3 class="accordion-header" id="heading${item.key}">
272
+ <button
273
+ class="accordion-button shadow-none rounded-3 p-0 collapsed"
274
+ type="button"
275
+ data-bs-toggle="collapse"
276
+ data-bs-target="#collapse${item.key}"
277
+ aria-expanded="false"
278
+ aria-controls="collapse${item.key}"
279
+ >
280
+ ${item.name}
281
+ </button>
282
+ </h3>
283
+ <div
284
+ class="accordion-collapse collapse"
285
+ id="collapse${item.key}"
286
+ aria-labelledby="heading${item.key}"
287
+ data-bs-parent="#accordion${vmShow.id}"
288
+ >
289
+ <div class="accordion-body p-0 pt-1">${contentHTML}</div>
290
+ </div>
291
+ </div> `
292
+ : '';
293
+ })
294
+ : ['無篩選項目'])}
295
+ </div>
296
+ <div
297
+ class="position-absolute bottom-0 left-0 w-100 d-flex align-items-center justify-content-end p-3 border-top pe-4"
298
+ style="gap:10px;"
299
+ >
300
+ ${BgWidget.cancel(gvc.event(() => {
301
+ const cancelMap = {
302
+ default: () => {
303
+ vm.filter = vm.getConfigObject();
304
+ gvc.notifyDataChange(vmShow.id);
305
+ },
306
+ clear: () => {
307
+ vm.filter = vm.getFilterObject();
308
+ menu.toggle({ visible: false });
309
+ gvc.notifyDataChange(vm.id);
310
+ },
311
+ };
312
+ return cancelMap[cancelType] ? cancelMap[cancelType]() : cancelMap.default();
313
+ }), (() => {
314
+ var _a;
315
+ const cancelMap = {
316
+ default: '回到預設值',
317
+ clear: '清除',
318
+ };
319
+ return (_a = cancelMap[cancelType]) !== null && _a !== void 0 ? _a : cancelMap.default;
320
+ })())}
321
+ ${BgWidget.save(gvc.event(() => {
322
+ for (const name of Object.keys(vm.filter)) {
323
+ const obj = items.find(item => item.key === name);
324
+ const during = vm.filter[name];
325
+ const dialog = new ShareDialog(gvc.glitter);
326
+ if (obj && obj.type === 'during') {
327
+ if ((during[0].length > 0 && during[1].length === 0) ||
328
+ (during[0].length === 0 && during[1].length > 0)) {
329
+ dialog.infoMessage({ text: `${obj.name}欄位,開始日期與結束日期皆為必填` });
330
+ return;
331
+ }
332
+ if (!BgListComponent.duringInputVerify(during)) {
333
+ dialog.infoMessage({ text: `${obj.name}欄位,結束日期不得早於開始日期` });
334
+ return;
335
+ }
336
+ }
337
+ }
338
+ menu.toggle({ visible: false });
339
+ obj.save(vm.filter);
340
+ }), '完成')}
341
+ </div>`;
342
+ },
343
+ divCreate: { style: 'padding: 20px;' },
344
+ onCreate: () => {
345
+ gvc.addStyle(`
346
+ .accordion-button:not(.collapsed)::after {
347
+ box-shadow: none !important;
348
+ color: #393939 !important;
349
+ background-color: #fff !important;
350
+ background-image: url(${BgWidget.arrowDownDataImage('#000')}) !important;
351
+ }
352
+
353
+ .accordion-button::after {
354
+ background-color: #fff !important;
355
+ }
356
+ `);
357
+ },
358
+ };
359
+ }),
360
+ right: true,
361
+ });
362
+ }
213
363
  }
214
364
  window.glitter.setModule(import.meta.url, BgListComponent);
@@ -246,6 +246,180 @@ export class BgListComponent {
246
246
  right: true,
247
247
  });
248
248
  }
249
+
250
+ static rightMenu(obj: {
251
+ menuTitle: string;
252
+ items: FilterItem[];
253
+ frame: any;
254
+ default: any;
255
+ cancelType: 'default' | 'clear';
256
+ save: (data: any) => void;
257
+ }) {
258
+ const glitter = (window.parent as any).glitter;
259
+ const gvc: GVC = glitter.pageConfig[glitter.pageConfig.length - 1].gvc;
260
+ const menu = glitter.share.NormalPageEditor;
261
+
262
+ const items = obj.items;
263
+ const menuTitle = obj.menuTitle;
264
+ const cancelType = obj.cancelType;
265
+ const cloneFrame = structuredClone(obj.frame);
266
+ const cloneDefault = structuredClone(obj.default);
267
+
268
+ const vmShow = { id: gvc.glitter.getUUID() };
269
+
270
+ const vm = {
271
+ id: gvc.glitter.getUUID(),
272
+ filter: obj.default,
273
+ getFilterObject: () => cloneFrame,
274
+ getConfigObject: () => cloneDefault,
275
+ };
276
+
277
+ menu.closeEvent = () => gvc.notifyDataChange(vm.id);
278
+
279
+ return menu.toggle({
280
+ visible: true,
281
+ title: menuTitle ?? '篩選',
282
+ view: gvc.bindView(() => {
283
+ return {
284
+ bind: vmShow.id,
285
+ view: () => {
286
+ return html`<!-- Accordion: 篩選 -->
287
+ <div class="accordion" id="accordion${vmShow.id}">
288
+ ${gvc.map(
289
+ items.length > 0
290
+ ? items.map((item: any) => {
291
+ let contentHTML = '';
292
+ switch (item.type) {
293
+ case 'during':
294
+ contentHTML +=
295
+ item.data && item.data.list.length > 0
296
+ ? BgWidget.duringInputContainer(gvc, item.data, vm.filter[item.key], value => {
297
+ vm.filter[item.key] = value;
298
+ })
299
+ : '';
300
+ break;
301
+ case 'multi_checkbox':
302
+ contentHTML +=
303
+ item.data.length > 0
304
+ ? BgWidget.multiCheckboxContainer(gvc, item.data, vm.filter[item.key], value => {
305
+ vm.filter[item.key] = value;
306
+ })
307
+ : '';
308
+
309
+ break;
310
+ case 'radio_and_input':
311
+ contentHTML +=
312
+ item.data.length > 0
313
+ ? BgWidget.radioInputContainer(gvc, item.data, vm.filter[item.key], value => {
314
+ vm.filter[item.key] = value;
315
+ })
316
+ : '';
317
+ break;
318
+ }
319
+
320
+ return contentHTML.length > 0
321
+ ? html`<!-- Item -->
322
+ <div class="accordion-item border-0 rounded-3 mb-3">
323
+ <h3 class="accordion-header" id="heading${item.key}">
324
+ <button
325
+ class="accordion-button shadow-none rounded-3 p-0 collapsed"
326
+ type="button"
327
+ data-bs-toggle="collapse"
328
+ data-bs-target="#collapse${item.key}"
329
+ aria-expanded="false"
330
+ aria-controls="collapse${item.key}"
331
+ >
332
+ ${item.name}
333
+ </button>
334
+ </h3>
335
+ <div
336
+ class="accordion-collapse collapse"
337
+ id="collapse${item.key}"
338
+ aria-labelledby="heading${item.key}"
339
+ data-bs-parent="#accordion${vmShow.id}"
340
+ >
341
+ <div class="accordion-body p-0 pt-1">${contentHTML}</div>
342
+ </div>
343
+ </div> `
344
+ : '';
345
+ })
346
+ : ['無篩選項目']
347
+ )}
348
+ </div>
349
+ <div
350
+ class="position-absolute bottom-0 left-0 w-100 d-flex align-items-center justify-content-end p-3 border-top pe-4"
351
+ style="gap:10px;"
352
+ >
353
+ ${BgWidget.cancel(
354
+ gvc.event(() => {
355
+ const cancelMap = {
356
+ default: () => {
357
+ vm.filter = vm.getConfigObject();
358
+ gvc.notifyDataChange(vmShow.id);
359
+ },
360
+ clear: () => {
361
+ vm.filter = vm.getFilterObject();
362
+ menu.toggle({ visible: false });
363
+ gvc.notifyDataChange(vm.id);
364
+ },
365
+ };
366
+ return cancelMap[cancelType] ? cancelMap[cancelType]() : cancelMap.default();
367
+ }),
368
+ (() => {
369
+ const cancelMap = {
370
+ default: '回到預設值',
371
+ clear: '清除',
372
+ };
373
+ return cancelMap[cancelType] ?? cancelMap.default;
374
+ })()
375
+ )}
376
+ ${BgWidget.save(
377
+ gvc.event(() => {
378
+ for (const name of Object.keys(vm.filter)) {
379
+ const obj = items.find(item => item.key === name);
380
+ const during = vm.filter[name];
381
+ const dialog = new ShareDialog(gvc.glitter);
382
+ if (obj && obj.type === 'during') {
383
+ if (
384
+ (during[0].length > 0 && during[1].length === 0) ||
385
+ (during[0].length === 0 && during[1].length > 0)
386
+ ) {
387
+ dialog.infoMessage({ text: `${obj.name}欄位,開始日期與結束日期皆為必填` });
388
+ return;
389
+ }
390
+ if (!BgListComponent.duringInputVerify(during)) {
391
+ dialog.infoMessage({ text: `${obj.name}欄位,結束日期不得早於開始日期` });
392
+ return;
393
+ }
394
+ }
395
+ }
396
+ menu.toggle({ visible: false });
397
+ obj.save(vm.filter);
398
+ }),
399
+ '完成'
400
+ )}
401
+ </div>`;
402
+ },
403
+ divCreate: { style: 'padding: 20px;' },
404
+ onCreate: () => {
405
+ gvc.addStyle(`
406
+ .accordion-button:not(.collapsed)::after {
407
+ box-shadow: none !important;
408
+ color: #393939 !important;
409
+ background-color: #fff !important;
410
+ background-image: url(${BgWidget.arrowDownDataImage('#000')}) !important;
411
+ }
412
+
413
+ .accordion-button::after {
414
+ background-color: #fff !important;
415
+ }
416
+ `);
417
+ },
418
+ };
419
+ }),
420
+ right: true,
421
+ });
422
+ }
249
423
  }
250
424
 
251
425
  (window as any).glitter.setModule(import.meta.url, BgListComponent);