@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,369 @@
1
+ # request
2
+
3
+ 业务请求实例,封装 baseURL、header 注入和统一拦截器。发布路径:`@zfqh/uniapp/lib/apis/request`
4
+
5
+ ### 导出
6
+
7
+ | 导出 | 说明 |
8
+ | --- | --- |
9
+ | `GET` | 使用业务请求实例发起 GET 请求。 |
10
+ | `POST` | 使用业务请求实例发起 POST 请求。 |
11
+ | `PUT` | 使用业务请求实例发起 PUT 请求。 |
12
+ | `DELETE` | 使用业务请求实例发起 DELETE 请求。 |
13
+ | `default` | `uni.$uv.http` 请求实例。 |
14
+
15
+ ### 请求实例
16
+
17
+ `@zfqh/uniapp/lib/apis/request` 直接复用 `uni.$uv.http`,不再内部创建新的 `Request` 实例:
18
+
19
+ ```ts
20
+ const request = uni.$uv.http;
21
+ ```
22
+
23
+ 因此业务项目需要先安装并初始化 `@gmcb/uv-ui`,确保 `uni.$uv.http` 可用。
24
+
25
+ ### Header 注入
26
+
27
+ | Header | 来源 | 默认值 |
28
+ | --- | --- | --- |
29
+ | `Authorization` | `uni.$store.state.login.info.token` | 无 |
30
+ | `Tenant-Id` | `uni.$store.state.login.info.tenantId` | `1` |
31
+ | `X-Language` | `uni.$store.state.system.info.appLanguage` 映射到 `LANGUAGE` | 无 |
32
+ | `Channel` | `query.channel` 或 `config.app.channel` | `config.app.channel` |
33
+
34
+ 业务请求的 `baseURL` 来自 `config.api.baseUrl`。
35
+
36
+ ---
37
+
38
+ ## 请求封装指南
39
+
40
+ 请求能力由两层组成:
41
+
42
+ 1. `@zfqh/uniapp/lib/utils/request`:通用请求工厂和通用拦截器。
43
+ 2. `@zfqh/uniapp/lib/apis/request`:业务请求实例,使用 `@gmcb/uv-ui/libs/luch-request` 创建,并注入业务 header。
44
+
45
+ ## 请求方式选择
46
+
47
+ | 方式 | 适用场景 |
48
+ | --- | --- |
49
+ | **`@zfqh/uniapp/lib/apis` 的 GET/POST(推荐)** | 绝大多数业务接口调用,已内置 token 注入、401 退出、日志、header 注入 |
50
+ | `createRequest` 自定义实例 | 需要对接不同后端地址、独立拦截器逻辑、或隔离的请求配置 |
51
+
52
+ 优先使用内置的 `GET/POST/PUT/DELETE`,仅在以下场景考虑 `createRequest`:
53
+
54
+ - 项目需要对接不同的后端地址(不同 baseURL)
55
+ - 需要独立的拦截器逻辑(例如第三方 API)
56
+ - 需要隔离的请求配置
57
+
58
+ ## 直接使用业务请求
59
+
60
+ `@zfqh/uniapp/lib/apis` 会导出业务 `GET/POST/PUT/DELETE`,推荐从聚合入口引用:
61
+
62
+ ```ts
63
+ import { GET, POST, PUT, DELETE } from '@zfqh/uniapp/lib/apis';
64
+ ```
65
+
66
+ 也可以从请求实例文件深度引用:
67
+
68
+ ```ts
69
+ import { GET, POST, PUT, DELETE } from '@zfqh/uniapp/lib/apis/request';
70
+ ```
71
+
72
+ ## 基本使用
73
+
74
+ ```ts
75
+ import { GET, POST, PUT, DELETE } from '@zfqh/uniapp/lib/apis';
76
+
77
+ export const getFamilyList = (data) => GET('/app-api/robot/user-family/getUserFamily', data);
78
+ export const createFamily = (data) => POST('/app-api/robot/user-family/create', data);
79
+ export const updateFamily = (data) => PUT('/app-api/robot/user-family/update', data);
80
+ export const deleteFamily = (id: number) => DELETE('/app-api/robot/user-family/delete?id=:id', { id });
81
+ ```
82
+
83
+ ## 接口用法
84
+
85
+ ### GET
86
+
87
+ 发起 GET 请求,`data` 会作为 query 参数传入。
88
+
89
+ ```ts
90
+ import { GET } from '@zfqh/uniapp/lib/apis';
91
+
92
+ export const getFamilyList = (data: { userId?: string }) =>
93
+ GET('/app-api/robot/user-family/getUserFamily', data);
94
+
95
+ const { data } = await getFamilyList({ userId: '10001' });
96
+ ```
97
+
98
+ | 参数 | 类型 | 必填 | 说明 |
99
+ | --- | --- | --- | --- |
100
+ | `url` | `string` | 是 | 接口路径,支持 `:id`、`/:id` 动态占位。 |
101
+ | `data` | `Record<string, any>` | 否 | query 参数;动态占位字段会先写入 URL,并从 `data` 中删除。 |
102
+ | `options` | `Record<string, any>` | 否 | 透传给底层 `uni.$uv.http.get` 的请求配置,可包含 `custom`。 |
103
+
104
+ | 返回值 | 说明 |
105
+ | --- | --- |
106
+ | `Promise<ApiResponse<T>>` | 成功时 resolve 后端响应对象;响应拦截器要求 `code == 0`。 |
107
+
108
+ ### POST
109
+
110
+ 发起 POST 请求,`data` 会作为请求体传入。
111
+
112
+ ```ts
113
+ import { POST } from '@zfqh/uniapp/lib/apis';
114
+
115
+ export const submitConsult = (data: {
116
+ familyId: string;
117
+ symptomDesc: string;
118
+ }) => POST('/app-api/robot/api/medical/inquirySubmitV2', data);
119
+
120
+ const res = await submitConsult({
121
+ familyId: '10001',
122
+ symptomDesc: '头痛两天',
123
+ });
124
+ ```
125
+
126
+ | 参数 | 类型 | 必填 | 说明 |
127
+ | --- | --- | --- | --- |
128
+ | `url` | `string` | 是 | 接口路径,支持动态占位。 |
129
+ | `data` | `Record<string, any>` | 否 | 请求体数据;动态占位字段会先写入 URL。 |
130
+ | `options` | `Record<string, any>` | 否 | 透传给底层 `uni.$uv.http.post` 的请求配置。 |
131
+
132
+ | 返回值 | 说明 |
133
+ | --- | --- |
134
+ | `Promise<ApiResponse<T>>` | 成功时 resolve 后端响应对象;失败时 reject 统一错误响应。 |
135
+
136
+ ### PUT
137
+
138
+ 发起 PUT 请求,常用于更新业务数据。
139
+
140
+ ```ts
141
+ import { PUT } from '@zfqh/uniapp/lib/apis';
142
+
143
+ export const updateFamily = (data: {
144
+ id: number;
145
+ name: string;
146
+ relation: string;
147
+ }) => PUT('/app-api/robot/user-family/update', data);
148
+
149
+ await updateFamily({
150
+ id: 1,
151
+ name: '张三',
152
+ relation: 'father',
153
+ });
154
+ ```
155
+
156
+ | 参数 | 类型 | 必填 | 说明 |
157
+ | --- | --- | --- | --- |
158
+ | `url` | `string` | 是 | 接口路径,支持动态占位。 |
159
+ | `data` | `Record<string, any>` | 否 | 请求体数据。 |
160
+ | `options` | `Record<string, any>` | 否 | 透传给底层 `uni.$uv.http.put` 的请求配置。 |
161
+
162
+ | 返回值 | 说明 |
163
+ | --- | --- |
164
+ | `Promise<ApiResponse<T>>` | 成功时 resolve 后端响应对象。 |
165
+
166
+ ### DELETE
167
+
168
+ 发起 DELETE 请求,常用于删除业务数据。
169
+
170
+ ```ts
171
+ import { DELETE } from '@zfqh/uniapp/lib/apis';
172
+
173
+ export const deleteFamily = (id: number) =>
174
+ DELETE('/app-api/robot/user-family/delete?id=:id', { id });
175
+
176
+ await deleteFamily(1);
177
+ ```
178
+
179
+ | 参数 | 类型 | 必填 | 说明 |
180
+ | --- | --- | --- | --- |
181
+ | `url` | `string` | 是 | 接口路径,支持动态占位。 |
182
+ | `data` | `Record<string, any>` | 否 | 删除参数;动态占位字段会先写入 URL。 |
183
+ | `options` | `Record<string, any>` | 否 | 透传给底层 `uni.$uv.http.delete` 的请求配置。 |
184
+
185
+ | 返回值 | 说明 |
186
+ | --- | --- |
187
+ | `Promise<ApiResponse<T>>` | 成功时 resolve 后端响应对象。 |
188
+
189
+ ### request
190
+
191
+ 默认导出底层业务请求实例,来自 `uni.$uv.http`。通常页面和业务接口不需要直接使用,只有需要访问底层拦截器、默认配置或 uv-ui 原生请求能力时才引用。
192
+
193
+ ```ts
194
+ import request from '@zfqh/uniapp/lib/apis/request';
195
+
196
+ request.setConfig((config) => {
197
+ config.timeout = 30000;
198
+ return config;
199
+ });
200
+ ```
201
+
202
+ | 参数 | 类型 | 必填 | 说明 |
203
+ | --- | --- | --- | --- |
204
+ | 无 | - | - | 默认导出为请求实例对象,不是函数。 |
205
+
206
+ | 返回值 | 说明 |
207
+ | --- | --- |
208
+ | `uni.$uv.http` | uv-ui/luch-request 请求实例。 |
209
+
210
+ ## 返回值结构
211
+
212
+ `GET`、`POST`、`PUT`、`DELETE` 经过响应拦截器后,成功时返回后端响应体:
213
+
214
+ ```ts
215
+ type ApiResponse<T = any> = {
216
+ code: number;
217
+ data: T;
218
+ msg?: string;
219
+ message?: string;
220
+ };
221
+ ```
222
+
223
+ 请求失败、网络异常或响应 `code != 0` 时会 reject。错误对象会包含 `status`、`data.code`、`data.msg`、`config` 等字段,便于业务侧按需处理。
224
+
225
+ ## 动态 URL
226
+
227
+ `formatURL(url, data)` 支持 `:key` 和 `/:key` 占位:
228
+
229
+ ```ts
230
+ GET('/app-api/order/:id/detail', { id: 100, tab: 'pay' });
231
+ // 实际请求: GET /app-api/order/100/detail?tab=pay
232
+ ```
233
+
234
+ 会将 `id` 写入路径,并从 `data` 中删除。剩余字段继续作为 query 或 body。
235
+
236
+ 支持的占位格式:
237
+
238
+ ```ts
239
+ // :key 格式
240
+ GET('/app-api/member/address/delete?id=:id', { id: 1 });
241
+ // → /app-api/member/address/delete?id=1
242
+
243
+ // /:key 格式
244
+ GET('/app-api/order/:id/detail', { id: 100 });
245
+ // → /app-api/order/100/detail
246
+ ```
247
+
248
+ ## 自定义请求配置
249
+
250
+ 每次请求可以传入 `custom` 配置控制拦截器行为:
251
+
252
+ ```ts
253
+ GET('/app-api/demo/check', {}, {
254
+ custom: {
255
+ needLogin: false, // 401 时不自动退出登录
256
+ message: false, // 不弹错误提示
257
+ },
258
+ });
259
+ ```
260
+
261
+ | 配置 | 默认值 | 说明 |
262
+ | --- | --- | --- |
263
+ | `needLogin` | `true` | `401` 时是否触发退出登录。设为 `false` 可跳过自动退出 |
264
+ | `message` | `true` | 响应错误时是否弹 toast 提示 |
265
+
266
+ ::: warning 注意
267
+ `reLogin` 已废弃,请使用 `needLogin` 代替。
268
+ :::
269
+
270
+ ## 通用拦截器
271
+
272
+ `createInterceptors(req)` 会做这些事:
273
+
274
+ | 阶段 | 行为 |
275
+ | --- | --- |
276
+ | request | 当 `log.request` 为 true 时打印请求 URL 和配置。 |
277
+ | request | 如果存在 `uni.$store.state.login.info.token`,注入 `Authorization: Bearer <token>`。 |
278
+ | response | 当 `log.response` 为 true 时打印响应数据。 |
279
+ | response | 当 `data.code != 0` 时将其作为错误响应处理。 |
280
+ | error | 补齐非标准错误的 `response`、`status`、`data.msg`。 |
281
+ | error | `401` 时触发退出登录逻辑。 |
282
+
283
+ `401` 处理依赖:
284
+
285
+ ```ts
286
+ uni.$store.state.login.info.token
287
+ uni.$store.dispatch('logout')
288
+ ```
289
+
290
+ 请求拦截器属于普通 TS 模块,不在 Vue 组件 setup 上下文中,因此这里使用 `uni.$store`。如果是在组件或 hooks 中读取同一份登录态,请使用:
291
+
292
+ ```ts
293
+ import { useStore } from 'vuex';
294
+
295
+ const store = useStore();
296
+ const token = store.state.login.info.token;
297
+ ```
298
+
299
+ 可通过请求自定义配置关闭:
300
+
301
+ ```ts
302
+ GET('/app-api/demo/check', {}, {
303
+ custom: {
304
+ reLogin: false,
305
+ needLogin: false,
306
+ message: false,
307
+ },
308
+ });
309
+ ```
310
+
311
+ ## 业务请求实例
312
+
313
+ `@zfqh/uniapp/lib/apis/request` 直接复用 `uni.$uv.http`:
314
+
315
+ ```ts
316
+ const request = uni.$uv.http;
317
+ ```
318
+
319
+ 业务项目需要先安装并初始化 `@gmcb/uv-ui`,确保 `uni.$uv.http` 可用。
320
+
321
+ `@zfqh/uniapp/lib/apis/request` 会额外注入:
322
+
323
+ | Header | 来源 |
324
+ | --- | --- |
325
+ | `Tenant-Id` | `uni.$store.state.login.info.tenantId`,默认 `1`。 |
326
+ | `X-Language` | `uni.$store.state.system.info.appLanguage` 映射到 `LANGUAGE`。 |
327
+ | `Channel` | `query.channel`,没有 query 渠道时回退到 `config.app.channel`。 |
328
+
329
+ 业务请求的 `baseURL` 来自:
330
+
331
+ ```ts
332
+ config.api.baseUrl
333
+ ```
334
+
335
+ ## 自定义请求实例(备选)
336
+
337
+ 仅在需要不同 baseURL 或独立拦截器时才需要创建自定义请求实例。大多数业务场景直接使用上方的 `GET/POST` 即可。
338
+
339
+ ```ts
340
+ import Request from '@gmcb/uv-ui/libs/luch-request/index';
341
+ import { config, createRequest, createInterceptors } from '@zfqh/uniapp';
342
+
343
+ const request = new Request();
344
+
345
+ createInterceptors(request);
346
+
347
+ // 复用内置 api.baseUrl,也可替换为其他地址
348
+ export const { GET, POST, PUT, DELETE } = createRequest(request, {
349
+ baseURL: config.api.baseUrl,
350
+ });
351
+ ```
352
+
353
+ ## 编写 API 模块
354
+
355
+ 推荐业务 API 模块只声明接口函数,不写页面逻辑:
356
+
357
+ ```ts
358
+ import { GET, POST } from '@zfqh/uniapp/lib/apis';
359
+
360
+ export const getUserInfo = (...args) => GET('/admin-api/system/user/getSimple', ...args);
361
+ export const updateUserInfo = (...args) => POST('/admin-api/system/user/updateInfo', ...args);
362
+ ```
363
+
364
+ 页面中使用:
365
+
366
+ ```ts
367
+ const info = await getUserInfo();
368
+ await updateUserInfo(form);
369
+ ```
@@ -0,0 +1,32 @@
1
+ # api
2
+
3
+ 接口配置。发布路径:`@zfqh/uniapp/lib/configs/api`
4
+
5
+ | 字段 | 类型 | 默认值 | 说明 |
6
+ | --- | --- | --- | --- |
7
+ | `baseUrl` | `string` | `''` | 接口请求基础地址。 |
8
+
9
+ ## 基本使用
10
+
11
+ 在业务项目的环境文件中配置接口域名,`@zfqh/uniapp/lib/apis` 的 `GET/POST` 会自动读取 `config.api.baseUrl` 作为请求基础地址。
12
+
13
+ ```ts
14
+ // env/.env.dev.ts
15
+ import { defineEnvConfig } from '@zfqh/uniapp';
16
+
17
+ export default defineEnvConfig({
18
+ env: {
19
+ name: 'dev',
20
+ },
21
+ api: {
22
+ baseUrl: 'https://dev-api.example.com',
23
+ },
24
+ });
25
+ ```
26
+
27
+ ```ts
28
+ // apis/member.ts
29
+ import { GET } from '@zfqh/uniapp/lib/apis';
30
+
31
+ export const getMemberDetail = (id: string) => GET('/app-api/member/get?id=:id', { id });
32
+ ```
@@ -0,0 +1,43 @@
1
+ # app
2
+
3
+ 应用配置。发布路径:`@zfqh/uniapp/lib/configs/app`
4
+
5
+ 内置预设:
6
+
7
+ | 预设 | 说明 |
8
+ | --- | --- |
9
+ | `app.patient` | 智赋岐黄互联网医院,`channel: 1`。 |
10
+ | `app.doctor` | 智赋岐黄医生端,`channel: 2`。 |
11
+ | `app.merchant` | 智赋岐黄门店端,`channel: 3`。 |
12
+
13
+ | 字段 | 类型 | 默认值 | 说明 |
14
+ | --- | --- | --- | --- |
15
+ | `code` | `string` | `''` | 应用标识,也是自定义协议跳转的协议名前缀。 |
16
+ | `name` | `string` | `''` | 应用显示名称。 |
17
+ | `primary` | `string` | `''` | 应用主题色。 |
18
+ | `appId` | `string` | `''` | App 包名或应用 ID。 |
19
+ | `weappId` | `string` | `''` | 微信小程序 appId。 |
20
+ | `weappOrigId` | `string` | `''` | 微信小程序原始 ID。 |
21
+ | `channel` | `number` | `0` | 业务渠道标识。 |
22
+
23
+ ## 基本使用
24
+
25
+ 患者端和商户端项目通常在根配置中选择内置应用预设,业务请求会用 `channel` 注入请求头。
26
+
27
+ ```ts
28
+ // config.ts
29
+ import { defineConfig } from '@zfqh/uniapp';
30
+ import { app } from '@zfqh/uniapp/lib/configs/app';
31
+
32
+ defineConfig({
33
+ // 患者端使用 app.patient,商户端使用 app.merchant
34
+ app: app.patient,
35
+ });
36
+ ```
37
+
38
+ ```ts
39
+ import { config } from '@zfqh/uniapp';
40
+
41
+ console.log(config.app.name);
42
+ console.log(config.app.channel);
43
+ ```
@@ -0,0 +1,43 @@
1
+ # brand
2
+
3
+ 品牌配置。发布路径:`@zfqh/uniapp/lib/configs/brand`
4
+
5
+ 内置预设:
6
+
7
+ | 预设 | 说明 |
8
+ | --- | --- |
9
+ | `brand.zfqh` | 智赋岐黄品牌配置。 |
10
+
11
+ | 字段 | 类型 | 默认值 | 说明 |
12
+ | --- | --- | --- | --- |
13
+ | `code` | `string` | `''` | 品牌标识。 |
14
+ | `name` | `string` | `''` | 品牌名称。 |
15
+ | `telephone` | `string` | `''` | 企业联系电话。 |
16
+ | `company` | `string` | `''` | 所属公司。 |
17
+ | `primary` | `string` | `''` | 品牌主题色。 |
18
+
19
+ ## 基本使用
20
+
21
+ 业务项目在全局配置中注入品牌预设,页面和 WebView 承载页可以通过 `config.brand` 读取品牌名、主题色和客服电话。
22
+
23
+ ```ts
24
+ // config.ts
25
+ import { defineConfig } from '@zfqh/uniapp';
26
+ import { brand } from '@zfqh/uniapp/lib/configs/brand';
27
+
28
+ defineConfig({
29
+ brand: brand.zfqh,
30
+ });
31
+ ```
32
+
33
+ ```vue
34
+ <template>
35
+ <view :style="{ color: config.brand.primary }">
36
+ {{ config.brand.name }}
37
+ </view>
38
+ </template>
39
+
40
+ <script setup>
41
+ import { config } from '@zfqh/uniapp';
42
+ </script>
43
+ ```
@@ -0,0 +1,35 @@
1
+ # cdn
2
+
3
+ CDN 静态资源配置。发布路径:`@zfqh/uniapp/lib/configs/cdn`
4
+
5
+ | 字段 | 类型 | 默认值 | 说明 |
6
+ | --- | --- | --- | --- |
7
+ | `baseUrl` | `string` | `''` | 静态资源基础路径。 |
8
+ | `staticUrl` | `string` | `''` | 静态站点路径。 |
9
+ | `ossUrl` | `string` | `''` | 阿里 OSS 资源路径。 |
10
+ | `cosUrl` | `string` | `''` | 腾讯 COS 资源路径。 |
11
+
12
+ ## 基本使用
13
+
14
+ 患者端页面常用 `config.cdn.baseUrl` 拼接后端返回的相对资源路径。
15
+
16
+ ```ts
17
+ // env/.env.prod.ts
18
+ import { defineEnvConfig } from '@zfqh/uniapp';
19
+
20
+ export default defineEnvConfig({
21
+ cdn: {
22
+ baseUrl: 'https://static.example.com',
23
+ cosUrl: 'https://cos.example.com',
24
+ },
25
+ });
26
+ ```
27
+
28
+ ```ts
29
+ import { config } from '@zfqh/uniapp';
30
+
31
+ export function normalizeArticleImage(path: string) {
32
+ if (/^https?:\/\//.test(path)) return path;
33
+ return `${config.cdn.baseUrl}/${path.replace(/^\/+/, '')}`;
34
+ }
35
+ ```
@@ -0,0 +1,144 @@
1
+ # color
2
+
3
+ 颜色配置。发布路径:`@zfqh/uniapp/lib/configs/color`
4
+
5
+ | 字段 | 类型 | 默认值 | 说明 |
6
+ | --- | --- | --- | --- |
7
+ | `primary` | `string` | `#00b4c3` | 主题色。 |
8
+ | `success/warning/error/info` | `string` | `-` | 语义色组。 |
9
+ | `bgColor` | `string` | `#f5f5f5` | 页面背景色。 |
10
+ | `mainColor/contentColor/tipsColor/lightColor/disabledColor/borderColor` | `string` | `-` | 文字、占位、禁用和边框颜色。 |
11
+
12
+ ## 基本使用
13
+
14
+ `@zfqh/uniapp` 导出一个运行时 `color` 对象,供组件在 JS 中动态引用主题色。它同时作为工具样式类(`.text-primary`、`.bg-primary` 等)的底层数据源。
15
+
16
+ ```ts
17
+ import { color } from '@zfqh/uniapp';
18
+
19
+ export function getPrimaryButtonStyle() {
20
+ return {
21
+ background: color.primary,
22
+ color: '#fff',
23
+ };
24
+ }
25
+ ```
26
+
27
+ ## 属性一览
28
+
29
+ ### 语义色
30
+
31
+ 每组语义色包含四个变体:基础色、深色(Dark)、高亮色(Light)、禁用色(Disabled)。
32
+
33
+ | 属性 | 默认值 | 说明 |
34
+ | --- | --- | --- |
35
+ | `primary` | `#00b4c3` | 主题色 |
36
+ | `primaryDark` | `#157572` | 主题色(深) |
37
+ | `primaryDisabled` | `#b4e3d9` | 主题色(禁用) |
38
+ | `primaryLight` | `#dff3f9` | 主题色(高亮) |
39
+ | `success` | `#5ac725` | 成功色 |
40
+ | `successDark` | `#53c21d` | 成功色(深) |
41
+ | `successDisabled` | `#a9e08f` | 成功色(禁用) |
42
+ | `successLight` | `#f5fff0` | 成功色(高亮) |
43
+ | `warning` | `#ff9a05` | 警告色 |
44
+ | `warningDark` | `#ed6c04` | 警告色(深) |
45
+ | `warningDisabled` | `#f9d39b` | 警告色(禁用) |
46
+ | `warningLight` | `#fdf6ec` | 警告色(高亮) |
47
+ | `error` | `#ff4d4f` | 错误色 |
48
+ | `errorDark` | `#e45656` | 错误色(深) |
49
+ | `errorDisabled` | `#f7b2b2` | 错误色(禁用) |
50
+ | `errorLight` | `#fef0f0` | 错误色(高亮) |
51
+ | `info` | `#909399` | 信息色 |
52
+ | `infoDark` | `#767a82` | 信息色(深) |
53
+ | `infoDisabled` | `#c4c6c9` | 信息色(禁用) |
54
+ | `infoLight` | `#f4f4f5` | 信息色(高亮) |
55
+
56
+ ### UI 色
57
+
58
+ | 属性 | 默认值 | 说明 |
59
+ | --- | --- | --- |
60
+ | `bgColor` | `#f5f5f5` | 页面背景色 |
61
+ | `mainColor` | `#333333` | 主要文字色 |
62
+ | `contentColor` | `#7a7a7a` | 常规文字色 |
63
+ | `tipsColor` | `#9a9a9a` | 次要文字色 |
64
+ | `lightColor` | `#c0c4cc` | 占位文字色 |
65
+ | `disabledColor` | `#eeeeee` | 禁用文字色 |
66
+ | `borderColor` | `#c8c9cc` | 边框色 |
67
+
68
+ ## 与 defineConfig 的关系
69
+
70
+ 项目通过 `defineConfig` 覆盖主题色后,`color` 对象会自动更新:
71
+
72
+ ```ts
73
+ import { defineConfig } from '@zfqh/uniapp';
74
+
75
+ defineConfig({
76
+ color: {
77
+ primary: '#451709',
78
+ primaryDark: '#451709',
79
+ primaryDisabled: '#D5B9B0',
80
+ primaryLight: '#E8D8C9',
81
+ },
82
+ });
83
+ ```
84
+
85
+ 此后读取 `color.primary` 返回 `'#451709'`,`.text-primary` 和 `.bg-primary` 等工具类也会使用覆盖后的值(通过 SCSS 变量同步)。
86
+
87
+ ## 与工具样式类的关系
88
+
89
+ 工具样式类和 `color` 对象共享同一套颜色值:
90
+
91
+ | 工具类 | 对应属性 |
92
+ | --- | --- |
93
+ | `.text-primary` | `color.primary` |
94
+ | `.bg-primary` | `color.primary` |
95
+ | `.border-primary` | `color.primary` |
96
+ | `.text-main` | `color.mainColor` |
97
+ | `.bg-white` | 固定 `#ffffff` |
98
+
99
+ 工具类适用于模板中的静态样式;`color` 对象适用于 JS 中的动态样式计算。
100
+
101
+ ## 用法示例
102
+
103
+ 动态 style 绑定:
104
+
105
+ ```vue
106
+ <template>
107
+ <view :style="{ color: color.primary }">主题文字</view>
108
+ <view :style="{ backgroundColor: color.bgColor }">背景区域</view>
109
+ </template>
110
+
111
+ <script setup>
112
+ import { color } from '@zfqh/uniapp';
113
+ </script>
114
+ ```
115
+
116
+ 计算属性样式:
117
+
118
+ ```ts
119
+ import { computed } from 'vue';
120
+ import { color } from '@zfqh/uniapp';
121
+
122
+ const headerStyle = computed(() => ({
123
+ backgroundColor: color.primaryLight,
124
+ color: color.primaryDark,
125
+ borderBottom: `1px solid ${color.borderColor}`,
126
+ }));
127
+ ```
128
+
129
+ 传递给第三方组件:
130
+
131
+ ```vue
132
+ <template>
133
+ <uv-button :color="color.primary" :plain-color="color.primaryLight">按钮</uv-button>
134
+ </template>
135
+ ```
136
+
137
+ Canvas / 图表绘制:
138
+
139
+ ```ts
140
+ import { color } from '@zfqh/uniapp';
141
+
142
+ ctx.fillStyle = color.primary;
143
+ ctx.strokeStyle = color.borderColor;
144
+ ```