first commit

This commit is contained in:
2026-09-11 01:45:04 +08:00
commit 0a8d60d87f
145 changed files with 40978 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
{
"component": true,
"styleIsolation": "apply-shared"
}
+43
View File
@@ -0,0 +1,43 @@
import { request } from '../utils/request'
Component({
data: {
selected: 0,
unread: 0,
list: [
{ pagePath: '/pages/wardrobe/wardrobe', text: '衣橱', icon: 'icon-hanger' },
{ pagePath: '/pages/outfit/outfit', text: '穿搭', icon: 'icon-shirt' },
{ pagePath: '/pages/horoscope/horoscope', text: '运势', icon: 'icon-sparkles' },
{ pagePath: '/pages/closet-share/closet-share', text: '分享', icon: 'icon-share' },
{ pagePath: '/pages/profile/profile', text: '我的', icon: 'icon-user' },
],
},
lifetimes: {
attached() {
this.refreshUnread()
},
},
methods: {
refreshUnread() {
const unread = (wx.getStorageSync('zt_closet_unread') as number) || 0
this.setData({ unread })
this.fetchUnread()
},
fetchUnread() {
request<{ unread_count: number }>({ url: '/notification/unread', showError: false })
.then((res) => {
const unread = res.unread_count || 0
wx.setStorageSync('zt_closet_unread', unread)
this.setData({ unread })
})
.catch(() => {})
},
switchTab(e: WechatMiniprogram.TouchEvent) {
const { path, index } = e.currentTarget.dataset as { path: string; index: number }
wx.switchTab({ url: path })
this.setData({ selected: index })
},
},
})
+16
View File
@@ -0,0 +1,16 @@
<view class="tab-bar">
<view
wx:for="{{list}}"
wx:key="pagePath"
class="tab-item {{selected === index ? 'active' : ''}}"
data-path="{{item.pagePath}}"
data-index="{{index}}"
bindtap="switchTab"
>
<view class="tab-icon-wrap">
<view class="icon tab-icon {{item.icon}}"></view>
<view wx:if="{{item.icon === 'icon-user' && unread > 0}}" class="tab-badge">{{unread > 99 ? '99+' : unread}}</view>
</view>
<text class="tab-text">{{item.text}}</text>
</view>
</view>
+58
View File
@@ -0,0 +1,58 @@
.tab-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
background: rgba(255, 255, 255, 0.92);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-top: 1rpx solid #E5E5EA;
padding-bottom: env(safe-area-inset-bottom);
z-index: 100;
}
.tab-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 12rpx 0 8rpx;
color: #8E8E93;
}
.tab-item.active {
color: #007AFF;
}
.tab-icon-wrap {
position: relative;
margin-bottom: 6rpx;
}
.tab-icon {
width: 48rpx;
height: 48rpx;
}
.tab-badge {
position: absolute;
top: -8rpx;
right: -20rpx;
min-width: 28rpx;
height: 28rpx;
padding: 0 8rpx;
border-radius: 14rpx;
background: #FF3B30;
color: #fff;
font-size: 20rpx;
line-height: 28rpx;
text-align: center;
box-sizing: border-box;
}
.tab-text {
font-size: 20rpx;
line-height: 1;
}