uview-pro 0.0.14 → 0.0.16

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 (236) hide show
  1. package/changelog.md +232 -223
  2. package/components/u-action-sheet/types.ts +35 -35
  3. package/components/u-action-sheet/u-action-sheet.vue +160 -160
  4. package/components/u-alert-tips/types.ts +39 -39
  5. package/components/u-alert-tips/u-alert-tips.vue +212 -212
  6. package/components/u-avatar/types.ts +34 -34
  7. package/components/u-avatar/u-avatar.vue +193 -193
  8. package/components/u-avatar-cropper/types.ts +23 -23
  9. package/components/u-avatar-cropper/u-avatar-cropper.vue +286 -286
  10. package/components/u-avatar-cropper/weCropper.d.ts +62 -62
  11. package/components/u-avatar-cropper/weCropper.js +1253 -1253
  12. package/components/u-avatar-cropper/weCropper.ts +1255 -1255
  13. package/components/u-back-top/types.ts +39 -39
  14. package/components/u-back-top/u-back-top.vue +125 -125
  15. package/components/u-badge/types.ts +36 -36
  16. package/components/u-badge/u-badge.vue +165 -165
  17. package/components/u-button/types.ts +66 -66
  18. package/components/u-button/u-button.vue +554 -554
  19. package/components/u-calendar/types.ts +63 -63
  20. package/components/u-calendar/u-calendar.vue +592 -592
  21. package/components/u-car-keyboard/types.ts +12 -12
  22. package/components/u-car-keyboard/u-car-keyboard.vue +234 -234
  23. package/components/u-card/types.ts +59 -59
  24. package/components/u-card/u-card.vue +194 -194
  25. package/components/u-cell-group/types.ts +17 -17
  26. package/components/u-cell-group/u-cell-group.vue +50 -50
  27. package/components/u-cell-item/types.ts +54 -54
  28. package/components/u-cell-item/u-cell-item.vue +202 -202
  29. package/components/u-checkbox/types.ts +31 -31
  30. package/components/u-checkbox/u-checkbox.vue +265 -265
  31. package/components/u-checkbox-group/types.ts +32 -32
  32. package/components/u-checkbox-group/u-checkbox-group.vue +79 -79
  33. package/components/u-circle-progress/types.ts +52 -52
  34. package/components/u-circle-progress/u-circle-progress.vue +189 -189
  35. package/components/u-city-select/types.ts +20 -20
  36. package/components/u-city-select/u-city-select.vue +236 -236
  37. package/components/u-col/types.ts +30 -30
  38. package/components/u-col/u-col.vue +123 -123
  39. package/components/u-collapse/types.ts +31 -31
  40. package/components/u-collapse/u-collapse.vue +68 -68
  41. package/components/u-collapse-item/types.ts +25 -25
  42. package/components/u-collapse-item/u-collapse-item.vue +176 -176
  43. package/components/u-column-notice/types.ts +48 -48
  44. package/components/u-column-notice/u-column-notice.vue +176 -176
  45. package/components/u-count-down/types.ts +42 -42
  46. package/components/u-count-down/u-count-down.vue +258 -258
  47. package/components/u-count-to/types.ts +32 -32
  48. package/components/u-count-to/u-count-to.vue +241 -241
  49. package/components/u-divider/types.ts +31 -31
  50. package/components/u-divider/u-divider.vue +121 -121
  51. package/components/u-dropdown/types.ts +32 -32
  52. package/components/u-dropdown/u-dropdown.vue +289 -289
  53. package/components/u-dropdown-item/types.ts +27 -27
  54. package/components/u-dropdown-item/u-dropdown-item.vue +123 -123
  55. package/components/u-empty/types.ts +36 -36
  56. package/components/u-empty/u-empty.vue +88 -88
  57. package/components/u-field/types.ts +69 -69
  58. package/components/u-field/u-field.vue +354 -354
  59. package/components/u-form/types.ts +6 -4
  60. package/components/u-form/u-form.vue +19 -5
  61. package/components/u-form-item/types.ts +2 -2
  62. package/components/u-form-item/u-form-item.vue +7 -6
  63. package/components/u-full-screen/types.ts +14 -14
  64. package/components/u-full-screen/u-full-screen.vue +82 -82
  65. package/components/u-gap/types.ts +18 -18
  66. package/components/u-gap/u-gap.vue +40 -40
  67. package/components/u-grid/types.ts +19 -19
  68. package/components/u-grid/u-grid.vue +93 -93
  69. package/components/u-grid-item/types.ts +16 -16
  70. package/components/u-grid-item/u-grid-item.vue +130 -130
  71. package/components/u-icon/types.ts +62 -62
  72. package/components/u-icon/u-icon.vue +274 -274
  73. package/components/u-image/types.ts +51 -49
  74. package/components/u-image/u-image.vue +222 -218
  75. package/components/u-index-anchor/types.ts +16 -16
  76. package/components/u-index-anchor/u-index-anchor.vue +86 -86
  77. package/components/u-index-list/types.ts +43 -43
  78. package/components/u-index-list/u-index-list.vue +355 -355
  79. package/components/u-input/types.ts +140 -140
  80. package/components/u-input/u-input.vue +255 -255
  81. package/components/u-keyboard/types.ts +40 -40
  82. package/components/u-keyboard/u-keyboard.vue +158 -158
  83. package/components/u-lazy-load/types.ts +37 -37
  84. package/components/u-lazy-load/u-lazy-load.vue +233 -233
  85. package/components/u-line/types.ts +44 -44
  86. package/components/u-line/u-line.vue +59 -59
  87. package/components/u-line-progress/types.ts +58 -58
  88. package/components/u-line-progress/u-line-progress.vue +109 -109
  89. package/components/u-link/types.ts +43 -43
  90. package/components/u-link/u-link.vue +75 -75
  91. package/components/u-loading/types.ts +35 -35
  92. package/components/u-loading/u-loading.vue +90 -90
  93. package/components/u-loading-popup/types.ts +19 -0
  94. package/components/u-loading-popup/u-loading-popup.vue +208 -0
  95. package/components/u-loadmore/types.ts +79 -79
  96. package/components/u-loadmore/u-loadmore.vue +140 -140
  97. package/components/u-mask/types.ts +43 -43
  98. package/components/u-mask/u-mask.vue +106 -106
  99. package/components/u-message-input/types.ts +74 -74
  100. package/components/u-message-input/u-message-input.vue +255 -255
  101. package/components/u-modal/types.ts +118 -118
  102. package/components/u-modal/u-modal.vue +200 -200
  103. package/components/u-navbar/types.ts +103 -103
  104. package/components/u-navbar/u-navbar.vue +226 -226
  105. package/components/u-no-network/image.ts +2 -2
  106. package/components/u-no-network/types.ts +28 -28
  107. package/components/u-no-network/u-no-network.vue +290 -290
  108. package/components/u-notice-bar/types.ts +111 -111
  109. package/components/u-notice-bar/u-notice-bar.vue +174 -174
  110. package/components/u-number-box/types.ts +42 -42
  111. package/components/u-number-box/u-number-box.vue +312 -312
  112. package/components/u-number-keyboard/types.ts +26 -26
  113. package/components/u-number-keyboard/u-number-keyboard.vue +166 -166
  114. package/components/u-picker/types.ts +111 -111
  115. package/components/u-picker/u-picker.vue +637 -637
  116. package/components/u-popup/types.ts +59 -59
  117. package/components/u-popup/u-popup.vue +359 -359
  118. package/components/u-radio/types.ts +25 -25
  119. package/components/u-radio/u-radio.vue +258 -258
  120. package/components/u-radio-group/types.ts +29 -29
  121. package/components/u-radio-group/u-radio-group.vue +98 -98
  122. package/components/u-rate/types.ts +40 -40
  123. package/components/u-rate/u-rate.vue +234 -234
  124. package/components/u-read-more/types.ts +35 -35
  125. package/components/u-read-more/u-read-more.vue +150 -150
  126. package/components/u-row/types.ts +20 -20
  127. package/components/u-row/u-row.vue +87 -87
  128. package/components/u-row-notice/types.ts +39 -39
  129. package/components/u-row-notice/u-row-notice.vue +213 -213
  130. package/components/u-search/types.ts +53 -53
  131. package/components/u-search/u-search.vue +256 -256
  132. package/components/u-section/types.ts +32 -32
  133. package/components/u-section/u-section.vue +125 -125
  134. package/components/u-select/types.ts +43 -43
  135. package/components/u-select/u-select.vue +361 -345
  136. package/components/u-skeleton/types.ts +20 -20
  137. package/components/u-skeleton/u-skeleton.vue +205 -205
  138. package/components/u-slider/types.ts +32 -32
  139. package/components/u-slider/u-slider.vue +238 -238
  140. package/components/u-steps/types.ts +28 -28
  141. package/components/u-steps/u-steps.vue +160 -160
  142. package/components/u-sticky/types.ts +22 -22
  143. package/components/u-sticky/u-sticky.vue +159 -159
  144. package/components/u-subsection/types.ts +36 -36
  145. package/components/u-subsection/u-subsection.vue +328 -328
  146. package/components/u-swipe-action/types.ts +50 -50
  147. package/components/u-swipe-action/u-swipe-action.vue +253 -253
  148. package/components/u-swiper/types.ts +47 -47
  149. package/components/u-swiper/u-swiper.vue +266 -266
  150. package/components/u-switch/types.ts +28 -28
  151. package/components/u-switch/u-switch.vue +128 -128
  152. package/components/u-tabbar/types.ts +36 -36
  153. package/components/u-tabbar/u-tabbar.vue +280 -280
  154. package/components/u-table/types.ts +25 -25
  155. package/components/u-table/u-table.vue +55 -55
  156. package/components/u-tabs/types.ts +51 -51
  157. package/components/u-tabs/u-tabs.vue +284 -284
  158. package/components/u-tabs-swiper/types.ts +53 -53
  159. package/components/u-tabs-swiper/u-tabs-swiper.vue +379 -379
  160. package/components/u-tag/types.ts +37 -37
  161. package/components/u-tag/u-tag.vue +244 -244
  162. package/components/u-td/types.ts +12 -12
  163. package/components/u-td/u-td.vue +69 -69
  164. package/components/u-th/types.ts +12 -12
  165. package/components/u-th/u-th.vue +63 -63
  166. package/components/u-time-line/u-time-line.vue +39 -39
  167. package/components/u-time-line-item/types.ts +14 -14
  168. package/components/u-time-line-item/u-time-line-item.vue +78 -78
  169. package/components/u-toast/types.ts +36 -36
  170. package/components/u-toast/u-toast.vue +233 -233
  171. package/components/u-top-tips/types.ts +14 -14
  172. package/components/u-top-tips/u-top-tips.vue +113 -113
  173. package/components/u-tr/types.ts +8 -8
  174. package/components/u-tr/u-tr.vue +24 -24
  175. package/components/u-upload/types.ts +71 -71
  176. package/components/u-upload/u-upload.vue +545 -545
  177. package/components/u-verification-code/types.ts +22 -22
  178. package/components/u-verification-code/u-verification-code.vue +164 -164
  179. package/components/u-waterfall/types.ts +16 -16
  180. package/components/u-waterfall/u-waterfall.vue +170 -170
  181. package/iconfont.css +910 -910
  182. package/index.scss +22 -22
  183. package/index.ts +202 -202
  184. package/libs/config/config.ts +26 -26
  185. package/libs/config/zIndex.ts +37 -37
  186. package/libs/css/color.scss +155 -155
  187. package/libs/css/common.scss +175 -175
  188. package/libs/css/style.components.scss +6 -6
  189. package/libs/css/style.h5.scss +8 -8
  190. package/libs/css/style.mp.scss +72 -72
  191. package/libs/css/style.nvue.scss +2 -2
  192. package/libs/css/style.vue.scss +175 -175
  193. package/libs/function/$parent.ts +22 -22
  194. package/libs/function/addUnit.ts +13 -13
  195. package/libs/function/color.ts +36 -36
  196. package/libs/function/colorGradient.ts +125 -125
  197. package/libs/function/debounce.ts +28 -28
  198. package/libs/function/deepClone.ts +39 -39
  199. package/libs/function/deepMerge.ts +34 -34
  200. package/libs/function/getParent.ts +58 -58
  201. package/libs/function/getRect.ts +26 -26
  202. package/libs/function/guid.ts +42 -42
  203. package/libs/function/md5.ts +398 -398
  204. package/libs/function/parent.ts +21 -21
  205. package/libs/function/queryParams.ts +60 -60
  206. package/libs/function/random.ts +16 -16
  207. package/libs/function/randomArray.ts +11 -11
  208. package/libs/function/route.ts +118 -118
  209. package/libs/function/sys.ts +15 -15
  210. package/libs/function/test.ts +229 -229
  211. package/libs/function/throttle.ts +31 -31
  212. package/libs/function/timeFormat.ts +54 -54
  213. package/libs/function/timeFrom.ts +48 -48
  214. package/libs/function/toast.ts +14 -14
  215. package/libs/function/trim.ts +21 -21
  216. package/libs/function/type2icon.ts +36 -36
  217. package/libs/hooks/useEmitter.ts +77 -77
  218. package/libs/hooks/useParent.ts +29 -29
  219. package/libs/request/auto-http.ts +76 -76
  220. package/libs/request/index.ts +237 -237
  221. package/libs/request/uni-http.md +156 -156
  222. package/libs/request/uni-http.ts +434 -434
  223. package/libs/store/index.ts +88 -88
  224. package/libs/util/async-validator.d.ts +62 -62
  225. package/libs/util/async-validator.js +1356 -1356
  226. package/libs/util/emitter.ts +112 -112
  227. package/libs/util/mitt.ts +118 -118
  228. package/libs/util/parent.ts +20 -20
  229. package/package.json +107 -107
  230. package/readme.md +231 -237
  231. package/theme.scss +38 -38
  232. package/types/components.d.ts +95 -94
  233. package/types/global.d.ts +221 -208
  234. package/types/ignore-errors.d.ts +30 -30
  235. package/types/index.d.ts +90 -90
  236. package/types/uni-app.d.ts +63 -63
