login.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <template>
  2. <div class="login">
  3. <!-- 登录表单 -->
  4. <el-form class="form" :rules="loginRules" ref="formLogin" :model="formLogin" label-width="0">
  5. <el-form-item label="" prop="mobile">
  6. <el-input v-model="formLogin.mobile" placeholder="手机号">
  7. <template slot="prepend">+86</template>
  8. </el-input>
  9. </el-form-item>
  10. <el-form-item label="" prop="code">
  11. <el-input v-model="formLogin.code" placeholder="验证码">
  12. <template slot="append">
  13. <el-button :disabled="codeTime > -1" @click="getCode" style="width: 112px;">
  14. {{ codeTime > -1 ? `${codeTime}s` : '获取验证码' }}
  15. </el-button>
  16. </template>
  17. </el-input>
  18. </el-form-item>
  19. <!-- <el-form-item label="" prop="password">
  20. <el-input v-model="formLogin.password" placeholder="密码" show-password></el-input>
  21. </el-form-item> -->
  22. <!-- <el-form-item label="">
  23. <span class="textButton">忘记密码</span>
  24. </el-form-item> -->
  25. <el-form-item label="">
  26. <button
  27. class="formButton text-white text-lg mr-3 cursor-pointer px-3 py-2 rounded-md w-full"
  28. style="background-color: var(--bg-color1);"
  29. @click.prevent="clickLogin"
  30. >
  31. 登录
  32. </button>
  33. </el-form-item>
  34. <el-form-item label="" prop="checked">
  35. <el-checkbox class="checkbox" v-model="checked"></el-checkbox>
  36. 勾选即代表您已同意<span class="text-blue-500">《用户协议》</span>和<span class="text-blue-500">《隐私政策》</span>
  37. </el-form-item>
  38. <!-- <el-form-item label="">
  39. <span style="font-size: 1rem;">
  40. 还没有账号吗?
  41. <span class="textButton" @click="popupType = 'register'">注册</span>
  42. </span>
  43. </el-form-item> -->
  44. </el-form>
  45. </div>
  46. </template>
  47. <script>
  48. import { getSendVerificationCode, phoneLogin } from '@/api/login'
  49. import { getToken, setToken, removeToken } from '@/utils/auth'
  50. export default {
  51. data() {
  52. return {
  53. codeTime: -1,
  54. codeInterval: null,
  55. checked: true,
  56. formLogin: {
  57. account: null,
  58. password: null,
  59. },
  60. loginRules: {
  61. mobile: [
  62. { required: true, message: '请输入手机号', trigger: 'blur' },
  63. { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' },
  64. ],
  65. code: [
  66. { required: true, message: '请输入验证码', trigger: 'blur' },
  67. // { pattern: /^[0-9]{6}$/, message: '请输入正确的验证码', trigger: 'blur' },
  68. ],
  69. password: [
  70. { required: true, message: '请输入用户密码', trigger: 'blur' },
  71. ],
  72. },
  73. }
  74. },
  75. computed: {
  76. showPopup() {
  77. return this.$store.state.app.showPopup
  78. }
  79. },
  80. watch: {
  81. showPopup(value) {
  82. if (value) {
  83. this.$nextTick(() =>{
  84. this.$refs.formLogin.resetFields()
  85. })
  86. }
  87. }
  88. },
  89. mounted() {
  90. },
  91. methods: {
  92. getCode() {
  93. this.codeTime = 60
  94. this.codeInterval = setInterval(() => {
  95. this.codeTime = this.codeTime - 1
  96. if (this.codeTime < 0) {
  97. clearInterval(this.codeInterval)
  98. }
  99. }, 1000)
  100. let params = {
  101. mobile: this.formLogin.mobile
  102. }
  103. getSendVerificationCode(params).then(res =>{
  104. if (res.code === 200) {
  105. this.$message({
  106. message: '验证码发送成功',
  107. type: 'success'
  108. });
  109. } else {
  110. clearInterval(this.codeInterval)
  111. this.codeTime = -1
  112. this.$message({
  113. message: res.msg,
  114. type: 'error'
  115. });
  116. }
  117. })
  118. .catch((err) => {
  119. clearInterval(this.codeInterval)
  120. this.codeTime = -1
  121. this.$message({
  122. message: res.msg,
  123. type: 'error'
  124. });
  125. })
  126. },
  127. clickLogin() {
  128. this.$refs.formLogin.validate((valid) => {
  129. if (valid) {
  130. if (!this.checked) {
  131. this.$confirm('请阅读并接受用户协议和隐私政策', '提示', {
  132. confirmButtonText: '确定',
  133. cancelButtonText: '取消',
  134. type: 'warning'
  135. }).then(() => {})
  136. return
  137. }
  138. phoneLogin(this.formLogin).then((res) => {
  139. console.log(res, '手机登录成功');
  140. setToken(res.data.userToken)
  141. this.$store.commit('SET_TOKEN', res.data.userToken)
  142. this.$store.commit('SET_USERID', res.data.id)
  143. console.log(this.$store.state.user.userId, 'userId>>>>');
  144. this.$message({
  145. message: '登录成功',
  146. type: 'success'
  147. });
  148. this.$store.commit('app/TOGGLE_POPUP', false)
  149. this.$router.push({ path: '/' })
  150. this.$store.dispatch("GetInfo")
  151. })
  152. // this.$store.dispatch('Login', this.formLogin).then(() => {
  153. // this.$message({
  154. // message: '登录成功',
  155. // type: 'success'
  156. // });
  157. // this.showPopup = false
  158. // })
  159. }
  160. })
  161. },
  162. }
  163. }
  164. </script>
  165. <style scoped>
  166. .textButton {
  167. font-size: 1rem;
  168. color: var(--bg-color1);
  169. cursor: pointer;
  170. }
  171. .formButton {
  172. letter-spacing: 4px;
  173. }
  174. .form >>> .el-input__inner {
  175. font-size: 1rem;
  176. padding: 5px 15px;
  177. height: 40px;
  178. }
  179. </style>