You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
6.3 KiB
245 lines
6.3 KiB
<template>
|
|
<view class="container999" @touchstart="refreshStart" @touchmove="refreshMove" @touchend="refreshEnd">
|
|
|
|
<!-- 刷新组件需搭配scroll-view使用,并在pages.json中添加 "disableScroll":true-->
|
|
<tabRefresh ref="tabRefresh" @isRefresh='isRefresh'></tabRefresh>
|
|
|
|
<view class='nav'>
|
|
|
|
<!-- 状态栏 -->
|
|
<view :style="{'height':statusBarHeightPx}"></view>
|
|
|
|
<!-- 导航栏 -->
|
|
<view
|
|
:style="{'height':navHeightPx,'width':navWidthPx,'display': 'flex','flex-direction':'row','box-sizing': 'border-box','justify-content': 'space-between'}">
|
|
<view
|
|
:style="{'height':navHeightPx,'display': 'flex','flex-direction':'row','box-sizing': 'border-box'}">
|
|
<image :style="{'height':navHeightPx,'width':iconPx}" mode="aspectFit" :src="backIcon"
|
|
@click="clickBack"></image>
|
|
<text
|
|
:style="{'height':navHeightPx,'line-height':navHeightPx,'font-size':'33rpx','color':'#FFFFFF'}">{{text}}</text>
|
|
</view>
|
|
|
|
<view
|
|
:style="{'height':navHeightPx,'display': 'flex','flex-direction':'row','box-sizing': 'border-box'}">
|
|
<view v-if="useTitleLeftBtn!=0"
|
|
:style="{'height':navHeightPx,'display': 'flex','flex-direction':'row','box-sizing': 'border-box'}"
|
|
@click="clickLeftBtn">
|
|
<image v-if="useTitleLeftBtn == 2" :style="{'height':navHeightPx,'width':navHeightPx}"
|
|
mode="aspectFit" :src="titleLeftBtnSource"></image>
|
|
<text v-if="useTitleLeftBtn == 1"
|
|
:style="{'height':navHeightPx,'line-height':navHeightPx,'font-size':'28rpx','color':'#FFFFFF','padding-left':'20rpx','padding-right':'20rpx'}">{{titleLeftBtnSource}}</text>
|
|
</view>
|
|
<view v-if="useTitleRightBtn!=0"
|
|
:style="{'height':navHeightPx,'display': 'flex','flex-direction':'row','box-sizing': 'border-box'}"
|
|
@click="clickRightBtn">
|
|
<image v-if="useTitleRightBtn==2" :style="{'height':navHeightPx,'width':navHeightPx}"
|
|
mode="aspectFit" :src="titleRightBtnSource"></image>
|
|
<text v-if="useTitleRightBtn==1"
|
|
:style="{'height':navHeightPx,'line-height':navHeightPx,'font-size':'28rpx','color':'#FFFFFF','padding-left':'20rpx','padding-right':'20rpx'}">{{titleRightBtnSource}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- Tab切换 -->
|
|
<tabTop ref="navTab" :tabTitle="tabTitleData" :tabNum="tabNumData" @onTabClick='clickTab'></tabTop>
|
|
|
|
</view>
|
|
|
|
<slot></slot>
|
|
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
const util = require('@/util/util.js');
|
|
export default {
|
|
props: {
|
|
text: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
isShareIn: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
hasBack: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
useTitleLeftBtn: {
|
|
type: String,
|
|
// 0不使用 1使用文字 2使用图片
|
|
default: "0"
|
|
},
|
|
useTitleRightBtn: {
|
|
type: String,
|
|
// 0不使用 1使用文字 2使用图片
|
|
default: "0"
|
|
},
|
|
titleLeftBtnSource: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
titleRightBtnSource: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
tabTitleData: {
|
|
type: Array,
|
|
default () {
|
|
return []
|
|
}
|
|
},
|
|
tabNumData: {
|
|
type: Array,
|
|
default () {
|
|
return []
|
|
}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
currentTab: 0, //sweiper所在页
|
|
swiperPaddindTop: 0,
|
|
windowHeight: 0, // 可使用窗口的高度
|
|
statusBarH: 0, // 状态栏高度
|
|
statusBarHeight: "",
|
|
navHeight: "",
|
|
navWidth: "",
|
|
totalHeight: "",
|
|
statusBarHeightPx: "",
|
|
navHeightPx: "",
|
|
navWidthPx: "",
|
|
totalHeightPx: "",
|
|
bg: "#2fa1f0",
|
|
totalHeightUpx: "",
|
|
backIcon: "",
|
|
iconPx: ""
|
|
};
|
|
},
|
|
methods: {
|
|
getViewPagerTop() {
|
|
return this.swiperPaddindTop
|
|
},
|
|
clickLeftBtn() {
|
|
this.$emit("leftBtn", "左侧按钮")
|
|
},
|
|
clickRightBtn() {
|
|
this.$emit("rightBtn", "右侧按钮")
|
|
},
|
|
clickBack() {
|
|
if (this.hasBack) {
|
|
if (this.$props.isShareIn) {
|
|
uni.switchTab({
|
|
url: "../../pages/home/FindFragment"
|
|
})
|
|
} else {
|
|
this.Back()
|
|
}
|
|
}
|
|
},
|
|
// 刷新touch监听
|
|
refreshStart(e) {
|
|
this.$refs.tabRefresh.refreshStart(e);
|
|
},
|
|
refreshMove(e) {
|
|
this.$refs.tabRefresh.refreshMove(e);
|
|
},
|
|
refreshEnd(e) {
|
|
this.$refs.tabRefresh.refreshEnd(e);
|
|
},
|
|
isRefresh() {
|
|
this.$emit("downRefresh", this.currentTab)
|
|
},
|
|
// 下拉刷新完成主动调用
|
|
downRefresh() {
|
|
this.$refs.tabRefresh.endAfter()
|
|
},
|
|
// 主动点击tab
|
|
clickTab(index) {
|
|
// 对外提供点击的index(使用控件的页面更改data里currentTab值)
|
|
// 保证能跟着滚动
|
|
this.currentTab = index
|
|
this.$emit("tabClickItem", index)
|
|
}, // swiper 滑动
|
|
changeTab(e) {
|
|
var index = e.detail.current //获取索引
|
|
// 模拟tab点击
|
|
this.$refs.navTab.longClick(index);
|
|
}
|
|
},
|
|
watch: {
|
|
|
|
isShareIn(newValue) {
|
|
|
|
if (this.$props.hasBack) {
|
|
this.backIcon = '../../static/custom-icon/back.png'
|
|
this.iconPx = this.navHeightPx
|
|
|
|
if (this.$props.isShareIn) {
|
|
this.backIcon = '../../static/custom-icon/home.png'
|
|
}
|
|
|
|
} else {
|
|
this.backIcon = '../../static/img/public/no-back.png'
|
|
this.iconPx = this.navHeight / 8 * 3 + 'px'
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
created() {
|
|
this.navWidth = getApp().globalData.navWidth
|
|
this.navHeight = getApp().globalData.navHeight
|
|
this.totalHeight = getApp().globalData.totalHeight
|
|
this.statusBarHeight = getApp().globalData.statusBarHeight
|
|
this.navWidthPx = getApp().globalData.navWidthPx
|
|
this.navHeightPx = getApp().globalData.navHeightPx
|
|
this.totalHeightPx = getApp().globalData.totalHeightPx
|
|
this.statusBarHeightPx = getApp().globalData.statusBarHeightPx
|
|
this.totalHeightUpx = getApp().globalData.totalHeightUpx
|
|
|
|
if (this.$props.hasBack) {
|
|
this.backIcon = '../../static/img/public/back.png'
|
|
this.iconPx = this.navHeightPx
|
|
|
|
if (this.$props.isShareIn) {
|
|
this.backIcon = '../../static/img/public/home.png'
|
|
}
|
|
|
|
} else {
|
|
this.backIcon = '../../static/custom-icon/no-back.png'
|
|
this.iconPx = this.navHeight / 8 * 3 + 'px'
|
|
}
|
|
|
|
|
|
this.swiperPaddindTop = this.totalHeight + 45 + 'px'
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.container999 {
|
|
width: 100vw;
|
|
font-size: 28upx;
|
|
min-height: 100vh;
|
|
overflow: hidden;
|
|
color: #6B8082;
|
|
position: relative;
|
|
}
|
|
|
|
.nav {
|
|
position: fixed;
|
|
left: 0;
|
|
top: 0;
|
|
color: white;
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
font-size: 24upx;
|
|
background-color: #2fa1f0;
|
|
z-index: 996;
|
|
}
|
|
</style>
|
|
|