@@ -1,103 +1,103 @@
1
- import type { ExtractPropTypes, PropType } from 'vue';
2
-
3
- /**
4
- * u-navbar 组件 props 类型定义
5
- * @description 自定义导航栏,支持多种样式
6
- */
7
- export const NavbarProps = {
8
- /** 导航栏高度,单位px,非rpx */
9
- height: {
10
- type: [String, Number] as PropType<string | number>,
11
- default: ''
12
- },
13
- /** 返回箭头的颜色 */
14
- backIconColor: {
15
- type: String,
16
- default: '#606266'
17
- },
18
- /** 左边返回的图标 */
19
- backIconName: {
20
- type: String,
21
- default: 'nav-back'
22
- },
23
- /** 左边返回图标的大小,rpx */
24
- backIconSize: {
25
- type: [String, Number] as PropType<string | number>,
26
- default: '44'
27
- },
28
- /** 返回的文字提示 */
29
- backText: {
30
- type: String,
31
- default: ''
32
- },
33
- /** 返回的文字的 样式 */
34
- backTextStyle: {
35
- type: Object as PropType<Record<string, any>>,
36
- default: () => ({ color: '#606266' })
37
- },
38
- /** 导航栏标题 */
39
- title: {
40
- type: String,
41
- default: ''
42
- },
43
- /** 标题的宽度,单位rpx */
44
- titleWidth: {
45
- type: [String, Number] as PropType<string | number>,
46
- default: '250'
47
- },
48
- /** 标题的颜色 */
49
- titleColor: {
50
- type: String,
51
- default: '#606266'
52
- },
53
- /** 标题字体是否加粗 */
54
- titleBold: {
55
- type: Boolean,
56
- default: false
57
- },
58
- /** 标题的字体大小 */
59
- titleSize: {
60
- type: [String, Number] as PropType<string | number>,
61
- default: 32
62
- },
63
- /** 是否显示导航栏左边返回图标和辅助文字 */
64
- isBack: {
65
- type: [Boolean, String] as PropType<boolean | string>,
66
- default: true
67
- },
68
- /** 导航栏背景设置 */
69
- background: {
70
- type: Object as PropType<Record<string, any>>,
71
- default: () => ({ background: '#ffffff' })
72
- },
73
- /** 导航栏是否固定在顶部 */
74
- isFixed: {
75
- type: Boolean,
76
- default: true
77
- },
78
- /** 是否沉浸式,允许fixed定位后导航栏塌陷,仅fixed定位下生效 */
79
- immersive: {
80
- type: Boolean,
81
- default: false
82
- },
83
- /** 是否显示导航栏的下边框 */
84
- borderBottom: {
85
- type: Boolean,
86
- default: true
87
- },
88
- /** 固定在顶部时的z-index值 */
89
- zIndex: {
90
- type: [String, Number] as PropType<string | number>,
91
- default: ''
92
- },
93
- /** 自定义返回逻辑方法 */
94
- customBack: {
95
- type: Function as PropType<() => void>,
96
- default: null
97
- }
98
- };
99
-
100
- /**
101
- * u-navbar 组件 props 类型
102
- */
103
- export type NavbarProps = ExtractPropTypes<typeof NavbarProps>;
1
+ import type { ExtractPropTypes, PropType } from 'vue';
2
+
3
+ /**
4
+ * u-navbar 组件 props 类型定义
5
+ * @description 自定义导航栏,支持多种样式
6
+ */
7
+ export const NavbarProps = {
8
+ /** 导航栏高度,单位px,非rpx */
9
+ height: {
10
+ type: [String, Number] as PropType<string | number>,
11
+ default: ''
12
+ },
13
+ /** 返回箭头的颜色 */
14
+ backIconColor: {
15
+ type: String,
16
+ default: '#606266'
17
+ },
18
+ /** 左边返回的图标 */
19
+ backIconName: {
20
+ type: String,
21
+ default: 'nav-back'
22
+ },
23
+ /** 左边返回图标的大小,rpx */
24
+ backIconSize: {
25
+ type: [String, Number] as PropType<string | number>,
26
+ default: '44'
27
+ },
28
+ /** 返回的文字提示 */
29
+ backText: {
30
+ type: String,
31
+ default: ''
32
+ },
33
+ /** 返回的文字的 样式 */
34
+ backTextStyle: {
35
+ type: Object as PropType<Record<string, any>>,
36
+ default: () => ({ color: '#606266' })
37
+ },
38
+ /** 导航栏标题 */
39
+ title: {
40
+ type: String,
41
+ default: ''
42
+ },
43
+ /** 标题的宽度,单位rpx */
44
+ titleWidth: {
45
+ type: [String, Number] as PropType<string | number>,
46
+ default: '250'
47
+ },
48
+ /** 标题的颜色 */
49
+ titleColor: {
50
+ type: String,
51
+ default: '#606266'
52
+ },
53
+ /** 标题字体是否加粗 */
54
+ titleBold: {
55
+ type: Boolean,
56
+ default: false
57
+ },
58
+ /** 标题的字体大小 */
59
+ titleSize: {
60
+ type: [String, Number] as PropType<string | number>,
61
+ default: 32
62
+ },
63
+ /** 是否显示导航栏左边返回图标和辅助文字 */
64
+ isBack: {
65
+ type: [Boolean, String] as PropType<boolean | string>,
66
+ default: true
67
+ },
68
+ /** 导航栏背景设置 */
69
+ background: {
70
+ type: Object as PropType<Record<string, any>>,
71
+ default: () => ({ background: '#ffffff' })
72
+ },
73
+ /** 导航栏是否固定在顶部 */
74
+ isFixed: {
75
+ type: Boolean,
76
+ default: true
77
+ },
78
+ /** 是否沉浸式,允许fixed定位后导航栏塌陷,仅fixed定位下生效 */
79
+ immersive: {
80
+ type: Boolean,
81
+ default: false
82
+ },
83
+ /** 是否显示导航栏的下边框 */
84
+ borderBottom: {
85
+ type: Boolean,
86
+ default: true
87
+ },
88
+ /** 固定在顶部时的z-index值 */
89
+ zIndex: {
90
+ type: [String, Number] as PropType<string | number>,
91
+ default: ''
92
+ },
93
+ /** 自定义返回逻辑方法 */
94
+ customBack: {
95
+ type: Function as PropType<() => void>,
96
+ default: null
97
+ }
98
+ };
99
+
100
+ /**
101
+ * u-navbar 组件 props 类型
102
+ */
103
+ export type NavbarProps = ExtractPropTypes<typeof NavbarProps>;
@@ -1,226 +1,226 @@
1
- <template>
2
- <view class="">
3
- <view class="u-navbar" :style="navbarStyle" :class="{ 'u-navbar-fixed': props.isFixed, 'u-border-bottom': props.borderBottom }">
4
- <view class="u-status-bar" :style="{ height: statusBarHeight + 'px' }"></view>
5
- <view class="u-navbar-inner" :style="navbarInnerStyle">
6
- <view class="u-back-wrap" v-if="props.isBack" @tap="goBack">
7
- <view class="u-icon-wrap">
8
- <u-icon :name="props.backIconName" :color="props.backIconColor" :size="props.backIconSize"></u-icon>
9
- </view>
10
- <view class="u-icon-wrap u-back-text u-line-1" v-if="props.backText" :style="props.backTextStyle">{{ props.backText }}</view>
11
- </view>
12
- <view class="u-navbar-content-title" v-if="props.title" :style="titleStyle">
13
- <view
14
- class="u-title u-line-1"
15
- :style="{
16
- color: props.titleColor,
17
- fontSize: props.titleSize + 'rpx',
18
- fontWeight: props.titleBold ? 'bold' : 'normal'
19
- }"
20
- >
21
- {{ props.title }}
22
- </view>
23
- </view>
24
- <view class="u-slot-content">
25
- <slot></slot>
26
- </view>
27
- <view class="u-slot-right">
28
- <slot name="right"></slot>
29
- </view>
30
- </view>
31
- </view>
32
- <!-- 解决fixed定位后导航栏塌陷的问题 -->
33
- <view
34
- class="u-navbar-placeholder"
35
- v-if="props.isFixed && !props.immersive"
36
- :style="{ width: '100%', height: Number(navbarHeight) + Number(statusBarHeight) + 'px' }"
37
- ></view>
38
- </view>
39
- </template>
40
-
41
- <script setup lang="ts">
42
- import { ref, computed } from 'vue';
43
- import { $u } from '../..';
44
- import { NavbarProps } from './types';
45
-
46
- defineOptions({ name: 'u-navbar' });
47
-
48
- /**
49
- * navbar 自定义导航栏
50
- * @description 此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用uniapp自带的导航栏。
51
- * @tutorial https://uview-pro.netlify.app/components/navbar.html
52
- * @property {String|Number} height 导航栏高度(不包括状态栏高度在内,内部自动加上),注意这里的单位是px(默认44)
53
- * @property {String} back-icon-color 左边返回图标的颜色(默认#606266)
54
- * @property {String} back-icon-name 左边返回图标的名称,只能为uView自带的图标(默认arrow-left)
55
- * @property {String|Number} back-icon-size 左边返回图标的大小,单位rpx(默认30)
56
- * @property {String} back-text 返回图标右边的辅助提示文字
57
- * @property {Object} back-text-style 返回图标右边的辅助提示文字的样式,对象形式(默认{ color: '#606266' })
58
- * @property {String} title 导航栏标题,如设置为空字符,将会隐藏标题占位区域
59
- * @property {String|Number} title-width 导航栏标题的最大宽度,内容超出会以省略号隐藏,单位rpx(默认250)
60
- * @property {String} title-color 标题的颜色(默认#606266)
61
- * @property {String|Number} title-size 导航栏标题字体大小,单位rpx(默认32)
62
- * @property {Function} custom-back 自定义返回逻辑方法
63
- * @property {String|Number} z-index 固定在顶部时的z-index值(默认980)
64
- * @property {Boolean} is-back 是否显示导航栏左边返回图标和辅助文字(默认true)
65
- * @property {Object} background 导航栏背景设置,见官网说明(默认{ background: '#ffffff' })
66
- * @property {Boolean} is-fixed 导航栏是否固定在顶部(默认true)
67
- * @property {Boolean} immersive 沉浸式,允许fixed定位后导航栏塌陷,仅fixed定位下生效(默认false)
68
- * @property {Boolean} border-bottom 导航栏底部是否显示下边框,如定义了较深的背景颜色,可取消此值(默认true)
69
- * @example <u-navbar back-text="返回" title="剑未配妥,出门已是江湖"></u-navbar>
70
- */
71
- const props = defineProps(NavbarProps);
72
- // 获取系统状态栏的高度
73
- const systemInfo = uni.getSystemInfoSync();
74
- let menuButtonInfo: any = {};
75
- // 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
76
- // #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
77
- menuButtonInfo = uni.getMenuButtonBoundingClientRect();
78
- // #endif
79
-
80
- // 状态栏高度
81
- const statusBarHeight = ref(systemInfo.statusBarHeight);
82
-
83
- // 导航栏内部盒子的样式
84
- const navbarInnerStyle = computed(() => {
85
- let style: Record<string, any> = {};
86
- // 导航栏宽度,如果在小程序下,导航栏宽度为胶囊的左边到屏幕左边的距离
87
- style.height = String(navbarHeight.value) + 'px';
88
- // 如果是各家小程序,导航栏内部的宽度需要减少右边胶囊的宽度
89
- // #ifdef MP
90
- let rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;
91
- style.marginRight = rightButtonWidth + 'px';
92
- // #endif
93
- return style;
94
- });
95
-
96
- // 整个导航栏的样式
97
- const navbarStyle = computed(() => {
98
- let style: Record<string, any> = {};
99
- style.zIndex = props.zIndex ? props.zIndex : $u.zIndex.navbar;
100
- // 合并用户传递的背景色对象
101
- Object.assign(style, props.background);
102
- return style;
103
- });
104
-
105
- // 导航中间的标题的样式
106
- const titleStyle = computed(() => {
107
- let style: Record<string, any> = {};
108
- // #ifndef MP
109
- style.left = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
110
- style.right = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
111
- // #endif
112
- // #ifdef MP
113
- // 此处是为了让标题显示区域即使在小程序有右侧胶囊的情况下也能处于屏幕的中间,是通过绝对定位实现的
114
- let rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;
115
- style.left = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
116
- style.right = rightButtonWidth - (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + rightButtonWidth + 'px';
117
- // #endif
118
- style.width = uni.upx2px(Number(props.titleWidth)) + 'px';
119
- return style;
120
- });
121
-
122
- // 转换字符数值为真正的数值
123
- const navbarHeight = computed(() => {
124
- // #ifdef APP-PLUS || H5
125
- return props.height ? props.height : 44;
126
- // #endif
127
- // #ifdef MP
128
- // 小程序特别处理,让导航栏高度 = 胶囊高度 + 两倍胶囊顶部与状态栏底部的距离之差(相当于同时获得了导航栏底部与胶囊底部的距离)
129
- // 此方法有缺陷,暂不用(会导致少了几个px),采用直接固定值的方式
130
- // return menuButtonInfo.height + (menuButtonInfo.top - this.statusBarHeight) * 2;//导航高度
131
- let height = systemInfo.platform == 'ios' ? 44 : 48;
132
- return props.height ? props.height : height;
133
- // #endif
134
- });
135
-
136
- /**
137
- * 返回按钮点击事件
138
- * 如果自定义了点击返回按钮的函数,则执行,否则执行返回逻辑
139
- */
140
- function goBack() {
141
- if (typeof props.customBack === 'function') {
142
- // 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
143
- // 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
144
- // props.customBack.bind($u.$parent.call(getCurrentInstance()?.proxy))();
145
- props.customBack();
146
- } else {
147
- uni.navigateBack();
148
- }
149
- }
150
- </script>
151
-
152
- <style scoped lang="scss">
153
- @import '../../libs/css/style.components.scss';
154
-
155
- .u-navbar {
156
- width: 100%;
157
- }
158
-
159
- .u-navbar-fixed {
160
- position: fixed;
161
- left: 0;
162
- right: 0;
163
- top: 0;
164
- z-index: 991;
165
- }
166
-
167
- .u-status-bar {
168
- width: 100%;
169
- }
170
-
171
- .u-navbar-inner {
172
- @include vue-flex;
173
- justify-content: space-between;
174
- position: relative;
175
- align-items: center;
176
- }
177
-
178
- .u-back-wrap {
179
- @include vue-flex;
180
- align-items: center;
181
- flex: 1;
182
- flex-grow: 0;
183
- padding: 14rpx 14rpx 14rpx 24rpx;
184
- }
185
-
186
- .u-back-text {
187
- padding-left: 4rpx;
188
- font-size: 30rpx;
189
- }
190
-
191
- .u-navbar-content-title {
192
- @include vue-flex;
193
- align-items: center;
194
- justify-content: center;
195
- flex: 1;
196
- position: absolute;
197
- left: 0;
198
- right: 0;
199
- height: 60rpx;
200
- text-align: center;
201
- flex-shrink: 0;
202
- }
203
-
204
- .u-navbar-centent-slot {
205
- flex: 1;
206
- }
207
-
208
- .u-title {
209
- line-height: 60rpx;
210
- font-size: 32rpx;
211
- flex: 1;
212
- }
213
-
214
- .u-navbar-right {
215
- flex: 1;
216
- @include vue-flex;
217
- align-items: center;
218
- justify-content: flex-end;
219
- }
220
-
221
- .u-slot-content {
222
- flex: 1;
223
- @include vue-flex;
224
- align-items: center;
225
- }
226
- </style>
1
+ <template>
2
+ <view class="">
3
+ <view class="u-navbar" :style="navbarStyle" :class="{ 'u-navbar-fixed': props.isFixed, 'u-border-bottom': props.borderBottom }">
4
+ <view class="u-status-bar" :style="{ height: statusBarHeight + 'px' }"></view>
5
+ <view class="u-navbar-inner" :style="navbarInnerStyle">
6
+ <view class="u-back-wrap" v-if="props.isBack" @tap="goBack">
7
+ <view class="u-icon-wrap">
8
+ <u-icon :name="props.backIconName" :color="props.backIconColor" :size="props.backIconSize"></u-icon>
9
+ </view>
10
+ <view class="u-icon-wrap u-back-text u-line-1" v-if="props.backText" :style="props.backTextStyle">{{ props.backText }}</view>
11
+ </view>
12
+ <view class="u-navbar-content-title" v-if="props.title" :style="titleStyle">
13
+ <view
14
+ class="u-title u-line-1"
15
+ :style="{
16
+ color: props.titleColor,
17
+ fontSize: props.titleSize + 'rpx',
18
+ fontWeight: props.titleBold ? 'bold' : 'normal'
19
+ }"
20
+ >
21
+ {{ props.title }}
22
+ </view>
23
+ </view>
24
+ <view class="u-slot-content">
25
+ <slot></slot>
26
+ </view>
27
+ <view class="u-slot-right">
28
+ <slot name="right"></slot>
29
+ </view>
30
+ </view>
31
+ </view>
32
+ <!-- 解决fixed定位后导航栏塌陷的问题 -->
33
+ <view
34
+ class="u-navbar-placeholder"
35
+ v-if="props.isFixed && !props.immersive"
36
+ :style="{ width: '100%', height: Number(navbarHeight) + Number(statusBarHeight) + 'px' }"
37
+ ></view>
38
+ </view>
39
+ </template>
40
+
41
+ <script setup lang="ts">
42
+ import { ref, computed } from 'vue';
43
+ import { $u } from '../..';
44
+ import { NavbarProps } from './types';
45
+
46
+ defineOptions({ name: 'u-navbar' });
47
+
48
+ /**
49
+ * navbar 自定义导航栏
50
+ * @description 此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用uniapp自带的导航栏。
51
+ * @tutorial https://uview-pro.netlify.app/components/navbar.html
52
+ * @property {String|Number} height 导航栏高度(不包括状态栏高度在内,内部自动加上),注意这里的单位是px(默认44)
53
+ * @property {String} back-icon-color 左边返回图标的颜色(默认#606266)
54
+ * @property {String} back-icon-name 左边返回图标的名称,只能为uView自带的图标(默认arrow-left)
55
+ * @property {String|Number} back-icon-size 左边返回图标的大小,单位rpx(默认30)
56
+ * @property {String} back-text 返回图标右边的辅助提示文字
57
+ * @property {Object} back-text-style 返回图标右边的辅助提示文字的样式,对象形式(默认{ color: '#606266' })
58
+ * @property {String} title 导航栏标题,如设置为空字符,将会隐藏标题占位区域
59
+ * @property {String|Number} title-width 导航栏标题的最大宽度,内容超出会以省略号隐藏,单位rpx(默认250)
60
+ * @property {String} title-color 标题的颜色(默认#606266)
61
+ * @property {String|Number} title-size 导航栏标题字体大小,单位rpx(默认32)
62
+ * @property {Function} custom-back 自定义返回逻辑方法
63
+ * @property {String|Number} z-index 固定在顶部时的z-index值(默认980)
64
+ * @property {Boolean} is-back 是否显示导航栏左边返回图标和辅助文字(默认true)
65
+ * @property {Object} background 导航栏背景设置,见官网说明(默认{ background: '#ffffff' })
66
+ * @property {Boolean} is-fixed 导航栏是否固定在顶部(默认true)
67
+ * @property {Boolean} immersive 沉浸式,允许fixed定位后导航栏塌陷,仅fixed定位下生效(默认false)
68
+ * @property {Boolean} border-bottom 导航栏底部是否显示下边框,如定义了较深的背景颜色,可取消此值(默认true)
69
+ * @example <u-navbar back-text="返回" title="剑未配妥,出门已是江湖"></u-navbar>
70
+ */
71
+ const props = defineProps(NavbarProps);
72
+ // 获取系统状态栏的高度
73
+ const systemInfo = uni.getSystemInfoSync();
74
+ let menuButtonInfo: any = {};
75
+ // 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
76
+ // #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
77
+ menuButtonInfo = uni.getMenuButtonBoundingClientRect();
78
+ // #endif
79
+
80
+ // 状态栏高度
81
+ const statusBarHeight = ref(systemInfo.statusBarHeight);
82
+
83
+ // 导航栏内部盒子的样式
84
+ const navbarInnerStyle = computed(() => {
85
+ let style: Record<string, any> = {};
86
+ // 导航栏宽度,如果在小程序下,导航栏宽度为胶囊的左边到屏幕左边的距离
87
+ style.height = String(navbarHeight.value) + 'px';
88
+ // 如果是各家小程序,导航栏内部的宽度需要减少右边胶囊的宽度
89
+ // #ifdef MP
90
+ let rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;
91
+ style.marginRight = rightButtonWidth + 'px';
92
+ // #endif
93
+ return style;
94
+ });
95
+
96
+ // 整个导航栏的样式
97
+ const navbarStyle = computed(() => {
98
+ let style: Record<string, any> = {};
99
+ style.zIndex = props.zIndex ? props.zIndex : $u.zIndex.navbar;
100
+ // 合并用户传递的背景色对象
101
+ Object.assign(style, props.background);
102
+ return style;
103
+ });
104
+
105
+ // 导航中间的标题的样式
106
+ const titleStyle = computed(() => {
107
+ let style: Record<string, any> = {};
108
+ // #ifndef MP
109
+ style.left = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
110
+ style.right = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
111
+ // #endif
112
+ // #ifdef MP
113
+ // 此处是为了让标题显示区域即使在小程序有右侧胶囊的情况下也能处于屏幕的中间,是通过绝对定位实现的
114
+ let rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;
115
+ style.left = (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + 'px';
116
+ style.right = rightButtonWidth - (systemInfo.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + rightButtonWidth + 'px';
117
+ // #endif
118
+ style.width = uni.upx2px(Number(props.titleWidth)) + 'px';
119
+ return style;
120
+ });
121
+
122
+ // 转换字符数值为真正的数值
123
+ const navbarHeight = computed(() => {
124
+ // #ifdef APP-PLUS || H5
125
+ return props.height ? props.height : 44;
126
+ // #endif
127
+ // #ifdef MP
128
+ // 小程序特别处理,让导航栏高度 = 胶囊高度 + 两倍胶囊顶部与状态栏底部的距离之差(相当于同时获得了导航栏底部与胶囊底部的距离)
129
+ // 此方法有缺陷,暂不用(会导致少了几个px),采用直接固定值的方式
130
+ // return menuButtonInfo.height + (menuButtonInfo.top - this.statusBarHeight) * 2;//导航高度
131
+ let height = systemInfo.platform == 'ios' ? 44 : 48;
132
+ return props.height ? props.height : height;
133
+ // #endif
134
+ });
135
+
136
+ /**
137
+ * 返回按钮点击事件
138
+ * 如果自定义了点击返回按钮的函数,则执行,否则执行返回逻辑
139
+ */
140
+ function goBack() {
141
+ if (typeof props.customBack === 'function') {
142
+ // 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
143
+ // 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
144
+ // props.customBack.bind($u.$parent.call(getCurrentInstance()?.proxy))();
145
+ props.customBack();
146
+ } else {
147
+ uni.navigateBack();
148
+ }
149
+ }
150
+ </script>
151
+
152
+ <style scoped lang="scss">
153
+ @import '../../libs/css/style.components.scss';
154
+
155
+ .u-navbar {
156
+ width: 100%;
157
+ }
158
+
159
+ .u-navbar-fixed {
160
+ position: fixed;
161
+ left: 0;
162
+ right: 0;
163
+ top: 0;
164
+ z-index: 991;
165
+ }
166
+
167
+ .u-status-bar {
168
+ width: 100%;
169
+ }
170
+
171
+ .u-navbar-inner {
172
+ @include vue-flex;
173
+ justify-content: space-between;
174
+ position: relative;
175
+ align-items: center;
176
+ }
177
+
178
+ .u-back-wrap {
179
+ @include vue-flex;
180
+ align-items: center;
181
+ flex: 1;
182
+ flex-grow: 0;
183
+ padding: 14rpx 14rpx 14rpx 24rpx;
184
+ }
185
+
186
+ .u-back-text {
187
+ padding-left: 4rpx;
188
+ font-size: 30rpx;
189
+ }
190
+
191
+ .u-navbar-content-title {
192
+ @include vue-flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ flex: 1;
196
+ position: absolute;
197
+ left: 0;
198
+ right: 0;
199
+ height: 60rpx;
200
+ text-align: center;
201
+ flex-shrink: 0;
202
+ }
203
+
204
+ .u-navbar-centent-slot {
205
+ flex: 1;
206
+ }
207
+
208
+ .u-title {
209
+ line-height: 60rpx;
210
+ font-size: 32rpx;
211
+ flex: 1;
212
+ }
213
+
214
+ .u-navbar-right {
215
+ flex: 1;
216
+ @include vue-flex;
217
+ align-items: center;
218
+ justify-content: flex-end;
219
+ }
220
+
221
+ .u-slot-content {
222
+ flex: 1;
223
+ @include vue-flex;
224
+ align-items: center;
225
+ }
226
+ </style>