Slash后台管理系统源码阅读笔记 后面面板中的折线图统计卡片是怎么实现的?

之前的笔记发表在博客和公众号以后,得到了一部分同学的喜爱的认可,所以今天继续。

目前这个管理系统的代码已经处理了一小部分:
在这里插入图片描述

接下来,我们看看第二栏那三个折线图统计卡片是怎么实现的。

这三个卡片还是使用的 antd 一行三列的布局方式,具体代码如下:

{/*折线图统计卡片*/}
<Row gutter={[16, 16]} className="mt-4" justify="center">
  <Col span={24} md={8}>
    <TotalCard
      title="Total Active Users"
      increase
      count="18,765"
      percent="2.6%"
      chartData={[22, 8, 35, 50, 82, 84, 77, 12, 87, 43]}
    />
  </Col>

  <Col span={24} md={8}>
    <TotalCard
      title="Total Installed"
      increase
      count="4,876"
      percent="0.2%"
      chartData={[45, 52, 38, 24, 33, 26, 21, 20, 6]}
    />
  </Col>

  <Col span={24} md={8}>
    <TotalCard
      title="Total Downloads"
      increase={false}
      count="678"
      percent="0.1%"
      chartData={[35, 41, 62, 42, 13, 18, 29, 37, 36]}
    />
  </Col>
</Row>

首先,我们将标题改一下:

<Row gutter={[16, 16]} className="mt-4" justify="center">
  <Col span={24} md={8}>
    <TotalCard
      title="活跃用户"
      increase
      count="18,765"
      percent="2.6%"
      chartData={[22, 8, 35, 50, 82, 84, 77, 12, 87, 43]}
    />
  </Col>

  <Col span={24} md={8}>
    <TotalCard
      title="安装数量"
      increase
      count="4,876"
      percent="0.2%"
      chartData={[45, 52, 38, 24, 33, 26, 21, 20, 6]}
    />
  </Col>

  <Col span={24} md={8}>
    <TotalCard
      title="下载数量"
      increase={false}
      count="678"
      percent="0.1%"
      chartData={[35, 41, 62, 42, 13, 18, 29, 37, 36]}
    />
  </Col>
</Row>

此时,页面渲染效果如下:
在这里插入图片描述

接着,我们看看统计卡片是怎么实现的:

import Card from '@/components/card';
import Chart from '@/components/chart/chart';
import useChart from '@/components/chart/useChart';
import { SvgIcon } from '@/components/icon';

// 属性
type Props = {
  title: string; // 标题
  increase: boolean; //  是否增长
  percent: string; // 百分比
  count: string; // 数量
  chartData: number[]; // 图表数据
};

// 统计卡片组件
export default function TotalCard({ title, increase, count, percent, chartData }: Props) {
  return (
    <Card>
      <div className="flex-grow">
        {/*标题*/}
        <h6 className="text-sm font-medium">{title}</h6>
        {/*根据是否增长,动态显示icon图标*/}
        <div className="mb-2 mt-4 flex flex-row">
          {increase ? (
            <SvgIcon icon="ic_rise" size={24} color="rgb(34, 197, 94)" />
          ) : (
            <SvgIcon icon="ic_decline" size={24} color="rgb(255, 86, 48)" />
          )}
          <div className="ml-2">
            <span>{increase ? '+' : '-'}</span>
            <span>{percent}</span>
          </div>
        </div>
        {/*数量*/}
        <h3 className="text-2xl font-bold">{count}</h3>
      </div>
      {/*折线图*/}
      <ChartLine data={chartData} />
    </Card>
  );
}

// 折线图组件
function ChartLine({ data }: { data: number[] }) {
  const series = [
    {
      name: '',
      data,
    },
  ];
  // 折线图选项
  const chartOptions = useChart({
    tooltip: {
      x: {
        show: false,
      },
    },
    xaxis: {
      labels: {
        show: false,
        showDuplicates: false,
      },
      tooltip: {
        enabled: false,
      },
      crosshairs: {
        show: false,
      },
    },
    yaxis: {
      labels: {
        show: false,
      },
      tooltip: {
        enabled: false,
      },
      crosshairs: {
        show: false,
      },
    },
    grid: {
      show: false,
    },
  });

  // 渲染图表
  return <Chart type="line" series={series} options={chartOptions} width={120} />;
}

在 ChartLine这个组件中,我们最终使用了Chart这个组件进行图表渲染,所以我们进一步看看Chart这个组件是怎么实现的。

import { memo } from 'react';
import ApexChart from 'react-apexcharts';

import { useSettings } from '@/store/settingStore';
import { useThemeToken } from '@/theme/hooks';

