Spring Boot电竞社经费管理系统:从毕设实战到答辩全流程指南
这次咱们看一个能直接拿去当毕业设计答辩的 Java 实战项目基于 Spring Boot 的电子竞技社经费管理系统。它的定位非常明确不是只讲概念的 demo而是一套完整可跑的开发案例。社团经费管理本质上就是“收入、支出、审批、统计”这条线放到电竞社场景里就多了活动报销、设备采购、赞助款登记、社费收缴这些业务细节。用 Spring Boot 来做技术栈主流代码结构清晰用户角色分明很适合用来展示你在大学阶段对 Java Web 开发、数据库设计和业务建模的综合掌握程度。如果你们学校对毕设的要求是“能跑、有数据、有完整流程、代码别太水”那这类项目就非常合适。代码注释齐全意味着新手也能顺着源码把整个请求链路读通。下面我会从系统设计、环境搭建、部署启动、核心功能、接口测试、性能观察和答辩常见问题几个维度把它完整拆开讲。1. 核心能力速览能力项说明项目类型Spring Boot 前端模板/管理后台的社团经费管理系统主要功能社费收缴、活动经费申请、活动报销、赞助收入登记、采购审批、经费统计报表用户角色社团成员、社团管理员社长/副社长、系统管理员可按项目实际表结构调整技术栈Java、Spring Boot、MyBatis/MyBatis-Plus常见做法、Spring MVC、MySQL启动方式本地 IDE 启动为主也可打包 jar 后用命令行运行是否支持 API支持Controller 层提供 HTTP 接口可配合 Postman/Apifox 测试是否支持批量任务经费明细批量导入、批量审批可通过循环接口或后台定时任务实现取决于具体源码实现硬件要求普通开发机即可8G 内存、i5 级别 CPU 足够跑起来适合场景Java 毕业设计、Spring Boot 入门实战、社团管理系统二次开发材料没有给出精确的端口号、依赖版本和表结构所以下面所有命令和配置都按通用 Spring Boot 工程模板处理部署时以你实际项目代码为准。2. 适用场景与使用边界这个项目的受众很明确正在准备 Java 方向毕业设计的本科生其次是想要一个“带完整业务流”的 Spring Boot 练手项目的初学者。它能解决的问题也很清楚第一社团经费管理是一类非常标准的 MIS 系统。它天然包含用户登录、权限区分、增删改查、审批流程、金额统计、报表展示。这些正好是答辩时老师最容易追问的点也是你快速证明“我掌握了 Spring Boot 开发基本盘”的最好载体。第二电竞社场景自带业务真实性。相比于“图书管理系统”“学生信息管理系统”这种被写烂的题目经费管理结合电竞社的赛事报名、设备采购、场地租用、赞助商管理能够更自然地导出数据表设计和业务规则。第三代码注释齐全适合二次开发。新手不需要从零读源码先按表结构和注解把链路看懂再把某个模块改掉就能形成“基于开源案例做改进”的毕设叙事。使用边界方面要提醒一句如果这个系统要真实部署到学校社团使用涉及经费数据、成员个人信息就需要注意数据隐私和授权问题。演示和答辩用测试数据没问题但不要拿真实财务数据随便放到公网服务器上。另外如果有赞助商信息、成员手机号等敏感字段最好在演示环境脱敏处理。3. 环境准备与前置条件这是一个标准 Java Web 项目不涉及 GPU 或复杂依赖环境准备很常规。推荐配置如下项目建议操作系统Windows 10/11、macOS、Linux 均可JDKJDK 8 或 JDK 11具体看项目 pom.xml 中 java.version构建工具Maven 3.6IDEIntelliJ IDEA 2022 或 Eclipse数据库MySQL 5.7 或 MySQL 8.0前端工具如果项目带 Vue 前端需要 Node.js 16如果只是 Thymeleaf 模板则不需要端口Spring Boot 默认 8080注意本地占用情况磁盘空间2GB 以内足够安装依赖前先检查本机环境java -version mvn -version mysql --version如果 Maven 下载依赖慢可以在~/.m2/settings.xml里配置阿里云镜像mirror idaliyun/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror数据库建议先创建一个独立 schema避免和本地其他项目混在一起CREATE DATABASE egaming_funds DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;4. 安装部署与启动方式这类项目最常见的启动方式是“IDE 里直接启动 Spring Boot 主类”。拿到源码后按下面顺序操作。4.1 源码导入解压项目压缩包确认根目录有pom.xml。IntelliJ IDEA 中选择File - New - Project from Existing Sources选中根目录的pom.xml。IDEA 会自动识别 Maven 项目并开始下载依赖。等待右下角进度条结束确认External Libraries里出现 Spring Boot、MyBatis、MySQL 驱动等依赖。如果导入后没有自动下载执行mvn clean install -DskipTests4.2 修改数据库配置进入src/main/resources/application.yml检查数据源配置spring: datasource: url: jdbc:mysql://localhost:3306/egaming_funds?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 改成你自己的密码 driver-class-name: com.mysql.cj.jdbc.Driver注意时区参数serverTimezone。不配置时 MySQL 8.0 可能报时区错误。4.3 初始化数据库表项目里一般会有sql目录里面是schema.sql或init.sql。用命令行导入mysql -u root -p egaming_funds sql/init.sql如果没有现成的 SQL 文件也可以根据实体类手动建表。实体类字段和数据库字段的映射关系要通过 MyBatis 的 Mapper 逐一核对。4.4 启动项目在 IDEA 中找到主启动类类名通常类似EgamingFundsApplication右键Run。启动成功后日志中会出现类似Tomcat started on port 8080的信息。此时浏览器访问http://localhost:8080如果能看到登录页、首页或接口文档页面说明系统已经正常跑起来了。4.5 打 jar 包部署如果需要在服务器上部署执行mvn clean package -DskipTests java -jar target/egaming-funds-0.0.1-SNAPSHOT.jar这种方式适合最后演示时给老师看“项目可以部署运行”而不是只停留在 IDE 里。5. 功能测试与效果验证经费管理系统最核心的验证点是用户能不能按角色操作金额数据能不能正确入库审批流程能不能闭环统计报表能不能反映数据变化。下面给出四个必须提前测一遍的功能路径。5.1 登录与角色权限先用系统管理员账号登录。如果项目有初始化数据管理员账号通常在 SQL 文件里写好了。测试重点输入错误密码时有没有提示。登录成功后进入的是普通成员端还是管理端。普通成员能不能访问管理员接口。如果不能说明权限拦截器生效。退出登录后访问受保护页面是否会被重定向到登录页。判断标准权限控制是答辩高频问题。如果源码里用了拦截器或 Spring Security要自己先在答辩演示里跑通这条链路。5.2 社费收缴登记成员角色登录后登记一笔社团费缴纳记录。操作步骤参考进入“社费管理”菜单。点击“新增缴纳记录”。选择成员、填写金额、缴纳日期、备注。提交保存。到经费明细列表确认数据已出现金额汇总是否变化。预期结果数据库fund_record或类似表中新增一条记录成员累计缴费金额更新。需要注意金额字段是否有精度问题MySQL 中用DECIMAL(10,2)通常能避免浮点数误差。5.3 活动经费申请与审批这是经费管理系统的业务主流程答辩演示时一定要完整走一遍。流程为普通成员发起申请 - 管理员审批 - 通过后经费余额减少。测试步骤成员账号创建一条活动经费申请比如“校际赛参赛报名费 500 元”。退出登录切换管理员账号登录。在“待审批列表”看到这条申请。点击通过。回到经费报表查看支出金额是否增加。常见坑是“申请通过后没有同步更新活动表状态”或者“审批操作后列表页没有跳转回待办”。建议在答辩前把这条链路连续跑三遍确认没有状态残留问题。5.4 数据统计报表一般这类系统首页会放几个统计卡片比如总经费、总收入、总支出、本月支出。答辩演示时先记下页面上当前的数值再去新增一笔收入或支出回到首页刷新。预期结果总收入或总支出随新记录变动图表同步更新。如果图表不更新优先检查统计 SQL 的查询条件比如日期范围是否写死为固定月份。6. 接口 API 调用示例如果项目是前后端分离架构Controller 层会暴露 REST 接口。这类代码最适合在答辩时展示“我不仅会页面操作还理解接口交互”。通用接口风格如下方法路径功能POST/api/user/login登录GET/api/funds/list经费明细分页列表POST/api/funds/add新增经费记录POST/api/expense/apply提交活动经费申请POST/api/expense/approve审批申请GET/api/statistics/summary首页统计汇总实际路径以项目代码为准这里只是常见路由设计。用 curl 测试新增经费记录的接口示例curl -X POST http://localhost:8080/api/funds/add \ -H Content-Type: application/json \ -d { type: income, amount: 300.00, source: 企业赞助, remark: XX 电竞外设品牌赞助款, createBy: admin }再用 Python 调用查询接口方便在答辩现场快速演示import requests BASE_URL http://localhost:8080 # 登录获取 token具体字段按实际接口调整 login_data { username: admin, password: 123456 } response requests.post(f{BASE_URL}/api/user/login, jsonlogin_data, timeout10) print(login status:, response.status_code) print(login response:, response.json()) # 查询经费列表如果项目要求请求头携带 token则加上 Authorization headers {Authorization: Bearer response.json().get(token, )} list_response requests.get(f{BASE_URL}/api/funds/list, headersheaders, timeout10) print(fund list status:, list_response.status_code) print(fund list:, list_response.json())接口调用失败时先看三件事项目是否已经启动日志中是否报数据库连接错误。请求路径和方法是否和 Controller 的RequestMapping一致。JSON 字段名是否和实体类属性名对应。7. 资源占用与性能观察这类系统不像 AI 应用那样对硬件敏感但回答“系统性能怎么样”几乎也是答辩必问题。这里给你一套观察思路能直接复述给答辩老师。7.1 内存占用Spring Boot 项目默认启动后内存占用大约在 300MB 到 800MB 之间取决于 JVM 配置和项目依赖数量。启动命令中可以显式指定内存java -Xms256m -Xmx512m -jar target/egaming-funds-0.0.1-SNAPSHOT.jar答辩时如果老师问“系统并发能支持多少人”可以这样回答学生社团管理系统的访问规模通常在几十到几百人单机 Spring Boot MySQL 完全够用。如果要提高上限可以做分页查询优化、加 Redis 缓存会话、使用连接池调优。7.2 MySQL 连接池配置连接池是常见追问点。打开application.yml确认连接池参数spring: datasource: hikari: maximum-pool-size: 10 minimum-idle: 5 connection-timeout: 30000性能观察方式很简单在 MySQL 中执行SHOW PROCESSLIST;看应用运行时的连接数是否稳定在maximum-pool-size以内。如果会话数持续异常增长说明连接没有正确释放要检查 Service 层是否加了事务和连接关闭逻辑。7.3 日志观察启动日志、SQL 日志、错误日志分别观察。如果项目开启了 MyBatis SQL 打印修改application.ymlmybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl这样控制台会打印每条 SQL答辩前可以用这个功能展示“表单数据是如何写入数据库的”。7.4 降低资源占用的方法分页列表用 PageHelper不要一次性全量查询。统计报表的 SQL 使用聚合函数SUM/COUNT/GROUP BY避免在 Java 内存里计算。金额字段在数据库层做约束用DECIMAL不要用double。8. 常见问题与排查方法问题现象可能原因排查方式解决方案启动时报数据库连不上数据库没启动、密码错误、URL 配置错误检查 application.yml用 Navicat 或命令行测试连接修正数据库账号密码和地址重启项目Table doesnt exist没有导入初始化 SQL检查数据库表列表执行项目 sql 目录的初始化脚本中文乱码数据库编码不是 utf8mb4检查表字段字符集、页面编码建库时指定 utf8mb4URL 加 characterEncodingutf8页面能打开但登录失败密码加密方式不一致查看数据库密码字段是否加密、登录 Service 层逻辑如果是 MD5/Bcrypt核实注册时的加密算法接口返回 500空指针异常或 SQL 错误查看 IDEA 控制台堆栈日志根据堆栈定位到 Service/Mapper 层打日志调试启动端口被占用8080 端口已被其他进程使用netstat -anofindstr 8080Windowslsof -i:8080Mac/Linux前端页面报跨域错误前后端分离但没配置跨域浏览器 Network 面板看 CORS 报错在后端增加跨域配置类或使用CrossOriginMaven 依赖下载失败网络原因或镜像失效查看 Maven 日志换阿里云镜像删除本地仓库中损坏的.lastUpdated文件后重新下载最稳妥的做法是在答辩前一周每天晚上完整跑一遍业务流程把每种角色的操作都点一遍。出现问题时重点看控制台最后一行异常堆栈然后用搜索引擎定位。9. 最佳实践与使用建议这类毕设项目想拿高分重点不是“我把开源代码跑起来了”而是“我理解这套系统的设计并且做了一定改进”。下面几条建议直接对标答辩。9.1 梳理项目架构准备画一张图答辩时老师非常喜欢问“系统整体架构是什么样的”。建议画一张简单的三层架构图Controller 接收请求 - Service 处理业务逻辑 - Mapper 操作数据库 - MySQL 返回结果。这张图不用工具PPT 里用方框箭头就能画清。能把它讲明白比堆砌技术名词有用得多。9.2 挑一个模块做个性化改进不要在答辩时说“这就是网上下的模板”。哪怕是做一点小改动也够撑起三分钟的展示。可行方向增加经费导出的 Excel 功能用 EasyExcel 或 POI。增加经费按月趋势图前端用 ECharts 展示。给经费申请增加“驳回时填写审批意见”的功能。增加社团活动与经费的关联绑定让活动结束后自动生成结算单。9.3 控制演示节奏答辩演示不要从头到尾点一遍所有功能。正确姿势是登录系统展示首页统计卡片。创建一个社团成员账号演示普通成员能做什么。切换管理员账号审批刚才申请的一条经费。回到报表页展示数据变化。打开数据库或打印日志验证数据落库。展示部分核心代码解释业务逻辑分支。这样整个演示控制在 8 到 12 分钟节奏紧凑且有“数据闭环”的可视化效果。9.4 数据要提前构造好答辩前一天先在系统里录入一批好看的演示数据比如5 个成员的角色档案。3 条已完成的缴费记录。2 条待审批的经费申请。1 条已通过的活动经费支出。1 笔企业赞助收入。页面统计卡片和图表在数据充分时展示效果会好很多。空白账号的报表页面根本看不出“管理系统”的价值。9.5 注意版权与使用边界如果项目源码来自网络开源或购买的毕设模板在答辩陈述中不要刻意隐瞒使用情况也不要直接把源码当作完全原创提交到学校查重系统。正确做法是标注参考来源说明二次开发和改造内容并保证数据与代码使用的合规性。如果系统将来用于真实社团管理涉及成员隐私数据时要按照学校的管理规定处理不要随意发布到公网。10. 总结与下一步这个项目最值得尝试的点是把 Spring Boot 技术栈落到了一个真正有业务逻辑的场景里。经费管理的收入、支出、审批、统计覆盖了一个信息系统最常见的功能需求比单纯的增删改查更有讲头也比分布式、微服务那类超出本科主流课程范围的项目更适合踏踏实实做出完整效果。拿到代码后先做三件事第一把数据库初始化脚本跑通第二用管理员账号登录顺着菜单把每个功能点一遍第三找到登录到审批这条主链路确保它可以连续演示不出错。最容易踩的坑不在写代码而在环境适配MySQL 版本、JDK 版本、前端依赖版本任何一处对不上都可能导致启动失败。遇到问题不要慌按第九节的排查表逐项检查。接下来你可以继续做的是给项目补一个 Excel 导出、加一张经费趋势报表再写一份 300 字左右的设计说明。这份说明能把系统结构、角色权限、经费审批流程讲清楚答辩时就能直接派上用场。

