|  |  | 
 |  |  | <script setup> | 
 |  |  | import { getCurrentInstance, inject, ref } from 'vue'; | 
 |  |  | import { message } from 'ant-design-vue'; | 
 |  |  | import { get, post } from '../../utils/request.js' | 
 |  |  | import { formatMessage } from '@/utils/localeUtils.js'; | 
 |  |  | const context = getCurrentInstance()?.appContext.config.globalProperties; | 
 |  |  | const globalState = inject('globalState'); | 
 |  |  |  | 
 |  |  | let copyrightLargeShow = ref(false); | 
 |  |  | let username = ref(""); | 
 |  |  | let password = ref(""); | 
 |  |  | let hostId = ref(null); | 
 |  |  | let hostList = ref([]); | 
 |  |  |  | 
 |  |  | function loginConfirm() { | 
 |  |  |     if (username.value == "" || password.value == "") { | 
 |  |  |         message.info(formatMessage('login.input', '请输入账号密码!')); | 
 |  |  |         return; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     post('/api/login', { | 
 |  |  |         username: username.value, | 
 |  |  |         password: password.value, | 
 |  |  |         hostId: hostId.value, | 
 |  |  |     }).then((result) => { | 
 |  |  |         if (result.data.code == 200) { | 
 |  |  |             let data = result.data.data; | 
 |  |  |             globalState.token = data.accessToken; | 
 |  |  |             globalState.user = data.user; | 
 |  |  |             localStorage.setItem('token', data.accessToken) | 
 |  |  |             localStorage.setItem('user', JSON.stringify(data.user)) | 
 |  |  |             message.success(formatMessage('login.success', '登录成功')) | 
 |  |  |             window.location.reload(); | 
 |  |  |         } else { | 
 |  |  |             message.error(result.data.msg) | 
 |  |  |         } | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  | } | 
 |  |  |  | 
 |  |  | getHostList() | 
 |  |  | function getHostList() { | 
 |  |  |     get('/api/auth/host', {}).then((result) => { | 
 |  |  |         if (result.data.code == 200) { | 
 |  |  |             let data = result.data.data; | 
 |  |  |             let tmp = [] | 
 |  |  |             data.forEach((item) => { | 
 |  |  |                 tmp.push({ | 
 |  |  |                     label: item.name, | 
 |  |  |                     value: item.id | 
 |  |  |                 }) | 
 |  |  |             }) | 
 |  |  |             hostList.value = tmp; | 
 |  |  |  | 
 |  |  |             if(tmp.length > 0) { | 
 |  |  |                 let tmpHost = tmp[0] | 
 |  |  |                 hostId.value = tmpHost.value; | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             message.error(result.data.msg) | 
 |  |  |         } | 
 |  |  |     }) | 
 |  |  | } | 
 |  |  |  | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | export default { | 
 |  |  |     name: 'login' | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <template> | 
 |  |  |     <div class="container" @keyup.enter="loginConfirm"> | 
 |  |  |         <div class="left-box"> | 
 |  |  |             <div class="login-video"> | 
 |  |  |                 <video src="/public/img/login-bg.mp4" height="100%" loop autoplay muted="false" | 
 |  |  |                     controlslist="nodownload" disablepictureinpicture></video> | 
 |  |  |                 <!-- <img src="/public/img/bg1.png" height="100%"> --> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |  | 
 |  |  |         <div class="right-box"> | 
 |  |  |             <div class="login-box"> | 
 |  |  |                 <div class="form-main"> | 
 |  |  |                     <p style="text-align: center;"><img class="loginLogoUrl" src="/public/img/logo.png" alt="" | 
 |  |  |                             style="width: 80%"> | 
 |  |  |                     </p> | 
 |  |  |                     <p style="margin-top: -10px;"><span class="login100-form-title p-t-20 p-b-45" | 
 |  |  |                             style="color: #868686;font-size: 24px">WMS</span></p> | 
 |  |  |  | 
 |  |  |                     <div class="inputContainer"> | 
 |  |  |                         <a-select v-model:value="hostId" style="width: 100%;" :options="hostList"></a-select> | 
 |  |  |                     </div> | 
 |  |  |  | 
 |  |  |                     <div class="inputContainer"> | 
 |  |  |                         <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16" | 
 |  |  |                             xmlns="http://www.w3.org/2000/svg" class="inputIcon"> | 
 |  |  |                             <path | 
 |  |  |                                 d="M13.106 7.222c0-2.967-2.249-5.032-5.482-5.032-3.35 0-5.646 2.318-5.646 5.702 0 3.493 2.235 5.708 5.762 5.708.862 0 1.689-.123 2.304-.335v-.862c-.43.199-1.354.328-2.29.328-2.926 0-4.813-1.88-4.813-4.798 0-2.844 1.921-4.881 4.594-4.881 2.735 0 4.608 1.688 4.608 4.156 0 1.682-.554 2.769-1.416 2.769-.492 0-.772-.28-.772-.76V5.206H8.923v.834h-.11c-.266-.595-.881-.964-1.6-.964-1.4 0-2.378 1.162-2.378 2.823 0 1.737.957 2.906 2.379 2.906.8 0 1.415-.39 1.709-1.087h.11c.081.67.703 1.148 1.503 1.148 1.572 0 2.57-1.415 2.57-3.643zm-7.177.704c0-1.197.54-1.907 1.456-1.907.93 0 1.524.738 1.524 1.907S8.308 9.84 7.371 9.84c-.895 0-1.442-.725-1.442-1.914z"> | 
 |  |  |                             </path> | 
 |  |  |                         </svg> | 
 |  |  |                         <input :placeholder="formatMessage('login.rule.username', '请输入用户名')" v-model="username" class="inputField" type="text"> | 
 |  |  |                     </div> | 
 |  |  |  | 
 |  |  |                     <div class="inputContainer"> | 
 |  |  |                         <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16" | 
 |  |  |                             xmlns="http://www.w3.org/2000/svg" class="inputIcon"> | 
 |  |  |                             <path | 
 |  |  |                                 d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"> | 
 |  |  |                             </path> | 
 |  |  |                         </svg> | 
 |  |  |                         <input :placeholder="formatMessage('login.rule.password', '请输入密码')" v-model="password" class="inputField" type="password"> | 
 |  |  |                     </div> | 
 |  |  |  | 
 |  |  |                     <input @click="loginConfirm" type="button" class="login-button" :value="formatMessage('common.submit', '登录')"> | 
 |  |  |  | 
 |  |  |                     <div style="display: none;margin-top: 5px;width: 100%;" id="updateLicense"> | 
 |  |  |                         <form enctype="multipart/form-data" style="display: none;"> | 
 |  |  |                             <input id="license" type="file" name="file"> | 
 |  |  |                         </form> | 
 |  |  |                         <input type="button" id="submitLicense" class="login-button" style="margin: 0;" value="更新许可证"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |  | 
 |  |  |             <div class="login-copyright"> | 
 |  |  |                 <div class="copyright-text">Copyright ©2023 浙江中扬立库技术有限公司版权所有</div> | 
 |  |  |                 <div id="copyright-img1" class="copyright-img" @mouseover="copyrightLargeShow = true" | 
 |  |  |                     @mouseout="copyrightLargeShow = false"> | 
 |  |  |                     <img class="copyright-img-url" src="/public/img/weixin_qrcode.jpg" /> | 
 |  |  |                     <div v-if="copyrightLargeShow" class="copyright-img-large"><img class="copyright-img-url" | 
 |  |  |                             src="/public/img/weixin_qrcode.jpg" /></div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <style> | 
 |  |  | * { | 
 |  |  |     padding: 0; | 
 |  |  |     margin: 0; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .container { | 
 |  |  |     display: flex; | 
 |  |  |     height: 100vh; | 
 |  |  |     width: 100%; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .left-box { | 
 |  |  |     height: 100%; | 
 |  |  |     width: 70%; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-video { | 
 |  |  |     height: 100%; | 
 |  |  |     overflow: hidden; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .form-main { | 
 |  |  |     width: 300px; | 
 |  |  |     display: flex; | 
 |  |  |     flex-direction: column; | 
 |  |  |     align-items: center; | 
 |  |  |     justify-content: center; | 
 |  |  |     background-color: rgba(255, 255, 255, 0.6); | 
 |  |  |     padding: 50px 30px 50px 30px; | 
 |  |  |     border-radius: 20px; | 
 |  |  |     box-shadow: 0px 0px 40px rgba(0, 0, 0, 0.062); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .heading { | 
 |  |  |     font-size: 2.5em; | 
 |  |  |     color: #2e2e2e; | 
 |  |  |     font-weight: 700; | 
 |  |  |     margin: 15px 0 0px 0; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .inputContainer { | 
 |  |  |     width: 100%; | 
 |  |  |     position: relative; | 
 |  |  |     display: flex; | 
 |  |  |     align-items: center; | 
 |  |  |     justify-content: center; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .inputIcon { | 
 |  |  |     position: absolute; | 
 |  |  |     left: 10px; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .inputField { | 
 |  |  |     width: 100%; | 
 |  |  |     height: 40px; | 
 |  |  |     background-color: transparent; | 
 |  |  |     border: none; | 
 |  |  |     border-bottom: 2px solid rgb(173, 173, 173); | 
 |  |  |     border-radius: 30px; | 
 |  |  |     margin: 10px 0; | 
 |  |  |     color: black; | 
 |  |  |     font-size: .8em; | 
 |  |  |     font-weight: 500; | 
 |  |  |     box-sizing: border-box; | 
 |  |  |     padding-left: 30px; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .inputField:focus { | 
 |  |  |     outline: none; | 
 |  |  |     border-bottom: 2px solid rgb(199, 114, 255); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .inputField::placeholder { | 
 |  |  |     color: rgb(80, 80, 80); | 
 |  |  |     font-size: 1em; | 
 |  |  |     font-weight: 500; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-box { | 
 |  |  |     height: 100%; | 
 |  |  |     display: flex; | 
 |  |  |     justify-content: center; | 
 |  |  |     align-items: center; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-button { | 
 |  |  |     position: relative; | 
 |  |  |     width: 100%; | 
 |  |  |     border: 2px solid #8000ff; | 
 |  |  |     background-color: #8000ff; | 
 |  |  |     height: 40px; | 
 |  |  |     color: white; | 
 |  |  |     font-size: .8em; | 
 |  |  |     font-weight: 500; | 
 |  |  |     letter-spacing: 1px; | 
 |  |  |     border-radius: 30px; | 
 |  |  |     margin: 10px; | 
 |  |  |     cursor: pointer; | 
 |  |  |     overflow: hidden; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-button::after { | 
 |  |  |     content: ""; | 
 |  |  |     position: absolute; | 
 |  |  |     background-color: rgba(255, 255, 255, 0.253); | 
 |  |  |     height: 100%; | 
 |  |  |     width: 150px; | 
 |  |  |     top: 0; | 
 |  |  |     left: -200px; | 
 |  |  |     border-bottom-right-radius: 100px; | 
 |  |  |     border-top-left-radius: 100px; | 
 |  |  |     filter: blur(10px); | 
 |  |  |     transition-duration: .5s; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-button:hover::after { | 
 |  |  |     transform: translateX(600px); | 
 |  |  |     transition-duration: .5s; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .right-box { | 
 |  |  |     height: 100%; | 
 |  |  |     width: 30%; | 
 |  |  |     background: #f6f6f6; | 
 |  |  |     position: relative; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .login-copyright { | 
 |  |  |     position: absolute; | 
 |  |  |     bottom: 20px; | 
 |  |  |     right: 20px; | 
 |  |  |     font-size: 14px; | 
 |  |  |     width: 100%; | 
 |  |  |     display: flex; | 
 |  |  |     justify-content: center; | 
 |  |  |     align-items: center; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .copyright-text { | 
 |  |  |     margin-right: 20px; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .copyright-img { | 
 |  |  |     width: 40px; | 
 |  |  |     height: 40px; | 
 |  |  |     position: relative; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .copyright-img>img { | 
 |  |  |     width: 100%; | 
 |  |  |     height: 100%; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .copyright-img-large { | 
 |  |  |     width: 140px; | 
 |  |  |     height: 140px; | 
 |  |  |     position: absolute; | 
 |  |  |     top: -140px; | 
 |  |  |     left: -50px; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .copyright-img-large>img { | 
 |  |  |     width: 100%; | 
 |  |  |     height: 100%; | 
 |  |  | } | 
 |  |  | <script setup>
 | 
 |  |  | import { getCurrentInstance, inject, ref } from 'vue';
 | 
 |  |  | import { message } from 'ant-design-vue';
 | 
 |  |  | import { get, post } from '../../utils/request.js'
 | 
 |  |  | import { formatMessage } from '@/utils/localeUtils.js';
 | 
 |  |  | const context = getCurrentInstance()?.appContext.config.globalProperties;
 | 
 |  |  | const globalState = inject('globalState');
 | 
 |  |  | 
 | 
 |  |  | let copyrightLargeShow = ref(false);
 | 
 |  |  | let username = ref("");
 | 
 |  |  | let password = ref("");
 | 
 |  |  | let hostId = ref(null);
 | 
 |  |  | let hostList = ref([]);
 | 
 |  |  | 
 | 
 |  |  | function loginConfirm() {
 | 
 |  |  |     if (username.value == "" || password.value == "") {
 | 
 |  |  |         message.info(formatMessage('login.input', '请输入账号密码!'));
 | 
 |  |  |         return;
 | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     post('/api/login', {
 | 
 |  |  |         username: username.value,
 | 
 |  |  |         password: password.value,
 | 
 |  |  |         hostId: hostId.value,
 | 
 |  |  |     }).then((result) => {
 | 
 |  |  |         if (result.data.code == 200) {
 | 
 |  |  |             let data = result.data.data;
 | 
 |  |  |             globalState.token = data.accessToken;
 | 
 |  |  |             globalState.user = data.user;
 | 
 |  |  |             localStorage.setItem('token', data.accessToken)
 | 
 |  |  |             localStorage.setItem('user', JSON.stringify(data.user))
 | 
 |  |  |             message.success(formatMessage('login.success', '登录成功'))
 | 
 |  |  |             window.location.reload();
 | 
 |  |  |         } else {
 | 
 |  |  |             message.error(result.data.msg)
 | 
 |  |  |         }
 | 
 |  |  |     })
 | 
 |  |  | 
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | getHostList()
 | 
 |  |  | function getHostList() {
 | 
 |  |  |     get('/api/auth/host', {}).then((result) => {
 | 
 |  |  |         if (result.data.code == 200) {
 | 
 |  |  |             let data = result.data.data;
 | 
 |  |  |             let tmp = []
 | 
 |  |  |             data.forEach((item) => {
 | 
 |  |  |                 tmp.push({
 | 
 |  |  |                     label: item.name,
 | 
 |  |  |                     value: item.id
 | 
 |  |  |                 })
 | 
 |  |  |             })
 | 
 |  |  |             hostList.value = tmp;
 | 
 |  |  | 
 | 
 |  |  |             if(tmp.length > 0) {
 | 
 |  |  |                 let tmpHost = tmp[0]
 | 
 |  |  |                 hostId.value = tmpHost.value;
 | 
 |  |  |             }
 | 
 |  |  |         } else {
 | 
 |  |  |             message.error(result.data.msg)
 | 
 |  |  |         }
 | 
 |  |  |     })
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | </script>
 | 
 |  |  | 
 | 
 |  |  | <script>
 | 
 |  |  | export default {
 | 
 |  |  |     name: 'login'
 | 
 |  |  | }
 | 
 |  |  | </script>
 | 
 |  |  | 
 | 
 |  |  | <template>
 | 
 |  |  |     <div class="container" @keyup.enter="loginConfirm">
 | 
 |  |  |         <div class="left-box">
 | 
 |  |  |             <div class="login-video">
 | 
 |  |  |                 <video src="/public/img/login-bg.mp4" height="100%" loop autoplay muted="false"
 | 
 |  |  |                     controlslist="nodownload" disablepictureinpicture></video>
 | 
 |  |  |                 <!-- <img src="/public/img/bg1.png" height="100%"> -->
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  | 
 | 
 |  |  |         <div class="right-box">
 | 
 |  |  |             <div class="login-box">
 | 
 |  |  |                 <div class="form-main">
 | 
 |  |  |                     <p style="text-align: center;"><img class="loginLogoUrl" src="/public/img/logo.png" alt=""
 | 
 |  |  |                             style="width: 80%">
 | 
 |  |  |                     </p>
 | 
 |  |  |                     <p style="margin-top: -10px;"><span class="login100-form-title p-t-20 p-b-45"
 | 
 |  |  |                             style="color: #868686;font-size: 24px">WMS</span></p>
 | 
 |  |  | 
 | 
 |  |  |                     <div class="inputContainer">
 | 
 |  |  |                         <a-select v-model:value="hostId" style="width: 100%;" :options="hostList"></a-select>
 | 
 |  |  |                     </div>
 | 
 |  |  | 
 | 
 |  |  |                     <div class="inputContainer">
 | 
 |  |  |                         <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16"
 | 
 |  |  |                             xmlns="http://www.w3.org/2000/svg" class="inputIcon">
 | 
 |  |  |                             <path
 | 
 |  |  |                                 d="M13.106 7.222c0-2.967-2.249-5.032-5.482-5.032-3.35 0-5.646 2.318-5.646 5.702 0 3.493 2.235 5.708 5.762 5.708.862 0 1.689-.123 2.304-.335v-.862c-.43.199-1.354.328-2.29.328-2.926 0-4.813-1.88-4.813-4.798 0-2.844 1.921-4.881 4.594-4.881 2.735 0 4.608 1.688 4.608 4.156 0 1.682-.554 2.769-1.416 2.769-.492 0-.772-.28-.772-.76V5.206H8.923v.834h-.11c-.266-.595-.881-.964-1.6-.964-1.4 0-2.378 1.162-2.378 2.823 0 1.737.957 2.906 2.379 2.906.8 0 1.415-.39 1.709-1.087h.11c.081.67.703 1.148 1.503 1.148 1.572 0 2.57-1.415 2.57-3.643zm-7.177.704c0-1.197.54-1.907 1.456-1.907.93 0 1.524.738 1.524 1.907S8.308 9.84 7.371 9.84c-.895 0-1.442-.725-1.442-1.914z">
 | 
 |  |  |                             </path>
 | 
 |  |  |                         </svg>
 | 
 |  |  |                         <input :placeholder="formatMessage('login.rule.username', '请输入用户名')" v-model="username" class="inputField" type="text">
 | 
 |  |  |                     </div>
 | 
 |  |  | 
 | 
 |  |  |                     <div class="inputContainer">
 | 
 |  |  |                         <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16"
 | 
 |  |  |                             xmlns="http://www.w3.org/2000/svg" class="inputIcon">
 | 
 |  |  |                             <path
 | 
 |  |  |                                 d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z">
 | 
 |  |  |                             </path>
 | 
 |  |  |                         </svg>
 | 
 |  |  |                         <input :placeholder="formatMessage('login.rule.password', '请输入密码')" v-model="password" class="inputField" type="password">
 | 
 |  |  |                     </div>
 | 
 |  |  | 
 | 
 |  |  |                     <input @click="loginConfirm" type="button" class="login-button" :value="formatMessage('common.submit', '登录')">
 | 
 |  |  | 
 | 
 |  |  |                     <div style="display: none;margin-top: 5px;width: 100%;" id="updateLicense">
 | 
 |  |  |                         <form enctype="multipart/form-data" style="display: none;">
 | 
 |  |  |                             <input id="license" type="file" name="file">
 | 
 |  |  |                         </form>
 | 
 |  |  |                         <input type="button" id="submitLicense" class="login-button" style="margin: 0;" value="更新许可证">
 | 
 |  |  |                     </div>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  | 
 | 
 |  |  |             <div class="login-copyright">
 | 
 |  |  |                 <div class="copyright-text">Copyright ©2023 浙江中扬立库技术有限公司版权所有</div>
 | 
 |  |  |                 <div id="copyright-img1" class="copyright-img" @mouseover="copyrightLargeShow = true"
 | 
 |  |  |                     @mouseout="copyrightLargeShow = false">
 | 
 |  |  |                     <img class="copyright-img-url" src="/public/img/weixin_qrcode.jpg" />
 | 
 |  |  |                     <div v-if="copyrightLargeShow" class="copyright-img-large"><img class="copyright-img-url"
 | 
 |  |  |                             src="/public/img/weixin_qrcode.jpg" /></div>
 | 
 |  |  |                 </div>
 | 
 |  |  |             </div>
 | 
 |  |  |         </div>
 | 
 |  |  |     </div>
 | 
 |  |  | </template>
 | 
 |  |  | 
 | 
 |  |  | <style>
 | 
 |  |  | * {
 | 
 |  |  |     padding: 0;
 | 
 |  |  |     margin: 0;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .container {
 | 
 |  |  |     display: flex;
 | 
 |  |  |     height: 100vh;
 | 
 |  |  |     width: 100%;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .left-box {
 | 
 |  |  |     height: 100%;
 | 
 |  |  |     width: 70%;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-video {
 | 
 |  |  |     height: 100%;
 | 
 |  |  |     overflow: hidden;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .form-main {
 | 
 |  |  |     width: 300px;
 | 
 |  |  |     display: flex;
 | 
 |  |  |     flex-direction: column;
 | 
 |  |  |     align-items: center;
 | 
 |  |  |     justify-content: center;
 | 
 |  |  |     background-color: rgba(255, 255, 255, 0.6);
 | 
 |  |  |     padding: 50px 30px 50px 30px;
 | 
 |  |  |     border-radius: 20px;
 | 
 |  |  |     box-shadow: 0px 0px 40px rgba(0, 0, 0, 0.062);
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .heading {
 | 
 |  |  |     font-size: 2.5em;
 | 
 |  |  |     color: #2e2e2e;
 | 
 |  |  |     font-weight: 700;
 | 
 |  |  |     margin: 15px 0 0px 0;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .inputContainer {
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     position: relative;
 | 
 |  |  |     display: flex;
 | 
 |  |  |     align-items: center;
 | 
 |  |  |     justify-content: center;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .inputIcon {
 | 
 |  |  |     position: absolute;
 | 
 |  |  |     left: 10px;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .inputField {
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     height: 40px;
 | 
 |  |  |     background-color: transparent;
 | 
 |  |  |     border: none;
 | 
 |  |  |     border-bottom: 2px solid rgb(173, 173, 173);
 | 
 |  |  |     border-radius: 30px;
 | 
 |  |  |     margin: 10px 0;
 | 
 |  |  |     color: black;
 | 
 |  |  |     font-size: .8em;
 | 
 |  |  |     font-weight: 500;
 | 
 |  |  |     box-sizing: border-box;
 | 
 |  |  |     padding-left: 30px;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .inputField:focus {
 | 
 |  |  |     outline: none;
 | 
 |  |  |     border-bottom: 2px solid rgb(199, 114, 255);
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .inputField::placeholder {
 | 
 |  |  |     color: rgb(80, 80, 80);
 | 
 |  |  |     font-size: 1em;
 | 
 |  |  |     font-weight: 500;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-box {
 | 
 |  |  |     height: 100%;
 | 
 |  |  |     display: flex;
 | 
 |  |  |     justify-content: center;
 | 
 |  |  |     align-items: center;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-button {
 | 
 |  |  |     position: relative;
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     border: 2px solid #8000ff;
 | 
 |  |  |     background-color: #8000ff;
 | 
 |  |  |     height: 40px;
 | 
 |  |  |     color: white;
 | 
 |  |  |     font-size: .8em;
 | 
 |  |  |     font-weight: 500;
 | 
 |  |  |     letter-spacing: 1px;
 | 
 |  |  |     border-radius: 30px;
 | 
 |  |  |     margin: 10px;
 | 
 |  |  |     cursor: pointer;
 | 
 |  |  |     overflow: hidden;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-button::after {
 | 
 |  |  |     content: "";
 | 
 |  |  |     position: absolute;
 | 
 |  |  |     background-color: rgba(255, 255, 255, 0.253);
 | 
 |  |  |     height: 100%;
 | 
 |  |  |     width: 150px;
 | 
 |  |  |     top: 0;
 | 
 |  |  |     left: -200px;
 | 
 |  |  |     border-bottom-right-radius: 100px;
 | 
 |  |  |     border-top-left-radius: 100px;
 | 
 |  |  |     filter: blur(10px);
 | 
 |  |  |     transition-duration: .5s;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-button:hover::after {
 | 
 |  |  |     transform: translateX(600px);
 | 
 |  |  |     transition-duration: .5s;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .right-box {
 | 
 |  |  |     height: 100%;
 | 
 |  |  |     width: 30%;
 | 
 |  |  |     background: #f6f6f6;
 | 
 |  |  |     position: relative;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .login-copyright {
 | 
 |  |  |     position: absolute;
 | 
 |  |  |     bottom: 20px;
 | 
 |  |  |     right: 20px;
 | 
 |  |  |     font-size: 14px;
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     display: flex;
 | 
 |  |  |     justify-content: center;
 | 
 |  |  |     align-items: center;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .copyright-text {
 | 
 |  |  |     margin-right: 20px;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .copyright-img {
 | 
 |  |  |     width: 40px;
 | 
 |  |  |     height: 40px;
 | 
 |  |  |     position: relative;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .copyright-img>img {
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     height: 100%;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .copyright-img-large {
 | 
 |  |  |     width: 140px;
 | 
 |  |  |     height: 140px;
 | 
 |  |  |     position: absolute;
 | 
 |  |  |     top: -140px;
 | 
 |  |  |     left: -50px;
 | 
 |  |  | }
 | 
 |  |  | 
 | 
 |  |  | .copyright-img-large>img {
 | 
 |  |  |     width: 100%;
 | 
 |  |  |     height: 100%;
 | 
 |  |  | }
 | 
 |  |  | </style> |