案例14-课程推送页面逻辑整理--vue

news2024/11/25 5:39:11

目录

  • 一级目录
    • 二级目录
      • 三级目录
    • 一、背景介绍
    • 二、问题分析
      • 问题1:逻辑边界不清晰,封装意识缺乏问题
    • 问题2:展示效果上的问题
    • 三、解决过程
      • 问题一 代码结构混乱问题解决
      • 问题二 代码结构混乱问题解决
      • 问题三 展示效果上的细微问题
    • 四、总结

一级目录

二级目录

三级目录

一、背景介绍

写此篇文章为了通过优化前端代码,解决前端代码结构混乱,逻辑不清晰,页面细节问题来帮助大家写出的代码更规范。
项目开发过程中,前端出现以下几类问题:

1、代码结构混乱
2、代码逻辑不清晰
3、页面细节问题

二、问题分析

源码:

<template>

<top/>
    <div style="position: absolute;top: 10px">
       <ChangeClass ref="changeClass"/>
    </div>
    <div>
        <div class="select_box">
            <span class="listType">活动列表:&nbsp;&nbsp;&nbsp;</span>
            <el-select v-model="selectOption" filterable placeholder="请选择将要跳转的活动"   @change="beforPitchOn()">
                <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item">
                </el-option>
            </el-select>
            <!-- <el-button type="primary" plain  style=" margin-left: 10px;" @click="toPersonal">切换为个性化学习</el-button> -->
        </div>

    </div>
    <br>
    <div class="fldiv100" id="pushActive">
          <div style="float: left"  v-show="preparedActivitiesBtnIsShow">

            <el-popover placement="bottom"  trigger="hover" width="auto" v-show="preparedActivitiesBtnIsShow">
                <div v-show="popoverIsShow">
                    <div  v-if="preparedActivitiesIsShow">点击章节名称即可变成待执行的活动</div>
                    <div v-if="preparedActivitiesIsShow"  style="overflow-y: auto;max-height: 270px">
                        <div v-for="item in preparedActivities" :key="item.chapter_id">
                            <el-button type="text"  @click="updateNextActive(item)" >{{item.chapter_title}}</el-button>
                        </div>
                    </div>
                    <div  v-if="!preparedActivitiesIsShow">
                        {{preparedActivitiesTitle}}
                    </div>

                </div>
                <div v-show="!popoverIsShow">请在倒数10秒前使用此功能</div>
                    <template #reference>
                        <el-button type="text"   v-show="preparedActivitiesBtnIsShow">待执行活动颗粒</el-button>
                    </template>

            </el-popover>

        </div>
  <div class="previous_activity">
    <el-icon size="23px" color="#409EFF">
      <CircleCheck />
    </el-icon>
      <el-popover placement="top-start"  trigger="hover" width="auto">
          <div  v-if="completedActiveIsShow">已经结束的三个章节如下:</div>
          <div v-if="completedActiveIsShow">
              <div v-for="item in completedActive"  :key="item.chapter_id"  >
                  <el-button type="text"  size="small"  @click="HoverClick(item.chapter_id)"  >
                      {{item.chapter_title}}
                  </el-button>
              </div>
              <!-- <button size="small" style="margin-left:70%" @click="moreCompletedActive" v-show="completed_btn">更多</button> -->
          </div>

          <div  v-if="!completedActiveIsShow">
            没有进行过的课程呢~
          </div>
          <template #reference>
              <span @click="previousActivity" title="点击进行此活动">{{ this.previous_activity }}</span>
          </template>
      </el-popover>
  </div>

  <div class="remain_time" title="当前活动剩余时间">
    <van-count-down
      ref="countDown"
      @finish="timeFinish"
      :time="time"
      format="mm:ss"
      timeData="TimeData"
      @change="change"
    />
  </div>

  <div class="doing">
    <!-- 课间休息时间 -->
   <el-button
   type="primary"
   round
   v-show="break_btn"
   class="break_time"
   style="vertical-align: 65%"
   >
        <!-- <span>课间休息时间</span> -->
        <br/>
        <van-count-down
          ref="break"
          @finish="breakFinish"
          :time="break_time"
          format="mm:ss"
          timeData="BreakTimeData"
          @change="breakchange"
        />
        <span>分钟后继续开始</span>
   </el-button>
    <el-icon size="48px" color="#409EFF" v-if="show_pause" style="vertical-align: -15%" @click="pause">
      <!-- 设置课间休息时长 -->
       <el-popover placement="top-start"  trigger="hover" @hide="clearReadsValue"  >
             <template #reference>
                   <VideoPlay  />
             </template>
             <span v-if="!dialogStatus">
                <label>请选择课程暂停时长</label>
                 <el-radio-group v-model="reads">
                    <el-radio :label="300000"  @change="setTimeData">5分钟</el-radio>
                    <el-radio :label="600000"   @change="setTimeData">10分钟</el-radio>
                    <el-radio :label="1" @click="CustomTime">
                     自定义
                   </el-radio>
                  <!-- <input type="text"    size="2" v-model="readsValue" maxlength="2"  /> 分钟 -->
                  <el-input-number
                    v-model="readsValue"
                    :min="1"
                    size="small"
                    controls-position="right"
                    @change="handleChange"
                  />分钟
                </el-radio-group>

                <!-- <el-radio-group v-model="readsValue">
                  <el-radio :label="readsValue">
                     自定义
                    <input type="text"    size="2" v-model="readsValue" maxlength="2" @change="CustomTime"  /> 分钟
                  </el-radio>
                </el-radio-group> -->
            </span>
            <label v-if="dialogStatus">请选择课程暂停时长</label>
    </el-popover>
    </el-icon>
    <el-icon size="48px" color="#409EFF" v-if="show_play" style="vertical-align: -15%" @click="play">
      <VideoPause />
    </el-icon>
     <!-- 正在进行章节鼠标悬浮后的“开始活动”“结束活动”按钮 -->
    <el-popover placement="top-end"  trigger="hover">
               <el-button type="text"    style="font-weight: bold;font-size: 18px" @click="synncCourseStatus" >结束课程</el-button>
                 <template #reference>
                    <span  title="当前正在进行的活动"  >{{ this.activity_display }}</span>
                </template>

    </el-popover>
      <div>
          <el-tooltip
                  content="学情展示页按钮"
                  raw-content
          >
              <el-icon :size="30">
                  <Histogram :color="studyInfoColor" @click="studyInfo" />
              </el-icon>
          </el-tooltip>
      </div>
  </div>
  <div class="config">
    <!-- <el-button type="primary" color="red" round>配置定时推送活动</el-button> -->
  </div>

  <div class="next_activity">
    <img alt :src="imgWait" style="width: 25px; height: 25px" />
      <el-popover placement="bottom"  trigger="hover" width="auto">
          <div  v-if="nextActiveIsShow">即将进行的三个章节:</div>
          <div v-if="nextActiveIsShow">
              <div v-for="item in nextActive" :key="item.chapter_id"  >
                  <el-button type="text"  size="small"  @click="HoverClick(item.chapter_id)"  >
                      {{item.chapter_title}}
                  </el-button>
              </div>
              <!-- <button size="small" style="margin-left:70%" @click="moreNextActive" v-show="next_btn">更多</button> -->
          </div>
          <div  v-if="!nextActiveIsShow">
              课程已经结束了~
          </div>
          <template #reference>
              <span @click="nextActivity" title="点击进行此活动">{{ this.next_activity }}</span>
          </template>
      </el-popover>
  </div>
    </div>
    <br>
    <br>
    <br>

    <div v-show="studyInfoIsShow" class="frdiv">
        <studyInfo ref="studyInfo"></studyInfo>
    </div>
  <!-- <WebSocket ref="webref"></WebSocket> -->
