@hlw-uni/mp-vue 2.1.70 → 2.1.97

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 (86) hide show
  1. package/README.md +230 -386
  2. package/dist/app.d.ts +1 -1
  3. package/dist/core/index.d.ts +3 -0
  4. package/dist/core/{theme.d.ts → theme/index.d.ts} +6 -1
  5. package/dist/hlw.d.ts +1 -10
  6. package/dist/index.d.ts +2 -2
  7. package/dist/index.js +834 -804
  8. package/dist/index.mjs +836 -806
  9. package/dist/utils/ad/index.d.ts +61 -0
  10. package/dist/{composables/utils → utils/common}/index.d.ts +1 -24
  11. package/dist/{composables → utils}/device/index.d.ts +7 -8
  12. package/dist/utils/index.d.ts +5 -0
  13. package/dist/{composables → utils}/navigator/index.d.ts +14 -30
  14. package/dist/{composables → utils}/request/client.d.ts +2 -8
  15. package/dist/{composables → utils}/request/index.d.ts +1 -1
  16. package/dist/{composables → utils}/request/service.d.ts +2 -2
  17. package/package.json +1 -1
  18. package/src/app.ts +2 -2
  19. package/src/components/hlw-add-mini/README.md +56 -9
  20. package/src/components/hlw-add-mini/index.vue +12 -9
  21. package/src/components/hlw-avatar-upload/index.vue +103 -0
  22. package/src/components/hlw-back-top/index.vue +1 -1
  23. package/src/components/hlw-button/index.vue +5 -16
  24. package/src/components/hlw-canvas/index.vue +7 -7
  25. package/src/components/hlw-cell/index.vue +1 -1
  26. package/src/components/{hlw-custom/hlw-custom.vue → hlw-custom-service/hlw-custom-service.vue} +27 -15
  27. package/src/components/hlw-empty/index.vue +14 -0
  28. package/src/components/hlw-header/index.vue +1 -1
  29. package/src/components/hlw-menu/index.vue +40 -37
  30. package/src/components/hlw-nav-bar/index.vue +23 -8
  31. package/src/components/hlw-nickname/index.vue +185 -0
  32. package/src/components/hlw-notice-bar/index.vue +23 -0
  33. package/src/components/hlw-page/index.vue +19 -1
  34. package/src/components/hlw-paging/index.vue +36 -0
  35. package/src/components/hlw-popup/index.vue +23 -0
  36. package/src/components/hlw-reward-ad/index.vue +133 -0
  37. package/src/components/hlw-search/index.vue +25 -0
  38. package/src/components/hlw-sheet/index.vue +1 -1
  39. package/src/components/hlw-status-bar/index.vue +113 -0
  40. package/src/components/hlw-tag/index.vue +22 -0
  41. package/src/core/index.ts +3 -0
  42. package/src/{composables → core}/msg/index.ts +0 -1
  43. package/src/{composables → core}/refs/index.ts +0 -1
  44. package/src/core/theme/index.ts +115 -0
  45. package/src/hlw.ts +1 -21
  46. package/src/index.ts +3 -11
  47. package/src/utils/ad/README.md +114 -0
  48. package/src/utils/ad/index.ts +234 -0
  49. package/src/{composables/utils → utils/common}/index.ts +1 -27
  50. package/src/{composables → utils}/device/index.ts +13 -21
  51. package/src/utils/index.ts +5 -0
  52. package/src/{composables → utils}/navigator/index.ts +30 -31
  53. package/src/{composables → utils}/request/client.ts +3 -11
  54. package/src/{composables → utils}/request/index.ts +1 -1
  55. package/src/{composables → utils}/request/service.ts +5 -6
  56. package/src/{composables → utils}/request/types.ts +0 -1
  57. package/dist/composables/ad/index.d.ts +0 -42
  58. package/dist/composables/index.d.ts +0 -11
  59. package/src/composables/ad/README.md +0 -58
  60. package/src/composables/ad/index.ts +0 -227
  61. package/src/composables/device/README.md +0 -50
  62. package/src/composables/index.ts +0 -38
  63. package/src/composables/msg/README.md +0 -79
  64. package/src/composables/navigator/README.md +0 -71
  65. package/src/composables/refs/README.md +0 -40
  66. package/src/composables/request/README.md +0 -124
  67. package/src/composables/share/README.md +0 -53
  68. package/src/composables/utils/README.md +0 -81
  69. package/src/core/theme.ts +0 -62
  70. /package/dist/{composables → core}/msg/index.d.ts +0 -0
  71. /package/dist/{composables → core}/refs/index.d.ts +0 -0
  72. /package/dist/{composables → core}/share/index.d.ts +0 -0
  73. /package/dist/{composables → utils}/request/adapters/alist.d.ts +0 -0
  74. /package/dist/{composables → utils}/request/adapters/base.d.ts +0 -0
  75. /package/dist/{composables → utils}/request/adapters/cos.d.ts +0 -0
  76. /package/dist/{composables → utils}/request/adapters/index.d.ts +0 -0
  77. /package/dist/{composables → utils}/request/adapters/oss.d.ts +0 -0
  78. /package/dist/{composables → utils}/request/adapters/qiniu.d.ts +0 -0
  79. /package/dist/{composables → utils}/request/types.d.ts +0 -0
  80. /package/src/{composables → core}/share/index.ts +0 -0
  81. /package/src/{composables → utils}/request/adapters/alist.ts +0 -0
  82. /package/src/{composables → utils}/request/adapters/base.ts +0 -0
  83. /package/src/{composables → utils}/request/adapters/cos.ts +0 -0
  84. /package/src/{composables → utils}/request/adapters/index.ts +0 -0
  85. /package/src/{composables → utils}/request/adapters/oss.ts +0 -0
  86. /package/src/{composables → utils}/request/adapters/qiniu.ts +0 -0
