vue2 项目中 echarts 实现排班 效果

news2024/9/22 15:29:23

效果

在这里插入图片描述

代码

<template>
  <div class="index">
    <div ref="scheduleChart" style="width: 100%; height: 600px"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";

export default {
  name: "ScheduleChart",
  data() {
    return {
      scheduleData: [
        {
          name: "张凯松",
          shifts: [{ start: 3, end: 5, label: "方明 | 苏N977警" }],
        },
        {
          name: "顾思远",
          shifts: [{ start: 6, end: 10, label: "杨军 | 苏N977警" }],
        },
        {
          name: "刘政",
          shifts: [{ start: 10, end: 17, label: "周军 | 苏N977警" }],
        },
        {
          name: "陈立梁",
          shifts: [{ start: 12, end: 15, label: "朱洁 | 苏N977警" }],
        },
        {
          name: "杨军",
          shifts: [{ start: 0, end: 4, label: "杨军 | 苏N977警" }],
        },
        {
          name: "周军",
          shifts: [{ start: 4, end: 9, label: "周军 | 苏N977警" }],
        },
        {
          name: "朱洁",
          shifts: [{ start: 9, end: 13, label: "朱洁 | 苏N977警" }],
        },
        {
          name: "方明",
          shifts: [{ start: 13, end: 18, label: "方明 | 苏N977警" }],
        },
      ],
      XData: [
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
        20, 21, 22, 23,
      ],
    };
  },
  mounted() {
    this.initChart();
  },
  methods: {
    initChart() {
      this.chart = echarts.init(this.$refs.scheduleChart);
      const yAxisData = this.scheduleData.map((item) => item.name);

      const seriesData = this.scheduleData.map((item, index) => ({
        name: item.name,
        type: "custom",
        renderItem: (params, api) => {
          const categoryIndex = api.value(0);
          const start = api.coord([api.value(1), categoryIndex]);
          const end = api.coord([api.value(2), categoryIndex]);
          const height = api.size([0, 1])[1] * 0.6;

          return {
            type: "group",
            children: [
              {
                type: "rect",
                shape: {
                  x: start[0],
                  y: start[1] - height / 2,
                  width: end[0] - start[0],
                  height: height,
                },
                style: api.style(),
              },
              {
                type: "text",
                style: {
                  text: api.value(3),
                  x: (start[0] + end[0]) / 2,
                  y: start[1],
                  fill: "white",
                  textAlign: "center",
                  textVerticalAlign: "middle",
                  fontSize: 12,
                },
              },
            ],
          };
        },
        data: item.shifts.map((shift) => [
          index,
          shift.start,
          shift.end,
          shift.label,
        ]),
        itemStyle: {
          color: this.getColor(item.name),
        },
      }));

      const option = {
        tooltip: {
          trigger: "item",
          formatter: (params) => {
            return `${params.value[3]}<br/>${params.value[1]}:00 - ${params.value[2]}:00`;
          },
        },
        grid: {
          left: "2%",
          right: "2%",
          bottom: "3%",
          top: "5%",
          containLabel: true,
        },
        xAxis: [
          {
            type: "category",
            data: this.XData,
            axisLabel: {
              formatter: "{value}",
              color: "white",
              interval: 0,
            },
            axisLine: {
              show: true,
              lineStyle: {
                color: "white",
              },
            },
            axisTick: {
              // show: true,
              alignWithLabel: true,
            },
            splitLine: {
              show: true,
              lineStyle: {
                color: "gray",
              },
            },
            boundaryGap: false,
          },
          {
            type: "category",
            data: this.XData,
            axisLabel: {
              formatter: "{value}",
              color: "white",
              interval: 0,
            },
            axisLine: {
              show: true,
              lineStyle: {
                color: "white",
              },
            },
            axisTick: {
              show: false,
              alignWithLabel: true,
            },
            position: "top",
            // splitLine: {
            //   show: true,
            //   lineStyle: {
            //     color: "white",
            //   },
            // },
            boundaryGap: false,
          },
        ],
        yAxis: {
          type: "category",
          data: yAxisData,
          axisLabel: {
            color: "white",
          },
          axisLine: {
            show: true,
            lineStyle: {
              color: "white",
            },
          },
          axisTick: {
            show: true,
          },
        },
        series: seriesData,
      };

      this.chart.setOption(option);
    },
    getColor(name) {
      const colors = [
        "#FF6347",
        "#4682B4",
        "#32CD32",
        "#FFD700",
        "#FF69B4",
        "#8A2BE2",
        "#7B68EE",
        "#6A5ACD",
      ];
      const index = this.scheduleData.findIndex((item) => item.name === name);
      return colors[index % colors.length];
    },
  },
};
</script>

