361361 </div >
362362 </div >
363363 </div >
364+
365+ <!-- 警告渲染 -->
366+ <transition name =" fade" >
367+ <div v-if =" warning" class =" bg-amber-50 border border-amber-200 rounded-lg p-4 mt-6 flex items-start" >
368+ <svg class =" h-5 w-5 mr-2 flex-shrink-0 text-amber-500" fill =" none" stroke =" currentColor" viewBox =" 0 0 24 24" >
369+ <path stroke-linecap =" round" stroke-linejoin =" round" stroke-width =" 2" d =" M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
370+ </svg >
371+ <div >
372+ <p class =" font-semibold text-amber-800" >温馨提示</p >
373+ <p class =" text-sm mt-1 text-amber-700" >{{ warning }}</p >
374+ </div >
375+ </div >
376+ </transition >
364377
365378 <!-- 错误提示 -->
366379 <transition name =" fade" >
403416import { ref , reactive , computed , onMounted } from ' vue'
404417import { useApi } from ' ~/composables/useApi'
405418
406- const { decryptDatabase , saveMediaKeys , getSavedKeys , getDbKey , getImageKey } = useApi ()
419+ const { decryptDatabase , saveMediaKeys , getSavedKeys , getDbKey , getImageKey , getWxStatus } = useApi ()
407420
408421const loading = ref (false )
409422const error = ref (' ' )
423+ const warning = ref (' ' ) // 警告,用于密钥提示
410424const currentStep = ref (0 )
411425const mediaAccount = ref (' ' )
412426const isGettingDbKey = ref (false )
@@ -496,10 +510,29 @@ const handleGetDbKey = async () => {
496510 isGettingDbKey .value = true
497511
498512 error .value = ' '
499-
513+ warning . value = ' '
500514 formErrors .key = ' '
501515
502516 try {
517+ const { data: statusData , error: statusError } = await getWxStatus ()
518+
519+ if (statusError .value ) {
520+ error .value = ' 无法获取微信状态: ' + statusError .value .message
521+ isGettingDbKey .value = false
522+ return
523+ }
524+
525+ const wxStatus = statusData .value ? .wx_status
526+
527+ if (wxStatus? .is_running ) {
528+ warning .value = ' 检测到微信正在运行,5秒后将终止进程并重启以获取密钥!!'
529+ await new Promise (resolve => setTimeout (resolve, 5000 ))
530+ } else {
531+ // 没有逻辑
532+ }
533+
534+ warning .value = ' 正在启动微信以获取密钥,请确保微信未开启“自动登录”,并在启动后 1 分钟内完成登录操作。'
535+
503536 const { data , error: fetchError } = await getDbKey ()
504537
505538 if (fetchError .value ) {
@@ -509,14 +542,14 @@ const handleGetDbKey = async () => {
509542
510543 const res = data .value
511544
512- if (res && ( res .status === 0 ) ) {
545+ if (res && res .status === 0 ) {
513546 if (res .data ? .db_key ) {
514547 formData .key = res .data .db_key
548+ warning .value = ' '
515549 }
516550
517- // 有错误信息且不是ok时弹出提示
518551 if (res .errmsg && res .errmsg !== ' ok' ) {
519- error .value = res .errmsg
552+ warning .value = res .errmsg
520553 }
521554 } else {
522555 error .value = ' 获取失败: ' + (res? .errmsg || ' 未知错误' )
@@ -536,6 +569,7 @@ const handleGetImageKey = async () => {
536569 manualKeyErrors .aes_key = ' '
537570
538571 error .value = ' '
572+ warning .value = ' '
539573
540574 try {
541575 const { data , fetchError } = await getImageKey ()
@@ -573,6 +607,7 @@ const applyManualKeys = () => {
573607 manualKeyErrors .xor_key = ' '
574608 manualKeyErrors .aes_key = ' '
575609 error .value = ' '
610+ warning .value = ' '
576611
577612 const aes = normalizeAesKey (manualKeys .aes_key )
578613 if (! aes .ok ) {
@@ -666,6 +701,7 @@ const handleDecrypt = async () => {
666701
667702 loading .value = true
668703 error .value = ' '
704+ warning .value = ' '
669705
670706 try {
671707 const result = await decryptDatabase ({
@@ -712,6 +748,7 @@ const decryptAllImages = async () => {
712748 mediaDecrypting .value = true
713749 mediaDecryptResult .value = null
714750 error .value = ' '
751+ warning .value = ' '
715752
716753 // 重置进度
717754 decryptProgress .current = 0
@@ -787,6 +824,7 @@ const decryptAllImages = async () => {
787824// 从密钥步骤进入图片解密步骤
788825const goToMediaDecryptStep = async () => {
789826 error .value = ' '
827+ warning .value = ' '
790828 // 校验并应用(未填写则允许直接进入,后端会使用已保存密钥或报错提示)
791829 const ok = applyManualKeys ()
792830 if (! ok || manualKeyErrors .xor_key || manualKeyErrors .aes_key ) return
0 commit comments