Login.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <script setup lang="ts">
  2. import { reactive, ref } from 'vue'
  3. import type { FormInstance, FormRules } from 'element-plus'
  4. import { User, View, Lock } from '@element-plus/icons-vue'
  5. const ruleFormRef = ref<FormInstance>()
  6. const ruleForm = reactive({
  7. username: '',
  8. password: ''
  9. })
  10. const validatePass = (rule: any, value: any, callback: any) => {
  11. if (value === '') {
  12. callback(new Error('请输入密码'))
  13. } else {
  14. callback()
  15. }
  16. }
  17. const rules = reactive<FormRules>({
  18. username: [{ required: true, message: '请输入用户账号', trigger: 'blur' }],
  19. password: [{ required: true, validator: validatePass, trigger: 'blur' }],
  20. })
  21. const submitForm = (formEl: FormInstance | undefined) => {
  22. if (!formEl) return
  23. formEl.validate((valid) => {
  24. if (valid) {
  25. console.log(ruleForm);
  26. } else {
  27. console.log('error submit!')
  28. return false
  29. }
  30. })
  31. }
  32. let passType = ref('password')
  33. const changeType = ()=>{
  34. passType.value = passType.value === 'password'?'text':'password'
  35. }
  36. </script>
  37. <template>
  38. <div class="login">
  39. <div class="content">
  40. <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules">
  41. <el-form-item label="账号:" prop="username">
  42. <el-input v-model="ruleForm.username" type="text" :prefix-icon="User" />
  43. </el-form-item>
  44. <el-form-item label="密码:" prop="password">
  45. <el-input v-model="ruleForm.password" :type="passType" :prefix-icon="Lock" autocomplete="off">
  46. <template #suffix>
  47. <span class="view">
  48. <el-icon class="el-input__icon" @click="changeType">
  49. <View />
  50. </el-icon>
  51. </span>
  52. </template>
  53. </el-input>
  54. </el-form-item>
  55. <el-form-item>
  56. <el-button class="submit" type="primary" @click="submitForm(ruleFormRef)">登录</el-button>
  57. </el-form-item>
  58. </el-form>
  59. </div>
  60. </div>
  61. </template>
  62. <style scoped lang="scss">
  63. @import './login.scss'
  64. </style>