Echarts中柱状图完成横向布局

效果

代码

javascript 复制代码
import React, { useEffect, useRef } from 'react'
import './index.less'
import * as echarts from 'echarts';
const RightTop = (props: any) => {
    const echarts_ref = useRef<HTMLDivElement | null>(null);
    useEffect(() => {
        if (echarts_ref.current) {
            const myChart = echarts.init(echarts_ref.current);
            let colorList = ['#FF4B01', '#FF7B00', '#FFE823', '#fff', '#fff', '#fff']
            let result = props.teamData
            const option = {
                color: colorList,
                tooltip: {
                    show: false,
                    trigger: 'item',
                    borderColor: 'rgba(3, 11, 44, 0.5)',
                    textStyle: {
                        color: '#9bb2de'
                    }
                },
                legend: {
                    show: false
                },
                grid: {
                    left: '0%', // 向左扩展
                    right: '12%', // 向右扩展
                    top: '5%', // 向上扩展
                    bottom: '5%' // 向下扩展
                },
                xAxis: [
                    {
                        splitLine: {
                            show: false
                        },
                        type: 'value',
                        show: false
                    }
                ],
                yAxis: [
                    {
                        splitLine: {
                            show: false
                        },
                        axisLine: {
                            show: false
                        },
                        type: 'category',
                        axisTick: {
                            show: false
                        },
                    }
                ],
                series: [
                    {
                        name: '',
                        type: 'bar',
                        barWidth: 6, // 柱子宽度
                        MaxSize: 0,
                        showBackground: false,
                        borderRadius: [30, 30, 30, 30],
                        // 名称---
                        label: {
                            show: true,
                            offset: [10, -20], // 将标签上移20个像素
                            color: '#ccc',
                            fontWeight: 400,
                            position: 'left',
                            align: 'left',
                            fontSize: 16,
                            fontFamily: 'YouSheBiaoTiHei',
                            formatter: function (params) {
                                return params.data.name
                            }
                        },
                        data: result.map((item, index) => {
                            return {
                                name: item.name,
                                value: item.value,
                                itemStyle: {
                                    borderRadius: [30, 30, 30, 30],
                                    color: {
                                        type: 'linear',
                                        x: 0,
                                        y: 0,
                                        x2: 1,
                                        y2: 1,
                                        colorStops: [
                                            {
                                                offset: 0,
                                                color: '#0F1F45'
                                            },
                                            {
                                                offset: 1,
                                                color: colorList[index]
                                            }
                                        ]
                                    }
                                }
                            }
                        })
                    },
                    {
                        name: '',
                        type: 'bar',
                        barGap: '-100%',
                        barWidth: 4,
                        showBackground: false,
                        borderRadius: [30, 30, 30, 30],
                        label: {
                            position: 'right',
                            distance: 4,
                            show: true,
                            offset: [0, 0],
                            formatter: function (params) {
                                return '{a|' + params.data.value + '}'
                            },
                            rich: {
                                align: 'left',
                                a: {
                                    color: '#00D1FF',
                                    fontSize: 20,
                                    fontFamily: 'UnidreamLED',
                                    fontWeight: 500
                                },
                            }
                        },
                        data: result.map((item, index) => {
                            return {
                                name: item.name,
                                value: item.value,
                                itemStyle: {
                                    borderRadius: [30, 30, 30, 30],
                                    color: {
                                        type: 'linear',
                                        x: 0,
                                        y: 0,
                                        x2: 1,
                                        y2: 1,
                                        colorStops: [
                                            {
                                                offset: 0,
                                                color: '#0F1F45'
                                            },
                                            {
                                                offset: 1,
                                                color: colorList[index]
                                            }
                                        ]
                                    }
                                }
                            }
                        })
                    }
                ]
            }
            myChart.setOption(option);
        }
    }, [props])


    return (
        <div className='right-top'>
            <div className='right-top-big'>
                <div className='right-top-team'>团队</div>
            </div>
            {
                props.teamData.length > 0 && props.teamData ?
                    <div className='right-top-chart' ref={echarts_ref}></div>
                    :
                    <div style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: 18 }}>暂无数据</div>
            }
        </div>
    )
}

export default RightTop

less

css 复制代码
.right-top {
  width: 500px;
  height: 290px;
  margin-bottom: 5px;
  .right-top-big {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 500px;
    .right-top-team {
      width: 320px;
      height: 24px;
      margin-top: 14px;
      color: #ffffff;
      font-weight: 400;
      font-size: 22px;
      font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
      font-style: normal;
      line-height: 20px;
      letter-spacing: 1px;
      text-align: center;
      background: linear-gradient(
        90deg,
        rgba(3, 157, 229, 0) 0%,
        rgba(57, 222, 255, 0.26) 50%,
        rgba(3, 157, 229, 0) 100%
      );
      border-radius: 0px 0px 0px 0px;
    }
  }
  .right-top-chart{
    width: 500px;
    height: 270px;
  }
}

技术栈

React + TypeScript + Less + Echarts

相关推荐
Bruce_Liuxiaowei20 分钟前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo26 分钟前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真29 分钟前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan1 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html
墨林陌1 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端
Moment1 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端
AI宇宙狂想家1 小时前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
Sailing2 小时前
🚀🚀【封闭结束7】Agent 为什么总是“失忆”?从长期记忆到上下文工程的生产实践
前端·人工智能·agent
OpenTiny社区2 小时前
AI 生成的 Vue 代码,终于能直接用了!
前端·vue.js·github
程序员大阳2 小时前
副队长JavaScript教程(67)-Ajax初识:背景、历史与核心概念
javascript·ajax·同步·异步·概念·背景·来是