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" /> -

检查类型

+

选择套餐

@@ -61,7 +61,7 @@ @close="cascaderClose" @change="onChange" /> -
+

体检时间

@@ -425,10 +425,14 @@ // 级联选择器变化 const onChange = (res: any) => { - console.log(res) + console.log("孙亮",res) result2.value = res.selectedOptions[0]?.text; - examType.value = res.selectedOptions[0]?.value - getPackageDetail({ + examType.value = res.selectedOptions[0]?.value; + + + personalPackageName.value =res.selectedOptions[0]?.text; + packageId.value = res.selectedOptions[0]?.value; + /* getPackageDetail({ checkId: JSON.stringify(res.selectedOptions[0].value), token: localStorage.getItem('token'), combType: 2 @@ -459,7 +463,7 @@ } }).catch((err: any) => { console.log(err) - }) + }) */ } // 级联选择器点击关闭按钮 diff --git a/src/views/ForgetPassword/ForgetPassword.vue b/src/views/ForgetPassword/ForgetPassword.vue index 1ec26a2..50175ab 100644 --- a/src/views/ForgetPassword/ForgetPassword.vue +++ b/src/views/ForgetPassword/ForgetPassword.vue @@ -112,6 +112,9 @@ import { editNewPwd, sendVeriCode } from '../../api/ForgetPassword' import { useRouter, useRoute } from 'vue-router' import './scss/index.scss' + import Crypoto from '../../api/AesCbc' + + const cry: any = new Crypoto() const phoneNumPlaceHolder = ref('请输入手机号') const pwdPlaceHolder = ref('请输入新密码') @@ -316,7 +319,7 @@ onMounted(() => { console.log(route.query.phoneNum) if (route.query) { - phoneNumber.value = route.query.phoneNum + phoneNumber.value = cry.decrypt(route.query.phoneNum) } else { phoneNumber.value = '' } diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index e8b06ae..bb8bb68 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -15,7 +15,7 @@

体检服务

-
+
体检预约
diff --git a/src/views/MsgLogin/MsgLogin.vue b/src/views/MsgLogin/MsgLogin.vue index b13866f..5e3dc29 100644 --- a/src/views/MsgLogin/MsgLogin.vue +++ b/src/views/MsgLogin/MsgLogin.vue @@ -205,7 +205,9 @@ }) } }) - } + }else{ + showFailToast('登录失败!没有找到这个号码') + } }).catch(() => { showFailToast('登录失败!') }) diff --git a/src/views/PreOrderReceipt/PreOrderReceipt.vue b/src/views/PreOrderReceipt/PreOrderReceipt.vue index cb518ac..fe8efc4 100644 --- a/src/views/PreOrderReceipt/PreOrderReceipt.vue +++ b/src/views/PreOrderReceipt/PreOrderReceipt.vue @@ -9,7 +9,7 @@

体检单据

套餐名称:

{{ packageName }} -

体检项目:

+
diff --git a/src/views/User/User.vue b/src/views/User/User.vue index 4220150..5dba3d5 100644 --- a/src/views/User/User.vue +++ b/src/views/User/User.vue @@ -47,7 +47,9 @@ import { ref, onMounted } from 'vue' import { useRouter } from 'vue-router' import { showConfirmDialog } from 'vant'; + import Crypoto from '../../api/AesCbc' + const cry: any = new Crypoto() const router = useRouter() const userInfo = ref({}) // 设置默认头像 @@ -93,12 +95,13 @@ getUserInfo({ token: localStorage.getItem('token') }).then((res: any) => { - userInfo.value = res.data.obj[0] + userInfo.value = res.data.obj[0] + userInfo.value.phyName= cry.decrypt(userInfo.value.phyName) const data = res.data.obj[0] localStorage.setItem('phyName', data.phyName) - localStorage.setItem('idcard', data.idcard) + localStorage.setItem('idcard', cry.decrypt(data.idcard)) localStorage.setItem('age', data.age) - localStorage.setItem('telepNumber', data.telepNumber) + localStorage.setItem('telepNumber', cry.decrypt(data.telepNumber)) localStorage.setItem('departName', data.departName) localStorage.setItem('id', data.id) if (Number(data.sex) === 1) {