@zfqh/uniapp 0.1.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.
Files changed (310) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +39 -0
  4. package/docs/api/apis/core.md +189 -0
  5. package/docs/api/apis/index.md +82 -0
  6. package/docs/api/apis/request.md +369 -0
  7. package/docs/api/configs/api.md +32 -0
  8. package/docs/api/configs/app.md +43 -0
  9. package/docs/api/configs/brand.md +43 -0
  10. package/docs/api/configs/cdn.md +35 -0
  11. package/docs/api/configs/color.md +144 -0
  12. package/docs/api/configs/env.md +120 -0
  13. package/docs/api/configs/index.md +394 -0
  14. package/docs/api/configs/link.md +33 -0
  15. package/docs/api/configs/log.md +27 -0
  16. package/docs/api/configs/mp.md +34 -0
  17. package/docs/api/configs/navigate.md +27 -0
  18. package/docs/api/configs/page.md +32 -0
  19. package/docs/api/configs/path.md +27 -0
  20. package/docs/api/configs/storage.md +24 -0
  21. package/docs/api/configs/tabbar.md +29 -0
  22. package/docs/api/configs/toast.md +35 -0
  23. package/docs/api/configs/update.md +25 -0
  24. package/docs/api/configs/upload.md +45 -0
  25. package/docs/api/configs/ver.md +32 -0
  26. package/docs/api/configs/web.md +28 -0
  27. package/docs/api/hooks/index.md +182 -0
  28. package/docs/api/hooks/useI18n.md +27 -0
  29. package/docs/api/hooks/useOverlay.md +37 -0
  30. package/docs/api/hooks/usePopup.md +35 -0
  31. package/docs/api/hooks/useVersion.md +23 -0
  32. package/docs/api/index.md +269 -0
  33. package/docs/api/mixins/app.md +29 -0
  34. package/docs/api/mixins/badge.md +23 -0
  35. package/docs/api/mixins/debounce.md +32 -0
  36. package/docs/api/mixins/deep.md +29 -0
  37. package/docs/api/mixins/index.md +23 -0
  38. package/docs/api/mixins/login.md +22 -0
  39. package/docs/api/mixins/model.md +26 -0
  40. package/docs/api/mixins/redirect.md +26 -0
  41. package/docs/api/mixins/share.md +29 -0
  42. package/docs/api/mixins/show.md +27 -0
  43. package/docs/api/mixins/webview.md +27 -0
  44. package/docs/api/modules/app.md +30 -0
  45. package/docs/api/modules/dict.md +28 -0
  46. package/docs/api/modules/im.md +22 -0
  47. package/docs/api/modules/index.md +44 -0
  48. package/docs/api/modules/launch.md +26 -0
  49. package/docs/api/modules/location.md +25 -0
  50. package/docs/api/modules/login.md +35 -0
  51. package/docs/api/modules/network.md +26 -0
  52. package/docs/api/modules/system.md +29 -0
  53. package/docs/api/utils/audio.md +84 -0
  54. package/docs/api/utils/consts.md +201 -0
  55. package/docs/api/utils/cos.md +269 -0
  56. package/docs/api/utils/debounce.md +89 -0
  57. package/docs/api/utils/file.md +78 -0
  58. package/docs/api/utils/index.md +547 -0
  59. package/docs/api/utils/locale.md +32 -0
  60. package/docs/api/utils/message.md +81 -0
  61. package/docs/api/utils/navigate.md +267 -0
  62. package/docs/api/utils/pages.md +205 -0
  63. package/docs/api/utils/permission.md +28 -0
  64. package/docs/api/utils/permit.md +62 -0
  65. package/docs/api/utils/query.md +89 -0
  66. package/docs/api/utils/request.md +34 -0
  67. package/docs/api/utils/storage.md +145 -0
  68. package/docs/api/utils/subscribe.md +77 -0
  69. package/docs/api/utils/throttle.md +101 -0
  70. package/docs/api/utils/toast.md +164 -0
  71. package/docs/api/utils/uni.md +28 -0
  72. package/docs/api/utils/update.md +165 -0
  73. package/docs/components/g-back-button.md +76 -0
  74. package/docs/components/g-checkbox-list.md +101 -0
  75. package/docs/components/g-container.md +93 -0
  76. package/docs/components/g-data-list.md +106 -0
  77. package/docs/components/g-dot-text.md +79 -0
  78. package/docs/components/g-env.md +75 -0
  79. package/docs/components/g-float.md +83 -0
  80. package/docs/components/g-grid-image.md +91 -0
  81. package/docs/components/g-grid-swiper.md +99 -0
  82. package/docs/components/g-icon.md +106 -0
  83. package/docs/components/g-mask.md +82 -0
  84. package/docs/components/g-money.md +90 -0
  85. package/docs/components/g-more.md +78 -0
  86. package/docs/components/g-page-container.md +170 -0
  87. package/docs/components/g-permission-popup.md +117 -0
  88. package/docs/components/g-polyline-chat.md +102 -0
  89. package/docs/components/g-polyline-view.md +67 -0
  90. package/docs/components/g-popup.md +144 -0
  91. package/docs/components/g-refresh-view.md +118 -0
  92. package/docs/components/g-render-image.md +83 -0
  93. package/docs/components/g-search.md +120 -0
  94. package/docs/components/g-share-photo.md +77 -0
  95. package/docs/components/g-share-view.md +83 -0
  96. package/docs/components/g-share-weixin.md +81 -0
  97. package/docs/components/g-skeleton-view.md +71 -0
  98. package/docs/components/g-skeleton.md +64 -0
  99. package/docs/components/g-tag-editor.md +134 -0
  100. package/docs/components/g-timer.md +72 -0
  101. package/docs/components/g-trtc-room.md +116 -0
  102. package/docs/components/g-trtc-tui.md +84 -0
  103. package/docs/components/g-trtc.md +124 -0
  104. package/docs/components/g-upload.md +117 -0
  105. package/docs/components/g-waterfall.md +84 -0
  106. package/docs/components/index.md +109 -0
  107. package/docs/components/styles/base-styles.md +367 -0
  108. package/docs/components/styles/global-vars.md +150 -0
  109. package/docs/components/usage.md +112 -0
  110. package/docs/faq/index.md +78 -0
  111. package/docs/guide/getting-started.md +195 -0
  112. package/docs/guide/project-frame.md +297 -0
  113. package/docs/index.md +80 -0
  114. package/lib/apis/core.d.ts +12 -0
  115. package/lib/apis/core.js +13 -0
  116. package/lib/apis/index.d.ts +2 -0
  117. package/lib/apis/index.js +2 -0
  118. package/lib/apis/request.d.ts +4 -0
  119. package/lib/apis/request.js +27 -0
  120. package/lib/components/g-back-button/g-back-button.vue +141 -0
  121. package/lib/components/g-checkbox-list/g-checkbox-list.vue +156 -0
  122. package/lib/components/g-container/g-container.vue +159 -0
  123. package/lib/components/g-data-list/g-data-list.vue +192 -0
  124. package/lib/components/g-dot-text/g-dot-text.vue +114 -0
  125. package/lib/components/g-env/g-env.vue +123 -0
  126. package/lib/components/g-float/g-float.vue +131 -0
  127. package/lib/components/g-grid-image/g-grid-image.vue +84 -0
  128. package/lib/components/g-grid-swiper/g-grid-swiper.vue +224 -0
  129. package/lib/components/g-icon/g-icon.vue +72 -0
  130. package/lib/components/g-mask/g-mask.vue +126 -0
  131. package/lib/components/g-money/g-money.vue +174 -0
  132. package/lib/components/g-more/g-more.vue +68 -0
  133. package/lib/components/g-page-container/g-page-container.vue +470 -0
  134. package/lib/components/g-permission-popup/g-permission-popup.vue +80 -0
  135. package/lib/components/g-polyline-chat/g-polyline-chat.vue +255 -0
  136. package/lib/components/g-polyline-view/g-polyline-view.vue +104 -0
  137. package/lib/components/g-popup/g-popup.vue +449 -0
  138. package/lib/components/g-refresh-view/g-refresh-view.vue +213 -0
  139. package/lib/components/g-render-image/g-render-image.vue +222 -0
  140. package/lib/components/g-search/g-search.vue +274 -0
  141. package/lib/components/g-share-photo/g-share-photo.vue +75 -0
  142. package/lib/components/g-share-view/g-share-view.vue +157 -0
  143. package/lib/components/g-share-weixin/g-share-weixin.vue +106 -0
  144. package/lib/components/g-skeleton/g-skeleton.vue +55 -0
  145. package/lib/components/g-skeleton-view/g-skeleton-view.vue +78 -0
  146. package/lib/components/g-tag-editor/g-tag-editor.vue +482 -0
  147. package/lib/components/g-timer/g-timer.vue +61 -0
  148. package/lib/components/g-trtc/g-trtc.vue +347 -0
  149. package/lib/components/g-trtc-room/g-trtc-room.vue +524 -0
  150. package/lib/components/g-trtc-room/iconfont.scss +59 -0
  151. package/lib/components/g-trtc-tui/g-trtc-tui.vue +245 -0
  152. package/lib/components/g-upload/g-upload.vue +294 -0
  153. package/lib/components/g-waterfall/g-waterfall.vue +101 -0
  154. package/lib/configs/api.d.ts +7 -0
  155. package/lib/configs/api.js +6 -0
  156. package/lib/configs/app.d.ts +26 -0
  157. package/lib/configs/app.js +50 -0
  158. package/lib/configs/brand.d.ts +22 -0
  159. package/lib/configs/brand.js +26 -0
  160. package/lib/configs/cdn.d.ts +13 -0
  161. package/lib/configs/cdn.js +12 -0
  162. package/lib/configs/color.d.ts +62 -0
  163. package/lib/configs/color.js +66 -0
  164. package/lib/configs/env.d.ts +37 -0
  165. package/lib/configs/env.js +71 -0
  166. package/lib/configs/index.d.ts +170 -0
  167. package/lib/configs/index.js +82 -0
  168. package/lib/configs/link.d.ts +11 -0
  169. package/lib/configs/link.js +3 -0
  170. package/lib/configs/log.d.ts +9 -0
  171. package/lib/configs/log.js +8 -0
  172. package/lib/configs/mp.d.ts +15 -0
  173. package/lib/configs/mp.js +9 -0
  174. package/lib/configs/navigate.d.ts +17 -0
  175. package/lib/configs/navigate.js +5 -0
  176. package/lib/configs/page.d.ts +18 -0
  177. package/lib/configs/page.js +14 -0
  178. package/lib/configs/path.d.ts +11 -0
  179. package/lib/configs/path.js +10 -0
  180. package/lib/configs/storage.d.ts +7 -0
  181. package/lib/configs/storage.js +6 -0
  182. package/lib/configs/tabbar.d.ts +7 -0
  183. package/lib/configs/tabbar.js +6 -0
  184. package/lib/configs/toast.d.ts +18 -0
  185. package/lib/configs/toast.js +29 -0
  186. package/lib/configs/update.d.ts +45 -0
  187. package/lib/configs/update.js +6 -0
  188. package/lib/configs/upload.d.ts +30 -0
  189. package/lib/configs/upload.js +7 -0
  190. package/lib/configs/ver.d.ts +8 -0
  191. package/lib/configs/ver.js +28 -0
  192. package/lib/configs/web.d.ts +5 -0
  193. package/lib/configs/web.js +2 -0
  194. package/lib/hooks/index.d.ts +4 -0
  195. package/lib/hooks/index.js +4 -0
  196. package/lib/hooks/useI18n.d.ts +2 -0
  197. package/lib/hooks/useI18n.js +19 -0
  198. package/lib/hooks/useOverlay.d.ts +1 -0
  199. package/lib/hooks/useOverlay.js +17 -0
  200. package/lib/hooks/usePopup.d.ts +1 -0
  201. package/lib/hooks/usePopup.js +14 -0
  202. package/lib/hooks/useVersion.d.ts +6 -0
  203. package/lib/hooks/useVersion.js +21 -0
  204. package/lib/index.d.ts +26 -0
  205. package/lib/index.js +33 -0
  206. package/lib/mixins/app.d.ts +14 -0
  207. package/lib/mixins/app.js +105 -0
  208. package/lib/mixins/badge.d.ts +24 -0
  209. package/lib/mixins/badge.js +44 -0
  210. package/lib/mixins/debounce.d.ts +6 -0
  211. package/lib/mixins/debounce.js +11 -0
  212. package/lib/mixins/deep.d.ts +6 -0
  213. package/lib/mixins/deep.js +8 -0
  214. package/lib/mixins/index.d.ts +8 -0
  215. package/lib/mixins/index.js +8 -0
  216. package/lib/mixins/login.d.ts +4 -0
  217. package/lib/mixins/login.js +25 -0
  218. package/lib/mixins/model.d.ts +22 -0
  219. package/lib/mixins/model.js +29 -0
  220. package/lib/mixins/redirect.d.ts +8 -0
  221. package/lib/mixins/redirect.js +94 -0
  222. package/lib/mixins/share.d.ts +15 -0
  223. package/lib/mixins/share.js +55 -0
  224. package/lib/mixins/show.d.ts +9 -0
  225. package/lib/mixins/show.js +16 -0
  226. package/lib/mixins/webview.d.ts +26 -0
  227. package/lib/mixins/webview.js +225 -0
  228. package/lib/modules/app.d.ts +5 -0
  229. package/lib/modules/app.js +19 -0
  230. package/lib/modules/dict.d.ts +8 -0
  231. package/lib/modules/dict.js +43 -0
  232. package/lib/modules/im.d.ts +6 -0
  233. package/lib/modules/im.js +105 -0
  234. package/lib/modules/index.d.ts +8 -0
  235. package/lib/modules/index.js +8 -0
  236. package/lib/modules/launch.d.ts +5 -0
  237. package/lib/modules/launch.js +32 -0
  238. package/lib/modules/location.d.ts +5 -0
  239. package/lib/modules/location.js +57 -0
  240. package/lib/modules/login.d.ts +5 -0
  241. package/lib/modules/login.js +72 -0
  242. package/lib/modules/network.d.ts +5 -0
  243. package/lib/modules/network.js +39 -0
  244. package/lib/modules/system.d.ts +5 -0
  245. package/lib/modules/system.js +65 -0
  246. package/lib/styles/animate-vue.scss +3 -0
  247. package/lib/styles/animate.scss +27 -0
  248. package/lib/styles/bg-vue.scss +21 -0
  249. package/lib/styles/bg.scss +93 -0
  250. package/lib/styles/border.scss +218 -0
  251. package/lib/styles/flex-nvue.scss +64 -0
  252. package/lib/styles/flex-vue.scss +75 -0
  253. package/lib/styles/font.scss +59 -0
  254. package/lib/styles/index.scss +25 -0
  255. package/lib/styles/layout-nvue.scss +24 -0
  256. package/lib/styles/layout-vue.scss +30 -0
  257. package/lib/styles/layout.scss +76 -0
  258. package/lib/styles/opacity.scss +10 -0
  259. package/lib/styles/reset-vue.scss +46 -0
  260. package/lib/styles/shadow.scss +12 -0
  261. package/lib/styles/sizing-vue.scss +21 -0
  262. package/lib/styles/sizing.scss +21 -0
  263. package/lib/styles/spacing.scss +234 -0
  264. package/lib/styles/text-nvue.scss +21 -0
  265. package/lib/styles/text-vue.scss +70 -0
  266. package/lib/styles/text.scss +122 -0
  267. package/lib/styles/var.module.scss +29 -0
  268. package/lib/utils/audio.d.ts +14 -0
  269. package/lib/utils/audio.js +43 -0
  270. package/lib/utils/consts.d.ts +30 -0
  271. package/lib/utils/consts.js +52 -0
  272. package/lib/utils/cos.d.ts +15 -0
  273. package/lib/utils/cos.js +140 -0
  274. package/lib/utils/debounce.d.ts +2 -0
  275. package/lib/utils/debounce.js +30 -0
  276. package/lib/utils/file.d.ts +28 -0
  277. package/lib/utils/file.js +292 -0
  278. package/lib/utils/index.d.ts +166 -0
  279. package/lib/utils/index.js +485 -0
  280. package/lib/utils/locale.d.ts +6 -0
  281. package/lib/utils/locale.js +19 -0
  282. package/lib/utils/message.d.ts +9 -0
  283. package/lib/utils/message.js +63 -0
  284. package/lib/utils/navigate.d.ts +27 -0
  285. package/lib/utils/navigate.js +183 -0
  286. package/lib/utils/pages.d.ts +21 -0
  287. package/lib/utils/pages.js +79 -0
  288. package/lib/utils/permission.d.ts +16 -0
  289. package/lib/utils/permission.js +291 -0
  290. package/lib/utils/permit.d.ts +30 -0
  291. package/lib/utils/permit.js +181 -0
  292. package/lib/utils/query.d.ts +13 -0
  293. package/lib/utils/query.js +14 -0
  294. package/lib/utils/request.d.ts +8 -0
  295. package/lib/utils/request.js +126 -0
  296. package/lib/utils/storage.d.ts +53 -0
  297. package/lib/utils/storage.js +145 -0
  298. package/lib/utils/subscribe.d.ts +7 -0
  299. package/lib/utils/subscribe.js +94 -0
  300. package/lib/utils/throttle.d.ts +2 -0
  301. package/lib/utils/throttle.js +32 -0
  302. package/lib/utils/toast.d.ts +17 -0
  303. package/lib/utils/toast.js +66 -0
  304. package/lib/utils/uni.d.ts +1 -0
  305. package/lib/utils/uni.js +147 -0
  306. package/lib/utils/update.d.ts +9 -0
  307. package/lib/utils/update.js +376 -0
  308. package/package.json +49 -0
  309. package/types/index.d.ts +25 -0
  310. package/types/virtual.d.ts +1 -0
