给elmentui中的el-table-column 添加背景色怎么加

简介: 本示例通过自定义 ECharts 图例的 `formatter` 函数,实现在图例中同时显示名称、数值和百分比。代码中还优化了图例布局和饼图标签样式,使数据展示更清晰直观。

要在 legend 中显示名称、值和百分比,你需要自定义 legend 的 formatter 函数。ECharts 的 legend 支持使用 formatter 回调来自定义显示内容,并且可以通过 legend.pageIcons 等配置优化布局。

以下是修改后的代码,主要添加了 legend 的 formatter 函数,并优化了饼图的标签显示:

const list = res.data?.records || [];
console.log('原始数据:', list); // 调试用,查看原始数据结构

const data = list.map(item => {
   
  console.log('当前处理项:', item); // 调试用,查看每个项的结构

  // 统一使用 typeName 或 TypeName,根据你的数据结构来定
  const typeName = item.typeName || item.TypeName; // 尝试两种可能的属性名

  const obj = {
   
    ...item,
    value: item.count,
    name: typeName || '未知类型', // 确保 name 字段有值
  };

  // 根据 typeName 设置不同的颜色
  if (typeName === '一搬') {
   
    obj.itemStyle = {
    color: '#165DFF' };
  } else if (typeName === '较大') {
   
    obj.itemStyle = {
    color: '#FFFF00' };
  } else if (typeName === '特大') {
   
    obj.itemStyle = {
    color: '#D9001B' };
  } else if (typeName === '重大') {
   
    obj.itemStyle = {
    color: '#F59A23' };
  }

  return obj;
});

console.log('处理后的数据:', data); // 调试用,查看处理后的数据

// 计算总数值,用于百分比计算
const total = data.reduce((sum, item) => sum + (item.value || 0), 0);

const option = {
   
  title: {
   },
  tooltip: {
   
    trigger: 'item',
    formatter: '{b}: {c} ({d}%)' // 显示名称、值和百分比
  },
  legend: {
   
    orient: 'vertical',
    right: 0,
    bottom: 0,
    show: true,
    type: 'scroll', // 启用滚动,防止数据过多时溢出
    pageButtonItemGap: 5,
    pageButtonGap: 10,
    pageIconColor: '#999',
    pageIconInactiveColor: '#ccc',
    pageIconSize: 12,
    pageTextStyle: {
   
      color: '#999'
    },
    // 自定义图例格式:名称 + 值 + 百分比
    formatter: function(name) {
   
      const item = data.find(item => item.name === name);
      if (!item || item.value === undefined) return name;

      const value = item.value;
      const percent = total > 0 ? Math.round((value / total) * 100) : 0;

      // 使用 \n 可以让图例显示为多行,使用空格控制对齐
      return `${
     name}   ${
     value}   ${
     percent}%`;

      // 或者使用 HTML 标签实现更好的样式控制(需要开启 legend.useHTML)
      // return `<div style="width:150px;display:flex;justify-content:space-between;">
      //   <span>${name}</span>
      //   <span>${value}</span>
      //   <span>${percent}%</span>
      // </div>`;
    },
    // 如果使用 HTML 格式化,需要开启此选项
    // useHTML: true,
    // 调整图例项的样式
    itemWidth: 12,
    itemHeight: 12,
    textStyle: {
   
      fontSize: 12,
      rich: {
   
        name: {
   
          width: 80,
          align: 'left'
        },
        value: {
   
          width: 40,
          align: 'center'
        },
        percent: {
   
          width: 40,
          align: 'right'
        }
      }
    }
  },
  series: [
    {
   
      type: 'pie',
      radius: ['40%', '70%'], // 使用环形图,更容易查看标签
      avoidLabelOverlap: true,
      label: {
   
        show: true,
        position: 'outside',
        formatter: '{b}\n{c} ({d}%)', // 显示名称、值和百分比
        color: '#000',
        backgroundColor: '#fff',
        borderColor: '#aaa',
        borderWidth: 1,
        borderRadius: 4,
        padding: [4, 8],
        rich: {
   
          name: {
   
            fontSize: 14,
            fontWeight: 'bold'
          },
          value: {
   
            color: '#666'
          },
          percent: {
   
            color: '#999'
          }
        }
      },
      labelLine: {
   
        show: true,
        length: 10,
        length2: 20,
        lineStyle: {
   
          color: '#aaa'
        }
      },
      data: data,
      emphasis: {
   
        itemStyle: {
   
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
  ],
};

主要修改点:

  1. legend 格式化:添加了 formatter 函数,自定义图例显示为 "名称 值 百分比" 的格式
  2. 总数值计算:使用 reduce 计算所有数据的总和,用于百分比计算
  3. 图例样式优化:添加了滚动功能、自定义图标和文本样式
  4. 饼图标签优化:改进了标签的显示格式和样式,使用 rich 文本实现更灵活的样式控制
  5. 环形图设计:将饼图改为环形图(设置内外半径),使标签更易于查看

如果需要更精确的对齐效果,可以考虑使用 HTML 格式化(取消注释 useHTML 和相关代码)。这样可以使用 CSS 更灵活地控制布局,但需要注意性能影响。

目录
相关文章
隐藏el-table-column过多的内容并进行浮窗展示
隐藏el-table-column过多的内容并进行浮窗展示
隐藏el-table-column过多的内容并进行浮窗展示
|
JavaScript 前端开发
javascript数组对象根据id去重的四种方法
Js代码组织结构良好一般都呈现以下五个特点:始终声明我们的依赖、为第三方代码库添加shim(垫片)、定义跟调用应该分离、依赖应该异步加载、模块不应依赖全局变量。
1492 0
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
9341 1
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
Echarts中横坐标文字显示不全
本文讨论了在ECharts中横坐标文字显示不全的问题,并通过设置`xAxis`的`axisLabel.interval`属性为`0`来解决。这样设置后,横坐标上的所有标签都会显示,而不会根据自动计算的间隔来显示部分标签。文章提供了问题的具体示例图片和解决方法,并附有官方文档链接。
1118 4
Echarts中横坐标文字显示不全
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
2933 1
|
前端开发 JavaScript 定位技术
高德地图实现-自定义信息窗+窗体点击事件
高德地图实现-自定义信息窗+窗体点击事件
1273 0
【UI】 elementui input输入框自动获取失去焦点
【UI】 elementui input输入框自动获取失去焦点
843 1
|
存储 缓存 移动开发
前端开发中常用的存储方法(带解析)
前端存储方法包括Cookie、localStorage、sessionStorage、IndexedDB和已废弃的WebSQL。Cookie用于存储小量数据,每次请求时发送到服务器,可设置过期时间。localStorage和sessionStorage都是HTML5提供的,前者数据永久存储,后者会话关闭后清除。IndexedDB是存储大量结构化数据的数据库,支持索引和事务。WebSQL已废弃,但部分浏览器仍支持。Cache Storage用于缓存响应,提高离线访问性能,通过Service Worker控制。
|
前端开发 JavaScript
el-input 输入验证 整数、小数、实数、整数、负数等
el-input 输入验证 整数、小数、实数、整数、负数等
676 0