28个案例问题分析---014课程推送页面逻辑整理--vue

news2024/11/20 16:30:57

一:背景介绍

项目开发过程中,前端出现以下几类问题:

  • 代码结构混乱
  • 代码逻辑不清晰
  • 页面细节问题

二:问题分析

代码结构混乱问题

<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>

代码逻辑混乱,没有封装的意识
使用了很多换行标签做格式

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

在这里插入图片描述
这里使用的时候,用了三个v-if,使用的却是同一个变量。虽然说这样写在功能上没有问题,但是却无法体现,这几个部分的相关性,实现功能固然重要,但是代码的可读性也必须考虑。

展示效果上的细微问题

在这里插入图片描述

前面添加的一个推课状态的小标识,没有对齐。虽然对功能没有影响,但是效果很差,很不美观。

三:解决过程

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

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

问题二 逻辑边界不清晰

  1. 使用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>

不使用多个if造成代码难读的问题。

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

  1. 将标签对齐就可以解决美观的问题
height: 1.5em;
vertical-align: -0.3em;

四:总结

完成大于完美,但是也要追求完美。

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

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

相关文章

SpringBoot监听机制-以及使用

11-SpringBoot事件监听 Java中的事件监听机制定义了以下几个角色&#xff1a; ①事件&#xff1a;Event&#xff0c;继承 java.util.EventObject 类的对象 ②事件源&#xff1a;Source &#xff0c;任意对象Object ③监听器&#xff1a;Listener&#xff0c;实现 java.util…

奇思妙想:超链接唤起本地应用

文章目录分析实现参考很多人的博客都有这样的小玩意&#xff0c;点击之后就可以直接与博主进行对话&#xff0c;而且无需添加好友。 先研究一下网页源代码&#xff1a; <a href"tencent://message/?uin88888888&Siteqq&Menuyes">联系我</a>很明…

Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析

paper&#xff1a;Decoupled Knowledge Distillationcode&#xff1a;https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/DKD.py背景与基于响应logits-based的蒸馏方法相比&#xff0c;基于特征feature-based的蒸馏方法在各种任务上的表现更好…

【教学典型案例】14.课程推送页面整理-增加定时功能

目录一&#xff1a;背景介绍1、代码可读性差&#xff0c;结构混乱2、逻辑边界不清晰&#xff0c;封装意识缺乏![在这里插入图片描述](https://img-blog.csdnimg.cn/bbfc5f04902541db993944ced6b62793.png)3、展示效果不美观二&#xff1a;案例问题分析以及解决过程1、代码可读性…

现代操作系统——Linux架构与学习

小白的疑惑 在我决定从事嵌入式&#xff08;应用层&#xff09;方面的工作时&#xff0c;我查询了大量资料该如何学习&#xff0c;几乎所有观点不约而同的都指向了学习好Linux&#xff0c;大部分工作都是在Linux环境下来进行工作的。于是我雄心勃勃的去下载Linux&#xff0c;可…

GEE开发之降雨(CHIRPS)数据获取和分析

GEE开发之降雨CHIRPS数据获取和分析1.数据介绍2.初识CHIRPS2.1 代码一2.2 代码二3.逐日数据分析和获取4.逐月数据分析和获取4.1 代码一4.2 代码二(简洁)5.逐年数据分析和获取5.1 代码一5.2 代码二(简洁)前言&#xff1a;主要获取和分析UCSB-CHG/CHIRPS/DAILY的日数据、月数据和…

一文带你入门,领略angular风采(上)!!!

话不多说&#xff0c;上代码&#xff01;&#xff01;&#xff01; 一、脚手架创建项目 1.安装脚手架指令 npm install -g angular/cli 2.创建项目 ng new my-app(ng new 项目名) 3.功能选择 4.切换到创建好的项目上 cd my-app 5.安装依赖 npm install 6.运行项目 npm start或…

32 openEuler使用LVM管理硬盘-管理卷组

文章目录32 openEuler使用LVM管理硬盘-管理卷组32.1 创建卷组32.2 查看卷组32.3 修改卷组属性32.4 扩展卷组32.5 收缩卷组32.6 删除卷组32 openEuler使用LVM管理硬盘-管理卷组 32.1 创建卷组 可在root权限下通过vgcreate命令创建卷组。 vgcreate [option] vgname pvname ...…

曹云金郭德纲关系迎曙光,新剧《猎黑行动》被德云社弟子齐点赞

