From c7bd1a3fd46b5d5f887ce4f674387294ee1e8ccd Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期二, 31 十月 2023 17:09:29 +0800
Subject: [PATCH] 添加手机校验

---
 src/views/Login.vue |  201 ++++++++++++++++++++++++++++++++++----------------
 1 files changed, 136 insertions(+), 65 deletions(-)

diff --git a/src/views/Login.vue b/src/views/Login.vue
index 04a3ee7..588b32d 100644
--- a/src/views/Login.vue
+++ b/src/views/Login.vue
@@ -6,58 +6,82 @@
 	</div>
   <div class="login">
 
-    <a-form
+    <a-form-model
       layout="horizontal"
-      :form="form"
-      @submit="handleSubmit"
+      :model="form"
+      ref="ruleForm"
+      :rules="rules"
       class="login-form"
     >
-      <a-tabs default-active-key="1" @change="callback">
-        <a-tab-pane key="1" tab="用户名登录">
-          <a-form-item>
-            <a-input
-              placeholder="请输入用户"
-              size="large"
-            >
-              <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" />
-            </a-input>
-          </a-form-item>
-          <a-form-item>
-            <a-input-password
-              type="password"
-              placeholder="请输入密码"
-              size="large"
-            >
-              <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />
-            </a-input-password>
-          </a-form-item>
-        </a-tab-pane>
-        <a-tab-pane key="2" tab="验证码登录" force-render>
-          <a-form-item>
-            <a-input
-              placeholder="手机号"
-              size="large"
-            >
-              <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />
-            </a-input>
-          </a-form-item>
-          <a-form-item>
-            <a-row :gutter="8">
-              <a-col :span="17">
-                <a-input placeholder="验证码">
-                  <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />
-                </a-input>
-              </a-col>
-              <a-col :span="7">
-                <a-button style="width: 100%">获取验证码</a-button>
-              </a-col>
-            </a-row>
-          </a-form-item>
-        </a-tab-pane>
-      </a-tabs>
+      <a-form-model-item ref="name" prop="name">
+        <a-input
+            placeholder="请输入用户名"
+            size="large"
+            v-model="form.name"
+            autocomplete="new-password"
+        >
+          <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" />
+        </a-input>
+      </a-form-model-item>
+      <a-form-model-item ref="pwd" prop="pwd">
+        <a-input-password
+            type="password"
+            placeholder="请输入密码"
+            size="large"
+            v-model="form.pwd"
+            autocomplete="new-password"
+        >
+          <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />
+        </a-input-password>
+      </a-form-model-item>
+<!--      <a-tabs default-active-key="1" @change="callback">-->
+<!--        <a-tab-pane key="1" tab="用户名登录">-->
+<!--          <a-form-item>-->
+<!--            <a-input-->
+<!--              placeholder="请输入用户"-->
+<!--              size="large"-->
+<!--              v-model="form.name"-->
+<!--            >-->
+<!--              <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" />-->
+<!--            </a-input>-->
+<!--          </a-form-item>-->
+<!--          <a-form-item>-->
+<!--            <a-input-password-->
+<!--              type="password"-->
+<!--              placeholder="请输入密码"-->
+<!--              size="large"-->
+<!--              v-model="form.pwd"-->
+<!--            >-->
+<!--              <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />-->
+<!--            </a-input-password>-->
+<!--          </a-form-item>-->
+<!--        </a-tab-pane>-->
+<!--        <a-tab-pane key="2" tab="验证码登录" force-render>-->
+<!--          <a-form-item>-->
+<!--            <a-input-->
+<!--              placeholder="手机号"-->
+<!--              size="large"-->
+<!--            >-->
+<!--              <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />-->
+<!--            </a-input>-->
+<!--          </a-form-item>-->
+<!--          <a-form-item>-->
+<!--            <a-row :gutter="8">-->
+<!--              <a-col :span="17">-->
+<!--                <a-input placeholder="验证码">-->
+<!--                  <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />-->
+<!--                </a-input>-->
+<!--              </a-col>-->
+<!--              <a-col :span="7">-->
+<!--                <a-button style="width: 100%">获取验证码</a-button>-->
+<!--              </a-col>-->
+<!--            </a-row>-->
+<!--          </a-form-item>-->
+<!--        </a-tab-pane>-->
+<!--      </a-tabs>-->
       <div style="margin-bottom: 20px">
