微信小程序+Spring Boot医院设备管理系统:从数据库到扫码全流程实战
1. 把毕设题目拆开看这套系统到底在解决什么问题临近毕业季很多同学挑选毕设课题时会第一眼相中“基于微信小程序的医院医疗设备管理系统”觉得它有场景、有画面感小程序端扫扫码、后台管管设备整体难度不高工作量看起来也饱满。这几年我带过的不少同学都从这类项目起步有人顺利过审有人直到答辩前夜还在改数据库字段。这套系统到底难不难说句实话里面的每个技术点单拎出来都不深真正的门槛在于你能不能把“设备从入库到报废”这条业务链路想清楚、做完整。这篇文章把我平时给同学们讲解时反复强调的内容整理出来从需求拆解、数据库设计、小程序端功能实现到后端接口的并发与事务处理、联调调试中的常见坑再到最后答辩时怎么展示自己的工作量。既适合正在做毕业设计、课程设计的本科生和专科生也适合想用小程序方向做项目练手的开发者。已经工作的人完全可以把这套系统当作一个中小型业务系统的迷你案例来理解。1.1 医院设备管理的真实痛点医院设备管理不是冷冷清清的信息登记。一家正常运营的综合医院从大型的影像设备、超声设备到科室里随处可见的心电监护仪、输液泵设备数量少则数百台、多则上千台。传统管理方式极度依赖Excel表格加纸质登记单设备在哪个科室、上次保养是什么时候、哪台设备正在维修、被谁借走了经常要靠电话问、翻纸质本子才能弄明白。比台账混乱更麻烦的是医疗设备有强制性巡检、质控与安全年限要求。很多设备必须定期校准超期服役的设备要单独管理管理人员需要随时知道哪些设备快到期了、哪些该做保养了。全靠人工记忆很容易漏检漏保一旦出问题就是医疗安全责任事故。这套系统的核心价值就在这里把设备基本信息、状态流转、维修保养记录、使用科室与操作人员全部信息化实现一键查询、扫码盘点、流程化的借用归还与维修跟踪。1.2 为什么选微信小程序而不是App或Web很多同学会问医院内部管理系统为什么不用PC网页后台非要选微信小程序这里面的逻辑其实有两层。第一层是使用场景。设备管理员、科室护士长、维修工程师大部分时间都在科室走廊、库房、设备现场走动不太可能随时端坐在电脑前。小程序“扫一扫即用、用完即走”的体验天然契合这种移动办公场景。第二层是开发成本与兼容性。原生Android App要考虑各种机型适配、上架审核周期长纯Web管理端对后端接口要求更高还得处理浏览器兼容。微信小程序自带基础的用户身份能力只要后端配合做登录授权就能实现角色区分整体开发量非常适中。对一个毕业设计来说推荐“微信小程序 Web管理后台”的组合。小程序负责移动端的日常业务操作比如扫码、借用、报修Web后台负责设备台账维护、基础数据管理和统计报表。两端共用一个后端服务工作量有层次又不至于失控。提示如果答辩老师问“为什么不用原生App”你的回答可以展开说小程序免安装、跨平台、开发周期短而且天然支持扫码、订阅消息等能力非常适合医院这种“高频但轻量”的管理场景。回答的重点是“同样解决问题哪个方案性价比高”。2. 系统整体架构与设计思路2.1 技术选型从后端到数据库的一站式方案我在这类项目上最常用的技术组合是微信小程序原生框架作前端后端用Spring Boot数据库选MySQL。小程序原生框架虽然不能像uni-app那样一套代码多端复用但它稳定、调试方便、官方文档齐全而且校园里学Java的人数远比学其他后端语言的多遇到问题随便一搜都能找到对应答案。后端框架选Spring Boot的理由也很实际。无论搭配MyBatis还是MyBatis-Plus都容易上手生态成熟、部署简单。如果你个人更熟悉Node.js或Python Flask不是不行但必须能解释清楚“为什么用这个不用那个”否则答辩容易被追问到怀疑人生。相比之下Spring Boot MyBatis-Plus MySQL是最稳妥的方案网上的参考资料多遇到问题容易检索到现成解决方案。数据库层面的整体设计我建议至少包含这些表用户表、设备表、设备类型表、科室表、借用归还记录表、维修记录表、保养记录表、报废记录表、操作日志表。这些表之间的外键关系并不复杂但设计得好不好直接影响后面的代码能不能把业务流转写顺。2.2 角色权限设计让每个身份都有合适的工作台权限设计千万不能做成大锅乱炖。我建议分成四类角色系统管理员、设备管理员、科室用户、维修工程师。系统管理员负责用户管理和基础数据配置设备管理员负责设备台账、入库登记、保养计划、报废审核科室用户发起借用、归还、报修维修工程师只能看到分配给自己的维修工单并填写处理结果。前端实现上小程序登录后通过后端返回的角色字段控制不同页面的入口。科室用户的工作台显示“扫码借用”“我的借用”“我要报修”设备管理员的工作台显示“设备台账”“待审核”“保养日历”维修工程师的工作台只显示“待维修工单”“维修记录”。很多人会把角色字段存在小程序本地缓存里这没毛病但后端接口层面必须再校验一次否则前端改个缓存就能越权访问管理员接口。后端可以用拦截器或AOP实现权限注解在每个需要权限的接口上标注角色要求请求进来先校验登录态再校验角色不满足直接返回403。这个点虽然实现不复杂但却是很多毕设项目的薄弱区能主动补上并在答辩时演示非常加分。注意权限设计的演示可以在答辩现场做。用一个普通科室账号去调用管理员接口如果被拦截就能直观证明你的系统不是只做了表面登录而是真正有接口级权限控制。3. 数据库设计从需求到表结构3.1 核心表结构拆解我把核心表拎出来逐个讲不是让你背字段而是理解每个表存在的理由。用户表主要包含用户ID、账号、密码、姓名、角色、所属科室ID、手机号、状态这些字段。密码一定要加密存储MD5加盐或BCrypt都行不能存明文这个点几乎所有答辩老师和面试官都会问到。设备表是系统的主干建议设计为设备ID、设备编号、设备名称、型号、生产厂家、设备类型ID、所在科室ID、状态、购入日期、使用年限、资产原值、当前负责人。设备编号要设计成唯一编码规则比如“设备类型缩写四位流水号”这样做扫码或者批量导入时能直接锁定到唯一设备。设备类型表单独建一张里面保存类型ID、类型名称、保养周期天数、质控周期天数。把保养周期放在类型表而不是设备表是为了减少重复维护。比如某类监护仪的保养周期是180天新增同类型设备时自动带出不用每台设备都填一遍。科室表只有科室ID、科室名称、备注但它是权限归属和统计报表的重要维度。借用归还记录表记录设备ID、借用人ID、借用科室ID、借用时间、预计归还时间、实际归还时间、状态维修记录表记录设备ID、故障描述、报修人ID、维修人ID、维修状态、维修费用、处理结果、报修时间、完成时间。保养记录和报废记录同样单独建表各管各的业务段。3.2 状态机设计设备从入库到报废的完整流转设备表里的status字段是整个系统的灵魂。我给一个常用的状态枚举状态值含义可执行操作0在库可用借用、报修、保养1已借出归还2维修中查看维修进度3保养中查看保养进度4已报废只读5待审核管理员审核状态流转必须有规则约束在库设备才能被借用借用中的设备不能直接报修必须先归还再走报修流程维修中的设备不能出借报废只能从可用或维修中的设备发起且需要管理员审核。这些规则不能只在前端做按钮禁用后端Service层必须有一层判断否则绕过前端直接调接口就能把系统搞乱。我在指导同学做这个模块时都会建议画一张状态机流转表放进毕业论文的“系统设计”章节。一边用这张图指导开发时的if判断、防重复提交一边让论文有真正的设计感。代码层面可以写一个状态校验工具方法一进Service层就先查设备状态不符合条件就抛业务异常再由全局异常处理器统一转成前端可读的提示信息。4. 小程序端核心功能实现4.1 设备台账与扫码盘点小程序首页通常设计成工作台加设备速查的布局。设备台账模块包括设备列表展示、按名称科室筛选、点击查看详情、设备二维码展示。设备详情页至少要展示设备名称、编号、所在科室、当前状态、最近维护记录并且根据状态显示可操作按钮可用设备显示“借用”已借出显示“归还”维修中显示“查看维修进度”。扫码功能是这类项目最有亮点的部分实现并不复杂。调用微信小程序的扫一扫接口扫到的结果直接就是设备编号然后跳转到设备详情页。这里有个值得想清楚的问题设备码到底用二维码还是一维码医疗设备标签在实际场景中多用一维码但小程序扫一扫对二维码和一维码是自动识别的前端代码不用区分只需要在后台生成标签时选择条形码样式就行。设备标签生成可以在Web管理后台完成设备入库后点击“打印条码”后端返回条码图片前端展示打印。如果不想用后端生成纯前端也有一些开源方案但那样只能生成图片和打印联动起来会比较别扭。综合考虑建议后端提供条码生成接口前端通过图片组件展示这样功能更完整答辩时也能顺带提一句“标签打印与设备编号规则统一”。扫码的典型代码很简单wx.scanCode({ success(res) { const deviceNo res.result; wx.navigateTo({ url: /pages/device/detail?deviceNo${deviceNo} }); } });4.2 借用归还流程的实现要点借用流程的交互可以做两层。科室用户点击设备详情页的“借用”填写预计归还时间提交申请设备管理员在后台或小程序端审核通过后设备状态变为已借出。这是标准的审批模式。如果题目本身没有明确要求“审批”环节你也可以做成扫码即借、点归还即归还的极简模式但在论文里要主动解释为什么省略审批。我更推荐保留审批过程因为这样功能链路更长状态变化更丰富答辩时有更多内容可以展示评审老师也会觉得你的系统更贴近真实管理场景。归还流程要注意几个细节归还时先校验设备当前状态核对是否有未完成的维修报修单同时更新设备所在科室。归还操作产生了两个数据库动作——更新借用记录表的状态与归还时间更新设备表的状态与所在科室这两个动作必须放在同一个事务里保证要么都成功要么都失败。4.3 维修与保养工单闭环报修流程是科室用户扫设备码或从设备列表发起报修填写故障描述设备管理员收到报修请求后分配给维修工程师维修工程师填写处理结果、维修费用提交完成设备管理员核对维修记录后归档设备状态恢复为在库可用。整个流程里有一个容易踩坑的点设备从维修中恢复到在库可用必须由管理员或工程师确认之后自动变更而不是用户报修后设备就自动变成可用状态。保养流程可以做成定时提醒机制。后端用一个定时任务每天扫描设备类型表里的保养周期和设备的最近保养时间一旦发现超期未保养的设备就自动生成一条保养待办记录并在设备管理员的小程序端展示待保养数量。这类定时任务虽然只是一个小工具类但它体现了工程化思考答辩时是一个很自然的加分点。5. 后端接口设计与关键代码逻辑5.1 接口规范与返回体设计后端接口建议统一采用RESTful风格路径以/api开头。设备模块可以这样设计功能方法路径说明设备分页查询GET/api/device/page支持关键字、科室、状态筛选设备详情GET/api/device/{id}返回设备全量信息新增设备POST/api/device管理员操作修改设备PUT/api/device管理员操作发起借用POST/api/device/borrow科室用户调用归还设备POST/api/device/return科室用户调用发起报修POST/api/device/repair科室用户调用统一返回体建议设计成{code, message, data}结构。code200成功code401未登录code403无权限code500业务异常。所有接口都走这一套结构前端封装request.js时就可以统一拦截、统一弹错误提示。这里有一个非常实际的建议分页接口的返回数据不要各写各的最好都封装成一个统一的PageResult对象里面包含total和records两个字段。前端所有分页列表共用同一套逻辑后期加新页面时能省掉很多重复代码。5.2 借还流程的并发与事务处理借用接口是这类系统最容易写错的地方。直接给出核心思路Service层方法加事务注解第一步查询设备记录这里要使用悲观锁第二步判断设备状态是否在库可用不是就抛异常第三步插入借用记录同时更新设备状态为已借出。核心代码逻辑类似这样Transactional public void borrowDevice(Long deviceId, Long userId) { // 使用悲观锁锁定该设备记录防止并发借出 Device device deviceMapper.selectByIdForUpdate(deviceId); if (device null || device.getStatus() ! DEVICE_AVAILABLE) { throw new BizException(设备不存在或当前不可借用); } BorrowRecord record new BorrowRecord(); record.setDeviceId(deviceId); record.setBorrowerId(userId); borrowRecordMapper.insert(record); deviceMapper.updateStatus(deviceId, DEVICE_BORROWED); }有人会问为什么不使用乐观锁乐观锁适合冲突概率低的场景但设备借用是典型的“抢”场景同一台设备可能同时被多个科室扫码扫到。悲观锁虽然牺牲了一点并发吞吐但换来了强一致性对单台设备的借用业务来说更可靠。能把这个取舍讲清楚说明你真的理解了并发控制。归还接口的流程同样需要注意查询借用记录判断是否处于已借出状态更新设备状态为在库可用更新借用记录的归还时间和状态同时更新设备所在科室。每一步都必须在同一个事务里执行不能拆成两次独立请求造成中间状态。经验写接口时不要在Controller里堆业务逻辑。一个瘦Controller、一个胖Service的结构答辩时方向更清晰代码也更方便做单元测试。见过不少同学把几百行业务代码全塞在Controller里Service层只有一个空壳调用这种代码一看就是赶工拼出来的。6. 实操过程中的常见坑与排查技巧6.1 前后端联调和调试技巧这类项目最常见的联调问题集中在三个地方接口域名配置、请求拦截器、数据格式不一致。第一个坑是微信小程序默认不允许访问带域名的HTTP接口开发阶段需要在微信开发者工具里勾选“不校验合法域名”。不少同学开发工具里跑得好好的一到真机测试就发现所有请求全失败就是因为手机小程序没开调试开关或者后端没配置CORS跨域。毕设阶段通常没有独立域名和HTTPS证书建议核心演示用开发者工具模式真机演示时提前打开调试模式再访问。第二个坑是请求拦截器没有统一处理错误。正确做法是在request.js里集中处理未登录跳转、网络错误、业务错误提示让每个业务页面只管自己的数据渲染。如果不做这层封装每个页面都要重复写错误处理逻辑代码会非常冗长。第三个坑是时间格式。后端如果返回LocalDateTime对象没有配置统一格式化的话前端拿到的可能是时间戳数字页面直接显示成“1970年”。解决方法是在后端全局配置Jackson日期格式统一输出为“yyyy-MM-dd HH:mm:ss”。6.2 文档编写与答辩展示要点除了源码文档是容易被忽视但实际占分很高的部分。我提供一个可行的大纲封面摘要、绪论背景、意义、现状分析、需求分析功能需求、角色分析、用例图、系统设计架构图、数据库ER图、表结构、状态机流转、系统实现核心模块截图、关键流程说明、测试功能性测试、异常用例、总结与展望。尤其要重视数据库ER图和状态机流转这是评审老师最爱看的地方最能体现系统设计的严谨性。在答辩展示时不要只讲“我做了什么功能”要讲“这个功能解决什么问题、为什么这么设计”。比如设备借用用了悲观锁就可以主动展开因为可能出现多个用户同时抢借同一台设备用行级锁保证同一笔记录只有一个人能借用成功。测试部分至少补足5个用例包括正常流程、异常流程、边界值测试。例如借用不存在的设备、重复归还同一设备、对维修中状态的设备发起借用。把这些测试过程和结果截图写进文档比空写一句“系统运行正常”有说服力得多。我见过很多同学在这个项目上卡住真正难住他们的往往不是某个具体技术而是被“系统模块多、字段多”吓住了先乱了阵脚。如果你也是刚开始做建议先用一两天把业务流程图和状态机图画出来再照着图去写代码。图画顺了代码自然就顺了。单个模块写完一定要及时测试不要等所有功能写完再联调。小程序、后端、数据库三部分单独跑都没问题合在一起却到处报错多半是字段名不一致、接口路径对不上。最稳妥的路线是先把设备列表这个小闭环跑通再逐步扩展借用、维修、保养循序渐进。最后分享一个小技巧后端服务启动后先不要急着在小程序端测用接口调试工具把这几个核心接口先调通再进入小程序联调。这样能快速区分问题出在后端还是前端。项目本身不算难难的是把每个流程的边界和异常都考虑到位。祝你的毕设顺利过审。

相关新闻

数组基础全解:从内存模型到实战避坑与刷题套路

数组基础全解:从内存模型到实战避坑与刷题套路

数组基础这个主题,放在“day2”来学其实挺有意思。很多教程都把它当成第一天,但真正刷过题之后你会发现,数组远不是“会写 for 循环”就够了。它既是面试题里最朴素的存储结构,也是二分查找、滑动窗口、双指针这些进阶技巧的载体。…

2026/10/13 12:36:39 阅读更多 →
单片机按键菜单框架设计:从状态机到多级菜单的轻量实现

单片机按键菜单框架设计:从状态机到多级菜单的轻量实现

1. 从裸机到菜单:为什么按键交互值得单独设计一套框架很多刚接触单片机的朋友都有过这样的经历:点亮LED、驱动数码管、读取按键状态,这些单独的功能模块跑起来都没问题,可一旦要把它们串成一个带菜单的完整系统,代码就…

2026/10/13 12:36:39 阅读更多 →
OpenClaw本地部署实战:从环境配置到模型接入

OpenClaw本地部署实战:从环境配置到模型接入

1. OpenClaw 是什么:一个能跑 AI 代理的本地运行时1.1 为什么叫“框架”而不是“应用”OpenClaw 是一个开源的 AI 代理运行框架,名字挺直白——Open 是开放,Claw 是爪子,组合起来就是“伸出爪子去抓取任务”。它和市面上常见的 AI…

2026/10/13 12:36:39 阅读更多 →

最新新闻

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

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

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

2026/10/13 13:15:36 阅读更多 →
驱动工具收费怎么办?显卡驱动修复免费替代方案与卸载清理指南

驱动工具收费怎么办?显卡驱动修复免费替代方案与卸载清理指南

前两年我装完系统,第一件事就是找一款驱动管理工具,跑一遍自动检测,网卡、显卡、声卡一次性装齐,整个过程免费,体验也算顺畅。直到前两天,我打开这款老牌驱动工具的新版本,界面确实变干净了&…

2026/10/13 13:15:36 阅读更多 →
DeepSeek Harness:Agent框架的全插件化设计与可回放日志实践

DeepSeek Harness:Agent框架的全插件化设计与可回放日志实践

这两年做 Agent 工程化,我最大的感受是:光有一个能跑通 demo 的工作流远远不够,真正让人头疼的是框架耦合、排查困难、扩展两难。团队内部折腾了大半年,最终沉淀出一套叫 DeepSeek Harness 的 Agent 运行框架。名字里带 Harness&a…

2026/10/13 13:15:36 阅读更多 →
构建帧率无关的时钟可视化内核:requestAnimationFrame与时间流映射

构建帧率无关的时钟可视化内核:requestAnimationFrame与时间流映射

1. 项目概述:这不是一个普通时钟,而是一次视觉逻辑的重新校准“炫酷的时钟效果”——这五个字在前端开发、数字艺术、交互设计甚至新媒体运营的日常沟通中,出现频率远超表面看起来的那么简单。它从来不是指“把时间显示出来”,而是…

2026/10/13 13:15:36 阅读更多 →
免费搭建本地AI知识库:用Cherry Studio和开源模型实现私有文档智能检索

免费搭建本地AI知识库:用Cherry Studio和开源模型实现私有文档智能检索

最近整理资料时我一直在想一个问题:手头文档越堆越多,光是项目方案、会议纪要、行业报告、个人笔记就占了几个文件夹,想快速找出某个结论时经常得翻半天。后来我尝试把常用的云上AI助手当检索工具,但每次都要上传文档、担心隐私、…

2026/10/13 13:15:36 阅读更多 →
个人主页置顶帖与投稿汇总实操指南:打造内容导航体系

个人主页置顶帖与投稿汇总实操指南:打造内容导航体系

1. 先搞清楚:置顶帖和投稿汇总到底在解决什么问题1.1 置顶帖是主页的第一屏,也是你的数字名片我见过太多创作者陷入同一个困境:内容发了几百条,主页却像一个乱糟糟的仓库,新访客点进来根本不知道你擅长什么、写过哪些代…

2026/10/13 13:14:25 阅读更多 →

日新闻

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

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

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

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