ts-glitter 14.2.8 → 14.3.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 (48) hide show
  1. package/cjbt8743y0.json +1 -0
  2. package/lowcode/Entry.js +29 -9
  3. package/lowcode/Entry.ts +28 -9
  4. package/lowcode/backend-manager/bg-recommend.js +4 -6
  5. package/lowcode/backend-manager/bg-recommend.ts +4 -6
  6. package/lowcode/cms-plugin/member-setting.js +36 -2
  7. package/lowcode/cms-plugin/member-setting.ts +36 -1
  8. package/lowcode/cms-plugin/shopping-rebate-setting.js +21 -6
  9. package/lowcode/cms-plugin/shopping-rebate-setting.ts +24 -8
  10. package/lowcode/glitter-base/route/wallet.js +11 -0
  11. package/lowcode/glitter-base/route/wallet.ts +14 -2
  12. package/lowcode/glitterBundle/plugins/editor-elem.js +32 -11
  13. package/lowcode/glitterBundle/plugins/editor-elem.ts +42 -12
  14. package/lowcode/public-components/checkout/index.js +35 -27
  15. package/lowcode/public-components/checkout/index.ts +111 -106
  16. package/lowcode/public-components/product/product-detail.js +182 -171
  17. package/lowcode/public-components/product/product-detail.ts +214 -196
  18. package/lowcode/public-components/user-manager/um-class.js +234 -193
  19. package/lowcode/public-components/user-manager/um-class.ts +230 -189
  20. package/lowcode/public-components/user-manager/um-rebate.js +13 -8
  21. package/lowcode/public-components/user-manager/um-rebate.ts +17 -12
  22. package/lowcode/public-components/user-manager/um-voucher.js +3 -3
  23. package/lowcode/public-components/user-manager/um-voucher.ts +3 -3
  24. package/package.json +1 -1
  25. package/src/api-public/controllers/ai-chat.js.map +1 -1
  26. package/src/api-public/controllers/app-release.js.map +1 -1
  27. package/src/api-public/controllers/article.js.map +1 -1
  28. package/src/api-public/controllers/post.js.map +1 -1
  29. package/src/api-public/controllers/shop.js +23 -12
  30. package/src/api-public/controllers/shop.js.map +1 -1
  31. package/src/api-public/controllers/shop.ts +36 -36
  32. package/src/api-public/controllers/user.js.map +1 -1
  33. package/src/api-public/services/EcInvoice.js.map +5 -1
  34. package/src/api-public/services/ai-robot.js.map +1 -1
  35. package/src/api-public/services/financial-service.d.ts +1 -0
  36. package/src/api-public/services/financial-service.js.map +1 -1
  37. package/src/api-public/services/post.js.map +1 -1
  38. package/src/api-public/services/rebate.d.ts +1 -0
  39. package/src/api-public/services/rebate.js +15 -0
  40. package/src/api-public/services/rebate.js.map +1 -1
  41. package/src/api-public/services/rebate.ts +21 -5
  42. package/src/api-public/services/shopping.js +0 -3
  43. package/src/api-public/services/shopping.js.map +1 -1
  44. package/src/api-public/services/shopping.ts +0 -4
  45. package/src/index.js +9 -4
  46. package/src/index.js.map +5 -1
  47. package/src/index.ts +7 -1
  48. package/src/services/template.js.map +1 -1
@@ -4,206 +4,234 @@ import { GlobalUser } from '../../glitter-base/global/global-user.js';
4
4
  import { Tool } from '../../modules/tool.js';
5
5
  import { BgWidget } from '../../backend-manager/bg-widget.js';
6
6
  import { ShareDialog } from '../../glitterBundle/dialog/ShareDialog.js';
7
+ import { ApiWallet } from '../../glitter-base/route/wallet.js';
8
+ import { CheckInput } from '../../modules/checkInput.js';
7
9
 
8
10
  const html = String.raw;
11
+ const css = String.raw;
9
12
 