话说天下大势&#xff0c;分久必合&#xff0c;合久必分。这句话经过了历史的证明&#xff0c;如今依然感觉非常实用。 就拿郭德纲和曹云金来说&#xff0c;曾经后者是前者的得门生&#xff0c;两个人不但情同父子&#xff0c;曹云金还是郭德纲默认接班人。然而随着时间的流逝&…

数据库基本概念及常见的数据库简介

数据库基本概念 【1】数据库基本概念 &#xff08;1&#xff09;数据 所谓数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;这些符号是可识别的、抽象的。它不仅仅指狭义上的数字&#xff0c;而是有多种表现形式&#xff1a;字母、文字…

设计模式-策略模式

前言 作为一名合格的前端开发工程师&#xff0c;全面的掌握面向对象的设计思想非常重要&#xff0c;而“设计模式”是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的&#xff0c;代表了面向对象设计思想的最佳实践。正如《HeadFirst设计模式》中说的一句话&…

【Verilog】——模块,常量,变量

目录 1.模块 1.描述电路的逻辑功能 2. 门级描述 3.模块的模板​编辑 2.关键字 3.标识符 4.Verilog源代码的编写标准 5.数据类型 1.整数常量​ 2.参数传递的两种方法 3.变量 4.reg和wire的区别 5.沿触发和电平触发的区别​ 6.memory型变脸和reg型变量的区别​ 1.模块 1.描…

Mybatis一级缓存与二级缓存

一、MyBatis 缓存缓存就是内存中的数据&#xff0c;常常来自对数据库查询结果的保存。使用缓存&#xff0c;我们可以避免频繁与数据库进行交互&#xff0c;从而提高响应速度。MyBatis 也提供了对缓存的支持&#xff0c;分为一级缓存和二级缓存&#xff0c;来看下下面这张图&…

docker安装即docker连接mysql(window)

一 安装docker 1.什么是docker Docker容器与虚拟机类似&#xff0c;但二者在原理上不同。容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL&#xff0c;即Windows Subsystem on Linux&#xff0c;中…

JavaScript高级 XHR - Fetch

1. 前端数据请求方式 早期的网页都是通过后端渲染来完成的&#xff1a;服务器端渲染&#xff08;SSR&#xff0c;server side render&#xff09; 客户端发出请求 -> 服务端接收请求并返回相应HTML文档 -> 页面刷新&#xff0c;客户端加载新的HTML文档 当用户点击页面中…

C++:哈希:闭散列哈希表

哈希的概念 哈希表就是通过哈希映射&#xff0c;让key值与存储位置建立关联。比如&#xff0c;一堆整型{3,5,7,8,2,4}在哈希表的存储位置如图所示&#xff1a; 插入数据的操作&#xff1a; 在插入数据的时候&#xff0c;计算数据相应的位置并进行插入。 查找数据的操作&…

从企业数字化发展的四个阶段,看数字化创新战略

《Edge: Value-Driven Digital Transformation》一书根据信息技术与企业业务发展的关系把企业的数字化分为了四个阶段&#xff1a; 技术与业务无关技术作为服务提供者开始合作科技引领差异化优势以技术为业务核心 下图展示了这四个阶段的特点&#xff1a; 通过了解和分析各个…

[ant-design-vue] tree 组件功能使用

[ant-design-vue] tree 组件功能使用描述环境信息相关代码参数说明描述 是希望展现一个树形的菜单&#xff0c;并且对应的菜单前有复选框功能&#xff0c;但是对比官网的例子&#xff0c;我们在使用的过程中涉及到对半选中情况的处理&#xff1a; 半选中状态&#xff1a; 选中…

NodeJS安装

一、简介Node.js是一个让JavaScript运行在服务端的开发平台&#xff0c;Node.js不是一种独立的语言&#xff0c;简单的说 Node.js 就是运行在服务端的 JavaScript。npm其实是Node.js的包管理工具&#xff08;package manager&#xff09;&#xff0c;类似与 maven。二、安装步骤…

并发下的可见性、原子性、有序性还不懂?

CPU、内存、I/O速度大比拼CPU的读写速度是内存的100倍左右&#xff0c;而内存的读写速度又是I/O的10倍左右。根据"木桶理论"&#xff0c;速度取决于最慢的I/O。为了解决速度不匹配的问题&#xff0c;通常在CPU和主内存间增加了缓存&#xff0c;内存和I/O之间增加了操…