Slash后台管理系统代码阅读笔记 如何实现环形统计图表卡片?

目前,工作台界面的上半部分已经基本梳理完毕了。

在这里插入图片描述

接下来,我们看看这个环形图卡片是怎么实现的?
在这里插入图片描述

具体代码如下:

{/*图表卡片*/}
<Row gutter={[16, 16]} className="mt-4" justify="center">{/*环形图表卡片*/}<Col span={24} md={12} lg={8}><CurrentDownload /></Col>{/*折线图表卡片*/}<Col span={24} md={12} lg={16}><AreaDownload /></Col>
</Row>

这里的Row和Col都是从antd这个样式库进行导入的:

import { Col, Row, Space } from 'antd';

采用的是一行两列的布局,而且是响应式的。

我们在这篇文章中主要分析环形图表卡片是怎么实现的:

<CurrentDownload />

我们追踪一下代码,关于代码我已经配了详细的中文注释,大家看代码的时候配合注释看应该会稍微好点:

import { Typography } from 'antd';import Card from '@/components/card';
import Chart from '@/components/chart/chart';
import useChart from '@/components/chart/useChart';// 环形图表卡片:当前下载量
export default function CurrentDownload() {return (// 这是一个自定义的卡片:import Card from '@/components/card';<Card className="flex-col">{/*标题*/}<header className="self-start"><Typography.Title level={5}>当前下载量</Typography.Title></header>{/*主体:核心图表*/}<main><ChartDonut /></main></Card>);
}// 用的是一个假数据
const labels = ['Mac', 'Window', 'IOS', 'Android']
const series = [44, 55, 13, 43]// 环形图表
function ChartDonut() {// 属性配置const chartOptions = useChart({labels: labels,stroke: {show: false,},legend: {position: 'bottom',horizontalAlign: 'center',},tooltip: {fillSeriesColor: false,},chart: {width: 240,},plotOptions: {pie: {donut: {size: '90%',labels: {total: {fontSize: '12px',},value: {fontSize: '18px',fontWeight: 700,},},},},},});// 图表,这里用的是Apex Chart进行最终渲染return <Chart type="donut" series={series} options={chartOptions} height={360} />;
}

在这个代码中,有个自定义的Card组件,这个我们之前没有详细的分析,那么这次我们追踪一下代码,看看,Card这个组件是如何实现的。

import { CSSProperties, ReactNode } from 'react';import { useSettings } from '@/store/settingStore';
import { useThemeToken } from '@/theme/hooks';import { ThemeMode } from '#/enum';// 卡片组件的属性
type Props = {children?: ReactNode; // 子元素,支持JSXclassName?: string; // 类名style?: CSSProperties; // 自定义样式
};// 自定义的卡片组件
export default function Card({ children, ...other }: Props) {// 获取背景颜色const { colorBgContainer } = useThemeToken();// 获取主题模式const { themeMode } = useSettings();// 计算阴影const boxShadow: { [key in ThemeMode]: string } = {light: 'rgba(145, 158, 171, 0.2) 0px 0px 2px 0px, rgba(145, 158, 171, 0.12) 0px 12px 24px -4px',dark: 'rgba(0, 0, 0, 0.2) 0px 0px 2px 0px, rgba(0, 0, 0, 0.12) 0px 12px 24px -4px',};// 组件核心元素和样式,JSXreturn (<divstyle={{backgroundColor: colorBgContainer,backgroundImage: 'none',boxShadow: boxShadow[themeMode],transition: `box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms`,borderRadius: '16px',padding: '24px',overflow: 'hidden',position: 'relative',display: 'flex',alignItems: 'center',}}{...other}>{children}</div>);
}

这个自定义的卡片实现了根据主题模式动态切换样式的效果。背景颜色,阴影也是动态计算出来的。

最终的效果如下:
在这里插入图片描述

这里有个问题,就是这个环形图有四种属性,但是看上去只有两种颜色,不太好区分,那么能不能自定义颜色呢?

这个留给大家去做吧,这个笔记暂时就到这里。

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

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

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

相关文章

U盘引导盘制作Rufus v4.5.2180

软件介绍 Rufus小巧实用开源免费的U盘系统启动盘制作工具和格式化U盘的小工具&#xff0c;它可以快速将ISO镜像文件制作成可引导的USB启动安装盘&#xff0c;支持Windows或Linux启动&#xff0c;堪称写入镜像速度最快的U盘系统制作工具。 软件截图 更新日志 github.com/pbat…

嵌入式全栈开发学习笔记---C语言笔试复习大全24

目录 内存管理 内存分配 堆和栈的区别&#xff1f;&#xff08;面试重点&#xff09; 申请内存的函数 malloc realloc free gcc工具链 编译的过程&#xff08;面试重点&#xff09; 第一步&#xff0c;预处理&#xff1a; 第二步&#xff0c;编译&#xff1a; 第三…

【Spring Boot】使用 Redis + Cafeine 实现二级缓存

使用 Redis Caffeine 实现二级缓存可以有效提升应用的性能和缓存的命中率。Caffeine 是一个高效的 Java 本地缓存库&#xff0c;而 Redis 是一个分布式缓存解决方案。通过将两者结合&#xff0c;Caffeine 作为一级缓存用于快速访问常用数据&#xff0c;Redis 作为二级缓存用于…

解决LabVIEW通过OPC Server读取PLC地址时的错误180121602

在使用LabVIEW通过OPC Server读取PLC地址时&#xff0c;若遇到错误代码180121602&#xff0c;建议检查网络连接、OPC Server和PLC配置、用户权限及LabVIEW设置。确保网络畅通&#xff0c;正确配置OPC变量&#xff0c;取消缓冲设置以实时读取数据&#xff0c;并使用诊断工具验证…

簡述vue常用指令

Vue.js 提供了许多内置指令&#xff0c;这些指令用于在模板中添加特殊功能。以下是一些 Vue 的常用内置指令的简要说明&#xff1a; v-text&#xff1a; 更新元素的 textContent。示例&#xff1a;<span v-text"message"></span> v-html&#xff1a; 更…

2 使用香橙派AIpro报错 No module named ‘acllite utils‘

当使用jupyter运行香橙派的notebooks下面的案例的时候启动使用jupyter lab 然后自动跳转到jupyter页面。如下图: 这是自动跳转过来的。然后运行下面的包的导入后报错: 报错为No module named ‘acllite utils’,那么我们打开notebooks文件夹下面的start_notebooks.sh文件:…

【C++练级之路】【Lv.21】C++11——列表初始化和声明

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、列表初始化1.1 内置类型1.2 结构体或类1.3 容器 二、声明2.1 auto2.2 decltype2.3 nullptr 三、STL的…

A*算法搜索的路径是最优的么?

A * 算法&#xff08;A* Search Algorithm&#xff09;是一种启发式搜索算法&#xff0c;它旨在找到从起点到终点的最短路径。在满足以下条件时&#xff0c;A*算法能够保证找到最优路径&#xff1a; 启发式函数的一致性&#xff08;Consistency&#xff09;或可采纳性&#xf…

从“反超”到“引领”,中国卫浴品牌凭何遥遥领先?

作者 | 曾响铃 文 | 响铃说 前不久&#xff0c;第28届中国国际厨房、卫浴设施展览会(以下简称“中国国际厨卫展”)在上海如期举行&#xff0c;就结果来说真的让人大开眼界。 冲水声比蚊子声更小的马桶、能化身无感交互平台的魔镜柜、可以语音交互的淋浴器&#xff0c;这些“…

Keli5烧写STM32程序时出现ST-LINK USB communication error错误(USB 通信错误)

1错误原图 2错误原因 前提驱动安装正确 原因1 usb接触不良&#xff08;极少出现&#xff09; 解决方法 更换USB线 还不行连下载器一起更换 原因2&#xff08;出现概率比较大&#xff09; 下载器的固件出现问题或下载器固件版本与Keli5的版本不匹配 解决方法 在Keli5的…

[音视频]ffmepg常用命令

ffmpeg 在音视频的世界里&#xff0c;ffmpeg可是如雷贯耳的存在&#xff0c;学习音视频开发&#xff0c;ffmpeg是必须掌握的技能 常用命令 保存m3u8文件 ffmpeg -i http://xxxxx/test.m3u8 -c copy result.mp4

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月26日,星期日

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月26日 星期日 农历四月十九 1、 医保局&#xff1a;支持将符合条件的村卫生室纳入医保定点&#xff0c;方便农村居民就医。 2、 网传养老金储备严重不足&#xff1f;央视辟谣&#xff1a;这笔钱二十多年来从未动用过&a…

搭建企业级AI应用的流程

搭建企业级AI应用的流程是一个复杂且系统化的工程&#xff0c;它需要从多个维度出发&#xff0c;确保最终的应用既符合企业的业务需求&#xff0c;也具备高效、稳定和可扩展的特性。以下是详细的步骤&#xff1a; 初步接触与需求分析是整个项目的基础。在这一阶段&#xff0c;我…

【C++题解】1698. 请输出带有特殊尾数的数

问题&#xff1a;1698. 请输出带有特殊尾数的数 类型&#xff1a; 题目描述&#xff1a; 请输出1∼n 中所有个位为 1、3、5、7中任意一个数的整数&#xff0c;每行 1 个。( n<1000 ) 比如&#xff0c;假设从键盘读入 20&#xff0c;输出结果如下&#xff1a; 1 3 5 7 11 1…

LLMs之PEFT之Llama-2:《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读

LLMs之PEFT之Llama-2&#xff1a;《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读 导读&#xff1a;该论文比较了LoRA与完全微调在代码与数学两个领域的表现。 背景问题&#xff1a;微调大规模语言模型需要非常大的GPU内存。LoRA这一参数高效微调方…

OpenStack平台Keystone组件的使用

1. 规划节点 安装基础服务的服务器规划 IP地址 主机名 节点 192.168.100.10 controller Openstack控制节点 2. 基础准备 使用机电云共享的单节点的openstack系统&#xff0c;自行修改虚拟网络编辑器、网络适配器&#xff0c;系统用户名&#xff1a;root&#xff0c;密…

【Basic】Upload-Labs-Linux

文章目录 前言Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16解题感悟 前言 美好的一天从刷题开始 Pass-01 我淦20道题&#xff1f;&#xff1f;&#xff1f;一道一道来吧 先看第一道题 先在home里搞一…

原生标签WebComponent

文章目录 介绍一、web Component二、怎么使用三、在Vue中使用使用场景 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 介绍 平常浏览各个网站过程中&#xff0c;经常遇到的一种现象&#xff1a;页面广告。 这种广告按照来源可分为两种&…

蜜罐技术是一种什么防御技术?实现原理是什么?

前言&#xff1a;蜜罐技术的出现改变了这种被动态势&#xff0c;它通过吸引、诱骗攻击者&#xff0c;研究学习攻击者的攻击目的和攻击手段&#xff0c;从而延缓乃至阻止攻击破坏行为的发生&#xff0c;有效保护真实服务资源。 自网络诞生以来&#xff0c;攻击威胁事件层出不穷…

簡述Vue 2.0 响应式数据的原理

Vue 2.0 响应式数据的原理主要基于以下几个关键点&#xff1a; 数据劫持与Object.defineProperty&#xff1a; Vue 2.0 使用 Object.defineProperty 方法来劫持对象的属性&#xff0c;为其添加 getter 和 setter 方法。当数据被访问或修改时&#xff0c;这些 getter 和 setter …