Code Monkey home page Code Monkey logo

continew-org / continew-admin Goto Github PK

View Code? Open in Web Editor NEW
400.0 8.0 88.0 20.17 MB

🔥Almost最佳后端规范🔥持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。当前采用技术栈:Spring Boot3(Java17)、Vue3 & Arco Design、TS、Vite5 、Sa-Token、MyBatis Plus、Redisson、JetCache、Jackson、Spring Doc、JustAuth、Easy Excel、Crane4j、Liquibase、Hutool 等。

Home Page: https://continew.top

License: Apache License 2.0

Java 96.03% Dockerfile 0.05% FreeMarker 3.92%
redisson mybatis-plus sa-token typescript vue3 spring-boot3 java17 arco-design justauth

continew-admin's Introduction

ContiNew Admin 中后台管理框架

License Release Codacy Badge Sonar Status ContiNew Starter Spring Boot Open JDK GitHub stars GitHub forks Gitee stars Gitee forks

📚 在线文档 | 🚀 演示地址(账号/密码:admin/admin123)

简介

ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后台管理系统框架。开箱即用,重视每一处代码规范,重视每一种解决方案细节,持续提供舒适的前、后端开发体验。

当前采用的技术栈:Spring Boot3(Java17)、Vue3 & Arco Design & TS & Vite、Sa-Token、MyBatis Plus、Redisson、JetCache、JustAuth、Crane4j、EasyExcel、Liquibase、Hutool 等。

项目源码

Gitee(码云) GitHub
后端 continew/continew-admin charles7c/continew-admin
前端 continew/continew-admin-ui charles7c/continew-admin-ui
前端(v2.5) continew/continew-admin-ui-arco charles7c/continew-admin-ui-arco

项目起源

我热衷于做数据归档,归档后的数据可以提高学习/工作效率,为记忆“减负”,在持续的数据归档中,优质的“沉淀”会带来非匀速、跨越式的学习/工作体验。数据归档是一件需要持续去做的事情

从接触程序代码的第一天,我的程序数据归档也随之开始了,刷过的算法题、笔记、对接各种组件的配置文件,甚至于一些亮眼的样式设计、“如诗”的代码片段。这些数据的沉淀丰富了我的解决方案,提高了我的编程效率,逐渐为各种场景落实成了一个个雏形程序。再后来,我意识到,我归档的这些雏形程序,有一个更为妥贴的名称:程序框架/脚手架

技术的发展,导致这些雏形程序的生命周期很是短暂,它们有别于我归档的其他数据,有时由于工作的原因,没有时间很好的去沉淀它们,在使用时变得越来越不顺手。所以,某段时间,我放弃了维护,而是去采用一些更为成熟的框架。

不过,在陆续几年使用了一些成熟框架后,我前后遇到了一些困难:

  1. 代码洁癖想要找到一个扩展性佳,代码规范良好,开发体验舒适的框架很不容易,总是差些什么
  2. 项目上手困难或是基础版功能不全,需要的全在专业版,亦或者代码阅读性差,文档收费
  3. 部分解决方案缺失,已有解决方案也过于偏向样板化,无法形成良好的逻辑闭环
  4. 好不容易找到一些相较合适的,没过多久,部分作者可能暂时没法对外发“电”了,随着了解深入,很多 Bug 或新技术趋势还是需要自己研究解决

在工作中,很多想法/设计受限于客户需求、开发工期,必须优先以交付为导向,但一些优秀的实践需要花时间持续进行沉淀,只要我没跳出这个圈子,我还是需要一直去做好程序归档。“种一棵树最好的时间是十年前,其次是现在”,最终,我选择在业余时间更加正视这件事,从头归档沉淀,从添加每一个依赖开始,我希望它能持续的迭代优化、演进,所以我把它命名为 ContiNew(Continue New)。并且这次我选择了开源,我希望它不仅仅能吸收我的需求和沉淀,而是依托开源协作模式,及时发现更多的问题,接受更多的可能性,沉淀更优秀的思考,设计。

为什么选我们?

Tip

更为完整的图文描述请查阅《在线文档》

1.甄选技术栈: ContiNew(Continue New) 项目致力于持续迭代优化,让技术不掉队。在技术选型时,进行深度广泛地调研,从流行度、成熟度和发展潜力等多方面甄选技术栈。

2.Starter 组件: 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 已发布至 Maven **仓库,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗?

3.CRUD 套件: 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,且 API 支持按实际所需开放或扩展。

@Tag(name = "部门管理 API")
@RestController
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT})
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}

4.代码生成器: 提供代码生成器,已配套前、后端代码生成模板,数据表设计完之后,简单配置一下即可生成前、后端 80% 的代码,包含 CRUD API、权限控制、参数校验、接口文档等内容。如果业务不复杂,也可能就是 95% 的代码。