import { StyledApexChart } from './styles';

import type { Props as ApexChartProps } from 'react-apexcharts';

// 通用图表组件
function Chart(props: ApexChartProps) {
  const { themeMode } = useSettings();
  const theme = useThemeToken();
  return (
    // 使用CSS样式组件
    <StyledApexChart $thememode={themeMode} $theme={theme}>
      {/*最终使用ApexChart进行渲染*/}
      <ApexChart {...props} />
    </StyledApexChart>
  );
}

export default memo(Chart);

我们可以看到,最终,使用的是 apex chart 这个库进行渲染的。

这个图表库的官网如下:https://apexcharts.com/
在这里插入图片描述

这个图标库同时支持JS,Angular,Vue,React进行使用,相关的DEMO地址如下:https://apexcharts.com/react-chart-demos/

在这里插入图片描述

如果大家感兴趣,可以给我点个赞,然后留言评论,留言的人多的话我可以给大家仔细的出一个这个库的使用说明以及一套视频教程,当然也可以报名跟我学习直播课或者私教课。

好了,这个笔记暂时写到这里。

在这个笔记中,我们主要讲解了 Slash 后台管理系统这个项目中,折线图统计卡片具体是如何实现的,追踪了一下具体的实现代码。

具体代码的实现细节,我在之前的笔记中有一些中文注释辅助大家查看。

创作不易,麻烦给个打赏,或者给个点赞和收藏,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】文件操作(超级详细)

如果没有文件&#xff0c;我们写的程序的数据都存储在内存中&#xff0c;当程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;下次再运行程序&#xff0c;已经看不到上次运行的数据了&#xff0c;而为了将数据持久性的保存&#xff0c;就需要使用文件。 一、…

什么是Capto刀柄,一起来认识一下

大家好&#xff0c;今天咱们不聊齿轮&#xff0c;说一说一款刀柄的相关内容。目前&#xff0c;高速加工中心的主轴转速可以达到10,000——50,000r /min &#xff0c;极大地提高了生产率。高速加工工具系统的主要作用是保证刀具在机床主轴中的精确定位&#xff0c;将主轴的运动和…

请把「睡一个好觉」,当成一天里最重要的事来管理

我发现许多人都有这么一种情况&#xff1a;明明知道睡眠很重要&#xff0c;但却总是有意无意地熬夜。 比如&#xff1a; 给自己排了太多的学习和工作量&#xff0c;一不小心就到了凌晨一两点&#xff1b; 总觉得过去的一天什么都没干&#xff0c;宁愿在网上闲逛&#xff0c;也不…

数据持久化第六课-ASP.NET运行机制

数据持久化第六课-ASP.NET运行机制 一.预习笔记 1.动态网页的工作机制通常分为以下几个阶段&#xff1a; 1&#xff09;使用动态Web开发技术编写Web应用程序&#xff0c;并部署到Web服务器。 2&#xff09;客户端通过在浏览器中输入地址&#xff0c;请求动态页面。 3&#…

一个投稿好方法让你的文章早日发表

作为一名单位信息宣传员,我初入此行时,满腔热情,怀揣着传播单位价值、展示团队风采的理想,一头扎进了稿件撰写的海洋。我的目标很简单,就是通过文字的力量,让外界听到我们的声音,感受到我们的活力。然而,理想很丰满,现实却给我上了生动的一课。 起初,我遵循传统路径,选择了一家…

【ai】pycharm设置软件仓库编译运行基于langchain的chatpdf

联想笔记本 y9000p创建python工程: 使用langchain支持openai的向量化embedding安装软件包 发现没有openai ,添加软件仓库打开工具窗口 点击设置

23种设计模式之策略模式

策略模式详解&#xff1a;模式简介、动机、结构及应用 一、策略模式简介1.1 定义1.2 模式类型1.3 主要作用1.4 优点1.5 缺点 二、模式动机三、模式结构四、策略模式的实现4.1 步骤一&#xff1a;定义策略接口4.2 步骤二&#xff1a;实现具体策略类4.3 步骤三&#xff1a;创建上…

智能未来,触手可及,畅享移动云

目录 一、简介 二、移动云强大优势 1. 强大的网络基础设施 2. 可靠服务 3. 丰富产品线 4. 技术应用 5. 优惠价格策略 三、多商对比 网络优势 四、移动云的未来发展 五、实战应用 5.1 服务器选购 ​编辑5.2 服务器启动 5.3 实例操作 六、移动云的服务优势 6.1 客…

AppInventor2 代码调试方法,99%的人可能不知道这种方式!

