vue3 实现根据动态数据,显示进度

效果图:
在这里插入图片描述
思路:
通过计算背景图的宽度来达到效果(background-size)

代码:
script

    // 接口返回的进度条数据
    let CustomerListCount = ref({})
    // 各类人数概览比例图
    var ChartData  // 各类客户数据
    // 各类人数最大值接近的整十数
    var MaxNumber
    //获取到用于显示各类进度的div的背景图的宽度数据
    var LeadCustomers = ref('')
    var PotentialCustomers = ref('')
    var SurvivingCustomers = ref('')
    var LossWarningCustomers = ref('')
    var LostCustomers = ref('')
    // 获取数据接口
    let APICustomerListCount = () => {
      getCustomerListCount(
        {
          param: JSON.stringify({ id: "1" })
        }
      ).then(res => {
        let data
        if (typeof res == 'string') {
          data = JSON.parse(res)
        } else {
          data = res
        }
        if (data.retCode == '0') {
          CustomerListCount.value = data
          // 将存储人数的数据,统一放进一个数组内
          ChartData = [
            Number(CustomerListCount.value.leadCustCount),
            Number(CustomerListCount.value.potentialCustCount),
            Number(CustomerListCount.value.existCustCount),
            Number(CustomerListCount.value.lossWarnCustCount),
            Number(CustomerListCount.value.lossCustCount)
          ]
          // 计算各类人数比例图的方法
          let MaxValue = () => {
          	// 找出所有
            let MaxChartData = ChartData[0]
            ChartData.forEach(item => {
              if (item > MaxChartData) {
                MaxChartData = item
              }
            });
            /*
             *   计算距离最大值最近的整十数,并在此基础上加上任意的数(随自己的需求)
			 *	计算过程示例:
			 *	MaxNumber = Math.ceil(247 / 10) * 10 + 50
			 *	          = Math.ceil(24.7) * 10 + 50
			 *	          = 28*10+50
			 *	          = 330
			*/ 
            MaxNumber = Math.ceil(MaxChartData / 10) * 10 + 50
            /*
			 * 用人数/MaxNumber *100得到的数值(背景图宽度占比),为div的背景图宽度重新赋值
			 * 计算过程示例:
			 * PotentialCustomers.value = `${(247 / 330 * 100) + '% ' + '100%'}`
			 *                          = `${(0.74848…*100) + '% ' + '100%'}`
			 *                          = `${(74.848…) + '% ' + '100%'}`
			 *                          = `74.847…%  100%`
			*/ 
            LeadCustomers.value = `${(ChartData[0] / MaxNumber * 100) + '% ' + '100%'}`
            PotentialCustomers.value = `${(ChartData[1] / MaxNumber * 100) + '% ' + '100%'}`
            SurvivingCustomers.value = `${(ChartData[2] / MaxNumber * 100) + '% ' + '100%'}`
            LossWarningCustomers.value = `${(ChartData[3] / MaxNumber * 100) + '% ' + '100%'}`
            LostCustomers.value = `${(ChartData[4] / MaxNumber * 100) + '% ' + '100%'}`
          }
          // 调用计算比例图的方法
          MaxValue()
        }
      }).catch(err => {
        console.log(err, 'ERROR');
      })
    }
    APICustomerListCount()

html

<div id="IndexChart">
        <div class="ChartData">
          <div class="LeadCustomers">
            <div :style="{ backgroundSize: LeadCustomers }" @click="clickChartData(1)">
              进度条上的名称
              <span>
                {{ CustomerListCount.leadCustCount }}
                <span>人</span>
              </span>
            </div>
          </div>
          <div class="PotentialCustomers">
            <div :style="{ backgroundSize: PotentialCustomers }" @click="clickChartData(2)">
              进度条上的名称
              <span>
                {{ CustomerListCount.potentialCustCount }}
                <span>人</span>
              </span>
            </div>
          </div>
          <div class="SurvivingCustomers">
            <div :style="{ backgroundSize: SurvivingCustomers }" @click="clickChartData(3)">
              进度条上的名称
              <span>
                {{ CustomerListCount.existCustCount }}
                <span>人</span>
              </span>
            </div>
          </div>
          <div class="LossWarningCustomers">
            <div :style="{ backgroundSize: LossWarningCustomers }" @click="clickChartData(5)">
              进度条上的名称
              <span>
                {{ CustomerListCount.lossWarnCustCount }}
                <span>人</span>
              </span>
            </div>
          </div>
          <div class="LostCustomers">
            <div :style="{ backgroundSize: LostCustomers }" @click="clickChartData(4)">
              进度条上的名称
              <span>
                {{ CustomerListCount.lossCustCount }}
                <span>人</span>
              </span>
            </div>
          </div>
        </div>
      </div>

style

根据自己的需求写样式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值