5.改善开发体验: 持续优化及适配能改善开发体验的组件。

  • 适配 ContiNew Starter 组件,针对多数框架进行了深度封装的 starter,改善你在开发每个 Spring Boot Web 项目的体验。
  • 适配 Crane4j 数据填充组件,减少因为一个用户名而产生的联表回填;
  • 适配 P6Spy SQL 性能分析组件,开发期间方便监控 SQL 执行;
  • 适配 TLog 链路追踪组件,方便在杂乱的日志文件中追踪你某次请求的日志记录;
  • 适配 JetCache 缓存框架(比 Spring Cache 更强大易用),通过注解声明即可快速实现方法级缓存,极大改善编码式缓存体验,且支持灵活的二级缓存配置、分布式自动刷新等能力;
  • 前端适配 Vue Devtools(Vue 官方提供的调试浏览器插件),极大提高 Vue 开发及调试效率

6.Almost最佳后端规范: 后端严格遵循阿里巴巴 Java 编码规范,注释覆盖率 > 45%,接口参数示例 100%,代码分层使用体验佳,变量、方法命名清晰统一,前端代码也使用严格的 ESLint、StyleLint 等检查。良好的设计,代码复用率极高!写代码时,让你有一种无需多写,理应如此的感觉。我是代码洁癖,我实际写的时候很清楚这到底是不是乱吹。

7.卓越工程: 后端采用模块化工程结构,并适配了统一项目版本号、编译项目自动代码格式化、代码混淆等插件,提供了自定义打包部署结构配置(配置文件、三方依赖和主程序分离),提供全套环境及应用的 Docker Compose 部署脚本。为了减少您开发新项目时的改造耗时,项目品牌配置持续进行深度聚合,简单的配置和结构修改即可快速开始独属于你的新项目。

8.业务脚手架: 有颜有料,不止是说说而已,持续打磨 UI 设计与色彩主题。提供基于 RBAC 的权限控制、通用数据权限,包含丰富的通用业务功能:第三方登录,邮箱、短信(生产级炸弹漏洞处理方案),个人中心、用户管理、角色管理、部门管理、系统配置(基础站点配置、邮件配置、安全配置)、系统日志、消息中心、通知公告等,设计用心,逻辑合理闭环。

一个好的脚手架项目,不仅仅是提供一系列组件集成与配置,也不仅仅是封装一堆好用的工具,还更应该提供一系列通用基础业务解决方案及设计,为初创团队项目减负。

9.质量与安全: CI 已集成 Sonar、Codacy,Push 即扫描代码质量,定期扫描 CVE 漏洞,及时解决潜在问题。封装数据库字段加密、JSON 脱敏、XSS 过滤等工具,提供诸多安全解决方案。

由于篇幅有限,且项目正处于高速发展期,更多功能正在陆续上线(敬请关注仓库或群内动态)。另外像最基本的统一异常、错误处理,基础线程池等配置就不在此赘述,细节优化详情请 clone 代码查看。

Talk is cheap, show the code.

系统功能

Tip

更多功能和优化正在赶来💦,最新项目计划、进展请进群或关注 任务清单更新日志

  • 个人中心:支持基础信息修改、密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑、头像裁剪上传
  • 消息中心:提供站内信消息统一查看、标记已读、全部已读、删除等功能
  • 用户管理:提供用户的相关配置,新增、修改、删除、重置密码、导出
  • 部门管理:可配置系统组织架构,并以树形表格展示
  • 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限
  • 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单
  • 通知公告:提供公告的发布、查看和删除等功能。管理员可以在后台发布公告,并可以设置公告的生效时间、终止时间,以 markdown-it 为内核渲染 Markdown 格式内容显示
  • 字典管理:提供对系统公用数据字典的维护,例如:公告类型,支持字典标签背景色和排序等配置
  • 文件管理:提供文件上传、下载、预览(目前支持图片、音视频)、重命名、切换视图(列表、网格)等功能
  • 存储管理:提供文件存储库新增、编辑、删除等功能,支持本地存储、兼容 S3 协议存储
  • 系统配置:
    • 基础配置:提供修改系统标题、Logo、favicon、版权信息等基础配置功能,以方便用户系统与其自身品牌形象保持一致
    • 邮件配置:提供系统发件箱配置,也支持通过配置文件指定
    • 安全配置:提供密码策略修改,支持丰富的密码策略设定,包括但不限于 密码有效期密码重复次数密码错误锁定账号次数、时间
  • 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能,支持同步最新表结构及代码生成预览
  • 在线用户:管理当前登录用户,可一键踢下线
  • 日志管理:提供登录日志、操作日志管理功能,可查看指定日志的详细请求及响应信息

系统截图

Tip

受篇幅长度及功能更新频率影响,下方仅为系统 部分 功能于 2024年6月13日 进行的截图,更多新增功能及细节请登录演示环境或 clone 代码到本地启动查看。

