index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <sign-layout class="user-login" :title="t('auth.login.title')">
  3. <el-form ref="formRef" :model="formData" :rules="formRules">
  4. <el-form-item prop="accountCode">
  5. <el-input :placeholder="t('auth.login.accountCode')" v-model="formData.accountCode"></el-input>
  6. </el-form-item>
  7. <el-form-item prop="password">
  8. <el-input type="password" :placeholder="t('auth.login.password')" v-model="formData.password">
  9. </el-input>
  10. </el-form-item>
  11. <el-form-item prop="verifyCode">
  12. <el-input :placeholder="t('auth.login.verifyCode')" v-model="formData.verifyCode">
  13. <template #append>
  14. <img :src="verifyImage" />
  15. </template>
  16. </el-input>
  17. </el-form-item>
  18. <!-- <el-form-item>
  19. <el-checkbox label="记住账号" v-model="remember"></el-checkbox>
  20. </el-form-item> -->
  21. <el-form-item>
  22. <el-button class="submit" type="primary" :loading="loading" @click="formSubmit">
  23. <span v-if="loading">{{ t('auth.login.loading') }}</span>
  24. <span v-else>{{ t('operation.login') }}</span>
  25. </el-button>
  26. <!-- <el-button>注册</el-button> -->
  27. </el-form-item>
  28. </el-form>
  29. </sign-layout>
  30. </template>
  31. <script lang="ts" setup>
  32. import { shallowRef } from 'vue'
  33. import { useRoute, useRouter } from 'vue-router'
  34. import { ElMessage, FormInstance, FormRules } from 'element-plus'
  35. import { verifyCode } from '@/services/api/user'
  36. import { useLogin } from '@/business/login'
  37. import { useRouterStore, i18n } from '@/stores'
  38. import service from '@/services'
  39. import SignLayout from '../components/layout/index.vue'
  40. const { formData, userLogin } = useLogin()
  41. const route = useRoute()
  42. const router = useRouter()
  43. const menuStore = useRouterStore()
  44. const formRef = shallowRef<FormInstance>()
  45. const loading = shallowRef(false)
  46. //const remember = shallowRef(false) // 记住账号
  47. const verifyImage = shallowRef('') // 验证码图片
  48. const { global: { t } } = i18n
  49. const formRules: FormRules = {
  50. accountCode: [
  51. { required: true, max: 20, message: t('common.pleaseenter'), trigger: 'blur' }
  52. ],
  53. password: [
  54. { required: true, max: 32, message: t('common.pleaseenter'), trigger: 'blur' }
  55. ]
  56. }
  57. const formSubmit = () => {
  58. loading.value = true
  59. formRef.value?.validate(async (valid) => {
  60. if (valid) {
  61. try {
  62. await userLogin()
  63. await menuStore.getUserRoutes()
  64. const redirect = route.query.redirect
  65. if (redirect) {
  66. router.replace(redirect.toString())
  67. } else {
  68. router.replace('/')
  69. }
  70. } catch (err) {
  71. loading.value = false
  72. ElMessage.error(err as string)
  73. }
  74. }
  75. })
  76. }
  77. service.onReady().then(() => {
  78. verifyCode().then(({ data }) => {
  79. formData.key = data.key
  80. verifyImage.value = data.img
  81. })
  82. })
  83. </script>
  84. <style lang="less" scoped>
  85. @import './index.less';
  86. </style>