相关新闻

Java开源一物一码溯源系统:基于若依的全链路可审计底座

Java开源一物一码溯源系统:基于若依的全链路可审计底座

简介:这是一套面向Java与前端开发者的一物一码开源溯源防伪营销系统完整源码,聚焦品牌保护、农产品及快消品全链路追溯与数字化营销场景,适用于中高级学习者开展全栈项目实践与技术验证。资源共642个文件,以295个Java后端模块&…

2026/10/13 11:50:31 阅读更多 →
线性表查找算法全解析:顺序、二分、插值、分块一篇讲透

线性表查找算法全解析:顺序、二分、插值、分块一篇讲透

很多年前我刚开始学数据结构的时候,总觉得查找算法是个“既简单又没用”的东西——简单在代码不过几行,没用在日常开发里随手调个indexOf就完事了。直到后来在工作中排查一个线上性能问题,才发现一套几百万行的业务配置表每次加载都要做线性扫…

2026/10/13 11:49:31 阅读更多 →
Flex+Bison实现SQL解析器:从词法分析到AST构建

Flex+Bison实现SQL解析器:从词法分析到AST构建

简介:这是一份面向编译原理学习者、数据库开发初学者及C/C工程实践者的SQL解析器教学项目,基于Flex词法分析器与Bison语法分析器构建,完整实现SQL语句(SELECT/INSERT/UPDATE/DELETE等)的词法识别、语法解析与抽象语法树…

