From 16e22cfa6144d883ffcac0daf844322df179ea8b Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期一, 19 五月 2025 13:07:10 +0800 Subject: [PATCH] 首页开发 --- src/views/login.vue | 158 ++++++++++++++++++++++++++++------------------------ 1 files changed, 85 insertions(+), 73 deletions(-) diff --git a/src/views/login.vue b/src/views/login.vue index e6856a0..437093e 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -2,6 +2,7 @@ <div class="login"> <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"> <h3 class="title">{{ title }}</h3> + <el-divider /> <el-form-item prop="username"> <el-input v-model="loginForm.username" @@ -10,7 +11,7 @@ auto-complete="off" placeholder="璐﹀彿" > - <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> + <template #prefix><el-icon><User /></el-icon></template> </el-input> </el-form-item> <el-form-item prop="password"> @@ -20,27 +21,27 @@ size="large" auto-complete="off" placeholder="瀵嗙爜" + show-password @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" - > - <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 prop="code" v-if="captchaEnabled">--> +<!-- <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-form-item style="width:100%;"> <el-button :loading="loading" @@ -56,133 +57,139 @@ <router-link class="link-type" :to="'/register'">绔嬪嵆娉ㄥ唽</router-link> </div> </el-form-item> + <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">璁颁綇瀵嗙爜</el-checkbox> </el-form> <!-- 搴曢儴 --> - <div class="el-login-footer"> - <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span> - </div> +<!-- <div class="el-login-footer">--> +<!-- <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>--> +<!-- </div>--> </div> </template> <script setup> -import { getCodeImg } from "@/api/login"; -import Cookies from "js-cookie"; -import { encrypt, decrypt } from "@/utils/jsencrypt"; +import { getCodeImg } from "@/api/login" +import Cookies from "js-cookie" +import { encrypt, decrypt } from "@/utils/jsencrypt" import useUserStore from '@/store/modules/user' -const title = import.meta.env.VITE_APP_TITLE; -const userStore = useUserStore(); -const route = useRoute(); -const router = useRouter(); -const { proxy } = getCurrentInstance(); +const title = import.meta.env.VITE_APP_TITLE +const userStore = useUserStore() +const route = useRoute() +const router = useRouter() +const { proxy } = getCurrentInstance() const loginForm = ref({ username: "admin", password: "admin123", rememberMe: false, - code: "", + // code: "", 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); +const register = ref(false) +const redirect = ref(undefined) watch(route, (newRoute) => { - redirect.value = newRoute.query && newRoute.query.redirect; -}, { immediate: true }); + redirect.value = newRoute.query && newRoute.query.redirect +}, { immediate: true }) function handleLogin() { 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 query = route.query const otherQueryParams = Object.keys(query).reduce((acc, cur) => { if (cur !== "redirect") { - acc[cur] = query[cur]; + acc[cur] = query[cur] } - return acc; - }, {}); - router.push({ path: redirect.value || "/", query: otherQueryParams }); + return acc + }, {}) + router.push({ path: redirect.value || "/", query: otherQueryParams }) }).catch(() => { - loading.value = false; + loading.value = false // 閲嶆柊鑾峰彇楠岃瘉鐮� if (captchaEnabled.value) { - getCode(); + getCode() } - }); + }) } - }); + }) } function getCode() { getCodeImg().then(res => { - captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled; + 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) - }; + } } -getCode(); -getCookie(); +getCode() +getCookie() </script> <style lang='scss' scoped> .login { - display: flex; - justify-content: center; - align-items: center; height: 100%; - background-image: url("../assets/images/login-background.jpg"); + background-image: url("../assets/images/login-background.png"); background-size: cover; + position: relative; } .title { - margin: 0px auto 30px auto; + margin: 20px auto 14px auto; text-align: center; - color: #707070; + color: #2C51D9; + font-size: 28px; + font-weight: 700; } .login-form { + position: absolute; + top: 50%; + right: 15%; + transform: translate(0, -50%); border-radius: 6px; background: #ffffff; - width: 400px; - padding: 25px 25px 5px 25px; + width: 420px; + height: 500px; + padding: 40px; z-index: 1; .el-input { height: 40px; @@ -226,4 +233,9 @@ height: 40px; padding-left: 12px; } +:deep() { + .el-form-item--default { + margin-bottom: 36px; + } +} </style> -- Gitblit v1.9.3