login.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <div class="loginPanel">
  3. <el-form ref="form" :model="form" :rules="rules" label-width="108px">
  4. <el-form-item label="用户名:" prop="username">
  5. <el-input
  6. placeholder="请输入"
  7. maxlength="30"
  8. v-autoTrim="{ obj: form, key: 'username' }"
  9. v-model="form.username"
  10. >
  11. </el-input>
  12. </el-form-item>
  13. <el-form-item label="密码:" prop="password">
  14. <el-input
  15. placeholder="请输入"
  16. type="password"
  17. maxlength="16"
  18. v-autoTrim="{ obj: form, key: 'password' }"
  19. v-model="form.password"
  20. >
  21. </el-input>
  22. </el-form-item>
  23. <div class="btns">
  24. <el-button type="primary" @click="toLogin">登录</el-button>
  25. </div>
  26. </el-form>
  27. </div>
  28. </template>
  29. <script>
  30. //import from '';
  31. export default {
  32. name: "login", // 登录
  33. components: {},
  34. data() {
  35. return {
  36. form: {
  37. username: "",
  38. password: "",
  39. },
  40. rules: {
  41. username: [
  42. { required: true, message: "请输入", trigger: "blur" },
  43. ],
  44. password: [
  45. {
  46. required: true,
  47. message: "请输入密码",
  48. trigger: "blur",
  49. },
  50. ],
  51. },
  52. i: 0,
  53. };
  54. },
  55. computed: {},
  56. methods: {
  57. toLogin() {
  58. this.$refs.form.validate((valid) => {
  59. if (valid) {
  60. this.$axios({
  61. method: "post",
  62. url: this.$api.common.username,
  63. data: this.form,
  64. }).then((res) => {
  65. if (res.code == 200 && res.info) {
  66. let Authorization = res.info.token_type + ' ' + res.info.access_token;
  67. let refreshToken = res.info.refresh_token;
  68. let expiresTime = res.info.expires_time;
  69. localStorage.clear();
  70. localStorage.setItem(
  71. "Authorization",
  72. Authorization
  73. );
  74. localStorage.setItem("refreshToken", refreshToken);
  75. localStorage.setItem("expiresTime", expiresTime);
  76. localStorage.setItem("username", this.form.username)
  77. let tokenTimer = null;
  78. let toExpiresTime =
  79. new Date(expiresTime).getTime() -
  80. new Date().getTime();
  81. if (toExpiresTime < 5*60 * 1000) {
  82. this.getRefreshToken()
  83. }else{
  84. this.$router.push({ path: "/mainPage" });
  85. }
  86. } else {
  87. this.$message.error(res.message || "登录失败");
  88. }
  89. });
  90. }
  91. });
  92. },
  93. getRefreshToken() {
  94. this.$axios({
  95. method: "post",
  96. url: this.$api.common.refreshToken,
  97. data: {
  98. refreshToken: localStorage.getItem("refreshToken"),
  99. },
  100. }).then((res) => {
  101. if (res.code == 200 && res.info) {
  102. let Authorization = res.info.token_type + ' ' + res.info.access_token;
  103. let refreshToken = res.info.refresh_token;
  104. let expiresTime = res.info.expires_time;
  105. localStorage.clear();
  106. localStorage.setItem("Authorization", Authorization);
  107. localStorage.setItem("refreshToken", refreshToken);
  108. localStorage.setItem("expiresTime", expiresTime);
  109. this.$router.push({ path: "/mainPage" });
  110. } else {
  111. this.$message.error(res.message || "获取refresh_token失败");
  112. }
  113. });
  114. },
  115. },
  116. // mounted: {},
  117. };
  118. </script>
  119. <style lang='less' scoped>
  120. .loginPanel {
  121. padding: 100px;
  122. .el-form {
  123. width: 60%;
  124. margin: 0 auto;
  125. padding-bottom: 45px;
  126. /deep/ .el-input,
  127. .el-select {
  128. width: 100%;
  129. }
  130. }
  131. .btns {
  132. padding-top: 30px;
  133. text-align: center;
  134. }
  135. }
  136. </style>