From c8cee60f3102566e7b002b29cf5146920503f4c4 Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Thu, 28 Aug 2025 17:00:20 +0800 Subject: [PATCH] =?UTF-8?q?app-=E6=89=8B=E6=9C=BA=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 5 +-- src/api/AesCbc.ts | 34 ++++++++++++++++++- src/views/AccountLogin/AccountLogin.vue | 2 +- src/views/ExamPreOrder/ExamPreOrder.vue | 22 +++++++----- src/views/ForgetPassword/ForgetPassword.vue | 5 ++- src/views/Home/Home.vue | 2 +- src/views/MsgLogin/MsgLogin.vue | 4 ++- src/views/PreOrderReceipt/PreOrderReceipt.vue | 4 +-- src/views/User/User.vue | 9 +++-- 9 files changed, 66 insertions(+), 21 deletions(-) diff --git a/components.d.ts b/components.d.ts index c667356..89595e5 100644 --- a/components.d.ts +++ b/components.d.ts @@ -3,9 +3,11 @@ // @ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + export {} -declare module 'vue' { +declare module '@vue/runtime-core' { export interface GlobalComponents { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] @@ -15,7 +17,6 @@ declare module 'vue' { VanDatePicker: typeof import('vant/es')['DatePicker'] VanField: typeof import('vant/es')['Field'] VanForm: typeof import('vant/es')['Form'] - VanIcon: typeof import('vant/es')['Icon'] VanNavBar: typeof import('vant/es')['NavBar'] VanOverlay: typeof import('vant/es')['Overlay'] VanPicker: typeof import('vant/es')['Picker'] diff --git a/src/api/AesCbc.ts b/src/api/AesCbc.ts index 32be7bc..aeb1f07 100644 --- a/src/api/AesCbc.ts +++ b/src/api/AesCbc.ts @@ -116,6 +116,38 @@ export default class Crypoto implements CrypotoType { return ciphertext } - decrypt: any; + // decrypt: any; + + decrypt(cipherText: string) { + if (!cipherText) { + console.error("密文为空或未定义"); + return ""; + } + + const key = this.key; + const iv = this.iv; + + // 如果后端传来的密文是 Base64URL 格式,需要先转成 Base64 标准格式 + const base64Str = cipherText.replace(/-/g, '+').replace(/_/g, '/'); + + // 创建包含 ciphertext 的 CipherParams 对象 + const cipherParams = CryptoJS.lib.CipherParams.create({ + ciphertext: CryptoJS.enc.Base64.parse(base64Str) + }); + + const decryptResult = CryptoJS.AES.decrypt(cipherParams, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + + const decryptedStr = decryptResult.toString(CryptoJS.enc.Utf8); + + if (!decryptedStr) { + console.error("解密结果为空,请检查密钥/IV是否匹配 或 密文是否正确"); + } + + return decryptedStr; + } } diff --git a/src/views/AccountLogin/AccountLogin.vue b/src/views/AccountLogin/AccountLogin.vue index 837566b..427ee5c 100644 --- a/src/views/AccountLogin/AccountLogin.vue +++ b/src/views/AccountLogin/AccountLogin.vue @@ -158,7 +158,7 @@ console.log(res.status) showSuccessToast('登录成功!') localStorage.setItem('token', res.data.token) - localStorage.setItem('phoneNumber', username.value) + localStorage.setItem('phoneNumber', cry.encrypt(username.value)) localStorage.setItem('avatarUrl', 'https://img.zcool.cn/community/0104c958b69c23a801219c77ba5da2.png?x-oss-process=image/auto-orient,1/resize,m_lfit,w_1280,limit_1/sharpen,100') // 设置登录状态码持续时间为3h const overDate = new Date().getTime() - 8 * 60 * 60 * 1000 + 3 * 60 * 60 * 1000 diff --git a/src/views/ExamPreOrder/ExamPreOrder.vue b/src/views/ExamPreOrder/ExamPreOrder.vue index a483e6e..c32191c 100644 --- a/src/views/ExamPreOrder/ExamPreOrder.vue +++ b/src/views/ExamPreOrder/ExamPreOrder.vue @@ -33,20 +33,20 @@ @cancel="showHospitalPicker = false" /> -