登录页开发

然后开发登录页(login 页面),页面 UI 效果图如图12-5所示。

image 2024 02 26 17 22 08 419
Figure 1. 图12-5 登录页效果图

在 view 下新建 login.vue 组件,其核心代码如下:

<div class="login-container">
    <div class="login-content">
      <div class="login-logo"></div>
      <div class="login-title">用户登陆</div>
      <div class="input-wrap">
        <div><input class="login-input" type="text" placeholder="手机号 / 邮箱" v-model="loginInfo.username"/></div>
        <div><input class="login-input" type="password" placeholder="密码" v-model="loginInfo.password"/></div>
        <div class="login-btn" @click="login">登陆</div>
      </div>
      <div class="error-tips" v-if="loginInfo.errorInfo">用户名或密码错误</div>
      <div class="tips">lvming/abc123</div>
    </div>
</div>
  setup() {
    // 用户数据,响应式数据
    let loginInfo = reactive({
      username: '',
      password: '',
      errorInfo: false
    })
    // 模拟用户信息
    const userInfo = {
      nickname: '吕小鸣',
      age: 30,
      username: '',
      avatar: 'https://qiniu.nihaoshijie.com.cn/images/image-1559844211742.jpeg'
    }

    const store = Vuex.useStore()
    const {proxy} = getCurrentInstance()
    // 登录按钮单击回调
    const login = () => {
      // 验证用户名密码
      if (loginInfo.username == 'lvming' && loginInfo.password == 'abc123') {
        store.commit('setUser', userInfo)
        loginInfo.errorInfo = false
        if (proxy.prevRoute) { // 跳转到登录前的页面
          proxy.$router.push(proxy.prevRoute)
        }
      } else {
        loginInfo.errorInfo = true
      }
    }


    return {
      loginInfo,
      login
    }
  },
  beforeRouteEnter(to, from, next) {
    next(vm => {
      // 获取vm this得到上一个页面路由from
      vm.prevRoute = from;
    })
  }

其主要业务逻辑如下:

  • 利用 input 和 v-model 指令渲染登录框界面。

  • 在登录验证成功后,将用户信息设置在 Vuex 中。

  • 跳转回登录前的页面。