-        <a-checkbox :checked="true" style="color:#fff;">自动登录</a-checkbox>
-        <a style="float: right">忘记密码</a>
+        <a-checkbox :checked="saveAccount" style="color:#fff;" @change="isSave">记住密码</a-checkbox>
+<!--        <a style="float: right">忘记密码</a>-->
       </div>
       <a-form-item style="text-align: center">
         <a-button
@@ -65,43 +89,90 @@
           html-type="submit"
           style="width: 100%"
           size="large"
+          @click="handleSubmit"
+          :loading="isLoading"
         >
           登录
         </a-button>
       </a-form-item>
 	  <center><p>技术支持:中国科学院</p></center>
-    </a-form>
+    </a-form-model>
   </div>
   </div>
 </template>
 
 <script>
+
+import { login, getMenuAdmin } from "@/api/login";
+import Cookies from 'js-cookie';
+import {Base64} from "js-base64";
+
 export default {
   name: "login",
   data() {
     return {
+      isLoading: false,
+      saveAccount: false,
       // hasErrors,
-      form: this.$form.createForm(this),
+      // form: this.$form.createForm(this),
+      form: {
+        name: '',
+        pwd: ''
+      },
+      rules: {
+        name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
+        pwd: [{ required: true, message: '请输入用户密码', trigger: 'blur' }]
+      },
+      menu: []
     };
   },
-  mounted() {
-    this.$nextTick(() => {
-      this.form.validateFields();
-    });
+  created() {
+    // this.$nextTick(() => {
+    //   this.form.validateFields();
+    // });
+    this.hasUserCodeOrPassword()
   },
   methods: {
-    handleSubmit(e) {
-      e.preventDefault();
-      this.form.validateFields((err, values) => {
-        if (!err) {
-          console.log("Received values of form: ", values);
-          this.$router.push({ name: "default" });
+    hasUserCodeOrPassword(){
+      if (localStorage.getItem('userName') && localStorage.getItem('userPassword')) {
+        this.form.name = localStorage.getItem('userName')
+        this.form.pwd = Base64.decode(localStorage.getItem('userPassword'))//解密
+        this.saveAccount = true
+      }
+    },
+
+    isSave(e){
+      const t = this
+      t.saveAccount = !t.saveAccount
+    },
+
+    handleSubmit() {
+      this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.isLoading = true
+          const res = await login(this.form)
+          if (res.data.code === 100) {
+            Cookies.set('resTk', res.data.data.tk);
+            Cookies.set('resUid', res.data.data.uid);
+            Cookies.set('userInfo',JSON.stringify(res.data.data),{expires: 7})
+            if (this.saveAccount) {
+              localStorage.setItem('userName', this.form.name)
+              localStorage.setItem('userPassword', Base64.encode(this.form.pwd))
+            } else {
+              localStorage.removeItem('userName')
+              localStorage.removeItem('userPassword')
+            }
+            this.$router.push('/home')
+          } else {
+            this.$message.warning(res.data.msg);
+          }
+          this.isLoading = false
+        } else {
+          console.log('error submit!!');
+          return false;
         }
       });
-    },
-    callback(key) {
-      console.log(key);
-    },
+    }
   },
 };
 </script>
@@ -129,7 +200,7 @@
 }
   .hedaer {
     margin: 0px auto;
-	padding-top:100px;
+	padding-top:200px;
     width: 1000px;
     text-align: center;
 	text-shadow:0 0 1px #000;

--
Gitblit v1.9.2