• 封装比较好的登录页面


    封装比较好的登录页面

    只在setup()函数中写流程,将逻辑代码抽离出来

    <template>
      <div class="wrapper">
        <img class="wrapper__img" src='http://www.dell-lee.com/imgs/vue3/user.png' />
        <div class="wrapper__input">
          <input
            class="wrapper__input__content"
            placeholder="用户名"
            v-model="username"
          />
        </div>
         <div class="wrapper__input">
          <input
            type="password"
            class="wrapper__input__content"
            placeholder="请输入密码"
            v-model="password"
            autocomplete="new-password"
          />
        </div>
        <div class="wrapper__login-button" @click="handleLogin">登陆</div>
        <div class="wrapper__login-link" @click="handleRegisterClick">立即注册</div>
        <Toast v-if="show" :message="toastMessage"/>
      </div>
    </template>
    
    <script>
    import { reactive, toRefs } from 'vue'
    import { useRouter } from 'vue-router'
    import { post } from '../../utils/request'
    import Toast, { useToastEffect } from '../../components/Toast'
    
    // 处理注册逻辑
    const useLoginEffect = (showToast) => {
      const router = useRouter()
      const data = reactive({ username: '', password: '' })
    
      const handleLogin = async () => {
        try {
          const result = await post('/api/user/login', {
            username: data.username,
            password: data.password
          })
          if (result?.errno === 0) {
            localStorage.isLogin = true
            router.push({ name: 'Home' })
          } else {
            showToast('登陆失败')
          }
        } catch (e) {
          showToast('请求失败')
        }
      }
    
      const { username, password } = toRefs(data)
      return { username, password, handleLogin}
    }
    
    // 处理注册跳转
    const useRegisterEffect = () => {
      const router = useRouter()
      const handleRegisterClick = () => {
        router.push({ name: 'Register' })
      }
      return { handleRegisterClick }
    }
    
    export default {
      name: 'Login',
      components: { Toast },
      // 职责就是告诉你,代码执行的一个流程
      setup () {
        const { show, toastMessage, showToast } = useToastEffect()
        const { username, password, handleLogin } = useLoginEffect(showToast)
        const { handleRegisterClick } = useRegisterEffect()
    
        return {
          username, password, show, toastMessage,
          handleLogin, handleRegisterClick,
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
  • 相关阅读:
    08_ue4进阶_开始结束暂停菜单等ui
    【实战】Spring Cloud Stream 3.1+整合Kafka
    基于java的企业信息网站发系统
    【JavaScript进阶之旅 ES6篇 第五章】解构赋值深入、隐式转换、函数参数解构、解构本质
    50个常用的Numpy函数解释,参数和使用示例
    2024/04/25
    算法、语言混编、分布式锁与分布式ID、IO模型
    任你五花八门预训练方法,我自监督学习依然能打!
    vue3常用的东西
    测试/开发程序员该不该跳槽?别忘了当初的梦想......
  • 原文地址:https://blog.csdn.net/Wu_whiteHyacinth/article/details/134484181