From fb89c9fb254029b3a6247f8ac25e23eeca889f38 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 19 Aug 2025 21:48:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BC=B9=E5=87=BA=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend_nuxt/components/ConfirmDialog.vue | 64 +++++++---- frontend_nuxt/composables/useConfirm.js | 42 ------- frontend_nuxt/composables/useConfirm.ts | 52 +++++++++ frontend_nuxt/pages/posts/[id]/index.vue | 126 +++++++++++++++++---- 4 files changed, 194 insertions(+), 90 deletions(-) delete mode 100644 frontend_nuxt/composables/useConfirm.js create mode 100644 frontend_nuxt/composables/useConfirm.ts diff --git a/frontend_nuxt/components/ConfirmDialog.vue b/frontend_nuxt/components/ConfirmDialog.vue index 922dd402a..f3a678d8b 100644 --- a/frontend_nuxt/components/ConfirmDialog.vue +++ b/frontend_nuxt/components/ConfirmDialog.vue @@ -1,21 +1,21 @@ - \ No newline at end of file +.cancel-button:hover { + opacity: 0.85; +} + diff --git a/frontend_nuxt/composables/useConfirm.js b/frontend_nuxt/composables/useConfirm.js deleted file mode 100644 index feffa0712..000000000 --- a/frontend_nuxt/composables/useConfirm.js +++ /dev/null @@ -1,42 +0,0 @@ -import { ref } from 'vue' - -const state = ref({ - visible: false, - title: '', - message: '', - resolve: null, - reject: null, -}) - -export const useConfirm = () => { - const confirm = (title, message) => { - state.value.title = title - state.value.message = message - state.value.visible = true - return new Promise((resolve, reject) => { - state.value.resolve = resolve - state.value.reject = reject - }) - } - - const onConfirm = () => { - if (state.value.resolve) { - state.value.resolve(true) - } - state.value.visible = false - } - - const onCancel = () => { - if (state.value.reject) { - state.value.reject(false) - } - state.value.visible = false - } - - return { - confirm, - onConfirm, - onCancel, - state, - } -} \ No newline at end of file diff --git a/frontend_nuxt/composables/useConfirm.ts b/frontend_nuxt/composables/useConfirm.ts new file mode 100644 index 000000000..d33822a0e --- /dev/null +++ b/frontend_nuxt/composables/useConfirm.ts @@ -0,0 +1,52 @@ +// composables/useConfirm.ts +import { ref } from 'vue' + +// 全局单例(SPA 下即可;Nuxt/SSR 下见文末“SSR 提醒”) +const visible = ref(false) +const title = ref('') +const message = ref('') + +let resolver: ((ok: boolean) => void) | null = null + +function reset() { + visible.value = false + title.value = '' + message.value = '' + resolver = null +} + +export function useConfirm() { + /** + * 打开确认框,返回 Promise + * - 确认 => resolve(true) + * - 取消/关闭 => resolve(false) + * 若并发调用,以最后一次为准(更简单直观) + */ + const confirm = (t: string, m: string) => { + title.value = t + message.value = m + visible.value = true + return new Promise((resolve) => { + resolver = resolve + }) + } + + const onConfirm = () => { + resolver?.(true) + reset() + } + + const onCancel = () => { + resolver?.(false) + reset() + } + + return { + visible, + title, + message, + confirm, + onConfirm, + onCancel, + } +} diff --git a/frontend_nuxt/pages/posts/[id]/index.vue b/frontend_nuxt/pages/posts/[id]/index.vue index 5771163d9..d2e76abc1 100644 --- a/frontend_nuxt/pages/posts/[id]/index.vue +++ b/frontend_nuxt/pages/posts/[id]/index.vue @@ -15,13 +15,21 @@
审核中
已拒绝
-
+
{{ isMobile ? '订阅' : '订阅文章' }}
-
+
{{ isMobile ? '退订' : '取消订阅' }} @@ -44,8 +52,12 @@
{{ author.username }} - {{ - getMedalTitle(author.displayMedal) }} + {{ getMedalTitle(author.displayMedal) }}
{{ postTime }}
@@ -56,12 +68,20 @@
{{ author.username }} - {{ - getMedalTitle(author.displayMedal) }} + {{ getMedalTitle(author.displayMedal) }}
{{ postTime }}
-
+