@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,117 @@
1
+ # g-upload 上传
2
+
3
+ ::: tip 组件名
4
+ `g-upload`
5
+
6
+ 发布路径:`@zfqh/uniapp/lib/components/g-upload/g-upload.vue`
7
+ :::
8
+
9
+ 图片/文件上传网格,支持选择、预览、删除、自定义上传、COS 压缩和 v-model:files。
10
+
11
+ ## 平台兼容性
12
+
13
+ | App(vue) | App(nvue) | H5 | 小程序 | Vue 2 | Vue 3 |
14
+ | --- | --- | --- | --- | --- | --- |
15
+ | √ | 依赖源码条件编译 | √ | √ | - | √ |
16
+
17
+ ## 使用前提
18
+
19
+ - 已安装并注册 `@zfqh/uniapp` 插件。
20
+ - 已按 [项目接入](./usage) 配置 easycom,或手动从构建产物导入组件。
21
+ - 尺寸类属性通常支持数字或带单位字符串;数字值会在组件内部通过 `uni.$uv.addUnit` 转成样式单位。
22
+ - 样式类属性中,`customStyle`、`xxxStyle` 接收对象,`customClass`、`xxxClass` 接收 class 字符串。
23
+
24
+ ## 基本使用
25
+
26
+ ```vue
27
+ <template>
28
+ <g-upload
29
+ v-model="formData.tongueFiles"
30
+ size="294rpx"
31
+ close-size="40rpx"
32
+ icon-size="80rpx"
33
+ :col="2"
34
+ :gutter="['24rpx', '32rpx']"
35
+ :count="4"
36
+ :action="uploadFile"
37
+ @choose="onChoose"
38
+ />
39
+ </template>
40
+
41
+ <script setup>
42
+ import { reactive } from 'vue';
43
+
44
+ const formData = reactive({ tongueFiles: [] });
45
+
46
+ async function uploadFile(file) {
47
+ const { url } = await fileApi.upload(file);
48
+ return { url };
49
+ }
50
+
51
+ function onChoose(files) {
52
+ console.log('selected files', files);
53
+ }
54
+ </script>
55
+ ```
56
+
57
+ ## API
58
+
59
+ ### 上传 Props
60
+
61
+ | 属性 | 类型 | 默认值 | 必填 | 说明 |
62
+ | --- | --- | --- | --- | --- |
63
+ | `files` | `Array` | `() => []` | 否 | 文件列表,g-upload 会通过 update:files 回写新数组。 |
64
+ | `size` | `[String, Number]` | `70` | 否 | 组件尺寸。 |
65
+ | `iconSize` | `[String, Number]` | `30` | 否 | 主图标尺寸,数字会按 uni.$uv.addUnit 转成 rpx/px。 |
66
+ | `iconColor` | `String` | `() => color.borderColor` | 否 | icon 颜色。 |
67
+ | `loadingSize` | `[String, Number]` | `20` | 否 | loading 尺寸。 |
68
+ | `col` | `[String, Number]` | `4` | 否 | 列数。 |
69
+ | `count` | `[String, Number]` | `8` | 否 | 最大可选文件数量。 |
70
+ | `disabled` | `Boolean` | `false` | 否 | 是否禁用交互。 |
71
+ | `custom` | `Boolean` | `false` | 否 | 自定义处理函数;存在时组件会优先调用它接管默认动作。 |
72
+ | `border` | `Boolean` | `true` | 否 | 是否显示边框。 |
73
+ | `borderStyle` | `String` | `'solid'` | 否 | 自定义 border 区域 style 对象。 |
74
+ | `borderColor` | `String` | `() => color.borderColor` | 否 | border 颜色。 |
75
+ | `borderRadius` | `[String, Number]` | `4` | 否 | 圆角。 |
76
+ | `customStyle` | `Object` | `() => ({})` | 否 | 最外层自定义 style 对象。 |
77
+ | `itemStyle` | `Object` | `() => ({})` | 否 | 自定义 item 区域 style 对象。 |
78
+ | `gutter` | `[Array, Number, String]` | `() => 8` | 否 | 间距。 |
79
+ | `bgColor` | `String` | `'#fff'` | 否 | 背景颜色。 |
80
+ | `closeSize` | `[String, Number]` | `16` | 否 | close 尺寸。 |
81
+ | `closeColor` | `String` | `() => color.contentColor` | 否 | close 颜色。 |
82
+ | `closeStyle` | `Object` | `() => ({})` | 否 | 自定义 close 区域 style 对象。 |
83
+ | `action` | `Function` | `() => {}` | 否 | 上传地址或上传行为配置。 |
84
+
85
+ ### 上传 Events
86
+
87
+ | 事件 | 说明 |
88
+ | --- | --- |
89
+ | `update:files` | 文件列表变化时触发,用于 v-model:files。 |
90
+ | `choose` | 选择文件完成后触发。 |
91
+
92
+ ### 上传 Slots
93
+
94
+ | 插槽 | 说明 |
95
+ | --- | --- |
96
+ | `default` | 默认内容区域。 |
97
+
98
+ ### 上传 Methods
99
+
100
+ | 方法 | 说明 |
101
+ | --- | --- |
102
+ | `compress(url)` | 对图片 URL 应用 COS 图片处理规则。 |
103
+ | `previewImage({ path, url })` | 预览图片。 |
104
+ | `removeFile(file, index)` | 从文件列表中删除指定文件。 |
105
+ | `chooseSuccess({ tempFiles })` | 处理选择文件成功后的列表合并和上传。 |
106
+ | `chooseImage()` | 组件内部公开方法 chooseImage();通过 ref 调用前需要确认组件平台条件和当前状态。 |
107
+
108
+ ### 上传 Internal State
109
+
110
+ | 类型 | 名称 | 说明 |
111
+ | --- | --- | --- |
112
+ | computed | `_gutter` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
113
+ | computed | `_customStyle` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
114
+ | computed | `_itemStyle` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
115
+ | computed | `_loadingStyle` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
116
+ | computed | `_closeStyle` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
117
+ | data | `list` | 内部响应式状态,通常不建议由外部直接依赖。 |
@@ -0,0 +1,84 @@
1
+ # g-waterfall 瀑布流
2
+
3
+ ::: tip 组件名
4
+ `g-waterfall`
5
+
6
+ 发布路径:`@zfqh/uniapp/lib/components/g-waterfall/g-waterfall.vue`
7
+ :::
8
+
9
+ 双列瀑布流数据分发容器,将 list 按高度/顺序拆到 left/right 插槽。
10
+
11
+ ## 平台兼容性
12
+
13
+ | App(vue) | App(nvue) | H5 | 小程序 | Vue 2 | Vue 3 |
14
+ | --- | --- | --- | --- | --- | --- |
15
+ | √ | 依赖源码条件编译 | √ | √ | - | √ |
16
+
17
+ ## 使用前提
18
+
19
+ - 已安装并注册 `@zfqh/uniapp` 插件。
20
+ - 已按 [项目接入](./usage) 配置 easycom,或手动从构建产物导入组件。
21
+ - 尺寸类属性通常支持数字或带单位字符串;数字值会在组件内部通过 `uni.$uv.addUnit` 转成样式单位。
22
+ - 样式类属性中,`customStyle`、`xxxStyle` 接收对象,`customClass`、`xxxClass` 接收 class 字符串。
23
+
24
+ ## 基本使用
25
+
26
+ ```vue
27
+ <template>
28
+ <g-waterfall :list="goodsList" gutter="24rpx">
29
+ <template #left="{ data }">
30
+ <goods-card v-for="item in data" :key="item.id" :data="item" />
31
+ </template>
32
+
33
+ <template #right="{ data }">
34
+ <goods-card v-for="item in data" :key="item.id" :data="item" />
35
+ </template>
36
+ </g-waterfall>
37
+ </template>
38
+
39
+ <script setup>
40
+ const goodsList = [
41
+ { id: 1, name: '黄芪养生茶', image: 'https://static.example.com/a.png' },
42
+ { id: 2, name: '艾草足浴包', image: 'https://static.example.com/b.png' },
43
+ ];
44
+ </script>
45
+ ```
46
+
47
+ ## API
48
+
49
+ ### 瀑布流 Props
50
+
51
+ | 属性 | 类型 | 默认值 | 必填 | 说明 |
52
+ | --- | --- | --- | --- | --- |
53
+ | `list` | `Array` | `() => []` | 否 | 数据列表。具体 item 字段由组件或字段映射 props 决定。 |
54
+ | `gutter` | `[String, Number]` | `16` | 否 | 间距。 |
55
+ | `props` | `Object` | `() => ({})` | 否 | 组件公开属性 props,用于控制该组件对应的渲染、交互或业务参数。 |
56
+
57
+ ### 瀑布流 Events
58
+
59
+ 无显式组件事件。
60
+
61
+ ### 瀑布流 Slots
62
+
63
+ | 插槽 | 说明 |
64
+ | --- | --- |
65
+ | `left` | 导航栏左侧区域;g-page-container 中可替换返回/首页按钮。 |
66
+ | `right` | 导航栏右侧操作区。 |
67
+
68
+ ### 瀑布流 Methods
69
+
70
+ | 方法 | 说明 |
71
+ | --- | --- |
72
+ | `calc(data)` | 组件内部公开方法 calc(data);通过 ref 调用前需要确认组件平台条件和当前状态。 |
73
+ | `push(list)` | 组件内部公开方法 push(list);通过 ref 调用前需要确认组件平台条件和当前状态。 |
74
+ | `clear()` | 清空内部数据或输入值。 |
75
+ | `update(list)` | 组件内部公开方法 update(list);通过 ref 调用前需要确认组件平台条件和当前状态。 |
76
+
77
+ ### 瀑布流 Internal State
78
+
79
+ | 类型 | 名称 | 说明 |
80
+ | --- | --- | --- |
81
+ | computed | `marginStyle` | 内部计算属性,用于把 props、平台信息或样式配置转换为模板可用值。 |
82
+ | data | `leftList` | 内部响应式状态,通常不建议由外部直接依赖。 |
83
+ | data | `rightList` | 内部响应式状态,通常不建议由外部直接依赖。 |
84
+ | data | `tempList` | 内部响应式状态,通常不建议由外部直接依赖。 |
@@ -0,0 +1,109 @@
1
+ # 组件
2
+
3
+ `@zfqh/uniapp` 提供一组以 `g-` 开头的 uni-app 公共组件,风格上参考 `uv-ui` 文档组织:每个组件都有独立页面,页面内包含组件名、适用平台、基础用法、Props、Events、Slots、Methods 和内部状态说明。
4
+
5
+ ## 使用方式
6
+
7
+ ```json
8
+ {
9
+ "easycom": {
10
+ "autoscan": true,
11
+ "custom": {
12
+ "^g-(.*)": "@zfqh/uniapp/lib/components/g-$1/g-$1.vue"
13
+ }
14
+ }
15
+ }
16
+ ```
17
+
18
+ 配置后可直接在页面中使用:
19
+
20
+ ```vue
21
+ <template>
22
+ <g-page-container title="页面标题">
23
+ <g-search v-model="keyword" @search="loadData" />
24
+ </g-page-container>
25
+ </template>
26
+ ```
27
+
28
+ ## 平台兼容性
29
+
30
+ | App(vue) | App(nvue) | H5 | 小程序 | Vue 2 | Vue 3 |
31
+ | --- | --- | --- | --- | --- | --- |
32
+ | √ | 依赖组件条件编译 | √ | √ | - | √ |
33
+
34
+ ## Store 用法
35
+
36
+ 组件属于 Vue 上下文,业务组件或二次封装组件中读取 Vuex 时请使用组件入口:
37
+
38
+ ```ts
39
+ import { useStore } from 'vuex';
40
+
41
+ const store = useStore();
42
+ ```
43
+
44
+ Options API 组件可使用 `this.$store`。`uni.$store` 主要给请求、导航、权限、webview 消息等普通 TS 模块使用,不建议作为组件 setup 或 hooks 的首选入口。
45
+
46
+ ## 组件分类
47
+
48
+ ### 布局容器
49
+
50
+ | 组件 | 说明 |
51
+ | --- | --- |
52
+ | [`g-container`](./g-container) | 页面基础容器,统一处理背景、内容区、底部固定栏、安全区、加载态和 tabBar 底部间距。 |
53
+ | [`g-page-container`](./g-page-container) | 完整页面骨架,包含导航栏、下拉刷新、滚动区、底部栏、安全区、背景层和返回/首页按钮。 |
54
+ | [`g-refresh-view`](./g-refresh-view) | 滚动刷新容器,封装 scroll-view refresher,并统一下拉状态事件。 |
55
+ | [`g-data-list`](./g-data-list) | 分页数据加载容器,把 request、page/pageSize、加载状态和 loadmore 插槽集中管理。 |
56
+ | [`g-waterfall`](./g-waterfall) | 双列瀑布流数据分发容器,将 list 按高度/顺序拆到 left/right 插槽。 |
57
+
58
+ ### 展示组件
59
+
60
+ | 组件 | 说明 |
61
+ | --- | --- |
62
+ | [`g-icon`](./g-icon) | 图标字体适配组件,统一 type、font、name、size、color、bold 等图标属性。 |
63
+ | [`g-money`](./g-money) | 金额格式化展示组件,把符号、整数、小数、前后缀和字号拆分渲染。 |
64
+ | [`g-dot-text`](./g-dot-text) | 圆点加文本的状态展示组件,可用于标签、图例、提示项和行内说明。 |
65
+ | [`g-more`](./g-more) | “查看更多”行内入口,支持文字、箭头图标、颜色和顶部间距。 |
66
+ | [`g-grid-image`](./g-grid-image) | 固定列数图片网格,负责计算间距、高度、圆角和点击回传。 |
67
+ | [`g-grid-swiper`](./g-grid-swiper) | 宫格轮播组件,把列表按行列切页,支持自定义指示器和点击跳转。 |
68
+ | [`g-render-image`](./g-render-image) | 把页面 DOM/插槽内容渲染成图片并保存或返回路径的分享海报辅助组件。 |
69
+ | [`g-skeleton`](./g-skeleton) | 骨架屏容器,提供统一背景和高度。 |
70
+ | [`g-skeleton-view`](./g-skeleton-view) | 骨架屏块,用于组合出头像、标题、段落等占位结构。 |
71
+ | [`g-polyline-view`](./g-polyline-view) | 简单折线段渲染组件,根据数据点生成多段连线。 |
72
+ | [`g-polyline-chat`](./g-polyline-chat) | 柱状/折线组合趋势视图,用 bars 与 data 渲染聊天或统计类走势图。 |
73
+
74
+ ### 反馈与浮层
75
+
76
+ | 组件 | 说明 |
77
+ | --- | --- |
78
+ | [`g-popup`](./g-popup) | 通用弹窗,封装 uv-popup 的标题、内容、底部按钮、关闭、确认和样式配置。 |
79
+ | [`g-mask`](./g-mask) | 遮罩层组件,支持层级、缩放动画、点击关闭能力和默认插槽内容。 |
80
+ | [`g-float`](./g-float) | 悬浮操作按钮,滚动时可自动淡出,点击后可跳转或抛出 goto 事件。 |
81
+ | [`g-permission-popup`](./g-permission-popup) | 权限申请辅助弹层,监听 requestPermission 事件展示授权原因。 |
82
+ | [`g-back-button`](./g-back-button) | 自定义返回/首页按钮,适合透明导航栏、沉浸式页面或小程序胶囊左侧区域。 |
83
+
84
+ ### 表单与业务
85
+
86
+ | 组件 | 说明 |
87
+ | --- | --- |
88
+ | [`g-search`](./g-search) | 搜索框组件,支持输入、清空、搜索按钮、边框/圆角/占位样式和插槽扩展。 |
89
+ | [`g-checkbox-list`](./g-checkbox-list) | 轻量选择列表,支持单选/多选、禁用、重复点击取消和字段映射。 |
90
+ | [`g-tag-editor`](./g-tag-editor) | 标签输入/搜索/选择编辑器,支持标签模式、输入模式、禁用、分隔符、候选项和自定义列表。 |
91
+ | [`g-upload`](./g-upload) | 图片/文件上传网格,支持选择、预览、删除、自定义上传、COS 压缩和 v-model:files。 |
92
+ | [`g-timer`](./g-timer) | 计时器组件,从 start 起算并每秒抛出格式化时间。 |
93
+
94
+ ### 分享与音视频
95
+
96
+ | 组件 | 说明 |
97
+ | --- | --- |
98
+ | [`g-share-photo`](./g-share-photo) | 保存图片到相册的分享入口,可走默认保存流程或 custom 自定义逻辑。 |
99
+ | [`g-share-view`](./g-share-view) | 分享操作面板,聚合保存图片和微信分享按钮,并展示分享引导。 |
100
+ | [`g-share-weixin`](./g-share-weixin) | 微信分享入口,适配 App/WebView 场景并通过 confirm 事件回传分享数据。 |
101
+ | [`g-trtc`](./g-trtc) | 腾讯实时音视频底层组件,管理 pusher/player、进退房、前后摄像头和音频状态。 |
102
+ | [`g-trtc-room`](./g-trtc-room) | 音视频房间 UI 组件,包装 g-trtc、来电铃声、缩小悬浮和房间头部信息。 |
103
+ | [`g-trtc-tui`](./g-trtc-tui) | 基于腾讯 TUIChatEngine 的通话邀请层,处理接听、挂断、消息监听和房间状态。 |
104
+
105
+ ### 运行时
106
+
107
+ | 组件 | 说明 |
108
+ | --- | --- |
109
+ | [`g-env`](./g-env) | 环境切换入口,主要给 H5/Electron 调试环境使用,用于查看和切换当前 env。 |
@@ -0,0 +1,367 @@
1
+ # 工具样式类
2
+
3
+ `@zfqh/uniapp` 内置一套静态 SCSS 工具类系统,命名风格与 UnoCSS / Tailwind CSS 一致。类名覆盖 Flex 布局、间距、尺寸、文字、背景、边框、定位、透明度、阴影和动画,支持 `px` 和 `rpx` 两种单位。
4
+
5
+ ## 引入方式
6
+
7
+ 在项目全局样式中导入一次即可激活全部工具类。放在 `App.vue` 的 `<style>` 块:
8
+
9
+ ```scss
10
+ @import '@zfqh/uniapp/lib/styles/index.scss';
11
+ ```
12
+
13
+ ## 平台差异
14
+
15
+ `index.scss` 内部使用 uni-app 条件编译区分平台:
16
+
17
+ | 分类 | 全平台 | 仅非 nvue(H5、App-Vue、小程序) |
18
+ | --- | --- | --- |
19
+ | Flex 布局 | — | `.flex`、`.flex-row/col`、`.items-*`、`.justify-*` 等 |
20
+ | 定位 | `.overflow-hidden`、`.top-*`、`.z-*` | `.relative`、`.absolute`、`.fixed`、`.sticky`、`.sticky-top` |
21
+ | 尺寸 | `.w-{size}px/rpx`、`.h-{size}px/rpx` | `.w-full`、`.h-full`、`.w-{vw}`、`.h-{vh}` |
22
+ | 文字 | `.text-{size}px/rpx`、`.text-{color}` | `.truncate`、`.line-clamp-*`、`.text-{8px..11px}`(zoom 缩小) |
23
+ | 背景 | `.bg-{color}` | `.backdrop-blur-*` |
24
+ | 动画 | `.origin-*` | `.transition-all-300` |
25
+
26
+ nvue 平台提供独立的 flex、layout、text 子集,类名相同但实现适配 Weex。
27
+
28
+ ## Flex 布局
29
+
30
+ ::: warning 仅非 nvue 平台
31
+ 以下类在 H5、App-Vue 和小程序端可用,nvue 端有独立 flex 实现。
32
+ :::
33
+
34
+ `.flex` 默认设置为 `display: flex; flex-direction: row; align-items: center`。
35
+
36
+ | 类名 | 效果 |
37
+ | --- | --- |
38
+ | `.flex` | flex 行布局,垂直居中 |
39
+ | `.flex-inline` | inline-flex 行布局,垂直居中 |
40
+ | `.flex-row` / `.flex-row-reverse` | 行方向 |
41
+ | `.flex-col` / `.flex-col-reverse` | 列方向 |
42
+ | `.flex-wrap` / `.flex-nowrap` / `.flex-wrap-reverse` | 换行控制 |
43
+ | `.flex-0` ~ `.flex-5` | `flex: 0` ~ `flex: 5` |
44
+ | `.flex-none` | `flex: 0` |
45
+ | `.items-start` / `.items-center` / `.items-end` / `.items-stretch` / `.items-baseline` | align-items |
46
+ | `.justify-start` / `.justify-center` / `.justify-end` / `.justify-between` / `.justify-around` | justify-content |
47
+
48
+ ## 间距(Margin / Padding)
49
+
50
+ 所有平台可用。支持 `px` 和 `rpx` 两种单位。
51
+
52
+ ### 取值范围
53
+
54
+ | 特殊值 | 循环值 |
55
+ | --- | --- |
56
+ | `0`、`px`(1px) | 2px ~ 160px(步长 2),2rpx ~ 160rpx(步长 2) |
57
+
58
+ ### 命名规则
59
+
60
+ ```text
61
+ .{m|p}{方向}-{值}{单位}
62
+ ```
63
+
64
+ 方向缩写:
65
+
66
+ | 缩写 | 含义 |
67
+ | --- | --- |
68
+ | (无) | 四边 |
69
+ | `x` | 左右 |
70
+ | `y` | 上下 |
71
+ | `t` | 上 |
72
+ | `r` | 右 |
73
+ | `b` | 下 |
74
+ | `l` | 左 |
75
+
76
+ 示例:
77
+
78
+ ```text
79
+ .m-16px → margin: 16px
80
+ .px-24rpx → padding-left: 24rpx; padding-right: 24rpx
81
+ .mt-8px → margin-top: 8px
82
+ .py-0 → padding-top: 0; padding-bottom: 0
83
+ ```
84
+
85
+ ### 负 Margin
86
+
87
+ 仅 margin 支持负值,在值前加 `-` 前缀:
88
+
89
+ ```text
90
+ .-m-16px → margin: -16px
91
+ .-mx-8rpx → margin-left: -8rpx; margin-right: -8rpx
92
+ .-mt-4px → margin-top: -4px
93
+ ```
94
+
95
+ ## 尺寸(Width / Height)
96
+
97
+ ### 全平台
98
+
99
+ | 类名 | 说明 |
100
+ | --- | --- |
101
+ | `.w-0` / `.h-0` | 0 宽高 |
102
+ | `.w-{2~160}px` / `.h-{2~160}px` | px 单位,步长 2 |
103
+ | `.w-{2~160}rpx` / `.h-{2~160}rpx` | rpx 单位,步长 2 |
104
+
105
+ ### 仅非 nvue
106
+
107
+ | 类名 | 说明 |
108
+ | --- | --- |
109
+ | `.w-full` / `.h-full` | `100%` |
110
+ | `.w-{10~100}vw` / `.h-{10~100}vh` | 视口单位,步长 10 |
111
+ | `.box-border` / `.box-content` | box-sizing |
112
+
113
+ ## 文字排版
114
+
115
+ ### 字号
116
+
117
+ | 范围 | 单位 | 说明 |
118
+ | --- | --- | --- |
119
+ | `.text-{12~100}px` | px | 全平台,步长 2 |
120
+ | `.text-{12~100}rpx` | rpx | 全平台,步长 2 |
121
+ | `.text-{8px\|9px\|10px\|11px}` | px(zoom 缩放) | 仅非 nvue,用于小字号 |
122
+ | `.text-{16rpx\|18rpx\|20rpx\|22rpx}` | rpx(zoom 缩放) | 仅非 nvue |
123
+
124
+ ### 语义色
125
+
126
+ `.text-{color}` 系列,颜色值跟随主题配置:
127
+
128
+ | 色组 | 可用类名 |
129
+ | --- | --- |
130
+ | primary | `.text-primary`、`.text-primary-dark`、`.text-primary-light`、`.text-primary-disabled` |
131
+ | warning | `.text-warning`、`.text-warning-dark`、`.text-warning-light`、`.text-warning-disabled` |
132
+ | success | `.text-success`、`.text-success-dark`、`.text-success-light`、`.text-success-disabled` |
133
+ | error | `.text-error`、`.text-error-dark`、`.text-error-light`、`.text-error-disabled` |
134
+ | info | `.text-info`、`.text-info-dark`、`.text-info-light`、`.text-info-disabled` |
135
+ | UI 色 | `.text-main`、`.text-content`、`.text-tips`、`.text-light`、`.text-border`、`.text-disabled` |
136
+ | 基础色 | `.text-white`、`.text-black`、`.text-transparent` |
137
+
138
+ ### 对齐与装饰
139
+
140
+ | 类名 | 效果 |
141
+ | --- | --- |
142
+ | `.text-left` / `.text-center` / `.text-right` | text-align |
143
+ | `.text-ellipsis` / `.text-clip` | text-overflow |
144
+ | `.underline` / `.line-through` / `.no-underline` | text-decoration |
145
+
146
+ ### 字重与行高
147
+
148
+ `.font-{name}` 和 `.font-{weight}`:
149
+
150
+ | 类名 | 值 |
151
+ | --- | --- |
152
+ | `.font-sans` | `system-ui, sans-serif` |
153
+ | `.font-thin` ~ `.font-black` | 100 ~ 900 |
154
+ | `.font-100` ~ `.font-900` | 数字字重 |
155
+ | `.italic` / `.not-italic` | font-style |
156
+ | `.leading-none` / `.leading-tight` / `.leading-snug` / `.leading-normal` / `.leading-relaxed` / `.leading-loose` | 1 / 1.25 / 1.375 / 1.5 / 1.625 / 2 |
157
+
158
+ ### 文本截断(仅非 nvue)
159
+
160
+ | 类名 | 效果 |
161
+ | --- | --- |
162
+ | `.truncate` | 单行截断(overflow ellipsis + nowrap) |
163
+ | `.line-clamp-1` ~ `.line-clamp-5` | 多行截断(-webkit-line-clamp) |
164
+
165
+ ### 换行与空白(仅非 nvue)
166
+
167
+ | 类名 | 效果 |
168
+ | --- | --- |
169
+ | `.break-normal` / `.break-all` / `.break-word` / `.break-keep` | word-break |
170
+ | `.whitespace-normal` / `.whitespace-nowrap` / `.whitespace-pre` / `.whitespace-pre-line` / `.whitespace-pre-wrap` | white-space |
171
+ | `.align-baseline` / `.align-top` / `.align-middle` / `.align-bottom` | vertical-align |
172
+
173
+ ## 背景色
174
+
175
+ `.bg-{color}` 系列,颜色值跟随主题配置:
176
+
177
+ | 类名 | 效果 |
178
+ | --- | --- |
179
+ | `.bg-transparent` / `.bg-white` / `.bg-black` | 基础背景色 |
180
+ | `.bg-primary`、`.bg-primary-dark`、`.bg-primary-light`、`.bg-primary-disabled` | primary 系列 |
181
+ | `.bg-warning`、`.bg-warning-dark`、`.bg-warning-light`、`.bg-warning-disabled` | warning 系列 |
182
+ | `.bg-success`、`.bg-success-dark`、`.bg-success-light`、`.bg-success-disabled` | success 系列 |
183
+ | `.bg-error`、`.bg-error-dark`、`.bg-error-light`、`.bg-error-disabled` | error 系列 |
184
+ | `.bg-info`、`.bg-info-dark`、`.bg-info-light`、`.bg-info-disabled` | info 系列 |
185
+ | `.bg-main`、`.bg-content`、`.bg-tips`、`.bg-light`、`.bg-border` | UI 语义色 |
186
+ | `.bg` | 页面背景色 |
187
+ | `.bg-disabled` | 禁用态背景 |
188
+
189
+ ### 背景模糊(仅非 nvue)
190
+
191
+ | 类名 | 效果 |
192
+ | --- | --- |
193
+ | `.backdrop-blur-0` | `blur(0)` |
194
+ | `.backdrop-blur-{10\|20\|30}px` | px 单位模糊 |
195
+ | `.backdrop-blur-{10\|20\|30}rpx` | rpx 单位模糊 |
196
+
197
+ ## 边框
198
+
199
+ ### 基础边框
200
+
201
+ | 类名 | 效果 |
202
+ | --- | --- |
203
+ | `.border` | 1px solid 边框色 |
204
+ | `.border-half` | 0.5px solid 边框色 |
205
+ | `.border-0` | 无边框 |
206
+ | `.border-t` / `.border-r` / `.border-b` / `.border-l` | 单边 1px solid |
207
+ | `.border-x` / `.border-y` | 双轴 1px solid |
208
+ | `.border-t-0` / `.border-r-0` / `.border-b-0` / `.border-l-0` | 移除单边边框 |
209
+
210
+ ### 边框宽度
211
+
212
+ | 范围 | 说明 |
213
+ | --- | --- |
214
+ | `.border-width-{2\|4\|6\|8}px/rpx` | 四边宽度 |
215
+ | `.border-t-width-{size}`、`.border-r-width-{size}`、`.border-b-width-{size}`、`.border-l-width-{size}` | 单边宽度 |
216
+ | `.border-x-width-{size}`、`.border-y-width-{size}` | 双轴宽度 |
217
+
218
+ ### 边框颜色
219
+
220
+ `.border-{color}`:`primary`、`warning`、`success`、`error`、`info`、`main`、`light`、`content`、`transparent`
221
+
222
+ ### 边框样式
223
+
224
+ `.border-solid`、`.border-dashed`、`.border-dotted`
225
+
226
+ ### 圆角
227
+
228
+ | 范围 | 说明 |
229
+ | --- | --- |
230
+ | `.rounded-0` | 无圆角 |
231
+ | `.rounded-full` | `9999px`(圆形) |
232
+ | `.rounded-{2~100}px/rpx` | 四角圆角,步长 2 |
233
+ | `.rounded-t-{size}`、`.rounded-b-{size}`、`.rounded-l-{size}`、`.rounded-r-{size}` | 两边圆角 |
234
+ | `.rounded-tl-{size}`、`.rounded-tr-{size}`、`.rounded-bl-{size}`、`.rounded-br-{size}` | 单角圆角 |
235
+
236
+ ## 布局与定位
237
+
238
+ ### 全平台
239
+
240
+ | 类名 | 效果 |
241
+ | --- | --- |
242
+ | `.overflow-hidden` | overflow: hidden |
243
+ | `.inset-0` | top/right/bottom/left 全为 0 |
244
+ | `.inset-x-0` / `.inset-y-0` | 双轴归零 |
245
+ | `.top-{0~100}px/rpx` | top 定位,步长 2 |
246
+ | `.right-{0~100}px/rpx` | right 定位 |
247
+ | `.bottom-{0~100}px/rpx` | bottom 定位 |
248
+ | `.left-{0~100}px/rpx` | left 定位 |
249
+ | `.-top-{2~100}px/rpx` 等 | 负值定位 |
250
+ | `.z-0` ~ `.z-10` | z-index |
251
+
252
+ ### 仅非 nvue
253
+
254
+ | 类名 | 效果 |
255
+ | --- | --- |
256
+ | `.relative` | position: relative |
257
+ | `.absolute` | position: absolute |
258
+ | `.fixed` | position: fixed |
259
+ | `.sticky` | position: sticky |
260
+ | `.sticky-top` | sticky + `top: var(--window-top)` + z-index 9 |
261
+ | `.sticky-bottom` | sticky + `bottom: var(--window-bottom)` + z-index 9 |
262
+ | `.overflow-auto` / `.overflow-scroll` | overflow |
263
+
264
+ ## 透明度
265
+
266
+ | 类名 | 值 |
267
+ | --- | --- |
268
+ | `.opacity-0` | 0 |
269
+ | `.opacity-10` ~ `.opacity-100` | 0.1 ~ 1.0,步长 10 |
270
+
271
+ ## 阴影
272
+
273
+ | 类名 | box-shadow |
274
+ | --- | --- |
275
+ | `.shadow-sm` | `0 1px 2px 0 rgba(0, 0, 0, 0.05)` |
276
+ | `.shadow` | `0 1px 3px 0 rgba(0, 0, 0, 0.1)` |
277
+ | `.shadow-md` | `0 4px 6px -1px rgba(0, 0, 0, 0.1)` |
278
+ | `.shadow-lg` | `0 10px 15px -3px rgba(0, 0, 0, 0.1)` |
279
+
280
+ ## 动画与变换
281
+
282
+ ### 变换原点
283
+
284
+ `.origin-{position}`:`center`、`top`、`top-right`、`right`、`bottom-right`、`bottom`、`bottom-left`、`left`、`top-left`
285
+
286
+ ### 过渡(仅非 nvue)
287
+
288
+ | 类名 | 效果 |
289
+ | --- | --- |
290
+ | `.transition-all-300` | `transition: all 300ms` |
291
+
292
+ ## 常用组合示例
293
+
294
+ 卡片布局:
295
+
296
+ ```html
297
+ <view class="flex flex-col p-16px bg-white rounded-8px shadow-sm">
298
+ <text class="text-32px font-semibold text-main">标题</text>
299
+ <text class="text-24px text-content mt-8px">描述内容</text>
300
+ </view>
301
+ ```
302
+
303
+ 居加载中状态:
304
+
305
+ ```html
306
+ <view class="flex justify-center items-center h-200px">
307
+ <text class="text-28px text-tips">加载中...</text>
308
+ </view>
309
+ ```
310
+
311
+ 列表项(头像 + 文字):
312
+
313
+ ```html
314
+ <view class="flex items-center px-16px py-12px">
315
+ <image class="w-80rpx h-80rpx rounded-full" :src="avatar" />
316
+ <view class="flex-1 ml-12px">
317
+ <text class="text-28px text-main truncate">用户名</text>
318
+ <text class="text-24px text-tips">副标题</text>
319
+ </view>
320
+ </view>
321
+ ```
322
+
323
+ 吸顶导航栏:
324
+
325
+ ```html
326
+ <view class="sticky-top bg-white px-16px py-12px">
327
+ <text class="text-32px font-bold text-main">页面标题</text>
328
+ </view>
329
+ ```
330
+
331
+ 表单区域:
332
+
333
+ ```html
334
+ <view class="flex flex-col px-16px py-12px bg-white mt-8px">
335
+ <view class="flex justify-between items-center py-12px border-b">
336
+ <text class="text-28px text-main">标签</text>
337
+ <text class="text-28px text-content">值</text>
338
+ </view>
339
+ </view>
340
+ ```
341
+
342
+ 两列等分布局:
343
+
344
+ ```html
345
+ <view class="flex flex-wrap">
346
+ <view class="w-full flex" v-for="group in groups" :key="group.id">
347
+ <view class="flex-1 p-8px" v-for="item in group.items" :key="item.id">
348
+ <view class="bg-white rounded-8px p-16px">{{ item.name }}</view>
349
+ </view>
350
+ </view>
351
+ </view>
352
+ ```
353
+
354
+ 底部固定操作栏:
355
+
356
+ ```html
357
+ <view class="fixed bottom-0 left-0 right-0 bg-white px-16px py-12px z-5">
358
+ <view class="flex">
359
+ <view class="flex-1 mr-8px bg-error rounded-8px py-12px text-center">
360
+ <text class="text-white text-28px font-medium">取消</text>
361
+ </view>
362
+ <view class="flex-1 bg-primary rounded-8px py-12px text-center">
363
+ <text class="text-white text-28px font-medium">确认</text>
364
+ </view>
365
+ </view>
366
+ </view>
367
+ ```