@@ -1,58 +0,0 @@
1
- # ad 调用文档
2
-
3
- `useHlwAd` 封装微信小程序插屏广告和激励视频广告。仅在存在 `wx` 且对应广告 API 可用时生效。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import { useHlwAd } from "@hlw-uni/mp-vue";
9
- ```
10
-
11
- ## 插屏广告
12
-
13
- ```ts
14
- const ad = useHlwAd();
15
-
16
- ad.setAdPopup("adunit-popup-id", (ok) => {
17
- console.log("插屏广告关闭", ok);
18
- });
19
-
20
- await ad.showAdPopup(1000);
21
- ```
22
-
23
- ## 激励视频
24
-
25
- ```ts
26
- const ad = useHlwAd();
27
-
28
- ad.setAdReward("adunit-reward-id", (res) => {
29
- if (res.ok) {
30
- // 用户完整看完激励视频
31
- }
32
- });
33
-
34
- const result = await ad.showAdReward();
35
-
36
- if (result.ok) {
37
- // 发放奖励
38
- }
39
- ```
40
-
41
- ## API
42
-
43
- | 方法 | 说明 |
44
- | --- | --- |
45
- | `setAdPopup(adId, done?)` | 创建插屏广告实例 |
46
- | `showAdPopup(delay?)` | 延迟展示插屏广告,默认 3000ms |
47
- | `setAdReward(adId, done?)` | 创建激励视频实例 |
48
- | `showAdReward()` | 展示激励视频,失败时会尝试 load 后再 show |
49
-
50
- ## 类型
51
-
52
- ```ts
53
- interface AdRes {
54
- ok: boolean;
55
- isEnded?: boolean;
56
- err?: unknown;
57
- }
58
- ```
@@ -1,227 +0,0 @@
1
- /**
2
- * 小程序广告工具。
3
- * 提供插屏广告 (Interstitial Ad) 与激励视频广告 (Rewarded Video Ad) 的注册、缓存与展示能力。
4
- */
5
-
6
- declare const uni: any;
7
- declare const wx: any;
8
-
9
- /**
10
- * 广告播放/加载结果数据结构。
11
- */
12
- export interface AdRes {
13
- /** 广告是否正常加载或成功展示完成 */
14
- ok: boolean;
15
- /** 激励视频是否完全播放完毕 (仅激励视频有此属性) */
16
- isEnded?: boolean;
17
- /** 加载或展示失败时的错误对象 */
18
- err?: unknown;
19
- }
20
-
21
- type AdDone = (res: AdRes) => void;
22
-
23
- // 缓存不同 Unit ID 的广告实例
24
- const popupCache = new Map<string, any>();
25
- const rewardCache = new Map<string, any>();
26
-
27
- let activePopupAdId = "";
28
- let popupDone: ((ok: boolean) => void) | undefined;
29
-
30
- let activeRewardAdId = "";
31
- let rewardDone: AdDone | undefined;
32
- let rewardPromise: Promise<AdRes> | null = null;
33
- let rewardResolve: ((res: AdRes) => void) | null = null;
34
-
35
- /**
36
- * 获取当前环境的小程序全局 API 实例。
37
- */
38
- function getAdApi() {
39
- if (typeof uni !== "undefined") return uni;
40
- if (typeof wx !== "undefined") return wx;
41
- return null;
42
- }
43
-
44
- /**
45
- * 触发激励视频广告结束的回调并 resolve Promise。
46
- */
47
- function finish(res: AdRes) {
48
- rewardDone?.(res);
49
- rewardResolve?.(res);
50
- rewardResolve = null;
51
- rewardPromise = null;
52
- }
53
-
54
- /**
55
- * 小程序广告 Composables。
56
- *
57
- * @example
58
- * ```ts
59
- * const { setAdPopup, showAdPopup, setAdReward, showAdReward } = useHlwAd();
60
- *
61
- * // 1. 插屏广告
62
- * setAdPopup('ad-unit-id');
63
- * await showAdPopup();
64
- *
65
- * // 2. 激励视频
66
- * await setAdReward('ad-unit-id');
67
- * const res = await showAdReward();
68
- * if (res.ok && res.isEnded) {
69
- * // 发放奖励
70
- * }
71
- * ```
72
- */
73
- export function useHlwAd() {
74
- /**
75
- * 配置/预加载插屏广告。
76
- *
77
- * @param adId 广告单元 ID
78
- * @param done 广告关闭后的回调(可选)
79
- * @returns 是否配置成功
80
- */
81
- function setAdPopup(adId: string, done?: (ok: boolean) => void): boolean {
82
- popupDone = done;
83
- if (!adId) return false;
84
-
85
- const api = getAdApi();
86
- if (!api?.createInterstitialAd) return false;
87
-
88
- activePopupAdId = adId;
89
- if (!popupCache.has(adId)) {
90
- try {
91
- const ad = api.createInterstitialAd({ adUnitId: adId });
92
- ad.onLoad?.(() => console.log(`[HlwAd] Interstitial loaded: ${adId}`));
93
- ad.onError?.((err: unknown) => {
94
- console.error("[HlwAd] Interstitial load error:", err);
95
- if (activePopupAdId === adId) {
96
- popupDone?.(false);
97
- }
98
- });
99
- ad.onClose?.(() => {
100
- if (activePopupAdId === adId) {
101
- popupDone?.(true);
102
- }
103
- });
104
- popupCache.set(adId, ad);
105
- } catch (e) {
106
- console.error("[HlwAd] Interstitial creation failed:", e);
107
- return false;
108
- }
109
- }
110
- return true;
111
- }
112
-
113
- /**
114
- * 延迟展示已配置的插屏广告。
115
- *
116
- * @param delay 延迟毫秒数,默认 3000ms
117
- * @returns 返回 Promise,resolve 是否成功显示且用户关闭了它
118
- */
119
- function showAdPopup(delay = 3000): Promise<boolean> {
120
- return new Promise((resolve) => {
121
- const ad = popupCache.get(activePopupAdId);
122
- if (!ad) {
123
- resolve(false);
124
- return;
125
- }
126
-
127
- const done = popupDone;
128
- popupDone = (ok: boolean) => {
129
- done?.(ok);
130
- resolve(ok);
131
- };
132
-
133
- setTimeout(() => {
134
- ad.show().catch((err: unknown) => {
135
- console.error("[HlwAd] Interstitial show error:", err);
136
- popupDone?.(false);
137
- });
138
- }, Math.max(0, delay));
139
- });
140
- }
141
-
142
- /**
143
- * 配置/预加载激励视频广告。
144
- *
145
- * @param adId 广告单元 ID
146
- * @param done 播放结束的回调(可选)
147
- * @returns 返回 Promise<AdRes>,在加载或创建失败时直接 resolve
148
- */
149
- function setAdReward(adId: string, done?: AdDone): Promise<AdRes> {
150
- rewardDone = done;
151
- rewardPromise = new Promise((resolve) => {
152
- rewardResolve = resolve;
153
- });
154
-
155
- if (!adId) {
156
- finish({ ok: false });
157
- return rewardPromise;
158
- }
159
-
160
- const api = getAdApi();
161
- if (!api?.createRewardedVideoAd) {
162
- finish({ ok: false });
163
- return rewardPromise;
164
- }
165
-
166
- activeRewardAdId = adId;
167
- if (!rewardCache.has(adId)) {
168
- try {
169
- const ad = api.createRewardedVideoAd({ adUnitId: adId });
170
- ad.onLoad?.(() => console.log(`[HlwAd] Rewarded video loaded: ${adId}`));
171
- ad.onError?.((err: unknown) => {
172
- console.error("[HlwAd] Rewarded video load error:", err);
173
- if (activeRewardAdId === adId) {
174
- finish({ ok: false, err });
175
- }
176
- });
177
- ad.onClose?.((res: { isEnded?: boolean }) => {
178
- if (activeRewardAdId === adId) {
179
- const isEnded = !!res?.isEnded;
180
- finish({ ok: isEnded, isEnded });
181
- }
182
- });
183
- rewardCache.set(adId, ad);
184
- } catch (e) {
185
- console.error("[HlwAd] Rewarded video creation failed:", e);
186
- finish({ ok: false, err: e });
187
- }
188
- }
189
- return rewardPromise;
190
- }
191
-
192
- /**
193
- * 立即播放已加载的激励视频广告。
194
- *
195
- * @returns 返回 Promise<AdRes>,指示广告是否正常播放完毕
196
- */
197
- function showAdReward(): Promise<AdRes> {
198
- const ad = rewardCache.get(activeRewardAdId);
199
- if (!ad) {
200
- return Promise.resolve({ ok: false });
201
- }
202
-
203
- const current = rewardPromise || new Promise<AdRes>((resolve) => {
204
- rewardResolve = resolve;
205
- });
206
- rewardPromise = current;
207
-
208
- ad.show().catch(() => {
209
- ad.load()
210
- .then(() => ad.show())
211
- .catch((err: unknown) => {
212
- console.error("[HlwAd] Rewarded video show error:", err);
213
- finish({ ok: false, err });
214
- });
215
- });
216
-
217
- return current;
218
- }
219
-
220
- return {
221
- setAdPopup,
222
- showAdPopup,
223
- setAdReward,
224
- showAdReward,
225
- };
226
- }
227
-
@@ -1,50 +0,0 @@
1
- # device 调用文档
2
-
3
- `useDevice` 采集并缓存设备、窗口、宿主和小程序信息,同时提供常用设备字段组成的 query 字符串。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import { useDevice, clearDeviceCache } from "@hlw-uni/mp-vue";
9
- ```
10
-
11
- ## 基础用法
12
-
13
- ```ts
14
- const { info, query } = useDevice();
15
-
16
- console.log(info.appid);
17
- console.log(info.device_model);
18
- console.log(query);
19
- ```
20
-
21
- `useDevice` 内部会优先读取 `uni.getDeviceInfo`、`uni.getWindowInfo`、`uni.getAppBaseInfo`,旧环境会回退到 `uni.getSystemInfoSync`。
22
-
23
- ## 清除缓存
24
-
25
- ```ts
26
- clearDeviceCache();
27
- ```
28
-
29
- 切换账号、切换宿主环境或需要重新采集设备信息时可以手动清理缓存。
30
-
31
- ## 返回值
32
-
33
- | 字段 | 说明 |
34
- | --- | --- |
35
- | `info` | 完整 `DeviceInfo` |
36
- | `query` | 常用设备字段组成的 URL query 字符串 |
37
-
38
- ## 常用字段
39
-
40
- | 字段 | 说明 |
41
- | --- | --- |
42
- | `appid` | 小程序 appId |
43
- | `device_brand` | 设备品牌 |
44
- | `device_model` | 设备型号 |
45
- | `device_id` | 设备 ID |
46
- | `platform` | 平台类型 |
47
- | `system` | 系统版本 |
48
- | `sdk_version` | 基础库版本 |
49
- | `screen_width` | 屏幕宽度 |
50
- | `screen_height` | 屏幕高度 |
@@ -1,38 +0,0 @@
1
- /**
2
- * Composables 统一导出
3
- */
4
- export * from "./request";
5
- export { useMsg, type HlwMsg, type ToastOptions, type ModalOptions, type ToastIcon } from "./msg";
6
- export {
7
- useDevice,
8
- clearDeviceCache,
9
- type DeviceInfo,
10
- type DeviceQueryInfo,
11
- } from "./device";
12
- export { useRefs } from "./refs";
13
- export {
14
- useShare,
15
- type ShareConfig,
16
- } from "./share";
17
- export { useHlwAd, type AdRes } from "./ad";
18
- export {
19
- useUtils,
20
- withQuery,
21
- toQuery,
22
- signText,
23
- toNumber,
24
- toBoolean,
25
- copy,
26
- paste,
27
- auth,
28
- saveImage,
29
- saveVideoFile,
30
- download,
31
- saveImageUrl,
32
- saveVideoUrl,
33
- type DownloadOpt,
34
- type DownloadRes,
35
- } from "./utils";
36
- export { useNavigate, type NavigateType, type NavigateOptions } from "./navigator";
37
-
38
-
@@ -1,79 +0,0 @@
1
- # msg 调用文档
2
-
3
- `useMsg` 统一封装 toast、loading、modal 和简单进度展示。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import { useMsg } from "@hlw-uni/mp-vue";
9
- ```
10
-
11
- ## 基础用法
12
-
13
- ```ts
14
- const msg = useMsg();
15
-
16
- msg.toast("保存中");
17
- msg.success("保存成功");
18
- msg.error("保存失败");
19
-
20
- msg.showLoading("加载中...");
21
- msg.hideLoading();
22
- ```
23
-
24
- ## 确认弹窗
25
-
26
- ```ts
27
- const ok = await msg.confirm({
28
- title: "删除确认",
29
- content: "确定删除这条记录吗?",
30
- confirmText: "删除",
31
- });
32
-
33
- if (ok) {
34
- // 用户点击确认
35
- }
36
- ```
37
-
38
- `modal` 是 `confirm` 的语义别名。
39
-
40
- ## API
41
-
42
- | 方法 | 说明 |
43
- | --- | --- |
44
- | `toast(opts | string)` | 普通提示 |
45
- | `success(message)` | 成功提示 |
46
- | `error(message)` | 失败提示 |
47
- | `fail(message)` | `error` 的别名 |
48
- | `showLoading(message?)` | 显示全局 loading |
49
- | `hideLoading()` | 关闭全局 loading |
50
- | `confirm(opts)` | 确认弹窗,返回 `Promise<boolean>` |
51
- | `modal(opts)` | `confirm` 的别名 |
52
- | `setLoadingBar(progress)` | 用导航标题模拟进度 |
53
-
54
- ## ToastOptions
55
-
56
- ```ts
57
- interface ToastOptions {
58
- message: string;
59
- icon?: "success" | "fail" | "exception" | "none";
60
- image?: string;
61
- duration?: number;
62
- mask?: boolean;
63
- position?: "top" | "center" | "bottom";
64
- }
65
- ```
66
-
67
- ## ModalOptions
68
-
69
- ```ts
70
- interface ModalOptions {
71
- title?: string;
72
- content: string;
73
- confirmText?: string;
74
- cancelText?: string;
75
- confirmColor?: string;
76
- cancelColor?: string;
77
- showCancel?: boolean;
78
- }
79
- ```
@@ -1,71 +0,0 @@
1
- # navigator 调用文档
2
-
3
- `useNavigate` 统一封装 uni-app 页面跳转、tab 跳转、返回和打开其他小程序。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import { useNavigate } from "@hlw-uni/mp-vue";
9
- ```
10
-
11
- ## 基础用法
12
-
13
- ```ts
14
- const nav = useNavigate();
15
-
16
- nav.to("/pages/detail/index?id=1");
17
- nav.redirect("/pages/login/index");
18
- nav.tab("/pages/index/index");
19
- nav.reLaunch("/pages/index/index");
20
- nav.back();
21
- ```
22
-
23
- ## 打开其他小程序
24
-
25
- ```ts
26
- nav.miniProgram("wx1234567890", {
27
- path: "pages/index/index?id=1",
28
- envVersion: "release",
29
- extraData: {
30
- from: "hlw",
31
- },
32
- });
33
- ```
34
-
35
- ## 通用跳转
36
-
37
- ```ts
38
- nav.navigate("navigateTo", "/pages/detail/index?id=1", {
39
- silent: true,
40
- onFail: (message) => {
41
- console.log(message);
42
- },
43
- });
44
- ```
45
-
46
- ## API
47
-
48
- | 方法 | 说明 |
49
- | --- | --- |
50
- | `navigate(type, url, options?)` | 通用跳转入口 |
51
- | `to(url, options?)` | `uni.navigateTo` |
52
- | `redirect(url, options?)` | `uni.redirectTo` |
53
- | `tab(url, options?)` | `uni.switchTab` |
54
- | `reLaunch(url, options?)` | `uni.reLaunch` |
55
- | `back(delta?, options?)` | `uni.navigateBack` |
56
- | `miniProgram(appId, options?)` | `uni.navigateToMiniProgram` |
57
-
58
- ## NavigateOptions
59
-
60
- ```ts
61
- interface NavigateOptions {
62
- silent?: boolean;
63
- onFail?: (message: string) => void;
64
- delta?: number;
65
- path?: string;
66
- envVersion?: "develop" | "trial" | "release";
67
- extraData?: Record<string, unknown>;
68
- }
69
- ```
70
-
71
- `webview` 类型当前只提示 `H5:{url}`,具体 web-view 承载页由业务项目实现。
@@ -1,40 +0,0 @@
1
- # refs 调用文档
2
-
3
- `useRefs` 用于 `v-for` 场景批量收集组件或元素引用。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import { useRefs } from "@hlw-uni/mp-vue";
9
- ```
10
-
11
- ## 基础用法
12
-
13
- ```vue
14
- <template>
15
- <hlw-popup
16
- v-for="item in list"
17
- :key="item.id"
18
- :ref="setRefs(item.id)"
19
- />
20
- </template>
21
-
22
- <script setup lang="ts">
23
- import { useRefs } from "@hlw-uni/mp-vue";
24
-
25
- const { refs, setRefs } = useRefs();
26
-
27
- function open(id: string) {
28
- refs.value[id]?.open?.();
29
- }
30
- </script>
31
- ```
32
-
33
- ## 返回值
34
-
35
- | 字段 | 说明 |
36
- | --- | --- |
37
- | `refs` | `Record<string, any>` 的响应式引用集合 |
38
- | `setRefs(key)` | 返回可绑定到模板 `ref` 的回调函数 |
39
-
40
- 组件更新前和卸载时,内部会自动清空引用集合,避免旧引用残留。
@@ -1,124 +0,0 @@
1
- # request 调用文档
2
-
3
- `request` 模块封装 `uni.request`、请求拦截器、响应拦截器、错误拦截器、上传和服务类组织方式。
4
-
5
- ## 引入
6
-
7
- ```ts
8
- import {
9
- useRequest,
10
- useUpload,
11
- BaseService,
12
- ServiceNamespace,
13
- ServicePrefix,
14
- } from "@hlw-uni/mp-vue";
15
- ```
16
-
17
- ## useRequest
18
-
19
- ```ts
20
- const request = useRequest();
21
-
22
- request.setBaseURL("https://api.example.com");
23
-
24
- const offRequest = request.onRequest((config) => {
25
- config.headers = {
26
- ...config.headers,
27
- "x-token": uni.getStorageSync("token"),
28
- };
29
- return config;
30
- });
31
-
32
- const res = await request.get<{ name: string }>("/user/profile");
33
-
34
- offRequest();
35
- ```
36
-
37
- ## API
38
-
39
- | 方法 | 说明 |
40
- | --- | --- |
41
- | `request(config)` | 发起完整配置请求 |
42
- | `get(url, data?)` | GET 请求 |
43
- | `post(url, data?)` | POST 请求 |
44
- | `put(url, data?)` | PUT 请求 |
45
- | `del(url, data?)` | DELETE 请求 |
46
- | `setBaseURL(url)` | 设置全局基础地址 |
47
- | `onRequest(fn)` | 注册请求拦截器,返回取消函数 |
48
- | `onResponse(fn)` | 注册响应拦截器,返回取消函数 |
49
- | `onError(fn)` | 注册错误拦截器,返回取消函数 |
50
- | `upload(config)` | 上传文件 |
51
- | `resolveServiceUrl(namespace, url, servicePrefix?)` | 生成服务类请求地址 |
52
-
53
- ## 响应格式
54
-
55
- ```ts
56
- interface ApiResponse<T = unknown> {
57
- code: number;
58
- data: T;
59
- info: string;
60
- }
61
- ```
62
-
63
- ## useUpload
64
-
65
- ```ts
66
- const { uploading, upload } = useUpload();
67
-
68
- const result = await upload({
69
- type: "local",
70
- server: "https://api.example.com/upload",
71
- url: "https://api.example.com/upload",
72
- filePath: tempFilePath,
73
- header: {
74
- "x-token": uni.getStorageSync("token"),
75
- },
76
- });
77
-
78
- console.log(uploading.value, result.data);
79
- ```
80
-
81
- 上传类型:
82
-
83
- | 类型 | 说明 |
84
- | --- | --- |
85
- | `local` | 直接上传到业务接口 |
86
- | `cos` | 腾讯云 COS 表单上传 |
87
- | `oss` | 阿里云 OSS 表单上传 |
88
- | `qiniu` | 七牛云表单上传 |
89
- | `alist` | Alist 上传 |
90
-
91
- ## BaseService
92
-
93
- ```ts
94
- @ServicePrefix("api")
95
- @ServiceNamespace("user")
96
- class UserService extends BaseService {
97
- profile() {
98
- return this.get<{ nickname: string }>("/profile");
99
- }
100
-
101
- update(data: { nickname: string }) {
102
- return this.post("/update", data);
103
- }
104
- }
105
-
106
- const userService = new UserService();
107
- const profile = await userService.profile();
108
- ```
109
-
110
- 上面的 `profile()` 会请求 `/api/user/profile`。如果传入绝对地址,例如 `https://example.com/a`,则不会拼接前缀。
111
-
112
- ## UploadConfig
113
-
114
- ```ts
115
- interface UploadConfig {
116
- server: string;
117
- filePath: string;
118
- fileName?: string;
119
- type: string;
120
- credentials?: Record<string, string>;
121
- header?: Record<string, string>;
122
- url?: string;
123
- }
124
- ```