|
@@ -1,11 +1,21 @@
|
|
|
<template>
|
|
<template>
|
|
|
<view class="tui-tabs-view" :class="[isFixed?'tui-tabs-fixed':'tui-tabs-relative',unlined?'tui-unlined':'']" :style="{height:height+'rpx',padding:`0 ${padding}rpx`,background:bgColor,top:isFixed?top+'px':'auto'}">
|
|
<view class="tui-tabs-view" :class="[isFixed?'tui-tabs-fixed':'tui-tabs-relative',unlined?'tui-unlined':'']" :style="{height:height+'rpx',padding:`0 ${padding}rpx`,background:bgColor,top:isFixed?top+'px':'auto'}">
|
|
|
- <view v-for="(item,index) in tabs" :key="index" class="tui-tabs-item" :class="{'border-left': borderLeft}" :style="{width:itemWidth}" @tap.stop="swichTabs(index)">
|
|
|
|
|
- <view class="tui-tabs-title" :class="{'tui-tabs-active':currentTab==index,'tui-tabs-disabled':item.disabled}" :style="{color:currentTab==index?selectedColor:color,fontSize:size+'rpx',lineHeight:size+'rpx',fontWeight:bold && currentTab==index?'bold':'normal'}">{{item.name}}</view>
|
|
|
|
|
- <div v-if="item.value">{{ item.value }}</div>
|
|
|
|
|
- </view>
|
|
|
|
|
|
|
+ <div class="item-wrap" :style="{width: isAdd ? `calc(100% - ${addTabWidth + 30}rpx)` : '100%'}">
|
|
|
|
|
+ <view v-for="(item,index) in tabs" :key="index" class="tui-tabs-item" :class="{'border-left': borderLeft}" :style="{width:itemWidth}" @tap.stop="swichTabs(index)">
|
|
|
|
|
+ <view class="tui-tabs-title" :class="{'tui-tabs-active':currentTab==index,'tui-tabs-disabled':item.disabled}" :style="{fontSize:size+'rpx',lineHeight:size+'rpx',fontWeight:bold && currentTab==index?'bold':'normal'}">
|
|
|
|
|
+ <div class="tabs-title">{{item.name}}</div>
|
|
|
|
|
+ <!-- tab value -->
|
|
|
|
|
+ <div class="tabs-value" v-if="item.value">{{ item.value }}</div>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <!-- tab add -->
|
|
|
|
|
+ <div class="tabs-add" v-if="isAdd" :style="{width: `${addTabWidth}rpx`}">
|
|
|
|
|
+ <i class="iconfont iconxiaoxi"></i>
|
|
|
|
|
+ <span>添加</span>
|
|
|
|
|
+ </div>
|
|
|
<view class="tui-tabs-slider" :style="{transform:'translateX('+scrollLeft+'px)',width:sliderWidth+'rpx',height:
|
|
<view class="tui-tabs-slider" :style="{transform:'translateX('+scrollLeft+'px)',width:sliderWidth+'rpx',height:
|
|
|
- sliderHeight+'rpx',borderRadius:sliderRadius,bottom:bottom,background:sliderBgColor,marginBottom:bottom=='50%'?('-'+sliderHeight/2+'rpx'):0}"></view>
|
|
|
|
|
|
|
+ sliderHeight+'rpx',borderRadius:sliderRadius,bottom:bottom,marginBottom:bottom=='50%'?('-'+sliderHeight/2+'rpx'):0}"></view>
|
|
|
</view>
|
|
</view>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -70,11 +80,6 @@ export default {
|
|
|
type: Number,
|
|
type: Number,
|
|
|
default: 6
|
|
default: 6
|
|
|
},
|
|
},
|
|
|
- // 滑块背景颜色
|
|
|
|
|
- sliderBgColor: {
|
|
|
|
|
- type: String,
|
|
|
|
|
- default: '#FF2842'
|
|
|
|
|
- },
|
|
|
|
|
sliderRadius: {
|
|
sliderRadius: {
|
|
|
type: String,
|
|
type: String,
|
|
|
default: '50rpx'
|
|
default: '50rpx'
|
|
@@ -94,11 +99,6 @@ export default {
|
|
|
type: String,
|
|
type: String,
|
|
|
default: '#999'
|
|
default: '#999'
|
|
|
},
|
|
},
|
|
|
- // 选中后字体颜色
|
|
|
|
|
- selectedColor: {
|
|
|
|
|
- type: String,
|
|
|
|
|
- default: '#FF2842'
|
|
|
|
|
- },
|
|
|
|
|
// 字体大小
|
|
// 字体大小
|
|
|
size: {
|
|
size: {
|
|
|
type: Number,
|
|
type: Number,
|
|
@@ -113,6 +113,11 @@ export default {
|
|
|
borderLeft: {
|
|
borderLeft: {
|
|
|
type: Boolean,
|
|
type: Boolean,
|
|
|
default: false
|
|
default: false
|
|
|
|
|
+ },
|
|
|
|
|
+ // 是否有新增按钮
|
|
|
|
|
+ isAdd: {
|
|
|
|
|
+ type: Boolean,
|
|
|
|
|
+ default: false
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
watch: {
|
|
watch: {
|
|
@@ -134,14 +139,21 @@ export default {
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
winWidth: 0,
|
|
winWidth: 0,
|
|
|
- scrollLeft: 0
|
|
|
|
|
|
|
+ scrollLeft: 0,
|
|
|
|
|
+ addTabWidth: 130
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ // addTabWidth() {
|
|
|
|
|
+ // return uni.upx2px(130)
|
|
|
|
|
+ // }
|
|
|
|
|
+ },
|
|
|
methods: {
|
|
methods: {
|
|
|
checkCor: function() {
|
|
checkCor: function() {
|
|
|
|
|
+ let addTabWidth = this.isAdd ? uni.upx2px(this.addTabWidth + 30) : 0
|
|
|
let tabsNum = this.tabs.length
|
|
let tabsNum = this.tabs.length
|
|
|
let padding = (this.winWidth / 750) * this.padding
|
|
let padding = (this.winWidth / 750) * this.padding
|
|
|
- let width = this.winWidth - padding * 2
|
|
|
|
|
|
|
+ let width = this.winWidth - padding * 2 - addTabWidth
|
|
|
let left = (width / tabsNum - (this.winWidth / 750) * this.sliderWidth) / 2 + padding
|
|
let left = (width / tabsNum - (this.winWidth / 750) * this.sliderWidth) / 2 + padding
|
|
|
let scrollLeft = left
|
|
let scrollLeft = left
|
|
|
if (this.currentTab > 0) {
|
|
if (this.currentTab > 0) {
|
|
@@ -166,6 +178,15 @@ export default {
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
|
|
|
+ .tabs-add {
|
|
|
|
|
+ @include disFlex(center, center);
|
|
|
|
|
+ height: 60px;
|
|
|
|
|
+ border-left: 1px solid $borderColor;
|
|
|
|
|
+ padding-left: 30px;
|
|
|
|
|
+ .iconfont {
|
|
|
|
|
+ margin-right: 10px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
.tui-tabs-view {
|
|
.tui-tabs-view {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
@@ -173,7 +194,7 @@ export default {
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
|
z-index: 99;
|
|
z-index: 99;
|
|
|
- box-shadow: 4px 4px 10px #eee;
|
|
|
|
|
|
|
+ box-shadow: 4px 4px 10px #eee;
|
|
|
.tui-tabs-item {
|
|
.tui-tabs-item {
|
|
|
&.border-left {
|
|
&.border-left {
|
|
|
border-left: 2px solid #ddd;
|
|
border-left: 2px solid #ddd;
|
|
@@ -211,6 +232,13 @@ export default {
|
|
|
border-bottom: 0 !important;
|
|
border-bottom: 0 !important;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ .item-wrap {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
.tui-tabs-item {
|
|
.tui-tabs-item {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
@@ -222,15 +250,26 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.tui-tabs-title {
|
|
.tui-tabs-title {
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
|
|
+ // display: flex;
|
|
|
|
|
+ // align-items: center;
|
|
|
|
|
+ // justify-content: center;
|
|
|
position: relative;
|
|
position: relative;
|
|
|
z-index: 2;
|
|
z-index: 2;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ }
|
|
|
|
|
+ .tabs-title {
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ }
|
|
|
|
|
+ .tabs-value {
|
|
|
|
|
+ // @include disFlex(center, center);
|
|
|
|
|
+ font-size: 24px;
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ margin-top: 6px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.tui-tabs-active {
|
|
.tui-tabs-active {
|
|
|
transition: all 0.15s ease-in-out;
|
|
transition: all 0.15s ease-in-out;
|
|
|
|
|
+ color: $mainColor;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.tui-tabs-slider {
|
|
.tui-tabs-slider {
|
|
@@ -239,5 +278,6 @@ export default {
|
|
|
transition: all 0.15s ease-in-out;
|
|
transition: all 0.15s ease-in-out;
|
|
|
z-index: 0;
|
|
z-index: 0;
|
|
|
transform: translateZ(0);
|
|
transform: translateZ(0);
|
|
|
|
|
+ background: $mainColor;
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|