login.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div class="login-page" >
  3. <div class="title" >中德智慧教育培训系统登录</div>
  4. <div class="field" >
  5. <van-field class="field-item" maxlength="11" type="number" v-model="loginState.phone" placeholder="请输入手机号" />
  6. <van-field class="field-item" v-model="loginState.password" placeholder="请输入密码" />
  7. <div class="forget-password" @click="forgetPwd" >忘记密码</div>
  8. </div>
  9. <div class="btn" @click="handleLogin" >登录</div>
  10. </div>
  11. </template>
  12. <script setup >
  13. import { ref, onMounted } from 'vue'
  14. import { useUserStore } from '@/store'
  15. import { useDebounceFn } from 'vue-hooks-plus'
  16. import { useRouter } from 'vue-router'
  17. import { WxLogin, getQueryString } from '@/utils/wx'
  18. import { storeToRefs } from 'pinia'
  19. const userStore = useUserStore()
  20. const router = useRouter()
  21. const { userInfo } = storeToRefs(userStore)
  22. const { login } = userStore
  23. const loginState = ref({
  24. phone: '',
  25. password: ''
  26. })
  27. const { run } = useDebounceFn(() => login(loginState.value), { wait: 1000 })
  28. const handleLogin = () => run()
  29. const forgetPwd = () => {
  30. router.push({ path: '/forget-pwd' })
  31. }
  32. onMounted(() => {
  33. if (process.env.NODE_ENV === 'development') {
  34. } else {
  35. const code = getQueryString('code')
  36. if (!userInfo.token && !code) {
  37. WxLogin('/login')
  38. }
  39. }
  40. })
  41. </script>
  42. <style lang='less' scoped >
  43. .login-page {
  44. display: flex;
  45. flex-direction: column;
  46. justify-content: center;
  47. align-items: center;
  48. width: 100vw;
  49. height: 100vh;
  50. .title {
  51. font-size: 22px;
  52. font-weight: 600;
  53. }
  54. .field {
  55. margin: 40px 0;
  56. .field-item {
  57. height: 48px;
  58. border-radius: 40px;
  59. background-color: #f3f1f1;
  60. font-size: 18px;
  61. margin-bottom: 20px;
  62. display: flex;
  63. align-items: center;
  64. justify-content: flex-start;
  65. color: #000;
  66. /deep/ .van-field__control {
  67. // height: 60px;
  68. }
  69. }
  70. .forget-password {
  71. font-size: 14px;
  72. color: #6fa7f5;;
  73. text-align: right;
  74. }
  75. }
  76. .btn {
  77. width: 251px;
  78. height: 52px;
  79. background-color: #6fa7f5;
  80. display: flex;
  81. justify-content: center;
  82. align-items: center;
  83. border-radius: 40px;
  84. color: #fff;
  85. }
  86. }
  87. </style>