首页 > 其他分享 >【Vue】自己编写排名组件

【Vue】自己编写排名组件

时间:2023-10-08 09:14:24浏览次数:48  
标签:bar Vue outer 进度条 inner progress 组件 编写

一、需求分析

这里我是用Echarts的柱状图,倒置下y轴x轴就实现了,然后产品说跟UI不一致

我一看UI这种又给我整不会了,然后想拿Echarts改改参数搞定,同事和群友都是说自己做,不要用Echarts改

 

二、实现思路

同事劝我用ElementUI的进度条组件来实现,进度条见:

https://element.eleme.io/#/zh-CN/component/progress

想了下这个思路还是可行的,上面的标题自定义起来还算方便

然后花了点时间抓的进度条的样式

 

组件解析后是这样的:

<div class="el-progress-bar">
  <div class="el-progress-bar__outer" style="height: 20px; background-color: rgb(235, 238, 245);">
    <div class="el-progress-bar__inner" style="width: 44%; background-color: rgb(27, 189, 236);"></div>
  </div>
</div>

一个bar嵌套 一个outer和inner

outer就是百分百的长度,outer是相对定位

inner用来展示占比的长度,inner是绝对定位

所以在做UI效果的时候花了很多时间琢磨这个东西,outer来设置底部边框线

然后想通过设置外边距和内边距来拉开inner的间隙,在知道是绝对定位后,改用top定位属性才拉开

 

这里我直接上效果图:

 

自己封装的RankCharts组件:

<template>
  <div>
    <div v-for="(item, idx) in rankList" :key="idx" style="margin-bottom: 15px;">
      <div class="rank-header"><span>No.{{ idx + 1 }} {{ item[labelField] }}</span> <span style="float: right">{{ item[countField] }}</span></div>
      <el-progress :percentage="item.percent" :stroke-width="15" :color="customColor" text-inside :show-text="false" />
    </div>
  </div>
</template>

<script>
export default {
  name: 'RankCharts',
  props: {
    rankList: {
      type: Array,
      required: true,
      default: () => []
    },
    labelField: {
      type: String,
      required: true,
      default: ''
    },
    countField: {
      type: String,
      required: true,
      default: ''
    }
  },
  data() {
    return {
      customColor: '#1BBDEC',
      completeVal: 0
    }
  }
}
</script>

<style scoped>
/* 进度条的圆角移除 */
/deep/ .el-progress-bar__outer,
/deep/ .el-progress-bar__inner {
  border-radius: 0;
}
/* 移除进度条的底色,设置底部百分百线条 */
/deep/ .el-progress-bar__outer {
  background-color: unset !important;
  border-bottom: 1px #1BBDEC solid;
}
/* 拉开进度条底线和占比的间距 */
/deep/ .el-progress-bar__inner {
  top: -2px;
}
/* 进度条上面的排名信息展示 */
.rank-header {
  color: #1BBDEC;
  margin-bottom: 5px;
  font-size: 18px;
}
</style>

  

组件使用:

<rank-charts :rank-list="carSourceList" count-field="val" label-field="label" style="padding: 10px;" />

接口数据处理:

因为进度条组件的进度是自己计算的,排名按最多的那个为100%来算

设置一个percent属性即可实现

 async initializeCarSourceData(regionCode, [startTime, endTime]) {
   const { data: carSourceData } = await getStatisticDataAnalysisOfCarSource(regionCode, { startTime, endTime })
   this.carSourceList = carSourceData['countList'].map((val, idx, arr) => ({
     val,
     label: carSourceData['nameList'][idx],
     percent: (val / arr[0]).toFixed(2) * 100
   }))
 },

  

  

 

标签:bar,Vue,outer,进度条,inner,progress,组件,编写
From: https://www.cnblogs.com/mindzone/p/17747990.html

相关文章

  • vue3
    vue3介绍vue3完全兼容vue2#tree-shaking是一种消除死代码的性能优化理论#TypeScript -javascript:坑---》填坑---》弱类型-typeScript:强类型语言 组合式api和配置项apivue3兼容vue2---》vue2的内容,vue3完全适用vue3不建议这么用了,建议使用组合式api,不建议使用配置......
  • java题目编写及分析
    首先想分享给大家的是三个题目集,其难易程度是由易到难(我会着重挑几个题目给大家分析)  第一个题目集所包含的题目为身体质量指数BMI测算,长度质量单位换算,奇数求和,房产税费计算,游戏角色选择,学号识别,巴比伦法求平方根近似值,二进制数值提取,判断三角形类型共九个题目,在第一个题目......
  • vue3比vue2优势
    Vue3相对于Vue2有一些显著的优势,主要集中在性能、开发体验和一些新的特性上:性能提升:虚拟DOM的优化:Vue3使用了更高效的虚拟DOM算法,减少了不必要的DOM操作,提高了渲染性能。编译器优化:Vue3的编译器生成的代码更为紧凑和高效,加速了首次渲染和更新速度。更小的包大小:Vu......
  • 使用BAPI_NETWORK_COMP_*实现生产订单组件的增删改查
    1、文档说明对于生产订单组件的增删改有多种办法,比较常用的有使用内部函数CO_XT_COMPONENT_*,有改造BAPI_ALM_ORDER_MAINTAIN来实现,各有千秋。本文档介绍,通过PS的BAPI_NETWORK_COMP_*系列BAPI,来实现常见的组件先删后建的覆盖式操作,组件部分字段修改,组件信息查询等功能2、BAPI用......
  • 解锁 Vue 3 神奇技巧:让模板复用达到极致
    引出在vue的日常开发当中,我们可能会遇到这样的一种情况:某一部分的模版需要重复利用,但又不至于到新开1个组件的地步。比如:js复制代码<template><divv-for="iteminlist">//条件渲染<divv-if="isCase1(item.id)"class="case1Class...">......
  • vue3 新增 mitt 的使用
    在Vue3中,你可以使用 mitt 库来实现事件总线,以便在组件之间进行通信。下面是详细的介绍如何使用 mitt:安装 mitt 库: 首先,确保你已经安装了 mitt 库。你可以使用npm或yarn来安装它:插入代码复制代码npminstallmitt或插入代码复制代码yarnaddmitt......
  • 记录--Vue 右键菜单的秘密:自适应位置的实现方法
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助下图这个情景,你是否也遇到过?当你右键点击网页上的某个元素时,弹出的菜单被屏幕边缘遮挡了,导致你无法看清或选择菜单项?上图中右键菜单的选项并不是固定不变的,它会根据不同的元素或场景来显示不同的选项。也就是......
  • vue2自定义指令实现el-dropdown下拉菜单项最小宽度等于内容宽度
    //在main.js添加Vue.directive('siem-dropdown',function(el,binding,vNode){letul=el.querySelector("ul")letuid=vNode.componentInstance._uid;//获取下拉菜单实例的uidletsiemDropdownClass=`siem-dropdown-${uid}`;ul.cla......
  • getRefs is undefined html vue2项目 报错
    vue2项目提示getRefsisundefined在div上面写了,ref,还写了v-if然后再watch中操作了ref导致报错。分析:组件因为v-if为false没有注册和渲染,在操作的时候还使用了this.$refs函数就会获取不到解决办法:v-if换成v-show ......
  • picker组件增加搜索item条目的功能
    picker组件顶部有搜索框,能搜索条目,如果条目很多的时候,上下翻很麻烦了,而且不容易找到,可以先全查,然后js搜索wxml<buttonbindtap="openFlag">可搜索选择框</button><viewclass="date-background"hidden="{{flag}}"><viewclass='date-gray-background'......