登录页面 仪表盘
仪表盘-查看公告 个人中心
消息中心 安全设置-修改邮箱-邮箱验证码
系统管理-系统配置 系统管理-安全配置
系统管理-用户管理-列表 系统管理-用户管理-新增
系统管理-部门管理-列表 系统管理-部门管理-新增
系统管理-角色管理-列表 系统管理-角色管理-新增
系统管理-菜单管理-列表 系统管理-菜单管理-新增
系统管理-公告管理-列表 系统管理-公告管理-修改
系统管理-字典管理-列表 系统管理-字典项管理
系统管理-文件管理-列表-1 系统管理-文件管理-列表-2
系统管理-文件管理-图片 系统管理-文件管理-音乐
系统工具-代码生成-配置 系统工具-代码生成-预览
系统监控-在线用户 系统监控-系统日志-登录日志
系统监控-系统日志-操作日志 系统监控-系统日志-操作日志-详情

核心技术栈

名称 版本 简介
Vue 3.4.21 渐进式 JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架。
Arco Design 2.55.0 字节跳动推出的前端 UI 框架,年轻化的色彩和组件设计。
TypeScript 5.0.4 TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。
Vite 5.1.5 下一代的前端工具链,为开发提供极速响应。
ContiNew Starter 2.2.0 ContiNew Starter 包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。
Spring Boot 3.1.11 简化 Spring 应用的初始搭建和开发过程,基于“约定优于配置”的理念,使开发人员不再需要定义样板化的配置。(Spring Boot 3.0 开始,要求 Java 17 作为最低版本)
Undertow 2.3.10.Final 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。
Sa-Token + JWT 1.38.0 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。
MyBatis Plus 3.5.5 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。
dynamic-datasource-spring-boot-starter 4.3.0 基于 Spring Boot 的快速集成多数据源的启动器。
Hikari 5.0.1 JDBC 连接池,号称 “史上最快连接池”,SpringBoot 在 2.0 之后,采用的默认数据库连接池就是 Hikari。
MySQL 8.0.33 体积小、速度快、总体拥有成本低,是最流行的关系型数据库管理系统之一。
mysql-connector-j 8.0.33 MySQL Java 驱动。
P6Spy 3.9.1 SQL 性能分析组件。
Liquibase 4.20.0 用于管理数据库版本,跟踪、管理和应用数据库变化。
JetCache 2.7.5 一个基于 Java 的缓存系统封装,提供统一的 API 和注解来简化缓存的使用。提供了比 SpringCache 更加强大的注解,可以原生的支持 TTL、两级缓存、分布式自动刷新,还提供了 Cache 接口用于手工缓存操作。
Redisson 3.30.0 不仅仅是一个 Redis Java 客户端,Redisson 充分的利用了 Redis 键值数据库提供的一系列优势,为使用者提供了一系列具有分布式特性的常用工具:分布式锁、限流器等。
Redis 7.2.3 高性能的 key-value 数据库。
X File Storage 2.1.0 一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS...等其它兼容 S3 协议的存储平台。
SMS4J 3.2.1 短信聚合框架,轻松集成多家短信服务,解决接入多个短信 SDK 的繁琐流程。
Just Auth 1.16.6 开箱即用的整合第三方登录的开源组件,脱离繁琐的第三方登录 SDK,让登录变得 So easy!
Easy Excel 3.3.4 一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。
AJ-Captcha 1.3.0 Java 行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。
Easy Captcha 1.6.2 Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。
Crane4j 2.8.0 一个基于注解的,用于完成一切 “根据 A 的 key 值拿到 B,再把 B 的属性映射到 A” 这类需求的字段填充框架。
Knife4j 4.5.0 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。
Hutool 5.8.27 小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。
Lombok 1.18.30 在 Java 开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码,让编写的类更加简洁。

快速开始

Tip

更详细的流程,请查看在线文档《快速开始》

# 1.克隆本项目
git clone https://github.com/continew-org/continew-admin.git

# 2.在 IDE(IntelliJ IDEA/Eclipse)中打开本项目

# 3.修改配置文件中的数据源配置信息、Redis 配置信息、邮件配置信息等
# [3.也可以在 IntelliJ IDEA 中直接配置程序启动环境变量(DB_HOST、DB_PORT、DB_USER、DB_PWD、DB_NAME;REDIS_HOST、REDIS_PORT、REDIS_PWD、REDIS_DB)]

# 4.启动程序
# 4.1 启动成功:访问 http://localhost:8000/,页面输出:Xxx started successfully.
# 4.2 接口文档:http://localhost:8000/doc.html