</template>


问题1:逻辑边界不清晰,封装意识缺乏问题

在这里插入图片描述

问题2:展示效果上的问题

在这里插入图片描述

三、解决过程

问题一 代码结构混乱问题解决

1、按照功能模块分类
2、添加对应注释
3、代码对齐
在这里插入图片描述

问题二 代码结构混乱问题解决

使用v-if和v-else进行逻辑判断,将上面的两个逻辑判断合并

<div v-if="nextActiveIsShow"> 即将进行的三个章节
	<div v-for ="item in nextActive" :key="item.chapter_id">
		<el-button type="text" size ="small" @click="HoverClick(item.chapter_id)">
		{{item.chapter_title}}
		</el-button>
	</div>
<div>
<div v-else>
	课程已经结束了~
</div>

增加代码的可读性。

问题三 展示效果上的细微问题

height: 1.5em;
vertical-align: -0.3em;

四、总结

写的代码是给人看的,完成很重要,但是我们也在追求完美的道路上。

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

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

相关文章

JVM(学习原因,虚拟机,作用,位置,组成,各部分用途,执行流程,架构类型)

JVM概述 这里写目录标题JVM概述1.1为什么学习 JVM1.2虚拟机1.3JVM 作用1.4JVM的位置1.5JVM组成1.6各个组成部分的用途1.7JVM代码的执行流程1.8JVM架构类型1.1为什么学习 JVM 中高级程序员必备技能 项目管理,性能调优 1.2虚拟机  所谓虚拟机&#xff08;Virtual Machine&a…

