zhangliang2 3 jaren geleden
bovenliggende
commit
622d3e89b9
1 gewijzigde bestanden met toevoegingen van 181 en 0 verwijderingen
  1. 181 0
      src/views/login.vue

+ 181 - 0
src/views/login.vue

@@ -0,0 +1,181 @@
+<template>
+    <div class="loginPanel">
+        <el-form ref="form" :model="form" :rules="rules" label-width="108px">
+            <el-form-item label="用户名:" prop="username">
+                <el-input
+                    placeholder="请输入"
+                    maxlength="30"
+                    v-autoTrim="{ obj: form, key: 'username' }"
+                    v-model="form.username"
+                >
+                </el-input>
+            </el-form-item>
+
+            <el-form-item label="密码:" prop="password">
+                <el-input
+                    placeholder="请输入"
+                    type="password"
+                    maxlength="16"
+                    v-autoTrim="{ obj: form, key: 'password' }"
+                    v-model="form.password"
+                >
+                </el-input>
+            </el-form-item>
+
+            <div class="btns">
+                <el-button type="primary" @click="toLogin">登录</el-button>
+            </div>
+        </el-form>
+    </div>
+</template>
+
+<script>
+//import  from '';
+
+export default {
+    name: "login", // 登录
+    components: {},
+    data() {
+        return {
+            form: {
+                username: "",
+                password: "",
+            },
+            rules: {
+                username: [
+                    { required: true, message: "请输入", trigger: "blur" },
+                ],
+                password: [
+                    {
+                        required: true,
+                        message: "请输入最多16位密码",
+                        trigger: "blur",
+                    },
+                ],
+            },
+            i: 0,
+        };
+    },
+
+    computed: {},
+
+    methods: {
+        toLogin() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    this.$axios({
+                        method: "post",
+                        url: this.$api.common.username,
+                        data: this.form,
+                    }).then((res) => {
+                        if (res.code == 200 && res.info) {
+                            let Authorization =
+                                "Bearer " + res.info.access_token;
+                            let refreshToken = res.info.refresh_token;
+                            let expiresTime = res.info.expires_time;
+
+                            localStorage.clear();
+                            localStorage.setItem(
+                                "Authorization",
+                                Authorization
+                            );
+                            localStorage.setItem("refreshToken", refreshToken);
+                            localStorage.setItem("expiresTime", expiresTime);
+
+                            let tokenTimer = null;
+                            let toExpiresTime =
+                                new Date(expiresTime).getTime() -
+                                new Date().getTime();
+
+                            console.log("go1", toExpiresTime);
+                            // 过期时间前60秒即可发送获取新的token
+                            if (toExpiresTime > 60 * 1000) {
+                                tokenTimer = setTimeout(() => {
+                                    this.getRefreshToken();
+                                    clearTimeout(tokenTimer);
+                                    // }, toExpiresTime - 60 * 1000);
+                                }, 15 * 1000);
+                            } else {
+                                this.getRefreshToken();
+                            }
+
+                            this.$message.success("登录成功");
+                            this.$router.push({ path: "/mainPage" });
+                        } else {
+                            this.$message.error(res.message || "登录失败");
+                        }
+                    });
+                }
+            });
+        },
+        getRefreshToken() {
+            this.$axios({
+                method: "post",
+                url: this.$api.common.refreshToken,
+                data: {
+                    refreshToken: localStorage.getItem("refreshToken"),
+                },
+            }).then((res) => {
+                if (res.code == 200 && res.info) {
+                    let Authorization = "Bearer " + res.info.access_token;
+                    let refreshToken = res.info.refresh_token;
+                    let expiresTime = res.info.expires_time;
+
+                    localStorage.clear();
+                    localStorage.setItem("Authorization", Authorization);
+                    localStorage.setItem("refreshToken", refreshToken);
+                    localStorage.setItem("expiresTime", expiresTime);
+
+                    let tokenTimer = null;
+                    let toExpiresTime =
+                        new Date(expiresTime).getTime() - new Date().getTime();
+
+                    // 过期时间前60秒即可发送获取新的token
+                    console.log("go", toExpiresTime);
+                    if (toExpiresTime > 60 * 1000) {
+                        tokenTimer = setTimeout(() => {
+                            this.i++;
+                            if (this.i >= 10) {
+                                clearTimeout(tokenTimer);
+                                return;
+                            }
+                            this.getRefreshToken();
+                            clearTimeout(tokenTimer);
+                            // }, toExpiresTime - 60 * 1000);
+                            // Bearer 59d5d321-f16c-4412-9177-7f7d1e9180aa
+                        }, 15 * 1000);
+                    } else {
+                        this.getRefreshToken();
+                    }
+                } else {
+                    this.$message.error(res.message || "获取refresh_token失败");
+                }
+            });
+        },
+    },
+
+    // mounted: {},
+};
+</script>
+
+<style lang='less' scoped>
+.loginPanel {
+    padding: 100px;
+
+    .el-form {
+        width: 60%;
+        margin: 0 auto;
+        padding-bottom: 45px;
+
+        /deep/ .el-input,
+        .el-select {
+            width: 100%;
+        }
+    }
+
+    .btns {
+        padding-top: 30px;
+        text-align: center;
+    }
+}
+</style>