Browse Source

代码提交

cxs 6 months ago
parent
commit
bf9be7bef1

+ 1 - 0
src/api/interface/index.ts

@@ -35,6 +35,7 @@ export namespace Login {
   export interface ReqLoginForm {
     username: string;
     password: string;
+    rememberMe: boolean
   }
   export interface ResLogin {
     access_token: string;

+ 2 - 2
src/styles/element.scss

@@ -166,7 +166,7 @@
             border-color: var(--el-color-primary-light-5);
         }
         .el-table__body tr.el-table__row--striped td.el-table__cell {
-            background: #006FE809;
+            background: var(--el-disabled-bg-color);
         }
         .el-table__header th {
             height: 45px;
@@ -368,4 +368,4 @@
 
 .el-checkbox__input.is-checked+.el-checkbox__label {
     color: var(--el-text-color-regular);
-}
+}

+ 35 - 19
src/views/login/components/LoginForm.vue

@@ -1,27 +1,15 @@
 <template>
-  <el-form ref="loginFormRef" :model="loginForm" :rules="loginRules" size="large">
-    <el-form-item prop="username">
-      <el-input v-model="loginForm.username" placeholder="用户名:admin / user">
-        <template #prefix>
-          <el-icon class="el-input__icon">
-            <user />
-          </el-icon>
-        </template>
-      </el-input>
+  <el-form ref="loginFormRef" :model="loginForm" :rules="loginRules" label-position="top" hide-required-asterisk="false">
+    <el-form-item label="账号" prop="username">
+      <el-input class="no-border" v-model="loginForm.username" placeholder="请输入账号" />
     </el-form-item>
-    <el-form-item prop="password">
-      <el-input v-model="loginForm.password" type="password" placeholder="密码:123456" show-password autocomplete="new-password">
-        <template #prefix>
-          <el-icon class="el-input__icon">
-            <lock />
-          </el-icon>
-        </template>
-      </el-input>
+    <el-form-item label="密码" prop="password">
+      <el-input class="no-border"  v-model="loginForm.password" type="password" placeholder="请输入密码" show-password autocomplete="new-password"/>
     </el-form-item>
+    <el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox>
   </el-form>
   <div class="login-btn">
-    <el-button :icon="CircleClose" round size="large" @click="resetForm(loginFormRef)"> 重置 </el-button>
-    <el-button :icon="UserFilled" round size="large" type="primary" :loading="loading" @click="login(loginFormRef)">
+    <el-button style="width: 100%;" size="large" type="primary" :loading="loading" @click="login(loginFormRef)">
       登录
     </el-button>
   </div>
@@ -57,6 +45,7 @@ const loginRules = reactive({
 
 const loading = ref(false);
 const loginForm = reactive<Login.ReqLoginForm>({
+  rememberMe: false,
   username: "",
   password: ""
 });
@@ -67,6 +56,18 @@ const login = (formEl: FormInstance | undefined) => {
   formEl.validate(async valid => {
     if (!valid) return;
     loading.value = true;
+
+    if (loginForm.rememberMe) {
+      localStorage.setItem('username', String(loginForm.username));
+      localStorage.setItem('password', String(loginForm.password));
+      localStorage.setItem('rememberMe', String(loginForm.rememberMe));
+    } else {
+      // 否则移除
+      localStorage.removeItem('username');
+      localStorage.removeItem('password');
+      localStorage.removeItem('rememberMe');
+    }
+
     try {
       // 1.执行登录接口
       const { data } = await loginApi({ ...loginForm, password: md5(loginForm.password) });
@@ -93,6 +94,15 @@ const login = (formEl: FormInstance | undefined) => {
   });
 };
 
+const getLoginData = () => {
+  const username = localStorage.getItem('username');
+  const password = localStorage.getItem('password');
+  const rememberMe = localStorage.getItem('rememberMe');
+  loginForm.username = username === null ? String(loginForm.username) : username
+  loginForm.password = password === null ? String(loginForm.password) : String(password)
+  loginForm.rememberMe = rememberMe === null ? false : Boolean(rememberMe)
+};
+
 // resetForm
 const resetForm = (formEl: FormInstance | undefined) => {
   if (!formEl) return;
@@ -107,6 +117,7 @@ onMounted(() => {
       login(loginFormRef.value);
     }
   };
+  getLoginData()
 });
 
 onBeforeUnmount(() => {
@@ -116,4 +127,9 @@ onBeforeUnmount(() => {
 
 <style scoped lang="scss">
 @import "../index.scss";
+::v-deep .no-border .el-input__wrapper  {
+  box-shadow: 0 0 0 0px!important;
+  background-color: #F2F2F2;
+}
+
 </style>

+ 16 - 8
src/views/login/index.scss

@@ -10,11 +10,20 @@
     display: flex;
     align-items: center;
     justify-content: space-around;
-    width: 96.5%;
-    height: 94%;
+    width: 100%;
+    height: 100%;
     padding: 0 50px;
     background-color: rgb(255 255 255 / 80%);
-    border-radius: 10px;
+
+    .login-title{
+      font-weight: 600;
+      font-size: 28px;
+      color: var(--el-color-primary);
+      width: 100%;
+      text-align: center;
+      margin-bottom: 40px;
+    }
+
     .dark {
       position: absolute;
       top: 13px;
@@ -29,7 +38,7 @@
       }
     }
     .login-form {
-      width: 420px;
+      width: 350px;
       padding: 50px 40px 45px;
       background-color: var(--el-bg-color);
       border-radius: 10px;
@@ -44,16 +53,15 @@
           height: 40px;
         }
         .logo-text {
-          padding: 0 0 0 25px;
           margin: 0;
-          font-size: 42px;
+          font-size: 20px;
           font-weight: bold;
-          color: #34495e;
+          color: var(--el-color-primary);
           white-space: nowrap;
         }
       }
       .el-form-item {
-        margin-bottom: 40px;
+
       }
       .login-btn {
         display: flex;

+ 9 - 10
src/views/login/index.vue

@@ -1,16 +1,15 @@
 <template>
   <div class="login-container flx-center">
     <div class="login-box">
-      <div class="login-left">
-        <img class="login-left-img" src="@/assets/images/login_left.png" alt="login" />
-      </div>
-      <div class="login-form">
-        <div class="login-logo">
-          <img class="login-icon" src="@/assets/images/logo.svg" alt="" />
-          <h2 class="logo-text">地面气象观测系统</h2>
-        </div>
-        <LoginForm />
-      </div>
+       <div>
+         <div class="login-title">地面气象观测综合分析显示系统</div>
+         <div class="login-form">
+           <div class="login-logo">
+             <h2 class="logo-text">用户登录</h2>
+           </div>
+           <LoginForm />
+         </div>
+       </div>
     </div>
   </div>
 </template>