10
13
  export class UmClass {
11
14
  static nav(gvc: GVC) {
15
+ const glitter = gvc.glitter;
12
16
  this.addStyle(gvc);
17
+ const vm = {
18
+ id: gvc.glitter.getUUID(),
19
+ loading: true,
20
+ pageName: glitter.getUrlParameter('page'),
21
+ };
22
+
13
23
  let changePage = (index: string, type: 'page' | 'home', subData: any) => {};
14
24
  gvc.glitter.getModule(new URL('./official_event/page/change-page.js', gvc.glitter.root_path).href, (cl) => {
15
25
  changePage = cl.changePage;
16
26
  });
17
27
 
18
- const pageName = gvc.glitter.getUrlParameter('page');
19
- const buttonHTML = [
20
- {
21
- key: 'account_userinfo',
22
- title: '個人資料',
23
- },
24
- {
25
- key: 'voucher-list',
26
- title: '我的優惠券',
27
- },
28
- {
29
- key: 'rebate',
30
- title: '我的購物金',
31
- },
32
- {
33
- key: 'order_list',
34
- title: '訂單記錄',
35
- },
36
- {
37
- key: 'wishlist',
38
- title: '心願單',
39
- },
40
- {
41
- key: 'reset_password',
42
- title: '重設密碼',
43
- },
44
- {
45
- key: 'logout',
46
- title: '登出',
47
- },
48
- ]
49
- .map((item) => {
50
- return html`
51
- <div
52
- class="option px-2 d-flex justify-content-center um-nav-btn ${pageName === item.key ? 'um-nav-btn-active' : ''}"
53
- onclick="${gvc.event(async () => {
54
- if (item.key === 'reset_password') {
55
- const dialog = new ShareDialog(gvc.glitter);
56
- dialog.dataLoading({ visible: true });
57
- const userData: any = await UmClass.getUserData(gvc);
58
- dialog.dataLoading({ visible: false });
59
- UmClass.dialog({
60
- gvc: gvc,
61
- title: '重設密碼事件',
62
- tag: '',
63
- innerHTML: (gvc: GVC) => {
64
- let update_vm = {
65
- verify_code: '',
66
- pwd: '',
67
- };
68
- let get_verify_timer = 0;
69
- let repeat_pwd = '';
70
- return [
71
- html`<div class="tx_normal fw-normal mb-1" style="">密碼</div>`,
72
- html`<input
73
- class="bgw-input "
74
- style=""
75
- type="password"
76
- placeholder="請輸入密碼"
77
- oninput="${gvc.event((e, event) => {
78
- update_vm.pwd = e.value;
79
- })}"
80
- value="${update_vm.pwd}"
81
- />`,
82
- html`<div class="tx_normal fw-normal mt-2 mb-1" style="">確認密碼</div>`,
83
- html`<input
84
- class="bgw-input mb-2"
85
- style=""
86
- type="password"
87
- placeholder="請再次輸入密碼"
88
- oninput="${gvc.event((e, event) => {
89
- repeat_pwd = e.value;
90
- })}"
91
- value="${repeat_pwd}"
92
- />`,
93
- gvc.bindView(() => {
94
- const id = gvc.glitter.getUUID();
95
- return {
96
- bind: id,
97
- view: () => {
98
- return html`重設密碼驗證碼
99
- ${BgWidget.blueNote(
100
- get_verify_timer ? `驗證碼已發送至『${userData.userData.email}』` : '點我取得驗證碼',
101
- gvc.event(() => {
102
- if (!get_verify_timer) {
103
- const dialog = new ShareDialog(gvc.glitter);
28
+ return gvc.bindView({
29
+ bind: vm.id,
30
+ view: () => {
31
+ if (vm.loading) {
32
+ return '';
33
+ } else {
34
+ glitter.share.rebateConfig.title = CheckInput.isEmpty(glitter.share.rebateConfig.title) ? '購物金' : glitter.share.rebateConfig.title;
35
+ const buttonHTML = [
36
+ {
37
+ key: 'account_userinfo',
38
+ title: '個人資料',
39
+ },
40
+ {
41
+ key: 'voucher-list',
42
+ title: '我的優惠券',
43
+ },
44
+ {
45
+ key: 'rebate',
46
+ title: `我的${glitter.share.rebateConfig.title}`,
47
+ },
48
+ {
49
+ key: 'order_list',
50
+ title: '訂單記錄',
51
+ },
52
+ {
53
+ key: 'wishlist',
54
+ title: '心願單',
55
+ },
56
+ {
57
+ key: 'reset_password',
58
+ title: '重設密碼',
59
+ },
60
+ {
61
+ key: 'logout',
62
+ title: '登出',
63
+ },
64
+ ]
65
+ .map((item) => {
66
+ return html`
67
+ <div
68
+ class="option px-2 d-flex justify-content-center um-nav-btn ${vm.pageName === item.key ? 'um-nav-btn-active' : ''}"
69
+ onclick="${gvc.event(async () => {
70
+ if (item.key === 'reset_password') {
71
+ const dialog = new ShareDialog(gvc.glitter);
72
+ dialog.dataLoading({ visible: true });
73
+ const userData: any = await UmClass.getUserData(gvc);
74
+ dialog.dataLoading({ visible: false });
75
+ UmClass.dialog({
76
+ gvc: gvc,
77
+ title: '重設密碼事件',
78
+ tag: '',
79
+ innerHTML: (gvc: GVC) => {
80
+ let update_vm = {
81
+ verify_code: '',
82
+ pwd: '',
83
+ };
84
+ let get_verify_timer = 0;
85
+ let repeat_pwd = '';
86
+ return [
87
+ html`<div class="tx_normal fw-normal mb-1" style="">密碼</div>`,
88
+ html`<input
89
+ class="bgw-input "
90
+ style=""
91
+ type="password"
92
+ placeholder="請輸入密碼"
93
+ oninput="${gvc.event((e, event) => {
94
+ update_vm.pwd = e.value;
95
+ })}"
96
+ value="${update_vm.pwd}"
97
+ />`,
98
+ html`<div class="tx_normal fw-normal mt-2 mb-1" style="">確認密碼</div>`,
99
+ html`<input
100
+ class="bgw-input mb-2"
101
+ style=""
102
+ type="password"
103
+ placeholder="請再次輸入密碼"
104
+ oninput="${gvc.event((e, event) => {
105
+ repeat_pwd = e.value;
106
+ })}"
107
+ value="${repeat_pwd}"
108
+ />`,
109
+ gvc.bindView(() => {
110
+ const id = gvc.glitter.getUUID();
111
+ return {
112
+ bind: id,
113
+ view: () => {
114
+ return html`重設密碼驗證碼
115
+ ${BgWidget.blueNote(
116
+ get_verify_timer ? `驗證碼已發送至『${userData.userData.email}』` : '點我取得驗證碼',
117
+ gvc.event(() => {
118
+ if (!get_verify_timer) {
119
+ const dialog = new ShareDialog(gvc.glitter);
120
+ dialog.dataLoading({ visible: true });
121
+ ApiUser.emailVerify(userData.userData.email, (window as any).appName).then(async (r) => {
122
+ dialog.dataLoading({ visible: false });
123
+ get_verify_timer = 60;
124
+ gvc.notifyDataChange(id);
125
+ });
126
+ }
127
+ })
128
+ )}`;
129
+ },
130
+ divCreate: {
131
+ class: `d-flex flex-column`,
132
+ style: `gap:3px;`,
133
+ },
134
+ onCreate: () => {
135
+ if (get_verify_timer > 0) {
136
+ get_verify_timer--;
137
+ setTimeout(() => {
138
+ gvc.notifyDataChange(id);
139
+ }, 1000);
140
+ }
141
+ },
142
+ };
143
+ }),
144
+ html`<input
145
+ class="bgw-input mt-2 mb-4"
146
+ style=""
147
+ type="text"
148
+ placeholder="請輸入驗證碼"
149
+ oninput="${gvc.event((e, event) => {
150
+ update_vm.verify_code = e.value;
151
+ })}"
152
+ value="${update_vm.verify_code}"
153
+ />`,
154
+ html`<div class="d-flex align-items-center justify-content-end pt-2 border-top mx-n3">
155
+ <div
156
+ class="um-nav-btn um-nav-btn-active d-flex align-items-center justify-content-center"
157
+ style="cursor:pointer;"
158
+ type="button"
159
+ onclick="${gvc.event(() => {
160
+ if (update_vm.pwd.length < 8) {
161
+ dialog.errorMessage({ text: '密碼必須大於8位數' });
162
+ return;
163
+ }
164
+ if (repeat_pwd !== update_vm.pwd) {
165
+ dialog.errorMessage({ text: '請再次確認密碼' });
166
+ return;
167
+ }
104
168
  dialog.dataLoading({ visible: true });
105
- ApiUser.emailVerify(userData.userData.email, (window as any).appName).then(async (r) => {
169
+ ApiUser.updateUserData({
170
+ userData: update_vm,
171
+ }).then((res) => {
106
172
  dialog.dataLoading({ visible: false });
107
- get_verify_timer = 60;
108
- gvc.notifyDataChange(id);
173
+ if (!res.result && res.response.data.msg === 'email-verify-false') {
174
+ dialog.errorMessage({ text: '信箱驗證碼輸入錯誤' });
175
+ } else if (!res.result && res.response.data.msg === 'phone-verify-false') {
176
+ dialog.errorMessage({ text: '簡訊驗證碼輸入錯誤' });
177
+ } else if (!res.result && res.response.data.msg === 'phone-exists') {
178
+ dialog.errorMessage({ text: '此電話號碼已存在' });
179
+ } else if (!res.result && res.response.data.msg === 'email-exists') {
180
+ dialog.errorMessage({ text: '此信箱已存在' });
181
+ } else if (!res.result) {
182
+ dialog.errorMessage({ text: '更新異常' });
183
+ } else {
184
+ dialog.successMessage({ text: '更改成功' });
185
+ gvc.closeDialog();
186
+ }
109
187
  });
110
- }
111
- })
112
- )}`;
113
- },
114
- divCreate: {
115
- class: `d-flex flex-column`,
116
- style: `gap:3px;`,
117
- },
118
- onCreate: () => {
119
- if (get_verify_timer > 0) {
120
- get_verify_timer--;
121
- setTimeout(() => {
122
- gvc.notifyDataChange(id);
123
- }, 1000);
124
- }
125
- },
126
- };
127
- }),
128
- html`<input
129
- class="bgw-input mt-2 mb-4"
130
- style=""
131
- type="text"
132
- placeholder="請輸入驗證碼"
133
- oninput="${gvc.event((e, event) => {
134
- update_vm.verify_code = e.value;
135
- })}"
136
- value="${update_vm.verify_code}"
137
- />`,
138
- html`<div class="d-flex align-items-center justify-content-end pt-2 border-top mx-n3">
139
- <div
140
- class="um-nav-btn um-nav-btn-active d-flex align-items-center justify-content-center"
141
- style="cursor:pointer;"
142
- type="button"
143
- onclick="${gvc.event(() => {
144
- if (update_vm.pwd.length < 8) {
145
- dialog.errorMessage({ text: '密碼必須大於8位數' });
146
- return;
147
- }
148
- if (repeat_pwd !== update_vm.pwd) {
149
- dialog.errorMessage({ text: '請再次確認密碼' });
150
- return;
151
- }
152
- dialog.dataLoading({ visible: true });
153
- ApiUser.updateUserData({
154
- userData: update_vm,
155
- }).then((res) => {
156
- dialog.dataLoading({ visible: false });
157
- if (!res.result && res.response.data.msg === 'email-verify-false') {
158
- dialog.errorMessage({ text: '信箱驗證碼輸入錯誤' });
159
- } else if (!res.result && res.response.data.msg === 'phone-verify-false') {
160
- dialog.errorMessage({ text: '簡訊驗證碼輸入錯誤' });
161
- } else if (!res.result && res.response.data.msg === 'phone-exists') {
162
- dialog.errorMessage({ text: '此電話號碼已存在' });
163
- } else if (!res.result && res.response.data.msg === 'email-exists') {
164
- dialog.errorMessage({ text: '此信箱已存在' });
165
- } else if (!res.result) {
166
- dialog.errorMessage({ text: '更新異常' });
167
- } else {
168
- dialog.successMessage({ text: '更改成功' });
169
- gvc.closeDialog();
170
- }
171
- });
172
- })}"
173
- >
174
- <span class="tx_700_white">確認重設</span>
175
- </div>
176
- </div>`,
177
- ].join('');
178
- },
179
- });
180
- console.log('重設密碼事件');
181
- } else if (item.key === 'logout') {
182
- GlobalUser.token = '';
183
- changePage('index', 'home', {});
184
- } else {
185
- changePage(item.key, 'page', {});
186
- }
187
- })}"
188
- >
189
- ${item.title}
190
- </div>
191
- `;
192
- })
193
- .join('');
194
-
195
- return html` <div class="account-section">
196
- <div class="section-title mb-4 mt-0 pt-lg-3 um-nav-title">我的帳號</div>
197
- ${document.body.clientWidth > 768
198
- ? html` <div class="mx-auto mt-3 um-nav-container">
199
- <div class="account-options d-flex gap-3">${buttonHTML}</div>
200
- </div>`
201
- : html` <div class="account-navigation w-100">
202
- <nav class="nav-links mb-3 mb-md-0">
203
- <div class="nav-options d-flex flex-wrap justify-content-between um-nav-mobile-tags-container px-2">${buttonHTML}</div>
204
- </nav>
205
- </div>`}
206
- </div>`;
188
+ })}"
189
+ >
190
+ <span class="tx_700_white">確認重設</span>
191
+ </div>
192
+ </div>`,
193
+ ].join('');
194
+ },
195
+ });
196
+ } else if (item.key === 'logout') {
197
+ GlobalUser.token = '';
198
+ changePage('index', 'home', {});
199
+ } else {
200
+ changePage(item.key, 'page', {});
201
+ }
202
+ })}"
203
+ >
204
+ ${item.title}
205
+ </div>
206
+ `;
207
+ })
208
+ .join('');
209
+
210
+ return html` <div class="account-section">
211
+ <div class="section-title mb-4 mt-0 pt-lg-3 um-nav-title">我的帳號</div>
212
+ ${document.body.clientWidth > 768
213
+ ? html` <div class="mx-auto mt-3 um-nav-container">
214
+ <div class="account-options d-flex gap-3">${buttonHTML}</div>
215
+ </div>`
216
+ : html` <div class="account-navigation w-100">
217
+ <nav class="nav-links mb-3 mb-md-0">
218
+ <div class="nav-options d-flex flex-wrap justify-content-between um-nav-mobile-tags-container px-2">${buttonHTML}</div>
219
+ </nav>
220
+ </div>`}
221
+ </div>`;
222
+ }
223
+ },
224
+ divCreate: {},
225
+ onCreate: () => {
226
+ if (vm.loading) {
227
+ UmClass.getRebateInfo().then((data) => {
228
+ glitter.share.rebateConfig = data;
229
+ vm.loading = false;
230
+ gvc.notifyDataChange(vm.id);
231
+ });
232
+ }
233
+ },
234
+ });
207
235
  }