<style scoped>
.index {
  background: #091e50;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次微信小程序逆向

扫码领取网安教程 遇到瓶颈了&#xff0c;不知道该干什么&#xff0c;突然想到学校的小程序 闲来无事就看一看 抓包下来的数据是这样的&#xff0c;嗯&#xff0c;下机&#xff08;hhh 一、反编译程序 加密嘛&#xff0c;之前抓了看到是加密就放弃了&#xff0c;现在重新弄一…

下一代 RAG 技术来了!微软正式开源 GraphRAG

省流总结 优点&#xff1a;检索准确度高 缺点&#xff1a;单个19w字构建用时4分30s、gpt4 token花费12美元 概述 7 月 2 日&#xff0c;微软开源了 GraphRAG&#xff0c;一种基于图的检索增强生成 (RAG) 方法&#xff0c;可以对私有或以前未见过的数据集进行问答。在 GitHub…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步&#xff1a;准备工作 1.1 安装必要的库 小李的理解&#xff1a; 1.2 导入库 小李的理解&#xff1a; 第二步&#xff1a;生成和准备数据 2.1 生成随机股票数据 小李的理解&#xff1a; 2.2 数据探索与可视化 小李的理解&#xff1a; 2.3 数据处理 小李…

Docker使用基础—环境搭建

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …

力扣爆刷第161天之TOP100五连刷71-75(搜索二叉树、二维矩阵、路径总和)

力扣爆刷第161天之TOP100五连刷71-75&#xff08;搜索二叉树、二维矩阵、路径总和&#xff09; 文章目录 力扣爆刷第161天之TOP100五连刷71-75&#xff08;搜索二叉树、二维矩阵、路径总和&#xff09;一、98. 验证二叉搜索树二、394. 字符串解码三、34. 在排序数组中查找元素的…

姜镇主任科普:号称“大脑杀手”的脑胶质瘤是一种什么样的肿瘤?

面对诸如头痛、频繁呕吐、记忆力显著减退等“轻微症状”&#xff0c;许多人往往掉以轻心&#xff0c;将其归咎于日常压力或不良作息习惯所致&#xff0c;殊不知这样的忽视可能正是身体发出的警示信号&#xff0c;隐藏着脑胶质瘤这一严重疾病的潜在风险。这些看似不起眼的症状&a…

几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)回归预测,python预测全家桶再更新!...

截止到本期&#xff0c;一共发了9篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下&#xff1a; 1.终于来了&#xff01;python机器学习预测全家桶 2.机器学习预测全家桶-Python&#xff0c;一次性搞定多/单特征输入&#xff0c;多/单步预测&#xff01;最强模板&a…

Docker部署Django+MySQL+Redis+Nginx+uWSGI+Celery(超详细)

一、知识储备 经过我们之前学习的Docker相关知识&#xff0c;现在我们来进行实战&#xff0c;以下介绍如何通过Docker Compose部署Django项目&#xff1a; 先前知识: Docker学习笔记&#xff08;一&#xff09;概念理解-CSDN博客 Docker学习笔记&#xff08;二&#xff09;…

20240708 Transformer