# 5.部署
# 5.1 Docker 部署
#   5.1.1 服务器安装好 docker 及 docker-compose(参考:https://blog.charles7c.top/categories/fragments/2022/10/31/CentOS%E5%AE%89%E8%A3%85Docker)
#   5.1.2 执行 mvn package 进行项目打包,将 target/app 目录下的所有内容放到 /docker/continew-admin 目录下
#   5.1.3 将 docker 目录上传到服务器 / 目录下,并授权(chmod -R 777 /docker)
#   5.1.4 修改 docker-compose.yml 中的 MySQL 配置、Redis 配置、continew-admin-server 配置、Nginx 配置
#   5.1.5 执行 docker-compose up -d 创建并后台运行所有容器
# 5.2 其他方式部署

项目结构

Tip

后端采用按功能拆分模块的开发方式,下方项目目录结构是按照模块的层次顺序进行介绍的,实际 IDE 中 continew-admin-common 模块会因为字母排序原因排在上方。

continew-admin
├─ continew-admin-webapi(API 及打包部署模块)
│  ├─ src
│  │  ├─ main
│  │  │  ├─ java/top/continew/admin
│  │  │  │  ├─ config (配置)
│  │  │  │  ├─ controller
│  │  │  │  │  ├─ auth(系统认证相关 API)
│  │  │  │  │  ├─ common(通用相关 API)
│  │  │  │  │  ├─ monitor(系统监控相关 API)
│  │  │  │  │  ├─ system(系统管理相关 API)
│  │  │  │  │  └─ tool(系统工具相关 API)
│  │  │  │  └─ ContiNewAdminApplication.java(Spring Boot 启动程序)
│  │  │  └─ resources
│  │  │     ├─ config(核心配置目录)
│  │  │     │  ├─ application-dev.yml(开发环境配置文件)
│  │  │     │  ├─ application-prod.yml(生产环境配置文件)
│  │  │     │  └─ application.yml(通用配置文件)
│  │  │     ├─ db/changelog(Liquibase 数据脚本配置目录)
│  │  │     │  ├─ mysql(MySQL 数据库初始 SQL 脚本目录)
│  │  │     │  ├─ postgresql(PostgreSQL 数据库初始 SQL 脚本目录)
│  │  │     │  └─ db.changelog-master.yaml(Liquibase 变更记录文件)
│  │  │     ├─ templates(模板配置目录,例如:邮件模板)
│  │  │     ├─ banner.txt(Banner 配置文件)
│  │  │     └─ logback-spring.xml(日志配置文件)
│  │  └─ test(测试相关代码目录)
│  └─ pom.xml(包含打包相关配置)
├─ continew-admin-system(系统管理模块,存放系统管理相关业务功能,例如:部门管理、角色管理、用户管理等)
│  ├─ src
│  │  ├─ main
│  │  │  ├─ java/top/continew/admin
│  │  │  │  ├─ auth(系统认证相关业务)
│  │  │  │  │  ├─ model(系统认证相关模型)
│  │  │  │  │  │  ├─ query(系统认证相关查询条件)
│  │  │  │  │  │  ├─ req(系统认证相关请求对象(Request))
│  │  │  │  │  │  └─ resp(系统认证相关响应对象(Response))
│  │  │  │  │  └─ service(系统认证相关业务接口及实现类)
│  │  │  │  └─ system(系统管理相关业务)
│  │  │  │     ├─ config(系统管理相关配置)
│  │  │  │     ├─ enums(系统管理相关枚举)
│  │  │  │     ├─ mapper(系统管理相关 Mapper)
│  │  │  │     ├─ model(系统管理相关模型)
│  │  │  │     │  ├─ entity(系统管理相关实体对象)
│  │  │  │     │  ├─ query(系统管理相关查询条件)
│  │  │  │     │  ├─ req(系统管理相关请求对象(Request))
│  │  │  │     │  └─ resp(系统管理相关响应对象(Response))
│  │  │  │     └─ service(系统管理相关业务接口及实现类)
│  │  │  └─ resources
│  │  │     └─ mapper(系统管理相关 Mapper XML 文件目录)
│  │  └─ test(测试相关代码目录)
│  └─ pom.xml
├─ continew-admin-plugins(插件模块,存放代码生成、任务调度等扩展模块,后续会进行插件化改造)
│  ├─ continew-admin-generator(代码生成器插件模块)
│  │  ├─ src
│  │  │  ├─ main
│  │  │  │  ├─ java/top/continew/admin/generator
│  │  │  │  │  ├─ config(代码生成器相关配置)
│  │  │  │  │  ├─ enums(代码生成器相关枚举)
│  │  │  │  │  ├─ mapper(代码生成器相关 Mapper)
│  │  │  │  │  ├─ model(代码生成器相关模型)
│  │  │  │  │  │  ├─ entity(代码生成器相关实体对象)
│  │  │  │  │  │  ├─ query(代码生成器相关查询条件)
│  │  │  │  │  │  ├─ req(代码生成器相关请求对象(Request))
│  │  │  │  │  │  └─ resp(代码生成器相关响应对象(Response))
│  │  │  │  │  └─ service(代码生成器相关业务接口及实现类)
│  │  │  │  └─ resources
│  │  │  │     ├─ templates/generator(代码生成相关模板目录)
│  │  │  │     ├─ application.yml(代码生成配置文件)
│  │  │  │     └─ generator.properties(代码生成类型映射配置文件)
│  │  │  └─ test(测试相关代码目录)
│  │  └─ pom.xml
│  └─ pom.xml
├─ continew-admin-common(公共模块,存放公共工具类,公共配置等)
│  ├─ src
│  │  ├─ main/java/top/continew/admin/common
│  │  │  ├─ config(公共配置)
│  │  │  ├─ constant(公共常量)
│  │  │  ├─ enums(公共枚举)
│  │  │  ├─ model(公共模型)
│  │  │  │  ├─ dto(公共 DTO(Data Transfer Object))
│  │  │  │  ├─ req(公共请求对象(Request))
│  │  │  │  └─ resp(公共响应对象(Response))
│  │  │  └─ util(公共工具类)
│  │  └─ test(测试相关代码目录)
│  └─ pom.xml
├─ .github(GitHub 相关配置目录,实际开发时直接删除)
├─ .idea
│  └─ icon.png(IDEA 项目图标,实际开发时直接删除)
├─ .image(截图目录,实际开发时直接删除)
├─ .style(代码格式相关配置目录,实际开发时根据需要取舍,删除时注意删除 spotless 插件配置)
├─ .gitignore(Git 忽略文件相关配置文件)
├─ docker(项目部署相关配置目录,实际开发时可备份后直接删除)
├─ LICENSE(开源协议文件)
├─ CHANGELOG.md(更新日志文件,实际开发时直接删除)
├─ README.md(项目 README 文件,实际开发时替换为真实内容)
├─ lombok.config(Lombok 全局配置文件)
└─ pom.xml(包含版本锁定及全局插件相关配置)

