q-koa 12.7.1 → 12.8.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.
|
@@ -73,27 +73,23 @@ exports.upload = async (ctx) => {
|
|
|
73
73
|
return ctx.SUCCESS(responseData)
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
exports.oss_upload = async (ctx) => {
|
|
76
|
+
exports.oss_upload = async (ctx, _data) => {
|
|
77
77
|
const { app } = getAppByCtx(ctx)
|
|
78
78
|
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
if (!_data) {
|
|
80
|
+
if (
|
|
81
|
+
!(ctx.request.files && ctx.request.files.file) &&
|
|
82
|
+
!(ctx.request.body.url && ctx.request.body.filename)
|
|
83
|
+
) {
|
|
84
|
+
ctx.status = 500
|
|
85
|
+
ctx.ERROR('请选择上传文件')
|
|
86
|
+
}
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
const appConfig = getConfig(app)
|
|
88
90
|
|
|
89
|
-
const {
|
|
90
|
-
|
|
91
|
-
accessKeySecret,
|
|
92
|
-
bucket,
|
|
93
|
-
region,
|
|
94
|
-
cdn_host,
|
|
95
|
-
oss_host,
|
|
96
|
-
} = await appConfig.getObject('oss')
|
|
91
|
+
const { accessKeyId, accessKeySecret, bucket, region, cdn_host, oss_host } =
|
|
92
|
+
await appConfig.getObject('oss')
|
|
97
93
|
|
|
98
94
|
if (!(accessKeyId && accessKeySecret && bucket && region)) {
|
|
99
95
|
throw new Error('没有配置oss设置')
|
|
@@ -108,6 +104,7 @@ exports.oss_upload = async (ctx) => {
|
|
|
108
104
|
})
|
|
109
105
|
let fileName
|
|
110
106
|
let imageData
|
|
107
|
+
|
|
111
108
|
if (ctx.request.files && ctx.request.files.file) {
|
|
112
109
|
const { file } = ctx.request.files
|
|
113
110
|
fileName = `${String(
|
|
@@ -115,32 +112,45 @@ exports.oss_upload = async (ctx) => {
|
|
|
115
112
|
)}.${file.name.split('.')[file.name.split('.').length - 1]}`
|
|
116
113
|
imageData = file.path
|
|
117
114
|
} else {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
115
|
+
if (_data) {
|
|
116
|
+
fileName = _data.fileName
|
|
117
|
+
imageData = _data.buffer
|
|
118
|
+
} else {
|
|
119
|
+
const { url: imageUrl, filename: imageFileName } = ctx.request.body
|
|
120
|
+
fileName = imageFileName
|
|
121
|
+
const formatUrl = imageUrl.startsWith('//')
|
|
122
|
+
? 'http:' + imageUrl
|
|
123
|
+
: imageUrl
|
|
124
|
+
try {
|
|
125
|
+
imageData = await axios
|
|
126
|
+
.get(formatUrl, {
|
|
127
|
+
responseType: 'arraybuffer',
|
|
128
|
+
})
|
|
129
|
+
.then((res) => res.data)
|
|
130
|
+
} catch (e) {
|
|
131
|
+
ctx.status = 500
|
|
132
|
+
ctx.ERROR('请求图片错误')
|
|
133
|
+
}
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
136
|
const result = await client.put(fileName, imageData)
|
|
133
137
|
if (result.res && result.res.status === 200) {
|
|
134
138
|
if (oss_host && cdn_host) {
|
|
135
139
|
const url = result.url.replace(oss_host, cdn_host)
|
|
136
|
-
|
|
140
|
+
ctx.SUCCESS({
|
|
137
141
|
url,
|
|
138
142
|
})
|
|
143
|
+
return {
|
|
144
|
+
url,
|
|
145
|
+
}
|
|
139
146
|
} else {
|
|
140
147
|
const url = result.url
|
|
141
|
-
|
|
148
|
+
ctx.SUCCESS({
|
|
142
149
|
url,
|
|
143
150
|
})
|
|
151
|
+
return {
|
|
152
|
+
url,
|
|
153
|
+
}
|
|
144
154
|
}
|
|
145
155
|
} else {
|
|
146
156
|
throw new Error(result.res.statusMessage)
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
const axios = require('axios')
|
|
2
|
+
const XLSX = require('xlsx')
|
|
3
|
+
const moment = require('moment')
|
|
4
|
+
|
|
2
5
|
exports.gpt = async ({ content }) => {
|
|
3
6
|
let result = ''
|
|
4
7
|
let messages = [
|
|
@@ -35,3 +38,17 @@ exports.gpt = async ({ content }) => {
|
|
|
35
38
|
|
|
36
39
|
return result
|
|
37
40
|
}
|
|
41
|
+
|
|
42
|
+
exports.formatXLSX = ({ header, data, fileName: _fileName }) => {
|
|
43
|
+
const fileName = `${_fileName || moment().format('YYYYMMDDHHmmss') + ''}.xlsx`
|
|
44
|
+
const workbook = XLSX.utils.book_new()
|
|
45
|
+
const worksheetData = [header, ...data]
|
|
46
|
+
const worksheet = XLSX.utils.aoa_to_sheet(worksheetData)
|
|
47
|
+
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
|
|
48
|
+
const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' })
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
fileName,
|
|
52
|
+
buffer,
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -338,11 +338,14 @@ exports.mp_login = async (ctx) => {
|
|
|
338
338
|
|
|
339
339
|
let uid
|
|
340
340
|
if (openIdUser) {
|
|
341
|
-
await app.model.mp_user.update(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
341
|
+
await app.model.mp_user.update(
|
|
342
|
+
lodash.omit(post, openIdUser.user_id ? ['user_id'] : []),
|
|
343
|
+
{
|
|
344
|
+
where: {
|
|
345
|
+
openid: post.openid,
|
|
346
|
+
},
|
|
347
|
+
}
|
|
348
|
+
)
|
|
346
349
|
if (app.attributes.user.mp_openid) {
|
|
347
350
|
app.model.user.update(
|
|
348
351
|
{
|
|
@@ -1215,6 +1218,21 @@ exports.url_link = async (ctx) => {
|
|
|
1215
1218
|
ctx.SUCCESS(result)
|
|
1216
1219
|
}
|
|
1217
1220
|
|
|
1221
|
+
exports.short_link = async (ctx) => {
|
|
1222
|
+
const { app } = getAppByCtx(ctx)
|
|
1223
|
+
|
|
1224
|
+
const { page, scene, title, config = 'weixin_mp' } = ctx.request.body
|
|
1225
|
+
if (!app.service.weixin) throw new Error(`weixin可能没有service.js`)
|
|
1226
|
+
const result = await app.service.weixin.short_link({
|
|
1227
|
+
app,
|
|
1228
|
+
page,
|
|
1229
|
+
scene,
|
|
1230
|
+
title,
|
|
1231
|
+
config,
|
|
1232
|
+
})
|
|
1233
|
+
ctx.SUCCESS(result)
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1218
1236
|
exports.url_scheme = async (ctx) => {
|
|
1219
1237
|
const { app } = getAppByCtx(ctx)
|
|
1220
1238
|
|
|
@@ -103,7 +103,6 @@ exports.refund = async ({
|
|
|
103
103
|
}/${appName}/weixin/refund_notify/${pay_config}`,
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
console.log(data)
|
|
107
106
|
const { result_code, err_code_des, ...restData } = isPem
|
|
108
107
|
? await wxpay.refund(data)
|
|
109
108
|
: await payObj.refund(data)
|
|
@@ -198,7 +197,6 @@ exports.refundOnly = async ({
|
|
|
198
197
|
out_refund_no,
|
|
199
198
|
}
|
|
200
199
|
|
|
201
|
-
console.log(data)
|
|
202
200
|
const { result_code, err_code_des, ...restData } = (await isPem)
|
|
203
201
|
? await wxpay.refund(data)
|
|
204
202
|
: await payObj.refund(data)
|
|
@@ -452,6 +450,28 @@ exports.url_link = async ({ app, page, scene, config = 'weixin_mp' }) => {
|
|
|
452
450
|
return result
|
|
453
451
|
}
|
|
454
452
|
|
|
453
|
+
exports.short_link = async ({
|
|
454
|
+
app,
|
|
455
|
+
page,
|
|
456
|
+
scene,
|
|
457
|
+
title,
|
|
458
|
+
config = 'weixin_mp',
|
|
459
|
+
}) => {
|
|
460
|
+
const appConfig = getConfig(app)
|
|
461
|
+
const { app_id, app_secrect } = await appConfig.getObject(config)
|
|
462
|
+
const weixinMp = new WeixinMp({
|
|
463
|
+
appid: app_id,
|
|
464
|
+
secrect: app_secrect,
|
|
465
|
+
})
|
|
466
|
+
weixinMp.init()
|
|
467
|
+
const result = await weixinMp.createShortLink({
|
|
468
|
+
page,
|
|
469
|
+
scene,
|
|
470
|
+
title,
|
|
471
|
+
})
|
|
472
|
+
return result
|
|
473
|
+
}
|
|
474
|
+
|
|
455
475
|
exports.user_enter_tempsession = async ({ app, result }) => {
|
|
456
476
|
console.log('user_enter_tempsession', result)
|
|
457
477
|
}
|
|
@@ -12,6 +12,8 @@ const createUrlschemeUrl =
|
|
|
12
12
|
'https://api.weixin.qq.com/wxa/generatescheme?access_token=%s'
|
|
13
13
|
const createUrlLinkUrl =
|
|
14
14
|
'https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s'
|
|
15
|
+
const createShortLinkUrl =
|
|
16
|
+
'https://api.weixin.qq.com/wxa/genwxashortlink?access_token=%s'
|
|
15
17
|
const sendMessageUrl =
|
|
16
18
|
'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=%s'
|
|
17
19
|
const handleMessageUrl =
|
|
@@ -367,6 +369,34 @@ module.exports = class Singleton {
|
|
|
367
369
|
return result.url_link
|
|
368
370
|
}
|
|
369
371
|
|
|
372
|
+
async createShortLink(options) {
|
|
373
|
+
const { page, scene, ...rest } = options
|
|
374
|
+
const access_token = await this.getAccessToken()
|
|
375
|
+
const url = util.format(createShortLinkUrl, access_token)
|
|
376
|
+
const query = options.scene
|
|
377
|
+
? Object.keys(options.scene)
|
|
378
|
+
.map((item) => `${item}=${options.scene[item]}`)
|
|
379
|
+
.join('&')
|
|
380
|
+
: ''
|
|
381
|
+
const payLoad = {
|
|
382
|
+
...rest,
|
|
383
|
+
page_url: options.page + (query ? '?' + query : ''),
|
|
384
|
+
page_title: options.title,
|
|
385
|
+
is_permanent: true,
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const result = await axios.post(url, payLoad).then((res) => res.data)
|
|
389
|
+
|
|
390
|
+
if (result.errcode) {
|
|
391
|
+
if (result.errcode === 40001) {
|
|
392
|
+
cache.reset()
|
|
393
|
+
return await this.createShortLink(options)
|
|
394
|
+
}
|
|
395
|
+
throw new Error(`${result.errcode};${result.errmsg}`)
|
|
396
|
+
}
|
|
397
|
+
return result.link
|
|
398
|
+
}
|
|
399
|
+
|
|
370
400
|
async createUrlscheme(options) {
|
|
371
401
|
const { page, scene, ...rest } = options
|
|
372
402
|
const access_token = await this.getAccessToken()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "q-koa",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.8.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -59,7 +59,8 @@
|
|
|
59
59
|
"sha1": "^1.1.1",
|
|
60
60
|
"redis": "^4.0.3",
|
|
61
61
|
"yly-nodejs-sdk": "^1.0.2",
|
|
62
|
-
"vm2": "^3.9.19"
|
|
62
|
+
"vm2": "^3.9.19",
|
|
63
|
+
"xlsx": "^0.18.5"
|
|
63
64
|
},
|
|
64
65
|
"devDependencies": {
|
|
65
66
|
"eslint": "^4.19.1",
|