From b8acc8be43963cd6550ae4dafabc99d7454a81f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=AD=A3=E8=88=AA?= <1915581435@qq.com> Date: Thu, 14 May 2026 21:15:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20admin-web=E6=96=B0=E5=A2=9Efeedback?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=92=8C=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .gitignore | 5 ++++ admin-web/src/main.js | 17 +++++++++++ admin-web/src/utils/feedback.js | 39 +++++++++++++++++++++++++ admin-web/src/views/Batch.vue | 15 ++++++---- admin-web/src/views/Detect.vue | 2 ++ admin-web/src/views/Home.vue | 13 +++++---- admin-web/src/views/admin/Dashboard.vue | 10 ++++--- admin-web/src/views/admin/Samples.vue | 1 + admin-web/src/views/admin/Users.vue | 1 + admin-web/vue.config.js | 4 +++ backend/mysqlconfig.json | 2 +- 11 files changed, 94 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 25a15a4..d329e26 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,8 @@ __pycache__/ # OS .DS_Store Thumbs.db + +# Archives +*.zip +*.tar.gz +*.7z diff --git a/admin-web/src/main.js b/admin-web/src/main.js index c3b0713..8814539 100644 --- a/admin-web/src/main.js +++ b/admin-web/src/main.js @@ -5,6 +5,23 @@ import './styles/theme.css' Vue.config.productionTip = false +Vue.config.errorHandler = (err, vm, info) => { + console.error('[vue error]', info, err) +} + +Vue.config.warnHandler = (msg, vm, trace) => { + console.warn('[vue warn]', msg, trace) +} + +window.addEventListener('unhandledrejection', (event) => { + console.warn('[unhandled rejection]', event.reason) + event.preventDefault() +}) + +window.addEventListener('error', (event) => { + console.error('[window error]', event.error || event.message) +}) + new Vue({ router, render: (h) => h(App) diff --git a/admin-web/src/utils/feedback.js b/admin-web/src/utils/feedback.js index 8dc305c..7d4d83b 100644 --- a/admin-web/src/utils/feedback.js +++ b/admin-web/src/utils/feedback.js @@ -57,3 +57,42 @@ export function previewImage(urls, current) { if (!urls || !urls.length) return ensurePreview().open({ urls, current }) } + +export async function copyText(text) { + if (text === undefined || text === null) return false + const value = String(text) + + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(value) + return true + } catch (err) { + console.warn('[copyText] navigator.clipboard 不可用,回退到 execCommand', err) + } + } + + try { + const textarea = document.createElement('textarea') + textarea.value = value + textarea.setAttribute('readonly', '') + textarea.style.position = 'fixed' + textarea.style.top = '0' + textarea.style.left = '0' + textarea.style.width = '1px' + textarea.style.height = '1px' + textarea.style.opacity = '0' + textarea.style.pointerEvents = 'none' + document.body.appendChild(textarea) + + textarea.focus() + textarea.select() + textarea.setSelectionRange(0, value.length) + + const ok = document.execCommand('copy') + document.body.removeChild(textarea) + return !!ok + } catch (err) { + console.error('[copyText] execCommand 也失败了', err) + return false + } +} diff --git a/admin-web/src/views/Batch.vue b/admin-web/src/views/Batch.vue index 6bbe421..943da5f 100644 --- a/admin-web/src/views/Batch.vue +++ b/admin-web/src/views/Batch.vue @@ -136,7 +136,7 @@