index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <template>
  2. <div class="login-container">
  3. <div class="login-nav">
  4. <div class="login-nav-img">
  5. <img src="../../../public/images/nav-2.png" />
  6. </div>
  7. <div class="login-nav-info">门禁设备管理平台</div>
  8. <div class="login-form">
  9. <div class="login-form-head">
  10. <div class="login-form-titile">用户登录</div>
  11. <div class="login-form-info">—— 欢迎登录用户系统管理 ——</div>
  12. </div>
  13. <el-form
  14. ref="loginForm"
  15. :model="loginForm"
  16. :inline="false"
  17. size="normal"
  18. :rules="rules"
  19. autocomplete="on"
  20. >
  21. <el-form-item class="login-form-item" prop="username">
  22. <span><img src="../../../public/images/denglu.png" /></span>
  23. <el-input
  24. class="login-form-input"
  25. v-model="loginForm.username"
  26. ref="username"
  27. name="username"
  28. placeholder="请输入您的账号"
  29. ></el-input>
  30. </el-form-item>
  31. <el-form-item class="login-form-item" prop="password">
  32. <span><img src="../../../public/images/mima.png" /></span>
  33. <el-input
  34. class="login-form-input"
  35. type="password"
  36. v-model="loginForm.password"
  37. placeholder="请输入您的密码"
  38. ref="password"
  39. name="password"
  40. autocomplete="on"
  41. @keyup.native="checkCapslock"
  42. @blur="capsTooltip = false"
  43. @keyup.enter.native="handleLogin"
  44. >
  45. </el-input>
  46. </el-form-item>
  47. <el-form-item>
  48. <el-button
  49. :loading="loading"
  50. type="primary"
  51. @click.native.prevent="handleLogin"
  52. class="login-form-button"
  53. >登录</el-button
  54. >
  55. </el-form-item>
  56. </el-form>
  57. </div>
  58. </div>
  59. </div>
  60. </template>
  61. <script>
  62. import { validUsername } from "@/utils/validate";
  63. import SocialSign from "./components/SocialSignin";
  64. export default {
  65. name: "Login",
  66. components: { SocialSign },
  67. data() {
  68. const validateUsername = (rule, value, callback) => {
  69. if (value.length < 5) {
  70. callback(new Error("账号至少五位数"));
  71. } else {
  72. callback();
  73. }
  74. };
  75. const validatePassword = (rule, value, callback) => {
  76. if (value.length < 6) {
  77. callback(new Error("密码至少六位数"));
  78. } else {
  79. callback();
  80. }
  81. };
  82. return {
  83. loginForm: {
  84. username: "admin",
  85. password: "123abc",
  86. },
  87. rules: {
  88. username: [
  89. { required: true, trigger: "blur", validator: validateUsername },
  90. ],
  91. password: [
  92. { required: true, trigger: "blur", validator: validatePassword },
  93. ],
  94. },
  95. capsTooltip: false,
  96. loading: false,
  97. redirect: undefined,
  98. otherQuery: {},
  99. };
  100. },
  101. // watch: {
  102. // $route: {
  103. // handler: function(route) {
  104. // const query = route.query
  105. // if (query) {
  106. // this.redirect = query.redirect
  107. // this.otherQuery = this.getOtherQuery(query)
  108. // }
  109. // },
  110. // immediate: true
  111. // }
  112. // },
  113. // created() {
  114. // window.addEventListener('storage', this.afterQRScan)
  115. // },
  116. mounted() {
  117. if (this.loginForm.username === "") {
  118. this.$refs.username.focus();
  119. } else if (this.loginForm.password === "") {
  120. this.$refs.password.focus();
  121. }
  122. },
  123. // destroyed() {
  124. // window.removeEventListener('storage', this.afterQRScan)
  125. // },
  126. methods: {
  127. checkCapslock(e) {
  128. const { key } = e;
  129. this.capsTooltip = key && key.length === 1 && key >= "A" && key <= "Z";
  130. },
  131. handleLogin() {
  132. this.$refs.loginForm.validate((valid) => {
  133. if (valid) {
  134. this.loading = true;
  135. this.$store
  136. .dispatch("user/login", this.loginForm)
  137. .then(() => {
  138. this.$router.push({
  139. path: this.redirect || "/",
  140. query: this.otherQuery,
  141. });
  142. this.loading = false;
  143. })
  144. .catch(() => {
  145. this.loading = false;
  146. });
  147. } else {
  148. console.log("error submit!!");
  149. return false;
  150. }
  151. });
  152. },
  153. },
  154. };
  155. </script>
  156. <style scoped>
  157. .login-container {
  158. width: 960px;
  159. height: 540px;
  160. margin: 100px auto;
  161. box-shadow: 0 0 25px #cac6c6;
  162. }
  163. .login-nav {
  164. position: relative;
  165. width: 960px;
  166. height: 250px;
  167. background: url(../../../public/images/nav-1.png) center center/100% 100%;
  168. }
  169. .login-nav-img {
  170. position: absolute;
  171. top: 21.5px;
  172. left: 31.5px;
  173. width: 162px;
  174. height: 44px;
  175. }
  176. .login-nav-img img {
  177. width: 100%;
  178. }
  179. .login-nav-info {
  180. position: absolute;
  181. top: 71px;
  182. left: 326px;
  183. margin: 0 auto;
  184. width: 330px;
  185. line-height: 37.5px;
  186. font-size: 40.01px;
  187. color: #ffffff;
  188. }
  189. .login-form {
  190. position: absolute;
  191. top: 127.5px;
  192. left: 315px;
  193. margin: 0 auto;
  194. width: 330px;
  195. height: 350.1px;
  196. background-color: #fff;
  197. box-shadow: 0 0 25px #cac6c6;
  198. }
  199. .login-form-head {
  200. position: relative;
  201. width: 330px;
  202. height: 122.6px;
  203. }
  204. .login-form-titile {
  205. position: absolute;
  206. top: 34px;
  207. left: 109.5px;
  208. height: 28px;
  209. font-size: 30.01px;
  210. color: #425570;
  211. }
  212. .login-form-info {
  213. position: absolute;
  214. top: 82px;
  215. left: 48.5px;
  216. height: 15px;
  217. font-size: 16px;
  218. color: #666666;
  219. }
  220. .login-form-item {
  221. margin-top: 10.9px;
  222. margin-left: 30px;
  223. }
  224. .login-form-item span {
  225. display: inline-block;
  226. width: 43px;
  227. height: 43px;
  228. background-color: #1e4365;
  229. text-align: center;
  230. }
  231. .login-form-item span img {
  232. width: 19px;
  233. margin-top: 12.5px;
  234. vertical-align: sub;
  235. }
  236. .login-form-item .login-form-input {
  237. width: 227.5px;
  238. height: 40px;
  239. }
  240. .login-form-button {
  241. width: 270px;
  242. height: 36px;
  243. background-color: #1d4264;
  244. color: #ffffff;
  245. border-radius: 4px;
  246. font-size: 13px;
  247. margin-left: 30.5px;
  248. margin-top: 21.2px;
  249. }
  250. </style>