From 6db1ab0a45b59eec7dd07c806a2ba4544cd1098f Mon Sep 17 00:00:00 2001 From: BTMuli Date: Sat, 17 Jan 2026 23:07:54 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8F=8D=E9=A6=88=E6=98=BE=E7=A4=BA=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 39 ++++++++++++++++++++++++++++++++- src/main.ts | 31 -------------------------- src/pages/common/PageConfig.vue | 18 ++++++++++++++- src/store/modules/app.ts | 5 +++++ 4 files changed, 60 insertions(+), 33 deletions(-) diff --git a/src/App.vue b/src/App.vue index 7e05a929..c12ca8d6 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,6 +17,7 @@ import showDialog from "@comp/func/dialog.js"; import showLoading from "@comp/func/loading.js"; import showSnackbar from "@comp/func/snackbar.js"; import OtherApi from "@req/otherReq.js"; +import type { FeedbackInternalOptions, Integration } from "@sentry/core"; import * as Sentry from "@sentry/vue"; import { commands } from "@skipperndt/plugin-machine-uid"; import TGSqlite from "@Sql/index.js"; @@ -38,7 +39,7 @@ import { computed, nextTick, onMounted, onUnmounted, ref } from "vue"; import { useRouter } from "vue-router"; const router = useRouter(); -const { theme, needResize, deviceInfo, isLogin, userDir, buildTime, closeToTray } = +const { theme, needResize, deviceInfo, isLogin, userDir, buildTime, closeToTray, showFeedback } = storeToRefs(useAppStore()); const { uid, briefInfo, account, cookie } = storeToRefs(useUserStore()); @@ -76,6 +77,9 @@ onMounted(async () => { await win.center(); await win.show(); } + if (showFeedback.value) { + Sentry.addIntegration(getSentryFeedback()); + } }); onUnmounted(() => { @@ -105,6 +109,39 @@ onUnmounted(() => { } }); +function getSentryFeedback(): Integration { + return Sentry.feedbackAsyncIntegration({ + // 🌗 主题与注入行为 + colorScheme: "system", + autoInject: true, + triggerLabel: "", + + // 📝 表单标题与按钮文案 + formTitle: "问题反馈", + cancelButtonLabel: "取消", + submitButtonLabel: "提交反馈", + successMessageText: "感谢您的反馈,我们将尽快处理。", + + // 🧑 用户信息字段 + nameLabel: "反馈人", + namePlaceholder: "请输入您的姓名或昵称", + emailLabel: "电子邮箱", + emailPlaceholder: "请输入您的邮箱地址,以便我们与您联系", + + // 🐛 问题描述字段 + messageLabel: "问题描述", + messagePlaceholder: "请详细描述您遇到的问题及复现步骤", + isRequiredLabel: "(必填)", + + // 📸 截图工具相关 + addScreenshotButtonLabel: "添加当前页面截图", + removeScreenshotButtonLabel: "移除截图", + highlightToolText: "标记重点区域", + removeHighlightText: "移除标记", + hideToolText: "遮挡敏感信息", + }); +} + /** * 自定义URL协议监听处理 * @param {Event} event - 事件 diff --git a/src/main.ts b/src/main.ts index 848932c4..d1536c52 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,6 @@ * @since Beta v0.9.2 */ -import type { FeedbackInternalOptions } from "@sentry/core"; import * as Sentry from "@sentry/vue"; import { createApp, defineCustomElement } from "vue"; import { createVuetify } from "vuetify"; @@ -27,36 +26,6 @@ Sentry.init({ enableLogs: true, environment: process.env.NODE_ENV, integrations: [ - Sentry.feedbackAsyncIntegration({ - // 🌗 主题与注入行为 - colorScheme: "system", - autoInject: true, - triggerLabel: "", - - // 📝 表单标题与按钮文案 - formTitle: "问题反馈", - cancelButtonLabel: "取消", - submitButtonLabel: "提交反馈", - successMessageText: "感谢您的反馈,我们将尽快处理。", - - // 🧑 用户信息字段 - nameLabel: "反馈人", - namePlaceholder: "请输入您的姓名或昵称", - emailLabel: "电子邮箱", - emailPlaceholder: "请输入您的邮箱地址,以便我们与您联系", - - // 🐛 问题描述字段 - messageLabel: "问题描述", - messagePlaceholder: "请详细描述您遇到的问题及复现步骤", - isRequiredLabel: "(必填)", - - // 📸 截图工具相关 - addScreenshotButtonLabel: "添加当前页面截图", - removeScreenshotButtonLabel: "移除截图", - highlightToolText: "标记重点区域", - removeHighlightText: "移除标记", - hideToolText: "遮挡敏感信息", - }), Sentry.consoleLoggingIntegration({ levels: ["error"] }), Sentry.browserTracingIntegration({ router }), ], diff --git a/src/pages/common/PageConfig.vue b/src/pages/common/PageConfig.vue index 432b23b4..694e8fa2 100644 --- a/src/pages/common/PageConfig.vue +++ b/src/pages/common/PageConfig.vue @@ -26,7 +26,7 @@ - + + + + +