ts-glitter 21.6.8 → 21.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lowcode/Entry.js CHANGED
@@ -146,7 +146,7 @@ export class Entry {
146
146
  }
147
147
  window.renderClock = (_b = window.renderClock) !== null && _b !== void 0 ? _b : createClock();
148
148
  console.log(`Entry-time:`, window.renderClock.stop());
149
- glitter.share.editerVersion = 'V_21.6.8';
149
+ glitter.share.editerVersion = 'V_21.7.1';
150
150
  glitter.share.start = new Date();
151
151
  const vm = { appConfig: [] };
152
152
  window.saasConfig = {
package/lowcode/Entry.ts CHANGED
@@ -150,7 +150,7 @@ export class Entry {
150
150
  }
151
151
  (window as any).renderClock = (window as any).renderClock ?? createClock();
152
152
  console.log(`Entry-time:`, (window as any).renderClock.stop());
153
- glitter.share.editerVersion = 'V_21.6.8';
153
+ glitter.share.editerVersion = 'V_21.7.1';
154
154
  glitter.share.start = new Date();
155
155
  const vm = { appConfig: [] };
156
156
  (window as any).saasConfig = {
@@ -4683,15 +4683,12 @@ export class ShoppingOrderManager {
4683
4683
  if (checkOrderEmpty(passData)) {
4684
4684
  ApiShop.toManualCheckout(passData).then(() => {
4685
4685
  dialog.dataLoading({ visible: false });
4686
- window.parent.glitter.innerDialog(() => {
4687
- return dialog.successMessage({
4688
- text: html `訂單新增成功!<br />已將訂單明細發送至顧客信箱`,
4689
- });
4690
- }, 'orderFinish', {
4691
- dismiss: () => {
4692
- vm.type = 'list';
4693
- },
4686
+ dialog.successMessage({
4687
+ text: `訂單新增成功<br />已將訂單明細發送至顧客信箱`,
4694
4688
  });
4689
+ setTimeout(() => {
4690
+ vm.type = 'list';
4691
+ }, 1200);
4695
4692
  });
4696
4693
  }
4697
4694
  else {
@@ -5076,19 +5076,12 @@ export class ShoppingOrderManager {
5076
5076
  if (checkOrderEmpty(passData)) {
5077
5077
  ApiShop.toManualCheckout(passData).then(() => {
5078
5078
  dialog.dataLoading({ visible: false });
5079
- (window.parent as any).glitter.innerDialog(
5080
- () => {
5081
- return dialog.successMessage({
5082
- text: html`訂單新增成功!<br />已將訂單明細發送至顧客信箱`,
5083
- });
5084
- },
5085
- 'orderFinish',
5086
- {
5087
- dismiss: () => {
5088
- vm.type = 'list';
5089
- },
5090
- }
5091
- );
5079
+ dialog.successMessage({
5080
+ text: `訂單新增成功<br />已將訂單明細發送至顧客信箱`,
5081
+ });
5082
+ setTimeout(() => {
5083
+ vm.type = 'list';
5084
+ }, 1200);
5092
5085
  });
5093
5086
  } else {
5094
5087
  dialog.dataLoading({ visible: false });
@@ -238,6 +238,14 @@ export class Language {
238
238
  { key: 'discount', tw: '折抵', cn: '折抵', en: 'Discount' },
239
239
  { key: 'remaining_balance', tw: '您目前剩餘', cn: '您目前剩余', en: 'Your remaining balance' },
240
240
  { key: 'point', tw: '點', cn: '点', en: '' },
241
+ { key: 'recipient', tw: '收件人', cn: '收件人', en: 'Recipient' },
242
+ { key: 'add_recipient', tw: '新增收件人', cn: '新增收件人', en: 'Add Recipient' },
243
+ {
244
+ key: 'recipient_limit',
245
+ tw: '最多限制儲存 _max_ 名收件人',
246
+ cn: '最多限制保存 _max_ 名收件人',
247
+ en: 'You can save up to _max_ recipients',
248
+ },
241
249
  {
242
250
  key: 'max_discount_order',
243
251
  tw: '此份訂單最多可折抵',
@@ -247,6 +247,14 @@ export class Language {
247
247
  { key: 'discount', tw: '折抵', cn: '折抵', en: 'Discount' },
248
248
  { key: 'remaining_balance', tw: '您目前剩餘', cn: '您目前剩余', en: 'Your remaining balance' },
249
249
  { key: 'point', tw: '點', cn: '点', en: '' },
250
+ { key: 'recipient', tw: '收件人', cn: '收件人', en: 'Recipient' },
251
+ { key: 'add_recipient', tw: '新增收件人', cn: '新增收件人', en: 'Add Recipient' },
252
+ {
253
+ key: 'recipient_limit',
254
+ tw: '最多限制儲存 _max_ 名收件人',
255
+ cn: '最多限制保存 _max_ 名收件人',
256
+ en: 'You can save up to _max_ recipients',
257
+ },
250
258
  {
251
259
  key: 'max_discount_order',
252
260
  tw: '此份訂單最多可折抵',
@@ -593,15 +593,16 @@ export class ApiUser {
593
593
  return new Promise((resolve, reject) => {
594
594
  var _a;
595
595
  window.glitter.share._public_config = (_a = window.glitter.share._public_config) !== null && _a !== void 0 ? _a : {};
596
+ const tag = [appName, key, user_id].join('');
596
597
  const config = window.glitter.share._public_config;
597
- if (config[key + user_id]) {
598
- resolve(config[key + user_id]);
598
+ if (config[tag]) {
599
+ resolve(config[tag]);
599
600
  return;
600
601
  }
601
602
  function callback(res) {
602
603
  if (key.indexOf('shipment_config_') === 0 &&
603
604
  window.parent.glitter.getUrlParameter('function') !== 'backend-manger') {
604
- config[key + user_id] = res;
605
+ config[tag] = res;
605
606
  }
606
607
  switch (key) {
607
608
  case 'app-header-config':
@@ -611,7 +612,7 @@ export class ApiUser {
611
612
  case 'message_setting':
612
613
  case 'promo-label':
613
614
  if (window.parent.glitter.getUrlParameter('function') !== 'backend-manger') {
614
- config[key + user_id] = res;
615
+ config[tag] = res;
615
616
  }
616
617
  break;
617
618
  case 'image-manager':
@@ -621,18 +622,18 @@ export class ApiUser {
621
622
  break;
622
623
  }
623
624
  if (key.indexOf('alt_') === 0) {
624
- config[key + user_id] = res;
625
+ config[tag] = res;
625
626
  }
626
627
  resolve(res);
627
628
  }
628
629
  const find_ = this.getting_config.find(dd => {
629
- return dd.key === key;
630
+ return dd.key === tag;
630
631
  });
631
632
  if (find_) {
632
633
  find_.array.push(callback);
633
634
  }
634
635
  else {
635
- this.getting_config.push({ key: key, array: [callback] });
636
+ this.getting_config.push({ key: tag, array: [callback] });
636
637
  BaseApi.create({
637
638
  url: getBaseUrl() + `/api-public/v1/user/public/config?key=${key}&user_id=${user_id}`,
638
639
  type: 'GET',
@@ -643,7 +644,7 @@ export class ApiUser {
643
644
  },
644
645
  }).then(res => {
645
646
  this.getting_config = this.getting_config.filter(d1 => {
646
- if (d1.key === key) {
647
+ if (d1.key === tag) {
647
648
  d1.array.map(dd => {
648
649
  return dd(res);
649
650
  });
@@ -676,9 +676,10 @@ export class ApiUser {
676
676
  public static getPublicConfig(key: string, user_id: string, appName: string = getConfig().config.appName) {
677
677
  return new Promise<{ result: boolean; response: any }>((resolve, reject) => {
678
678
  (window as any).glitter.share._public_config = (window as any).glitter.share._public_config ?? {};
679
+ const tag=[appName,key,user_id].join('')
679
680
  const config = (window as any).glitter.share._public_config;
680
- if (config[key + user_id]) {
681
- resolve(config[key + user_id]);
681
+ if (config[tag]) {
682
+ resolve(config[tag]);
682
683
  return;
683
684
  }
684
685
 
@@ -688,7 +689,7 @@ export class ApiUser {
688
689
  key.indexOf('shipment_config_') === 0 &&
689
690
  (window.parent as any).glitter.getUrlParameter('function') !== 'backend-manger'
690
691
  ) {
691
- config[key + user_id] = res;
692
+ config[tag] = res;
692
693
  }
693
694
  switch (key) {
694
695
  case 'app-header-config':
@@ -699,7 +700,7 @@ export class ApiUser {
699
700
  case 'promo-label':
700
701
  //前台才有暫存功能
701
702
  if ((window.parent as any).glitter.getUrlParameter('function') !== 'backend-manger') {
702
- config[key + user_id] = res;
703
+ config[tag] = res;
703
704
  }
704
705
  break;
705
706
  case 'image-manager':
@@ -709,18 +710,18 @@ export class ApiUser {
709
710
  break;
710
711
  }
711
712
  if (key.indexOf('alt_') === 0) {
712
- config[key + user_id] = res;
713
+ config[tag] = res;
713
714
  }
714
715
  resolve(res);
715
716
  }
716
717
 
717
718
  const find_ = this.getting_config.find(dd => {
718
- return dd.key === key;
719
+ return dd.key === tag;
719
720
  });
720
721
  if (find_) {
721
722
  find_.array.push(callback);
722
723
  } else {
723
- this.getting_config.push({ key: key, array: [callback] });
724
+ this.getting_config.push({ key: tag, array: [callback] });
724
725
  BaseApi.create({
725
726
  url: getBaseUrl() + `/api-public/v1/user/public/config?key=${key}&user_id=${user_id}`,
726
727
  type: 'GET',
@@ -731,7 +732,7 @@ export class ApiUser {
731
732
  },
732
733
  }).then(res => {
733
734
  this.getting_config = this.getting_config.filter(d1 => {
734
- if (d1.key === key) {
735
+ if (d1.key === tag) {
735
736
  d1.array.map(dd => {
736
737
  return dd(res);
737
738
  });
@@ -901,6 +901,7 @@ export const component = Plugin.createComponent(import.meta.url, (glitter, editM
901
901
  return {
902
902
  bind: vm.id,
903
903
  view: () => __awaiter(this, void 0, void 0, function* () {
904
+ var _a;
904
905
  let refer_form = getReferForm(widget, type);
905
906
  function refresh(widget, device) {
906
907
  if (widget.data.refer_app) {
@@ -972,6 +973,8 @@ export const component = Plugin.createComponent(import.meta.url, (glitter, editM
972
973
  subData.editor_updated_callback(oWidget);
973
974
  }
974
975
  glitter.share.refer_form = refer_form;
976
+ glitter.share.refer_form_ = (_a = glitter.share.refer_form_) !== null && _a !== void 0 ? _a : {};
977
+ glitter.share.refer_form_[oWidget.data.tag] = refer_form;
975
978
  glitter.share.refresh_global = (() => {
976
979
  refresh(widget, type);
977
980
  });
@@ -1078,6 +1078,8 @@ export const component = Plugin.createComponent(import.meta.url, (glitter: Glitt
1078
1078
  subData.editor_updated_callback(oWidget);
1079
1079
  }
1080
1080
  glitter.share.refer_form=refer_form
1081
+ glitter.share.refer_form_=glitter.share.refer_form_ ?? {}
1082
+ glitter.share.refer_form_[oWidget.data.tag]=refer_form
1081
1083
  glitter.share.refresh_global=(()=>{
1082
1084
  refresh(widget,type)
1083
1085
  })
@@ -2222,7 +2222,7 @@ export class CheckoutIndex {
2222
2222
  class="d-flex justify-content-between align-items-center p-1 w-100 gap-2"
2223
2223
  >
2224
2224
  <div class="d-flex flex-column">
2225
- <h5>收件人 ${index + 1}</h5>
2225
+ <h5>${Language.text('recipient')} ${index + 1}</h5>
2226
2226
  ${['name', 'email', 'phone']
2227
2227
  .filter(key => data[key])
2228
2228
  .map(key => {
@@ -3182,9 +3182,7 @@ export class CheckoutIndex {
3182
3182
  }
3183
3183
  let pass = true;
3184
3184
  if (subData.shipment === 'none') {
3185
- dialog.errorMessage({
3186
- text: Language.text('select_shipping_method'),
3187
- });
3185
+ dialog.errorMessage({ text: Language.text('select_shipping_method') });
3188
3186
  return false;
3189
3187
  }
3190
3188
  if (ShipmentConfig.supermarketList.includes(subData['shipment'])) {
@@ -1786,7 +1786,6 @@ export class CheckoutIndex {
1786
1786
  return '';
1787
1787
  }
1788
1788
  };
1789
-
1790
1789
  return html` <div class="d-flex flex-column gap-1">
1791
1790
  <select
1792
1791
  class="w-100 ${gClass('select')}"
@@ -2446,7 +2445,7 @@ export class CheckoutIndex {
2446
2445
  class="d-flex justify-content-between align-items-center p-1 w-100 gap-2"
2447
2446
  >
2448
2447
  <div class="d-flex flex-column">
2449
- <h5>收件人 ${index + 1}</h5>
2448
+ <h5>${Language.text('recipient')} ${index + 1}</h5>
2450
2449
  ${['name', 'email', 'phone']
2451
2450
  .filter(key => data[key])
2452
2451
  .map(key => {
@@ -3488,9 +3487,7 @@ export class CheckoutIndex {
3488
3487
 
3489
3488
  // 驗證有無配送方式
3490
3489
  if (subData.shipment === 'none') {
3491
- dialog.errorMessage({
3492
- text: Language.text('select_shipping_method'),
3493
- });
3490
+ dialog.errorMessage({ text: Language.text('select_shipping_method') });
3494
3491
  return false;
3495
3492
  }
3496
3493
 
@@ -28,6 +28,7 @@ export class UMReceive {
28
28
  dataList: [],
29
29
  dataKeys: [],
30
30
  };
31
+ const receive_list_max_length = 100;
31
32
  let changePage = (index, type, subData) => { };
32
33
  gvc.glitter.getModule(new URL('./official_event/page/change-page.js', gvc.glitter.root_path).href, cl => {
33
34
  changePage = cl.changePage;
@@ -38,6 +39,93 @@ export class UMReceive {
38
39
  if (vm.loading) {
39
40
  return UmClass.spinner();
40
41
  }
42
+ function saveView() {
43
+ return html `<div class="d-flex justify-content-end">
44
+ <div
45
+ class="um-nav-btn um-nav-btn-active d-flex align-items-center justify-content-center fw-bold"
46
+ onclick="${gvc.event(() => {
47
+ vm.userData.receive_list = vm.dataList
48
+ .map((data) => {
49
+ const temp = {};
50
+ vm.dataKeys.map(key => {
51
+ temp[key] = data[key];
52
+ });
53
+ return temp;
54
+ })
55
+ .filter((data) => {
56
+ return Object.values(data).some(Boolean);
57
+ });
58
+ ApiUser.updateUserData({
59
+ userData: vm.userData,
60
+ }).then(res => {
61
+ dialog.dataLoading({ visible: false });
62
+ if (!res.result && res.response.data.msg === 'email-verify-false') {
63
+ dialog.errorMessage({ text: Language.text('email_verification_code_incorrect') });
64
+ }
65
+ else if (!res.result && res.response.data.msg === 'phone-verify-false') {
66
+ dialog.errorMessage({ text: Language.text('sms_verification_code_incorrect') });
67
+ }
68
+ else if (!res.result && res.response.data.msg === 'phone-exists') {
69
+ dialog.errorMessage({ text: Language.text('phone_number_already_exists') });
70
+ }
71
+ else if (!res.result && res.response.data.msg === 'email-exists') {
72
+ dialog.errorMessage({ text: Language.text('email_already_exists') });
73
+ }
74
+ else if (!res.result) {
75
+ dialog.errorMessage({ text: Language.text('update_exception') });
76
+ }
77
+ else {
78
+ dialog.successMessage({ text: Language.text('change_success') });
79
+ gvc.recreateView();
80
+ }
81
+ });
82
+ })}"
83
+ >
84
+ ${Language.text('confirm')}
85
+ </div>
86
+ </div>`;
87
+ }
88
+ function recipientView() {
89
+ return html ` <div class="col-12" style="min-height: 500px;">
90
+ ${vm.dataList
91
+ .map((data, index) => {
92
+ const cloneForm = JSON.parse(JSON.stringify(vm.funnyForm));
93
+ return html `<div class="px-0 py-2 px-md-2 py-md-4 mb-3">
94
+ <h5>${Language.text('recipient')} ${index + 1}</h5>
95
+ ${FormWidget.editorView({
96
+ gvc: gvc,
97
+ array: cloneForm.map((dd, index) => {
98
+ dd.col = '6';
99
+ if (index === cloneForm.length - 1) {
100
+ dd.col = '12';
101
+ }
102
+ return dd;
103
+ }),
104
+ refresh: () => {
105
+ gvc.notifyDataChange(vm.id);
106
+ },
107
+ formData: data,
108
+ })}
109
+ </div>`;
110
+ })
111
+ .join('')}
112
+ </div>`;
113
+ }
114
+ function plusButton() {
115
+ return html `<div
116
+ class="w-100 d-flex justify-content-center align-items-center gap-2"
117
+ style="color: #3366BB; cursor: pointer"
118
+ onclick="${gvc.event(() => {
119
+ vm.dataList.push({});
120
+ gvc.notifyDataChange(vm.id);
121
+ })}"
122
+ >
123
+ <div style="font-size: 16px; font-weight: 400; word-wrap: break-word">
124
+ ${Language.text('add_recipient')}
125
+ </div>
126
+ <i class="fa-solid fa-plus"></i>
127
+ </div>`;
128
+ }
41
129
  return html `
42
130
  <div class="row mx-auto p-0">
43
131
  <div class="w-100 align-items-center d-flex py-3 pb-lg-3 pt-lg-0" style="gap:10px;">
@@ -63,74 +151,9 @@ export class UMReceive {
63
151
  </div>
64
152
  <div class="um-info-title fw-bold" style="font-size: 24px;">${Language.text('recipient_info')}</div>
65
153
  </div>
66
- <div class="col-12" style="min-height: 500px;">
67
- ${vm.dataList
68
- .map((data, index) => {
69
- const cloneForm = JSON.parse(JSON.stringify(vm.funnyForm));
70
- return html `<div class="px-0 py-2 px-md-2 py-md-4 mb-3">
71
- <h5>收件人 ${index + 1}</h5>
72
- ${FormWidget.editorView({
73
- gvc: gvc,
74
- array: cloneForm.map((dd, index) => {
75
- dd.col = '6';
76
- if (index === cloneForm.length - 1) {
77
- dd.col = '12';
78
- }
79
- return dd;
80
- }),
81
- refresh: () => {
82
- gvc.notifyDataChange(vm.id);
83
- },
84
- formData: data,
85
- })}
86
- </div>`;
87
- })
88
- .join('')}
89
- <div class="d-flex justify-content-end">
90
- <div
91
- class="um-nav-btn um-nav-btn-active d-flex align-items-center justify-content-center fw-bold"
92
- onclick="${gvc.event(() => {
93
- vm.userData.receive_list = vm.dataList
94
- .map((data) => {
95
- const temp = {};
96
- vm.dataKeys.map(key => {
97
- temp[key] = data[key];
98
- });
99
- return temp;
100
- })
101
- .filter((data) => {
102
- return Object.values(data).some(Boolean);
103
- });
104
- ApiUser.updateUserData({
105
- userData: vm.userData,
106
- }).then(res => {
107
- dialog.dataLoading({ visible: false });
108
- if (!res.result && res.response.data.msg === 'email-verify-false') {
109
- dialog.errorMessage({ text: Language.text('email_verification_code_incorrect') });
110
- }
111
- else if (!res.result && res.response.data.msg === 'phone-verify-false') {
112
- dialog.errorMessage({ text: Language.text('sms_verification_code_incorrect') });
113
- }
114
- else if (!res.result && res.response.data.msg === 'phone-exists') {
115
- dialog.errorMessage({ text: Language.text('phone_number_already_exists') });
116
- }
117
- else if (!res.result && res.response.data.msg === 'email-exists') {
118
- dialog.errorMessage({ text: Language.text('email_already_exists') });
119
- }
120
- else if (!res.result) {
121
- dialog.errorMessage({ text: Language.text('update_exception') });
122
- }
123
- else {
124
- dialog.successMessage({ text: Language.text('change_success') });
125
- gvc.recreateView();
126
- }
127
- });
128
- })}"
129
- >
130
- ${Language.text('confirm')}
131
- </div>
132
- </div>
133
- </div>
154
+ ${vm.dataList.length > 0 ? [saveView(), recipientView()].join('') : ''}
155
+ <div class="w-100 my-3" style="background: white;height: 1px;"></div>
156
+ ${receive_list_max_length > vm.dataList.length ? plusButton() : ''}
134
157
  </div>
135
158
  `;
136
159
  }),
@@ -139,12 +162,9 @@ export class UMReceive {
139
162
  const classPrefix = 'cart-prefix';
140
163
  CartModule.addStyle(gvc, classPrefix);
141
164
  Promise.all([ApiUser.getUserData(GlobalUser.token, 'me'), this.funnyQuickFormFrame(classPrefix)]).then(dataArray => {
142
- var _a;
143
165
  vm.userData = dataArray[0].response.userData;
144
- vm.userData.receive_list = (_a = vm.userData.receive_list) !== null && _a !== void 0 ? _a : [];
145
- if (vm.userData.receive_list) {
146
- vm.dataList = [...vm.userData.receive_list, ...new Array(3 - vm.userData.receive_list.length).fill({})];
147
- }
166
+ vm.userData.receive_list = Array.isArray(vm.userData.receive_list) ? vm.userData.receive_list : [];
167
+ vm.dataList = vm.userData.receive_list;
148
168
  vm.funnyForm = dataArray[1];
149
169
  vm.dataKeys = vm.funnyForm.map((item) => item.key).filter(Boolean);
150
170
  vm.loading = false;