Login.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <div class="login" id="login">
  3. <a href="javascript:;" class="log-close"><i class="icons close"></i></a>
  4. <div class="log-bg">
  5. <div class="log-cloud cloud1"></div>
  6. <div class="log-cloud cloud2"></div>
  7. <div class="log-cloud cloud3"></div>
  8. <div class="log-cloud cloud4"></div>
  9. <div class="log-logo">Welcome!</div>
  10. <div class="log-text"></div>
  11. </div>
  12. <div class="log-email" v-loading="isLoging" >
  13. <input type="text" placeholder="用户名" :class="'log-input' + (username==''?' log-input-empty':'')" v-model="username"><input type="password" placeholder="密码" :class="'log-input' + (password==''?' log-input-empty':'')" v-model="password">
  14. <a href="javascript:;" class="log-btn" @click="login" >登录</a>
  15. </div>
  16. </div>
  17. </template>
  18. <script>
  19. import crypto from 'crypto'
  20. export default {
  21. name: 'Login',
  22. data(){
  23. return {
  24. isLoging: false,
  25. username: '',
  26. password: ''
  27. }
  28. },
  29. created(){
  30. var that = this;
  31. document.onkeydown = function(e) {
  32. var key = window.event.keyCode;
  33. if (key == 13) {
  34. that.login();
  35. }
  36. }
  37. },
  38. methods:{
  39. //登录逻辑
  40. login(){
  41. if(this.username!='' && this.password!=''){
  42. this.toLogin();
  43. }
  44. },
  45. //登录请求
  46. toLogin(){
  47. //一般要跟后端了解密码的加密规则
  48. //这里例子用的哈希算法来自./js/sha1.min.js
  49. //需要想后端发送的登录参数
  50. let loginParam = {
  51. username: this.username,
  52. password: crypto.createHash('md5').update(this.password, "utf8").digest('hex')
  53. }
  54. var that = this;
  55. //设置在登录状态
  56. this.isLoging = true;
  57. this.$axios({
  58. method: 'get',
  59. url:"/api/user/login",
  60. params: loginParam
  61. }).then(function (res) {
  62. console.log(JSON.stringify(res));
  63. if (res.data == "success") {
  64. that.$cookies.set("session", {"username": that.username}) ;
  65. //登录成功后
  66. that.cancelEnterkeyDefaultAction();
  67. that.$router.push('/');
  68. }else{
  69. that.isLoging = false;
  70. that.$message({
  71. showClose: true,
  72. message: '登录失败,用户名或密码错误',
  73. type: 'error'
  74. });
  75. }
  76. }).catch(function (error) {
  77. that.$message.error(error.response.statusText);
  78. that.isLoging = false;
  79. });
  80. },
  81. setCookie: function (cname, cvalue, exdays) {
  82. var d = new Date();
  83. d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  84. var expires = "expires=" + d.toUTCString();
  85. console.info(cname + "=" + cvalue + "; " + expires);
  86. document.cookie = cname + "=" + cvalue + "; " + expires;
  87. console.info(document.cookie);
  88. },
  89. cancelEnterkeyDefaultAction: function() {
  90. document.onkeydown = function(e) {
  91. var key = window.event.keyCode;
  92. if (key == 13) {
  93. return false;
  94. }
  95. }
  96. }
  97. }
  98. }
  99. </script>
  100. <style scoped>
  101. .login{position: fixed; overflow: hidden;left: 50%; margin-left: -250px; top:50%; margin-top: -350px; width: 500px; min-height: 555px; z-index: 10; right: 140px; background: #fff;-webkit-border-radius: 5px;
  102. -moz-border-radius: 5px;
  103. -ms-border-radius: 5px;
  104. -o-border-radius: 5px;
  105. border-radius: 5px; -webkit-box-shadow: 0px 3px 16px -5px #070707; box-shadow: 0px 3px 16px -5px #070707}
  106. .log-close{display: block; position: absolute; top:12px; right: 12px; opacity: 1;}
  107. .log-close:hover .icons{transform: rotate(180deg);}
  108. .log-close .icons{opacity: 1; transition: all .3s}
  109. .log-cloud{background-image: url(../assets/login-cloud.png); width: 63px ;height: 40px; position: absolute; z-index: 1}
  110. .login .cloud1{top:21px; left: -30px; transform: scale(.6); animation: cloud1 20s linear infinite;}
  111. .login .cloud2{top:87px; right: 20px; animation: cloud2 19s linear infinite;}
  112. .login .cloud3{top:160px; left: 5px;transform: scale(.8);animation: cloud3 21s linear infinite;}
  113. .login .cloud4{top:150px; left: -40px;transform: scale(.4);animation: cloud4 19s linear infinite;}
  114. .log-bg{background: url(../assets/login-bg.jpg); width: 100%; height: 312px; overflow: hidden;}
  115. .log-logo{height: 80px; margin: 120px auto 25px; text-align: center; color: #1fcab3; font-weight: bold; font-size: 40px;}
  116. .log-text{color: #57d4c3; font-size: 13px; text-align: center; margin: 0 auto;}
  117. .log-logo,.log-text{z-index: 2}
  118. .icons{background:url(../assets/icons.png) no-repeat; display: inline-block;}
  119. .close{height:16px;width:16px;background-position:-13px 0;}
  120. .login-email{height:17px;width:29px;background-position:-117px 0;}
  121. .log-btns{padding: 15px 0; margin: 0 auto;}
  122. .log-btn{width:402px; display: block; text-align: left; line-height: 50px;margin:0 auto 15px; height:50px; color:#fff; font-size:13px;-webkit-border-radius: 5px; background-color: #3B5999;
  123. -moz-border-radius: 5px;
  124. -ms-border-radius: 5px;
  125. -o-border-radius: 5px;
  126. border-radius: 5px;
  127. position: relative;}
  128. .log-btn.tw{background-color: #13B4E9}
  129. .log-btn.email{background-color: #50E3CE}
  130. .log-btn:hover,.log-btn:focus{color: #fff; opacity: .8;}
  131. .log-email{text-align: center; margin-top: 20px;}
  132. .log-email .log-btn{background-color: #50E3CE;text-align: center;}
  133. .log-input-empty{border: 1px solid #f37474 !important;}
  134. .isloading{background: #d6d6d6}
  135. .log-btn .icons{margin-left: 30px; vertical-align: middle;}
  136. .log-btn .text{left: 95px; line-height: 50px; text-align: left; position: absolute;}
  137. .log-input{width: 370px;overflow: hidden; padding: 0 15px;font-size: 13px; border: 1px solid #EBEBEB; margin:0 auto 15px; height: 48px; line-height: 48px; -webkit-border-radius: 5px;
  138. -moz-border-radius: 5px;
  139. -ms-border-radius: 5px;
  140. -o-border-radius: 5px;
  141. border-radius: 5px;}
  142. .log-input.warn{border: 1px solid #f88787}
  143. @-webkit-keyframes cloud1 {
  144. 0%{left: 200px}
  145. 100%{left:-130px;}
  146. }
  147. @keyframes cloud1{
  148. 0%{left: 200px}
  149. 100%{left:-130px;}
  150. }
  151. @-webkit-keyframes cloud2 {
  152. 0%{left:500px;}
  153. 100%{left:-90px;}
  154. }
  155. @keyframes cloud2{
  156. 0%{left:500px;}
  157. 100%{left:-90px;}
  158. }
  159. @-webkit-keyframes cloud3 {
  160. 0%{left:620px;}
  161. 100%{left:-70px;}
  162. }
  163. @keyframes cloud3{
  164. 0%{left:620px;}
  165. 100%{left:-70px;}
  166. }@-webkit-keyframes cloud4 {
  167. 0%{left:100px;}
  168. 100%{left:-70px;}
  169. }
  170. @keyframes cloud4{
  171. 0%{left:100px;}
  172. 100%{left:-70px;}
  173. }
  174. </style>