LoginFunc.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import auth from '@/api/auth'
  2. import utils from '@/utils/utils'
  3. import router from '../../router/index'
  4. import Vue from 'vue'
  5. // 登录表单数据信息
  6. const loginForm = {
  7. username: '',
  8. password: '',
  9. // 验证码
  10. code: ''
  11. }
  12. // 自定义验证码校验规则
  13. const validateCode = (rule, value, callback) => {
  14. // 验证码不区分大小写
  15. if (value.toString().toLocaleLowerCase() !== code.toString().toLocaleLowerCase()) {
  16. callback(new Error('验证码输入错误'))
  17. } else {
  18. callback()
  19. }
  20. }
  21. // 登录表单的校验规则
  22. const loginFormRules = {
  23. username: [
  24. {
  25. required: true,
  26. message: '请输入账号',
  27. trigger: 'blur'
  28. }
  29. ],
  30. password: [
  31. {
  32. required: true,
  33. message: '请输入密码',
  34. trigger: 'blur'
  35. },
  36. {
  37. min: 5,
  38. message: '密码不能小于5个字符',
  39. trigger: 'blur'
  40. }
  41. ],
  42. code: [
  43. {
  44. required: true,
  45. message: '请输入验证码',
  46. trigger: 'blur'
  47. },
  48. {
  49. validator: validateCode,
  50. trigger: 'blur'
  51. }
  52. ]
  53. }
  54. // 后台验证码id
  55. let codeId
  56. // 后台的验证码
  57. let code
  58. // 获取后台验证码
  59. const getCode = () => {
  60. auth.getCode(codeId).then(resp => {
  61. code = resp.data
  62. })
  63. }
  64. // 点击图片刷新验证码
  65. const changeCode = () => {
  66. const codeImg = document.querySelector('#code')
  67. codeId = utils.getRandomId()
  68. codeImg.src = `${process.env.VUE_APP_CAPTCHA_URL}/util/getCodeImg?id=` + codeId
  69. codeImg.onload = () => getCode()
  70. }
  71. const toRegisterPage = () => {
  72. router.push('/register')
  73. }
  74. // 登录
  75. const login = (formEl) => {
  76. utils.validFormAndInvoke(formEl, () => {
  77. auth.login(loginForm).then(resp => {
  78. if (resp.code === 200) {
  79. localStorage.setItem('authorization', resp.data)
  80. Vue.prototype.$notify({
  81. title: 'Tips',
  82. message: '登陆成功^_^',
  83. type: 'success',
  84. duration: 2000
  85. })
  86. router.push('/index')
  87. }
  88. }).catch(err => {
  89. console.log(err)
  90. // 请求出错
  91. changeCode()
  92. getCode()
  93. Vue.prototype.$notify({
  94. title: 'Tips',
  95. message: err.response.data.errMsg,
  96. type: 'error',
  97. duration: 2000
  98. })
  99. })
  100. })
  101. }
  102. export default {
  103. loginForm,
  104. loginFormRules,
  105. code,
  106. getCode,
  107. changeCode,
  108. toRegisterPage,
  109. login
  110. }