首页 > 其他分享 >echarts根据数据动态生成饼图的个数,并排序

echarts根据数据动态生成饼图的个数,并排序

时间:2024-10-22 13:47:15浏览次数:9  
标签:node null dataPurchaseContract 个数 dataSaleContract let Department 排序 echarts

动态生成个数

function initPurchaseContract() {
    // 获取数据的keys
    let keys = Object.keys(dataPurchaseContract[0]);
    let totalCharts = keys.length - 1; // 饼图数量

    // 动态计算行数和列数(使布局接近正方形)
    let cols =3; // 列数
    let rows = Math.ceil(totalCharts / cols); // 行数

    // 定义饼图的半径
    let pieRadius = '40px';

    // 创建option对象
    const option = {
        legend: {},
        tooltip: {},
        dataset: {
            source: dataPurchaseContract,
        },
        title: [
            { text: '各部门采购合同额组成', left: 'center', top: '10%' },  // 总标题
        ],
        series: [],
    };

    // 动态设置每个饼图的位置(center)并添加子标题
    for (let j = 0; j < totalCharts; j++) {
        let colIndex = j % cols; // 当前的列
        let rowIndex = Math.floor(j / cols); // 当前的行

        // 根据当前的行和列计算center坐标(x, y)
        let centerX = (20 + colIndex * (40 / cols) * 2) + '%'; // 横向间距动态调节
        let centerY = (40 + rowIndex * (40 / rows) * 2) + '%';  // 纵向间距动态调节

        // 添加饼图的series
        option.series.push({
            name: keys[j + 1],
            type: 'pie',
            radius: pieRadius,
            center: [centerX, centerY],
            encode: { itemName: 'name', value: keys[j + 1] },
        });

        // 为每个饼图添加说明(子标题),放置在饼图的上方
        option.title.push({
            text: keys[j + 1],  // 使用key作为子标题
            left: centerX,
            top: (parseFloat(centerY) + 15) + '%',  // 子标题放置在饼图上方
            textAlign: 'center',
            textStyle: {
                fontSize: 12,
                fontWeight: 'normal',
            },
        });
    }
    
    if(totalCharts>7){
      totalCharts=4
      PurchaseContract.style.height=totalCharts*150+'px'
      Pieheight.value='600px'
    }
    if(totalCharts>10){
      PurchaseContract.style.height='800px'
      Pieheight.value='800px'
    }
    let Chart = echarts.init(document.getElementById("PurchaseContract"));
    // 渲染图表
    Chart.setOption(option);
}

从后台获取数据

const LoadData = () => {
  if (onLoading.value)
        return
  onl oading.value=true
  dataSaleContract = [{},{},{},{}];
  dataPurchaseContract = [{},{},{}]

  GetContractAmountCompose(Yearly.value).then((data) => {
      if (data) {
        for (let node of data) {
          //各部门销售
          dataSaleContract[0]['name']="应收账款" 
          if(node.ReceivableAmount!=0)
          {
            dataSaleContract['0'][node.Department]=node.ReceivableAmount
            if(dataSaleContract['1'][node.Department]==null){ dataSaleContract['1'][node.Department]=0 }
            if(dataSaleContract['2'][node.Department]==null){ dataSaleContract['2'][node.Department]=0 }
            if(dataSaleContract['3'][node.Department]==null){ dataSaleContract['3'][node.Department]=0 } 
          }
          dataSaleContract[1]['name']="到账款"
          if(node.ReceivedAmount!=0)
          {
            dataSaleContract[1][node.Department]=node.ReceivedAmount
            if(dataSaleContract['0'][node.Department]==null){ dataSaleContract['0'][node.Department]=0 }
            if(dataSaleContract['2'][node.Department]==null){ dataSaleContract['2'][node.Department]=0 }
            if(dataSaleContract['3'][node.Department]==null){ dataSaleContract['3'][node.Department]=0 } 
          }
          dataSaleContract[2]['name']="手持额"
          if(node.InhandAmount!=0)
          {
            dataSaleContract['2'][node.Department]=node.InhandAmount
            if(dataSaleContract['1'][node.Department]==null){ dataSaleContract['1'][node.Department]=0 }
            if(dataSaleContract['0'][node.Department]==null){ dataSaleContract['0'][node.Department]=0 }
            if(dataSaleContract['3'][node.Department]==null){ dataSaleContract['3'][node.Department]=0 } 
          }
          dataSaleContract[3]['name']="外协金额"
          if(node.SaleOutsourcingAmount!=0)
          { 
            dataSaleContract[3][node.Department]=node.SaleOutsourcingAmount 
            if(dataSaleContract['1'][node.Department]==null){ dataSaleContract['1'][node.Department]=0 }
            if(dataSaleContract['2'][node.Department]==null){ dataSaleContract['2'][node.Department]=0 }
            if(dataSaleContract['0'][node.Department]==null){ dataSaleContract['0'][node.Department]=0 } 
          }
          //各部门采购
          dataPurchaseContract[0]['name']="应付账款" 
          if(node.PayableAmount!=0)
          {
            dataPurchaseContract['0'][node.Department]=node.PayableAmount
            if(dataPurchaseContract['2'][node.Department]==null){ dataPurchaseContract['2'][node.Department]=0 }
            if(dataPurchaseContract['1'][node.Department]==null){ dataPurchaseContract['1'][node.Department]=0 }
          }
          dataPurchaseContract[1]['name']="已付账款"
          if(node.PayedAmount!=0)
          {
            dataPurchaseContract[1][node.Department]=node.PayedAmount
            if(dataPurchaseContract['0'][node.Department]==null){ dataPurchaseContract['0'][node.Department]=0 }
            if(dataPurchaseContract['2'][node.Department]==null){ dataPurchaseContract['2'][node.Department]=0 }
          }
          dataPurchaseContract[2]['name']="其他未开票金额"
          if(node.PurchaseTotalAmount-node.PayableAmount-node.PayedAmount!=0)
          {
            dataPurchaseContract['2'][node.Department]=node.PurchaseTotalAmount-node.PayableAmount-node.PayedAmount
            if(dataPurchaseContract['0'][node.Department]==null){ dataPurchaseContract['0'][node.Department]=0 }
            if(dataPurchaseContract['1'][node.Department]==null){ dataPurchaseContract['1'][node.Department]=0 }
          }  
        }
        if(Object.keys(dataSaleContract[0]).length>7||Object.keys(dataPurchaseContract[0]).length>7){
          //Pieheight.value='1000px'
        }
        initSaleContract()
        initPurchaseContract()
      } nextTick(() => {}) })
  

        
       initContractMonth()
      }
    }).finally(() => {
      
      onl oading.value=false
    }) 
    
}

