ts-glitter 21.2.5 → 21.2.6

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 (34) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/cms-plugin/filter-options.js +1 -0
  4. package/lowcode/cms-plugin/filter-options.ts +1 -0
  5. package/lowcode/cms-plugin/pos-pages/pos-summary.js +4 -4
  6. package/lowcode/cms-plugin/pos-pages/pos-summary.ts +4 -1
  7. package/lowcode/cms-plugin/shopping-order-manager.js +10 -7
  8. package/lowcode/cms-plugin/shopping-order-manager.ts +10 -7
  9. package/lowcode/cms-plugin/shopping-product-setting.js +9 -6
  10. package/lowcode/cms-plugin/shopping-product-setting.ts +13 -6
  11. package/lowcode/cms-plugin/shopping-setting-basic.js +411 -405
  12. package/lowcode/cms-plugin/shopping-setting-basic.ts +497 -486
  13. package/package.json +1 -1
  14. package/src/api-public/controllers/shop.js +4 -4
  15. package/src/api-public/controllers/shop.js.map +1 -1
  16. package/src/api-public/controllers/shop.ts +10 -12
  17. package/src/api-public/services/checkout-event.js +17 -7
  18. package/src/api-public/services/checkout-event.js.map +1 -1
  19. package/src/api-public/services/financial-serviceV2.js +17 -7
  20. package/src/api-public/services/financial-serviceV2.js.map +1 -1
  21. package/src/api-public/services/mail.js +3 -3
  22. package/src/api-public/services/mail.js.map +1 -1
  23. package/src/api-public/services/mail.ts +144 -134
  24. package/src/api-public/services/shopping.js +5 -4
  25. package/src/api-public/services/shopping.js.map +1 -1
  26. package/src/api-public/services/shopping.ts +15 -14
  27. package/src/api-public/services/user.js +17 -7
  28. package/src/api-public/services/user.js.map +1 -1
  29. package/src/index.js +17 -7
  30. package/src/index.js.map +1 -1
  31. package/src/services/app.js +17 -7
  32. package/src/services/app.js.map +1 -1
  33. package/src/services/ses.js.map +1 -1
  34. package/src/services/ses.ts +41 -35
@@ -5,158 +5,168 @@ import { sendmail } from '../../services/ses.js';
5
5
  import { AutoSendEmail } from './auto-send-email.js';
6
6
 
