1 changed files with 155 additions and 0 deletions
@ -0,0 +1,155 @@ |
|||||
|
<template> |
||||
|
<view> |
||||
|
<view class="safe-tip" v-if="showTip">请勿发送涉黄、涉暴、反动、侮辱等内容,违规会被封禁</view> |
||||
|
<view class="bottom-actions"> |
||||
|
<view class="bottom-item" :class="{ active: active === 'index' }" @tap="goTab('index')"> |
||||
|
<text class="tab-icon">🪐</text> |
||||
|
<text>此刻</text> |
||||
|
</view> |
||||
|
<view class="bottom-item message-tab" :class="{ active: active === 'messages' }" @tap="goTab('messages')"> |
||||
|
<text class="tab-icon">💬</text> |
||||
|
<text>消息</text> |
||||
|
<text class="unread-badge" v-if="displayUnreadCount > 0">{{ unreadText }}</text> |
||||
|
</view> |
||||
|
<view class="bottom-item" :class="{ active: active === 'universe' }" @tap="goTab('universe')"> |
||||
|
<text class="tab-icon">🌙</text> |
||||
|
<text>我的</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
const TAB_PATHS = { |
||||
|
index: '/package1/ieBrowser/index', |
||||
|
messages: '/package1/ieBrowser/messages', |
||||
|
universe: '/package1/ieBrowser/universe' |
||||
|
} |
||||
|
|
||||
|
export default { |
||||
|
name: 'IeBottomTab', |
||||
|
props: { |
||||
|
active: { |
||||
|
type: String, |
||||
|
default: 'index' |
||||
|
}, |
||||
|
unreadCount: { |
||||
|
type: Number, |
||||
|
default: 0 |
||||
|
}, |
||||
|
showTip: { |
||||
|
type: Boolean, |
||||
|
default: true |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
displayUnreadCount() { |
||||
|
return Number(this.unreadCount) || 0 |
||||
|
}, |
||||
|
unreadText() { |
||||
|
return this.displayUnreadCount > 99 ? '99+' : String(this.displayUnreadCount) |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
goTab(tab) { |
||||
|
if (tab === this.active) return |
||||
|
const path = TAB_PATHS[tab] |
||||
|
if (!path) return |
||||
|
uni.redirectTo({ |
||||
|
url: path + '?unreadCount=' + encodeURIComponent(String(this.displayUnreadCount)) |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.safe-tip { |
||||
|
position: fixed; |
||||
|
left: 36rpx; |
||||
|
right: 36rpx; |
||||
|
bottom: 142rpx; |
||||
|
z-index: 10; |
||||
|
padding: 12rpx 18rpx; |
||||
|
border-radius: 22rpx; |
||||
|
text-align: center; |
||||
|
color: rgba(22, 27, 46, .5); |
||||
|
background: rgba(255, 255, 255, .74); |
||||
|
border: 1rpx solid rgba(255, 255, 255, .9); |
||||
|
backdrop-filter: blur(18rpx); |
||||
|
box-shadow: 0 14rpx 38rpx rgba(96, 112, 160, .1); |
||||
|
font-size: 20rpx; |
||||
|
line-height: 28rpx; |
||||
|
font-weight: 700; |
||||
|
} |
||||
|
|
||||
|
.bottom-actions { |
||||
|
position: fixed; |
||||
|
left: 30rpx; |
||||
|
right: 30rpx; |
||||
|
bottom: 30rpx; |
||||
|
z-index: 10; |
||||
|
display: flex; |
||||
|
padding: 12rpx; |
||||
|
border: 1rpx solid rgba(255, 255, 255, .92); |
||||
|
border-radius: 999rpx; |
||||
|
overflow: hidden; |
||||
|
background: rgba(255, 255, 255, .92); |
||||
|
backdrop-filter: blur(24rpx); |
||||
|
box-shadow: 0 24rpx 80rpx rgba(96, 112, 160, .18); |
||||
|
} |
||||
|
|
||||
|
.bottom-item { |
||||
|
position: relative; |
||||
|
flex: 1; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
height: 80rpx; |
||||
|
border-radius: 999rpx; |
||||
|
color: rgba(22, 27, 46, .4); |
||||
|
font-size: 21rpx; |
||||
|
font-weight: 700; |
||||
|
transition: transform .16s ease, background .24s ease; |
||||
|
} |
||||
|
|
||||
|
.bottom-item:active { |
||||
|
transform: scale(.94); |
||||
|
} |
||||
|
|
||||
|
.bottom-item.active { |
||||
|
color: #161b2e; |
||||
|
background: linear-gradient(135deg, #eafff8, #a9ffe7); |
||||
|
box-shadow: 0 12rpx 30rpx rgba(169, 255, 231, .34), inset 0 1rpx 0 rgba(255, 255, 255, .95); |
||||
|
} |
||||
|
|
||||
|
.tab-icon { |
||||
|
margin-bottom: 4rpx; |
||||
|
font-size: 30rpx; |
||||
|
filter: grayscale(1); |
||||
|
opacity: .55; |
||||
|
} |
||||
|
|
||||
|
.bottom-item.active .tab-icon { |
||||
|
filter: none; |
||||
|
opacity: 1; |
||||
|
} |
||||
|
|
||||
|
.unread-badge { |
||||
|
position: absolute; |
||||
|
right: 16rpx; |
||||
|
top: 2rpx; |
||||
|
min-width: 30rpx; |
||||
|
height: 30rpx; |
||||
|
line-height: 30rpx; |
||||
|
padding: 0 8rpx; |
||||
|
border-radius: 999rpx; |
||||
|
text-align: center; |
||||
|
color: #fff; |
||||
|
background: linear-gradient(135deg, #ff8ba0, #e85d75); |
||||
|
box-shadow: 0 8rpx 20rpx rgba(232, 93, 117, .28); |
||||
|
font-size: 18rpx; |
||||
|
font-weight: 900; |
||||
|
} |
||||
|
</style> |
||||
Loading…
Reference in new issue