Linux基础命令-ss显示socket信息

Linux基础命令-netstat显示网络状态 ss 一. 命令介绍 先使用手册查看命令介绍信息 NAME ss - another utility to investigate sockets DESCRIPTION ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and …

Flink从入门到精通系列(一)

1、Flink概述 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在&#xff0c; 无边界和有边界数据流上进行有状态的计算 &#xff0c;Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Apache Flink 功能强大&#xff0c;支持开发…

使用自定义数据绘制脑地形矩阵图

最近做数据处理,想画点自己想要的图,但是找遍了各种库,都没有一个函数可以实现我想要的效果,所以关机时刻还得靠自己啊,自己动手丰衣足食,记录一下实现过程,方便以后查阅。 使用自定义数据绘制脑地形矩阵图 对于处理后的数据我想实现下图所示的效果,以矩阵的形式排列脑…

PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局

目录 一、数据库建表 1 建表 2 插入数据 3 查看表数据 二、建立项目 1 新建项目 2 appMain.py 3 myMainWindow.py 4 myChartView.py 2.4.1 提升的后果 2.4.2 QmyChartView类说明 2.4.3 添加代码 三、修改myMainWindow.py程序&#xff0c;添加功能 1 打开数据库 …

第十届省赛——8人物相关性分析(数组)

题目&#xff1a;试题 H: 人物相关性分析时间限制: 1.0s 内存限制: 512.0MB 本题总分&#xff1a;20 分【问题描述】小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob有多少次同时出现。更准确的说&#xff0c;小明定义 Alice 和 Bob“同时出现”的意思是&a…

微小目标识别研究(2)——基于K近邻的白酒杂质检测算法实现

文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的&#xff0c;并没有直接调用相关的库完整的代码——调用ope…

千川投放50问(完)!如何跑出高投产?

第四十一问&#xff1a;计划初期成本很高&#xff0c;是否要关掉重新跑&#xff1f;首先看一下是不是初期回传延迟导致的成本偏高。如果成本没有高的&#xff0c;不建议暂停&#xff0c;先观察一段时间数据&#xff0c;给它一点学习时间。当系统积累过足够的模型之后&#xff0…

08-Oracle游标管理(定义,打开、获取数据及关闭游标)

目标 1.确定何时需要显示游标2.声明、打开和关闭显示游标3.从显示游标中提取数据4.了解与游标有关的属性5.使用游标FOR循环检索游标中的数据6.在游标FOR循环的子查询中声明游标7.评估使用逻辑运算符结合在一起的布尔条件游标 1、在使用一个PL/SQL块来执行DML语句或只返回一行结…

2月更新 | Visual Studio Code Python

我们很高兴地宣布&#xff0c;2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出&#xff01;此版本包括以下改进&#xff1a;从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布&#xff1a;改…