标签:node,null,dataPurchaseContract,个数,dataSaleContract,let,Department,排序,echarts
From: https://blog.csdn.net/weixin_42376662/article/details/143155714

相关文章

  • DNARY.MDB 是一个数据库文件,通常使用 Microsoft Access 或其他兼容的数据库管理系统来
    DNARY.MDB是一个数据库文件,通常使用MicrosoftAccess或其他兼容的数据库管理系统来创建和管理。以下是一些关于.MDB文件格式的详细信息,以及它可能的用途和特性:什么是 .MDB 文件?文件扩展名:.MDB 是MicrosoftAccess数据库文件的扩展名,代表"MicrosoftDatabase"。数据......
  • 求一个无符号整数二进制形式中1的个数(三种方法)
    题目:输入一个整数,输出这个整数二进制形式中1的个数。例如:输入:115输出:5解题思路:方法一:关键代码:i=i&(i-1),统计i二进制中有多少个1 具体是如何实现的,实际推几步就可以看出规律。例如2017的二进制形式为11111100001第一步,11111100001&11111100000=11111100000 ......
  • PAT (Basic Level)--1002写出这个数
    读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。输入样......
  • LeetCode题练习与总结:区间和的个数--327
    一、题目描述给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower,upper] (包含 lower 和 upper)之内的 区间和的个数 。区间和 S(i,j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。示例1:输入......
  • 必学排序算法——归并排序
    目录前言一、什么是归并排序二、归并排序步骤三、算法思想四、归并排序复杂度分析五、优化方案六、算法图解七、c++代码模板八、经典例题1.排序数组代码题解2.排序链表代码题解九、结语前言归并排序算法是必须掌握的一种基础算法,在一些比较出名的竞赛acm、蓝桥杯,......
  • 关于如何排序使得最终的答案最优的总结
    关于如何排序使得最终的答案最优的总结例题LuoguP1012CF2024C分析就以先CF2024C来展开,题意是给定\(N\)个二元组,确定一个可行的排列使得最后的序列逆序对个数最少,注意二元组内部不可以交换顺序Solution1详情见“CF980Review”中对这道题的解法,这里不多赘述了。只......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • mongodb 查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操
    mongodb查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操作符,更新单个/多个文档,删除文档,批量插入,$type操作符,内嵌文档和数组查找修改1.条件查询SQLMQLa=1{a:1}a<>1{a:{$ne:1}}a>1{a:{$gt:1}}a>=1{a:{$gte:1}}a<1{a:{$lt......
  • 大模型驱动的电商个性化搜索结果重排序
    《大模型驱动的电商个性化搜索结果重排序》摘要随着电商行业的快速发展,个性化搜索成为了提升用户体验和提升转化率的关键因素。本文将探讨大模型驱动的电商个性化搜索结果重排序技术,分析大模型在电商搜索中的价值和应用原理。文章将详细介绍大模型的基础知识、电商搜索的......
  • 2023 ICPC Seoul Regional A. Apricot Seeds(Pjudge【NOIP Round #7】冒泡排序)
    题意一个序列,Q次询问一个区间[l,r],进行k轮冒泡后,求子区间[x,y]的和。(N<=1e6,Q<=5e5)冒泡定义为:fori=1ton-1:ifa[i]>a[i+1]:swap(a[i],a[i+1])考场想法:经典转01。110111000111000111111011100011100011111+1011100011100011111+1101100......