@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 CHANGED
@@ -41,4 +41,3 @@ export function createApp() {
41
41
  ## 文档
42
42
 
43
43
  - 完整指南、组件与 API:[docs/index.md](docs/index.md)
44
- - 变更记录:[CHANGELOG.md](CHANGELOG.md)
@@ -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
- 上传配置、字典下拉和 token 刷新都可以直接复用公共接口。
16
+ 字典下拉、版本检查与 token 刷新都可以直接复用公共接口。
20
17
 
21
18
  ```ts
22
- import { getTencentToken, postRefreshToken, getDictData, getLastVersion } from '@zfqh/uniapp/lib/apis';
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。
@@ -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 { getTencentToken, getDictData } from '@zfqh/uniapp/lib/apis/core';
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
265
+ import { GET } from '@zfqh/uniapp/lib/apis';
266
266
 
267
267
  defineConfig({
268
268
  upload: {
269
269
  async request() {
270
- const { data } = await getTencentToken();
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
289
+ import { GET } from '@zfqh/uniapp/lib/apis';
289
290
 
290
291
  defineConfig({
291
292
  upload: {
292
293
  async request() {
293
- const { data } = await getTencentToken();
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
- `getTencentToken` 是 `@zfqh/uniapp/lib/apis` 内置的 COS 临时密钥接口,对应 `/app-api/infra/file/getTencentToken`。如果业务项目使用自己的接口,可替换请求函数,但需要返回下方字段。
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` | 内置调用 `getTencentToken` | 获取上传凭证;COS 上传会以 { mode: "cos" } 调用。 |
8
-
9
- COS 上传需要 `request` 返回:
10
-
11
- | 字段 | 说明 |
12
- | --- | --- |
13
- | `secret_id` | 腾讯云临时密钥 ID,常由后端 `tmpSecretId` 映射而来。 |
14
- | `secret_key` | 腾讯云临时密钥 Key,常由后端 `tmpSecretKey` 映射而来。 |
15
- | `session_token` | 临时 token,常由后端 `sessionToken` 映射而来。 |
16
- | `create_time` | 临时密钥创建时间,常由后端 `createTime` 映射而来。 |
17
- | `expire_time` | 临时密钥过期时间,常由后端 `expirationTime` 映射而来。 |
18
- | `bucket` | COS bucket。 |
19
- | `region` | COS region;如启用全球加速可传 `accelerate`。 |
20
-
21
- ## 基本使用
22
-
23
- 默认已内置调用 `getTencentToken` 获取腾讯云临时密钥,通常无需额外配置。如需启用 COS 全球加速,在 cdn 配置中设置 `isAccelerate: true` 即可。
24
-
25
- 仅当需要完全自定义请求逻辑时才需覆盖 `request`:
26
-
27
- ```ts
28
- import { defineConfig } from '@zfqh/uniapp';
29
-
30
- defineConfig({
31
- upload: {
32
- async request() {
33
- // 自定义上传凭证逻辑
34
- const res = await myCustomApi();
35
- return res;
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, getTencentToken } from '@zfqh/uniapp/lib/apis';
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, getTencentToken, getLastVersion, getDictData, getAppData, getAppByUser } from '@zfqh/uniapp/lib/apis';
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 { getTencentToken, getCosUrls, getDictData, getAppData, getAppByUser, sendSmsCode, postRefreshToken } from '@zfqh/uniapp/lib/apis/core';
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` | 短信验证码、腾讯上传 Token、版本、COS URL、刷新 token、字典数据、应用详情等公共接口。 |
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
 
@@ -8,9 +8,9 @@
8
8
 
9
9
  ## 平台兼容性
10
10
 
11
- | App | H5 | 微信小程序 | 其他小程序 | WebView |
12
- | --- | --- | --- | --- | --- |
13
- | √ | √ | √ | 视平台 API 而定 | 视运行容器而定 |
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
- | 临时路径对象 | `{ path: '...' }` |
45
- | H5 File 对象 | 直接传入 File |
46
- | 自定义文件名 | `{ name: 'photo.jpg', path: '...' }` |
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` 可以拿到 `uni.uploadFile` 返回的 `UploadTask` 实例,需要时调用 `task.abort()` 取消本次上传:
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` 在**每次** `uni.uploadFile` 调用时都会回调。token 过期(`ExpiredToken`)触发内部重试时会创建新的 task 并再次回调,因此请始终使用**最近一次**回调收到的 task,不要缓存第一次的。
89
- - 取消会让该次上传的 Promise reject,但各端错误文案不一致:H5 为 `uploadFile:fail abort`,App 为 `uploadFile:fail statusCode: 0`(**不含 `abort` 字样**),微信小程序通常为 `uploadFile:fail abort`。请不要通过匹配错误文案判断是否被取消。
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> {` | 调用 upload.request({ mode: "cos" }) 获取并缓存 COS 临时密钥;1 秒内并发上传复用同一个请求。 |
178
- | `uploadFile` | `export async function uploadFile(file: any, opts: UploadFileOptions = {}): Promise<{ url: string }> {` | 上传文件到腾讯 COS,自动生成 key、刷新过期 token,并返回 https url。 |
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` | `string` | key 前缀(子目录),如 `'avatar/'`。 |
185
- | `key` | `string` | 完整 key,传入时忽略自动生成的 key。 |
186
- | `getTask` | `(task: UniNamespace.UploadTask) => void` | 获取本次上传的 `UploadTask`,可用 `task.abort()` 取消。每次上传尝试(含 token 过期重试)都会回调。 |
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
248
+ import { GET } from '@zfqh/uniapp/lib/apis';
238
249
 
239
250
  defineConfig({
240
251
  upload: {
241
252
  async request() {
242
- const { data } = await getTencentToken();
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
272
+ import { GET } from '@zfqh/uniapp/lib/apis';
261
273
 
262
274
  defineConfig({
263
275
  upload: {
264
276
  async request() {
265
- const { data } = await getTencentToken();
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
- `getTencentToken` 是内置业务接口,来自 `@zfqh/uniapp/lib/apis`,路径为 `/app-api/infra/file/getTencentToken`。如果项目有自定义接口,可以替换请求函数,但必须把响应字段映射成下方 COS 字段。
293
+ `upload.request` 必须由业务实现并映射成下方 COS 字段;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
281
294
 
282
295
  返回字段:
283
296
 
284
- | 字段 | 说明 |
285
- | --- | --- |
286
- | `secret_id` | 临时密钥 ID。 |
287
- | `secret_key` | 临时密钥 Key。 |
288
- | `session_token` | 临时 token。 |
289
- | `bucket` | COS bucket。 |
290
- | `region` | COS 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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
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
- const { data } = await getTencentToken();
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
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
- const { data } = await getTencentToken();
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
- - `getTencentToken` 已内置在 `@zfqh/uniapp/lib/apis`,如果项目使用不同接口,可替换成自己的请求函数,但返回字段仍需映射成 COS 工具需要的字段名。
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
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
- const { data } = await getTencentToken();
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 { getTencentToken } from '@zfqh/uniapp/lib/apis';
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
- const { data } = await getTencentToken();
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
- - 内置 COS 临时密钥接口为 `@zfqh/uniapp/lib/apis` 的 `getTencentToken`;如后端接口不同,可以替换请求函数,但返回给 `upload.request` 的字段名需要保持一致。
154
+ - 包内不再内置上传凭证接口,`upload.request` 必须由业务实现;示例中的 `/api/upload-token` 仅为占位,请替换为实际后端临时凭证接口。
153
155
 
154
156
  ## Vite 配置
155
157
 
@@ -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
  /** 获取字典数据 */