From 140e83402814ffd2e92dfe313f5681feedd39f86 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期二, 06 二月 2024 16:49:12 +0800
Subject: [PATCH] 修复弹窗bug

---
 src/views/Login.vue |  106 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 97 insertions(+), 9 deletions(-)

diff --git a/src/views/Login.vue b/src/views/Login.vue
index da63a14..9eb9abe 100644
--- a/src/views/Login.vue
+++ b/src/views/Login.vue
@@ -15,9 +15,10 @@
     >
       <a-form-model-item ref="name" prop="name">
         <a-input
-            placeholder="请输入用户"
+            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>
@@ -28,6 +29,7 @@
             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>
@@ -78,8 +80,8 @@
 <!--        </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
@@ -88,11 +90,13 @@
           style="width: 100%"
           size="large"
           @click="handleSubmit"
+          :loading="isLoading"
+          v-preventReClick="1500"
         >
           登录
         </a-button>
       </a-form-item>
-	  <center><p>技术支持:中国科学院</p></center>
+	  <center><p>技术支持:技术保障部</p></center>
     </a-form-model>
   </div>
   </div>
@@ -100,12 +104,18 @@
 
 <script>
 
-import { Login, getMenuAdmin } from "@/api/login";
+import { login, getMenuAdmin } from "@/api/login";
 import Cookies from 'js-cookie';
+import {Base64} from "js-base64";
+import {getAreaWithUserIfo} from "@/api/user";
+
+
 export default {
   name: "login",
   data() {
     return {
+      isLoading: false,
+      saveAccount: false,
       // hasErrors,
       // form: this.$form.createForm(this),
       form: {
@@ -119,29 +129,107 @@
       menu: []
     };
   },
-  mounted() {
+  created() {
     // this.$nextTick(() => {
     //   this.form.validateFields();
     // });
+    this.hasUserCodeOrPassword()
   },
   methods: {
+    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) {
-          const res = await Login(this.form)
+          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})
+            await this.getAreaUsers(res.data.data.districtId)
+            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 {
-            console.log(res.data.msg)
             this.$message.warning(res.data.msg);
           }
+          this.isLoading = false
         } else {
           console.log('error submit!!');
           return false;
         }
       });
+    },
+
+    async getAreaUsers(districtId) {
+      let t = this
+      let res = await getAreaWithUserIfo()
+      if (res.data.code == 100) {
+        if (res.data.data) {
+          t.userTitTree(res.data.data)
+          const areaUsers = t.findNodeById(res.data.data, districtId).children
+          localStorage.removeItem('areaUsers')
+          localStorage.setItem('areaUsers',JSON.stringify(areaUsers))
+        } else {
+          console.log('暂无数据')
+        }
+      } else {
+        this.$message.warning(res.data.msg);
+      }
+    },
+
+    // 根据id查对象
+    findNodeById(data, value) {
+      for (const node of data) {
+        if (node.id === value) {
+          return node;
+        }
+        if (node.children) {
+          const foundNode = this.findNodeById(node.children, value);
+          if (foundNode) {
+            return foundNode;
+          }
+        }
+      }
+      return null;
+    },
+
+    // 将树状数据name字段放入users的姓名电话
+    userTitTree(treeData) {
+      for (const node of treeData) {
+        if (node.users) {
+          node.users = node.users.filter(i => i.roleId == 3)
+          node.users = node.users.map((i) => {
+            return {
+              ...i,
+              unittype: node.type,
+              districtId: node.id
+            }
+          })
+          node.name = node.name + '(' + node.users.map(i => i.realName + ' ' + i.phone).join(',') + ')'
+        }
+        if (node.children) {
+          this.userTitTree(node.children)
+        }
+      }
+      return treeData
     }
   },
 };
@@ -170,7 +258,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