From 3ad537052477fe31f45bd2e16045d58b35713bdc Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期六, 24 五月 2025 09:19:59 +0800 Subject: [PATCH] refactor(env): 更新环境配置并优化代码 --- zhitan-vue/src/views/login.vue | 338 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 211 insertions(+), 127 deletions(-) diff --git a/zhitan-vue/src/views/login.vue b/zhitan-vue/src/views/login.vue index 86d243f..194e751 100644 --- a/zhitan-vue/src/views/login.vue +++ b/zhitan-vue/src/views/login.vue @@ -1,87 +1,112 @@ <template> <div class="login"> - <!-- <div - class="login-logo-bg" - v-if="systemInfo && systemInfo.homeLogo" - :style="{ backgroundImage: 'url(' + systemInfo.homeLogo + ')', backgroundSize: '100% 100%' }" - ></div> --> - <img v-if="systemInfo && systemInfo.homeLogo" :src="systemInfo.homeLogo" alt="" class="login-logo-img" /> - <div class="login-font" v-else>{{ systemInfo.systemName || "鑳芥簮绠$悊绯荤粺" }}</div> - <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"> - <!-- <h3 class="title">鍏呯數妗╁悗鍙扮鐞嗙郴缁�</h3> --> - <el-form-item prop="username"> - <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="璐﹀彿"> - <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> - </el-input> - </el-form-item> - <el-form-item prop="password"> - <el-input - v-model="loginForm.password" - type="password" - 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" /> + <!-- <img v-if="systemInfo && systemInfo.homeLogo" :src="systemInfo.homeLogo" alt="" class="login-logo-img" /> + <div class="login-font" v-else>{{ systemInfo.systemName || "鑳芥簮绠$悊绯荤粺" }}</div> --> + <!-- 宸︿笂瑙抣ogo --> + <div> + <img v-if="systemInfo && systemInfo.homeLogo" :src="systemInfo.homeLogo" alt="" class="login-logo-img" /> + </div> + + <!-- 涓棿閮ㄥ垎form --> + <div class="middle-view"> + <div class="left-wrapper"> + <div class="login-font">{{ systemInfo.systemName || "" }}</div> + <img src="@/assets/images/font01.png" alt="" style="width: 380px" /> + <img src="@/assets/images/img_logo.png" alt="" style="width: 180px; margin-top: 20px" /> + </div> + <div class="right-wrapper"> + <div class="header"> + <span>璐﹀彿鐧诲綍</span> </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" - > - <span v-if="!loading">鐧� 褰�</span> - <span v-else>鐧� 褰� 涓�...</span> - </el-button> - </el-form-item> - </el-form> + <div class="bottom-block"></div> + <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form" :label-position="'top'"> + <el-form-item prop="username" label="璐﹀彿"> + <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="璐﹀彿"> + <!-- <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> --> + </el-input> + </el-form-item> + <el-form-item prop="password" label="瀵嗙爜"> + <el-input + v-model="loginForm.password" + type="password" + 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" label="楠岃瘉鐮�"> + <el-input + v-model="loginForm.code" + size="large" + auto-complete="off" + placeholder="楠岃瘉鐮�" + style="width: 230px" + @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" + class="submit-btn" + > + <span v-if="!loading">鐧� 褰�</span> + <span v-else>鐧� 褰� 涓�...</span> + </el-button> + </el-form-item> + </el-form> + </div> + </div> + <!-- 搴曢儴 --> <div class="el-login-footer"> - <!-- <span>Copyright 漏 2021-2024 ZhiTanCloud All Rights Reserved.</span> --> - <span>{{ systemInfo.copyRight || "Copyright 漏 2017-2024 ZhiTanCloud All Rights Reserved." }}</span> + <span>{{ + systemInfo.copyRight || "Copyright 漏 2017-" + new Date().getFullYear() + " ZhiTanCloud All Rights Reserved." + }}</span> </div> </div> </template> <script setup> -import { getCodeImg } from "@/api/login" +import { getCodeImg, authBinding } from "@/api/login" import Cookies from "js-cookie" import { encrypt, decrypt } from "@/utils/jsencrypt" import useUserStore from "@/store/modules/user" +import {ElMessage} from "element-plus"; const userStore = useUserStore() const route = useRoute() const router = useRouter() const { proxy } = getCurrentInstance() -const systemInfo = JSON.parse(Cookies.get("SystemInfo") || "{}") +const systemInfo1 = JSON.parse(Cookies.get("SystemInfo") || "{}") +const systemInfo = { + ...systemInfo1, + homeLogo: systemInfo1.homeLogo + ? systemInfo1.homeLogo.includes("http") + ? systemInfo1.homeLogo + : "https://demo-ems.zhitancloud.com" + systemInfo1.homeLogo + : "", +} console.log(systemInfo) const loginForm = ref({ - username: "admin", - password: "admin123", + username: "guestUser", + password: "guest@123456", rememberMe: false, code: "", uuid: "", @@ -101,13 +126,13 @@ const register = ref(false) const redirect = ref(undefined) -watch( - route, - (newRoute) => { - redirect.value = newRoute.query && newRoute.query.redirect - }, - { immediate: true } -) +// watch( +// route, +// (newRoute) => { +// redirect.value = newRoute.query && newRoute.query.redirect +// }, +// { immediate: true } +// ) function handleLogin() { proxy.$refs.loginRef.validate((valid) => { @@ -169,38 +194,122 @@ } } -getCode() -getCookie() +/** + * 绗笁鏂圭櫥褰� + * @param type + */ +const doSocialLogin = () => { + console.log("doSocialLogin") + authBinding().then((res) => { + console.log(res); + if (res.code === 200) { + // 鑾峰彇鎺堟潈鍦板潃璺宠浆 + window.location.href = res.data; + } else { + ElMessage.error(res.msg); + } + }); +}; +// 闈炲崟鐐圭櫥褰曟斁寮�涓嬭竟涓よ锛屽惁鍒欐敞閲婃帀 +// getCode() +// getCookie() +// 鍗曠偣鐧诲綍鏀惧紑涓嬭竟涓�琛岋紝鍚﹀垯娉ㄩ噴鎺� +doSocialLogin() </script> <style lang="scss" scoped> .login { display: flex; align-items: center; - height: 100%; - background-image: url("@/assets/images/login-bg.jpg"); - background-size: 100% 100%; + height: 100vh; + background-image: url("@/assets/images/login-background.png"); + background-repeat: no-repeat; + background-size: cover; flex-direction: column; position: relative; min-width: 700px; min-height: 700px; + background-color:#001146 } -.title { - margin: 0px auto 30px auto; - text-align: center; - color: #707070; +.middle-view { + display: flex; + align-items: center; + justify-content: space-around; + height: 100%; + width: 1200px; + .left-wrapper { + width: 420px; + display: flex; + flex-direction: column; + } + .login-font { + font-size: 32px; + font-weight: 700; + color: #d5f8ff; + margin-bottom: 10px; + } +} + +.right-wrapper { + border-radius: 23px; + background: #ffffff; + width: 410px; + position: relative; + .header { + height: 56px; + line-height: 56px; + border-bottom: 1px solid #f1f1f1; + color: #3b3b3b; + font-size: 18px; + margin-bottom: 22px; + span { + display: inline-block; + height: 56px; + line-height: 62px; + border-bottom: 4px solid #3a83fc; + margin-left: 32px; + } + } +} + +:deep(.el-input__wrapper) { + background-color: #f7f8fa !important; + border: none; +} +:deep(.el-input__inner) { + color: #3b3b3b; +} +:deep(.el-form-item__label) { + color: #3b3b3b !important; +} +:deep(.el-checkbox__label) { + color: #2e2e2e; +} + +.bottom-block { + height: 140px; + width: 90%; + background-color: rgba(255, 255, 255, 0.3); + position: absolute; + left: 5%; + bottom: -20px; + border-radius: 20px; } .login-form { - position: absolute; - left: 50%; - top: 60%; - transform: translate(-50%, -50%); - border-radius: 6px; - // background: #ffffff; - width: 400px; - padding: 25px 25px 5px 25px; + padding: 0 32px 20px; + + .submit-btn { + width: 360px; + height: 44px; + background: #3a83fc; + border-radius: 3px; + font-size: 18px; + box-shadow: 1px 2px 5px #3a83fc; + border: none; + border-radius: 6px; + } .el-input { height: 40px; @@ -224,7 +333,7 @@ } .login-code { - width: 33%; + // width: 120px; height: 40px; float: right; @@ -232,54 +341,29 @@ cursor: pointer; vertical-align: middle; } + .login-code-img { + height: 40px; + // padding-left: 12px; + } } +.login-logo-img { + max-height: 100px; + margin: 0 auto; + position: absolute; + top: 35px; + left: 65px; +} .el-login-footer { - height: 40px; - line-height: 40px; + height: 60px; + line-height: 60px; position: fixed; bottom: 0; width: 100%; text-align: center; color: #fff; font-family: Arial; - font-size: 12px; + font-size: 14px; letter-spacing: 1px; -} - -.login-code-img { - height: 40px; - padding-left: 12px; -} - -.login-logo-bg { - width: 514px; - height: 177px; - // background-image: url('@/assets/images/login-logo.png'); - // background-size: 100% 100%; - position: absolute; - left: 50%; - top: 22%; - transform: translate(-50%, -50%); -} -.login-logo-img { - // width: 100%; - // height: 100%; - // transform: translate(-50%, -50%); - max-height: 200px; - margin: 0 auto; - position: absolute; - top: 17%; -} - -.login-font { - font-size: 50px; - color: #fff; - top: 32%; - position: absolute; - left: 50%; - width: 514px; - text-align: center; - transform: translate(-50%, -50%); } </style> -- Gitblit v1.9.3