@10yun/cv-mobile-ui 0.5.62 → 0.5.63

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 (67) hide show
  1. package/package.json +1 -1
  2. package/plugins/uni-extend.js +10 -10
  3. package/ui-fireui/components/u-action-sheet/u-action-sheet.vue +46 -16
  4. package/ui-fireui/components/u-alert/u-alert.vue +11 -5
  5. package/ui-fireui/components/u-badge/u-badge.vue +52 -69
  6. package/ui-fireui/components/u-bottom-navigation/u-bottom-navigation.vue +28 -20
  7. package/ui-fireui/components/u-bottom-popup/u-bottom-popup.vue +40 -11
  8. package/ui-fireui/components/u-bubble-popup/u-bubble-popup.vue +3 -6
  9. package/ui-fireui/components/u-button/u-button.vue +262 -259
  10. package/ui-fireui/components/u-calendar/u-calendar.vue +227 -44
  11. package/ui-fireui/components/u-calendar/u-calendar2.js +562 -0
  12. package/ui-fireui/components/u-card/u-card.vue +50 -32
  13. package/ui-fireui/components/u-cascade-selection/u-cascade-selection.vue +197 -74
  14. package/ui-fireui/components/u-circular-progress/u-circular-progress.vue +324 -0
  15. package/ui-fireui/components/u-clipboard2/tui-clipboard.js +53 -0
  16. package/ui-fireui/components/u-collapse/u-collapse.vue +8 -8
  17. package/ui-fireui/components/u-config/index.js +129 -0
  18. package/ui-fireui/components/u-count-down/u-count-down.vue +124 -19
  19. package/ui-fireui/components/u-datetime/u-datetime.vue +416 -176
  20. package/ui-fireui/components/u-divider/u-divider.vue +3 -3
  21. package/ui-fireui/components/u-drawer/u-drawer.vue +55 -12
  22. package/ui-fireui/components/u-dropdown-list/u-dropdown-list.vue +103 -0
  23. package/ui-fireui/components/u-fab/u-fab.vue +344 -0
  24. package/ui-fireui/components/u-footer/u-footer.vue +148 -0
  25. package/ui-fireui/components/u-grid/u-grid.vue +2 -8
  26. package/ui-fireui/components/u-grid-item/u-grid-item.vue +22 -5
  27. package/ui-fireui/components/u-icon/u-icon-new.js +190 -0
  28. package/ui-fireui/components/u-icon/u-icon-new.vue +100 -0
  29. package/ui-fireui/components/u-image-cropper/u-image-cropper.vue +1144 -0
  30. package/ui-fireui/components/u-image-group/u-image-group.vue +164 -0
  31. package/ui-fireui/components/u-keyboard/u-keyboard.vue +3 -2
  32. package/ui-fireui/components/u-keyboard-input/u-keyboard-input.vue +1 -1
  33. package/ui-fireui/components/u-list-cell/u-list-cell.vue +82 -72
  34. package/ui-fireui/components/u-list-view/u-list-view.vue +33 -8
  35. package/ui-fireui/components/u-loading/u-loading.vue +107 -27
  36. package/ui-fireui/components/u-loadmore/u-loadmore.vue +21 -3
  37. package/ui-fireui/components/u-modal/u-modal.vue +140 -176
  38. package/ui-fireui/components/u-navigation-bar/u-navigation-bar.vue +121 -28
  39. package/ui-fireui/components/u-no-data/u-no-data.vue +58 -20
  40. package/ui-fireui/components/u-nomore/u-nomore.vue +5 -4
  41. package/ui-fireui/components/u-numberbox/u-numberbox.vue +88 -45
  42. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.vue +94 -36
  43. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.wxs +27 -17
  44. package/ui-fireui/components/u-rate/u-rate.vue +197 -0
  45. package/ui-fireui/components/u-round-progress/u-round-progress.vue +62 -42
  46. package/ui-fireui/components/u-scroll-top/u-scroll-top.vue +4 -3
  47. package/ui-fireui/components/u-section/u-section.vue +149 -0
  48. package/ui-fireui/components/u-skeleton/u-skeleton.vue +37 -6
  49. package/ui-fireui/components/u-steps/u-steps.vue +110 -27
  50. package/ui-fireui/components/u-sticky/u-sticky.vue +35 -21
  51. package/ui-fireui/components/u-sticky-wxs/u-sticky-wxs.vue +7 -4
  52. package/ui-fireui/components/u-sticky-wxs/u-sticky.wxs +39 -36
  53. package/ui-fireui/components/u-swipe-action/u-swipe-action.vue +76 -19
  54. package/ui-fireui/components/u-tabbar/u-tabbar.vue +71 -38
  55. package/ui-fireui/components/u-tabs/u-tabs.vue +133 -51
  56. package/ui-fireui/components/u-tag/u-tag.vue +109 -226
  57. package/ui-fireui/components/u-time-axis/u-time-axis.vue +1 -1
  58. package/ui-fireui/components/u-timeaxis-item/u-timeaxis-item.vue +1 -1
  59. package/ui-fireui/components/u-tips/u-tips.vue +35 -15
  60. package/ui-fireui/components/u-toast/u-toast.vue +9 -5
  61. package/ui-fireui/components/u-top-dropdown/u-top-dropdown.vue +8 -6
  62. package/ui-fireui/components/u-upload/u-upload-old.vue +462 -0
  63. package/ui-fireui/components/u-upload/u-upload.vue +648 -446
  64. package/ui-fireui/components/u-white-space/u-white-space.vue +68 -0
  65. package/ui-fireui/components/u-wing-blank/u-wing-blank.vue +100 -0
  66. package/uview-plus/libs/ctocode/index.js +1 -0
  67. package/uview-plus/libs/ctocode/richText.js +0 -1
