feat: show avatars in my comments
This commit is contained in:
@@ -358,7 +358,11 @@ class CommunityController extends BaseApiController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$currentUser = User::field('id,nickname,avatar')->where('id', $this->userId)->findOrEmpty();
|
||||||
|
$currentUserData = $currentUser->isEmpty() ? null : $currentUser->toArray();
|
||||||
|
|
||||||
foreach ($list as &$item) {
|
foreach ($list as &$item) {
|
||||||
|
$item['user'] = $currentUserData;
|
||||||
$post = $postMap[$item['post_id']] ?? null;
|
$post = $postMap[$item['post_id']] ?? null;
|
||||||
$item['post'] = $post && (int) $post['status'] === 1 ? [
|
$item['post'] = $post && (int) $post['status'] === 1 ? [
|
||||||
'id' => $post['id'],
|
'id' => $post['id'],
|
||||||
|
|||||||
@@ -10,7 +10,12 @@
|
|||||||
<view class="my-comments-page">
|
<view class="my-comments-page">
|
||||||
<view v-for="item in commentList" :key="item.id" class="comment-card" @tap="goPost(item)">
|
<view v-for="item in commentList" :key="item.id" class="comment-card" @tap="goPost(item)">
|
||||||
<view class="comment-card__head">
|
<view class="comment-card__head">
|
||||||
<text class="comment-card__label">{{ item.reply_to ? '回复了评论' : '评论了帖子' }}</text>
|
<view class="comment-card__author">
|
||||||
|
<image class="comment-card__avatar" :src="getCommentAvatar(item)" mode="aspectFill"
|
||||||
|
@error="handleAvatarError" />
|
||||||
|
<text class="comment-card__name">{{ item.user?.nickname || '我' }}</text>
|
||||||
|
<text class="comment-card__label">{{ item.reply_to ? '回复了评论' : '评论了帖子' }}</text>
|
||||||
|
</view>
|
||||||
<text class="comment-card__time">{{ formatTime(item.create_time) }}</text>
|
<text class="comment-card__time">{{ formatTime(item.create_time) }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -45,6 +50,7 @@ import { deleteComment, getMyCommentLists } from '@/api/community'
|
|||||||
|
|
||||||
const paging = shallowRef()
|
const paging = shallowRef()
|
||||||
const commentList = ref<any[]>([])
|
const commentList = ref<any[]>([])
|
||||||
|
const avatarLoadFailed = ref(false)
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
paging.value?.reload()
|
paging.value?.reload()
|
||||||
@@ -84,6 +90,14 @@ const confirmDelete = (item: any) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getCommentAvatar = (item: any) => {
|
||||||
|
return avatarLoadFailed.value ? '/static/images/avatar.png' : (item.user?.avatar || '/static/images/avatar.png')
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleAvatarError = () => {
|
||||||
|
avatarLoadFailed.value = true
|
||||||
|
}
|
||||||
|
|
||||||
const parseTimestamp = (value: string | number) => {
|
const parseTimestamp = (value: string | number) => {
|
||||||
if (typeof value === 'number') return value
|
if (typeof value === 'number') return value
|
||||||
return new Date(String(value).replace(/-/g, '/')).getTime() / 1000
|
return new Date(String(value).replace(/-/g, '/')).getTime() / 1000
|
||||||
@@ -130,7 +144,33 @@ const formatTime = (value: string | number) => {
|
|||||||
margin-bottom: 16rpx;
|
margin-bottom: 16rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment-card__author {
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-card__avatar {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #eef2f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-card__name {
|
||||||
|
max-width: 180rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #344055;
|
||||||
|
font-size: 24rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
.comment-card__label {
|
.comment-card__label {
|
||||||
|
margin-left: 10rpx;
|
||||||
color: #687385;
|
color: #687385;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user