AppInventor2 基本上所有调试App的前提是安装好AI伴侣&#xff0c;并与AI伴侣连接后进行&#xff0c;我们在设计界面的每次改动&#xff0c;都会实时的反映在AI伴侣中。 AI伴侣可以运行在手机上&#xff0c;也可以是安卓模拟器。 AI伴侣具体的安装及连接步骤请参考&#xff1…

Redisson集成SpringBoot

前言&#xff1a;Redisson集成SpringBoot主要有两种方式&#xff0c;一个是使用redisson-spring-boot-starter依赖&#xff08;优先推荐&#xff09;&#xff0c;毕竟springboot主打的就是约定大于配置&#xff0c;这个依赖就是为springboot准备的。 再一种方式就是引入rediss…

openflow协议抓包分析

1、准备实验拓扑&#xff1a; 在Mininet环境中创建一个简单的SDN拓扑&#xff0c;包括控制器、交换机、主机等。 确保拓扑能够正常运行&#xff0c;SDN交换机与控制器建立连接。 采用主机Ubuntu22.04主机&#xff0c;IP地址是192.168.87.130&#xff0c;安装opendaylight控制…

数据集007:垃圾分类数据集(含数据集下载链接)

数据集简介 本数据拥有 训练集&#xff1a;43685张&#xff1b; 验证集&#xff1a;5363张&#xff1b; 测试集&#xff1a;5363张&#xff1b; 总类别数&#xff1a;158类。 部分代码&#xff1a; 定义数据集 class MyDataset(Dataset):def __init__(self, modetrain, …

大模型PEFT(一)之推理实践学习记录

1. 简介 多种模型: LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemmha、Baichuan、ChatGLM、Phi等等。集成方法:(增量)预训练、指令监督微调、奖励模型训练、PPO训练和DPO训练。多种精度:32比特全参数微调、16比特冻结微调、16比特LORA微调和基于AQLM/AWQ/GPTQ/LLM.int8 的2/4/8…

使用 Elastic AI assistant for Observability 来分析日志

在今天的文章中&#xff0c;我们来参考之前的文章 “Elastic AI Assistant for Observability 和 Microsoft Azure OpenAI 入门” 来使用 Elastic AI assistant 分析日志。在本文章中&#xff0c;我们不使用 Azure clould。这样我们之间来进入主题&#xff0c;以免失去注意力。…

基于Zynq 7000 SoC的迁移设计

基于Zynq 7000 SoC的迁移设计 Vivado IDE工具使用IP集成器进行嵌入式开发。各种IP Vivado IDE IP目录中提供&#xff0c;以适应复杂的设计。您也可以添加 自定义IP到IP目录。 您可以将基于Zynq 7000平台处理器的设计迁移到Vivado design Suite中 使用以下步骤。 1.生成系统基础…

模型实战(20)之 yolov8分类模型训练自己的数据集

yolov8分类模型训练自己的数据集 yolov8,一个实时快速的端到端的集检测、分割、分类、姿态识别于一体的视觉算法库/框架本文将给出yolov8 分类模型的数据集制作格式及训练流程 1. 环境搭建 关于虚拟环境的搭建真的是老生常谈了,给出一个简单的搭建流程吧#新建虚拟环境 conda …

Linux 如何用上次的checkpoint文件dist_train.sh 接着训练【mmdetection】

在Linux环境下&#xff0c;如果你想要用上一次的checkpoint文件继续训练&#xff0c;你可以在你的dist_train.sh脚本中设置--resume_from参数。这个参数指定了checkpoint文件的路径&#xff0c;训练会从该文件的状态继续进行。 例如&#xff0c;如果你的checkpoint文件名为las…

【吊打面试官系列】Java高并发篇 - ConcurrentHashMap 的并发度是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【ConcurrentHashMap 的并发度是什么?】面试题&#xff0c;希望对大家有帮助&#xff1b; ConcurrentHashMap 的并发度是什么? ConcurrentHashMap 的并发度就是 segment 的大小&#xff0c;默认为 16&#xff0c; 这意味着最多同时…

考公事业编

一天时间就能考完。上午行测 &#xff0c;下午申论。 省考国考基本一模一样。 行测基本都是客观的题目。都是选择题。 130道选择。很多计算都是初中题目。 申论是主观题。 行测申论 行测&#xff1a;

【Android14 ShellTransitions】(四)Transition收集动画参与者

这一节的内容在WMCore中&#xff0c;现在Transition已经走到COLLECTING状态了&#xff0c;并且可以收集动画参与者了。 那么Transition是在什么时候去收集动画参与者&#xff1f;回到我们最初的ActivityStarter.startActivityUnchecked&#xff1a; 在调用了TransitionControl…