贡献指南

ContiNew Admin 致力于提供开箱即用,持续舒适的开发体验。作为一个开源项目,Creator 的初心是希望 ContiNew Admin 依托开源协作模式,提升技术透明度、放大集体智慧、共创优秀实践,源源不断地为企业级项目开发提供助力。

我们非常欢迎广大社区用户为 ContiNew Admin 贡献(开发,测试、文档、答疑等) 或优化代码,欢迎各位感兴趣的小伙伴儿,添加微信 讨论或认领任务。

分支说明

ContiNew Admin 的分支目前分为下个大版本的开发分支和上个大版本的维护分支,PR 前请注意对应分支是否处于维护状态,版本支持情况请查看 更新日志/版本支持

分支 说明
dev 开发分支,默认为下个大版本的 SNAPSHOT 版本,接受新功能或新功能优化 PR
x.x.x 维护分支,在 vx.x.x 版本维护期终止前(一般为下个大版本发布前),用于修复上个版本的 Bug,只接受已有功能修复,不接受新功能 PR

贡献代码

如果您想提交新功能或优化现有代码,可以按照以下步骤操作:

  1. 首先,在 Gitee 或 Github 上将项目 fork 到您自己的仓库
  2. 然后,将 fork 过来的项目(即您的项目)克隆到本地
  3. 切换到当前仍在维护的分支(请务必充分了解分支使用说明,可进群联系维护者确认)
  4. 开始修改代码,修改完成后,将代码 commit 并 push 到您的远程仓库
  5. 在 Gitee 或 Github 上新建 pull request(pr),选择好源和目标,按模板要求填写说明信息后提交即可(多多参考 已批准合并的 pr 记录,会大大增加批准合并率)
  6. 最后,耐心等待维护者合并您的请求即可

请记住,如果您有任何疑问或需要帮助,我们将随时提供支持。

Important

欢迎大家为 ContiNew Admin 贡献代码,我们非常感谢您的支持!为了更好地管理项目,维护者有一些要求:

  1. 请确保代码、配置文件的结构和命名规范良好,完善的代码注释甚至包括接口文档参数示例,并遵循阿里巴巴的 《Java开发手册(黄山版)》 中的代码规范,保证代码质量和可维护性
  2. 在提交代码前,请按照 Angular 提交规范 编写 commit 的 message(建议在 IntelliJ IDEA 中下载并安装 Git Commit Template 插件,以便按照规范进行 commit)
  3. 提交代码之前,请关闭所有代码窗口,执行 mvn compile 命令(代码格式化插件会在项目编译时对全局代码进行格式修正),编译通过后,不要再打开查看任何代码窗口,直接提交即可,以免不同的 IDE 配置会自动进行代码格式化

反馈交流

欢迎各位小伙伴儿扫描下方二维码加好友,备注 cnadmin,拉你进群,探讨技术、提提需求~

加入交流群后,你将会:

  • 第一时间收到框架动态
  • 第一时间收到框架更新通知
  • 第一时间收到框架 Bug 通知
  • 和众多大佬互相 (huá shuǐ) 交流 (mō yú)
