vue3页面内容切换(类似登录、注册内容切换)

news2024/11/25 1:04:41

一、内容描述

        页面有俩块内容,分别是验证码登录页面内容,账号密码登录页面内容。有俩种处理方式,一个是写俩个页面跳转使用,还有一种是一个页面俩个内容,切换的只是不同的内容,相同的内容保留。一般都是选择后者。

 二、基本思路

将标题以数组的方式循环渲染出来,这样我就可以拿到对应的index值,后面有用。

const loginitems = ref([
  {
    id: 1,
    text: "验证码",
  },
  {
    id: 2,
    text: "账号密码",
  },
]);
<div
            class="login-item"
            v-for="(item, index) in loginitems"
            :key="item.id"
            :class="current === index ? 'move' : ''"
            @click="change(index)"
          >
            {{ item.text }}
          </div>

用一个标识标记当前选中的是哪个,默认是第一个。

// 标识是哪个登录
const current = ref(0);

内容区域根据标识的值显示对应内容就行了!

选中样式使用动态绑定,判断当前的标记值current和index是否一样。 一样绑定上去,使用三元运算符判断就行了。

:class="current === index ? 'move' : ''"
.move {
  color: #f5b90f;
  padding-bottom: 5px;
  font-weight: 600;
  border-bottom: 2px solid #f5b90f;
}

点击某一项的时候,根据点击事件修改current的值。

// 切换验证码登录和账号密码登录
const change = (index) => {
  current.value = index;
};

不算很难,且容易理解!

三、完整示例代码

<template>
  <!-- 登录页面 -->
  <div class="container">
    <div class="main">
      <div class="head">
        <img src="../src/assets/static/image/demo.png" alt="" />
        <div class="title">智慧物业管理平台</div>
      </div>
      <!-- 登录内容区域 -->
      <div class="login">
        <div class="login-options">
          <div
            class="login-item"
            v-for="(item, index) in loginitems"
            :key="item.id"
            :class="current === index ? 'move' : ''"
            @click="change(index)"
          >
            {{ item.text }}
          </div>
        </div>
        <div class="con">
          <div class="con-item" v-if="current == 0">
            <div class="input-items">
              <input
                type="text"
                v-model="phonevalue"
                placeholder="输入手机号"
              />
            </div>
            <div class="input-items">
              <input type="text" v-model="codevalue" placeholder="输入验证码" />
              <div class="getcode" @click="getcode">
                <p v-if="isok == 1">获取验证码</p>
                <p v-else>{{ countTime }}</p>
              </div>
            </div>
            <div class="login-btn" @click="login">登录</div>
          </div>
          <div class="con-item" v-if="current == 1">
            <div class="input-items">
              <input
                type="text"
                v-model="phonevalue"
                placeholder="输入手机号"
              />
            </div>
            <el-input
              v-model="passwordinput"
              style="height: 41px; border: 0; outline: none"
              type="password"
              placeholder="输入密码"
              show-password
            />
            <div class="reset" @click="gotoforgetPassword">重置密码></div>
            <div class="login-btn" @click="login">登录</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { useRouter, useRoute } from "vue-router";
// 登录方式
const loginitems = ref([
  {
    id: 1,
    text: "验证码",
  },
  {
    id: 2,
    text: "账号密码",
  },
]);
const countTime = ref(60);
const isok = ref(1);
const phonevalue = ref("");
const codevalue = ref("");
const passwordinput = ref("");

const router = useRouter();

// 获取验证码倒计时
const getcode = () => {
  isok.value = 0;
  var Timer = setInterval(() => {
    countTime.value--;
    if (countTime.value <= 0) {
      clearInterval(Timer);
      isok.value = 1;
      countTime.value = 60;
    }
  }, 1000);
};
// 标识是哪个登录
const current = ref(0);

// 切换验证码登录和账号密码登录
const change = (index) => {
  current.value = index;
};
// 忘记密码按钮
const gotoforgetPassword = () => {
  router.push({
    path: "/forgetPassword",
  });
};
// 登录进去首页
const login = () => {
  router.push({
    path: "/notice",
  });
};
</script>

