index.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <sign-layout class="user-login" title="账号登录">
  3. <el-form ref="formRef" :model="formData" :rules="formRules">
  4. <el-form-item prop="LoginID">
  5. <el-input placeholder="用户名/账号/手机号" v-model="formData.LoginID"></el-input>
  6. </el-form-item>
  7. <el-form-item prop="LoginPWD">
  8. <el-input type="password" placeholder="请输入您的登录密码" v-model="formData.LoginPWD">
  9. </el-input>
  10. </el-form-item>
  11. <!-- <el-form-item>
  12. <el-checkbox label="记住账号" v-model="remember"></el-checkbox>
  13. </el-form-item> -->
  14. <el-form-item>
  15. <el-button class="submit" type="primary" :loading="loading" @click="formSubmit">
  16. <span v-if="loading">正在登录</span>
  17. <span v-else>登录</span>
  18. </el-button>
  19. <!-- <el-button>注册</el-button> -->
  20. </el-form-item>
  21. </el-form>
  22. </sign-layout>
  23. </template>
  24. <script lang="ts" setup>
  25. import { shallowRef } from 'vue'
  26. import { useRoute, useRouter } from 'vue-router'
  27. import { ElMessage } from 'element-plus'
  28. import type { FormInstance, FormRules } from 'element-plus'
  29. import { ClientType } from '@/constants/client'
  30. import { useLogin } from '@/business/login'
  31. import { useMenuStore } from '@/stores'
  32. import SignLayout from '../components/layout/index.vue'
  33. const { formData, userLogin } = useLogin()
  34. const route = useRoute()
  35. const router = useRouter()
  36. const menuStore = useMenuStore()
  37. const formRef = shallowRef<FormInstance>()
  38. const loading = shallowRef(false)
  39. //const remember = shallowRef(false) // 记住账号
  40. const formRules: FormRules = {
  41. LoginID: [
  42. { required: true, max: 20, message: '请输入登录账号', trigger: 'blur' }
  43. ],
  44. LoginPWD: [
  45. { required: true, max: 16, message: '请输入登录密码', trigger: 'blur' }
  46. ]
  47. }
  48. const formSubmit = () => {
  49. formRef.value?.validate(async (valid) => {
  50. if (valid) {
  51. try {
  52. loading.value = true
  53. await userLogin(ClientType.Web)
  54. await menuStore.getUserMenuList()
  55. const redirect = route.query.redirect
  56. if (redirect) {
  57. router.replace(redirect.toString())
  58. } else {
  59. router.replace('/')
  60. }
  61. } catch (err) {
  62. loading.value = false
  63. ElMessage.error(err as string)
  64. }
  65. }
  66. })
  67. }
  68. </script>
  69. <style lang="less" scoped>
  70. @import './index.less';
  71. </style>