From c3246e95cec2766211a2141e4204bc815bb10e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=AE=E6=A3=83?= Date: Wed, 12 Mar 2025 11:06:12 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E5=8A=A0=E8=BD=BD=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E7=94=A8=E6=88=B7=E5=B8=96=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/app/t-postcard.vue | 19 +- src/components/viewPost/tp-avatar.vue | 13 +- src/components/viewPost/tp-mention.vue | 7 +- src/components/viewPost/vp-overlay-user.vue | 307 ++++++++++++++++++++ src/components/viewPost/vp-reply-item.vue | 10 +- src/pages/common/PostCollect.vue | 4 +- src/pages/common/PostForum.vue | 26 +- src/pages/common/PostTopic.vue | 27 +- src/types/BBS/Post.d.ts | 21 ++ src/views/t-post.vue | 51 +++- src/web/request/bbsReq.ts | 6 +- src/web/request/postReq.ts | 25 +- 12 files changed, 474 insertions(+), 42 deletions(-) create mode 100644 src/components/viewPost/vp-overlay-user.vue diff --git a/src/components/app/t-postcard.vue b/src/components/app/t-postcard.vue index 57b84313..bfc20866 100644 --- a/src/components/app/t-postcard.vue +++ b/src/components/app/t-postcard.vue @@ -15,7 +15,7 @@
{{ card.title }}
- +
@@ -80,8 +80,15 @@ import { useRoute, useRouter } from "vue-router"; import { generateShareImg } from "@/utils/TGShare.js"; import { createPost } from "@/utils/TGWindow.js"; -type TPostCardProps = { modelValue: TGApp.BBS.Post.FullData; selectMode?: boolean }; -type TPostCardEmits = (e: "onSelected", v: string) => void; +type TPostCardProps = { + modelValue: TGApp.BBS.Post.FullData; + selectMode?: boolean; + userClick?: boolean; +}; +type TPostCardEmits = { + (e: "onSelected", v: string): void; + (e: "onUserClick", v: TGApp.BBS.Post.User): void; +}; type TPostStatus = RenderStatus & { stat: ActStat }; type RenderForum = { name: string; icon: string; id: number }; type RenderStatus = { stat: number; label: string; color: string }; @@ -226,6 +233,11 @@ async function toForum(forum: RenderForum): Promise { const gid = props.modelValue.post.game_id; await emit("active_deep_link", `router?path=/posts/forum/${gid}/${forum.id}`); } + +function onUserClick(): void { + if (!card.value || card.value.user === null) return; + emits("onUserClick", card.value.user); +} diff --git a/src/components/viewPost/vp-reply-item.vue b/src/components/viewPost/vp-reply-item.vue index da9cc939..13e39dc8 100644 --- a/src/components/viewPost/vp-reply-item.vue +++ b/src/components/viewPost/vp-reply-item.vue @@ -7,7 +7,7 @@ >
-
+
@@ -104,7 +104,7 @@ import TMiImg from "@comp/app/t-mi-img.vue"; import showDialog from "@comp/func/dialog.js"; import showSnackbar from "@comp/func/snackbar.js"; import { event, path } from "@tauri-apps/api"; -import type { Event, UnlistenFn } from "@tauri-apps/api/event"; +import { emit, Event, UnlistenFn } from "@tauri-apps/api/event"; import { save } from "@tauri-apps/plugin-dialog"; import { writeTextFile } from "@tauri-apps/plugin-fs"; import { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, watch } from "vue"; @@ -226,6 +226,11 @@ async function exportData(): Promise { await writeTextFile(savePath, data); showSnackbar.success("导出成功"); } + +async function handleUser(): Promise { + const uid = props.modelValue.user.uid; + await emit("userMention", uid); +}