从零打造一款基于Nextjs+antd5.0的中后台管理系统

hi, 大家好,我是徐小夕,最近在研究nextjs, 为了更全面复盘总结nextjs, 我写了一个开箱即用的基于 next 的后台管理系统, 供大家学习参考.

b702e8a185ef8256865fc378c3ef5819.png

github地址:https://github.com/MrXujiang/next-admin

演示地址:http://next-admin.com

接下来我就和大家介绍一下 Next-Admin 这款中后台管理系统。

为什么要用Nextjs

18eba1f788d2c6c71492a40faa47e512.png

首先从官网上我们可以了解到 Next.js 提供了先进的服务端渲染(SSR)和静态生成(SSG)能力,使得我们能够在服务器上生成动态内容并将其直接发送给客户端,从而大大减少首次加载的等待时间。这样可以提高网站的性能搜索引擎优化(SEO)以及用户体验

在深度使用 next.js 开发应用之后,我总结了以下使用它的优点:

  • 支持高效的服务端渲染和静态页面生成能力

  • 规则化的路由系统(保证页面更有组织层次,能更好的管理多页面)

  • 规范且颗粒度的API开发模式(更好的规范接口和业务调用)

  • 支持复杂系统的搭建(优雅的SPA单页模式和MPA多页面模式)

  • 部署和开发成本很低(前后端同构更优雅)

所以基于以上体验和思考,我决定在后面的产品和系统上都采用 Next 来开发。

Next-Admin 特点

3bd3bce7cb45e9db124bab77f8a1fcfa.png

去年值得高兴的事情是 antd5.0 发布了,从组件UI和设计架构上都有了很大的改进,尤其是 Design Token . 有了它我们可以轻松的实时切换网站主题风格, 并且在应用里复用 antd 的设计语言。

0aebe86dd54c6b282ffb7dd9dc201242.png

所以为了更好的方便国内开发者使用 nextjs 开发中后台系统,我打算使用 antd5.0 作为UI库来开发, 大家也可以在 Next-Admin 的基础上改造成自己的中后台系统。

接下来就来介绍一下 Next-Admin 的特点。

1. 内置基础的登录注册页面

149976731a831e06f048a81c020a2470.png

2. 内置可拖拽的数据报表

b992ef61c56b5c2866e7b1bda77de131.png

在内置常用数据看板的同时我还支持了看板拖拽功能, 让用户更高效的消费数据。

3. 内置监控大屏页面

9e186a715dccd54042c6fb2c66846261.png

4. 内置常用的搜索列表

2924f0830ce01be8581bb818337d2284.png

5. 支持内嵌第三方系统

f7426ccfe1f2141651d6604649313a8b.png

上图演示的是内嵌表单搭建引擎 https://turntip.cn/formManager 的案例。

6. 内置空白Landing页面

a9e4a779816175396782867107fceca7.png

7. 支持国际化 & 一键换肤

暗模式:fce458650885bc0d18c032cbc1a85b07.png

明模式:

00434207fcaf619748774d428d67346e.png

国际化用到了 next-intl 第三方模块,核心实现如下:

import {headers} from 'next/headers';
import {notFound} from 'next/navigation';
import {getRequestConfig} from 'next-intl/server';
import {locales} from './navigation';export default getRequestConfig(async ({locale}) => {// Validate that the incoming `locale` parameter is validif (!locales.includes(locale as any)) notFound();const now = headers().get('x-now');const timeZone = headers().get('x-time-zone') ?? 'Europe/Vienna';const messages = (await import(`../messages/${locale}.json`)).default;return {now: now ? new Date(now) : undefined,timeZone,messages,defaultTranslationValues: {globalString: 'Global string',highlight: (chunks) => <strong>{chunks}</strong>},formats: {dateTime: {medium: {dateStyle: 'medium',timeStyle: 'short',hour12: false}}},onError(error) {if (error.message ===(process.env.NODE_ENV === 'production'? 'MISSING_MESSAGE': 'MISSING_MESSAGE: Could not resolve `missing` in `Index`.')) {// Do nothing, this error is triggered on purpose} else {console.error(JSON.stringify(error.message));}},getMessageFallback({key, namespace}) {return ('`getMessageFallback` called for ' +[namespace, key].filter((part) => part != null).join('.'));}};
});

同时项目还集成了很多优秀的开发工具,方便大家更高效的开发业务系统。

如果你对 next 开发或者需要开发一套管理系统, 我相信 Next-Admin 会给你开发和学习的灵感。

32e4d721c9f28b2d116658d948a8fa42.png

同时也欢迎和我一起贡献, 让它变得更优秀~

github地址:https://github.com/MrXujiang/next-admin

演示地址:http://next-admin.com

最后

后期我会在视频号分享更多 next 的实战项目和可视化零代码最佳实战,也欢迎关注我的视频号获取更多有意思的前端知识:

往期文章

  • 从零使用electron搭建桌面端可视化编辑器Dooring

  • (低代码)可视化搭建平台数据源设计剖析

  • 从零搭建一款PC页面编辑器PC-Dooring

  • 如何搭积木式的快速开发H5页面?

outside_default.png

outside_default.png

点个在看你最好看

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

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

相关文章

java AIO为什么用的并不多

Java AIO的本质是什么 原文&#xff1a;https://blog.csdn.net/hellojackjiang2011/article/details/131322757?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-131322757-blog-103915337.235%5Ev43%5Epc_blo…

