feat(circle): 添加酒友圈社交模块

- 新增酒友圈、圈子详情、发布动态、好友列表、活动创建等页面配置
- 添加酒友圈相关API接口,包括动态、评论、好友、活动等功能
- 实现模拟数据用于前端开发和测试
- 创建评论项、空状态、活动卡片、动态卡片、好友项等组件
- 编写酒友圈模块详细的接口文档,定义数据结构和业务规则
This commit is contained in:
cg
2026-07-20 22:53:04 +08:00
parent 9f5c69e1e5
commit fabbb167cf
18 changed files with 3992 additions and 18 deletions
+64 -18
View File
@@ -5,6 +5,7 @@
<view class="hero-bg">
<view class="hero-orb hero-orb-1"></view>
<view class="hero-orb hero-orb-2"></view>
<text class="hero-deco">🥃</text>
</view>
<!-- 右上角分享按钮避让胶囊 -->
<button class="hero-share-btn" open-type="share" :style="shareBtnStyle">
@@ -17,11 +18,16 @@
<text class="hero-avatar-icon">👤</text>
</view>
</view>
<text class="hero-name">{{ user.nickname || '酒友' }}</text>
<view class="hero-level-tag">
<text class="hero-level-text">{{ drinkLevel }}</text>
<view class="hero-info">
<text class="hero-greeting">{{ greeting }}</text>
<view class="hero-name-row">
<text class="hero-name">{{ user.nickname || '酒友' }}</text>
<view class="hero-level-tag">
<text class="hero-level-text">{{ drinkLevel }}</text>
</view>
</view>
<text class="hero-joined">{{ joinedDate }} 加入 · 干杯日记</text>
</view>
<text class="hero-joined">{{ joinedDate }} 加入</text>
</view>
</view>
@@ -219,6 +225,14 @@ export default {
const map = { baijiu: '白酒之魂', beer: '啤酒达人', wine: '红酒雅士', whisky: '威士忌行家', huangjiu: '黄酒知音', sake: '清酒爱好者', fruit: '果酒小清新', cocktail: '调酒师' }
return map[fav] || '多元品鉴师'
},
greeting() {
const h = new Date().getHours()
if (h < 6) return '🌙 夜深了,微醺正好'
if (h < 11) return '☀️ 早上好,新的一天'
if (h < 14) return '🌤 中午好,小酌怡情'
if (h < 18) return '🌇 下午好,来一杯?'
return '🌙 晚上好,今晚喝点?'
},
personaDesc() {
const days = this.stats.totalDays || 0
if (days === 0) return '开始记录你的第一杯吧'
@@ -335,7 +349,7 @@ export default {
return ACHIEVEMENTS[index % ACHIEVEMENTS.length].icon
},
goCircle() {
uni.showToast({ title: '酒友圈即将上线,敬请期待 🍻', icon: 'none', duration: 2000 })
uni.switchTab({ url: '/pages/circle/circle' })
},
goHome() {
uni.switchTab({ url: '/pages/index/index' })
@@ -390,7 +404,7 @@ export default {
/* === 沉浸式头部 === */
.hero-header {
position: relative;
padding: 0 $sp-lg 80rpx;
padding: 0 $sp-lg 64rpx;
overflow: hidden;
}
@@ -447,22 +461,32 @@ export default {
background: rgba(139,133,184,0.06);
}
.hero-deco {
position: absolute;
right: -20rpx;
bottom: -30rpx;
font-size: 200rpx;
opacity: 0.06;
transform: rotate(-15deg);
z-index: 1;
}
.hero-content {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
flex-direction: row;
align-items: center;
padding-top: $sp-lg;
padding-top: $sp-xl;
}
.avatar-ring {
width: 168rpx; height: 168rpx;
width: 128rpx; height: 128rpx;
border-radius: 50%;
padding: 4rpx;
flex-shrink: 0;
background: linear-gradient(160deg, rgba(232,168,56,0.7), rgba(232,168,56,0.2), rgba(139,133,184,0.3));
margin-bottom: $sp-xl;
box-shadow: 0 0 48rpx rgba(232,168,56,0.15);
box-shadow: 0 0 40rpx rgba(232,168,56,0.12);
}
.hero-avatar {
@@ -478,28 +502,49 @@ export default {
}
.hero-avatar-icon {
font-size: 72rpx;
font-size: 56rpx;
opacity: 0.5;
}
.hero-info {
flex: 1;
margin-left: $sp-xl;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.hero-greeting {
font-size: $fs-xs;
color: $text-tertiary;
margin-bottom: 14rpx;
letter-spacing: 1rpx;
}
.hero-name-row {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 14rpx;
margin-bottom: 16rpx;
}
.hero-name {
font-size: $fs-2xl;
font-weight: $fw-black;
color: $text-primary;
margin-bottom: $sp-md;
letter-spacing: -1rpx;
}
.hero-level-tag {
padding: 8rpx 24rpx;
background: rgba(232,168,56,0.08);
border: 1rpx solid rgba(232,168,56,0.18);
padding: 6rpx 18rpx;
background: rgba(232,168,56,0.10);
border: 1rpx solid rgba(232,168,56,0.20);
border-radius: $radius-full;
margin-bottom: $sp-md;
}
.hero-level-text {
font-size: $fs-xs;
font-size: 20rpx;
color: $amber;
font-weight: $fw-medium;
}
@@ -508,6 +553,7 @@ export default {
font-size: $fs-xs;
color: $text-tertiary;
opacity: 0.7;
line-height: $lh-normal;
}
/* === 悬浮数据卡片 === */