ts-glitter 21.3.8 → 21.4.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 (134) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-line.js +12 -1
  4. package/lowcode/backend-manager/bg-line.ts +16 -1
  5. package/lowcode/backend-manager/bg-notify.js +13 -2
  6. package/lowcode/backend-manager/bg-notify.ts +17 -2
  7. package/lowcode/backend-manager/bg-product.js +81 -30
  8. package/lowcode/backend-manager/bg-product.ts +95 -34
  9. package/lowcode/backend-manager/bg-recommend.js +109 -141
  10. package/lowcode/backend-manager/bg-recommend.ts +122 -144
  11. package/lowcode/backend-manager/bg-sns.js +14 -4
  12. package/lowcode/backend-manager/bg-sns.ts +18 -4
  13. package/lowcode/backend-manager/bg-widget.js +176 -12
  14. package/lowcode/backend-manager/bg-widget.ts +198 -13
  15. package/lowcode/cms-plugin/auto-fcm-advertise.js +13 -2
  16. package/lowcode/cms-plugin/auto-fcm-advertise.ts +16 -2
  17. package/lowcode/cms-plugin/auto-fcm-history.js +13 -2
  18. package/lowcode/cms-plugin/auto-fcm-history.ts +16 -2
  19. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  20. package/lowcode/cms-plugin/module/order-excel.js +18 -2
  21. package/lowcode/cms-plugin/module/order-excel.ts +20 -9
  22. package/lowcode/cms-plugin/module/product-setting.js +2 -1
  23. package/lowcode/cms-plugin/module/product-setting.ts +2 -1
  24. package/lowcode/cms-plugin/module/user-excel.js +1 -1
  25. package/lowcode/cms-plugin/module/user-excel.ts +2 -2
  26. package/lowcode/cms-plugin/pos-pages/payment-page.js +3 -2
  27. package/lowcode/cms-plugin/pos-pages/payment-page.ts +11 -5
  28. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -1
  29. package/lowcode/cms-plugin/shopping-allowance-manager.js +3 -2
  30. package/lowcode/cms-plugin/shopping-allowance-manager.ts +3 -2
  31. package/lowcode/cms-plugin/shopping-discount-setting.js +2 -0
  32. package/lowcode/cms-plugin/shopping-discount-setting.ts +2 -0
  33. package/lowcode/cms-plugin/shopping-invoice-manager.js +7 -4
  34. package/lowcode/cms-plugin/shopping-invoice-manager.ts +12 -11
  35. package/lowcode/cms-plugin/shopping-order-manager.js +21 -4
  36. package/lowcode/cms-plugin/shopping-order-manager.ts +30 -11
  37. package/lowcode/cms-plugin/shopping-product-setting.js +45 -41
  38. package/lowcode/cms-plugin/shopping-product-setting.ts +55 -48
  39. package/lowcode/cms-plugin/shopping-rebate.js +52 -46
  40. package/lowcode/cms-plugin/shopping-rebate.ts +402 -396
  41. package/lowcode/cms-plugin/shopping-setting-advance.js +6 -6
  42. package/lowcode/cms-plugin/shopping-setting-advance.ts +7 -7
  43. package/lowcode/cms-plugin/shopping-setting-basic.js +44 -0
  44. package/lowcode/cms-plugin/shopping-setting-basic.ts +63 -1
  45. package/lowcode/cms-plugin/shopping-setting-stock-log.js +57 -0
  46. package/lowcode/cms-plugin/shopping-setting-stock-log.ts +101 -0
  47. package/lowcode/cms-plugin/user-list.js +10 -9
  48. package/lowcode/cms-plugin/user-list.ts +11 -8
  49. package/lowcode/css/editor.css +1 -1
  50. package/lowcode/form-view/editor/image-selector.js +83 -82
  51. package/lowcode/form-view/editor/image-selector.ts +115 -107
  52. package/lowcode/glitter-base/route/user.js +27 -34
  53. package/lowcode/glitter-base/route/user.ts +31 -40
  54. package/lowcode/glitterBundle/dialog/ShareDialog.js +1 -0
  55. package/lowcode/glitterBundle/dialog/ShareDialog.ts +2 -0
  56. package/lowcode/glitterBundle/dialog/dialog.js +2 -2
  57. package/lowcode/glitterBundle/dialog/dialog.ts +2 -2
  58. package/lowcode/glitterBundle/plugins/editor-elem.js +5 -11
  59. package/lowcode/glitterBundle/plugins/editor-elem.ts +11 -11
  60. package/lowcode/modules/image-library.js +836 -486
  61. package/lowcode/modules/image-library.ts +1760 -1418
  62. package/lowcode/modules/tool.js +10 -9
  63. package/lowcode/modules/tool.ts +11 -10
  64. package/lowcode/public-components/checkout/index.js +4 -2
  65. package/lowcode/public-components/checkout/index.ts +5 -3
  66. package/lowcode/public-models/product.ts +13 -0
  67. package/nxv0ptv53w.json +1 -0
  68. package/package.json +1 -1
  69. package/src/api-public/controllers/shop.js +2 -2
  70. package/src/api-public/controllers/shop.js.map +1 -1
  71. package/src/api-public/controllers/shop.ts +5 -2
  72. package/src/api-public/controllers/stock.js +1 -1
  73. package/src/api-public/controllers/stock.js.map +1 -1
  74. package/src/api-public/controllers/stock.ts +93 -81
  75. package/src/api-public/models/glitter-finance.js +2 -1
  76. package/src/api-public/models/glitter-finance.js.map +1 -1
  77. package/src/api-public/services/checkout-event.js +1 -0
  78. package/src/api-public/services/checkout-event.js.map +1 -1
  79. package/src/api-public/services/checkout-event.ts +2 -2
  80. package/src/api-public/services/data-analyze.d.ts +1 -1
  81. package/src/api-public/services/diff-record.d.ts +25 -0
  82. package/src/api-public/services/diff-record.js +158 -0
  83. package/src/api-public/services/diff-record.js.map +1 -0
  84. package/src/api-public/services/diff-record.ts +217 -0
  85. package/src/api-public/services/ezpay/tool.d.ts +1 -0
  86. package/src/api-public/services/financial-serviceV2.js +7 -17
  87. package/src/api-public/services/financial-serviceV2.js.map +1 -1
  88. package/src/api-public/services/public-table-check.js +25 -7
  89. package/src/api-public/services/public-table-check.js.map +1 -1
  90. package/src/api-public/services/public-table-check.ts +53 -31
  91. package/src/api-public/services/shopping.d.ts +2 -12
  92. package/src/api-public/services/shopping.js +16 -7
  93. package/src/api-public/services/shopping.js.map +1 -1
  94. package/src/api-public/services/shopping.ts +33 -7
  95. package/src/api-public/services/stock.d.ts +1 -1
  96. package/src/api-public/services/stock.js +19 -17
  97. package/src/api-public/services/stock.js.map +1 -1
  98. package/src/api-public/services/stock.ts +711 -696
  99. package/src/api-public/services/user.d.ts +1 -1
  100. package/src/api-public/services/user.js +25 -25
  101. package/src/api-public/services/user.js.map +1 -1
  102. package/src/api-public/services/user.ts +34 -27
  103. package/src/app-project/serverless/src/index.js +7 -17
  104. package/src/app-project/serverless/src/index.js.map +1 -1
  105. package/src/app-project/serverless/src/modules/CryptoJS.js +7 -17
  106. package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
  107. package/src/app-project/serverless/src/modules/database.d.ts +1 -1
  108. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  109. package/src/app-project/serverless/src/modules/ssh.js +7 -17
  110. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  111. package/src/firebase/message.js +2 -1
  112. package/src/firebase/message.js.map +1 -1
  113. package/src/helper/app_creater.js +2 -1
  114. package/src/helper/app_creater.js.map +1 -1
  115. package/src/helper/glitter-util.d.ts +1 -0
  116. package/src/lambda/interface.js +2 -2
  117. package/src/lambda/interface.js.map +1 -1
  118. package/src/modules/CryptoJS.js +7 -17
  119. package/src/modules/CryptoJS.js.map +1 -1
  120. package/src/modules/database.d.ts +1 -1
  121. package/src/modules/ssh.js +7 -17
  122. package/src/modules/ssh.js.map +1 -1
  123. package/src/modules/tool.d.ts +5 -0
  124. package/src/modules/tool.js +19 -0
  125. package/src/modules/tool.js.map +1 -1
  126. package/src/modules/tool.ts +27 -0
  127. package/src/run.js +2 -1
  128. package/src/run.js.map +1 -1
  129. package/src/services/app.js +7 -17
  130. package/src/services/app.js.map +1 -1
  131. package/src/services/saas-table-check.js +2 -2
  132. package/src/services/saas-table-check.js.map +1 -1
  133. package/src/services/ses.js +2 -1
  134. package/src/services/ses.js.map +1 -1