2026/10/13 11:49:31 阅读更多 →

最新新闻

目标检测基石:R-CNN到Faster R-CNN进化详解

目标检测基石:R-CNN到Faster R-CNN进化详解

目标检测这个方向,这几年迭代很快,但要说真正的“奠基性”工作,绕不开R-CNN、Fast R-CNN、Faster R-CNN这一条线。现在不少做检测的工程师,包括我自己,最初就是靠啃这三篇论文上手的。哪怕今天工业界用的很多检测框架&…

2026/10/13 13:16:37 阅读更多 →
H3C桥接到物理口全攻略:虚拟化与交换机二层透传配置详解

H3C桥接到物理口全攻略:虚拟化与交换机二层透传配置详解

做网络运维和虚拟化的朋友,大概率都遇到过“H3C 桥接到物理口”这个需求。这句话在机房现场说出来的时候,通常是两种意思:一种是在虚拟化平台上把虚拟机的网卡桥接到宿主机物理网口,而这个物理网口刚好下联着一台 H3C 交换机&…

2026/10/13 13:16:37 阅读更多 →
Excel+Power BI数据分析实战:从数据清洗到可视化看板

Excel+Power BI数据分析实战:从数据清洗到可视化看板

Excel做数据分析这事儿,看着简单,真上手了坑不少。很多人一提到数据分析就想学Python、学SQL,其实职场上90%的分析需求,Excel加上Power BI就能扛下来。我说的不是那种拿鼠标点几个按钮就完事儿的基础操作,而是真正能拿…