@@ -1,20 +1,33 @@
1
1
  <template>
2
- <view class="up-tabbar" :class="{ 'up-tabbar-fixed': isFixed, 'up-unlined': unlined }" :style="{ background: backgroundColor }">
2
+ <view
3
+ class="up-tabbar"
4
+ :class="{ 'up-tabbar-fixed': isFixed, 'up-unlined': unlined, 'up-backdrop__filter': backdropFilter }"
5
+ :style="{ background: backgroundColor, zIndex: isFixed ? zIndex : 'auto' }"
6
+ >
3
7
  <block v-for="(item, index) in tabBar" :key="index">
4
8
  <view
5
9
  class="up-tabbar-item"
6
10
  :class="{ 'up-item-hump': item.hump }"
7
- :style="{ backgroundColor: item.hump ? backgroundColor : 'none' }"
11
+ :style="{ backgroundColor: item.hump && !backdropFilter ? backgroundColor : 'none' }"
8
12
  @tap="tabbarSwitch(index, item.hump, item.pagePath, item.verify)"
9
13
  >
10
14
  <view class="up-icon-box" :class="{ 'up-tabbar-hump': item.hump }">
11
15
  <image
12
16
  :src="current == index ? item.selectedIconPath : item.iconPath"
13
17
  :class="[item.hump ? '' : 'up-tabbar-icon']"
18
+ v-if="!item.name"
14
19
  ></image>
20
+ <up-icon
21
+ :name="current === index ? item.activeName : item.name"
22
+ :customPrefix="item.customPrefix || ''"
23
+ :size="item.iconSize || iconSize"
24
+ unit="rpx"
25
+ :color="current == index ? getActiveColor : color"
26
+ v-else
27
+ ></up-icon>
15
28
  <view
16
29
  :class="[item.isDot ? 'up-badge-dot' : 'up-badge']"
17
- :style="{ color: badgeColor, backgroundColor: badgeBgColor }"
30
+ :style="{ color: badgeColor, backgroundColor: getBadgeBgColor }"
18
31
  v-if="item.num"
19
32
  >
20
33
  {{ item.isDot ? '' : item.num }}
@@ -23,19 +36,28 @@
23
36
  <view
24
37
  class="up-text-scale"
25
38
  :class="{ 'up-text-hump': item.hump }"
26
- :style="{ color: current == index ? selectedColor : color }"
39
+ :style="{ color: current == index ? getActiveColor : color }"
27
40
  >
28
41
  {{ item.text }}
29
42
  </view>
30
43
  </view>
31
44
  </block>
32
- <view :class="{ 'up-hump-box': hump }" v-if="hump && !unlined"></view>
45
+ <view
46
+ :style="{ background: backgroundColor }"
47
+ :class="{ 'up-hump-box': hump }"
48
+ v-if="hump && !unlined && !backdropFilter"
49
+ ></view>
33
50
  </view>
34
51
  </template>
35
52
 
36
53
  <script>
54
+ // import tuiIcon from '@/components/thorui/up-icon/up-icon.vue'
37
55
  export default {
38
- name: 'fuiTabbar',
56
+ name: 'tuiTabbar',
57
+ emits: ['click'],
58
+ // components:{
59
+ // tuiIcon
60
+ // },
39
61
  props: {
40
62
  //当前索引
41
63
  current: {
@@ -50,7 +72,7 @@ export default {
50
72
  //字体选中颜色
51
73
  selectedColor: {
52
74
  type: String,
53
- default: '#5677FC'
75
+ default: ''
54
76
  },
55
77
  //背景颜色
56
78
  backgroundColor: {
@@ -62,20 +84,15 @@ export default {
62
84
  type: Boolean,
63
85
  default: false
64
86
  },
87
+ iconSize: {
88
+ type: [Number, String],
89
+ default: 52
90
+ },
65
91
  //固定在底部
66
92
  isFixed: {
67
93
  type: Boolean,
68
94
  default: true
69
95
  },
70
- //tabbar
71
- // "pagePath": "/pages/my/my", 页面路径
72
- // "text": "thor", 标题
73
- // "iconPath": "thor_gray.png", 图标地址
74
- // "selectedIconPath": "thor_active.png", 选中图标地址
75
- // "hump": true, 是否为凸起图标
76
- // "num": 2, 角标数量
77
- // "isDot": true, 角标是否为圆点
78
- // "verify": true 是否验证 (如登录)
79
96
  tabBar: {
80
97
  type: Array,
81
98
  default() {
@@ -90,22 +107,36 @@ export default {
90
107
  //角标背景颜色
91
108
  badgeBgColor: {
92
109
  type: String,
93
- default: '#F74D54'
110
+ default: ''
94
111
  },
95
112
  unlined: {
96
113
  type: Boolean,
97
114
  default: false
115
+ },
116
+ //是否开启高斯模糊效果[仅在支持的浏览器有效果]
117
+ backdropFilter: {
118
+ type: Boolean,
119
+ default: false
120
+ },
121
+ //z-index
122
+ zIndex: {
123
+ type: [Number, String],
124
+ default: 9999
98
125
  }
99
126
  },
100
127
  data() {
101
128
  return {};
102
129
  },
103
- watch: {
104
- current() {}
130
+ computed: {
131
+ getActiveColor() {
132
+ return this.selectedColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
133
+ },
134
+ getBadgeBgColor() {
135
+ return this.badgeBgColor || (uni && uni.$tui && uni.$tui.color.pink) || '#f74d54';
136
+ }
105
137
  },
106
138
  methods: {
107
139
  tabbarSwitch(index, hump, pagePath, verify) {
108
- // console.log('current', this.current);
109
140
  this.$emit('click', {
110
141
  index: index,
111
142
  hump: hump,
@@ -127,9 +158,15 @@ export default {
127
158
  position: relative;
128
159
  }
129
160
 
161
+ .up-backdrop__filter {
162
+ /* Safari for macOS & iOS */
163
+ -webkit-backdrop-filter: blur(15px);
164
+ /* Google Chrome */
165
+ backdrop-filter: blur(15px);
166
+ }
167
+
130
168
  .up-tabbar-fixed {
131
169
  position: fixed;
132
- z-index: 9;
133
170
  left: 0;
134
171
  bottom: 0;
135
172
  padding-bottom: constant(safe-area-inset-bottom);
@@ -140,8 +177,9 @@ export default {
140
177
  .up-tabbar::before {
141
178
  content: ' ';
142
179
  width: 100%;
180
+ border-top: 1px solid #b2b2b2;
143
181
  position: absolute;
144
- top: 0;
182
+ top: -1rpx;
145
183
  left: 0;
146
184
  transform: scaleY(0.5) translateZ(0);
147
185
  transform-origin: 0 0;
@@ -156,8 +194,7 @@ export default {
156
194
  text-align: center;
157
195
  align-items: center;
158
196
  flex-direction: column;
159
- /* justify-content: space-between; */
160
- justify-content: center;
197
+ justify-content: space-between;
161
198
  position: relative;
162
199
  padding: 10rpx 0;
163
200
  box-sizing: border-box;
@@ -173,14 +210,14 @@ export default {
173
210
  }
174
211
 
175
212
  .up-tabbar-icon {
176
- width: 44rpx;
177
- height: 44rpx;
213
+ width: 52rpx;
214
+ height: 52rpx;
178
215
  display: block;
179
216
  }
180
217
 
181
218
  .up-hump-box {
182
- width: 88rpx;
183
- height: 78rpx;
219
+ width: 120rpx;
220
+ height: 120rpx;
184
221
  position: absolute;
185
222
  left: 50%;
186
223
  transform: translateX(-50%);
@@ -193,6 +230,7 @@ export default {
193
230
  content: ' ';
194
231
  height: 200%;
195
232
  width: 200%;
233
+ border: 1px solid #b2b2b2;
196
234
  position: absolute;
197
235
  top: 0;
198
236
  left: 0;
@@ -208,13 +246,13 @@ export default {
208
246
  }
209
247
 
210
248
  .up-tabbar-hump {
211
- width: 80rpx;
212
- height: 80rpx;
249
+ width: 100rpx;
250
+ height: 100rpx;
213
251
  position: absolute;
214
252
  left: 50%;
215
253
  -webkit-transform: translateX(-50%) rotate(0deg);
216
254
  transform: translateX(-50%) rotate(0deg);
217
- /* top: -27.5rpx; */
255
+ top: -40rpx;
218
256
  -webkit-transition: all 0.2s linear;
219
257
  transition: all 0.2s linear;
220
258
  border-radius: 50%;
@@ -222,8 +260,8 @@ export default {
222
260
  }
223
261
 
224
262
  .up-tabbar-hump image {
225
- width: 76rpx;
226
- height: 76rpx;
263
+ width: 100rpx;
264
+ height: 100rpx;
227
265
  display: block;
228
266
  }
229
267
 
@@ -271,9 +309,4 @@ export default {
271
309
  right: -4rpx;
272
310
  top: -4rpx;
273
311
  }
274
-
275
- .pic_noTitle {
276
- height: 60rpx;
277
- width: 60rpx;
278
- }
279
312
  </style>
@@ -3,33 +3,44 @@
3
3
  class="up-tabs-view"
4
4
  :class="[isFixed ? 'up-tabs-fixed' : 'up-tabs-relative', unlined ? 'up-unlined' : '']"
5
5
  :style="{
6
+ width: tabsWidth + 'px',
6
7
  height: height + 'rpx',
7
8
  padding: `0 ${padding}rpx`,
8
9
  background: backgroundColor,
9
- top: isFixed ? top + 'px' : 'auto'
10
+ top: isFixed ? top + 'px' : 'auto',
11
+ zIndex: isFixed ? zIndex : 'auto'
10
12
  }"
13
+ v-if="tabsWidth > 0"
11
14
  >
12
15
  <view
13
16
  v-for="(item, index) in tabs"
14
17
  :key="index"
15
18
  class="up-tabs-item"
16
- :style="{ width: itemWidth, borderRight: index < tabs.length - 1 ? borderRight : '' }"
19
+ :style="{ width: getItemWidth, height: height + 'rpx' }"
17
20
  @tap.stop="swichTabs(index)"
18
21
  >
19
22
  <view
20
23
  class="up-tabs-title"
21
- :class="{ 'up-tabs-active': currentTab == index, 'up-tabs-disabled': item.disabled }"
24
+ :class="{ 'up-tabs-disabled': item.disabled }"
22
25
  :style="{
23
- color: currentTab == index ? selectedColor : color,
26
+ color: currentTab == index ? getSelectedColor : color,
24
27
  fontSize: size + 'rpx',
25
- lineHeight: lineHeight + 'rpx',
26
- fontWeight: bold && currentTab == index ? 'bold' : 'normal'
28
+ fontWeight: bold && currentTab == index ? 'bold' : 'normal',
29
+ transform: `scale(${currentTab == index ? scale : 1})`
27
30
  }"
28
31
  >
29
- {{ item.name }}
32
+ {{ item[field] }}
33
+ <view
34
+ :class="[item.isDot ? 'up-badge__dot' : 'up-tabs__badge']"
35
+ :style="{ color: badgeColor, backgroundColor: getBadgeBgColor }"
36
+ v-if="item[badgeField] || item.isDot"
37
+ >
38
+ {{ item.isDot ? '' : item[badgeField] }}
39
+ </view>
30
40
  </view>
31
41
  </view>
32
42
  <view
43
+ v-if="isSlider"
33
44
  class="up-tabs-slider"
34
45
  :style="{
35
46
  transform: 'translateX(' + scrollLeft + 'px)',
@@ -37,7 +48,7 @@
37
48
  height: sliderHeight + 'rpx',
38
49
  borderRadius: sliderRadius,
39
50
  bottom: bottom,
40
- background: sliderBgColor,
51
+ background: getSliderBgColor,
41
52
  marginBottom: bottom == '50%' ? '-' + sliderHeight / 2 + 'rpx' : 0
42
53
  }"
43
54
  ></view>
@@ -46,7 +57,8 @@
46
57
 
47
58
  <script>
48
59
  export default {
49
- name: 'fuiTabs',
60
+ name: 'tuiTabs',
61
+ emits: ['change'],
50
62
  props: {
51
63
  //标签页
52
64
  tabs: {
@@ -55,10 +67,24 @@ export default {
55
67
  return [];
56
68
  }
57
69
  },
70
+ //显示文本字段名称
71
+ field: {
72
+ type: String,
73
+ default: 'name'
74
+ },
75
+ badgeField: {
76
+ type: String,
77
+ default: 'num'
78
+ },
79
+ //tabs宽度,不传值则默认使用windowWidth,单位px
80
+ width: {
81
+ type: [Number, String],
82
+ default: 0
83
+ },
58
84
  //rpx
59
85
  height: {
60
86
  type: Number,
61
- default: 88
87
+ default: 80
62
88
  },
63
89
  //rpx 只对左右padding起作用,上下为0
64
90
  padding: {
@@ -78,15 +104,11 @@ export default {
78
104
  //px
79
105
  top: {
80
106
  type: Number,
81
- // #ifdef APP-PLUS
82
- default: 70,
107
+ // #ifndef H5
108
+ default: 0,
83
109
  // #endif
84
110
  // #ifdef H5
85
- default: 44,
86
- // #endif
87
-
88
- // #ifdef MP
89
- default: 54
111
+ default: 44
90
112
  // #endif
91
113
  },
92
114
  //是否去掉底部线条
@@ -99,6 +121,10 @@ export default {
99
121
  type: Number,
100
122
  default: 0
101
123
  },
124
+ isSlider: {
125
+ type: Boolean,
126
+ default: true
127
+ },
102
128
  //滑块宽度
103
129
  sliderWidth: {
104
130
  type: Number,
@@ -112,7 +138,7 @@ export default {
112
138
  //滑块背景颜色
113
139
  sliderBgColor: {
114
140
  type: String,
115
- default: '#6468D5'
141
+ default: ''
116
142
  },
117
143
  sliderRadius: {
118
144
  type: String,
@@ -123,43 +149,49 @@ export default {
123
149
  type: String,
124
150
  default: '0'
125
151
  },
126
- borderRight: {
127
- type: String,
128
- default: '0'
129
- },
130
152
  //标签页宽度
131
153
  itemWidth: {
132
154
  type: String,
133
- default: '25%'
155
+ default: ''
134
156
  },
135
157
  //字体颜色
136
158
  color: {
137
159
  type: String,
138
- default: '#333333'
160
+ default: '#666'
139
161
  },
140
162
  //选中后字体颜色
141
163
  selectedColor: {
142
164
  type: String,
143
- default: '#6468D5'
165
+ default: ''
144
166
  },
145
167
  //字体大小
146
168
  size: {
147
169
  type: Number,
148
- default: 32
149
- },
150
- lineHeight: {
151
- type: Number,
152
- default: 32
170
+ default: 28
153
171
  },
154
172
  //选中后 是否加粗 ,未选中则无效
155
173
  bold: {
156
174
  type: Boolean,
157
175
  default: false
158
176
  },
159
- // 滑块向左偏移位置
160
- scrollRight: {
161
- type: Number,
162
- default: 0
177
+ //2.3.0+
178
+ scale: {
179
+ type: [Number, String],
180
+ default: 1
181
+ },
182
+ //角标字体颜色
183
+ badgeColor: {
184
+ type: String,
185
+ default: '#fff'
186
+ },
187
+ //角标背景颜色
188
+ badgeBgColor: {
189
+ type: String,
190
+ default: ''
191
+ },
192
+ zIndex: {
193
+ type: [Number, String],
194
+ default: 996
163
195
  }
164
196
  },
165
197
  watch: {
@@ -168,32 +200,52 @@ export default {
168
200
  },
169
201
  tabs() {
170
202
  this.checkCor();
203
+ },
204
+ width(val) {
205
+ this.tabsWidth = val;
206
+ this.checkCor();
207
+ }
208
+ },
209
+ computed: {
210
+ getItemWidth() {
211
+ let width = 100 / (this.tabs.length || 4) + '%';
212
+ return this.itemWidth ? this.itemWidth : width;
213
+ },
214
+ getSliderBgColor() {
215
+ return this.sliderBgColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
216
+ },
217
+ getSelectedColor() {
218
+ return this.selectedColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
219
+ },
220
+ getBadgeBgColor() {
221
+ return this.badgeBgColor || (uni && uni.$tui && uni.$tui.color.pink) || '#f74d54';
171
222
  }
172
223
  },
173
224
  created() {
225
+ // 高度自适应
174
226
  setTimeout(() => {
175
- // 高度自适应
176
227
  uni.getSystemInfo({
177
228
  success: (res) => {
178
229
  this.winWidth = res.windowWidth;
230
+ this.tabsWidth = this.width == 0 ? this.winWidth : Number(this.width);
179
231
  this.checkCor();
180
232
  }
181
233
  });
182
- }, 50);
234
+ }, 0);
183
235
  },
184
236
  data() {
185
237
  return {
186
238
  winWidth: 0,
239
+ tabsWidth: 0,
187
240
  scrollLeft: 0
188
241
  };
189
242
  },
190
243
  methods: {
191
- checkCor() {
244
+ checkCor: function () {
192
245
  let tabsNum = this.tabs.length;
193
- let padding = (this.winWidth / 750) * this.padding;
194
- let width = this.winWidth - padding * 2;
195
- console.log('checkCor', width, tabsNum, this.winWidth, this.sliderWidth, padding);
196
- let left = (width / tabsNum - (this.winWidth / 750) * this.sliderWidth) / 2 + padding;
246
+ let padding = uni.upx2px(Number(this.padding));
247
+ let width = this.tabsWidth - padding * 2;
248
+ let left = (width / tabsNum - uni.upx2px(Number(this.sliderWidth))) / 2 + padding;
197
249
  let scrollLeft = left;
198
250
  if (this.currentTab > 0) {
199
251
  scrollLeft = scrollLeft + (width / tabsNum) * this.currentTab;
@@ -201,14 +253,15 @@ export default {
201
253
  this.scrollLeft = scrollLeft;
202
254
  },
203
255
  // 点击标题切换当前页时改变样式
204
- swichTabs(index) {
256
+ swichTabs: function (index) {
205
257
  let item = this.tabs[index];
206
258
  if (item && item.disabled) return;
207
259
  if (this.currentTab == index) {
208
260
  return false;
209
261
  } else {
210
262
  this.$emit('change', {
211
- index: Number(index)
263
+ index: Number(index),
264
+ item: item
212
265
  });
213
266
  }
214
267
  }
@@ -223,7 +276,6 @@ export default {
223
276
  display: flex;
224
277
  align-items: center;
225
278
  justify-content: space-between;
226
- z-index: 995;
227
279
  }
228
280
 
229
281
  .up-tabs-relative {
@@ -256,6 +308,10 @@ export default {
256
308
  display: flex;
257
309
  align-items: center;
258
310
  justify-content: center;
311
+ overflow: visible;
312
+ /* #ifdef H5 */
313
+ cursor: pointer;
314
+ /* #endif */
259
315
  }
260
316
 
261
317
  .up-tabs-disabled {
@@ -267,18 +323,44 @@ export default {
267
323
  align-items: center;
268
324
  justify-content: center;
269
325
  position: relative;
270
- z-index: 2;
271
- }
272
-
273
- .up-tabs-active {
326
+ z-index: 3;
327
+ overflow: visible;
274
328
  transition: all 0.15s ease-in-out;
275
329
  }
276
330
 
277
331
  .up-tabs-slider {
278
332
  position: absolute;
279
333
  left: 0;
280
- transition: all 0.15s ease-in-out;
281
- z-index: 0;
282
- transform: translateZ(0);
334
+ transition: all 0.3s ease-in-out;
335
+ z-index: 1;
336
+ transform-style: preserve-3d;
337
+ }
338
+
339
+ .up-tabs__badge {
340
+ position: absolute;
341
+ font-size: 24rpx;
342
+ height: 32rpx;
343
+ min-width: 20rpx;
344
+ padding: 0 6rpx;
345
+ border-radius: 40rpx;
346
+ right: 0;
347
+ top: 0;
348
+ transform: translate(88%, -50%);
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: center;
352
+ flex-shrink: 0;
353
+ z-index: 4;
354
+ font-weight: normal !important;
355
+ }
356
+
357
+ .up-badge__dot {
358
+ position: absolute;
359
+ height: 16rpx;
360
+ width: 16rpx;
361
+ border-radius: 50%;
362
+ right: -10rpx;
363
+ top: -10rpx;
364
+ z-index: 4;
283
365
  }
284
366
  </style>