性能优化之HBase性能调优

HBase是Hadoop生态系统中的一个组件&#xff0c;是一个分布式、面向列存储的内存型开源数据库&#xff0c;可以支持数百万列&#xff08;MySQL4张表在HBase中对应1个表&#xff0c;4个列&#xff09;、超过10亿行的数据存储。可用作&#xff1a;冷热数据分离HBase适合作为冷数据…

坐标系、视窗体(裁剪区域),存储着色器

坐标系 两种常见的投影/坐标系&#xff0c;正交和透视&#xff0c;实际上只是特定的4x4变换矩阵。啥都不规定默认的就是-1.0~1.0的笛卡尔坐标系。 正交&#xff1a; 在opengl的核心框架下&#xff0c;没有提供任何内置渲染管线&#xff0c;所以在提交一个几何图形进行渲染之前&…

Ubuntu Protobuf 安装(测试有效)

安装流程 下载软件 下载自己要安装的版本&#xff1a;https://github.com/protocolbuffers/protobuf 下载源码编译&#xff1a; 系统环境&#xff1a;Ubuntu16&#xff08;其它版本亦可&#xff09;&#xff0c;Protobuf-3.6.1 编译源码 cd protobuf# 当使用 git clone 下来的…

【C语言】操作符详解总结(万字)

操作符详解1. 操作符分类2. 算术操作符3. 移位操作符3.1 整数的二进制是怎么形成的3.2 左移操作符3.3 右移操作符4. 位操作符5. 赋值操作符6. 单目操作符6.1 单目操作符介绍6.2 sizeof 和 数组7. 关系操作符8. 逻辑操作符9. 条件操作符9.1 练习19.2 练习210. 逗号表达式11. 下标…

【Vue】vue2导出页面内容为pdf文件,自定义选中页面内容导出为pdf文件,打印选中页面内容,预览打印内容

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、安装html2canvas和jspdf二、导出pdf使用步骤1.在utils文件夹下创建htmlToPdf.js2.在main.js中引入3.在页面中使用三、打印预览1. 引入print-js2.页面中impor…

PG数据库实现高可用方案(包括通用型方案Corosync+pacemaker协作)

实现高可用方案首先了解一下高可用集群高可用&#xff1a;透明切换&#xff0c;故障切换&#xff0c;连接管理器/集群管理器pgpool-Ⅱ&#xff1a;连接池、复制、负载均衡功能PatroniCorosyncpacemaker高可用解决方案Corosyncpacemakercorosyncpacemaker架构协作资源分配&#…

功耗降低99%,Panamorph超清VR光学架构解析

近期&#xff0c;投影仪变形镜头厂商Panamorph获得新型VR显示技术专利&#xff08;US11493773B2&#xff09;&#xff0c;该专利方案采用了紧凑的结构&#xff0c;结合了Pancake透镜和光波导显示模组&#xff0c;宣称比传统VR方案的功耗、发热减少99%以上&#xff0c;可显著提高…

通讯录(C++实现)

系统需求通讯录是一个可以记录亲人、好友信息的工具。本章主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;最多记录1000人显示联系人:显示通讯录…

【006】Redis主从/哨兵/分片集群Docker搭建

项目源码合集 https://gitee.com/qiuyusy/small-project-study 搭建过程疯狂踩坑,记录一下希望各位少走弯路 目录主从搭建配置文件redis.conf运行容器测试优化哨兵集群配置文件运行容器测试代码读写分离分片集群mkdir -p /opt/docker/redis_study/redis_0/conf mkdir -p /opt/…

藏经阁(五)温湿度传感器 SHT3x-DIS 手册 解析

文章目录芯片特性芯片内部框图芯片引脚定义芯片温湿度范围芯片寄存器以及时序讲解信号转换公式芯片特性 湿度和温度传感器完全校准&#xff0c;线性化温度补偿数字输出供电电压范围宽&#xff0c;从2.4 V到5.5 VI2C接口通讯速度可达1MHz和两个用户可选地址典型精度 2% RH和 0.…