当前位置: 首页 > news >正文

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

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

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

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

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

{/*折线图统计卡片*/}
<Row gutter={[16, 16]} className="mt-4" justify="center"><Col span={24} md={8}><TotalCardtitle="Total Active Users"increasecount="18,765"percent="2.6%"chartData={[22, 8, 35, 50, 82, 84, 77, 12, 87, 43]}/></Col><Col span={24} md={8}><TotalCardtitle="Total Installed"increasecount="4,876"percent="0.2%"chartData={[45, 52, 38, 24, 33, 26, 21, 20, 6]}/></Col><Col span={24} md={8}><TotalCardtitle="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}><TotalCardtitle="活跃用户"increasecount="18,765"percent="2.6%"chartData={[22, 8, 35, 50, 82, 84, 77, 12, 87, 43]}/></Col><Col span={24} md={8}><TotalCardtitle="安装数量"increasecount="4,876"percent="0.2%"chartData={[45, 52, 38, 24, 33, 26, 21, 20, 6]}/></Col><Col span={24} md={8}><TotalCardtitle="下载数量"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 后台管理系统这个项目中,折线图统计卡片具体是如何实现的,追踪了一下具体的实现代码。

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

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

相关文章:

  • Linux 基本使用和 web 程序部署云端
  • 【Linux】Ubuntu系统挂载NAS文件夹
  • 问题排查复盘
  • C++第十九弹---string模拟实现(下)
  • Python语法(全)
  • 南京观海微电子----升压和降压模块电路解析
  • web及网络基础图文详解
  • 内网渗透(不出网上线CS)
  • HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN单选【21道题】
  • 【教程】Linux部署Android安卓模拟器
  • 蓝桥杯练习系统(算法训练)ALGO-934 序列
  • 文件批量重命名利器:一键轻松替换文本间内容,高效管理文件不再是难题!
  • 【LLM多模态】综述Visual Instruction Tuning towards General-Purpose Multimodal Model
  • MSSM手动段空间管理(Manual Segment Space Management)解析
  • 语雀——云知识库/笔记
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 时间复杂度分析经典问题——最大子序列和
  • [笔记] php常见简单功能及函数
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 78. Subsets
  • Apache的80端口被占用以及访问时报错403
  • Consul Config 使用Git做版本控制的实现
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Flex布局到底解决了什么问题
  • Java方法详解
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS笔记四:作用域、变量(函数)提升
  • PHP CLI应用的调试原理
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • vuex 笔记整理
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 第十八天-企业应用架构模式-基本模式
  • 基于 Babel 的 npm 包最小化设置
  • 简单数学运算程序(不定期更新)
  • 理解在java “”i=i++;”所发生的事情
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 一文看透浏览器架构
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 原生Ajax
  • 在weex里面使用chart图表
  • 自动记录MySQL慢查询快照脚本
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云服务器如何修改远程端口?
  • ​香农与信息论三大定律
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #每天一道面试题# 什么是MySQL的回表查询
  • (3)STL算法之搜索
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (rabbitmq的高级特性)消息可靠性
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)fock函数详解