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 @@
+
+
+
+
+
+
+ {{ noMore ? completeText : '加载更多' }}
+
+
+
+
+
+
+
+
+
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 @@
-
-
-
-
-
-
-
-
-
- {{ post.user.nickname }}
-
-
- @{{ post.user.username }}
-
- 置顶
-
-
- 私密
-
-
- 好友可见
-
-
-
- {{ formatPrettyDate(post.created_on) }} {{ post.ip_loc }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ post.upvote_count }}
-
-
-
-
-
- {{ post.comment_count }}
-
-
-
-
-
- {{ post.collection_count }}
-
-
-
-
-
-
-
-
-
-
\ 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 }}
+
+
-
+
+
+
-
-
-
-
-
- {{ noMore ? '没有更多好友了' : '加载更多' }}
-
-
-
-