From 1a70eebcbfdfd715e24a5f405d8e194cb3bfb99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=7E=E6=B5=B7=7E=E7=88=B1=E6=B5=B7=E7=88=B1?= =?UTF-8?q?=E6=B5=B7=7E=E5=8F=B3?= <1828712314@qq.com> Date: Wed, 19 Mar 2025 11:31:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=83=A8=E9=97=A8=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/UserInfo/src/UserInfo.vue | 7 +- src/store/modules/user.ts | 8 +- src/views/Home/Index.vue | 1 - src/views/Login/components/QrCodeForm.vue | 148 ++++++++++-------- 4 files changed, 90 insertions(+), 74 deletions(-) diff --git a/src/layout/components/UserInfo/src/UserInfo.vue b/src/layout/components/UserInfo/src/UserInfo.vue index 1bad1cf..d2a5ab0 100644 --- a/src/layout/components/UserInfo/src/UserInfo.vue +++ b/src/layout/components/UserInfo/src/UserInfo.vue @@ -24,7 +24,8 @@ const { getPrefixCls } = useDesign() const prefixCls = getPrefixCls('user-info') const avatar = computed(() => userStore.user.avatar || avatarImg) -const realName=computed(()=>userStore.user.realName ?? '管理员') +const realName = computed(() => userStore.user.realName ?? '管理员') +const deptName = computed(() => userStore.user.deptName ?? '管理员') // 锁定屏幕 const lockStore = useLockStore() const getIsLock = computed(() => lockStore.getLockInfo?.isLock ?? false) @@ -56,9 +57,9 @@ const toDocument = () => { <template> <ElDropdown class="custom-hover" :class="prefixCls" trigger="click"> <div class="flex items-center gap-4px"> - <ElAvatar :src="avatar" alt="" :size="32" class=" rounded-[50%]" /> + <ElAvatar :src="avatar" alt="" :size="32" class="rounded-[50%]" /> <span class="text-14px color-#303133 font-500 line-height-22px"> - {{ realName }}|{{}} + {{ realName }} | {{ deptName }} </span> </div> <template #dropdown> diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 9fdcb78..a141765 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -11,7 +11,8 @@ interface UserVO { avatar: string nickname: string deptId: number, - realName:string + realName:string, + deptName:string, } interface UserInfoVO { @@ -33,6 +34,7 @@ export const useUserStore = defineStore('admin-user', { nickname: '', deptId: 0, realName: '', + deptName:'' } }), getters: { @@ -58,7 +60,6 @@ export const useUserStore = defineStore('admin-user', { let userInfo = wsCache.get(CACHE_KEY.USER) if (!userInfo) { userInfo = await getInfo() - console.log(userInfo) } this.permissions = userInfo.permissions this.roles = userInfo.roles @@ -96,7 +97,8 @@ export const useUserStore = defineStore('admin-user', { avatar: '', nickname: '', deptId: 0, - realName:'' + realName:'', + deptName:'' } } } diff --git a/src/views/Home/Index.vue b/src/views/Home/Index.vue index a8d5704..cbb9e0f 100644 --- a/src/views/Home/Index.vue +++ b/src/views/Home/Index.vue @@ -491,7 +491,6 @@ const getPieData = async () => { // 近6个月执法走势 const getS3Data = async () => { const res = await HomeApi.getTaskNumDoing(queryParams) - console.log(res) let data1 = [] as any let data2 = [] as any res.forEach((item: any) => { diff --git a/src/views/Login/components/QrCodeForm.vue b/src/views/Login/components/QrCodeForm.vue index 2df70af..2d0e7a0 100644 --- a/src/views/Login/components/QrCodeForm.vue +++ b/src/views/Login/components/QrCodeForm.vue @@ -3,15 +3,30 @@ <el-col :span="24" style="padding-right: 10px; padding-left: 10px"> <img class="topImg" src="@/assets/imgs/screen/login-top.png" alt="logo" /> </el-col> - <el-col :span="24" style="padding-right: 10px; padding-left: 10px; margin-bottom:20px; text-align: center"> - - <img width="320px" height="320px" :src="imageUrl" alt="Converted Image" v-if="imageUrl" /> + <el-col + :span="24" + style="padding-right: 10px; padding-left: 10px; margin-bottom: 20px; text-align: center" + > + <img width="320px" height="320px" :src="imageUrl" alt="Converted Image" v-if="imageUrl" /> </el-col> - <el-col v-if="!refreshQR" :span="24" style="padding-right: 10px; padding-left: 10px; text-align: center"> - <img class="bottomImg" src="@/assets/imgs/screen/login-bottom.png" alt="logo" /> + <el-col + v-if="!refreshQR" + :span="24" + style="padding-right: 10px; padding-left: 10px; text-align: center" + > + <img class="bottomImg" src="@/assets/imgs/screen/login-bottom.png" alt="logo" /> </el-col> - <el-col v-if="refreshQR" :span="24" style="padding-right: 10px; padding-left: 10px; text-align: center"> - <img class="bottomImg" src="@/assets/imgs/screen/qrsx.png" alt="logo" @click="handleRefresh" /> + <el-col + v-if="refreshQR" + :span="24" + style="padding-right: 10px; padding-left: 10px; text-align: center" + > + <img + class="bottomImg" + src="@/assets/imgs/screen/qrsx.png" + alt="logo" + @click="handleRefresh" + /> </el-col> </el-row> </template> @@ -24,104 +39,103 @@ import { LoginStateEnum, useLoginState } from './useLogin' import router from '@/router' defineOptions({ name: 'QrCodeForm' }) -const imageUrl = ref(''); -const uuuid =ref('') +const imageUrl = ref('') +const uuuid = ref('') const refreshQR = ref(false) const { t } = useI18n() const { handleBackLogin, getLoginState } = useLoginState() const getShow = computed(() => true) // 存储定时器 ID,用于后续清除定时器 -let intervalId = ref(); +let intervalId = ref() const handleRefresh = () => { window.location.reload() } -const getimg =async ()=>{ - - const array = new Uint32Array(4); - crypto.getRandomValues(array); - let result = ''; +const getimg = async () => { + const array = new Uint32Array(4) + crypto.getRandomValues(array) + let result = '' array.forEach((value) => { - result += value.toString(16).padStart(8, '0'); - }); - uuuid.value = result; + result += value.toString(16).padStart(8, '0') + }) + uuuid.value = result - var mockBinaryData = await LoginApi.getCodeWebPic({ - scene:uuuid.value, + var mockBinaryData = await LoginApi.getCodeWebPic({ + scene: uuuid.value, path: 'sub/common/waiting', checkPath: false - }); + }) // 对 Base64 编码的字符串进行解码 - const binaryString = atob(mockBinaryData); - const len = binaryString.length; - const bytes = new Uint8Array(len); - for (let i = 0; i < len; i++) { - bytes[i] = binaryString.charCodeAt(i); - } + const binaryString = atob(mockBinaryData) + const len = binaryString.length + const bytes = new Uint8Array(len) + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i) + } // 将二进制数据转换为Blob对象 - const blob = new Blob([bytes], { type: 'image/png' }); + const blob = new Blob([bytes], { type: 'image/png' }) // 创建临时的URL - imageUrl.value = URL.createObjectURL(blob); + imageUrl.value = URL.createObjectURL(blob) //开始刷新扫码信息 - refaulst(); + refaulst() } // 记录定时器开始的时间 -const startTime = Date.now(); +const startTime = Date.now() // 10 分钟的毫秒数 -const tenMinutes = 10 *60 * 10000 ; +const tenMinutes = 10 * 60 * 10000 //定时刷新 判断是否扫码允许 -const refaulst = ()=>{ - refreshQR.value = false; - // 先清除之前的定时器,避免重复调用 - if (intervalId) { - clearInterval(intervalId.value); +const refaulst = () => { + refreshQR.value = false + // 先清除之前的定时器,避免重复调用 + if (intervalId) { + clearInterval(intervalId.value) } // 设置定时器,每 5 秒(可根据实际需求调整)调用一次接口 intervalId.value = setInterval(async () => { try { - // 检查是否已经过去了 10 分钟 - if (Date.now() - startTime >= tenMinutes) { - clearInterval(intervalId.value); - console.log('定时器已停止,已过去 10 分钟。'); - refreshQR.value = true; + if (Date.now() - startTime >= tenMinutes) { + clearInterval(intervalId.value) + console.log('定时器已停止,已过去 10 分钟。') + refreshQR.value = true - return; - } + return + } - const res = await LoginApi.qrLoginCode({code:uuuid.value}) - - if(res){ - clearInterval(intervalId.value); - authUtil.setToken(res) - router.push({ path: '/' }) + const res = await LoginApi.qrLoginCode({ code: uuuid.value }) + + if (res) { + clearInterval(intervalId.value) + authUtil.setToken(res) + router.push({ path: '/' }) } - } catch (error) { - console.error('获取扫码状态失败:', error); + console.error('获取扫码状态失败:', error) } - }, 5000); + }, 5000) } onMounted(() => { // getCookie() getimg() }) +onUnmounted(() => { + // 组件销毁时清除定时器 + clearInterval(intervalId.value) +}) </script> <style lang="scss" scoped> - .expired-text{ - color: #ff0000; - margin-top: 40px; - margin-right: 10px; - } - .bottomImg{ - width:320px; - - - } - .topImg{ - height: 200px; - } -</style> \ No newline at end of file +.expired-text { + color: #ff0000; + margin-top: 40px; + margin-right: 10px; +} +.bottomImg { + width: 320px; +} +.topImg { + height: 200px; +} +</style>