@zfqh/uniapp 0.3.21 → 0.3.23
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/README.md +0 -1
- package/docs/api/apis/core.md +2 -79
- package/docs/api/apis/index.md +1 -10
- package/docs/api/configs/index.md +8 -6
- package/docs/api/configs/upload.md +48 -39
- package/docs/api/index.md +4 -16
- package/docs/api/utils/cos.md +55 -42
- package/docs/guide/getting-started.md +7 -5
- package/docs/guide/project-frame.md +7 -5
- package/lib/apis/core.d.ts +0 -6
- package/lib/apis/core.js +0 -6
- package/lib/configs/upload.d.ts +2 -2
- package/lib/configs/upload.js +2 -14
- package/lib/utils/cos.d.ts +1 -1
- package/lib/utils/cos.js +182 -67
- package/lib/utils/locale.d.ts +1 -1
- package/lib/utils/locale.js +2 -2
- package/package.json +4 -5
- package/CHANGELOG.md +0 -584
- package/LICENSE +0 -21
package/README.md
CHANGED
package/docs/api/apis/core.md
CHANGED
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| 方法 | HTTP | 路径 | 说明 |
|
|
6
6
|
| --- | --- | --- | --- |
|
|
7
|
-
| `sendSmsCode` | `POST` | `/admin-api/system/auth/send-checkCode` | 发送短信验证码。 |
|
|
8
|
-
| `getTencentToken` | `GET` | `/app-api/infra/file/getTencentToken` | 获取腾讯上传临时 Token。 |
|
|
9
7
|
| `getLastVersion` | `POST` | `/app-api/system/app/version/get-last-version-v2` | 获取最新版本。 |
|
|
10
|
-
| `getCosUrls` | `POST` | `/app-api/infra/cos/getUrls` | 获取 COS 签名后的地址。 |
|
|
11
8
|
| `postRefreshToken` | `POST` | `/app-api/robot/store/auth/refreshToken?refreshToken=:refreshToken` | 刷新 token。 |
|
|
12
9
|
| `getDictData` | `GET` | `/app-api/system/dict-data/type` | 获取字典数据。 |
|
|
13
10
|
| `getAppData` | `GET` | `/admin-api/robot/authority/queryAppDetail` | 获取应用详情(未登录)。 |
|
|
@@ -16,19 +13,10 @@
|
|
|
16
13
|
|
|
17
14
|
## 基本使用
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
字典下拉、版本检查与 token 刷新都可以直接复用公共接口。
|
|
20
17
|
|
|
21
18
|
```ts
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
export async function loadUploadToken() {
|
|
25
|
-
const { data } = await getTencentToken();
|
|
26
|
-
return {
|
|
27
|
-
secret_id: data.tmpSecretId,
|
|
28
|
-
secret_key: data.tmpSecretKey,
|
|
29
|
-
session_token: data.sessionToken,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
19
|
+
import { postRefreshToken, getDictData, getLastVersion } from '@zfqh/uniapp/lib/apis';
|
|
32
20
|
|
|
33
21
|
export const getCardTypeOptions = () => getDictData({ type: 'system_user_id_type' });
|
|
34
22
|
|
|
@@ -39,49 +27,6 @@ export const checkAppVersion = () => getLastVersion({ appCode: 'merchant' });
|
|
|
39
27
|
|
|
40
28
|
## 接口用法
|
|
41
29
|
|
|
42
|
-
### sendSmsCode
|
|
43
|
-
|
|
44
|
-
发送短信验证码。
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import { sendSmsCode } from '@zfqh/uniapp/lib/apis';
|
|
48
|
-
|
|
49
|
-
await sendSmsCode({
|
|
50
|
-
phone: '13800138000',
|
|
51
|
-
});
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
55
|
-
| --- | --- | --- | --- |
|
|
56
|
-
| `data` | `Record<string, any>` | 是 | 请求体。常用字段为手机号,例如 `phone` 或后端约定的手机号字段。 |
|
|
57
|
-
|
|
58
|
-
| 返回值 | 说明 |
|
|
59
|
-
| --- | --- |
|
|
60
|
-
| `Promise<ApiResponse>` | 成功时 resolve 后端响应对象;失败、非 `code == 0` 或网络异常时 reject 统一错误响应。 |
|
|
61
|
-
|
|
62
|
-
### getTencentToken
|
|
63
|
-
|
|
64
|
-
获取腾讯云上传临时 Token,常用于 COS 直传。
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
import { getTencentToken } from '@zfqh/uniapp/lib/apis';
|
|
68
|
-
|
|
69
|
-
const { data } = await getTencentToken();
|
|
70
|
-
const credentials = {
|
|
71
|
-
secretId: data.tmpSecretId,
|
|
72
|
-
secretKey: data.tmpSecretKey,
|
|
73
|
-
sessionToken: data.sessionToken,
|
|
74
|
-
};
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
78
|
-
| --- | --- | --- | --- |
|
|
79
|
-
| `data` | `Record<string, any>` | 否 | 查询参数;通常不需要传。 |
|
|
80
|
-
|
|
81
|
-
| 返回值 | 说明 |
|
|
82
|
-
| --- | --- |
|
|
83
|
-
| `Promise<ApiResponse<TencentToken>>` | 成功时 `data` 为后端返回的临时密钥信息。 |
|
|
84
|
-
|
|
85
30
|
### getLastVersion
|
|
86
31
|
|
|
87
32
|
获取 App 最新版本信息,常用于更新弹窗。
|
|
@@ -109,28 +54,6 @@ const { data } = await getLastVersion({
|
|
|
109
54
|
| --- | --- |
|
|
110
55
|
| `Promise<ApiResponse<AppVersion>>` | 成功时 `data` 为版本信息,例如版本号、状态、整包地址、热更新地址等后端字段。 |
|
|
111
56
|
|
|
112
|
-
### getCosUrls
|
|
113
|
-
|
|
114
|
-
获取 COS 私有资源签名访问地址。
|
|
115
|
-
|
|
116
|
-
```ts
|
|
117
|
-
import { getCosUrls } from '@zfqh/uniapp/lib/apis';
|
|
118
|
-
|
|
119
|
-
const { data: urls } = await getCosUrls({
|
|
120
|
-
urls: ['/report/2026/05/demo.pdf'],
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
const firstUrl = urls[0];
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
127
|
-
| --- | --- | --- | --- |
|
|
128
|
-
| `data.urls` | `string[]` | 是 | 需要签名的 COS 路径数组,通常传去掉域名后的路径。 |
|
|
129
|
-
|
|
130
|
-
| 返回值 | 说明 |
|
|
131
|
-
| --- | --- |
|
|
132
|
-
| `Promise<ApiResponse<string[]>>` | 成功时 `data` 为签名后的 URL 数组。 |
|
|
133
|
-
|
|
134
57
|
### postRefreshToken
|
|
135
58
|
|
|
136
59
|
刷新登录 token。
|
package/docs/api/apis/index.md
CHANGED
|
@@ -20,7 +20,7 @@ export const getReportByNo = (no: string) => GET('/app-api/constitution/new/getR
|
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
22
|
import request, { GET, POST, PUT, DELETE } from '@zfqh/uniapp/lib/apis/request';
|
|
23
|
-
import {
|
|
23
|
+
import { getDictData } from '@zfqh/uniapp/lib/apis/core';
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## 调用契约
|
|
@@ -54,10 +54,7 @@ export const removeItem = (id: number) => DELETE('/app-api/demo/delete?id=:id',
|
|
|
54
54
|
|
|
55
55
|
| 接口 | 参数 | 返回值 | 说明 |
|
|
56
56
|
| --- | --- | --- | --- |
|
|
57
|
-
| `sendSmsCode(data)` | `data: Record<string, any>` | `Promise<ApiResponse>` | 发送短信验证码。 |
|
|
58
|
-
| `getTencentToken(data?)` | `data?: Record<string, any>` | `Promise<ApiResponse<TencentToken>>` | 获取腾讯云上传临时 Token。 |
|
|
59
57
|
| `getLastVersion(data?)` | `data?: Record<string, any>` | `Promise<ApiResponse<AppVersion>>` | 获取最新版本。 |
|
|
60
|
-
| `getCosUrls(data)` | `data: { urls: string[] }` | `Promise<ApiResponse<string[]>>` | 获取 COS 签名后的访问地址。 |
|
|
61
58
|
| `postRefreshToken(data)` | `data: { refreshToken: string }` | `Promise<ApiResponse<LoginToken>>` | 刷新登录 token。 |
|
|
62
59
|
| `getDictData(data)` | `data: { type: string }` | `Promise<ApiResponse<DictItem[]>>` | 按字典类型获取字典数据。 |
|
|
63
60
|
| `getAppData(data)` | `data: { appId: string }` | `Promise<ApiResponse<AppDetail>>` | 获取应用详情(未登录)。 |
|
|
@@ -65,20 +62,14 @@ export const removeItem = (id: number) => DELETE('/app-api/demo/delete?id=:id',
|
|
|
65
62
|
|
|
66
63
|
```ts
|
|
67
64
|
import {
|
|
68
|
-
sendSmsCode,
|
|
69
|
-
getTencentToken,
|
|
70
65
|
getLastVersion,
|
|
71
|
-
getCosUrls,
|
|
72
66
|
postRefreshToken,
|
|
73
67
|
getDictData,
|
|
74
68
|
getAppData,
|
|
75
69
|
getAppByUser,
|
|
76
70
|
} from '@zfqh/uniapp/lib/apis';
|
|
77
71
|
|
|
78
|
-
await sendSmsCode({ phone: '13800138000' });
|
|
79
|
-
await getTencentToken();
|
|
80
72
|
await getLastVersion({ version: '1.0.0', packageName: 'uni.UNI07DD08D', type: 2, platform: 1 });
|
|
81
|
-
await getCosUrls({ urls: ['/report/demo.pdf'] });
|
|
82
73
|
await postRefreshToken({ refreshToken: 'refresh-token' });
|
|
83
74
|
await getDictData({ type: 'group_relation' });
|
|
84
75
|
await getAppData({ appId: 'com.qihuangai.patient' });
|
|
@@ -259,15 +259,16 @@ defineConfig({
|
|
|
259
259
|
|
|
260
260
|
## upload
|
|
261
261
|
|
|
262
|
-
COS 上传依赖 `upload.request`
|
|
262
|
+
COS 上传依赖 `upload.request` 获取临时凭证,该请求由业务实现(包内不再内置凭证接口):
|
|
263
263
|
|
|
264
264
|
```ts
|
|
265
|
-
import {
|
|
265
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
266
266
|
|
|
267
267
|
defineConfig({
|
|
268
268
|
upload: {
|
|
269
269
|
async request() {
|
|
270
|
-
|
|
270
|
+
// 替换为业务后端临时凭证接口
|
|
271
|
+
const { data } = await GET('/api/upload-token');
|
|
271
272
|
return {
|
|
272
273
|
secret_id: data.tmpSecretId,
|
|
273
274
|
secret_key: data.tmpSecretKey,
|
|
@@ -285,12 +286,13 @@ defineConfig({
|
|
|
285
286
|
如果业务需要腾讯云全球加速,可以按项目状态动态改写 `region`:
|
|
286
287
|
|
|
287
288
|
```ts
|
|
288
|
-
import {
|
|
289
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
289
290
|
|
|
290
291
|
defineConfig({
|
|
291
292
|
upload: {
|
|
292
293
|
async request() {
|
|
293
|
-
|
|
294
|
+
// 替换为业务后端临时凭证接口
|
|
295
|
+
const { data } = await GET('/api/upload-token');
|
|
294
296
|
return {
|
|
295
297
|
secret_id: data.tmpSecretId,
|
|
296
298
|
secret_key: data.tmpSecretKey,
|
|
@@ -305,7 +307,7 @@ defineConfig({
|
|
|
305
307
|
});
|
|
306
308
|
```
|
|
307
309
|
|
|
308
|
-
`
|
|
310
|
+
`upload.request` 必须由业务实现并返回下方字段;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
|
|
309
311
|
|
|
310
312
|
返回数据需要包含:
|
|
311
313
|
|
|
@@ -1,39 +1,48 @@
|
|
|
1
|
-
# upload
|
|
2
|
-
|
|
3
|
-
上传配置。发布路径:`@zfqh/uniapp/lib/configs/upload`
|
|
4
|
-
|
|
5
|
-
| 字段 | 类型 | 默认值 | 说明 |
|
|
6
|
-
| --- | --- | --- | --- |
|
|
7
|
-
| `request(params)` | `function` |
|
|
8
|
-
|
|
9
|
-
COS
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```ts
|
|
28
|
-
import { defineConfig } from '@zfqh/uniapp';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
1
|
+
# upload
|
|
2
|
+
|
|
3
|
+
上传配置。发布路径:`@zfqh/uniapp/lib/configs/upload`
|
|
4
|
+
|
|
5
|
+
| 字段 | 类型 | 默认值 | 说明 |
|
|
6
|
+
| --- | --- | --- | --- |
|
|
7
|
+
| `request(params)` | `function` | 无(未配置时调用会抛错) | 获取上传凭证;COS 上传会以 { mode: "cos" } 调用。 |
|
|
8
|
+
|
|
9
|
+
包内不再内置凭证接口,使用 COS 上传前必须由业务配置 `request`。
|
|
10
|
+
|
|
11
|
+
COS 上传需要 `request` 返回:
|
|
12
|
+
|
|
13
|
+
| 字段 | 说明 |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| `secret_id` | 腾讯云临时密钥 ID,常由后端 `tmpSecretId` 映射而来。 |
|
|
16
|
+
| `secret_key` | 腾讯云临时密钥 Key,常由后端 `tmpSecretKey` 映射而来。 |
|
|
17
|
+
| `session_token` | 临时 token,常由后端 `sessionToken` 映射而来。 |
|
|
18
|
+
| `create_time` | 临时密钥创建时间,常由后端 `createTime` 映射而来。 |
|
|
19
|
+
| `expire_time` | 临时密钥过期时间,常由后端 `expirationTime` 映射而来。 |
|
|
20
|
+
| `bucket` | COS bucket。 |
|
|
21
|
+
| `region` | COS region;如启用全球加速可传 `accelerate`。 |
|
|
22
|
+
|
|
23
|
+
## 基本使用
|
|
24
|
+
|
|
25
|
+
在 `defineConfig` 中配置 `upload.request`,把业务后端返回的临时凭证映射成上表字段(示例接口 `/api/upload-token` 仅为占位,请替换为实际后端地址):
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { defineConfig } from '@zfqh/uniapp';
|
|
29
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
30
|
+
|
|
31
|
+
defineConfig({
|
|
32
|
+
upload: {
|
|
33
|
+
async request() {
|
|
34
|
+
// 替换为你的后端临时凭证接口
|
|
35
|
+
const { data } = await GET('/api/upload-token');
|
|
36
|
+
return {
|
|
37
|
+
secret_id: data.tmpSecretId,
|
|
38
|
+
secret_key: data.tmpSecretKey,
|
|
39
|
+
session_token: data.sessionToken,
|
|
40
|
+
create_time: data.createTime,
|
|
41
|
+
expire_time: data.expirationTime,
|
|
42
|
+
bucket: data.bucket,
|
|
43
|
+
region: data.region, // 启用全球加速时可传 'accelerate'
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
```
|
package/docs/api/index.md
CHANGED
|
@@ -114,7 +114,7 @@ import {
|
|
|
114
114
|
`@zfqh/uniapp/lib/apis` 当前提供单独的聚合入口,可用于引入业务请求方法和公共接口:
|
|
115
115
|
|
|
116
116
|
```ts
|
|
117
|
-
import { GET, POST
|
|
117
|
+
import { GET, POST } from '@zfqh/uniapp/lib/apis';
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
---
|
|
@@ -128,14 +128,14 @@ import { GET, POST, getTencentToken } from '@zfqh/uniapp/lib/apis';
|
|
|
128
128
|
当前 API 聚合入口位于 `lib/apis`,由 `@zfqh/uniapp/lib/apis` 导出 `request` 和 `core`:
|
|
129
129
|
|
|
130
130
|
```ts
|
|
131
|
-
import { GET, POST, PUT, DELETE,
|
|
131
|
+
import { GET, POST, PUT, DELETE, getLastVersion, getDictData, getAppData, getAppByUser } from '@zfqh/uniapp/lib/apis';
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
也可以按文件深度引用:
|
|
135
135
|
|
|
136
136
|
```ts
|
|
137
137
|
import request, { GET, POST, PUT, DELETE } from '@zfqh/uniapp/lib/apis/request';
|
|
138
|
-
import {
|
|
138
|
+
import { getDictData, getAppData, getAppByUser, postRefreshToken } from '@zfqh/uniapp/lib/apis/core';
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
已有 API 文件:
|
|
@@ -144,40 +144,28 @@ import { getTencentToken, getCosUrls, getDictData, getAppData, getAppByUser, sen
|
|
|
144
144
|
| --- | --- |
|
|
145
145
|
| `apis/index` | 聚合导出 `request` 和 `core`。 |
|
|
146
146
|
| `apis/request` | 业务请求实例和 `GET/POST/PUT/DELETE`。 |
|
|
147
|
-
| `apis/core` |
|
|
147
|
+
| `apis/core` | 版本、刷新 token、字典数据、应用详情等公共接口。 |
|
|
148
148
|
|
|
149
149
|
### 内置 API 函数示例
|
|
150
150
|
|
|
151
151
|
```ts
|
|
152
152
|
import {
|
|
153
153
|
GET, POST,
|
|
154
|
-
getTencentToken,
|
|
155
154
|
getLastVersion,
|
|
156
155
|
getDictData,
|
|
157
156
|
getAppData,
|
|
158
|
-
getCosUrls,
|
|
159
|
-
sendSmsCode,
|
|
160
157
|
postRefreshToken,
|
|
161
158
|
} from '@zfqh/uniapp/lib/apis';
|
|
162
159
|
|
|
163
160
|
// 获取字典数据
|
|
164
161
|
const dict = await getDictData({ type: 'order_status' });
|
|
165
162
|
|
|
166
|
-
// 获取 COS 上传临时密钥
|
|
167
|
-
const token = await getTencentToken();
|
|
168
|
-
|
|
169
163
|
// 获取最新版本
|
|
170
164
|
const version = await getLastVersion({ platform: 'android' });
|
|
171
165
|
|
|
172
|
-
// 发送短信验证码
|
|
173
|
-
await sendSmsCode({ mobile: '18888888888' });
|
|
174
|
-
|
|
175
166
|
// 刷新 token
|
|
176
167
|
await postRefreshToken({ refreshToken: 'xxx' });
|
|
177
168
|
|
|
178
|
-
// 获取 COS 签名地址
|
|
179
|
-
const urls = await getCosUrls({ keys: ['avatar/1.png'] });
|
|
180
|
-
|
|
181
169
|
// 获取应用详情(未登录)
|
|
182
170
|
const appDetail = await getAppData({ appId: 'com.qihuangai.patient' });
|
|
183
171
|
|
package/docs/api/utils/cos.md
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
## 平台兼容性
|
|
10
10
|
|
|
11
|
-
| App | H5
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| √
|
|
11
|
+
| App | H5 | 微信小程序 | 其他小程序 | WebView |
|
|
12
|
+
| --- | --- | ---------- | --------------- | ------------------------------------------------------------------ |
|
|
13
|
+
| √ | √ | √ | 视平台 API 而定 | 宿主注入 `plus.uploader` 时优先 HTML5+ 上传,否则 `uni.uploadFile` |
|
|
14
14
|
|
|
15
15
|
## 基本使用
|
|
16
16
|
|
|
@@ -38,18 +38,28 @@ const { url } = await cos.uploadFile(file, { key: 'avatar/user-1.png' });
|
|
|
38
38
|
|
|
39
39
|
`uploadFile` 支持多种文件来源:
|
|
40
40
|
|
|
41
|
-
| 来源
|
|
42
|
-
|
|
|
43
|
-
| `uni.chooseImage` 的 `tempFiles` | 直接传入 `res.tempFiles[0]`(推荐)
|
|
44
|
-
| 临时路径对象
|
|
45
|
-
| H5 File 对象
|
|
46
|
-
| 自定义文件名
|
|
41
|
+
| 来源 | 字段 |
|
|
42
|
+
| -------------------------------- | ------------------------------------ |
|
|
43
|
+
| `uni.chooseImage` 的 `tempFiles` | 直接传入 `res.tempFiles[0]`(推荐) |
|
|
44
|
+
| 临时路径对象 | `{ path: '...' }` |
|
|
45
|
+
| H5 File 对象 | 直接传入 File |
|
|
46
|
+
| 自定义文件名 | `{ name: 'photo.jpg', path: '...' }` |
|
|
47
47
|
|
|
48
48
|
未指定 `key` 时会自动生成:`<path><yyyymmdd>/<hhMMss><guid>.<ext>`(`yyyymmdd` 用于按日期分目录,`hhMMss` 便于看出日内上传先后)
|
|
49
49
|
|
|
50
|
+
## 宿主 web-view 内上传
|
|
51
|
+
|
|
52
|
+
H5 页面被宿主 App 的 `web-view` 嵌入时,如果宿主注入了 HTML5+ 能力,`uploadFile` 会自动优先使用 `plus.uploader` 上传本地文件,业务侧调用方式不变:
|
|
53
|
+
|
|
54
|
+
- 触发条件:`IS_WEBVIEW_ENV` 为 true(宿主按仓库既有约定标记 webview 环境),且 `plus.uploader` 可用;
|
|
55
|
+
- 仅 `file.path` 为非空字符串时走 plus;满足条件后固定走 `plus.uploader`,不再回退 `uni.uploadFile`;
|
|
56
|
+
- H5 `File` 对象(无 `path`)仍走 `uni.uploadFile`;`blob:` / `data:` 等 HTML5+ 不可读路径会直接失败(reject `{ msg: 'uploadFile:fail' }`);
|
|
57
|
+
- 普通 H5 浏览器没有 `plus`,不受影响;
|
|
58
|
+
- 走 `plus.uploader` 时,`getTask` 收到的是含 `abort` / `onProgressUpdate` / `offProgressUpdate` 的适配对象(不是原生 `UploadTask`),失败错误带 `code` 字段。
|
|
59
|
+
|
|
50
60
|
## 取消上传
|
|
51
61
|
|
|
52
|
-
传入 `getTask`
|
|
62
|
+
传入 `getTask` 可以拿到上传任务实例,需要时调用 `task.abort()` 取消本次上传:
|
|
53
63
|
|
|
54
64
|
```ts
|
|
55
65
|
import { cos } from '@zfqh/uniapp';
|
|
@@ -85,12 +95,13 @@ cos.uploadFile({
|
|
|
85
95
|
|
|
86
96
|
### 注意事项
|
|
87
97
|
|
|
88
|
-
- `getTask`
|
|
89
|
-
-
|
|
98
|
+
- `getTask` 在**每次**上传调用时都会回调。token 过期(`ExpiredToken`)触发内部重试时会创建新的 task 并再次回调,因此请始终使用**最近一次**回调收到的 task,不要缓存第一次的。
|
|
99
|
+
- H5 宿主 webview 走 `plus.uploader` 时,`getTask` 收到的是含 `abort` / `onProgressUpdate` / `offProgressUpdate` 的适配对象;进度事件结构为 `{ progress, totalBytesSent, totalBytesExpectedToSend }`,Android 未启用分块上传时进度粒度较粗。
|
|
100
|
+
- 取消会让该次上传的 Promise reject,但各端错误文案不一致:H5 为 `uploadFile:fail abort`,App 为 `uploadFile:fail statusCode: 0`(**不含 `abort` 字样**),微信小程序通常为 `uploadFile:fail abort`。H5 宿主 webview 走 `plus.uploader` 时同样 reject `{ msg: 'uploadFile:fail abort' }`。请不要通过匹配错误文案判断是否被取消。
|
|
90
101
|
- App 端调用 `abort()` 后不保证触发 `fail` 回调,Promise 可能一直 pending,取消后的 UI 状态需要业务自行切换。
|
|
91
102
|
- 取消支持的范围为 App / H5 / 微信小程序。支付宝小程序 `my.uploadFile` 的 `abort` 需要传参对象,无参 `abort()` 可能无效。
|
|
92
103
|
- 上传已完成后再调用 `abort()` 是空操作。
|
|
93
|
-
- H5 端请勿调用 `task.onHeadersReceived` / `task.offHeadersReceived`(H5
|
|
104
|
+
- H5 端请勿调用 `task.onHeadersReceived` / `task.offHeadersReceived`(H5 实现为直接抛错);`plus.uploader` 适配对象不提供这两个方法。
|
|
94
105
|
|
|
95
106
|
## 完整上传流程
|
|
96
107
|
|
|
@@ -172,19 +183,19 @@ await checkRefreshToken();
|
|
|
172
183
|
|
|
173
184
|
发布路径:`@zfqh/uniapp/lib/utils/cos`
|
|
174
185
|
|
|
175
|
-
| 名称
|
|
176
|
-
|
|
|
177
|
-
| `checkRefreshToken` | `export async function checkRefreshToken(): Promise<boolean> {`
|
|
178
|
-
| `uploadFile`
|
|
186
|
+
| 名称 | 签名/声明 | 说明 |
|
|
187
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
188
|
+
| `checkRefreshToken` | `export async function checkRefreshToken(): Promise<boolean> {` | 调用 upload.request({ mode: "cos" }) 获取并缓存 COS 临时密钥;1 秒内并发上传复用同一个请求。 |
|
|
189
|
+
| `uploadFile` | `export async function uploadFile(file: any, opts: UploadFileOptions = {}): Promise<{ url: string }> {` | 上传文件到腾讯 COS,自动生成 key、刷新过期 token,并返回 https url。HTTP 非 200 或网络失败时 reject `{ code, msg }`(H5 宿主 webview 走 `plus.uploader` 时 `code` 为 HTTP 状态码,网络失败为 0)。 |
|
|
179
190
|
|
|
180
191
|
`UploadFileOptions` 支持的选项:
|
|
181
192
|
|
|
182
|
-
| 选项
|
|
183
|
-
|
|
|
184
|
-
| `path`
|
|
185
|
-
| `key`
|
|
186
|
-
| `getTask`
|
|
187
|
-
| `cosCompress` | `export function cosCompress(url: string, rule: string, type?: string): string {` | 基于腾讯云 COS `imageMogr2` 拼接图片压缩 URL。`rule` 为尺寸规则(如 `'200x'`、`'200x200'`),`type` 可选 `'cut'`(裁剪)或默认(缩放)。
|
|
193
|
+
| 选项 | 类型 | 说明 |
|
|
194
|
+
| ------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
195
|
+
| `path` | `string` | key 前缀(子目录),如 `'avatar/'`。 |
|
|
196
|
+
| `key` | `string` | 完整 key,传入时忽略自动生成的 key。 |
|
|
197
|
+
| `getTask` | `(task: UniNamespace.UploadTask) => void` | 获取本次上传的任务实例,可用 `task.abort()` 取消。H5 宿主 webview 走 `plus.uploader` 时为含 `abort` / `onProgressUpdate` / `offProgressUpdate` 的适配对象。每次上传尝试(含 token 过期重试)都会回调。 |
|
|
198
|
+
| `cosCompress` | `export function cosCompress(url: string, rule: string, type?: string): string {` | 基于腾讯云 COS `imageMogr2` 拼接图片压缩 URL。`rule` 为尺寸规则(如 `'200x'`、`'200x200'`),`type` 可选 `'cut'`(裁剪)或默认(缩放)。 |
|
|
188
199
|
|
|
189
200
|
`cosCompress` 常用示例:
|
|
190
201
|
|
|
@@ -230,16 +241,17 @@ const { url } = await cos.uploadFile(file, {
|
|
|
230
241
|
config.upload.request({ mode: 'cos' });
|
|
231
242
|
```
|
|
232
243
|
|
|
233
|
-
需要在 `defineConfig`
|
|
244
|
+
需要在 `defineConfig` 中配置(`upload.request` 由业务实现,包内不再内置凭证接口):
|
|
234
245
|
|
|
235
246
|
```ts
|
|
236
247
|
import { defineConfig } from '@zfqh/uniapp';
|
|
237
|
-
import {
|
|
248
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
238
249
|
|
|
239
250
|
defineConfig({
|
|
240
251
|
upload: {
|
|
241
252
|
async request() {
|
|
242
|
-
|
|
253
|
+
// 替换为业务后端临时凭证接口
|
|
254
|
+
const { data } = await GET('/api/upload-token');
|
|
243
255
|
return {
|
|
244
256
|
secret_id: data.tmpSecretId,
|
|
245
257
|
secret_key: data.tmpSecretKey,
|
|
@@ -257,12 +269,13 @@ defineConfig({
|
|
|
257
269
|
门店端如果需要全球加速,可根据业务 store 改写 `region`:
|
|
258
270
|
|
|
259
271
|
```ts
|
|
260
|
-
import {
|
|
272
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
261
273
|
|
|
262
274
|
defineConfig({
|
|
263
275
|
upload: {
|
|
264
276
|
async request() {
|
|
265
|
-
|
|
277
|
+
// 替换为业务后端临时凭证接口
|
|
278
|
+
const { data } = await GET('/api/upload-token');
|
|
266
279
|
return {
|
|
267
280
|
secret_id: data.tmpSecretId,
|
|
268
281
|
secret_key: data.tmpSecretKey,
|
|
@@ -277,28 +290,28 @@ defineConfig({
|
|
|
277
290
|
});
|
|
278
291
|
```
|
|
279
292
|
|
|
280
|
-
`
|
|
293
|
+
`upload.request` 必须由业务实现并映射成下方 COS 字段;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
|
|
281
294
|
|
|
282
295
|
返回字段:
|
|
283
296
|
|
|
284
|
-
| 字段
|
|
285
|
-
|
|
|
286
|
-
| `secret_id`
|
|
287
|
-
| `secret_key`
|
|
288
|
-
| `session_token` | 临时 token。
|
|
289
|
-
| `bucket`
|
|
290
|
-
| `region`
|
|
291
|
-
| `create_time`
|
|
292
|
-
| `expire_time`
|
|
297
|
+
| 字段 | 说明 |
|
|
298
|
+
| --------------- | ---------------- |
|
|
299
|
+
| `secret_id` | 临时密钥 ID。 |
|
|
300
|
+
| `secret_key` | 临时密钥 Key。 |
|
|
301
|
+
| `session_token` | 临时 token。 |
|
|
302
|
+
| `bucket` | COS bucket。 |
|
|
303
|
+
| `region` | COS region。 |
|
|
304
|
+
| `create_time` | 创建时间戳,秒。 |
|
|
305
|
+
| `expire_time` | 过期时间戳,秒。 |
|
|
293
306
|
|
|
294
307
|
## 上传文件对象
|
|
295
308
|
|
|
296
309
|
`uploadFile` 支持:
|
|
297
310
|
|
|
298
|
-
| 来源
|
|
299
|
-
|
|
|
300
|
-
| uni 选择文件 | `file.path`
|
|
301
|
-
| H5 File 对象 | `file`
|
|
311
|
+
| 来源 | 字段 |
|
|
312
|
+
| ------------ | -------------------------- |
|
|
313
|
+
| uni 选择文件 | `file.path` |
|
|
314
|
+
| H5 File 对象 | `file` |
|
|
302
315
|
| 自定义文件名 | `file.name` 用于推断扩展名 |
|
|
303
316
|
|
|
304
317
|
未指定 `key` 时会自动生成:
|
|
@@ -84,7 +84,7 @@ import pages from 'virtual:remove-json-comments@/pages.json';
|
|
|
84
84
|
// #ifndef H5
|
|
85
85
|
import pages from '@/pages.json';
|
|
86
86
|
// #endif
|
|
87
|
-
import {
|
|
87
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
88
88
|
|
|
89
89
|
defineConfig({
|
|
90
90
|
app: {
|
|
@@ -103,7 +103,8 @@ defineConfig({
|
|
|
103
103
|
},
|
|
104
104
|
upload: {
|
|
105
105
|
async request() {
|
|
106
|
-
|
|
106
|
+
// 替换为业务后端临时凭证接口
|
|
107
|
+
const { data } = await GET('/api/upload-token');
|
|
107
108
|
return {
|
|
108
109
|
secret_id: data.tmpSecretId,
|
|
109
110
|
secret_key: data.tmpSecretKey,
|
|
@@ -122,7 +123,7 @@ defineConfig({
|
|
|
122
123
|
|
|
123
124
|
```ts
|
|
124
125
|
import { defineConfig } from '@zfqh/uniapp';
|
|
125
|
-
import {
|
|
126
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
126
127
|
|
|
127
128
|
defineConfig({
|
|
128
129
|
app: {
|
|
@@ -142,7 +143,8 @@ defineConfig({
|
|
|
142
143
|
},
|
|
143
144
|
upload: {
|
|
144
145
|
async request() {
|
|
145
|
-
|
|
146
|
+
// 替换为业务后端临时凭证接口
|
|
147
|
+
const { data } = await GET('/api/upload-token');
|
|
146
148
|
return {
|
|
147
149
|
secret_id: data.tmpSecretId,
|
|
148
150
|
secret_key: data.tmpSecretKey,
|
|
@@ -164,7 +166,7 @@ defineConfig({
|
|
|
164
166
|
- H5 端如果 `pages.json` 带注释,可通过 `virtual:remove-json-comments@/pages.json` 导入;其他端直接导入 `@/pages.json`。
|
|
165
167
|
- `path.index`、`path.login`、`path.webview` 是导航、登录拦截和 webview 承载页的核心别名。
|
|
166
168
|
- `upload.request` 需要把业务接口返回的腾讯云字段映射成 `secret_id`、`secret_key`、`session_token`、`bucket`、`region` 等字段。
|
|
167
|
-
- `
|
|
169
|
+
- 包内不再内置上传凭证接口,`upload.request` 必须由业务实现;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
|
|
168
170
|
|
|
169
171
|
多环境配置建议放到 `env/.env.dev.ts`、`env/.env.prod.ts`,详见 [环境配置](../api/configs/env.md)。
|
|
170
172
|
|
|
@@ -70,7 +70,7 @@ import pages from 'virtual:remove-json-comments@/pages.json';
|
|
|
70
70
|
// #ifndef H5
|
|
71
71
|
import pages from '@/pages.json';
|
|
72
72
|
// #endif
|
|
73
|
-
import {
|
|
73
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
74
74
|
|
|
75
75
|
defineConfig({
|
|
76
76
|
app: {
|
|
@@ -89,7 +89,8 @@ defineConfig({
|
|
|
89
89
|
},
|
|
90
90
|
upload: {
|
|
91
91
|
async request() {
|
|
92
|
-
|
|
92
|
+
// 替换为业务后端临时凭证接口
|
|
93
|
+
const { data } = await GET('/api/upload-token');
|
|
93
94
|
return {
|
|
94
95
|
secret_id: data.tmpSecretId,
|
|
95
96
|
secret_key: data.tmpSecretKey,
|
|
@@ -108,7 +109,7 @@ defineConfig({
|
|
|
108
109
|
|
|
109
110
|
```ts
|
|
110
111
|
import { defineConfig } from '@zfqh/uniapp';
|
|
111
|
-
import {
|
|
112
|
+
import { GET } from '@zfqh/uniapp/lib/apis';
|
|
112
113
|
|
|
113
114
|
defineConfig({
|
|
114
115
|
app: {
|
|
@@ -128,7 +129,8 @@ defineConfig({
|
|
|
128
129
|
},
|
|
129
130
|
upload: {
|
|
130
131
|
async request() {
|
|
131
|
-
|
|
132
|
+
// 替换为业务后端临时凭证接口
|
|
133
|
+
const { data } = await GET('/api/upload-token');
|
|
132
134
|
return {
|
|
133
135
|
secret_id: data.tmpSecretId,
|
|
134
136
|
secret_key: data.tmpSecretKey,
|
|
@@ -149,7 +151,7 @@ defineConfig({
|
|
|
149
151
|
- 推荐用 `createPages(pages)` 从 `pages.json` 自动生成页面集合,减少手写 `needLoginPages`、`tabBarPages` 的维护成本。
|
|
150
152
|
- `path.index`、`path.login`、`path.webview` 分别影响首页、登录拦截和 webview 承载页。
|
|
151
153
|
- `upload.request` 需要把后端字段映射成 COS 上传工具需要的字段名。
|
|
152
|
-
-
|
|
154
|
+
- 包内不再内置上传凭证接口,`upload.request` 必须由业务实现;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
|
|
153
155
|
|
|
154
156
|
## Vite 配置
|
|
155
157
|
|
package/lib/apis/core.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
/** 发送短信验证码 */
|
|
2
|
-
export declare const sendSmsCode: (...args: any[]) => any;
|
|
3
|
-
/** 获取腾讯上传临时Token */
|
|
4
|
-
export declare const getTencentToken: (...args: any[]) => any;
|
|
5
1
|
/** 获取最新版本 */
|
|
6
2
|
export declare const getLastVersion: (...args: any[]) => any;
|
|
7
|
-
/** 获取cos签名后的地址 */
|
|
8
|
-
export declare const getCosUrls: (...args: any[]) => any;
|
|
9
3
|
/** 刷新token */
|
|
10
4
|
export declare const postRefreshToken: (...args: any[]) => any;
|
|
11
5
|
/** 获取字典数据 */
|