二维码
无加群意愿 如无加群意愿,欢迎在 Issues 中反馈交流~ 🍻

鸣谢

鸣谢

感谢参与贡献的每一位小伙伴🥰

contributors

特别鸣谢

License

GitHub Star 趋势

GitHub Star 趋势

continew-admin's People

Contributors

atom0425 avatar bisheng940924 avatar charles7c avatar jhlzlove avatar jskils avatar luoqiz avatar m01i0ng avatar ms-jing avatar mysteryzp avatar op027log avatar songmiaomiao avatar tonysj avatar wangjiangtao2 avatar weirantongxue avatar yoofff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

continew-admin's Issues

偶发性登录成功后不跳转

Bug 描述

使用前端路由,在登录成功后偶发性不跳转首页,在刷新后再次登录才会跳转成功

复现步骤

使用Firefox或Chrome登录即可复现,附演示版测试截图(登录成功提示了“欢迎使用”,nprogress也从左到右瞬间100%)但路由无变化:
图片

预期结果

登录成功后可正常跳转到首页

环境信息

使用(1.0.1-SNAPSHOT)问题存在;
看框架的演示版(1.1.0-SNAPSHOT)问题依然存在;

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

Java版本应该使用哪个呢

Feature 描述

在文档中似乎没看到对应的Java版本,有点小疑惑

描述一下您想要的解决方案

麻烦标注一下支持的Java版本

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

定时任务

Feature 描述

希望计入加入定时任务模块

描述一下您想要的解决方案

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

Charles7c大佬什么时候补充完整的开发文档,比如如何新增一个模块,如何新增一个功能。

Feature 描述

大胆预测一波,Charles7c大佬这个项目爆火🔥🔥🔥。
真的很好用,CRUD真的是非常好用!!!
但是相关开发文档还是比较少,我也希望我可以pr,但是我这个菜鸡有些代码可能还看不太懂。

描述一下您想要的解决方案

描述一下您考虑过的替代方案

额外补充

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)
  • 您是否愿意为您提出的 Feature 提交 PR?

[Feature] 希望能加入多语言国际化选择功能

Feature 描述

我希望能加入多语言国际化选择功能

描述一下您想要的解决方案

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)
  • 您是否愿意为您提出的 Feature 提交 PR?

代码生成实体类路径bug

Bug 描述

在生成实体类的时候,如果数据库修改或者调整完字段顺序,生成字段在实体类,依旧是最后一位.还有一个问题是代码生成@query注解路径有问题. 使用admin版本是v2.4.0 start使用的版本是v1.4.1

复现步骤

代码生成顺序
56824ea9abc630a6b213c3c49bb2880
af5af016c14f76d15b6d36d2d95194d

路径问题
代码生成的路径是
import top.charles7c.continew.starter.data.mybatis.plus.query.Query;
import top.charles7c.continew.starter.data.mybatis.plus.query.QueryType;
实际导入路径是
import top.charles7c.continew.starter.data.core.annotation.Query;
import top.charles7c.continew.starter.data.core.enums.QueryType;

预期结果

环境信息

使用admin版本是v2.4.0 start使用的版本是v1.4.1

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

[Bug] 前端连接后,后台报错:java.lang.IllegalArgumentException: No 'jakarta.websocket.server.ServerContainer' ServletContext attribute. Are you running in a Servlet container that supports JSR-356?

Bug 描述

java.lang.IllegalArgumentException: No 'jakarta.websocket.server.ServerContainer' ServletContext attribute. Are you running in a Servlet container that supports JSR-356?

复现步骤

前端连接后,后台报错

预期结果

没有这个错误提示

环境信息

ContiNew Admin version(s):

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

系统管理-存储管理

Bug 描述

新建存储,选择兼容S3协议存储,使用minio,提交后端校验提示私有密钥长度不能超过255个字符。

复现步骤

新建存储,选择兼容S3协议存储,使用minio,提交后端校验提示私有密钥长度不能超过255个字符。

预期结果

正常新建或修改存储

环境信息

ContiNew Admin version(s):v3.1.0

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

代码生成

Bug 描述

e8062ad273fbe7108a70870eeea94cd
代码生成的这个页面,分页展示问题.

复现步骤

63136f3430b1e921b256e7a4294a45b

翻下一页的时候下一页只有一条数据

预期结果

环境信息

jdk:17 框架最新版本

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

存储设置

Feature 描述

建议加入存储设置,可以对不同的云厂商key还有信息进行可视化配置

描述一下您想要的解决方案

image image

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

后面前端是否会实现动态路由

Feature 描述

后面前端是否会实现动态路由

描述一下您想要的解决方案

后面前端是否会实现动态路由

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

token失效控制台报错

Bug 描述

image

复现步骤

登录token失效,或者第一次登录提示token失效的时候会出现控制台报错