@@ -9,415 +9,421 @@ import { FilterOptions } from '../cms-plugin/filter-options.js';
9
9
  import { ApiUser } from '../glitter-base/route/user.js';
10
10
 
11
11
  export class ShoppingRebate {
12
- public static main(gvc: GVC) {
13
- const glitter = gvc.glitter;
14
- const html = String.raw;
15
- const vm: {
16
- id: string;
17
- tableId: string;
18
- filterId: string;
19
- type: 'list' | 'add' | 'replace';
20
- data: any;
21
- dataList: any;
22
- query?: string;
23
- } = {
24
- id: glitter.getUUID(),
25
- tableId: glitter.getUUID(),
26
- filterId: glitter.getUUID(),
27
- type: 'list',
28
- data: {
29
- id: 0,
30
- userID: 0,
31
- account: '',
32
- userData: { name: '', email: '', phone: '' },
33
- created_time: '',
34
- role: 0,
35
- company: null,
36
- status: 1,
37
- },
38
- dataList: undefined,
39
- query: '',
40
- };
41
- const dialog = new ShareDialog(gvc.glitter);
12
+ public static main(gvc: GVC) {
13
+ const glitter = gvc.glitter;
14
+ const html = String.raw;
15
+ const vm: {
16
+ id: string;
17
+ tableId: string;
18
+ filterId: string;
19
+ type: 'list' | 'add' | 'replace';
20
+ data: any;
21
+ dataList: any;
22
+ query?: string;
23
+ } = {
24
+ id: glitter.getUUID(),
25
+ tableId: glitter.getUUID(),
26
+ filterId: glitter.getUUID(),
27
+ type: 'list',
28
+ data: {
29
+ id: 0,
30
+ userID: 0,
31
+ account: '',
32
+ userData: { name: '', email: '', phone: '' },
33
+ created_time: '',
34
+ role: 0,
35
+ company: null,
36
+ status: 1,
37
+ },
38
+ dataList: undefined,
39
+ query: '',
40
+ };
41
+ const dialog = new ShareDialog(gvc.glitter);
42
42
 
43
- function showUsersDialog(defaultValue: string[], callback: (dataList: number[]) => void) {
44
- BgWidget.selectDropDialog({
45
- gvc: gvc,
46
- title: '搜尋特定顧客',
47
- tag: 'show_users_dialog',
48
- updownOptions: FilterOptions.userOrderBy,
49
- callback: (dataList, status) => {
50
- if (status === -1) {
51
- setTimeout(() => {
52
- showUsersDialog(dataList, callback);
53
- }, 100);
43
+ function showUsersDialog(defaultValue: string[], callback: (dataList: number[]) => void) {
44
+ BgWidget.selectDropDialog({
45
+ gvc: gvc,
46
+ title: '搜尋特定顧客',
47
+ tag: 'show_users_dialog',
48
+ updownOptions: FilterOptions.userOrderBy,
49
+ callback: (dataList, status) => {
50
+ if (status === -1) {
51
+ setTimeout(() => {
52
+ showUsersDialog(dataList, callback);
53
+ }, 100);
54
+ }
55
+ if (status === 1) {
56
+ if (dataList.length === 0) {
57
+ dialog.checkYesOrNot({
58
+ callback: bool => {
59
+ if (bool) {
60
+ showUsersDialog(dataList, callback);
61
+ }
62
+ },
63
+ text: '您未勾選任何顧客<br />請問要重新選取嗎?',
64
+ });
65
+ } else {
66
+ dialog.checkYesOrNot({
67
+ callback: bool => {
68
+ if (bool) {
69
+ callback(dataList);
70
+ } else {
71
+ showUsersDialog(dataList, callback);
72
+ }
73
+ },
74
+ text: `總計勾選${dataList.length}名顧客<br />確定要發送購物金?`,
75
+ });
76
+ }
77
+ }
78
+ },
79
+ default: defaultValue,
80
+ api: (data: { query: string; orderString: string }) => {
81
+ return new Promise(resolve => {
82
+ ApiUser.getUserListOrders({
83
+ page: 0,
84
+ limit: 99999,
85
+ search: data.query,
86
+ orderString: data.orderString,
87
+ only_id: true,
88
+ }).then(dd => {
89
+ if (dd.response.data) {
90
+ vm.dataList = dd.response.data
91
+ .filter((item: { account: string }) => {
92
+ return item.account && item.account.length > 0;
93
+ })
94
+ .map(
95
+ (item: {
96
+ userID: number;
97
+ account: string;
98
+ userData: {
99
+ name: string;
100
+ email: string;
101
+ };
102
+ }) => {
103
+ return {
104
+ key: item.userID,
105
+ value: item.userData.name ?? '(尚無姓名)',
106
+ note: item.account,
107
+ };
54
108
  }
55
- if (status === 1) {
56
- if (dataList.length === 0) {
57
- dialog.checkYesOrNot({
58
- callback: (bool) => {
59
- if (bool) {
60
- showUsersDialog(dataList, callback);
61
- }
62
- },
63
- text: '您未勾選任何顧客<br />請問要重新選取嗎?',
109
+ );
110
+ resolve(vm.dataList);
111
+ }
112
+ });
113
+ });
114
+ },
115
+ style: 'width: 100%;',
116
+ });
117
+ }
118
+
119
+ return gvc.bindView(() => {
120
+ return {
121
+ bind: vm.id,
122
+ dataList: [{ obj: vm, key: 'type' }],
123
+ view: () => {
124
+ if (vm.type === 'list') {
125
+ return BgWidget.container(html`
126
+ <div class="title-container">
127
+ ${BgWidget.title('購物金紀錄')}
128
+ <div class="flex-fill"></div>
129
+ ${BgWidget.darkButton(
130
+ '新增紀錄',
131
+ gvc.event(() => {
132
+ this.newRebateDialog({
133
+ gvc: gvc,
134
+ saveButton: {
135
+ event: obj => {
136
+ showUsersDialog([], dataList => {
137
+ dialog.dataLoading({
138
+ text: '發送中...',
139
+ visible: true,
64
140
  });
65
- } else {
66
- dialog.checkYesOrNot({
67
- callback: (bool) => {
68
- if (bool) {
69
- callback(dataList);
70
- } else {
71
- showUsersDialog(dataList, callback);
72
- }
73
- },
74
- text: `總計勾選${dataList.length}名顧客<br />確定要發送購物金?`,
141
+ ApiWallet.storeRebateByManager({
142
+ userID: dataList,
143
+ total: (() => {
144
+ if (obj.type === 'add') {
145
+ return parseInt(obj.value, 10);
146
+ } else {
147
+ const minus = parseInt(obj.value, 10);
148
+ return minus ? minus * -1 : minus;
149
+ }
150
+ })(),
151
+ note: obj.note,
152
+ rebateEndDay: obj.rebateEndDay,
153
+ }).then(result => {
154
+ dialog.dataLoading({ visible: false });
155
+ if (result.response.result) {
156
+ dialog.successMessage({ text: `設定成功` });
157
+ gvc.closeDialog();
158
+ setTimeout(() => {
159
+ gvc.notifyDataChange(vm.tableId);
160
+ }, 200);
161
+ } else {
162
+ dialog.errorMessage({ text: result.response.msg });
163
+ }
75
164
  });
76
- }
77
- }
78
- },
79
- default: defaultValue,
80
- api: (data: { query: string; orderString: string }) => {
81
- return new Promise((resolve) => {
82
- ApiUser.getUserListOrders({
83
- page: 0,
84
- limit: 99999,
85
- search: data.query,
86
- orderString: data.orderString,
87
- }).then((dd) => {
88
- if (dd.response.data) {
89
- vm.dataList = dd.response.data
90
- .filter((item: { account: string }) => {
91
- return item.account && item.account.length > 0;
92
- })
93
- .map(
94
- (item: {
95
- userID: number;
96
- account: string;
97
- userData: {
98
- name: string;
99
- email: string;
100
- };
101
- }) => {
102
- return {
103
- key: item.userID,
104
- value: item.userData.name ?? '(尚無姓名)',
105
- note: item.account,
106
- };
165
+ });
166
+ },
167
+ text: '選擇顧客',
168
+ },
169
+ });
170
+ })
171
+ )}
172
+ </div>
173
+ ${BgWidget.container(
174
+ BgWidget.mainCard(
175
+ [
176
+ BgWidget.searchPlace(
177
+ gvc.event((e, event) => {
178
+ vm.query = e.value;
179
+ gvc.notifyDataChange(vm.id);
180
+ }),
181
+ vm.query || '',
182
+ '搜尋顧客信箱、姓名'
183
+ ),
184
+ gvc.bindView({
185
+ bind: vm.tableId,
186
+ view: () => {
187
+ return BgWidget.tableV3({
188
+ gvc: gvc,
189
+ getData: vmi => {
190
+ const limit = 15;
191
+ ApiWallet.getRebate({
192
+ page: vmi.page - 1,
193
+ limit: limit,
194
+ search: vm.query || undefined,
195
+ }).then(data => {
196
+ function getDatalist() {
197
+ return data.response.data.map((dd: any) => {
198
+ return [
199
+ {
200
+ key: '用戶名稱',
201
+ value: `<span class="fs-7">${dd.name ?? '資料異常'}</span>`,
202
+ },
203
+ {
204
+ key: '購物金來源',
205
+ value: (() => {
206
+ let text = '';
207
+ if (dd.content.order_id) {
208
+ text = `訂單編號:${dd.content.order_id}`;
209
+ } else {
210
+ switch (dd.content.type) {
211
+ case 'manual':
212
+ text = '手動設定';
213
+ break;
214
+ case 'first_regiser':
215
+ text = '新加入會員';
216
+ break;
217
+ case 'birth':
218
+ text = '生日禮';
219
+ break;
220
+ default:
221
+ text = dd.origin < 0 ? '使用折抵' : '其他';
222
+ break;
223
+ }
224
+ }
225
+ return html`<span class="fs-7">${text}</span>`;
226
+ })(),
227
+ },
228
+ {
229
+ key: '增減',
230
+ value: (() => {
231
+ if (dd.origin > 0) {
232
+ return html`<span class="tx_700 text-success">+ ${dd.origin}</span>`;
233
+ }
234
+ return html`<span class="tx_700 text-danger">- ${dd.origin * -1}</span>`;
235
+ })(),
236
+ },
237
+ {
238
+ key: '此筆可使用餘額',
239
+ value: (() => {
240
+ const now = new Date();
241
+ if (
242
+ dd.origin > 0 &&
243
+ dd.remain > 0 &&
244
+ now > new Date(dd.created_at) &&
245
+ now < new Date(dd.deadline)
246
+ ) {
247
+ return html`<span class="tx_700 text-success">+ ${dd.remain}</span>`;
107
248
  }
108
- );
109
- resolve(vm.dataList);
110
- }
249
+ return html`<span class="tx_700">0</span>`;
250
+ })(),
251
+ },
252
+ {
253
+ key: '備註',
254
+ value: `<span class="fs-7">${
255
+ typeof dd.note === 'string'
256
+ ? dd.note
257
+ : ((dd.note && dd.note.note) ?? '尚未填寫備註')
258
+ }</span>`,
259
+ },
260
+ {
261
+ key: '建立時間',
262
+ value: `<span class="fs-7">${glitter.ut.dateFormat(new Date(dd.created_at), 'yyyy-MM-dd hh:mm:ss')}</span>`,
263
+ },
264
+ ];
265
+ });
266
+ }
267
+ vm.dataList = data.response.data;
268
+ vmi.pageSize = Math.ceil(data.response.total / limit);
269
+ vmi.originalData = vm.dataList;
270
+ vmi.tableData = getDatalist();
271
+ vmi.loading = false;
272
+ vmi.callback();
273
+ });
274
+ },
275
+ rowClick: (data, index) => {
276
+ vm.data = vm.dataList[index];
277
+ vm.type = 'replace';
278
+ },
279
+ filter: [],
111
280
  });
112
- });
113
- },
114
- style: 'width: 100%;',
281
+ },
282
+ }),
283
+ ].join('')
284
+ ) + BgWidget.mbContainer(120)
285
+ )}
286
+ `);
287
+ } else if (vm.type == 'replace') {
288
+ return UserList.userInformationDetail({
289
+ userID: vm.data.user_id,
290
+ callback: () => {
291
+ vm.type = 'list';
292
+ gvc.notifyDataChange(vm.id);
293
+ },
294
+ gvc: gvc,
115
295
  });
116
- }
296
+ }
297
+ return '';
298
+ },
299
+ };
300
+ });
301
+ }
117
302
 
118
- return gvc.bindView(() => {
303
+ public static newRebateDialog(obj: {
304
+ gvc: GVC;
305
+ saveButton: {
306
+ event: (data: { type: string; value: string; note: string; rebateEndDay: string }) => void;
307
+ text: string;
308
+ };
309
+ }) {
310
+ const html = String.raw;
311
+ const gvc = obj.gvc;
312
+ return gvc.glitter.innerDialog(gvc2 => {
313
+ const vm = {
314
+ type: 'add',
315
+ value: '0',
316
+ note: '',
317
+ rebateEndDay: '0',
318
+ };
319
+ return html`<div class="modal-content bg-white rounded-3 p-2" style="max-width: 90%; width: 400px;">
320
+ <div>
321
+ <div style="height: 50px; margin-bottom: 16px" class="d-flex align-items-center border-bottom">
322
+ <span class="ps-2 tx_700">新增紀錄</span>
323
+ </div>
324
+ ${gvc.bindView(() => {
325
+ const id = gvc.glitter.getUUID();
119
326
  return {
120
- bind: vm.id,
121
- dataList: [{ obj: vm, key: 'type' }],
122
- view: () => {
123
- if (vm.type === 'list') {
124
- return BgWidget.container(
125
- html`
126
- <div class="title-container">
127
- ${BgWidget.title('購物金紀錄')}
128
- <div class="flex-fill"></div>
129
- ${BgWidget.darkButton(
130
- '新增紀錄',
131
- gvc.event(() => {
132
- this.newRebateDialog({
133
- gvc: gvc,
134
- saveButton: {
135
- event: (obj) => {
136
- showUsersDialog([], (dataList) => {
137
- dialog.dataLoading({
138
- text: '發送中...',
139
- visible: true,
140
- });
141
- ApiWallet.storeRebateByManager({
142
- userID: dataList,
143
- total: (() => {
144
- if (obj.type === 'add') {
145
- return parseInt(obj.value, 10);
146
- } else {
147
- const minus = parseInt(obj.value, 10);
148
- return minus ? minus * -1 : minus;
149
- }
150
- })(),
151
- note: obj.note,
152
- rebateEndDay: obj.rebateEndDay,
153
- }).then((result) => {
154
- dialog.dataLoading({ visible: false });
155
- if (result.response.result) {
156
- dialog.successMessage({ text: `設定成功` });
157
- gvc.closeDialog();
158
- setTimeout(() => {
159
- gvc.notifyDataChange(vm.tableId);
160
- }, 200);
161
- } else {
162
- dialog.errorMessage({ text: result.response.msg });
163
- }
164
- });
165
- });
166
- },
167
- text: '選擇顧客',
168
- },
169
- });
170
- })
171
- )}
172
- </div>
173
- ${BgWidget.container(
174
- BgWidget.mainCard(
175
- [
176
- BgWidget.searchPlace(
177
- gvc.event((e, event) => {
178
- vm.query = e.value;
179
- gvc.notifyDataChange(vm.id);
180
- }),
181
- vm.query || '',
182
- '搜尋顧客信箱、姓名'
183
- ),
184
- gvc.bindView({
185
- bind: vm.tableId,
186
- view: () => {
187
- return BgWidget.tableV3({
188
- gvc: gvc,
189
- getData: (vmi) => {
190
- const limit = 15;
191
- ApiWallet.getRebate({
192
- page: vmi.page - 1,
193
- limit: limit,
194
- search: vm.query || undefined,
195
- }).then((data) => {
196
- function getDatalist() {
197
- return data.response.data.map((dd: any) => {
198
- return [
199
- {
200
- key: '用戶名稱',
201
- value: `<span class="fs-7">${dd.name ?? '資料異常'}</span>`,
202
- },
203
- {
204
- key: '購物金來源',
205
- value: (() => {
206
- let text = '';
207
- if (dd.content.order_id) {
208
- text = `訂單編號:${dd.content.order_id}`;
209
- } else {
210
- switch (dd.content.type) {
211
- case 'manual':
212
- text = '手動設定';
213
- break;
214
- case 'first_regiser':
215
- text = '新加入會員';
216
- break;
217
- case 'birth':
218
- text = '生日禮';
219
- break;
220
- default:
221
- text = dd.origin < 0 ? '使用折抵' : '其他';
222
- break;
223
- }
224
- }
225
- return html`<span class="fs-7">${text}</span>`;
226
- })(),
227
- },
228
- {
229
- key: '增減',
230
- value: (() => {
231
- if (dd.origin > 0) {
232
- return html`<span class="tx_700 text-success">+ ${dd.origin}</span>`;
233
- }
234
- return html`<span class="tx_700 text-danger">- ${dd.origin * -1}</span>`;
235
- })(),
236
- },
237
- {
238
- key: '此筆可使用餘額',
239
- value: (() => {
240
- const now = new Date();
241
- if (dd.origin > 0 && dd.remain > 0 && now > new Date(dd.created_at) && now < new Date(dd.deadline)) {
242
- return html`<span class="tx_700 text-success">+ ${dd.remain}</span>`;
243
- }
244
- return html`<span class="tx_700">0</span>`;
245
- })(),
246
- },
247
- {
248
- key: '備註',
249
- value: `<span class="fs-7">${
250
- typeof dd.note === 'string' ? dd.note : (dd.note && dd.note.note) ?? '尚未填寫備註'
251
- }</span>`,
252
- },
253
- {
254
- key: '建立時間',
255
- value: `<span class="fs-7">${glitter.ut.dateFormat(new Date(dd.created_at), 'yyyy-MM-dd hh:mm:ss')}</span>`,
256
- },
257
- ];
258
- });
259
- }
260
- vm.dataList = data.response.data;
261
- vmi.pageSize = Math.ceil(data.response.total / limit);
262
- vmi.originalData = vm.dataList;
263
- vmi.tableData = getDatalist();
264
- vmi.loading = false;
265
- vmi.callback();
266
- });
267
- },
268
- rowClick: (data, index) => {
269
- vm.data = vm.dataList[index];
270
- vm.type = 'replace';
271
- },
272
- filter: [],
273
- });
274
- },
275
- }),
276
- ].join('')
277
- ) + BgWidget.mbContainer(120)
278
- )}
279
- `
280
- );
281
- } else if (vm.type == 'replace') {
282
- return UserList.userInformationDetail({
283
- userID: vm.data.user_id,
284
- callback: () => {
285
- vm.type = 'list';
286
- gvc.notifyDataChange(vm.id);
287
- },
288
- gvc: gvc,
289
- });
290
- }
291
- return '';
292
- },
293
- };
294
- });
295
- }
296
-
297
- public static newRebateDialog(obj: {
298
- gvc: GVC;
299
- saveButton: {
300
- event: (data: { type: string; value: string; note: string; rebateEndDay: string }) => void;
301
- text: string;
302
- };
303
- }) {
304
- const html = String.raw;
305
- const gvc = obj.gvc;
306
- return gvc.glitter.innerDialog((gvc2) => {
307
- const vm = {
308
- type: 'add',
309
- value: '0',
310
- note: '',
311
- rebateEndDay: '0',
312
- };
313
- return html`<div class="modal-content bg-white rounded-3 p-2" style="max-width: 90%; width: 400px;">
314
- <div>
315
- <div style="height: 50px; margin-bottom: 16px" class="d-flex align-items-center border-bottom">
316
- <span class="ps-2 tx_700">新增紀錄</span>
327
+ bind: id,
328
+ view: () => {
329
+ return [
330
+ html`<div>
331
+ ${EditorElem.radio({
332
+ title: html`<h6 class="tx_700">類型</h6>`,
333
+ gvc: gvc,
334
+ def: vm.type,
335
+ array: [
336
+ { title: '新增', value: 'add' },
337
+ { title: '減少', value: 'minus' },
338
+ ],
339
+ callback: text => {
340
+ vm.type = text;
341
+ gvc.notifyDataChange(id);
342
+ },
343
+ })}
344
+ </div>`,
345
+ html`<div class="row mt-2">
346
+ <div class="col-6">
347
+ ${EditorElem.editeInput({
348
+ title: html`<h6 class="tx_700">金額</h6>`,
349
+ gvc: gvc,
350
+ default: vm.value,
351
+ type: 'number',
352
+ placeHolder: '設定數值',
353
+ callback: text => {
354
+ vm.value = text;
355
+ gvc.notifyDataChange(id);
356
+ },
357
+ })}
358
+ </div>
359
+ <div class="col-6">
360
+ ${EditorElem.editeInput({
361
+ title: html`<h6 class="tx_700">可使用天數</h6>`,
362
+ gvc: gvc,
363
+ default: vm.rebateEndDay,
364
+ type: 'number',
365
+ placeHolder: '設定數值',
366
+ callback: text => {
367
+ vm.rebateEndDay = text;
368
+ gvc.notifyDataChange(id);
369
+ },
370
+ unit: '天',
371
+ readonly: vm.type !== 'add',
372
+ })}
373
+ ${BgWidget.grayNote('輸入0,則為無期限', 'margin-top:6px;')}
317
374
  </div>
318
- ${gvc.bindView(() => {
319
- const id = gvc.glitter.getUUID();
320
- return {
321
- bind: id,
322
- view: () => {
323
- return [
324
- html`<div>
325
- ${EditorElem.radio({
326
- title: html`<h6 class="tx_700">類型</h6>`,
327
- gvc: gvc,
328
- def: vm.type,
329
- array: [
330
- { title: '新增', value: 'add' },
331
- { title: '減少', value: 'minus' },
332
- ],
333
- callback: (text) => {
334
- vm.type = text;
335
- gvc.notifyDataChange(id);
336
- },
337
- })}
338
- </div>`,
339
- html`<div class="row mt-2">
340
- <div class="col-6">
341
- ${EditorElem.editeInput({
342
- title: html`<h6 class="tx_700">金額</h6>`,
343
- gvc: gvc,
344
- default: vm.value,
345
- type: 'number',
346
- placeHolder: '設定數值',
347
- callback: (text) => {
348
- vm.value = text;
349
- gvc.notifyDataChange(id);
350
- },
351
- })}
352
- </div>
353
- <div class="col-6">
354
- ${EditorElem.editeInput({
355
- title: html`<h6 class="tx_700">可使用天數</h6>`,
356
- gvc: gvc,
357
- default: vm.rebateEndDay,
358
- type: 'number',
359
- placeHolder: '設定數值',
360
- callback: (text) => {
361
- vm.rebateEndDay = text;
362
- gvc.notifyDataChange(id);
363
- },
364
- unit: '天',
365
- readonly: vm.type !== 'add',
366
- })}
367
- ${BgWidget.grayNote('輸入0,則為無期限', 'margin-top:6px;')}
368
- </div>
369
- </div>`,
370
- html`<div>
371
- ${EditorElem.editeText({
372
- title: html`<h6 class="tx_700">備註</h6>`,
373
- gvc: gvc,
374
- default: vm.note,
375
- placeHolder: '輸入備註',
376
- callback: (text) => {
377
- vm.note = text;
378
- gvc.notifyDataChange(id);
379
- },
380
- })}
381
- </div>`,
382
- ].join(``);
383
- },
384
- divCreate: {
385
- class: `p-2`,
386
- style: `display: flex; flex-direction: column;`,
387
- },
388
- };
375
+ </div>`,
376
+ html`<div>
377
+ ${EditorElem.editeText({
378
+ title: html`<h6 class="tx_700">備註</h6>`,
379
+ gvc: gvc,
380
+ default: vm.note,
381
+ placeHolder: '輸入備註',
382
+ callback: text => {
383
+ vm.note = text;
384
+ gvc.notifyDataChange(id);
385
+ },
389
386
  })}
390
- <div class="modal-footer mb-0 pb-0 mt-2 pt-1">
391
- ${BgWidget.cancel(
392
- gvc.event(() => {
393
- gvc2.closeDialog();
394
- })
395
- )}
396
- ${BgWidget.save(
397
- gvc.event(() => {
398
- const dialog = new ShareDialog(gvc.glitter);
399
- const day = parseInt(`${vm.rebateEndDay}`, 10);
400
- const value = parseInt(`${vm.value}`, 10);
387
+ </div>`,
388
+ ].join(``);
389
+ },
390
+ divCreate: {
391
+ class: `p-2`,
392
+ style: `display: flex; flex-direction: column;`,
393
+ },
394
+ };
395
+ })}
396
+ <div class="modal-footer mb-0 pb-0 mt-2 pt-1">
397
+ ${BgWidget.cancel(
398
+ gvc.event(() => {
399
+ gvc2.closeDialog();
400
+ })
401
+ )}
402
+ ${BgWidget.save(
403
+ gvc.event(() => {
404
+ const dialog = new ShareDialog(gvc.glitter);
405
+ const day = parseInt(`${vm.rebateEndDay}`, 10);
406
+ const value = parseInt(`${vm.value}`, 10);
401
407
 
402
- if (value <= 0) {
403
- dialog.infoMessage({ text: '金額需大於0' });
404
- return;
405
- }
406
- if (vm.type === 'add' && isNaN(day)) {
407
- dialog.infoMessage({ text: '請輸入可使用天數' });
408
- return;
409
- }
408
+ if (value <= 0) {
409
+ dialog.infoMessage({ text: '金額需大於0' });
410
+ return;
411
+ }
412
+ if (vm.type === 'add' && isNaN(day)) {
413
+ dialog.infoMessage({ text: '請輸入可使用天數' });
414
+ return;
415
+ }
410
416
 
411
- gvc2.closeDialog();
412
- obj.saveButton.event(vm);
413
- }),
414
- obj.saveButton.text
415
- )}
416
- </div>
417
- </div>
418
- </div>`;
419
- }, Tool.randomString(5));
420
- }
417
+ gvc2.closeDialog();
418
+ obj.saveButton.event(vm);
419
+ }),
420
+ obj.saveButton.text
421
+ )}
422
+ </div>
423
+ </div>
424
+ </div>`;
425
+ }, Tool.randomString(5));
426
+ }
421
427
  }
422
428
 
423
429
  (window as any).glitter.setModule(import.meta.url, ShoppingRebate);