login.blade.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. @extends('layouts.app')
  2. @section('content')
  3. <div class="container-fluid" id="list">
  4. <div class="row justify-content-center">
  5. <div class="col-md-12">
  6. <div class="card">
  7. <div class="card-header">登录</div>
  8. <div class="card-body">
  9. <div class="row">
  10. <div class="col-md-6 text-md-right">
  11. <img src="{{asset('images/login/bg1.jpg')}}" alt="" class="img-fluid">
  12. </div>
  13. <div class="col-md-6"><form method="POST" action="{{ route('login') .'?rand='.microtime(true)}}">
  14. @csrf
  15. <label for="name" class="col-form-label text-md-right">用户名</label>
  16. <div class="form-group row">
  17. <div class="col-md-8">
  18. <input id="name" type="text" class="form-control" :class="[errors.name?'is-invalid':'']"
  19. oninput="setTimeout(function(){vue.errors.name=''},10)"
  20. name="name" v-model="inputting.name" required autocomplete="name" autofocus>
  21. <span class="invalid-feedback" v-if="errors.name">
  22. <strong v-for="msg in errors.name">@{{ msg }}</strong>
  23. </span>
  24. </div>
  25. </div>
  26. <label for="password" class="col-form-label text-md-right">密码</label>
  27. <div class="form-group row">
  28. <div class="col-md-8">
  29. <input id="password" type="password" class="form-control " :class="[errors.password?'is-invalid':'']"
  30. @keypress="passwordInput($event)"
  31. v-model="inputting.password" name="password" required autocomplete="current-password">
  32. <span class="invalid-feedback" v-if="errors.password">
  33. <strong v-for="msg in errors.password">@{{ msg }}</strong>
  34. </span>
  35. </div>
  36. </div>
  37. <div class="form-group row">
  38. <div class="col-md-6">
  39. <div class="form-check">
  40. <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
  41. <label class="form-check-label" for="remember">
  42. 记住我
  43. </label>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="form-group row mb-0">
  48. <div class="col-md-8">
  49. <button type="button" class="btn btn-primary form-control" onclick="loginSubmit()">
  50. 登录
  51. </button>
  52. {{-- @if (Route::has('password.request'))--}}
  53. {{-- <a class="btn btn-link" href="{{ route('password.request') }}">--}}
  54. {{-- {{ __('Forgot Your Password?') }}--}}
  55. {{-- </a>--}}
  56. {{-- @endif--}}
  57. </div>
  58. </div>
  59. </form>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. @endsection
  68. @section('lastScript')
  69. <script>
  70. let vue=new Vue({
  71. el:"#list",
  72. mounted:function(){
  73. $('.invalid-feedback').addClass('d-block')
  74. },
  75. data:{
  76. inputting:{name:'',password:'',is_json:true},
  77. errors: {name:'',password:'',},
  78. },
  79. methods:{
  80. passwordInput:function(e){
  81. setTimeout(function(){vue.errors.password=''},10);
  82. if(e.key==='Enter'){
  83. loginSubmit()
  84. }
  85. },
  86. }
  87. }
  88. )
  89. function loginSubmit() {
  90. tempTip.setDuration(99999);
  91. tempTip.waitingTip('提交中');
  92. axios.post('{{ route('login') .'?rand='.microtime(true)}}',vue.inputting).then(function (response) {
  93. tempTip.setDuration(2000);
  94. tempTip.cancelWaitingTip();
  95. if(response.data.success!==true){
  96. if(response.data.errors){
  97. vue.errors=response.data.errors;
  98. return;
  99. }
  100. if(response.data.message){
  101. tempTip.show(response.data.message)
  102. return;
  103. }
  104. }else{
  105. tempTip.setDuration(99999);
  106. tempTip.waitingTip('页面跳转中');
  107. location=response.data.url;
  108. }
  109. }).catch(function(response){
  110. tempTip.setDuration(6000);
  111. tempTip.waitingTip('错误');
  112. console.log(response)
  113. alert('页面过期或网络异常,请在刷新后重新登录');
  114. window.location.reload();
  115. })
  116. }
  117. </script>
  118. @endsection