diff --git a/web/src/components/contact-item.vue b/web/src/components/contact-item.vue deleted file mode 100644 index a8bb7c11..00000000 --- a/web/src/components/contact-item.vue +++ /dev/null @@ -1,168 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web/src/components/infinite-load-more.vue b/web/src/components/infinite-load-more.vue new file mode 100644 index 00000000..91e59e58 --- /dev/null +++ b/web/src/components/infinite-load-more.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/web/src/components/message-item.vue b/web/src/components/message-item.vue index e47b7d52..58dc27a3 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 '@/composables/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(dialog, 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..02b9800d 100644 --- a/web/src/components/post-detail.vue +++ b/web/src/components/post-detail.vue @@ -259,6 +259,8 @@ import copy from 'copy-to-clipboard'; import { storeToRefs } from 'pinia'; import { useStoreUser } from '@/store/user'; import { Api } from '@/utils/request'; +import UserAction from '@/composables/useUserAction'; +import { usePostContent } from '@/composables/usePostContent'; const useFriendship = import.meta.env.VITE_USE_FRIENDSHIP.toLowerCase() === 'true'; @@ -313,48 +315,8 @@ const emit = defineEmits<{ (e: 'reload', post_id: number): void; }>(); -const post = computed({ - get: () => { - let post: Item.PostComponentProps = Object.assign( - { - texts: [], - imgs: [], - videos: [], - links: [], - attachments: [], - charge_attachments: [], - }, - props.post, - ); - post.contents.map((content) => { - if (+content.type === 1 || +content.type === 2) { - post.texts.push(content); - } - if (+content.type === 3) { - post.imgs.push(content); - } - if (+content.type === 4) { - post.videos.push(content); - } - if (+content.type === 6) { - post.links.push(content); - } - if (+content.type === 7) { - post.attachments.push(content); - } - if (+content.type === 8) { - post.charge_attachments.push(content); - } - }); - return post; - }, - set: (newVal) => { - props.post.upvote_count = newVal.upvote_count; - props.post.comment_count = newVal.comment_count; - props.post.collection_count = newVal.collection_count; - props.post.is_essence = newVal.is_essence; - }, -}); +// 使用 usePostContent composable (包含额外字段) +const post = usePostContent(props.post, true); const renderIcon = (icon: Component) => { return () => { @@ -491,37 +453,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(dialog, 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..0b05c5cb 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 }} + +