@@ -0,0 +1,269 @@
1
+ # COS 上传
2
+
3
+ ::: tip 工具模块
4
+ `@zfqh/uniapp/lib/utils/cos`
5
+ :::
6
+
7
+ 基于腾讯云 COS 临时密钥上传文件,并提供图片压缩 URL 拼接能力。
8
+
9
+ ## 平台兼容性
10
+
11
+ | App | H5 | 微信小程序 | 其他小程序 | WebView |
12
+ | --- | --- | --- | --- | --- |
13
+ | √ | √ | √ | 视平台 API 而定 | 视运行容器而定 |
14
+
15
+ ## 基本使用
16
+
17
+ ```ts
18
+ import { cos } from '@zfqh/uniapp';
19
+ ```
20
+
21
+ ## 上传文件
22
+
23
+ ```ts
24
+ import { cos } from '@zfqh/uniapp';
25
+
26
+ // 直接传入 uni.chooseImage 的 tempFiles 文件对象(推荐)
27
+ const { url } = await cos.uploadFile(res.tempFiles[0]);
28
+
29
+ // 传入临时路径
30
+ const { url } = await cos.uploadFile({ path: tempFilePath });
31
+
32
+ // 指定子目录
33
+ const { url } = await cos.uploadFile(file, { path: 'avatar/' });
34
+
35
+ // 指定完整 key
36
+ const { url } = await cos.uploadFile(file, { key: 'avatar/user-1.png' });
37
+ ```
38
+
39
+ `uploadFile` 支持多种文件来源:
40
+
41
+ | 来源 | 字段 |
42
+ | --- | --- |
43
+ | `uni.chooseImage` 的 `tempFiles` | 直接传入 `res.tempFiles[0]`(推荐) |
44
+ | 临时路径对象 | `{ path: '...' }` |
45
+ | H5 File 对象 | 直接传入 File |
46
+ | 自定义文件名 | `{ name: 'photo.jpg', path: '...' }` |
47
+
48
+ 未指定 `key` 时会自动生成:`<path><yyyymmddhhMMss><guid>.<ext>`
49
+
50
+ ## 完整上传流程
51
+
52
+ ### 回调风格(推荐)
53
+
54
+ 直接传入 `res.tempFiles[0]` 文件对象:
55
+
56
+ ```ts
57
+ import { cos, toast } from '@zfqh/uniapp';
58
+
59
+ uni.chooseImage({
60
+ count: 1,
61
+ sizeType: ['compressed'],
62
+ sourceType: ['album'],
63
+ async success(res) {
64
+ try {
65
+ toast.loading('上传中');
66
+ const { url } = await cos.uploadFile(res.tempFiles[0]);
67
+ imageUrl.value = url;
68
+ } catch (e) {
69
+ if (e?.message) {
70
+ toast.message(e.message);
71
+ }
72
+ } finally {
73
+ toast.hideLoading();
74
+ }
75
+ },
76
+ });
77
+ ```
78
+
79
+ ### Promise 风格
80
+
81
+ 使用 `res.tempFilePaths` 包装为对象传入:
82
+
83
+ ```ts
84
+ import { cos, toast } from '@zfqh/uniapp';
85
+
86
+ async function uploadImage() {
87
+ try {
88
+ const res = await uni.chooseImage({ count: 1, sizeType: ['compressed'] });
89
+ toast.loading('上传中');
90
+ const { url } = await cos.uploadFile({ path: res.tempFilePaths[0] });
91
+ return url;
92
+ } catch (e) {
93
+ toast.message(e?.message || '上传失败');
94
+ } finally {
95
+ toast.hideLoading();
96
+ }
97
+ }
98
+ ```
99
+
100
+ ## 图片压缩 URL
101
+
102
+ ```ts
103
+ import { cosCompress } from '@zfqh/uniapp';
104
+
105
+ // 缩放到宽度 200px
106
+ cosCompress(imageUrl, '200x');
107
+
108
+ // 裁剪为 200x200
109
+ cosCompress(imageUrl, '200x200', 'cut');
110
+
111
+ // 旋转
112
+ cosCompress(imageUrl, '90', 'rotate');
113
+ ```
114
+
115
+ 基于腾讯云 COS `imageMogr2` 参数拼接,最终 URL 格式:`${url}?imageMogr2/${type}/${rule}/format/webp`
116
+
117
+ ## 手动刷新凭证
118
+
119
+ ```ts
120
+ import { checkRefreshToken } from '@zfqh/uniapp';
121
+
122
+ // 手动刷新 COS 临时凭证(uploadFile 内部会自动调用)
123
+ await checkRefreshToken();
124
+ ```
125
+
126
+ ## API
127
+
128
+ 发布路径:`@zfqh/uniapp/lib/utils/cos`
129
+
130
+ | 名称 | 签名/声明 | 说明 |
131
+ | --- | --- | --- |
132
+ | `checkRefreshToken` | `export async function checkRefreshToken(): Promise<boolean> {` | 调用 upload.request({ mode: "cos" }) 获取并缓存 COS 临时密钥;1 秒内并发上传复用同一个请求。 |
133
+ | `uploadFile` | `export async function uploadFile(file: any, opts: UploadFileOptions = {}): Promise<{ url: string }> {` | 上传文件到腾讯 COS,自动生成 key、刷新过期 token,并返回 https url。 |
134
+ | `cosCompress` | `export function cosCompress(url: string, rule: string, type?: string): string {` | 基于腾讯云 COS `imageMogr2` 拼接图片压缩 URL。`rule` 为尺寸规则(如 `'200x'`、`'200x200'`),`type` 可选 `'cut'`(裁剪)或默认(缩放)。 |
135
+
136
+ `cosCompress` 常用示例:
137
+
138
+ ```ts
139
+ import { cosCompress } from '@zfqh/uniapp';
140
+
141
+ // 缩放到宽度 200px
142
+ const thumbnail = cosCompress(imageUrl, '200x');
143
+
144
+ // 裁剪为 200x200
145
+ const avatar = cosCompress(imageUrl, '200x200', 'cut');
146
+ ```
147
+
148
+ ## COS 上传指南
149
+
150
+ 根入口导出:
151
+
152
+ ```ts
153
+ import { cos } from '@zfqh/uniapp';
154
+ ```
155
+
156
+ 上传文件:
157
+
158
+ ```ts
159
+ const { url } = await cos.uploadFile(file, {
160
+ path: 'avatar/',
161
+ });
162
+ ```
163
+
164
+ 指定完整 key:
165
+
166
+ ```ts
167
+ const { url } = await cos.uploadFile(file, {
168
+ key: 'avatar/user-1.png',
169
+ });
170
+ ```
171
+
172
+ ## 临时凭证
173
+
174
+ 上传前会调用:
175
+
176
+ ```ts
177
+ config.upload.request({ mode: 'cos' });
178
+ ```
179
+
180
+ 需要在 `defineConfig` 中配置:
181
+
182
+ ```ts
183
+ import { defineConfig } from '@zfqh/uniapp';
184
+ import { getTencentToken } from '@zfqh/uniapp/lib/apis';
185
+
186
+ defineConfig({
187
+ upload: {
188
+ async request() {
189
+ const { data } = await getTencentToken();
190
+ return {
191
+ secret_id: data.tmpSecretId,
192
+ secret_key: data.tmpSecretKey,
193
+ session_token: data.sessionToken,
194
+ create_time: data.createTime,
195
+ expire_time: data.expirationTime,
196
+ bucket: data.bucket,
197
+ region: data.region,
198
+ };
199
+ },
200
+ },
201
+ });
202
+ ```
203
+
204
+ 门店端如果需要全球加速,可根据业务 store 改写 `region`:
205
+
206
+ ```ts
207
+ import { getTencentToken } from '@zfqh/uniapp/lib/apis';
208
+ import store from '@/store';
209
+
210
+ defineConfig({
211
+ upload: {
212
+ async request() {
213
+ const { data } = await getTencentToken();
214
+ return {
215
+ secret_id: data.tmpSecretId,
216
+ secret_key: data.tmpSecretKey,
217
+ session_token: data.sessionToken,
218
+ create_time: data.createTime,
219
+ expire_time: data.expirationTime,
220
+ bucket: data.bucket,
221
+ region: store.state.storeConfig.isGlobalAccelerate ? 'accelerate' : data.region,
222
+ };
223
+ },
224
+ },
225
+ });
226
+ ```
227
+
228
+ `getTencentToken` 是内置业务接口,来自 `@zfqh/uniapp/lib/apis`,路径为 `/app-api/infra/file/getTencentToken`。如果项目有自定义接口,可以替换请求函数,但必须把响应字段映射成下方 COS 字段。
229
+
230
+ 返回字段:
231
+
232
+ | 字段 | 说明 |
233
+ | --- | --- |
234
+ | `secret_id` | 临时密钥 ID。 |
235
+ | `secret_key` | 临时密钥 Key。 |
236
+ | `session_token` | 临时 token。 |
237
+ | `bucket` | COS bucket。 |
238
+ | `region` | COS region。 |
239
+ | `create_time` | 创建时间戳,秒。 |
240
+ | `expire_time` | 过期时间戳,秒。 |
241
+
242
+ ## 上传文件对象
243
+
244
+ `uploadFile` 支持:
245
+
246
+ | 来源 | 字段 |
247
+ | --- | --- |
248
+ | uni 选择文件 | `file.path` |
249
+ | H5 File 对象 | `file` |
250
+ | 自定义文件名 | `file.name` 用于推断扩展名 |
251
+
252
+ 未指定 `key` 时会自动生成:
253
+
254
+ ```text
255
+ &lt;path&gt;&lt;yyyymmddhhMMss&gt;&lt;guid&gt;.&lt;ext&gt;
256
+ ```
257
+
258
+ ## 图片压缩 URL
259
+
260
+ ```ts
261
+ const url = cos.compress(originUrl, '200x');
262
+ const cutUrl = cos.compress(originUrl, '200x200', 'cut');
263
+ ```
264
+
265
+ 实现基于腾讯云 COS `imageMogr2` 参数:
266
+
267
+ ```text
268
+ imageMogr2/&lt;type&gt;/&lt;rule&gt;/format/webp
269
+ ```
@@ -0,0 +1,89 @@
1
+ # 防抖
2
+
3
+ ::: tip 工具模块
4
+ `@zfqh/uniapp/lib/utils/debounce`
5
+ :::
6
+
7
+ 提供类实例和默认实例,适合搜索输入、表单提交和按钮防重复点击。
8
+
9
+ ## 平台兼容性
10
+
11
+ | App | H5 | 微信小程序 | 其他小程序 | WebView |
12
+ | --- | --- | --- | --- | --- |
13
+ | √ | √ | √ | 视平台 API 而定 | 视运行容器而定 |
14
+
15
+ ## 基本使用
16
+
17
+ ```ts
18
+ import { Debounce, debounce } from '@zfqh/uniapp';
19
+
20
+ // 使用默认实例(简单场景)
21
+ debounce.exec(() => submit(), 300);
22
+
23
+ // 创建独立实例(多个防抖互不干扰)
24
+ const searchDebounce = new Debounce();
25
+ searchDebounce.exec(() => search(keyword), 300);
26
+ ```
27
+
28
+ ## API
29
+
30
+ 发布路径:`@zfqh/uniapp/lib/utils/debounce`
31
+
32
+ | 名称 | 签名/声明 | 说明 |
33
+ | --- | --- | --- |
34
+ | `Debounce` | `export default function Debounce()` | 防抖类,可创建独立实例。 |
35
+ | `debounce` | `export const debounce = new Debounce();` | 默认防抖实例,适合单一防抖场景快捷使用。 |
36
+
37
+ ### exec 方法
38
+
39
+ ```ts
40
+ exec(func: Function, wait?: number, immediate?: boolean): void
41
+ ```
42
+
43
+ | 参数 | 默认值 | 说明 |
44
+ | --- | --- | --- |
45
+ | `func` | - | 要执行的回调函数 |
46
+ | `wait` | `500` | 延迟时间(毫秒) |
47
+ | `immediate` | `false` | 是否立即执行(首次触发立即执行,后续在 wait 内不再触发) |
48
+
49
+ ## 典型场景
50
+
51
+ ### 搜索输入
52
+
53
+ ```ts
54
+ const searchDebounce = new Debounce();
55
+
56
+ function onInput(e) {
57
+ searchDebounce.exec(() => {
58
+ search(e.detail.value);
59
+ }, 300);
60
+ }
61
+ ```
62
+
63
+ ### 表单提交防重复
64
+
65
+ ```ts
66
+ import { debounce } from '@zfqh/uniapp';
67
+
68
+ function onSubmit() {
69
+ debounce.exec(() => {
70
+ submitForm(formData);
71
+ }, 500);
72
+ }
73
+ ```
74
+
75
+ ### 多个独立防抖
76
+
77
+ ```ts
78
+ const searchDebounce = new Debounce();
79
+ const filterDebounce = new Debounce();
80
+
81
+ // 互不影响
82
+ searchDebounce.exec(() => search(keyword), 300);
83
+ filterDebounce.exec(() => applyFilter(filters), 300);
84
+ ```
85
+
86
+ ## 使用建议
87
+
88
+ - `debounce` 为共享实例;多个按钮、输入框或业务动作需要互不影响时,请分别 `new Debounce()`。
89
+
@@ -0,0 +1,78 @@
1
+ # 文件转换
2
+
3
+ ::: tip 工具模块
4
+ `@zfqh/uniapp/lib/utils/file`
5
+ :::
6
+
7
+ 处理 URL、dataURL、base64、File、本地路径之间的互转。
8
+
9
+ ## 平台兼容性
10
+
11
+ | App | H5 | 微信小程序 | 其他小程序 | WebView |
12
+ | --- | --- | --- | --- | --- |
13
+ | √ | √ | √ | 视平台 API 而定 | 视运行容器而定 |
14
+
15
+ ## 基本使用
16
+
17
+ ```ts
18
+ import { urlToBase64, dataUrlToBase64, base64ToFile, pathToBase64, base64ToPath } from '@zfqh/uniapp';
19
+ ```
20
+
21
+ 具体方法、参数语义和返回值以发布包类型为准;下方表格按 `@zfqh/uniapp/lib/utils/file` 的导出整理。
22
+
23
+ ## 使用示例
24
+
25
+ ### 网络图片转 base64
26
+
27
+ ```ts
28
+ // 用于离线缓存图片
29
+ const base64 = await urlToBase64('https://cdn.example.com/avatar.png');
30
+ setStorageSync('cachedAvatar', base64);
31
+
32
+ // 指定 MIME 类型
33
+ const base64 = await urlToBase64(imageUrl, 'image/jpeg');
34
+ ```
35
+
36
+ ### dataURL 提取 base64
37
+
38
+ ```ts
39
+ const dataUrl = 'data:image/png;base64,iVBORw0KGgo...';
40
+ const pureBase64 = dataUrlToBase64(dataUrl); // 'iVBORw0KGgo...'
41
+ ```
42
+
43
+ ### H5 端 base64 转 File
44
+
45
+ ```ts
46
+ // H5 相机拍照后转 File 上传
47
+ const { file } = base64ToFile(base64Data, 'photo.jpg');
48
+ const { url } = await cos.uploadFile(file);
49
+ ```
50
+
51
+ ### 本地路径转 base64
52
+
53
+ ```ts
54
+ // App/小程序端:本地图片转 base64 缓存
55
+ const base64 = await pathToBase64(tempFilePath);
56
+ setStorageSync('offlineImage', base64);
57
+ ```
58
+
59
+ ### base64 写入本地文件
60
+
61
+ ```ts
62
+ // 跨平台:base64 数据写入本地临时文件
63
+ const { path } = await base64ToPath(base64Data, 'report.png');
64
+ // path 可用于 <image :src="path"> 显示
65
+ ```
66
+
67
+ ## API
68
+
69
+ 发布路径:`@zfqh/uniapp/lib/utils/file`
70
+
71
+ | 名称 | 签名/声明 | 说明 |
72
+ | --- | --- | --- |
73
+ | `urlToBase64` | `export function urlToBase64(url, type = 'webp') {` | 把网络图片或平台本地图片读取为 dataURL base64。 |
74
+ | `dataUrlToBase64` | `export function dataUrlToBase64(url = '') {` | 从 dataURL 中截取纯 base64 内容。 |
75
+ | `base64ToFile` | `export function base64ToFile(base64 = '', filename = '') {` | H5 下把 dataURL 转为 File 对象。 |
76
+ | `pathToBase64` | `export function pathToBase64(path: string) {` | 跨 H5/App/小程序把本地路径读取为 dataURL。 |
77
+ | `base64ToPath` | `export function base64ToPath(base64 = '', filename = '') {` | 跨 H5/App/小程序把 dataURL 写入临时本地文件并返回路径。 |
78
+