uview-pro 0.0.17 → 0.0.19

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 (232) hide show
  1. package/changelog.md +283 -249
  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 +267 -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-full-screen/types.ts +14 -14
  60. package/components/u-full-screen/u-full-screen.vue +82 -82
  61. package/components/u-gap/types.ts +18 -18
  62. package/components/u-gap/u-gap.vue +40 -40
  63. package/components/u-grid/types.ts +19 -19
  64. package/components/u-grid/u-grid.vue +93 -93
  65. package/components/u-grid-item/types.ts +16 -16
  66. package/components/u-grid-item/u-grid-item.vue +130 -130
  67. package/components/u-icon/types.ts +62 -62
  68. package/components/u-icon/u-icon.vue +274 -274
  69. package/components/u-image/types.ts +51 -51
  70. package/components/u-image/u-image.vue +222 -222
  71. package/components/u-index-anchor/types.ts +16 -16
  72. package/components/u-index-anchor/u-index-anchor.vue +86 -86
  73. package/components/u-index-list/types.ts +43 -43
  74. package/components/u-index-list/u-index-list.vue +355 -355
  75. package/components/u-input/types.ts +140 -140
  76. package/components/u-input/u-input.vue +255 -255
  77. package/components/u-keyboard/types.ts +40 -40
  78. package/components/u-keyboard/u-keyboard.vue +158 -158
  79. package/components/u-lazy-load/types.ts +37 -37
  80. package/components/u-lazy-load/u-lazy-load.vue +233 -233
  81. package/components/u-line/types.ts +44 -44
  82. package/components/u-line/u-line.vue +59 -59
  83. package/components/u-line-progress/types.ts +58 -58
  84. package/components/u-line-progress/u-line-progress.vue +109 -109
  85. package/components/u-link/types.ts +43 -43
  86. package/components/u-link/u-link.vue +75 -75
  87. package/components/u-loading/types.ts +35 -35
  88. package/components/u-loading/u-loading.vue +90 -90
  89. package/components/u-loading-popup/types.ts +26 -26
  90. package/components/u-loading-popup/u-loading-popup.vue +239 -239
  91. package/components/u-loadmore/types.ts +79 -79
  92. package/components/u-loadmore/u-loadmore.vue +140 -140
  93. package/components/u-mask/types.ts +43 -43
  94. package/components/u-mask/u-mask.vue +106 -106
  95. package/components/u-message-input/types.ts +74 -74
  96. package/components/u-message-input/u-message-input.vue +255 -255
  97. package/components/u-modal/types.ts +118 -118
  98. package/components/u-modal/u-modal.vue +200 -200
  99. package/components/u-navbar/types.ts +103 -103
  100. package/components/u-navbar/u-navbar.vue +226 -226
  101. package/components/u-no-network/image.ts +2 -2
  102. package/components/u-no-network/types.ts +28 -28
  103. package/components/u-no-network/u-no-network.vue +290 -290
  104. package/components/u-notice-bar/types.ts +111 -111
  105. package/components/u-notice-bar/u-notice-bar.vue +174 -174
  106. package/components/u-number-box/types.ts +42 -42
  107. package/components/u-number-box/u-number-box.vue +312 -312
  108. package/components/u-number-keyboard/types.ts +26 -26
  109. package/components/u-number-keyboard/u-number-keyboard.vue +166 -166
  110. package/components/u-picker/types.ts +111 -111
  111. package/components/u-picker/u-picker.vue +637 -637
  112. package/components/u-popup/types.ts +59 -59
  113. package/components/u-popup/u-popup.vue +359 -359
  114. package/components/u-radio/types.ts +25 -25
  115. package/components/u-radio/u-radio.vue +258 -258
  116. package/components/u-radio-group/types.ts +29 -29
  117. package/components/u-radio-group/u-radio-group.vue +98 -98
  118. package/components/u-rate/types.ts +40 -40
  119. package/components/u-rate/u-rate.vue +234 -234
  120. package/components/u-read-more/types.ts +35 -35
  121. package/components/u-read-more/u-read-more.vue +150 -150
  122. package/components/u-row/types.ts +20 -20
  123. package/components/u-row/u-row.vue +87 -87
  124. package/components/u-row-notice/types.ts +39 -39
  125. package/components/u-row-notice/u-row-notice.vue +213 -213
  126. package/components/u-search/types.ts +53 -53
  127. package/components/u-search/u-search.vue +256 -256
  128. package/components/u-section/types.ts +32 -32
  129. package/components/u-section/u-section.vue +125 -125
  130. package/components/u-select/types.ts +43 -43
  131. package/components/u-select/u-select.vue +361 -361
  132. package/components/u-skeleton/types.ts +20 -20
  133. package/components/u-skeleton/u-skeleton.vue +205 -205
  134. package/components/u-slider/types.ts +32 -32
  135. package/components/u-slider/u-slider.vue +238 -238
  136. package/components/u-steps/types.ts +28 -28
  137. package/components/u-steps/u-steps.vue +160 -160
  138. package/components/u-sticky/types.ts +22 -22
  139. package/components/u-sticky/u-sticky.vue +159 -159
  140. package/components/u-subsection/types.ts +36 -36
  141. package/components/u-subsection/u-subsection.vue +328 -328
  142. package/components/u-swipe-action/types.ts +50 -50
  143. package/components/u-swipe-action/u-swipe-action.vue +253 -253
  144. package/components/u-swiper/types.ts +47 -47
  145. package/components/u-swiper/u-swiper.vue +266 -266
  146. package/components/u-switch/types.ts +28 -28
  147. package/components/u-switch/u-switch.vue +128 -128
  148. package/components/u-tabbar/types.ts +36 -36
  149. package/components/u-tabbar/u-tabbar.vue +280 -280
  150. package/components/u-table/types.ts +25 -25
  151. package/components/u-table/u-table.vue +55 -55
  152. package/components/u-tabs/types.ts +51 -51
  153. package/components/u-tabs/u-tabs.vue +284 -284
  154. package/components/u-tabs-swiper/types.ts +53 -53
  155. package/components/u-tabs-swiper/u-tabs-swiper.vue +379 -379
  156. package/components/u-tag/types.ts +37 -37
  157. package/components/u-tag/u-tag.vue +244 -244
  158. package/components/u-td/types.ts +12 -12
  159. package/components/u-td/u-td.vue +69 -69
  160. package/components/u-th/types.ts +12 -12
  161. package/components/u-th/u-th.vue +63 -63
  162. package/components/u-time-line/u-time-line.vue +39 -39
  163. package/components/u-time-line-item/types.ts +14 -14
  164. package/components/u-time-line-item/u-time-line-item.vue +78 -78
  165. package/components/u-toast/types.ts +36 -36
  166. package/components/u-toast/u-toast.vue +233 -233
  167. package/components/u-top-tips/types.ts +14 -14
  168. package/components/u-top-tips/u-top-tips.vue +113 -113
  169. package/components/u-tr/types.ts +8 -8
  170. package/components/u-tr/u-tr.vue +24 -24
  171. package/components/u-upload/types.ts +71 -71
  172. package/components/u-upload/u-upload.vue +545 -545
  173. package/components/u-verification-code/types.ts +22 -22
  174. package/components/u-verification-code/u-verification-code.vue +164 -164
  175. package/components/u-waterfall/types.ts +16 -16
  176. package/components/u-waterfall/u-waterfall.vue +175 -175
  177. package/iconfont.css +910 -910
  178. package/index.scss +22 -22
  179. package/index.ts +195 -202
  180. package/libs/config/config.ts +26 -26
  181. package/libs/config/zIndex.ts +37 -37
  182. package/libs/css/color.scss +155 -155
  183. package/libs/css/common.scss +175 -175
  184. package/libs/css/style.components.scss +6 -6
  185. package/libs/css/style.h5.scss +8 -8
  186. package/libs/css/style.mp.scss +72 -72
  187. package/libs/css/style.nvue.scss +2 -2
  188. package/libs/css/style.vue.scss +175 -175
  189. package/libs/function/$parent.ts +22 -22
  190. package/libs/function/addUnit.ts +13 -13
  191. package/libs/function/color.ts +36 -36
  192. package/libs/function/colorGradient.ts +125 -125
  193. package/libs/function/debounce.ts +28 -28
  194. package/libs/function/deepClone.ts +39 -39
  195. package/libs/function/deepMerge.ts +34 -34
  196. package/libs/function/getParent.ts +58 -58
  197. package/libs/function/getRect.ts +26 -26
  198. package/libs/function/guid.ts +42 -42
  199. package/libs/function/md5.ts +398 -398
  200. package/libs/function/parent.ts +21 -21
  201. package/libs/function/queryParams.ts +60 -60
  202. package/libs/function/random.ts +16 -16
  203. package/libs/function/randomArray.ts +11 -11
  204. package/libs/function/route.ts +118 -118
  205. package/libs/function/sys.ts +15 -15
  206. package/libs/function/test.ts +229 -229
  207. package/libs/function/throttle.ts +31 -31
  208. package/libs/function/timeFormat.ts +54 -54
  209. package/libs/function/timeFrom.ts +48 -48
  210. package/libs/function/toast.ts +14 -14
  211. package/libs/function/trim.ts +21 -21
  212. package/libs/function/type2icon.ts +36 -36
  213. package/libs/hooks/useEmitter.ts +77 -77
  214. package/libs/hooks/useParent.ts +29 -29
  215. package/libs/request/auto-http.ts +76 -76
  216. package/libs/request/index.ts +223 -237
  217. package/libs/store/index.ts +88 -88
  218. package/libs/util/async-validator.d.ts +62 -62
  219. package/libs/util/async-validator.js +1356 -1356
  220. package/libs/util/emitter.ts +112 -112
  221. package/libs/util/mitt.ts +118 -118
  222. package/libs/util/parent.ts +20 -20
  223. package/package.json +107 -107
  224. package/readme.md +231 -231
  225. package/theme.scss +38 -38
  226. package/types/components.d.ts +95 -95
  227. package/types/global.d.ts +221 -221
  228. package/types/ignore-errors.d.ts +30 -30
  229. package/types/index.d.ts +90 -90
  230. package/types/uni-app.d.ts +63 -63
  231. package/libs/request/uni-http.md +0 -156
  232. package/libs/request/uni-http.ts +0 -434
@@ -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>