|
|
|
|
@ -104,100 +104,14 @@
|
|
|
|
|
<div class="empty-wrap" v-if="list.length === 0">
|
|
|
|
|
<n-empty size="large" description="暂无数据" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="desktopModelShow">
|
|
|
|
|
<div v-if="pageType === 'post'">
|
|
|
|
|
<n-list-item v-for="post in postList" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'comment'">
|
|
|
|
|
<n-list-item v-for="post in commentList" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'highlight'">
|
|
|
|
|
<n-list-item v-for="post in highlightList" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'media'">
|
|
|
|
|
<n-list-item v-for="post in mediaList" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'star'">
|
|
|
|
|
<n-list-item v-for="post in starList" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else>
|
|
|
|
|
<div v-if="pageType === 'post'">
|
|
|
|
|
<n-list-item v-for="post in postList" :key="post.id">
|
|
|
|
|
<mobile-post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'comment'">
|
|
|
|
|
<n-list-item v-for="post in commentList" :key="post.id">
|
|
|
|
|
<mobile-post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'highlight'">
|
|
|
|
|
<n-list-item v-for="post in highlightList" :key="post.id">
|
|
|
|
|
<mobile-post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'media'">
|
|
|
|
|
<n-list-item v-for="post in mediaList" :key="post.id">
|
|
|
|
|
<mobile-post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="pageType === 'star'">
|
|
|
|
|
<n-list-item v-for="post in starList" :key="post.id">
|
|
|
|
|
<mobile-post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:addFollowAction="true"
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@handle-follow-action="onHandleFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<n-list-item v-for="post in listData" :key="post.id">
|
|
|
|
|
<post-item :post="post"
|
|
|
|
|
:isOwner="userInfo.id == post.user_id"
|
|
|
|
|
:isMobile="!desktopModelShow"
|
|
|
|
|
addFollowAction
|
|
|
|
|
@send-whisper="onSendWhisper"
|
|
|
|
|
@post-follow-action="postFollowAction" />
|
|
|
|
|
</n-list-item>
|
|
|
|
|
</div>
|
|
|
|
|
</n-list>
|
|
|
|
|
|
|
|
|
|
@ -239,6 +153,9 @@ import { useStoreUser } from '@/store/user';
|
|
|
|
|
import { useStoreProfile } from '@/store/profile';
|
|
|
|
|
import { storeToRefs } from 'pinia';
|
|
|
|
|
import { Api } from '@/utils/request';
|
|
|
|
|
import UserAction from '@/composables/useUserAction';
|
|
|
|
|
|
|
|
|
|
type PageType = 'post' | 'comment' | 'highlight' | 'media' | 'star';
|
|
|
|
|
|
|
|
|
|
const dialog = useDialog();
|
|
|
|
|
|
|
|
|
|
@ -255,18 +172,18 @@ const router = useRouter();
|
|
|
|
|
const loading = ref(false);
|
|
|
|
|
const noMore = ref(false);
|
|
|
|
|
const user = reactive<Item.UserInfo>({
|
|
|
|
|
id: 0,
|
|
|
|
|
avatar: '',
|
|
|
|
|
username: '',
|
|
|
|
|
nickname: '',
|
|
|
|
|
is_admin: false,
|
|
|
|
|
is_friend: true,
|
|
|
|
|
is_following: false,
|
|
|
|
|
created_on: 0,
|
|
|
|
|
follows: 0,
|
|
|
|
|
followings: 0,
|
|
|
|
|
tweets_count: 0,
|
|
|
|
|
status: 1,
|
|
|
|
|
id: 0,
|
|
|
|
|
avatar: '',
|
|
|
|
|
username: '',
|
|
|
|
|
nickname: '',
|
|
|
|
|
is_admin: false,
|
|
|
|
|
is_friend: true,
|
|
|
|
|
is_following: false,
|
|
|
|
|
created_on: 0,
|
|
|
|
|
follows: 0,
|
|
|
|
|
followings: 0,
|
|
|
|
|
tweets_count: 0,
|
|
|
|
|
status: 1,
|
|
|
|
|
});
|
|
|
|
|
const userLoading = ref(false);
|
|
|
|
|
const showWhisper = ref(false);
|
|
|
|
|
@ -279,9 +196,7 @@ const mediaList = ref<Item.PostProps[]>([]);
|
|
|
|
|
const starList = ref<Item.PostProps[]>([]);
|
|
|
|
|
const username = ref(route.query.s || '');
|
|
|
|
|
const page = ref(+(route.query.p as string) || 1);
|
|
|
|
|
const pageType = ref<'post' | 'comment' | 'highlight' | 'media' | 'star'>(
|
|
|
|
|
'post',
|
|
|
|
|
);
|
|
|
|
|
const pageType = ref<PageType>('post');
|
|
|
|
|
const postPage = ref(+(route.query.p as string) || 1);
|
|
|
|
|
const commentPage = ref(1);
|
|
|
|
|
const highlightPage = ref(1);
|
|
|
|
|
@ -295,302 +210,129 @@ const highlightTotalPage = ref(0);
|
|
|
|
|
const mediaTotalPage = ref(0);
|
|
|
|
|
const starTotalPage = ref(0);
|
|
|
|
|
|
|
|
|
|
const onSendWhisper = (receiver: Item.UserInfo) => {
|
|
|
|
|
user.id = receiver.id;
|
|
|
|
|
user.username = receiver.username;
|
|
|
|
|
user.nickname = receiver.nickname;
|
|
|
|
|
user.avatar = receiver.avatar;
|
|
|
|
|
showWhisper.value = true;
|
|
|
|
|
};
|
|
|
|
|
const listData = computed(() => {
|
|
|
|
|
switch (pageType.value) {
|
|
|
|
|
case 'post':
|
|
|
|
|
return postList.value;
|
|
|
|
|
case 'comment':
|
|
|
|
|
return commentList.value;
|
|
|
|
|
case 'highlight':
|
|
|
|
|
return highlightList.value;
|
|
|
|
|
case 'media':
|
|
|
|
|
return mediaList.value;
|
|
|
|
|
case 'star':
|
|
|
|
|
return starList.value;
|
|
|
|
|
default:
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const onHandleFollowAction = (post: Item.PostProps) => {
|
|
|
|
|
dialog.success({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content:
|
|
|
|
|
'确定' +
|
|
|
|
|
(post.user.is_following ? '取消关注 @' : '关注 @') +
|
|
|
|
|
post.user.username +
|
|
|
|
|
' 吗?',
|
|
|
|
|
positiveText: '确定',
|
|
|
|
|
negativeText: '取消',
|
|
|
|
|
onPositiveClick: () => {
|
|
|
|
|
if (post.user.is_following) {
|
|
|
|
|
Api.v1.user.post.unfollow({
|
|
|
|
|
user_id: post.user.id,
|
|
|
|
|
})
|
|
|
|
|
.then((_res) => {
|
|
|
|
|
window.$message.success('操作成功');
|
|
|
|
|
postFollowAction(post.user_id, false);
|
|
|
|
|
})
|
|
|
|
|
.catch((_err) => {});
|
|
|
|
|
} else {
|
|
|
|
|
Api.v1.user.post.follow({
|
|
|
|
|
user_id: post.user.id,
|
|
|
|
|
})
|
|
|
|
|
.then((_res) => {
|
|
|
|
|
window.$message.success('关注成功');
|
|
|
|
|
postFollowAction(post.user_id, true);
|
|
|
|
|
})
|
|
|
|
|
.catch((_err) => {});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const onSendWhisper = (receiver: Item.UserInfo) => {
|
|
|
|
|
user.id = receiver.id;
|
|
|
|
|
user.username = receiver.username;
|
|
|
|
|
user.nickname = receiver.nickname;
|
|
|
|
|
user.avatar = receiver.avatar;
|
|
|
|
|
showWhisper.value = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function postFollowAction(userId: number, isFollowing: boolean) {
|
|
|
|
|
updateFolloing(postList, userId, isFollowing);
|
|
|
|
|
updateFolloing(commentList, userId, isFollowing);
|
|
|
|
|
updateFolloing(highlightList, userId, isFollowing);
|
|
|
|
|
updateFolloing(mediaList, userId, isFollowing);
|
|
|
|
|
updateFolloing(starList, userId, isFollowing);
|
|
|
|
|
updateFolloing(postList, userId, isFollowing);
|
|
|
|
|
updateFolloing(commentList, userId, isFollowing);
|
|
|
|
|
updateFolloing(highlightList, userId, isFollowing);
|
|
|
|
|
updateFolloing(mediaList, userId, isFollowing);
|
|
|
|
|
updateFolloing(starList, userId, isFollowing);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateFolloing(
|
|
|
|
|
posts: Ref<Item.PostProps[]>,
|
|
|
|
|
userId: number,
|
|
|
|
|
isFollowing: boolean,
|
|
|
|
|
posts: Ref<Item.PostProps[]>,
|
|
|
|
|
userId: number,
|
|
|
|
|
isFollowing: boolean,
|
|
|
|
|
) {
|
|
|
|
|
if (posts.value && posts.value.length > 0) {
|
|
|
|
|
for (let index in posts.value) {
|
|
|
|
|
if (posts.value[index].user_id == userId) {
|
|
|
|
|
posts.value[index].user.is_following = isFollowing;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (posts.value && posts.value.length > 0) {
|
|
|
|
|
for (let index in posts.value) {
|
|
|
|
|
if (posts.value[index].user_id == userId) {
|
|
|
|
|
posts.value[index].user.is_following = isFollowing;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const reset = () => {
|
|
|
|
|
noMore.value = false;
|
|
|
|
|
list.value = [];
|
|
|
|
|
postList.value = [];
|
|
|
|
|
commentList.value = [];
|
|
|
|
|
highlightList.value = [];
|
|
|
|
|
mediaList.value = [];
|
|
|
|
|
starList.value = [];
|
|
|
|
|
pageType.value = 'post';
|
|
|
|
|
page.value = 1;
|
|
|
|
|
postPage.value = 1;
|
|
|
|
|
commentPage.value = 1;
|
|
|
|
|
highlightPage.value = 1;
|
|
|
|
|
mediaPage.value = 1;
|
|
|
|
|
starPage.value = 1;
|
|
|
|
|
totalPage.value = 0;
|
|
|
|
|
postTotalPage.value = 0;
|
|
|
|
|
commentTotalPage.value = 0;
|
|
|
|
|
highlightTotalPage.value = 0;
|
|
|
|
|
mediaTotalPage.value = 0;
|
|
|
|
|
starTotalPage.value = 0;
|
|
|
|
|
noMore.value = false;
|
|
|
|
|
list.value = [];
|
|
|
|
|
postList.value = [];
|
|
|
|
|
commentList.value = [];
|
|
|
|
|
highlightList.value = [];
|
|
|
|
|
mediaList.value = [];
|
|
|
|
|
starList.value = [];
|
|
|
|
|
pageType.value = 'post';
|
|
|
|
|
page.value = 1;
|
|
|
|
|
postPage.value = 1;
|
|
|
|
|
commentPage.value = 1;
|
|
|
|
|
highlightPage.value = 1;
|
|
|
|
|
mediaPage.value = 1;
|
|
|
|
|
starPage.value = 1;
|
|
|
|
|
totalPage.value = 0;
|
|
|
|
|
postTotalPage.value = 0;
|
|
|
|
|
commentTotalPage.value = 0;
|
|
|
|
|
highlightTotalPage.value = 0;
|
|
|
|
|
mediaTotalPage.value = 0;
|
|
|
|
|
starTotalPage.value = 0;
|
|
|
|
|
};
|
|
|
|
|
const loadPage = () => {
|
|
|
|
|
switch (pageType.value) {
|
|
|
|
|
case 'post':
|
|
|
|
|
loadPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'comment':
|
|
|
|
|
loadCommentPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'highlight':
|
|
|
|
|
loadHighlightPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'media':
|
|
|
|
|
loadMediaPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'star':
|
|
|
|
|
loadStarPosts();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const loadPosts = () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style: 'post',
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
postList.value = list.value;
|
|
|
|
|
postTotalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const loadCommentPosts = () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style: 'comment',
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
commentList.value = list.value;
|
|
|
|
|
commentTotalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
loadPostsByStyle(pageType.value);
|
|
|
|
|
};
|
|
|
|
|
const loadHighlightPosts = () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style: 'highlight',
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
highlightList.value = list.value;
|
|
|
|
|
highlightTotalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
const styleListMap = {
|
|
|
|
|
post: { list: postList, totalPage: postTotalPage },
|
|
|
|
|
comment: { list: commentList, totalPage: commentTotalPage },
|
|
|
|
|
highlight: { list: highlightList, totalPage: highlightTotalPage },
|
|
|
|
|
media: { list: mediaList, totalPage: mediaTotalPage },
|
|
|
|
|
star: { list: starList, totalPage: starTotalPage },
|
|
|
|
|
};
|
|
|
|
|
const loadMediaPosts = () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style: 'media',
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
mediaList.value = list.value;
|
|
|
|
|
mediaTotalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
function loadPostsByStyle(style: keyof typeof styleListMap) {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style,
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
styleListMap[style].list.value = list.value;
|
|
|
|
|
styleListMap[style].totalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((_err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const loadStarPosts = () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
Api.v1.user.get.posts({
|
|
|
|
|
username: username.value as string,
|
|
|
|
|
style: 'star',
|
|
|
|
|
page: page.value,
|
|
|
|
|
page_size: pageSize.value,
|
|
|
|
|
})
|
|
|
|
|
.then((rsp) => {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
if (rsp.list.length === 0) {
|
|
|
|
|
noMore.value = true;
|
|
|
|
|
}
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
list.value = list.value.concat(rsp.list);
|
|
|
|
|
} else {
|
|
|
|
|
list.value = rsp.list || [];
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}
|
|
|
|
|
totalPage.value = Math.ceil(rsp.pager.total_rows / pageSize.value);
|
|
|
|
|
starList.value = list.value;
|
|
|
|
|
starTotalPage.value = totalPage.value;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
list.value = [];
|
|
|
|
|
if (page.value > 1) {
|
|
|
|
|
page.value--;
|
|
|
|
|
}
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
const stylePageMap = {
|
|
|
|
|
post: postPage,
|
|
|
|
|
comment: commentPage,
|
|
|
|
|
highlight: highlightPage,
|
|
|
|
|
media: mediaPage,
|
|
|
|
|
star: starPage,
|
|
|
|
|
};
|
|
|
|
|
const changeTab = (
|
|
|
|
|
tab: 'post' | 'comment' | 'highlight' | 'media' | 'star',
|
|
|
|
|
) => {
|
|
|
|
|
pageType.value = tab;
|
|
|
|
|
switch (pageType.value) {
|
|
|
|
|
case 'post':
|
|
|
|
|
list.value = postList.value;
|
|
|
|
|
page.value = postPage.value;
|
|
|
|
|
totalPage.value = postTotalPage.value;
|
|
|
|
|
loadPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'comment':
|
|
|
|
|
list.value = commentList.value;
|
|
|
|
|
page.value = commentPage.value;
|
|
|
|
|
totalPage.value = commentTotalPage.value;
|
|
|
|
|
loadCommentPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'highlight':
|
|
|
|
|
list.value = highlightList.value;
|
|
|
|
|
page.value = highlightPage.value;
|
|
|
|
|
totalPage.value = highlightTotalPage.value;
|
|
|
|
|
loadHighlightPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'media':
|
|
|
|
|
list.value = mediaList.value;
|
|
|
|
|
page.value = mediaPage.value;
|
|
|
|
|
totalPage.value = mediaTotalPage.value;
|
|
|
|
|
loadMediaPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'star':
|
|
|
|
|
list.value = starList.value;
|
|
|
|
|
page.value = starPage.value;
|
|
|
|
|
totalPage.value = starTotalPage.value;
|
|
|
|
|
loadStarPosts();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
function changeTab(tab: PageType) {
|
|
|
|
|
pageType.value = tab;
|
|
|
|
|
list.value = styleListMap[tab].list.value;
|
|
|
|
|
page.value = stylePageMap[tab].value;
|
|
|
|
|
totalPage.value = styleListMap[tab].totalPage.value;
|
|
|
|
|
loadPostsByStyle(tab);
|
|
|
|
|
};
|
|
|
|
|
const loadUser = () => {
|
|
|
|
|
userLoading.value = true;
|
|
|
|
|
@ -621,28 +363,8 @@ const loadUser = () => {
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const updatePage = () => {
|
|
|
|
|
switch (pageType.value) {
|
|
|
|
|
case 'post':
|
|
|
|
|
postPage.value = page.value;
|
|
|
|
|
loadPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'comment':
|
|
|
|
|
commentPage.value = page.value;
|
|
|
|
|
loadCommentPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'highlight':
|
|
|
|
|
highlightPage.value = page.value;
|
|
|
|
|
loadHighlightPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'media':
|
|
|
|
|
mediaPage.value = page.value;
|
|
|
|
|
loadMediaPosts();
|
|
|
|
|
break;
|
|
|
|
|
case 'star':
|
|
|
|
|
starPage.value = page.value;
|
|
|
|
|
loadStarPosts();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
stylePageMap[pageType.value].value = page.value;
|
|
|
|
|
loadPostsByStyle(pageType.value);
|
|
|
|
|
};
|
|
|
|
|
const openWhisper = () => {
|
|
|
|
|
showWhisper.value = true;
|
|
|
|
|
@ -780,10 +502,10 @@ const openDeleteFriend = () => {
|
|
|
|
|
Api.v1.friend.post.delete({
|
|
|
|
|
user_id: user.id,
|
|
|
|
|
})
|
|
|
|
|
.then((res) => {
|
|
|
|
|
.then((_res) => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
user.is_friend = false;
|
|
|
|
|
loadPosts();
|
|
|
|
|
loadPostsByStyle('post');
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
@ -793,46 +515,15 @@ const openDeleteFriend = () => {
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const handleFollowUser = () => {
|
|
|
|
|
dialog.success({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content:
|
|
|
|
|
'确定' +
|
|
|
|
|
(user.is_following ? '取消关注 @' : '关注 @') +
|
|
|
|
|
user.username +
|
|
|
|
|
' 吗?',
|
|
|
|
|
positiveText: '确定',
|
|
|
|
|
negativeText: '取消',
|
|
|
|
|
onPositiveClick: () => {
|
|
|
|
|
userLoading.value = true;
|
|
|
|
|
if (user.is_following) {
|
|
|
|
|
Api.v1.user.post.unfollow({
|
|
|
|
|
user_id: user.id,
|
|
|
|
|
})
|
|
|
|
|
.then((_res) => {
|
|
|
|
|
UserAction.followAction(dialog, user.id, user.username, user.is_following)
|
|
|
|
|
.then(_action => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
window.$message.success('操作成功');
|
|
|
|
|
loadUser();
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
console.log(err);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
Api.v1.user.post.follow({
|
|
|
|
|
user_id: user.id,
|
|
|
|
|
})
|
|
|
|
|
.then((_res) => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
window.$message.success('操作成功');
|
|
|
|
|
loadUser();
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
console.log(err);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
userLoading.value = false;
|
|
|
|
|
console.log(err);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const banUser = () => {
|
|
|
|
|
dialog.warning({
|
|
|
|
|
|