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.
- package/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/cms-plugin/filter-options.js +1 -0
- package/lowcode/cms-plugin/filter-options.ts +1 -0
- package/lowcode/cms-plugin/pos-pages/pos-summary.js +4 -4
- package/lowcode/cms-plugin/pos-pages/pos-summary.ts +4 -1
- package/lowcode/cms-plugin/shopping-order-manager.js +10 -7
- package/lowcode/cms-plugin/shopping-order-manager.ts +10 -7
- package/lowcode/cms-plugin/shopping-product-setting.js +9 -6
- package/lowcode/cms-plugin/shopping-product-setting.ts +13 -6
- package/lowcode/cms-plugin/shopping-setting-basic.js +411 -405
- package/lowcode/cms-plugin/shopping-setting-basic.ts +497 -486
- package/package.json +1 -1
- package/src/api-public/controllers/shop.js +4 -4
- package/src/api-public/controllers/shop.js.map +1 -1
- package/src/api-public/controllers/shop.ts +10 -12
- package/src/api-public/services/checkout-event.js +17 -7
- package/src/api-public/services/checkout-event.js.map +1 -1
- package/src/api-public/services/financial-serviceV2.js +17 -7
- package/src/api-public/services/financial-serviceV2.js.map +1 -1
- package/src/api-public/services/mail.js +3 -3
- package/src/api-public/services/mail.js.map +1 -1
- package/src/api-public/services/mail.ts +144 -134
- package/src/api-public/services/shopping.js +5 -4
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +15 -14
- package/src/api-public/services/user.js +17 -7
- package/src/api-public/services/user.js.map +1 -1
- package/src/index.js +17 -7
- package/src/index.js.map +1 -1
- package/src/services/app.js +17 -7
- package/src/services/app.js.map +1 -1
- package/src/services/ses.js.map +1 -1
- 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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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:
|
|
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(
|
|
1458
|
+
console.log('Controller 收到 Payment Result:', paymentResult);
|
|
1458
1459
|
return paymentResult;
|
|
1459
1460
|
}
|
|
1460
1461
|
catch (error) {
|
|
1461
|
-
console.error(
|
|
1462
|
+
console.error('Controller 捕獲到錯誤:', error);
|
|
1462
1463
|
}
|
|
1463
1464
|
}
|
|
1464
1465
|
}
|