208
236
 
209
237
  static spinner(height?: string): string {
@@ -241,6 +269,20 @@ export class UmClass {
241
269
  }, obj.tag);
242
270
  }
243
271
 
272
+ static async getRebateInfo() {
273
+ return new Promise((resolve) => {
274
+ ApiWallet.getRebateConfig({
275
+ type: 'me',
276
+ }).then(async (res) => {
277
+ if (res.result && res.response.data) {
278
+ resolve(res.response.data);
279
+ } else {
280
+ resolve({});
281
+ }
282
+ });
283
+ });
284
+ }
285
+
244
286
  static async getUserData(gvc: GVC) {
245
287
  return new Promise(async (resolve, reject) => {
246
288
  gvc.glitter.share.GlobalUser.userInfo = undefined;
@@ -279,9 +321,8 @@ export class UmClass {
279
321
  });
280
322
  }
281
323
 
282
- static async addStyle(gvc: GVC) {
283
- const css = String.raw;
284
- gvc.addStyle(css`
324
+ static addStyle(gvc: GVC) {
325
+ gvc.addStyle(`
285
326
  .um-nav-title {
286
327
  font-weight: 700;
287
328
  font-size: 36px;
@@ -10,7 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { UmClass } from './um-class.js';
11
11
  import { ApiWallet } from '../../glitter-base/route/wallet.js';
12
12
  import { ApiShop } from '../../glitter-base/route/shopping.js';
13
- import { UMVoucher } from "./um-voucher.js";
13
+ import { UMVoucher } from './um-voucher.js';
14
+ import { CheckInput } from '../../modules/checkInput.js';
14
15
  const html = String.raw;
15
16
  export class UMRebate {
16
17
  static main(gvc, widget, subData) {
@@ -22,6 +23,7 @@ export class UMRebate {
22
23
  dataList: [],
23
24
  amount: 0,
24
25
  oldestText: '',
26
+ rebateConfig: {},
25
27
  };
26
28
  const ids = {
27
29
  view: glitter.getUUID(),
@@ -37,6 +39,7 @@ export class UMRebate {
37
39
  }
38
40
  else {
39
41
  const isWebsite = document.body.clientWidth > 768;
42
+ vm.rebateConfig.title = CheckInput.isEmpty(vm.rebateConfig.title) ? '購物金' : vm.rebateConfig.title;
40
43
  return html `
41
44
  <div class="um-container row">
42
45
  <div class="col-12">${UmClass.nav(gvc)}</div>
@@ -44,7 +47,7 @@ export class UMRebate {
44
47
  <div class="d-flex ${isWebsite ? 'gap-4' : 'gap-3'}">
45
48
  <div class="fa-duotone fa-coins fs-1 d-flex align-items-center justify-content-center"></div>
46
49
  <div class="${isWebsite ? '' : 'd-flex align-items-center gap-2'}">
47
- <div class="fw-500 fs-6">現有購物金</div>
50
+ <div class="fw-500 fs-6">現有${vm.rebateConfig.title}</div>
48
51
  <div class="fw-bold mt-0 mt-md-1 mb-1 um-rb-amount">${vm.amount}</div>
49
52
  </div>
50
53
  </div>
@@ -64,7 +67,7 @@ export class UMRebate {
64
67
  loop="true"
65
68
  background="transparent"
66
69
  ></lottie-player>
67
- <span class="mb-5 fs-5">目前沒有取得購物金呦</span>
70
+ <span class="mb-5 fs-5">目前沒有取得${vm.rebateConfig.title}呦</span>
68
71
  </div>`;
69
72
  }
70
73
  const header = [
@@ -75,7 +78,7 @@ export class UMRebate {
75
78
  title: '到期日期',
76
79
  },
77
80
  {
78
- title: '購物金項目',
81
+ title: `${vm.rebateConfig.title}來源`,
79
82
  },
80
83
  {
81
84
  title: '獲得款項',
@@ -109,14 +112,14 @@ export class UMRebate {
109
112
  (() => {
110
113
  if (item.orderID) {
111
114
  if (item.money > 0) {
112
- return `訂單『 ${item.orderID} 』獲得購物金`;
115
+ return `訂單『 ${item.orderID} 』獲得${vm.rebateConfig.title}`;
113
116
  }
114
117
  else {
115
- return `訂單『 ${item.orderID} 』使用購物金`;
118
+ return `訂單『 ${item.orderID} 』使用${vm.rebateConfig.title}`;
116
119
  }
117
120
  }
118
121
  else {
119
- return item.note || `手動增減購物金`;
122
+ return item.note || `手動增減${vm.rebateConfig.title}`;
120
123
  }
121
124
  })(),
122
125
  item.money.toLocaleString(),
@@ -196,7 +199,7 @@ export class UMRebate {
196
199
  if (!(oldest.remain && oldest.deadline)) {
197
200
  resolve('');
198
201
  }
199
- resolve(html `您尚有 ${oldest.remain} 元購物金<br />將於 ${glitter.ut.dateFormat(new Date(oldest.deadline), 'yyyy/MM/dd hh:mm')} 到期`);
202
+ resolve(html `您尚有 ${oldest.remain} 元${vm.rebateConfig.title}<br />將於 ${glitter.ut.dateFormat(new Date(oldest.deadline), 'yyyy/MM/dd hh:mm')} 到期`);
200
203
  }));
201
204
  }),
202
205
  new Promise((resolve) => {
@@ -213,10 +216,12 @@ export class UMRebate {
213
216
  }
214
217
  }));
215
218
  }),
219
+ UmClass.getRebateInfo(),
216
220
  ]).then((dataList) => {
217
221
  vm.amount = dataList[0];
218
222
  vm.oldestText = dataList[1];
219
223
  vm.dataList = dataList[2];
224
+ vm.rebateConfig = dataList[3];
220
225
  loadings.view = false;
221
226
  gvc.notifyDataChange(ids.view);
222
227
  });