预期结果

错误异常应该被捕获 返回到前端正确的提示.如果过多的登录失效的控制台的错误日志会太多

环境信息

JDK版本:17 项目版本:v2.3.x

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

字典

Bug 描述

/api/common/dict/{code} 在前端获取字典信息的时候.字典对应的code创建了值,但是接口只能查询到两个

去掉这个方法上的缓存注解直接走数据库没问题
@CachePenetrationProtect
@cacherefresh(refresh = 3600, stopRefreshAfterLastAccess = 7200)
@cached(key = "#code", name = CacheConstants.DICT_KEY_PREFIX)

复现步骤

image image

预期结果

返回对应值

环境信息

jdk 17 dev分支

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

[Task] 代码生成器增加字典/枚举关联,增加详情字段配置

Description

  • 代码生成器增加字典/枚举关联:字段配置表新增字典/枚举关联字段 dict_code,配置字段时,可以为指定字段下拉选择关联哪个枚举或字典,然后根据生成时,前端根据需要生成对应的下拉列表及列表回显、后端生成对应的字段处理。
  • 增加详情字段配置,配置指定字段为详情点击 slot 字段

Task List

  • 字段配置表新增字典/枚举关联字段 dict_code
  • 新增查询所有字典、枚举公共接口
  • 代码生成/字段配置增加对应配置列,支持下拉选择关联字典/枚举
  • 优化前后端代码生成模板,增加相应处理
  • 增加详情字段配置,增加相关前端处理

自动生成基于continew-starter的手脚架

Feature 描述

希望能加入自动生成手脚架的功能基于continew-starter 相关的starter 可以选着对应的starter

描述一下您想要的解决方案

用的continew-admin作为后台管理的服务.想开发一个客户端的服务也想集成continew-starter相关的配置.但是自己新建springboot多模块项目修改pom文件太费劲了....pom文件改了好半天.或者能提供一个空的springboot手脚架示例

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

代码生成页面显示之后整体失去响应

Bug 描述

菜单栏里点击代码生成菜单,再点击其他菜单,页面无反应,除非刷新页面

复现步骤

1菜单栏里点击代码生成菜单
2再点击其他菜单,页面无反应,除非刷新页面

预期结果

其他菜单可正常点击响应

环境信息

JDK21,最新代码

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

关于登入成功后地址重定向问题

Bug 描述

遇到的问题是登入成功后,应该本地已标记登入成功。但是在浏览器上重新输入地址首页地址的时候,会又要求调到登入的页面,应该是直接,已登入的情况跳转默认的首页才比较合理~哈哈

复现步骤

1:输入账号密码
2:提示登入成功
3:然后再重新输入:https://cnadmin.charles7c.top/
4: 结果是 又需要再登入了。这样不对。

预期结果

1:输入账号密码
2:提示登入成功
3:然后再重新输入:https://cnadmin.charles7c.top/
4: 结果是 应该 默认进入首页,或当前输入的地址。

环境信息

额外补充

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

代码生成多选以及下载

Feature 描述

希望代码生成中可以同时选中多张表进行生成.生成完成可以弹出下载链接直接下载到本地

描述一下您想要的解决方案

这样可以更好的解决多人协作的问题.还有就是基于admin后台开发别的服务进行集成的时候要.这项目是单体可能这个模块不属于admin模块.以至于生成的代码不能直接写入对应项目的文件夹.

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

代码生成目录不存在异常

Bug 描述

配置代码生成配置填写前端路径,前端路径不存在会抛异常:cn.hutool.core.io.IORuntimeException: IORuntimeException: IOException: No such file or directory
image
image

复现步骤

1、配置代码生成配置填写前端路径,点击保存
2、点击生成代码

预期结果

配置代码生成配置填写前端路径,前端路径不存在自动创建目录,成功生成代码

环境信息

JDK17,
continew-admin-2.2.0

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

OSS文件上传

Feature 描述

文件上传到OSS的时候.好像不会在桶里自动创建文件夹,直接传到桶的主目录,是不是可以考虑用日期分割作为目录.方便后期服务迁移的时候能够更好的选中文件指定文件迁移.

描述一下您想要的解决方案

文件上传到OSS的时候.好像不会在桶里自动创建文件夹,直接传到桶的主目录,是不是可以考虑用日期分割作为目录.方便后期服务迁移的时候能够更好的选中文件指定文件迁移.

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

文件管理,缩略图未删除

Bug 描述

图片文件删除之后,对应的缩略图没有处理

复现步骤

文件管理,选择一张图片删除之后,对应的缩略图没有删除

预期结果

图片删除,对应的缩略图也删除

环境信息

ContiNew Admin version(s):v3.1.0

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

[Task] 文件管理增加资源统计,统计总存储量、各类型文件存储占用

