云端文件下载
This commit is contained in:
@@ -9,7 +9,13 @@
|
||||
<view class="popup-title">{{isAgreeBeFriend ? '通过好友申请' : '申请添加朋友'}}</view>
|
||||
<view class="friend-card">
|
||||
<view class="friend-card-left">
|
||||
<view class="friend-avatar">{{currentAddFriend.avatar}}</view>
|
||||
<!-- <view class="friend-avatar">{{currentAddFriend.avatar}}</view> -->
|
||||
<image v-if="currentAddFriend.avatar" :src="currentAddFriend.avatar" class="friend-avatar"
|
||||
mode="aspectFill"></image>
|
||||
<!-- 如果没有头像,显示默认头像 -->
|
||||
<view v-else class="friend-avatar">
|
||||
<uni-icons type="person-filled" size="100rpx" color="#ffffff"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<view class="friend-card-middle">
|
||||
<view class="friend-name">{{currentAddFriend.username}}</view>
|
||||
@@ -18,9 +24,9 @@
|
||||
</view>
|
||||
<view class="nickname-wrapper">
|
||||
<view>好友备注</view>
|
||||
<input class="input-nickname" placeholder="请输入好友名称" />
|
||||
<input class="input-nickname" placeholder="请输入好友名称" v-model="inputFriendNickname"/>
|
||||
</view>
|
||||
<view class="text-btn confirm-btn">{{isAgreeBeFriend ? '确认通过' : '发送申请'}}</view>
|
||||
<view class="text-btn confirm-btn" @click="handleFriendOperate">{{isAgreeBeFriend ? '确认通过' : '发送申请'}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -158,7 +164,7 @@
|
||||
<view class="search-warpper">
|
||||
<input class="search-file-input" :class="{active:isSearchFriend}"
|
||||
@focus="handleFriendSearchFocus" @blur="handleFriendSearchFocus"
|
||||
v-model="searchFriendName" />
|
||||
v-model="searchFriendName" confirm-type="search" @confirm="searchFriend"/>
|
||||
<view class="iconfont icon-sousuo" @click="searchFriend"></view>
|
||||
</view>
|
||||
<view v-if="!searchFriendName" class="search-tip">请输入用户名或邮箱进行搜索</view>
|
||||
@@ -167,13 +173,16 @@
|
||||
<view class="friend-list">
|
||||
<view class="friend-card" v-for="friend in searchResultList" :key="friend.id">
|
||||
<view class="friend-card-left">
|
||||
<view class="friend-avatar">{{friend.avatar}}</view>
|
||||
<!-- <view class="friend-avatar">{{friend.avatar}}</view> -->
|
||||
<view class="friend-avatar">
|
||||
<image class="friend-avatar" :src="friend.avatar" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="friend-card-middle">
|
||||
<view class="friend-name">{{friend.nickname}}</view>
|
||||
<view class="friend-label">{{friend.email}}</view>
|
||||
</view>
|
||||
<view class="friend-card-right" @click="addNewFriend(friend.id)">
|
||||
<view class="friend-card-right" @click="addNewFriend(friend._id)">
|
||||
<view class="add-btn text-btn">添加</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -218,7 +227,7 @@
|
||||
<view class="friend-name">friend.nickname</view>
|
||||
<view class="friend-label">friend.email</view>
|
||||
</view>
|
||||
<view class="friend-card-right" @click="addNewFriend(friend.id)">
|
||||
<view class="friend-card-right" @click="addMeetingMembers(friend.id)">
|
||||
<view class="add-btn text-btn">添加</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -258,24 +267,28 @@
|
||||
<view class="tabpage-title">好友申请</view>
|
||||
</view>
|
||||
<view class="tabpage-body">
|
||||
<scroll-view class="group-member" direction="vertical" scroll-y="true">
|
||||
<view v-if="!friendRequestList.length" class="no-result">暂无好友申请</view>
|
||||
<scroll-view v-else class="group-member" direction="vertical" scroll-y="true">
|
||||
<view class="friend-list">
|
||||
<view class="friend-card" v-for="friend in mockFriendDB" :key="friend.id">
|
||||
<view class="friend-card" v-for="request in friendRequestList" :key="request.id">
|
||||
<view class="friend-card-left">
|
||||
<view class="friend-avatar">{{friend.avatar}}</view>
|
||||
</view>
|
||||
<view class="friend-card-middle">
|
||||
<view class="friend-name">{{friend.nickname}}</view>
|
||||
<view class="friend-label">{{friend.email}}</view>
|
||||
</view>
|
||||
<view class="friend-card-right">
|
||||
<view class="friend-option">
|
||||
<view class="refuse-btn text-btn" @click="refuseBeFriend(friend)">拒绝</view>
|
||||
<view class="agree-btn text-btn" @click="agreeBeFriend(friend)">同意</view>
|
||||
<image v-if="request.avatar" :src="request.avatar" class="friend-avatar"
|
||||
mode="aspectFill"></image>
|
||||
<view v-else class="friend-avatar">
|
||||
<uni-icons type="person-filled" size="100rpx" color="#ffffff"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<view class="friend-card-middle">
|
||||
<view class="friend-name">{{request.friendNickName || request.sendId}}</view>
|
||||
<view class="friend-label">{{request.message || '请求添加你为好友'}}</view>
|
||||
</view>
|
||||
<view class="friend-card-right">
|
||||
<view v-if="request.state === 0" class="friend-option">
|
||||
<view class="agree-btn text-btn" @click="agreeBeFriend(request)">同意</view>
|
||||
</view>
|
||||
<view v-else class="friend-status agreed">已同意</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
@@ -306,7 +319,10 @@
|
||||
} from '@/utils/user-info.js'
|
||||
import {
|
||||
getChatFriend,
|
||||
getGroup
|
||||
getGroup,
|
||||
sendFriendRequest,
|
||||
getFriendRequestList,
|
||||
saveFriend
|
||||
} from '@/utils/friend-api.js'
|
||||
import {
|
||||
getUserInfo,
|
||||
@@ -466,6 +482,7 @@
|
||||
onMounted(async () => {
|
||||
await takeFriendList()
|
||||
await takeGroupList()
|
||||
await takeFriendRequestList()
|
||||
handleFriendConnect()
|
||||
})
|
||||
// 群聊相关
|
||||
@@ -656,7 +673,7 @@
|
||||
// 模糊查询:遍历 mockFriendDB,匹配 nickname、username 或 email
|
||||
const keyword = searchFriendName.value.toLowerCase().trim();
|
||||
searchResultList.value = await searchUsers(userToken.value,keyword)
|
||||
console.log("searchResultList.value:",searchResultList.value);
|
||||
console.log("searchResultList.value:",JSON.stringify(searchResultList.value));
|
||||
// const results = mockFriendDB.value.filter(friend => {
|
||||
// const isMatch = friend.nickname.toLowerCase().includes(keyword) || friend.username.toLowerCase()
|
||||
// .includes(keyword) || friend.email.toLowerCase().includes(keyword);
|
||||
@@ -670,7 +687,7 @@
|
||||
|
||||
const currentAddFriend = ref(null)
|
||||
const addNewFriend = (id) => {
|
||||
const friend = mockFriendDB.value.find(friend => friend.id === id)
|
||||
const friend = searchResultList.value.find(friend => friend._id === id)
|
||||
if (friend) {
|
||||
// 创建副本避免引用问题
|
||||
currentAddFriend.value = {
|
||||
@@ -685,6 +702,8 @@
|
||||
currentAddFriend.value = null
|
||||
isAgreeBeFriend.value = false
|
||||
}
|
||||
|
||||
const inputFriendNickname = ref('')
|
||||
|
||||
// 视频会议相关
|
||||
const isVoice = ref(false);
|
||||
@@ -698,77 +717,97 @@
|
||||
|
||||
// 好友申请相关
|
||||
const isAgreeBeFriend = ref(false)
|
||||
const refuseBeFriend = (friend) => {
|
||||
|
||||
const friendRequestList = ref([])
|
||||
// 获取好友申请列表
|
||||
const takeFriendRequestList = async () => {
|
||||
try {
|
||||
if (!UserId.value) return
|
||||
const list = await getFriendRequestList(UserId.value)
|
||||
if (list && list.length) {
|
||||
friendRequestList.value = await takeRequestAvatar(list)
|
||||
} else {
|
||||
friendRequestList.value = []
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取好友申请列表失败:', error)
|
||||
friendRequestList.value = []
|
||||
}
|
||||
}
|
||||
const agreeBeFriend = (friend) => {
|
||||
// 获取好友申请人的头像
|
||||
const takeRequestAvatar = async (requestList) => {
|
||||
if (!requestList?.length) return []
|
||||
try {
|
||||
const requestIds = requestList.map(item => item.sendId)
|
||||
const avatarList = await getUserAvatar(userToken.value, requestIds)
|
||||
const userMap = new Map(avatarList.map(user => [user.user_id, user]) || [])
|
||||
return requestList.map(request => {
|
||||
const userInfo = userMap.get(request.sendId)
|
||||
return {
|
||||
...request,
|
||||
avatar: userInfo?.avatar || null
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
console.error('获取申请人头像失败', err)
|
||||
return requestList
|
||||
}
|
||||
}
|
||||
|
||||
const agreeBeFriend = (request) => {
|
||||
isAgreeBeFriend.value = true
|
||||
currentAddFriend.value = {
|
||||
...friend
|
||||
...request,
|
||||
username: request.friendNickName || request.sendId
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 模拟好友数据库
|
||||
const mockFriendDB = ref([{
|
||||
id: 1,
|
||||
nickname: '张三',
|
||||
username: 'zhangsan',
|
||||
email: 'zhangsan@example.com',
|
||||
avatar: '👤'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
nickname: '李四',
|
||||
username: 'lisi',
|
||||
email: 'lisi@example.com',
|
||||
avatar: '👥'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
nickname: '王小明',
|
||||
username: 'wangxm',
|
||||
email: 'wang@example.com',
|
||||
avatar: '👪'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
nickname: '赵磊',
|
||||
username: 'zhaolei',
|
||||
email: 'zhao@example.com',
|
||||
avatar: '🗣️'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
nickname: '张三2',
|
||||
username: 'zhangsan',
|
||||
email: 'zhangsan@example.com',
|
||||
avatar: '👤'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
nickname: '李四2',
|
||||
username: 'lisi',
|
||||
email: 'lisi@example.com',
|
||||
avatar: '👥'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
nickname: '王小明2',
|
||||
username: 'wangxm',
|
||||
email: 'wang@example.com',
|
||||
avatar: '👪'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
nickname: '赵磊2',
|
||||
username: 'zhaolei',
|
||||
email: 'zhao@example.com',
|
||||
avatar: '🗣️'
|
||||
// 同意好友申请的确认操作
|
||||
const handleFriendOperate = async () => {
|
||||
if (isAgreeBeFriend.value) {
|
||||
// 通过好友申请(保存好友即同意)
|
||||
try {
|
||||
const friendId = currentAddFriend.value.sendId
|
||||
const friendNickName = inputFriendNickname.value || currentAddFriend.value.friendNickName || ''
|
||||
const sessionId = currentAddFriend.value.sessionId || Date.now()
|
||||
const friendRelationshipId = currentAddFriend.value.id
|
||||
await saveFriend([
|
||||
{
|
||||
friendNickName: friendNickName,
|
||||
sender: UserId.value,
|
||||
receiver: friendId,
|
||||
sessionId: sessionId,
|
||||
friendRelationshipId: friendRelationshipId
|
||||
},
|
||||
{
|
||||
friendNickName: '',
|
||||
sender: friendId,
|
||||
receiver: UserId.value,
|
||||
sessionId: sessionId,
|
||||
friendRelationshipId: friendRelationshipId
|
||||
}
|
||||
])
|
||||
uni.showToast({ title: '已同意好友申请', icon: 'none' })
|
||||
const target = friendRequestList.value.find(item => item.sendId === friendId)
|
||||
if (target) target.status = 1
|
||||
closeAddFriendCard()
|
||||
await takeFriendList()
|
||||
} catch (error) {
|
||||
console.error('同意好友申请失败:', error)
|
||||
uni.showToast({ title: '操作失败', icon: 'none' })
|
||||
}
|
||||
} else {
|
||||
// 申请好友(添加好友页面的发送申请)
|
||||
try {
|
||||
const friendId = currentAddFriend.value._id
|
||||
const msg = await sendFriendRequest(UserId.value, inputFriendNickname.value, friendId)
|
||||
uni.showToast({ title: msg, icon: 'none' })
|
||||
closeAddFriendCard()
|
||||
} catch (error) {
|
||||
console.error('发送好友申请失败:', error)
|
||||
uni.showToast({ title: '发送申请失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
])
|
||||
}
|
||||
|
||||
// 通讯录相关
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user