7
7
  export class Mail {
8
- public app;
9
- public token?: IToken;
10
-
11
- constructor(app: string, token?: IToken) {
12
- this.app = app;
13
- this.token = token;
14
- }
15
-
16
- async chunkSendMail(data: any, id: number) {
17
- try {
18
- for (const b of chunkArray(Array.from(new Set(data.email)), 10)) {
19
- let check = b.length;
20
- await new Promise((resolve) => {
21
- for (const d of b) {
22
- sendmail(`${data.name} <${process.env.smtp}>`, d, data.title, data.content, () => {
23
- check--;
24
- if (check === 0) {
25
- resolve(true);
26
- }
27
- });
28
- }
29
- });
30
- }
31
- await db.query(`UPDATE \`${this.app}\`.t_triggers SET ? WHERE id = ?;`, [{ status: 1 }, id]);
32
- } catch (e) {
33
- throw exception.BadRequestError('BAD_REQUEST', 'chunkSendMail Error:' + e, null);
34
- }
8
+ public app;
9
+ public token?: IToken;
10
+
11
+ constructor(app: string, token?: IToken) {
12
+ this.app = app;
13
+ this.token = token;
14
+ }
15
+
16
+ async chunkSendMail(data: any, id: number) {
17
+ try {
18
+ for (const b of chunkArray(Array.from(new Set(data.email)), 10)) {
19
+ let check = b.length;
20
+ await new Promise(resolve => {
21
+ for (const d of b) {
22
+ sendmail(`${data.name} <${process.env.smtp}>`, d, data.title, data.content, () => {
23
+ check--;
24
+ if (check === 0) {
25
+ resolve(true);
26
+ }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ await db.query(`UPDATE \`${this.app}\`.t_triggers SET ? WHERE id = ?;`, [{ status: 1 }, id]);
32
+ } catch (e) {
33
+ throw exception.BadRequestError('BAD_REQUEST', 'chunkSendMail Error:' + e, null);
35
34
  }
36
-
37
- async getMail(query: { type: string; page: number; limit: number; search?: string; searchType?: string; mailType?: string; status?: string }) {
38
- try {
39
- const whereList: string[] = ['1 = 1'];
40
- switch (query.searchType) {
41
- case 'email':
42
- whereList.push(`(JSON_SEARCH(content->'$.email', 'one', '%${query.search ?? ''}%', NULL, '$[*]') IS NOT NULL)`);
43
- break;
44
- case 'name':
45
- whereList.push(`(UPPER(JSON_EXTRACT(content, '$.name')) LIKE UPPER('%${query.search ?? ''}%'))`);
46
- break;
47
- case 'title':
48
- whereList.push(`(UPPER(JSON_EXTRACT(content, '$.title')) LIKE UPPER('%${query.search ?? ''}%'))`);
49
- break;
50
- }
51
-
52
- if (query.status) {
53
- whereList.push(`(status in (${query.status}))`);
54
- }
55
-
56
- if (query.mailType) {
57
- const maiTypeString = query.mailType.replace(/[^,]+/g, "'$&'");
58
- whereList.push(`(JSON_EXTRACT(content, '$.type') in (${maiTypeString}))`);
59
- }
60
-
61
- const whereSQL = `(tag = 'sendMail' OR tag = 'sendMailBySchedule') AND ${whereList.join(' AND ')}`;
62
-
63
- const emails = await db.query(
64
- `SELECT * FROM \`${this.app}\`.t_triggers
35
+ }
36
+
37
+ async getMail(query: {
38
+ type: string;
39
+ page: number;
40
+ limit: number;
41
+ search?: string;
42
+ searchType?: string;
43
+ mailType?: string;
44
+ status?: string;
45
+ }) {
46
+ try {
47
+ const whereList: string[] = ['1 = 1'];
48
+ switch (query.searchType) {
49
+ case 'email':
50
+ whereList.push(
51
+ `(JSON_SEARCH(content->'$.email', 'one', '%${query.search ?? ''}%', NULL, '$[*]') IS NOT NULL)`
52
+ );
53
+ break;
54
+ case 'name':
55
+ whereList.push(`(UPPER(JSON_EXTRACT(content, '$.name')) LIKE UPPER('%${query.search ?? ''}%'))`);
56
+ break;
57
+ case 'title':
58
+ whereList.push(`(UPPER(JSON_EXTRACT(content, '$.title')) LIKE UPPER('%${query.search ?? ''}%'))`);
59
+ break;
60
+ }
61
+
62
+ if (query.status) {
63
+ whereList.push(`(status in (${query.status}))`);
64
+ }
65
+
66
+ if (query.mailType) {
67
+ const maiTypeString = query.mailType.replace(/[^,]+/g, "'$&'");
68
+ whereList.push(`(JSON_EXTRACT(content, '$.type') in (${maiTypeString}))`);
69
+ }
70
+
71
+ const whereSQL = `(tag = 'sendMail' OR tag = 'sendMailBySchedule') AND ${whereList.join(' AND ')}`;
72
+
73
+ const emails = await db.query(
74
+ `SELECT * FROM \`${this.app}\`.t_triggers
65
75
  WHERE ${whereSQL}
66
76
  ORDER BY id DESC
67
77
  ${query.type === 'download' ? '' : `LIMIT ${query.page * query.limit}, ${query.limit}`};`,
68
- []
69
- );
78
+ []
79
+ );
70
80
 
71
- const total = await db.query(
72
- `SELECT count(id) as c FROM \`${this.app}\`.t_triggers
81
+ const total = await db.query(
82
+ `SELECT count(id) as c FROM \`${this.app}\`.t_triggers
73
83
  WHERE ${whereSQL};`,
74
- []
75
- );
76
-
77
- let n = 0;
78
- await new Promise<void>((resolve) => {
79
- for (const email of emails) {
80
- AutoSendEmail.getDefCompare(this.app, email.content.type,'zh-TW').then((dd) => {
81
- email.content.typeName = dd && dd.tag_name ? dd.tag_name : '手動發送';
82
- n++;
83
- });
84
- }
85
- const si = setInterval(() => {
86
- if (n === emails.length) {
87
- resolve();
88
- clearInterval(si);
89
- }
90
- }, 300);
91
- });
92
-
93
- return { data: emails, total: total[0].c };
94
- } catch (e) {
95
- throw exception.BadRequestError('BAD_REQUEST', 'getMail Error:' + e, null);
84
+ []
85
+ );
86
+
87
+ let n = 0;
88
+ await new Promise<void>(resolve => {
89
+ for (const email of emails) {
90
+ AutoSendEmail.getDefCompare(this.app, email.content.type, 'zh-TW').then(dd => {
91
+ email.content.typeName = dd && dd.tag_name ? dd.tag_name : '手動發送';
92
+ n++;
93
+ });
96
94
  }
95
+ const si = setInterval(() => {
96
+ if (n === emails.length) {
97
+ resolve();
98
+ clearInterval(si);
99
+ }
100
+ }, 300);
101
+ });
102
+
103
+ return { data: emails, total: total[0].c };
104
+ } catch (e) {
105
+ throw exception.BadRequestError('BAD_REQUEST', 'getMail Error:' + e, null);
97
106
  }
98
-
99
- async postMail(data: any): Promise<{ result: boolean; message: string }> {
100
- data.token && delete data.token;
101
- try {
102
- if (Boolean(data.sendTime)) {
103
- if (isLater(data.sendTime)) {
104
- return { result: false, message: '排定發送的時間需大於現在時間' };
105
- }
106
- await db.query(`INSERT INTO \`${this.app}\`.\`t_triggers\` SET ? ;`, [
107
- {
108
- tag: 'sendMailBySchedule',
109
- content: JSON.stringify(data),
110
- trigger_time: formatDateTime(data.sendTime),
111
- status: 0,
112
- },
113
- ]);
114
- } else {
115
- const insertData = await db.query(`INSERT INTO \`${this.app}\`.\`t_triggers\` SET ? ;`, [
116
- {
117
- tag: 'sendMail',
118
- content: JSON.stringify(data),
119
- trigger_time: formatDateTime(),
120
- status: 0,
121
- },
122
- ]);
123
- this.chunkSendMail(data, insertData.insertId);
124
- }
125
- return { result: true, message: '寄送成功' };
126
- } catch (e) {
127
- throw exception.BadRequestError('BAD_REQUEST', 'postMail Error:' + e, null);
107
+ }
108
+
109
+ async postMail(data: any): Promise<{ result: boolean; message: string }> {
110
+ data.token && delete data.token;
111
+ try {
112
+ if (Boolean(data.sendTime)) {
113
+ if (isLater(data.sendTime)) {
114
+ return { result: false, message: '排定發送的時間需大於現在時間' };
128
115
  }
116
+ await db.query(`INSERT INTO \`${this.app}\`.\`t_triggers\` SET ? ;`, [
117
+ {
118
+ tag: 'sendMailBySchedule',
119
+ content: JSON.stringify(data),
120
+ trigger_time: formatDateTime(data.sendTime),
121
+ status: 0,
122
+ },
123
+ ]);
124
+ } else {
125
+ const insertData = await db.query(`INSERT INTO \`${this.app}\`.\`t_triggers\` SET ? ;`, [
126
+ {
127
+ tag: 'sendMail',
128
+ content: JSON.stringify(data),
129
+ trigger_time: formatDateTime(),
130
+ status: 0,
131
+ },
132
+ ]);
133
+ this.chunkSendMail(data, insertData.insertId);
134
+ }
135
+ return { result: true, message: '寄送成功' };
136
+ } catch (e) {
137
+ throw exception.BadRequestError('BAD_REQUEST', 'postMail Error:' + e, null);
129
138
  }
130
-
131
- async cancelSendMail(id: string): Promise<{ result: boolean; message: string }> {
132
- try {
133
- await db.query(`UPDATE \`${this.app}\`.t_triggers SET ? WHERE id = ?;`, [{ status: 2 }, id]);
134
- return { result: true, message: '取消排定發送成功' };
135
- } catch (e) {
136
- throw exception.BadRequestError('BAD_REQUEST', 'postMail Error:' + e, null);
137
- }
139
+ }
140
+
141
+ async cancelSendMail(id: string): Promise<{ result: boolean; message: string }> {
142
+ try {
143
+ await db.query(`UPDATE \`${this.app}\`.t_triggers SET ? WHERE id = ?;`, [{ status: 2 }, id]);
144
+ return { result: true, message: '取消排定發送成功' };
145
+ } catch (e) {
146
+ throw exception.BadRequestError('BAD_REQUEST', 'postMail Error:' + e, null);
138
147
  }
148
+ }
139
149
  }
140
150
 
141
151
  function formatDateTime(sendTime?: { date: string; time: string }) {
142
- const dateTimeString = sendTime ? sendTime.date + ' ' + sendTime.time : undefined;
143
- const dateObject = dateTimeString ? new Date(dateTimeString) : new Date();
144
- const formattedDateTime = dateObject.toISOString().slice(0, 19).replace('T', ' ');
145
- return formattedDateTime;
152
+ const dateTimeString = sendTime ? sendTime.date + ' ' + sendTime.time : undefined;
153
+ const dateObject = dateTimeString ? new Date(dateTimeString) : new Date();
154
+ const formattedDateTime = dateObject.toISOString().slice(0, 19).replace('T', ' ');
155
+ return formattedDateTime;
146
156
  }
147
157
 
148
158
  function chunkArray(array: any, groupSize: number) {
149
- const result = [];
150
- for (let i = 0; i < array.length; i += groupSize) {
151
- result.push(array.slice(i, i + groupSize));
152
- }
153
- return result;
159
+ const result = [];
160
+ for (let i = 0; i < array.length; i += groupSize) {
161
+ result.push(array.slice(i, i + groupSize));
162
+ }
163
+ return result;
154
164
  }
155
165
 
156
166
  function isLater(dateTimeObj: { date: string; time: string }) {
157
- const currentDateTime = new Date();
158
- const { date, time } = dateTimeObj;
159
- const dateTimeString = `${date}T${time}:00`;
160
- const providedDateTime = new Date(dateTimeString);
161
- return currentDateTime > providedDateTime;
167
+ const currentDateTime = new Date();
168
+ const { date, time } = dateTimeObj;
169
+ const dateTimeString = `${date}T${time}:00`;
170
+ const providedDateTime = new Date(dateTimeString);
171
+ return currentDateTime > providedDateTime;
162
172
  }
@@ -135,7 +135,8 @@ class Shopping {
135
135
  updated_time_desc: `ORDER BY updated_time DESC`,
136
136
  updated_time_asc: `ORDER BY updated_time ASC`,
137
137
  sales_desc: `ORDER BY content->>'$.total_sales' DESC , id DESC`,
138
- default: `ORDER BY content->>'$.sort_weight' DESC , id DESC`,
138
+ sort_weight: `ORDER BY content->>'$.sort_weight' DESC , id DESC`,
139
+ default: query.is_manger ? `ORDER BY id DESC` : `ORDER BY content->>'$.sort_weight' DESC , id DESC`,
139
140
  stock_desc: '',
140
141
  stock_asc: '',
141
142
  };
@@ -424,7 +425,7 @@ class Shopping {
424
425
  })
425
426
  .map((product) => {
426
427
  var _a;
427
- product.content.designated_logistics = (_a = product.content.designated_logistics) !== null && _a !== void 0 ? _a : { list: [], type: "all" };
428
+ product.content.designated_logistics = (_a = product.content.designated_logistics) !== null && _a !== void 0 ? _a : { list: [], type: 'all' };
428
429
  product.content.collection = Array.from(new Set((() => {
429
430
  var _a;
430
431
  return ((_a = product.content.collection) !== null && _a !== void 0 ? _a : []).map((dd) => {
@@ -1454,11 +1455,11 @@ class Shopping {
1454
1455
  const paymentService = new payment_service_js_1.PaymentService(allPaymentStrategies, appName, carData.customer_info.payment_select);
1455
1456
  try {
1456
1457
  const paymentResult = await paymentService.processPayment(carData, return_url, carData.customer_info.payment_select);
1457
- console.log("Controller 收到 Payment Result:", paymentResult);
1458
+ console.log('Controller 收到 Payment Result:', paymentResult);
1458
1459
  return paymentResult;
1459
1460
  }
1460
1461
  catch (error) {
1461
- console.error("Controller 捕獲到錯誤:", error);
1462
+ console.error('Controller 捕獲到錯誤:', error);
1462
1463
  }
1463
1464
  }
1464
1465
  }