14 changed files with 1810 additions and 919 deletions
@ -0,0 +1,553 @@ |
|||||
|
<template> |
||||
|
<view class="follow-tab-container"> |
||||
|
<!-- 搜索栏 --> |
||||
|
<view class="search-section"> |
||||
|
<view class="search-bar"> |
||||
|
<image class="search-icon" :src="showImg('/uploads/20250826/a4d605e82622223c270df0af4e378ab3.png')"></image> |
||||
|
<input |
||||
|
class="search-input" |
||||
|
placeholder="搜索已关注的人" |
||||
|
v-model="searchText" |
||||
|
@input="handleSearch" |
||||
|
/> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 我的关注标题和排序 --> |
||||
|
<view class="follows-header"> |
||||
|
<text class="follows-title">我的关注 ({{ followsList.length }})</text> |
||||
|
<view class="sort-option" @click="toggleSort"> |
||||
|
<text class="sort-text">综合排序</text> |
||||
|
<image class="sort-arrow" :src="showImg('/uploads/20250826/8e40deaa0bc67da3a9b104ff0e6b3e7c.png')"></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 分类导航 --> |
||||
|
<view class="category-tabs"> |
||||
|
<view |
||||
|
class="tab-item" |
||||
|
:class="{ active: activeCategory === 'all' }" |
||||
|
@click="switchCategory('all')" |
||||
|
> |
||||
|
全部 |
||||
|
</view> |
||||
|
<view |
||||
|
class="tab-item" |
||||
|
:class="{ active: activeCategory === 'merchant' }" |
||||
|
@click="switchCategory('merchant')" |
||||
|
> |
||||
|
商家 |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 关注用户列表 --> |
||||
|
<view class="follows-list"> |
||||
|
<view |
||||
|
class="follow-item" |
||||
|
v-for="(item, index) in filteredFollowsList" |
||||
|
:key="item.id" |
||||
|
> |
||||
|
<image class="user-avatar" src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png" mode="aspectFill"></image> |
||||
|
<view class="user-info"> |
||||
|
<text class="user-name">{{ item.name }}</text> |
||||
|
<view class="update-tag" v-if="item.newItems > 0"> |
||||
|
{{ item.newItems }}件商品上新 |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="action-buttons"> |
||||
|
<view class="follow-status-btn"> |
||||
|
已关注 |
||||
|
</view> |
||||
|
<view class="more-options" @click="showOptions(item)"> |
||||
|
<text class="more-dots">•••</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 推荐用户分隔线 --> |
||||
|
<view class="divider-line"></view> |
||||
|
|
||||
|
<!-- 推荐用户区域 --> |
||||
|
<view class="recommend-section"> |
||||
|
<view class="recommend-header"> |
||||
|
<view class="recommend-title" style="display: flex;align-items: center;"> |
||||
|
你可能感兴趣的人 |
||||
|
<image style="width: 30rpx;height: 30rpx;margin-left: 10rpx;" :src="showImg('/uploads/20250826/f1422cbef4c33e8c21d9e7e805c8bad9.png')"></image> |
||||
|
</view> |
||||
|
<view class="close-btn" @click="closeRecommend"> |
||||
|
<text class="close-text">关闭</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class="recommend-list"> |
||||
|
<view |
||||
|
class="recommend-item" |
||||
|
v-for="(item, index) in recommendList" |
||||
|
:key="item.id" |
||||
|
> |
||||
|
<image |
||||
|
class="user-avatar" |
||||
|
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png" |
||||
|
mode="aspectFill" |
||||
|
></image> |
||||
|
<view class="user-info"> |
||||
|
<text class="user-name">{{ item.name }}</text> |
||||
|
<text class="user-desc">{{ item.description }}</text> |
||||
|
</view> |
||||
|
<view class="action-buttons"> |
||||
|
<view class="follow-btn" @click="followUser(item)"> |
||||
|
关注 |
||||
|
</view> |
||||
|
<view class="dismiss-btn" @click="dismissUser(item)"> |
||||
|
<text class="dismiss-text">×</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: "FollowTab", |
||||
|
data() { |
||||
|
return { |
||||
|
searchText: "", |
||||
|
activeCategory: "all", |
||||
|
followsList: [ |
||||
|
{ |
||||
|
id: 1, |
||||
|
name: "主理人—颜真卿", |
||||
|
avatar: "/uploads/20250826/avatar1.png", |
||||
|
newItems: 1, |
||||
|
category: "merchant", |
||||
|
}, |
||||
|
{ |
||||
|
id: 2, |
||||
|
name: "主理人—颜真卿", |
||||
|
avatar: "/uploads/20250826/avatar1.png", |
||||
|
newItems: 0, |
||||
|
category: "merchant", |
||||
|
}, |
||||
|
{ |
||||
|
id: 3, |
||||
|
name: "主理人—颜真卿", |
||||
|
avatar: "/uploads/20250826/avatar1.png", |
||||
|
newItems: 2, |
||||
|
category: "user", |
||||
|
}, |
||||
|
], |
||||
|
recommendList: [ |
||||
|
{ |
||||
|
id: 101, |
||||
|
name: "颜真卿", |
||||
|
avatar: "/uploads/20250826/avatar1.png", |
||||
|
description: "介绍介绍介绍", |
||||
|
}, |
||||
|
{ |
||||
|
id: 102, |
||||
|
name: "颜真卿", |
||||
|
avatar: "/uploads/20250826/avatar1.png", |
||||
|
description: "介绍介绍介绍", |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
computed: { |
||||
|
filteredFollowsList() { |
||||
|
let filtered = this.followsList; |
||||
|
|
||||
|
// 按分类过滤 |
||||
|
if (this.activeCategory !== "all") { |
||||
|
filtered = filtered.filter( |
||||
|
(item) => item.category === this.activeCategory |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
// 按搜索文本过滤 |
||||
|
if (this.searchText.trim()) { |
||||
|
filtered = filtered.filter((item) => |
||||
|
item.name.toLowerCase().includes(this.searchText.toLowerCase()) |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
return filtered; |
||||
|
}, |
||||
|
}, |
||||
|
methods: { |
||||
|
handleSearch() { |
||||
|
// 搜索逻辑已在computed中处理 |
||||
|
}, |
||||
|
|
||||
|
toggleSort() { |
||||
|
// 切换排序方式 |
||||
|
uni.showToast({ |
||||
|
title: "排序功能开发中", |
||||
|
icon: "none", |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
switchCategory(category) { |
||||
|
this.activeCategory = category; |
||||
|
}, |
||||
|
|
||||
|
showOptions(item) { |
||||
|
uni.showActionSheet({ |
||||
|
itemList: ["取消关注", "举报", "拉黑"], |
||||
|
success: (res) => { |
||||
|
switch (res.tapIndex) { |
||||
|
case 0: |
||||
|
this.unfollowUser(item); |
||||
|
break; |
||||
|
case 1: |
||||
|
this.reportUser(item); |
||||
|
break; |
||||
|
case 2: |
||||
|
this.blockUser(item); |
||||
|
break; |
||||
|
} |
||||
|
}, |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
unfollowUser(item) { |
||||
|
const index = this.followsList.findIndex((user) => user.id === item.id); |
||||
|
if (index > -1) { |
||||
|
this.followsList.splice(index, 1); |
||||
|
uni.showToast({ |
||||
|
title: "已取消关注", |
||||
|
icon: "success", |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
reportUser(item) { |
||||
|
uni.showToast({ |
||||
|
title: "举报功能开发中", |
||||
|
icon: "none", |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
blockUser(item) { |
||||
|
uni.showToast({ |
||||
|
title: "拉黑功能开发中", |
||||
|
icon: "none", |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
followUser(item) { |
||||
|
// 添加到关注列表 |
||||
|
this.followsList.unshift({ |
||||
|
id: item.id, |
||||
|
name: item.name, |
||||
|
avatar: item.avatar, |
||||
|
newItems: 0, |
||||
|
category: "user", |
||||
|
}); |
||||
|
|
||||
|
// 从推荐列表移除 |
||||
|
const index = this.recommendList.findIndex((user) => user.id === item.id); |
||||
|
if (index > -1) { |
||||
|
this.recommendList.splice(index, 1); |
||||
|
} |
||||
|
|
||||
|
uni.showToast({ |
||||
|
title: "关注成功", |
||||
|
icon: "success", |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
dismissUser(item) { |
||||
|
const index = this.recommendList.findIndex((user) => user.id === item.id); |
||||
|
if (index > -1) { |
||||
|
this.recommendList.splice(index, 1); |
||||
|
uni.showToast({ |
||||
|
title: "已移除推荐", |
||||
|
icon: "success", |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
closeRecommend() { |
||||
|
this.recommendList = []; |
||||
|
uni.showToast({ |
||||
|
title: "已关闭推荐", |
||||
|
icon: "success", |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.follow-tab-container { |
||||
|
background: #fff; |
||||
|
min-height: 100vh; |
||||
|
} |
||||
|
|
||||
|
/* 搜索栏 */ |
||||
|
.search-section { |
||||
|
padding: 32rpx; |
||||
|
background: #fff; |
||||
|
} |
||||
|
|
||||
|
.search-bar { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
background: #f8f9fa; |
||||
|
border-radius: 40rpx; |
||||
|
padding: 0 32rpx; |
||||
|
height: 80rpx; |
||||
|
|
||||
|
.search-icon { |
||||
|
width:32rpx ; |
||||
|
height:32rpx ; |
||||
|
margin-right: 16rpx; |
||||
|
color: #999; |
||||
|
} |
||||
|
|
||||
|
.search-input { |
||||
|
flex: 1; |
||||
|
font-size: 28rpx; |
||||
|
color: #333; |
||||
|
|
||||
|
&::placeholder { |
||||
|
color: #999; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 关注标题和排序 */ |
||||
|
.follows-header { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
margin-top: 20rpx; |
||||
|
padding: 0 32rpx 24rpx; |
||||
|
margin-bottom: 20rpx; |
||||
|
|
||||
|
.follows-title { |
||||
|
font-size: 32rpx; |
||||
|
font-weight: 600; |
||||
|
color: #333; |
||||
|
} |
||||
|
|
||||
|
.sort-option { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
|
||||
|
.sort-text { |
||||
|
font-size: 28rpx; |
||||
|
color: #000000; |
||||
|
margin-right: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.sort-arrow { |
||||
|
width:9rpx; |
||||
|
height: 24rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 分类导航 */ |
||||
|
.category-tabs { |
||||
|
display: flex; |
||||
|
padding: 0 32rpx 32rpx; |
||||
|
gap: 16rpx; |
||||
|
|
||||
|
.tab-item { |
||||
|
border-radius: 32rpx; |
||||
|
transition: all 0.3s ease; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
padding: 15rpx 30rpx; |
||||
|
font-size: 28rpx; |
||||
|
color: #000000; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
|
||||
|
&.active { |
||||
|
background: #00FFFF; |
||||
|
color: #000000; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 关注用户列表 */ |
||||
|
.follows-list { |
||||
|
padding: 0 32rpx; |
||||
|
|
||||
|
.follow-item { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding: 32rpx 0; |
||||
|
border-bottom: 1rpx solid #f0f0f0; |
||||
|
|
||||
|
&:last-child { |
||||
|
border-bottom: none; |
||||
|
} |
||||
|
|
||||
|
.user-avatar { |
||||
|
width: 100rpx; |
||||
|
height: 100rpx; |
||||
|
border-radius: 50%; |
||||
|
margin-right: 24rpx; |
||||
|
} |
||||
|
|
||||
|
.user-info { |
||||
|
flex: 1; |
||||
|
|
||||
|
.user-name { |
||||
|
display: block; |
||||
|
font-size: 30rpx; |
||||
|
font-weight: 500; |
||||
|
color: #000000; |
||||
|
margin-bottom: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.update-tag { |
||||
|
display: inline-block; |
||||
|
background: #f8f9fa; |
||||
|
border-radius: 16rpx; |
||||
|
padding: 10rpx 12rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #666; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.action-buttons { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
gap: 16rpx; |
||||
|
|
||||
|
.follow-status-btn { |
||||
|
border-radius: 24rpx; |
||||
|
padding: 12rpx 24rpx; |
||||
|
border: 2rpx solid #e5e5e5; |
||||
|
font-size: 26rpx; |
||||
|
color: #666; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.more-options { |
||||
|
padding: 8rpx; |
||||
|
|
||||
|
.more-dots { |
||||
|
font-size: 24rpx; |
||||
|
color: #000; |
||||
|
letter-spacing: 2rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 分隔线 */ |
||||
|
.divider-line { |
||||
|
height: 1rpx; |
||||
|
background: #f0f0f0; |
||||
|
margin: 32rpx 0; |
||||
|
} |
||||
|
|
||||
|
/* 推荐用户区域 */ |
||||
|
.recommend-section { |
||||
|
padding: 0 32rpx; |
||||
|
|
||||
|
.recommend-header { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
margin-bottom: 32rpx; |
||||
|
|
||||
|
.recommend-title { |
||||
|
font-size: 28rpx; |
||||
|
font-weight: 500; |
||||
|
color: #666666; |
||||
|
margin-right: 10rpx; |
||||
|
} |
||||
|
|
||||
|
.close-btn { |
||||
|
padding: 8rpx 16rpx; |
||||
|
|
||||
|
.close-text { |
||||
|
font-size: 28rpx; |
||||
|
color: #666; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.recommend-list { |
||||
|
.recommend-item { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding: 32rpx 0; |
||||
|
border-bottom: 1rpx solid #f0f0f0; |
||||
|
|
||||
|
&:last-child { |
||||
|
border-bottom: none; |
||||
|
} |
||||
|
|
||||
|
.user-avatar { |
||||
|
width: 100rpx; |
||||
|
height: 100rpx; |
||||
|
border-radius: 50%; |
||||
|
margin-right: 24rpx; |
||||
|
} |
||||
|
|
||||
|
.user-info { |
||||
|
flex: 1; |
||||
|
|
||||
|
.user-name { |
||||
|
display: block; |
||||
|
font-size: 30rpx; |
||||
|
font-weight: 500; |
||||
|
color: #333; |
||||
|
margin-bottom: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.user-desc { |
||||
|
font-size: 26rpx; |
||||
|
color: #999; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.action-buttons { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
gap: 16rpx; |
||||
|
|
||||
|
.follow-btn { |
||||
|
border: 2rpx solid #00FFFF; |
||||
|
border-radius: 24rpx; |
||||
|
padding: 12rpx 24rpx; |
||||
|
font-size: 26rpx; |
||||
|
color: #000; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.dismiss-btn { |
||||
|
width: 48rpx; |
||||
|
height: 48rpx; |
||||
|
border-radius: 50%; |
||||
|
background: #f8f9fa; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
|
||||
|
.dismiss-text { |
||||
|
font-size: 32rpx; |
||||
|
color: #999; |
||||
|
font-weight: 300; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,3 @@ |
|||||
|
# 这是一个空购物车图标的占位文件 |
||||
|
# 在实际项目中,请替换为真实的空购物车图标图片文件 |
||||
|
# 建议使用简洁的购物车图标,颜色为灰色或浅色 |
@ -0,0 +1,2 @@ |
|||||
|
# 这是一个搜索图标的占位文件 |
||||
|
# 在实际项目中,请替换为真实的搜索图标图片文件 |
File diff suppressed because it is too large
Loading…
Reference in new issue