2026/10/13 13:16:37 阅读更多 →
向量数据库大规模在线垃圾回收与 Compaction 调优实战

向量数据库大规模在线垃圾回收与 Compaction 调优实战

在以高频动态会话交互与实时商品图谱关联为主要特征的大促级多智能体(Multi-Agent)系统中,向量数据库(如 Milvus 2.4、Qdrant)承担着海量向量数据的实时更新(Upsert)与高频失效删除(…

2026/10/13 13:16:37 阅读更多 →
对称二叉树判断:递归与迭代的镜像匹配核心逻辑详解

对称二叉树判断:递归与迭代的镜像匹配核心逻辑详解

1. 先搞清楚这道题到底在考什么1.1 题目定位与常见误区对称二叉树这道题在 LeetCode 上编号 101,属于二叉树章节的经典入门题,同时也是“热门 100 题”里的常客。我印象里几乎所有大厂面试题库里都有它,而且往往不是考你能不能写出来&#xf…

2026/10/13 13:16:37 阅读更多 →
React Native鸿蒙适配实战:RN页面与鸿蒙提醒服务的系统能力桥接

React Native鸿蒙适配实战:RN页面与鸿蒙提醒服务的系统能力桥接

做鸿蒙适配做到第七个页面,CareTipsScreen算是我这轮项目里最头疼、也最有收获的一个。先说清楚它是什么:这是一款健康管理应用里的“每日护理建议”聚合页,用户每天打开应用,能看到系统按时间段推荐的护理建议,比如下…

2026/10/13 13:15:36 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →