From 7a2e7ebfc41ade1b1d3a1b6377f8b26dfb982179 Mon Sep 17 00:00:00 2001 From: orzi <1063614727@qq.com> Date: Sun, 15 Mar 2026 17:22:14 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8A=BD=E7=A6=BB=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=8F=8A=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/follow-item.vue | 43 +- web/src/components/message-item.vue | 59 +-- web/src/components/mobile-post-item.vue | 458 ------------------ web/src/components/post-detail.vue | 36 +- web/src/components/post-item.vue | 54 ++- web/src/utils/useUserAction.ts | 48 ++ web/src/views/Collection.vue | 57 +-- web/src/views/Home.vue | 63 +-- web/src/views/Profile.vue | 387 +++------------- web/src/views/User.vue | 591 ++++++------------------ 10 files changed, 331 insertions(+), 1465 deletions(-) delete mode 100644 web/src/components/mobile-post-item.vue create mode 100644 web/src/utils/useUserAction.ts diff --git a/web/src/components/follow-item.vue b/web/src/components/follow-item.vue index e7ed38c0..5bd4e135 100644 --- a/web/src/components/follow-item.vue +++ b/web/src/components/follow-item.vue @@ -63,6 +63,7 @@ import { formatDate } from '@/utils/formatTime'; import { MoreHorizFilled } from '@vicons/material'; import { PaperPlaneOutline, BodyOutline, WalkOutline } from '@vicons/ionicons5'; import { Api } from '@/utils/request'; +import UserAction from '@/utils/useUserAction'; const dialog = useDialog(); @@ -79,41 +80,13 @@ const renderIcon = (icon: Component) => { }; const handleFollowUser = () => { - dialog.success({ - title: '提示', - content: - '确定' + - (props.contact.is_following ? '取消关注 @' : '关注 @') + - props.contact.username + - ' 吗?', - positiveText: '确定', - negativeText: '取消', - onPositiveClick: () => { - if (props.contact.is_following) { - Api.v1.user.post.unfollow({ - user_id: props.contact.user_id, - }) - .then((_res) => { - window.$message.success('取消关注成功'); - props.contact.is_following = false; - }) - .catch((err) => { - console.log(err); - }); - } else { - Api.v1.user.post.follow({ - user_id: props.contact.user_id, - }) - .then((_res) => { - window.$message.success('关注成功'); - props.contact.is_following = true; - }) - .catch((err) => { - console.log(err); - }); - } - }, - }); + UserAction.followAction(props.contact.user_id, props.contact.username, props.contact.is_following) + .then(_action => { + props.contact.is_following = _action; + }) + .catch(err => { + console.log(err); + }); }; const props = withDefaults( diff --git a/web/src/components/message-item.vue b/web/src/components/message-item.vue index e47b7d52..514f32cc 100644 --- a/web/src/components/message-item.vue +++ b/web/src/components/message-item.vue @@ -157,6 +157,7 @@ import { formatRelativeTime } from '@/utils/formatTime'; import { MoreHorizFilled } from '@vicons/material'; import { storeToRefs } from 'pinia'; import { Api } from '@/utils/request'; +import UserAction from '@/utils/useUserAction'; const defaultavatar = 'https://assets.paopao.info/public/avatar/default/admin.png'; @@ -221,49 +222,21 @@ const emit = defineEmits<{ }>(); const onHandleFollowAction = (message: Item.MessageProps) => { - let user = - message.type == 4 && message.sender_user_id == userInfo.value.id - ? message.receiver_user - : message.sender_user; - dialog.success({ - title: '提示', - content: - '确定' + - (user.is_following ? '取消关注 @' : '关注 @') + - user.username + - ' 吗?', - positiveText: '确定', - negativeText: '取消', - onPositiveClick: () => { - if (user.is_following) { - Api.v1.user.post.unfollow({ - user_id: user.id, - }) - .then((_res) => { - window.$message.success('操作成功'); - user.is_following = false; - // TODO: 这里暴力处理,简单重新加载,更好的做法是遍历所有message,如果是对应user就更新到新状态 - setTimeout(() => { - emit('reload'); - }, 50); - }) - .catch((_err) => {}); - } else { - Api.v1.user.post.follow({ - user_id: user.id, - }) - .then((_res) => { - window.$message.success('关注成功'); - user.is_following = true; - // TODO: 这里暴力处理,简单重新加载,更好的做法是遍历所有message,如果是对应user就更新到新状态 - setTimeout(() => { - emit('reload'); - }, 50); - }) - .catch((_err) => {}); - } - }, - }); + let user = + message.type == 4 && message.sender_user_id == userInfo.value.id + ? message.receiver_user + : message.sender_user; + UserAction.followAction(user.id, user.username, user.is_following) + .then(_action => { + user.is_following = _action; + // TODO: 这里暴力处理,简单重新加载,更好的做法是遍历所有message,如果是对应user就更新到新状态 + setTimeout(() => { + emit('reload'); + }, 50); + }) + .catch(err => { + console.log(err); + }); }; const handleAction = (item: 'whisper' | 'follow' | 'unfollow') => { diff --git a/web/src/components/mobile-post-item.vue b/web/src/components/mobile-post-item.vue deleted file mode 100644 index a43615a4..00000000 --- a/web/src/components/mobile-post-item.vue +++ /dev/null @@ -1,458 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web/src/components/post-detail.vue b/web/src/components/post-detail.vue index 2ed69e16..3e041257 100644 --- a/web/src/components/post-detail.vue +++ b/web/src/components/post-detail.vue @@ -259,6 +259,7 @@ import copy from 'copy-to-clipboard'; import { storeToRefs } from 'pinia'; import { useStoreUser } from '@/store/user'; import { Api } from '@/utils/request'; +import UserAction from '@/utils/useUserAction'; const useFriendship = import.meta.env.VITE_USE_FRIENDSHIP.toLowerCase() === 'true'; @@ -491,37 +492,10 @@ const adminOptions = computed(() => { }); const onHandleFollowAction = (post: Item.PostProps) => { - dialog.success({ - title: '提示', - content: - '确定' + - (post.user.is_following ? '取消关注 @' : '关注 @') + - props.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('操作成功'); - post.user.is_following = false; - }) - .catch((_err) => {}); - } else { - Api.v1.user.post.follow({ - user_id: post.user.id, - }) - .then((_res) => { - window.$message.success('操作成功'); - post.user.is_following = true; - }) - .catch((_err) => {}); - } - }, - }); + UserAction.followAction(post.user.id, post.user.username, post.user.is_following) + .then(_action => { + post.user.is_following = _action; + }) }; const goPostDetail = (id: number) => { diff --git a/web/src/components/post-item.vue b/web/src/components/post-item.vue index c9f42ac6..7c1c7e62 100644 --- a/web/src/components/post-item.vue +++ b/web/src/components/post-item.vue @@ -45,16 +45,21 @@ > 好友可见 +
+ + {{ formatPrettyDate(post.created_on) }} {{ post.ip_loc }} + +