python实验2

一、实验目的 掌握不同文件类型的读写掌握目录遍历的方法掌握json解析器的设计与实现 二、实验内容读取文件内容素数写入文件输出文件目录读写json文件实现json解析器 三、实验环境 在Educoder平台进行实验 四、实验要求 根据每个实训的每个关卡要求完成代码提交和测评 五、 实…

物联网实战--入门篇之(五)嵌入式-IIC驱动(SHT30温湿度)

目录 一、IIC简介 二、IIC驱动解析 三、SHT30驱动 四、总结 一、IIC简介 不管是IIC还是串口&#xff0c;亦或SPI&#xff0c;它们的本质区别在于有各自的规则&#xff0c;就是时序图&#xff1b;它们的相同点就是只要你理解了时序图&#xff0c;你就可以用最普通的IO引脚模…

RAG:检索增强生成系统如何工作

随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;人工智能世界取得了巨大的飞跃。经过大量数据的训练&#xff0c;LLM可以发现语言模式和关系&#xff0c;使人工智能工具能够生成更准确、与上下文相关的响应。 但LLM也给人工智能工程师带来了新的挑战&#xff…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便&#xff0c;轻松打开Chrome浏览器隐藏的截图功能&#xff01;​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能&#xff0c;免安装扩充插件也可以实现Chrome的截图和长截图功能了&#xff01; 也不需要额外安装任何截图工具 &a…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;再从大到小输出他的每个元素。 输入描述&#xff1a; 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an&#xff0c;表…

Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道

目录 前言 一、问题初诊断 1、山重水复 2、柳暗花明 3、庖丁解牛 4、问题定位 二、解决多面掩膜问题 1、尝试数据修复 2、实际修复 3、最终效果 三、总结 前言 之前一篇讲解遥感影像掩膜实现&#xff1a;基于SpringBoot和Leaflet的行政区划地图掩膜效果实战&#xff0…

指针强化练习(详解)

更多学习内容 结构体内存对齐 和 位段-CSDN博客指针初级&#xff08;基础知识&#xff09;-CSDN博客指针进阶(深入理解)-CSDN博客 目录 1.sizeof与strlen的区别 2.一维数组 3.字符指针 4.二维数组 5.指针运算(笔试题) 6.函数指针 1.sizeof与strlen的区别 请思考以下运行结…

安装即启动?探索流氓App的自启动“黑科技” (Android系统内鬼之ContentProvider篇)

前段时间发现了一个神奇的app&#xff0c;它居然可以在安装之后立即自启动&#xff1a; 看到没有&#xff0c;在提示安装成功大概1到2秒后&#xff0c;就直接弹出Toast和通知了&#xff01; 好神奇啊&#xff0c;在没有第三方app帮忙唤醒的前提下&#xff0c;它是怎么做到首次安…

C++2D原创我的世界1.00.3版本上市!!!

我很郁闷&#xff0c;为什么就是整不了昼夜交替啊喂&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 虽然这看上去很简单&#xff0c;但做起来要我命&#xff01;&#xff01;&#xff01; 优化过后总共1312行&#xff0c…

DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧

遍历是指通过或遍历节点树 遍历节点树 通常&#xff0c;您想要循环一个 XML 文档&#xff0c;例如&#xff1a;当您想要提取每个元素的值时。 这被称为"遍历节点树"。 下面的示例循环遍历所有 <book> 的子节点&#xff0c;并显示它们的名称和值&#xff1a;…

Qt主窗口 之:停靠/悬浮窗口(QDockWidget)

一、QDockWidget概述 QDockWidget 是 Qt 中的一个窗口部件&#xff0c;用于创建可停靠的窗口&#xff0c;通常用于构建多文档接口&#xff08;MDI&#xff09;或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围&#xff0c;或将其拖动到独立的浮动窗…

门控循环单元(GRU)

概述 门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;由Junyoung Chung等人于2014年提出&#xff0c;原论文为《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》。GRU是循环神经网络&#xff08;Recurrent Neural Network, …

实现富文本的三部曲

1、引入 ueditor.config.js ueditor.all.min.js lang/zh-cn/zh-cn.js 2、编辑器显示处 id"content" <textarea id"content" name"content"></textarea> 3、底部 <script type"text/javascript"> //实例化编辑器 …

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性&#xff0c;但不能访问父类的private属性 super.属性名 访问父类的…

回溯算法|39.组合总和

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push_back…

Flutter(踩坑)之Android sdkmanager tool not found

D:\Flutter\flutter\bin\flutter.bat doctor --verbose [√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.22631.3296], locale zh-CN)• Flutter version 1.2.1 at D:\Flutter\flutter• Framework revision 8661d8aecd (5 years ago), 2019-02-14 …

【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

目录 1 -> priority_queue的介绍和使用 1.1 -> priority_queue的介绍 1.2 -> priority_queue的使用 1.3 -> priority_queue的模拟实现 2 -> 容器适配器 2.1 -> 什么是适配器 2.2 -> STL标准库中stack和queue的底层结构 2.3 -> deque的介绍 2.…

Flutter 全局控制底部导航栏和自定义导航栏的方法

1. 介绍 导航栏在移动应用中扮演着至关重要的角色&#xff0c;它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换&#xff0c;还是复杂的应用导航&#xff0c;导航栏都能够帮助用户快速找到所需内容&#xff0c;提升用户体验和应用的易用性。 在移动应用…