Description

  • 在文件管理左侧面板下方,增加资源统计:统计总存储量、总文件数量、各类型文件数量及存储占用占比
  • 参考效果:
    image

Task List

  • 文件管理新增查询存储概览接口
  • 文件管理左侧面板下方增加相关信息展示,存储占比建议采用图表形式展示(简单、美观是第一要务)

希望ORM更新

Feature 描述

感谢作者提供这份项目。

我看到项目内使用的ORM是MyBatis-Plus,不可否认,MyBatis-Plus是一个优秀的ORM框架,不过,本项目的总体风格是:年轻化、高可用,所以,不知道作者是否可以考虑fork一个我个人调研过的较好的ORM框架:MyBatis-Flex。https://github.com/mybatis-flex/mybatis-flex,具体的对比您可以到网络上进行查看,希望能够考虑一下。

描述一下您想要的解决方案

fork一个分支为 MyBatis-Flex 版本。并逐步替换为此 package,直至整个项目完全替换掉MyBatis-Plus。

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

分布式id CosId machineId耗尽报错的问题

Feature 描述

分布式id CosId machineId耗尽报错的问题.....是因为使用kill -9 没有办法回收机器号 导致机器id的数量会上涨.停止服务需要点两次但是服务没有完全关闭点第二次才能停止不能优雅的 暂停和重启 之前一直使用的是kill -9 忽略了 别的问题.导致了 CosId 回收机器号的时候 没回收掉...会一直上涨. 因为服务在使用重启 脚本命令时候会导致之前无法停止 所以才使用了 kill -9
image

jar启动脚本
`export JAVA_HOME="/opt/jdk/jdk-17.0.10"
export PATH=$JAVA_HOME/bin:$PATH

定义应用名称和JAR文件

APP_NAME="continew-admin"
JAR_FILE="continew-admin.jar"

检查命令行参数

if [ "$1" == "start" ]; then
# 检查是否已经运行
if pgrep -f $JAR_FILE > /dev/null
then
echo "$APP_NAME 已经在运行。"
exit 0
fi

# 进入到JAR文件所在的目录
cd /work/server

# 启动Spring Boot应用
nohup java -jar $JAR_FILE > /dev/null 2>&1 &

echo "$APP_NAME 启动成功。"

elif [ "$1" == "stop" ]; then
# 停止Spring Boot应用
if pgrep -f $JAR_FILE > /dev/null
then
pkill -f $JAR_FILE
echo "$APP_NAME 已停止。"
else
echo "$APP_NAME 未在运行。"
fi
elif [ "$1" == "restart" ]; then
# 重启Spring Boot应用
if pgrep -f $JAR_FILE > /dev/null
then
pkill -f $JAR_FILE
fi

# 进入到JAR文件所在的目录
cd /work/lb/hex-server

# 启动Spring Boot应用
nohup java -jar $JAR_FILE > /dev/null 2>&1 &

echo "$APP_NAME 重启成功。"

else
echo "用法: $0 {start|stop|restart}"
exit 1
fi

exit 0`

描述一下您想要的解决方案

是否可以提供内置的对于springboot 优雅的 停止 启动 重启 可以避免在有些三方组件在回收机制无法触发.

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

关于项目中私人starter

Feature 描述

里面有些starter的源码可以开源不?例如日志的starter

描述一下您想要的解决方案

希望开源

描述一下您考虑过的替代方案

No response

额外补充

No response

确认

  • 阅读文档
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

初始化语句需要更新

Bug 描述

首先感谢作者Charles提供与维护本项目,这个项目使用的技术栈我相信都是精挑细选,与我不谋而合。感谢您。

我通过文档中的指导一步步运行起来后,控制台输出了 sys_log 表的 descriptionmodule 字段不允许为空且未设置默认值,我手动将数据库里的这两个字段改为允许为空、默认值为NULL后,一切恢复了正常。我知道这个不是正确的解决方法,应该需要去看代码的逻辑,为何会产生为空的数据。但是我遇到了先反馈。

我认为这个问题的发生是在作者的电脑发生时,作者手动修改了数据库,但未更新初始化SQL语句文件,然而也没用其他人提出这个问题,所以这个SQL文件将永远不会更新,希望作者更新一下此文件,后续其他人不会遇到相同问题,也不会遗失重要的日志。

复现步骤

从0创建项目。
一定要用一个崭新的数据库!!
项目启动后,访问Swagger,并随意点击几个API。
查看控制台

预期结果

不报错

环境信息

release - 2.2.0

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

postman 请求接口响应乱码&上传文件响应乱码

Bug 描述

用postman请求接口响应乱码,如图:
image
上传文件响应乱码:
Uploading image.png…

复现步骤

postman请求接口必现以及用Arco upalod上传文件响应乱码必现

预期结果

响应正常json数据

环境信息

v2.2.0 java17

额外补充

No response

确认

  • 阅读文档
  • 根据报错信息百度或 Google 一下
  • 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.