SpringBoot+Vue实验报告管理系统:从部署到二次开发全流程实战
拿到这套基于SpringBoot和Vue的实验报告管理系统源码时我第一反应是典型的教学管理类全栈项目。但真正动手把它从代码仓库变成能跑通、能交付的完整系统才发现里面涉及的坑远比想象中多。这篇文章不打算写泛泛的架构科普而是记录我从零开始部署这套源码、逐行读代码、把前后端串起来的全过程。不管你是准备拿这套系统做课程设计还是刚接手类似的开源项目里面关于环境选型、数据库初始化、权限拦截、文件上传、部署打包的细节都能直接对齐到你自己的项目里。1. 项目整体设计与思路拆解1.1 这套系统到底解决了什么问题实验报告管理系统最常见的业务背景是某高校或培训机构的实验课程需要学生在线提交实验报告教师在线批改打分管理员统一管理课程和用户。纸质报告时代最头疼的问题有两个一个是报告流转慢学生交完不知道进度老师收齐需要半个月另一个是存档难纸质报告翻找、归档、统计分数都是体力活。这套系统把整个流程搬到线上后学生端可以实时看到报告状态教师端可以批量打分管理员能按课程、按班级导出成绩效率提升非常明显。从标题可以看出项目的技术栈是SpringBoot和Vue。前者负责后端接口和数据持久化后者负责用户交互界面。这里有一个关键认知为什么选这种组合而不是用JSP或者纯Servlet因为前后端分离之后后端只需要专心提供JSON接口前端页面交互、组件复用、状态管理都交给Vue团队分工清楚后期扩展移动端也容易。而且SpringBoot自带的Starter机制配置一个Web项目只需要寥寥几行依赖开发效率非常高。1.2 角色权限和业务流程的主线我通读了源码中的权限设计核心角色有三个学生、教师、管理员。学生登录后可以查看自己的实验任务、在线填写报告、提交附件教师可以创建实验任务、查看某个班级的提交情况、批改报告并打分管理员则管理用户、课程、学期等基础数据。三条角色线在功能上互有交集所以源码中基于拦截器做了三类接口的鉴权。我特别要提醒的是业务主线的设计直接决定数据库表结构。这套系统的核心流程是管理员创建课程和班级教师安排实验任务学生提交报告教师批改系统统计成绩。理解了这条链路再看代码就完全不乱了。1.3 为何这套系统的技术选型适合教学场景如果从零手写一个SpringMVC加模板渲染的系统也能实现上述功能。但为什么很多教学场景都选择SpringBoot加Vue核心原因有三点第一SpringBoot极大降低了装配成本不需要繁琐的XML配置打包成JAR后一键启动部署门槛低第二Vue组件的开发体验对小团队友好特别是做后台管理界面表格、表单、弹窗这套组合特别成熟第三这类项目通常需要学生或开发者二次开发前后端分离结构更容易定位和修改问题——前端问题去控制台看Network后端问题去日志看异常排查路径非常清晰。这套源码选择了MyBatis Plus作为持久层框架也是同样的逻辑简单、够用、学习曲线平缓。2. 核心模块与数据库设计拆解2.1 用户模块和登录态的设计细节登录模块是几乎每个全栈项目都要重点读的部分因为它是前后端交互的第一道关卡。这套项目的登录流程是前端把用户名和密码POST到后端登录接口后端校验完用户表后生成一个Token返回给前端前端把Token存在本地后续每个请求都在请求头中携带它后端通过拦截器解析Token判断当前请求是否合法。我读代码时发现一个很实用的细节Token里除了存用户ID还存了角色标识这样拦截器在鉴权时不需要频繁查数据库。这种做法在并发量不高的教学场景中性能足够而且逻辑简单。对登录接口源码统一返回了一个Result对象包含了状态码、消息和数据前端只需要判断状态码是200还是401就能统一处理所有接口返回而不需要在每个方法里单独处理异常。2.2 报告提交与批改闭环实验报告的核心数据表我梳理出来是这样的实验任务表存了任务名称、所属课程、班级、截止时间报告表存了提交人、所属任务、正文内容、附件路径、批改状态、分数和评语。提交报告时学生填写富文本正文上传附件通常是实验截图或者PDF后端先把文件保存到本地磁盘同时把存储路径写入报告表再把报告状态设置为已提交。教师批改时可以直接在线查看报告内容录入分数和评语然后系统把状态改为已批改。这里有一个很容易踩空的地方如果学生在教师批改之后再次提交报告状态必须变回待批改否则教师看到的永远是老版本。源码中处理了这一点提交时会把状态重置为待批改分数和评语也被重置。2.3 关系型表设计的关键字段摘几个核心表的字段给大家参考表名核心字段说明userid, username, password, role, real_name统一用户表courseid, course_name, teacher_id, semester课程表experiment_taskid, course_id, title, content, deadline实验任务表reportid, task_id, student_id, content, file_path, status, score报告表这里的user表是角色合并设计而不是学生表教师表分开建。我估计很多刚起步的开发者会疑惑为什么不拆开。合并的好处是登录接口不用区分路径一个登录入口通吃三种角色代价则是“学生”和“教师”的业务字段只能堆在同一张表里。在教学管理系统里这个取舍是合理的逻辑也更好扩展。3. 部署环境准备与初始化3.1 后端运行环境版本选择部署一套SpringBoot项目环境变量的细节决定成败。我使用的环境是JDK 1.8、Maven 3.6、MySQL 5.7。如果使用JDK 11或者JDK 17也不是不行但要注意SpringBoot版本对应的兼容性部分老版本SpringBoot在JDK 17下会出现反射相关异常。如果没有特殊原因建议直接沿用官方文档给出的JDK和SpringBoot版本不要盲目升级。MySQL版本同样需要注意5.7和8.0的驱动差异。我在本地用的是MySQL 5.7在配置数据源时驱动类写的是com.mysql.jdbc.Driver如果换成8.0版本需要改写成com.mysql.cj.jdbc.Driver否则启动会直接报告驱动加载失败。3.2 Node.js与前端环境前端是Vue 2项目Node版本建议12到14之间。Node 16及以上版本在npm install旧项目时经常因为node-sass编译失败而卡住。如果遇到这个报错可以使用node-sass替换为dart-sass的方案调整或者直接用项目自带的package-lock.json安装依赖。npm镜像这个问题也顺手提一下国内网络环境直接安装依赖很慢我习惯配置淘宝镜像源安装速度会明显提升而且基本不会出现SSL连接超时的问题。3.3 初始化数据库的正确顺序拿到源码后我最先做的事情不是看代码而是找到sql目录里的初始化脚本。一个常见的错误是直接把脚本整个复制到Navicat执行如果表之间有关联外键或者脚本里包含删除重建语句执行顺序就会变得非常重要。实际做法应该是先在MySQL中创建一个空数据库字符集选utf8mb4排序规则选utf8mb4_general_ci避免中文乱码。手动选择对应数据库然后执行sql脚本观察是否有报错。开启MySQL日志开关重点检查执行到哪一句时中断。初始化完成后我习惯先用SQL查询确认核心表已经创建成功比如查询user表中是否存在初始管理员账号。如果脚本包含初始数据插入语句管理员账号通常直接被写死在SQL里登录密码可能是MD5加密后的值直接使用初始账号登录最省事。4. 源码本地启动与联调实操4.1 后端启动前必须改的三个配置在启动SpringBoot之前必须确认application.yml或application.properties中的配置是否正确。需要改的地方往往是三个数据源地址和账号密码、文件上传路径、端口号。我这次启动时踩了一个小坑pom.xml里引入了多个依赖但配置文件中漏了MyBatis Plus的mapper扫描路径导致所有和数据库相关的接口都报找不到映射语句。修改方式是在启动类上添加MapperScan注解或者在mapper接口上加Mapper注解二选一即可。另外application.yml里如果配置了mapper-locations要保证路径和实际的XML目录一致否则也会出现绑定异常。文件上传路径这个配置常被忽略但它很重要。如果路径写的是相对路径当项目以后台的JAR包方式部署在不同目录时上传的文件就会落在不同的物理位置。我一般在配置中写一个绝对路径比如/usr/local/upload开发环境则直接写到项目的upload目录下方便调试。4.2 前端启动与API地址对接前端项目通过npm install安装依赖然后npm run serve启动。启动后浏览器访问localhost:8080页面能打开但登录会失败这是新手最容易迷惑的一步。问题基本都出在API地址和端口上。后端的默认端口一般是8080或8081我在开发时把后端改成了8081前端就需要去config目录下的index.js里修改代理配置把target指向localhost:8081。项目里有代理配置的直接改proxy即可如果前端请求写的是完整域名地址就需要找到request.js里的baseURL统一修改。前端和后端的联调有一个快速定位技巧登录时打开浏览器开发工具切到Network面板观察登录请求是否发出。如果请求是红色失败状态看状态码是404、500还是401。404说明路径拼接不对500说明后端接口异常401说明没有权限或Token没带上。4.3 本地功能验证清单系统启动成功后我不会直接认为万事大吉而是按一条业务主线去走通它这样能最大程度发现隐藏问题。我的验证清单是管理员登录创建两个用户一个学生、一个教师。管理员创建课程并把学生和教师加入课程。教师创建实验任务设定截止时间。学生登录后能看到实验任务并提交一篇报告附带上传一张图片。教师登录后能看到学生的提交记录完成打分。学生端查看分数管理员端查看统计结果。任何一步出现异常都能直接锁定到某一个模块。比如第四步上传失败大概率是路径权限或上传大小限制的问题不用在登录模块反复排查。4.4 数据库脚本补充的重要提示这里我想分享一个数据库层面的经验即使初始化脚本能完整执行也建议补一条半路修复方案。因为很多同学在自己录入测试数据时会出现外键关联错误导致无法插入。最稳妥的方式是把强外键约束去掉改为逻辑外键也就是表结构里保留关联字段但物理上不建外键约束。这项调整能避免后续测试数据录入时的很多痛苦而且实际影响不大毕竟业务量不大时逻辑外键完全够用。5. 代码讲解几个值得细读的安全与性能点5.1 登录与权限拦截器我细读了后端的登录拦截逻辑很有参考价值。登录成功后系统用工具类生成了一个带有效期的Token并把它放进Redis或者存到本地的事务管理框架中。每次请求进来时拦截器会取出请求头中的Token并验证签名。如果签名不存在或过期直接返回未认证状态。一个细节是拦截器只拦截需要认证的接口路径而登录接口本身必须放行。否则会出现一个逻辑死循环——用户根本没有Token却要求他先有Token才能访问登录接口。源码中使用了一个路径匹配列表把这个层级的关系处理清楚了。前端路由守卫也做了类似处理没有Token的请求一律跳到登录页同时白名单放行了登录路径。5.2 MyBatis Plus的分页处理报表和实验任务列表都会用到分页很多开发者习惯自己写LIMIT语句但MyBatis Plus内置了分页插件用起来会方便很多。我在读代码时看到源码的分页查询是先配置一个分页插件然后在查询方法中直接传入页码和条数。要注意的是没有配置分页插件时分页参数会被忽略这时候无论传什么页面参数SQL执行的都只是普通查询很容易出现“分页失效”的假象。所以如果后期你基于源码二次开发遇到列表接口分页不生效优先检查配置类中是否注入了MyBatis Plus的分页插件这是我自己在这个项目上踩过的比较隐蔽的坑。5.3 文件上传与路径安全报告附件上传是这个系统的重要一环。源码里封装了文件上传的公共方法主要逻辑是校验文件大小、生成新文件名、保存到指定目录。文件名生成方式很有讲究源码使用了时间戳加随机数的方式拼接基本杜绝了重名覆盖问题。这里有个安全细节容易被忽略用户上传的文件名如果原样保留包含中文和空格轻则访问时URL编码出错重则可能被特殊处理。稳妥做法是后端统一用UUID或时间戳重命名尽量不依赖用户提交的原始文件名。此外文件下载接口必须做权限验证不能把上传目录配置成静态资源直接暴露出去了。如果配置成静态资源目录任何知道文件路径的人都可以绕过登录直接访问附件这在提交实验报告的系统中属于权限绕过漏洞务必避免。6. 部署打包与服务器上线实践6.1 后端Maven打包与启动脚本部署到服务器时后端需要打成可执行的JAR包。在项目根目录执行mvn clean package命令完成后到target目录下找到以jar结尾的文件通过java -jar命令启动即可。但要注意打包时配置文件是否被一起打进去是常见问题。如果你的数据库密码写的是本地密码打包部署到服务器后就会连接不上。我的做法是把配置文件外置服务器上单独放置一份application-prod.yml在启动命令中通过--spring.profiles.active指定使用哪个环境配置这样本地和线上配置互不干扰。后台运行方面直接java -jar运行窗口一关进程就没了。我是用nohup配合让进程后台运行并把日志打到独立文件中方便后续排查问题。进程占用端口后要连续启动可能会出现端口被占用的报错这时候用netstat命令查到对应PID杀掉即可。6.2 前端项目打包与Nginx配置前端在部署前需要先执行npm run build生成dist静态目录。这个目录里的文件不依赖Node环境只需要任意一个Web服务器托管即可。最常见的方案是Nginx托管但配置上有两个注意点第一个是代理转发。前端请求/api/xxx这类接口路径时Nginx需要把请求反向代理到后端的实际地址。我之前见过一个部署失败案例前端页面能打开但登录一直报跨域原因是Nginx配置里没有把接口请求转发浏览器直接向后端地址发起了跨域请求。代理配置是这样的形态当路径匹配到API前缀时通过proxy_pass指令转向后端服务。需要注意proxy_pass末尾是否带/这个细节非常影响路径拼接结果带不带是完全不同的效果。第二个是前端路由history模式的刷新404问题。Vue Router如果使用history模式部署到Nginx后直接刷新当前页面会出现404因为服务器上根本找不到这个路径对应的物理文件。解决方法是在Nginx配置中加入fallback配置让所有找不到的资源都回退到index.html。这类问题在本地开发时不会遇到因为开发服务器已经做了处理只有部署到正式环境才会暴露。6.3 跨域配置的正确解法开发环境联调时跨域问题可能通过代理或前端配置解决但线上环境如果前后端域名不同跨域要由后端解决。SpringBoot中可以用CrossOrigin注解也可以在WebMvcConfigurer里配置统一的跨域映射。常用的写法是允许所有来源、所有请求头、所有方法并且在跨域配置中开放自定义请求头的权限。如果配置了自定义Token请求头跨域预检请求中必须显式允许这个头否则浏览器会拦截真正的POST请求。我调试这类问题的方法就是观察请求类型如果出现OPTIONS请求被拦截基本就是跨域头配置不全。这里是很多开发者最容易忽略、也最耗费时间的点。7. 常见问题与排查技巧实录7.1 后端能启动但接口全部401刚启动项目时接口返回401是整个系统中极易遇到的现象。不要先怀疑数据库先检查Token的生成密钥和拦截器校验密钥是否一致。有些项目把密钥放在配置文件中如果你在配置文件中改动了密钥但前端存储的还是旧Token自然校验不通过。此时清除浏览器本地存储重新登录一次问题通常就解决了。7.2 图片上传成功但访问不了上传成功但前端展示不了图片这类问题八成出在访问路径上。上传目录是哪个物理路径前端访问时拼接的URL就需要能映射到这个路径。如果后端配置了静态资源映射路径写错就会404。排查方法是直接用浏览器访问文件地址看返回是404还是二进制数据只要访问路径和物理存储路径能对上问题立刻定位。如果是在服务器上部署还要检查磁盘目录的读写权限。一个小组件目录权限不足上传接口也会报IOException这类问题不看服务端日志很难发现。7.3 数据库连接失败与时区问题数据库连接失败要分三种情况看数据库服务没有启动、账号密码错误、网络不通。启动前先用命令行工具测试一下连接能连上再启动后端这样最省时间。时区问题也是高频报错。MySQL连接串中如果不加serverTimezone参数在部分版本驱动下面会直接报时区异常。解决办法是在JDBC连接串末尾加上serverTimezoneAsia/Shanghai和useUnicodetrue、characterEncodingutf8保证中文不乱码。7.4 npm install安装依赖失败前端依赖安装失败是与环境版本最相关的顽固问题。一个有效策略是删除node_modules目录和package-lock.json重新安装。如果还是失败降低Node版本重新安装。如果项目依赖中存在node-sass优先把package.json中依赖项改为sass和dart-sass再重新安装。这是一套典型的教学类全栈项目我在部署和阅读源码的过程中把前后端联调、权限控制、文件存储、服务器部署这几个环节都完整走了一遍。踩过的坑不多但都有代表性从数据库时区到Node版本再到跨域头和路由刷新404每一个都是真实生产环境会遇到的问题。对于准备拿这套系统做课程设计或者二次开发的同学我建议不要过早动手改代码先把它完整跑通再对照业务主链读一遍关键模块的代码这个顺序带来的理解效率远比直接找代码问题要高得多。我自己的经验是给这类系统做扩展也不用急于引入太多依赖先在这个基础项目里把日志、统一异常处理、参数校验这些工程化细节补上等业务复杂到一定阶段再考虑引入更多中间件和服务拆分。把基础打扎实了后续的每一步才走得更稳。

相关新闻

Java实现Windows注册表清理工具:扫描无用主键与安全清理实践

Java实现Windows注册表清理工具:扫描无用主键与安全清理实践

简介:这份资源面向需要维护Windows系统性能的Java开发者与运维人员,聚焦注册表无用主键的识别与清理问题。注册表长期积累冗余或失效主键会拖慢系统运行,而Java本身不直接支持注册表操作,需借助JNI或JNA调用Windows API实现读取、…

2026/10/13 10:48:38 阅读更多 →
MiMo-V2.6-Flash 免费模型全攻略:311B 参数 1M 上下文全模态,OpenCode Zen 限时免费调用

MiMo-V2.6-Flash 免费模型全攻略:311B 参数 1M 上下文全模态,OpenCode Zen 限时免费调用

MiMo-V2.6-Flash 免费模型全攻略:311B 参数 1M 上下文全模态,OpenCode Zen 限时免费调用一句话速览:小米 MiMo-V2.6-Flash 是一款总参数 311B 的稀疏 MoE 全模态模型,原生支持 1M 上下文与深度思考,2026 年 9 月 22 日…

2026/10/13 10:48:38 阅读更多 →
SpringBoot+Vue医院管理系统全栈开发与答辩要点

SpringBoot+Vue医院管理系统全栈开发与答辩要点

每年毕业季,我都能在技术社区里看到大量"求一个医院管理系统源码"的帖子,后台私信也经常有人问我:SpringBootVue 的医院管理系统到底怎么搭?数据库表怎么设计?接口文档怎么写才能过审?由于业务直…

2026/10/13 10:48:38 阅读更多 →

最新新闻

AI助手会话记录批量导出实战:从API到浏览器脚本的完整方案

AI助手会话记录批量导出实战:从API到浏览器脚本的完整方案

1. 把需求掰开揉碎:你要的批量导出到底是什么时不时就有人来问:能不能把AI助手左侧那一长串会话记录一次性导出?注意,这里的“会话”指的是左边列表里的每一个独立条目,而不是某个会话里的几十轮来回。每条会话都有自己…

2026/10/13 11:39:13 阅读更多 →
OneLive私有化直播系统搭建全攻略:从推流到播放的完整实践

OneLive私有化直播系统搭建全攻略:从推流到播放的完整实践

第一次把 OneLive 这个名字写在架构图上,是在帮一个朋友做线上分享活动的时候。他当时需要的不是某个直播平台的账号,而是一套能装在自有服务器上、由自己完全控制推拉流、录制和权限的直播项目。OneLive 这个名字就这么随手起了:一场直播、一…

2026/10/13 11:39:13 阅读更多 →
Open Code Review:从形式评审到协作基础设施的范式升级

Open Code Review:从形式评审到协作基础设施的范式升级

1. “open-code-review”不是个工具,而是一套被低估的协作范式你有没有遇到过这样的场景:团队里新来一位同事,第一天就提了三份PR,每份都改了二十多个文件,commit message写的是“fix bug”;或者自己花三天…

2026/10/13 11:39:13 阅读更多 →
基于人脸识别的照片视频管理器:C#稳定版64位实现

基于人脸识别的照片视频管理器:C#稳定版64位实现

简介:这是一款用C#编写的本地照片与视频管理工具,面向需要按人物整理个人影像资料的普通用户与开发者。它支持jpg、jpeg、png、bmp等图片格式以及avi、mp4、mpg、mpeg等视频格式,核心能力包括人脸库录入、照片视频人脸自动识别,以…

2026/10/13 11:39:13 阅读更多 →
AI编程智能体分级:决策权归属决定项目成败

AI编程智能体分级:决策权归属决定项目成败

1. 为什么“智能体分级”不是技术炫技,而是项目落地的生死线最近帮某高校实验室做一套教学辅助系统时,团队最初信心满满:用最新开源大模型Agent框架,两周就能跑通自动出题、批改、反馈闭环。结果卡在第三天——学生提交一道开放性…

2026/10/13 11:39:13 阅读更多 →
大模型与电机控制之间:三层分布式架构的工业落地实践

大模型与电机控制之间:三层分布式架构的工业落地实践

1. 从“一句话控制电机”的幻觉说起这两年大模型火得不行,不少做工业自动化的朋友私下问我:既然大模型连代码都能写,能不能让它直接控制电机?把产线上的PLC换掉,用自然语言让机械臂干这干那,听起来实在太有…

2026/10/13 11:38:11 阅读更多 →

日新闻

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

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

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

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 阅读更多 →