<style scoped>
.container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}
.main {
  display: flex;
  align-items: center;
  flex-direction: column;
}
.head {
  display: flex;
  align-items: center;
  flex-direction: column;
}
.head .title {
  font-size: 22px;
  font-weight: 600;
}
.head img {
  width: 300px;
  height: 200px;
}
.move {
  color: #f5b90f;
  padding-bottom: 5px;
  font-weight: 600;
  border-bottom: 2px solid #f5b90f;
}
.login-options {
  margin: 20px 0 10px 0;
  display: flex;
  align-items: center;
}
.login {
  width: 300px;
  display: flex;
  flex-direction: column;
}
.login-item {
  box-sizing: border-box;
  padding-bottom: 5px;
  margin-right: 10px;
}
.input-items {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 5px;
  height: 40px;
  margin: 10px 0;
}
input {
  padding-left: 10px;
  outline: none;
  padding-right: 10px;
  border: 0;
  font-size: 14px;
}
.getcode {
  margin-right: 5px;
}
.con-item {
  position: relative;
}
.getcode p {
  width: 80px;
  height: 25px;
  text-align: center;
  background-color: #f5b90f;
  color: #fff;
  font-size: 12px;
  line-height: 25px;
  border-radius: 5px;
  cursor: pointer;
}
.login-btn {
  width: 100%;
  height: 30px;
  border-radius: 5px;
  text-align: center;
  line-height: 30px;
  color: #fff;
  margin: 45px 0;
  background-color: #f5b90f;
  cursor: pointer;
}
.reset {
  position: absolute;
  right: 0;
  color: #f5b90f;
  font-size: 12px;
  margin: 10px 0;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14 程序地址空间

背景 kernel 2.6.32 32位平台 空间布局图 如何理解地址划分 地址划分&#xff0c;本质是调整地址空间的定义start和end&#xff0c;内存中定义了管理每个区域范围的结构体&#xff0c;叫mm_struct&#xff0c;每个进程都有一个这个结构体指针变量 验证上面划分的结构&#…

QCustomPlot 一个X轴多个Y轴

文章目录 大致效果如下&#xff1a; 相关代码如下&#xff1a; centerWidgetLayout->addLayout(hboxLayout,1);customplot new QCustomPlot(centerWidget);centerWidgetLayout->addWidget(customplot,100);int xPointNum 1300 ;customplot->plotLayout()->clear…

鸿蒙Harmony应用开发—ArkTS声明式开发(手势处理:绑定手势方法)

为组件绑定不同类型的手势事件&#xff0c;并设置事件的响应方法。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 绑定手势识别 通过如下属性给组件绑定手势识别&#xff0c;手势识别成功后可以通过事…

Docker容器数据卷使用

创建容器 将本地的/home/ceshi和容器的/home目录进行一个挂载,文件内容会进行同步 -v参数就是进行一个卷的挂载 主机路径:容器内的路径 [rootwq ~]# cd /home/ [rootwq home]# ll total 8 drwx------ 3 admin admin 4096 Dec 29 10:16 admin drwx------ 2 www www 4096…

如何使用DS file+cpolar内网穿透实现远程访问本地群晖NAS传输文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

【C++】类和对象(中)一篇文章带你学会六大默认成员函数

目录 一、类的6个默认成员函数二、 构造函数2.1 概念2.2 特征 三、析构函数3.1 概念3.2 特性 四、拷贝构造函数4.1 概念4.2 特征 五、赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 前置和后置重载 六、日期类的实现七、const成员八、取地址及const取地址操作符重载结尾 …

新品发布会媒体邀请,邀约记者现场报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 新品发布会媒体邀请及记者现场报道邀约流程&#xff1a; 一、策划准备 明确新品发布会时间、地点和主题。 制定媒体邀请计划&#xff0c;确定目标媒体。 二、邀请媒体 向目标媒体发送…

关于制作Python游戏全过程(汇总1)

目录 前言: 1.plane_sprites模块: 1.1导入模块: 1.1.1pygame&#xff1a;一个用于创建游戏的Python库。 1.1.2random&#xff1a;Python标准库中的一个模块&#xff0c;用于生成随机数。 1.2定义事件代号: 1.2.1ENEMY_EVENT&#xff1a;自定义的敌机出场事件代号&#xf…

TypeScript 哈希表

文章目录 概念哈希化冲突链地址法开放地址法 装填因子&#xff08;loadFactor&#xff09;效率对比哈希函数字符串转数字算法 —— 幂的连乘压缩数字范围 —— 取余优秀哈希算法的优点快速计算&#xff1a;霍纳法则均匀分布 —— 质数Java 中的 HashMapN次幂的底数 实现哈希函数…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

NineData云原生智能数据管理平台新功能发布|2024年2月版

SQL开发&#xff1a;全功能支持百度云 GaiaDB 介绍&#xff1a;支持通过 SQL 开发所有能力管理 GaiaDB 实例。更多信息&#xff0c;请参见&#xff1a;真香&#xff01;NineData SQL 开发全面适配 GaiaDB 场景&#xff1a;企业使用 GaiaDB 管理企业数据&#xff0c;需要一个一…

【EI会议征稿通知】第三届信息经济、数据建模与云计算国际学术会议 (ICIDC 2024)

第三届信息经济、数据建模与云计算国际学术会议 2024 3rd International Conference on Information Economy, Data Modeling and Cloud Computing&#xff08;ICIDC 2024&#xff09; 第三届信息经济、数据建模与云计算国际学术会议(ICIDC 2024)定于2024年6月21-23日在中国…

javaWebssh药品进销存信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh药品进销存信息管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOM…

YOLOv8-Openvino-ByteTrack【CPU】

纯检测如下&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv8和YOLOv9代码内容基本一致&#xff01; 全部代码Github&…

[数据集][图像分类]芒果叶病害分类数据集4000张5类别

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;4000 分类类别数&#xff1a;8 类别名称:["anthracnose","bacterial_canker","cutting_weevil","die_back",&…

EasyRecovery易恢复14最新版Win电脑安装包下载

EasyRecovery易恢复是一款数据恢复软件。它专门用于恢复因各种情况&#xff08;如误删除、格式化、病毒攻击、分区丢失等&#xff09;而丢失的数据。这款软件支持恢复多种类型的文件&#xff0c;包括文档、图片、视频、音频等&#xff0c;并且可以从各种存储设备&#xff08;如…

【YOLO v5 v7 v8 v9小目标改进】HTA:自注意力 + 通道注意力 + 重叠交叉注意力,提高细节识别、颜色表达、边缘清晰度

HTA&#xff1a;自注意力 通道注意力 重叠交叉注意力&#xff0c;提高细节识别、颜色表达、边缘清晰度 提出背景框架浅层特征提取深层特征提取图像重建混合注意力块&#xff08;HAB&#xff09;重叠交叉注意力块&#xff08;OCAB&#xff09;同任务预训练效果 小目标涨点YOLO…

06 - 镜像管理

1 了解镜像 Docker镜像是一个特殊的文件系统&#xff0c;除了提供容器运行时所需的程序、库、资源、配置等文件外&#xff0c;还包含了一些为运行时准备的一些配置参数&#xff08;如匿名卷、环境变量、用户等&#xff09;。 但注意&#xff0c; 镜像不包含任何动态数据&#…

sql多表运用 12.3

肖SIR__数据库之多表运用__12.3 数据库之多表运用 CREATE table dept(dept1 VARCHAR(6),dept_name VARCHAR(20)) default charsetutf8; INSERT into dept VALUES (101,财务); INSERT into dept VALUES (102,销售); INSERT into dept VALUES (103,IT技术); INSERT into dep…

【已解决】conda环境下ROS2 colcon build编译选择特定python解释器

目录 1 问题背景2 问题探索3 问题解决4 告别Bug 1 问题背景 环境&#xff1a; ROS2 HumbleUbuntu22.04 现象&#xff1a;运行colcon build后由cpp编译生成的python导出库(如自定义消息、服务等)&#xff0c;其版本与由python setup.py安装的python库版本不一致&#xff0c;导致…