【Vue版本 - 前端实践系列之九】登录注册界面千篇一律?教你做个炫酷的!

简介: 【Vue版本 - 前端实践系列之九】登录注册界面千篇一律?教你做个炫酷的!


html部分
<template>
  <div class="login-wrapper">
    <div :class="['login-container', type == 'login' ? 'active' : '']">
      <div class="switch-wrapper row aCenter jCenter">
        <div class="btn-wrapper row aCenter jCenter">
          <div v-if="type == 'login'" class="txt row aCenter jCenter" @click="type = 'register'">去注册</div>
          <div v-else class="txt row aCenter jCenter" @click="type ='login'">去登录</div>
        </div>
      </div>
      <div :class="['outerBox', type == 'login' ? 'active' : '']">
        <div class="container row aCenter jCenter">
          <div class="login" v-show="type == 'login'">
            <el-form :model="loginUser" status-icon :rules="loginRules" ref="loginForm">
              <img class='ld' src="@/assets/ld.png" />
              <div class="title">登录</div>
              <el-form-item prop="username">
                <el-input type='text' prefix-icon="el-icon-user" placeholder="请输入账号 / 手机号 / 邮箱" v-model="loginUser.username" />
              </el-form-item>
              <el-form-item prop="password">
                <el-input type='password' prefix-icon="el-icon-view" placeholder="请输入密码" v-model="loginUser.password" />
              </el-form-item>
              <el-form-item>
                <el-button type="primary" class="btn-login" @click="login">登录</el-button>
              </el-form-item>
              <!-- <div class='w100 row aCenter jSb'>
                <el-button type="text" class='forgetPassword' @click="onOpenForgetPassword">忘记密码</el-button>
                <el-button type="text" class='register' @click="onOpenRegister">注册账号</el-button>
              </div> -->
            </el-form>
          </div>
          <div class="register" v-show="type == 'register'">
            <el-form :model="registerUser" status-icon :rules="registerRules" ref="registerForm">
              <img class="ld" src="@/assets/ld.png" />
              <div class="title">注册</div>
              <el-form-item prop="username">
                <el-input type='text' prefix-icon="el-icon-user" placeholder="请输入账号 / 手机号 / 邮箱" v-model="registerUser.username" />
              </el-form-item>
              <el-form-item prop="email">
                <el-input type='text' prefix-icon="el-icon-message" placeholder="请输入邮箱地址" v-model="registerUser.email" />
              </el-form-item>
              <el-form-item prop="mobile">
                <el-input type='number' prefix-icon="el-icon-mobile" placeholder="请输入手机号码" v-model="registerUser.mobile" />
              </el-form-item>
              <el-form-item prop="password">
                <el-input type='password' prefix-icon="el-icon-view" placeholder="请输入密码" v-model="registerUser.password" />
              </el-form-item>
              <el-form-item>
                <el-button type="primary" class="btn-login" @click="register">确认注册</el-button>
              </el-form-item>
              <!-- <div class='w100 row aCenter jSb'>
                <el-button type="text" class='forgetPassword' @click="onOpenLogin">返回登录</el-button>
              </div> -->
            </el-form>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
复制代码


JS部分
<script>
import xxx from '@/api/xxx'
export default {
  name: 'login',
  data() {
    return {
      type: 'login',    // 类型判断
      loginUser: {
        username: '',
        password: ''
      },
      loginRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' }
        ]
      },
      registerUser: {
        username: '',
        password: '',
        email: '',
        mobile: ''
      },
      registerRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入邮箱地址', trigger: 'blur' }
        ],
        mobile: [
          { required: true, message: '请输入手机号码', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    login() {
          this.$refs.loginForm.validate( async valid => {
              if(valid) {
                    await xxx.login(this.loginUser).then(async r => {
                        console.log('成功了')
                    }).catch(e => {
                        console.log(e)
                        this.Toast(2, '登录失败,请稍后重试')
                        return false
                    })
              } else {
                return false
              }
          })
      },
    register() {
          this.$refs.registerForm.validate(async valid => {
              if(valid) {
                    await xxx.register(this.registerUser).then(r => {
                        console.log('成功了')
                    }).catch(e => {
      console.log(e)
                        return false
                    })
              } else {
                return false
              }
          })
      },
  }
}
</script>
复制代码


css部分
<style scoped>
.login-wrapper{background-color: #ededed;display: flex;width: 100vw;height: 100vh;margin: auto;}
.login-container{background-color: #fff;position: relative;width: 1000px;height: 600px;margin: auto;overflow: hidden;border-radius: 5px;box-shadow: 0 0 10px 5px #ddd;}
.switch-wrapper{position: absolute;z-index: 99;left: 0;overflow: hidden;width: 32%;height: 100%;transition: transform 1s ease-in-out;}
.switch-wrapper::after {content: '';display: block;background-image: url('../../assets/picture.jpg');background-size: 1000px 550px;background-position: top left;width: 100%;height: 100%;overflow: hidden;transition: all 1s ease-in-out;}
.active .switch-wrapper {transform: translateX(calc(1000px - 100%));}
.active .switch-wrapper::after {background-position: top right;}
.txt{width: 100%;height: 100%;transition: all 1s ease-in-out;}
.top-wrapper{position: absolute;width: 260px;height: 168px;top: 50px;background-color: rgba(255, 255, 255,.7);padding: 10px;border-radius: 5px;}
.btn-wrapper{position: absolute;width: 100px;height: 36px;color: #fffffe;background-color: #6689e2;font-size: 15px;border-radius: 30px;cursor: pointer;flex-wrap: wrap;overflow: hidden;}
.outerBox {position: absolute;z-index: 3;left: 32%;overflow: hidden;width: 68%;height: 100%;transition: all 1s ease-in-out;}
.container {width: 100%;height: 100%;background-color: #fffffe;}
.active .outerBox {transform: translateX(calc(-1000px + 100%));}
.ld{width: 200px;height: 40px;position: absolute;right: 16px;top: 16px;}
.title{font-size: 36px;line-height: 1.5;text-align: center;margin-bottom: 30px;color: #666;}
.btn-login{width: 100%;}
.row{display: flex;display: -webkit-flex;flex-direction: row;}
.column{display: flex;display: -webkit-flex;flex-direction: column;}
.aCenter{align-items: center;}
.jCenter{justify-content: center;}
</style>


相关文章
|
9月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
367 5
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
745 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
551 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
686 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
995 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
1002 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
723 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
643 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
554 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JSON 前端开发 数据可视化
前端开发者狂喜!30K star开源组件库,界面美观度/开发速度双碾压!
嗨,大家好,我是小华同学。Layui 是一款开源前端 UI 组件库,具有极简设计、强大功能和卓越性能,支持布局、表单、表格、弹层等六大模块,组件高度可定制。它无需复杂构建工具,直接面向浏览器开发,极大提升开发效率与界面美观度。适合新手和老手,快来试试吧!
857 0

热门文章

最新文章