From e03866f401ea60dd770dbd52159b62a9f28c6920 Mon Sep 17 00:00:00 2001 From: ali <ali9696@163.com> Date: 星期四, 09 一月 2025 17:21:57 +0800 Subject: [PATCH] 修改登录页获取自定义配置 --- zhitan-vue/src/App.vue | 24 ++-- zhitan-vue/src/views/login.vue | 229 +++++++++++++++++++++------------------------ zhitan-vue/src/layout/components/Sidebar/Logo.vue | 45 +++++---- 3 files changed, 142 insertions(+), 156 deletions(-) diff --git a/zhitan-vue/src/App.vue b/zhitan-vue/src/App.vue index 59e8fa6..2eff331 100644 --- a/zhitan-vue/src/App.vue +++ b/zhitan-vue/src/App.vue @@ -3,23 +3,21 @@ </template> <script setup> -// import Cookies from 'js-cookie' -import useSettingsStore from '@/store/modules/settings' -import { handleThemeStyle } from '@/utils/theme' -// import { systemName } from '@/api/system/name' +import Cookies from "js-cookie" +import useSettingsStore from "@/store/modules/settings" +import { handleThemeStyle } from "@/utils/theme" +import { systemName } from "@/api/system/name" onMounted(() => { nextTick(() => { // 鍒濆鍖栦富棰樻牱寮� handleThemeStyle(useSettingsStore().theme) - document.querySelector('body').className = 'themeDark'; + document.querySelector("body").className = "themeDark" }) - // systemName().then(res => { - // if (res.code == 200) { - // sessionStorage.setItem('SystemInfo', JSON.stringify(res.data)) - // // sessionStorage.removeItem('SystemInfo') - // } - // }) - - + systemName().then((res) => { + if (res.code == 200) { + Cookies.set("SystemInfo", JSON.stringify(res.data)) + // Cookies.remove('SystemInfo') + } + }) }) </script> diff --git a/zhitan-vue/src/layout/components/Sidebar/Logo.vue b/zhitan-vue/src/layout/components/Sidebar/Logo.vue index 86a54a6..9fe31c0 100644 --- a/zhitan-vue/src/layout/components/Sidebar/Logo.vue +++ b/zhitan-vue/src/layout/components/Sidebar/Logo.vue @@ -1,6 +1,9 @@ <template> - <div class="sidebar-logo-container" :class="{ 'collapse': collapse }" - :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> + <div + class="sidebar-logo-container" + :class="{ collapse: collapse }" + :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }" + > <!-- <transition name="sidebarLogoFade"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <img v-if="logo" :src="logo" class="sidebar-logo" /> @@ -11,33 +14,35 @@ <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1> </router-link> </transition> --> - <!-- <div class="logo"> - <img v-if=" sideTheme === 'theme-dark'" :src="logo" class="sidebar-logo" /> + <div class="logo"> + <img v-if="sideTheme === 'theme-dark'" :src="logo" class="sidebar-logo" /> <img v-else :src="logo2" class="sidebar-logo" /> - </div> --> + </div> - <div class="name" v-if="!collapse" :style="{color: sideTheme === 'theme-dark' ? '#fff' : '#487FEE'}">{{ title }}</div> + <div class="name" v-if="!collapse" :style="{ color: sideTheme === 'theme-dark' ? '#fff' : '#487FEE' }"> + {{ title }} + </div> </div> </template> <script setup> -// import Cookies from 'js-cookie' -import variables from '@/assets/styles/variables.module.scss' -import logo from '@/assets/logo/logo-2.png' -import logo2 from '@/assets/logo/logo-3.png' -import useSettingsStore from '@/store/modules/settings' -import { color } from 'echarts'; -// const systemInfo = JSON.parse(sessionStorage.getItem('SystemInfo')) +import Cookies from "js-cookie" +import variables from "@/assets/styles/variables.module.scss" +import logo from "@/assets/logo/logo-2.png" +import logo2 from "@/assets/logo/logo-3.png" +import useSettingsStore from "@/store/modules/settings" +import { color } from "echarts" +const systemInfo = JSON.parse(Cookies.get("SystemInfo")) defineProps({ collapse: { type: Boolean, - required: true - } + required: true, + }, }) -const title = import.meta.env.VITE_APP_TITLE; -const settingsStore = useSettingsStore(); -const sideTheme = computed(() => settingsStore.sideTheme); +const title = import.meta.env.VITE_APP_TITLE +const settingsStore = useSettingsStore() +const sideTheme = computed(() => settingsStore.sideTheme) </script> <style lang="scss" scoped> @@ -72,7 +77,7 @@ } } .name { - width: 100%; + width: 150px; margin-top: 2px; margin-left: 6px; font-family: OPPOSans, OPPOSans; @@ -133,4 +138,4 @@ } } } -</style> \ No newline at end of file +</style> diff --git a/zhitan-vue/src/views/login.vue b/zhitan-vue/src/views/login.vue index c89c954..955060f 100644 --- a/zhitan-vue/src/views/login.vue +++ b/zhitan-vue/src/views/login.vue @@ -1,9 +1,11 @@ <template> <div class="login"> - <!-- <div class="login-logo" v-if="systemInfo && systemInfo.homeLogo" - :style="{ backgroundImage: 'url(' + systemInfo.homeLogo + ')', backgroundSize: '100% 100%' }"></div> - <div class="login-font" v-else>鑳芥簮绯荤粺</div> --> - <h1 class="logo">灞变笢鎭掗偊鍐剁偧鑲′唤鏈夐檺鍏徃</h1> + <div + class="login-logo" + v-if="systemInfo && systemInfo.homeLogo" + :style="{ backgroundImage: 'url(' + systemInfo.homeLogo + ')', backgroundSize: '100% 100%' }" + ></div> + <div class="login-font" v-else>鑳芥簮绯荤粺</div> <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"> <!-- <h3 class="title">鍏呯數妗╁悗鍙扮鐞嗙郴缁�</h3> --> <el-form-item prop="username"> @@ -12,24 +14,43 @@ </el-input> </el-form-item> <el-form-item prop="password"> - <el-input v-model="loginForm.password" type="password" size="large" auto-complete="off" placeholder="瀵嗙爜" - @keyup.enter="handleLogin"> + <el-input + v-model="loginForm.password" + type="password" + size="large" + auto-complete="off" + placeholder="瀵嗙爜" + @keyup.enter="handleLogin" + > <template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template> </el-input> </el-form-item> <el-form-item prop="code" v-if="captchaEnabled"> - <el-input v-model="loginForm.code" size="large" auto-complete="off" placeholder="楠岃瘉鐮�" style="width: 63%" - @keyup.enter="handleLogin"> + <el-input + v-model="loginForm.code" + size="large" + auto-complete="off" + placeholder="楠岃瘉鐮�" + style="width: 63%" + @keyup.enter="handleLogin" + > <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template> </el-input> <div class="login-code"> <img :src="codeUrl" @click="getCode" class="login-code-img" /> </div> </el-form-item> - <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">璁颁綇瀵嗙爜</el-checkbox> - <el-form-item style="width:100%;"> - <el-button :loading="loading" size="large" type="primary" style="width:100%;" color="#626aef" :dark="isDark" - @click.prevent="handleLogin"> + <el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px">璁颁綇瀵嗙爜</el-checkbox> + <el-form-item style="width: 100%"> + <el-button + :loading="loading" + size="large" + type="primary" + style="width: 100%" + color="#626aef" + :dark="isDark" + @click.prevent="handleLogin" + > <span v-if="!loading">鐧� 褰�</span> <span v-else>鐧� 褰� 涓�...</span> </el-button> @@ -43,138 +64,113 @@ </template> <script setup> -import { getCodeImg } from "@/api/login"; -import Cookies from "js-cookie"; -import { encrypt, decrypt } from "@/utils/jsencrypt"; -import useUserStore from "@/store/modules/user"; -const userStore = useUserStore(); -import { useRoute } from "vue-router"; -const route = useRoute(); -const router = useRouter(); -const { proxy } = getCurrentInstance(); -// if(Cookies.get('SystemInfo')){ -// const systemInfo = JSON.parse(Cookies.get('SystemInfo')) -// } +import { getCodeImg } from "@/api/login" +import Cookies from "js-cookie" +import { encrypt, decrypt } from "@/utils/jsencrypt" +import useUserStore from "@/store/modules/user" + +const userStore = useUserStore() +const route = useRoute() +const router = useRouter() +const { proxy } = getCurrentInstance() +const systemInfo = JSON.parse(Cookies.get("SystemInfo")) + +console.log(systemInfo) const loginForm = ref({ username: "admin", password: "admin123", rememberMe: false, code: "", - uuid: "" -}); + uuid: "", +}) const loginRules = { username: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勮处鍙�" }], password: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" }], - code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }] -}; + code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }], +} -const codeUrl = ref(""); -const loading = ref(false); +const codeUrl = ref("") +const loading = ref(false) // 楠岃瘉鐮佸紑鍏� -const captchaEnabled = ref(true); +const captchaEnabled = ref(true) // 娉ㄥ唽寮�鍏� -const register = ref(false); -const redirect = ref(undefined); -watch(route, (newRoute) => { - redirect.value = newRoute.query && newRoute.query.redirect; -}, { immediate: true }); -if (!!useRoute().query.token) { - //骞冲彴鍗曠嫭鐨勭櫥褰� - getLoginByNameAndTokenJ(); -} else { - getCode(); - getCookie(); -} -/** - * 涓夋柟骞冲彴鍗曠偣鐧婚檰 - * 鍙紶閫抰oken - */ -function getLoginByNameAndTokenJ() { - //鑾峰彇鍦板潃鏍忎腑鐨則oken - var token = useRoute().query.token; - //璋冪敤鐧诲綍鐨勬帴鍙� - console.log('token2', token); - //杞湀鍦堬紝涓嶈鐪嬪埌鐧婚檰椤甸潰锛屾棤鎰熶綋楠� - loading.value = true; - // 璋冪敤action鐨勭櫥褰曟柟娉� - userStore - .LoginJHaveToken({ - "token": token - }) - .then(() => { - loading.value = true; - const query = route.query; - const otherQueryParams = Object.keys(query).reduce((acc, cur) => { - if (cur !== "redirect") { - acc[cur] = query[cur]; - } - return acc; - }, {}); - router.push({ path: redirect.value || "/", query: otherQueryParams }); - }) - .catch(() => { - loading.value = true; - }); -} +const register = ref(false) +const redirect = ref(undefined) + +watch( + route, + (newRoute) => { + redirect.value = newRoute.query && newRoute.query.redirect + }, + { immediate: true } +) + function handleLogin() { - proxy.$refs.loginRef.validate(valid => { + proxy.$refs.loginRef.validate((valid) => { if (valid) { - loading.value = true; + loading.value = true // 鍕鹃�変簡闇�瑕佽浣忓瘑鐮佽缃湪 cookie 涓缃浣忕敤鎴峰悕鍜屽瘑鐮� if (loginForm.value.rememberMe) { - Cookies.set("username", loginForm.value.username, { expires: 30 }); - Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 }); - Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 }); + Cookies.set("username", loginForm.value.username, { expires: 30 }) + Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 }) + Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 }) } else { // 鍚﹀垯绉婚櫎 - Cookies.remove("username"); - Cookies.remove("password"); - Cookies.remove("rememberMe"); + Cookies.remove("username") + Cookies.remove("password") + Cookies.remove("rememberMe") } // 璋冪敤action鐨勭櫥褰曟柟娉� - userStore.login(loginForm.value).then(() => { - const query = route.query; - const otherQueryParams = Object.keys(query).reduce((acc, cur) => { - if (cur !== "redirect") { - acc[cur] = query[cur]; + userStore + .login(loginForm.value) + .then(() => { + const query = route.query + const otherQueryParams = Object.keys(query).reduce((acc, cur) => { + if (cur !== "redirect") { + acc[cur] = query[cur] + } + return acc + }, {}) + router.push({ path: redirect.value || "/", query: otherQueryParams }) + }) + .catch(() => { + loading.value = false + // 閲嶆柊鑾峰彇楠岃瘉鐮� + if (captchaEnabled.value) { + getCode() } - return acc; - }, {}); - router.push({ path: redirect.value || "/", query: otherQueryParams }); - }).catch(() => { - loading.value = false; - // 閲嶆柊鑾峰彇楠岃瘉鐮� - if (captchaEnabled.value) { - getCode(); - } - }); + }) } - }); + }) } + function getCode() { - getCodeImg().then(res => { - captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled; + getCodeImg().then((res) => { + captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled if (captchaEnabled.value) { - codeUrl.value = "data:image/gif;base64," + res.img; - loginForm.value.uuid = res.uuid; + codeUrl.value = "data:image/gif;base64," + res.img + loginForm.value.uuid = res.uuid } - }); + }) } function getCookie() { - const username = Cookies.get("username"); - const password = Cookies.get("password"); - const rememberMe = Cookies.get("rememberMe"); + const username = Cookies.get("username") + const password = Cookies.get("password") + const rememberMe = Cookies.get("rememberMe") loginForm.value = { username: username === undefined ? loginForm.value.username : username, password: password === undefined ? loginForm.value.password : decrypt(password), - rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) - }; + rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), + } } + +getCode() +getCookie() </script> -<style lang='scss' scoped> +<style lang="scss" scoped> .login { display: flex; align-items: center; @@ -274,17 +270,4 @@ text-align: center; transform: translate(-50%, -50%); } - - -.logo { - color: #fff; - width: 514px; - height: 177px; - line-height: 177px; - position: absolute; - left: 50%; - top: 22%; - transform: translate(-50%, -50%); - text-align: center; -} -</style> \ No newline at end of file +</style> -- Gitblit v1.9.3