index.vue 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div class="account-layout">
  3. <h1 class="common-title">{{ $t('login.userLogin') }}</h1>
  4. <div class="login-con">
  5. <div class="input-con" :class="{inputActive:inputActive==='text'}">
  6. <!-- <img :src="`${$cdn}images/icon/icon-phone@2x.png`" alt=""> -->
  7. <input v-model="phone" oninput="value=value" @blur="inputActive=''" @focus="inputActive='text'" type="text" :placeholder="$t(isInternational ? 'login.emailPlaceholder' : 'login.phonePlaceholder')">
  8. </div>
  9. <div class="input-con" :class="{inputActive:inputActive==='password'}">
  10. <!-- <img :src="`${$cdn}images/icon/icon-password@2x.png`" alt=""> -->
  11. <input v-model="password" @focus="inputActive='password'" @blur="inputActive=''" maxlength='16' type="password" :placeholder="$t('login.passwordPlaceholder')">
  12. </div>
  13. <div class="forget" v-if="!isInternational">
  14. <!-- <router-link :to="{path:'/forget'}">{{langLogin.forget}}</router-link> -->
  15. <span></span>
  16. <router-link :to="{path:'/codeLogin'}">{{langLogin.codeLogin}}</router-link>
  17. </div>
  18. <div class="btns" @click="login">{{langLogin.login}}</div>
  19. <div class="to-register">
  20. <div class="re-con">
  21. <router-link :to="{path:'/forget'}">{{$t('login.forgetPassword')}}</router-link><router-link :to="{path: isInternational ? '/mailRegister' : '/register'}">{{$t('login.registerAccount')}}</router-link>
  22. </div>
  23. </div>
  24. </div>
  25. </div>
  26. </template>
  27. <script>
  28. import {mapState} from 'vuex'
  29. import { Base64 } from 'js-base64'
  30. import {encodeStr} from '@/util/index.js'
  31. export default {
  32. computed: {
  33. ...mapState({
  34. token: state => state.user.token,
  35. langToast: state => state.language.home.toast,
  36. language: state => state.language.current,
  37. langLogin: state => state.language.home.home.loginAside,
  38. isInternational: state => state.isInternational
  39. })
  40. },
  41. data () {
  42. return {
  43. inputActive: '',
  44. phone: '',
  45. password: ''
  46. }
  47. },
  48. methods: {
  49. async login () {
  50. let check = value => {
  51. for (let i = 0, len = value.length; i < len; i++) {
  52. if (!value[i].val) {
  53. return this.$toast.show('warn', (this.language === 'en' ? value[i].En : value[i].name) + this.langToast['7'])
  54. }
  55. }
  56. return true
  57. }
  58. let checkStr = [
  59. {
  60. name: this.isInternational ? '邮箱地址' : '手机号码',
  61. En: this.isInternational ? 'E-mail' : 'Phone number',
  62. val: this.phone
  63. },
  64. {
  65. name: '密码',
  66. En: 'Password',
  67. val: this.password
  68. }
  69. ]
  70. if (!check(checkStr)) {
  71. return
  72. }
  73. let params = {
  74. phoneNum: this.phone,
  75. password: encodeStr(Base64.encode(this.password))
  76. }
  77. await this.$store.dispatch('login', params)
  78. if (this.token) {
  79. this.$router.replace({path: '/information'})
  80. }
  81. }
  82. }
  83. }
  84. </script>
  85. <style lang="scss" scoped>
  86. @import './style.scss';
  87. </style>