如何从浅入深理解transformer&#xff1f; - 知乎 1.出现了一些基于自监督的方法&#xff0c;这包括基于对比学习的方法如MoCo和SimCLR&#xff0c;和基于图像掩码的方法如MAE和BeiT 2、Transformer结构及其应用详解--GPT、BERT、MT-DNN、GPT-2 - 知乎 3. "Decoder-o…

教育相关知识

教育的含义 教育的基本要素 教育的属性 教育的功能 教育的起源 教育的发展

redis-cli 连接Redis

Redis-cli介绍 redis-cli 是原生 Redis 自带的命令行工具&#xff0c;您可以在云主机或本地设备上通过 redis-cli 连接 Redis 数据库&#xff0c;进行数据管理。 redis-cli 客户端的使用方法&#xff0c;请参考官方文档。 连接命令 redis-cli -h <redis_instance_address…

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏&#xff0c;以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级&#xff0c;逐步增强自己的角色实力&#xff0c;最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

这款拖拽式大屏设计神器,太惊艳了!收藏吧!

概念​ 可视化大屏是当今信息时代的一种重要技术工具&#xff0c;它以大屏幕为显示终端&#xff0c;通过图形、图表、地图等形式将大量数据和信息直观地呈现出来&#xff0c;帮助用户更好地理解和分析数据。 JVS智能BI的可视化大屏从界面布局、色彩搭配&#xff0c;到图表类型…

Vue CoreVideoPlayer 一款基于 vue.js 的轻量级、优秀的视频播放器组件

大家好,我是程序视点的小二哥!今天小二哥给大家推荐一款非常优秀的视频播放组件 效果欣赏 介绍 Vue-CoreVideoPlayer 一款基于vue.js的轻量级的视频播放器插件。 采用Adobd XD进行UI设计&#xff0c;支持移动端适配,不仅功能强大&#xff0c;颜值也是超一流&#xff01; Vue-…

奇异值分解(SVD)关键概念以及物理意义

本文主要用来讨论奇异值分解&#xff08;SVD)的一些核心概念以及它的物理意义和实际意义&#xff0c;说到底就是&#xff1a; 这东西有什么用&#xff1f;是怎么起作用的&#xff1f; 我们按顺序一步步来拆解这些问题并且分析。 引言 之前也只是模棱两可地了解过SVD的功能&…

计算机网络知识汇总

目录 前言 概述 1、互联网的组成 2、端系统之间的两种通信方式 1、客户-服务器方式 2、对等连接方式&#xff08;P2P&#xff09; 3、交换技术 4、时延 5、利用率 6、协议 7、计算机网络体系结构 8、ISP 物理层 链路层 网络层 传输层 应用层 前言 最近准备找工作…

ARL联动AWVS实现自动化漏洞扫描

0x01 前言 很多场景下需要大范围的扫描漏洞和快速排查互联网暴露面的漏洞&#xff0c;需要使用这种自动化的手段&#xff0c;常规渗透测试的找互联网暴露面是&#xff0c;域名>子域名>IP>C段>端口&#xff0c;可以手动收集&#xff0c;也可以借助一些网络搜索引擎…

AI直播手机APP震撼发布!3大场景直播,60秒一键开播!

无需繁琐准备&#xff0c;无需复杂操作&#xff0c;60 秒在抖音及其他平台一键开播&#xff0c;青否数字人AI直播APP正式发布&#xff01; 3大AI直播类型&#xff0c;6大核心 AIGC 技术&#xff0c;让新手小白也能轻松搞定数字人在全平台直播&#xff0c;并且有效规避违规风险&…

Pytorch模型的推理如何编写-以猫狗分类为例

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

苹果电脑压缩软件哪个好用一些? mac电脑用什么压缩软件 mac电脑压缩文件怎么设置密码

压缩软件是Mac电脑必不可少的工具&#xff0c;虽然Mac系统自带了一款“归档实用工具”&#xff0c;但是其功能实在匮乏&#xff0c;若你需要加密压缩文件或者把文件压缩成指定格式&#xff0c;那么该工具无法满足你的需求。Mac用户应该怎么选择压缩软件呢&#xff1f;本文就来告…