基于Spring Boot与uni-app的校园食堂订餐系统:从架构设计到订单状态机实战
简介这份资源是面向高校计算机相关专业学生与Java开发学习者的毕业设计完整文档主题为基于Spring Boot的校园食堂订餐系统的设计与实现可帮助读者理解如何将所学技术落地到真实校园服务场景中。系统针对疫情期间食堂拥挤、学生外卖依赖、就餐不便及商家经营效率低等问题采用B/S架构后台以Spring Boot轻量框架搭建前端借助uni-app实现跨Android、iOS、H5及小程序的手机端访问并使用MySQL完成数据存储。核心功能涵盖手机端菜品浏览、订单提交与限时修改撤销、校园一卡通在线支付以及菜品销售统计论文还完整呈现了总体设计、编码实现、测试调试与未来展望等章节。资源包为1个doc文档大小约3.32MB结构完整、论述详实适合作为同类订餐系统或JavaEE项目的选题参考与写作范本。目前已有9246人学习下载具备较高的参考热度与借鉴价值。1. 从一份毕设文档说起这套校园食堂订餐系统到底能跑通什么每年毕业季后台总有人问我有没有那种“技术栈主流、业务闭环完整、能直接照着搭起来”的毕设参考我一般不会直接甩源码而是先看它的设计文档能不能自圆其说。这份《基于 Spring Boot 的校园食堂订餐系统的设计与实现》就是典型样本——它不是玩具级的增删改查而是把学生订餐、商家接单、一卡通支付、菜品销量统计串成了一条完整链路。后端用 Spring Boot 做轻量级服务前端用 uni-app 一套代码同时覆盖 Android、iOS、H5 和小程序数据库落在 MySQL 8.0开发工具是 IDEA 和 WebStorm。如果你正在找一份能讲清楚“订单状态怎么流转、支付怎么对接、统计怎么做”的参考这份文档的骨架值得拆开看。它适合两类人一是需要快速理解 B/S 架构下订餐系统全貌的在校开发者二是想拿它当模板改造成其他预约类系统的熟手。2. 技术选型拆解为什么是 Spring Boot uni-app MySQL 这套组合2.1 后端为什么选 Spring Boot 而不是传统 SSM这份文档里写得很直白后台使用 Spring Boot 新型轻量开发框架。我翻过不少同类毕设发现一个分水岭——用 SSM 的光 XML 配置就能占掉论文三页用 Spring Boot 的启动类加几个注解就能跑。这不是偷懒是选型逻辑变了。校园食堂订餐系统的核心压力在饭点前后半小时大量学生同时刷新菜单、提交订单、发起支付。Spring Boot 内嵌 Tomcat配合默认的 HikariCP 连接池省去了外置容器和繁琐的数据源配置。文档里提到的“及时性”和“准确性”两个性能指标落到代码层面就是订单接口响应要快库存扣减不能超卖。我一般会这样搭后端骨架// 启动类开启事务管理和定时任务支持 SpringBootApplication EnableTransactionManagement EnableScheduling public class CanteenApplication { public static void main(String[] args) { SpringApplication.run(CanteenApplication.class, args); } }逻辑说明EnableTransactionManagement是为了保证下单时“扣库存 生成订单 写支付流水”在一个事务里避免部分成功导致串单。EnableScheduling留给后面订单超时自动取消用。参数层面application.yml里我会把连接池调成这样spring: datasource: url: jdbc:mysql://localhost:3306/canteen?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: your_password hikari: maximum-pool-size: 20 # 饭点并发高默认10不够用 minimum-idle: 5 connection-timeout: 30000maximum-pool-size设 20 是经验值按文档里“万人校园”的规模同时在线选餐的峰值大概在 200 左右20 个连接配合合理的 SQL 索引足够扛住。设太大反而会拖慢数据库。2.2 前端为什么用 uni-app 而不是纯 Vue文档里有一句关键描述“前台技术使用可跨 Android、IOS、H5、小程序的 uni-app 进行开发”。这句话背后是真实的成本考量。如果只写 H5学生得打开浏览器输网址如果只做小程序苹果用户和安卓用户又得分别审核。uni-app 的编译能力让一套代码同时出四个端对校园项目来说维护成本直接砍半。实际开发时菜品列表页我会这样写template view classdish-list view v-foritem in dishes :keyitem.id classdish-item image :srcitem.imageUrl modeaspectFill/image text classname{{ item.name }}/text text classprice{{ item.price }}/text button clickaddToCart(item) :disableditem.stock 0 {{ item.stock 0 ? 加入购物车 : 已售罄 }} /button /view /view /template script export default { data() { return { dishes: [] }; }, onLoad() { this.fetchDishes(); }, methods: { async fetchDishes() { // 调用后端菜品列表接口按食堂窗口分组 const res await uni.request({ url: http://localhost:8080/api/dish/list, method: GET, data: { canteenId: 1, page: 1, size: 20 } }); this.dishes res.data.data; }, addToCart(item) { // 库存为0时按钮已禁用这里再做一次兜底校验 if (item.stock 0) return; this.$store.commit(cart/add, item); } } }; /script逻辑说明onLoad里拉取菜品stock 0时按钮置灰并显示“已售罄”这是防止用户把无库存菜品加进购物车。参数canteenId用来区分不同食堂page和size做分页避免一次拉取全部数据导致首屏卡顿。2.3 MySQL 表结构设计的几个关键决策文档第 3 章提到数据库设计原则和 E-R 图分析。我根据订餐业务的实际流转把核心表关系理了一下表名关键字段设计意图userid, student_no, card_no, role区分学生、教职工、商家、管理员canteenid, name, location, status支持多食堂管理dishid, canteen_id, name, price, stock, category菜品归属食堂库存独立orderid, user_id, total_amount, status, create_time订单主表status 控制流转order_itemid, order_id, dish_id, quantity, price订单明细快照下单时价格paymentid, order_id, card_no, amount, pay_time一卡通支付流水这里有个容易翻车的点order_item里的price必须冗余存储。如果只存dish_id商家改价后历史订单金额就全乱了。这是血泪经验后面避坑章节还会展开。3. 从零跑通核心链路登录、选餐、下单、支付、统计3.1 登录模块与权限拦截文档第 4 章把登录模块放在公共模块之后说明它是所有业务的前置。校园订餐系统有三类角色学生/教职工、商家、食堂管理员。登录不能只验账号密码还要根据角色返回不同的菜单权限。RestController RequestMapping(/api/auth) public class AuthController { Autowired private UserService userService; PostMapping(/login) public Result login(RequestBody LoginDTO dto) { // 1. 校验账号密码 User user userService.findByStudentNo(dto.getStudentNo()); if (user null || !BCrypt.checkpw(dto.getPassword(), user.getPassword())) { return Result.fail(账号或密码错误); } // 2. 生成 token写入角色信息 String token JwtUtil.generateToken(user.getId(), user.getRole()); // 3. 返回角色对应的前端路由权限 MapString, Object data new HashMap(); data.put(token, token); data.put(role, user.getRole()); data.put(permissions, userService.getPermissions(user.getRole())); return Result.success(data); } }逻辑说明密码用 BCrypt 加密存储避免明文泄露。JWT token 里带role后续接口用拦截器校验权限。permissions返回给前端做动态路由学生看不到商家后台入口。参数说明studentNo是学号/工号password前端传明文后端比对哈希值。token 有效期我一般设 2 小时饭点前重新登录一次兼顾安全和体验。3.2 订单状态机与库存扣减这是整个系统最容易出 bug 的地方。文档里提到“学生可以提交订单、一定时间范围修改和撤销订单”意味着订单状态不是简单的“已下单/已完成”而是一个状态机。我一般会定义这几个状态public enum OrderStatus { PENDING_PAYMENT(0, 待支付), PAID(1, 已支付), PREPARING(2, 备餐中), READY(3, 待取餐), COMPLETED(4, 已完成), CANCELLED(5, 已取消), REFUNDED(6, 已退款); private final int code; private final String desc; // 构造方法省略 }下单接口的核心逻辑Transactional(rollbackFor Exception.class) public Result createOrder(Long userId, ListOrderItemDTO items) { // 1. 校验库存并扣减用乐观锁防止超卖 for (OrderItemDTO item : items) { int affected dishMapper.reduceStock(item.getDishId(), item.getQuantity()); if (affected 0) { throw new BusinessException(菜品[ item.getDishName() ]库存不足); } } // 2. 生成订单主表和明细 Order order new Order(); order.setUserId(userId); order.setStatus(OrderStatus.PENDING_PAYMENT.getCode()); order.setCreateTime(new Date()); orderMapper.insert(order); for (OrderItemDTO item : items) { OrderItem oi new OrderItem(); oi.setOrderId(order.getId()); oi.setDishId(item.getDishId()); oi.setQuantity(item.getQuantity()); oi.setPrice(item.getPrice()); // 快照价格 orderItemMapper.insert(oi); } // 3. 返回订单号前端跳转支付 return Result.success(order.getId()); }逻辑说明reduceStock的 SQL 是UPDATE dish SET stock stock - #{qty} WHERE id #{id} AND stock #{qty}利用数据库行锁保证原子性。如果返回 0 说明库存不够抛异常回滚整个事务。Transactional保证扣库存和写订单要么全成要么全败。参数说明items是购物车传来的菜品列表每个元素包含dishId、quantity、price。price从后端查库获取不信任前端传值防止篡改金额。3.3 一卡通支付对接的模拟实现文档提到“线上学生一卡通支付功能”。真实的一卡通接口通常由学校信息中心提供但毕设环境一般用模拟支付。我一般会写一个支付网关抽象public interface PaymentGateway { PaymentResult pay(String cardNo, BigDecimal amount, String orderNo); PaymentResult refund(String orderNo, BigDecimal amount); } Service public class MockCardPaymentGateway implements PaymentGateway { Override public PaymentResult pay(String cardNo, BigDecimal amount, String orderNo) { // 模拟卡号以 1 开头视为余额充足 if (cardNo.startsWith(1)) { // 写支付流水 Payment payment new Payment(); payment.setOrderNo(orderNo); payment.setCardNo(cardNo); payment.setAmount(amount); payment.setPayTime(new Date()); paymentMapper.insert(payment); return PaymentResult.success(支付成功); } return PaymentResult.fail(余额不足); } }逻辑说明接口抽象是为了后续替换成真实一卡通 SDK 时不用改业务代码。MockCardPaymentGateway用卡号前缀模拟成功/失败方便测试。参数说明cardNo是学生一卡通卡号amount是订单金额orderNo是系统订单号。支付成功后更新订单状态为PAID并触发备餐通知。3.4 菜品统计的 SQL 实现文档第 4.3.4 节提到菜品统计实现商家要根据销量预估原材料。这个功能的核心是一条聚合查询SELECT d.name AS dish_name, SUM(oi.quantity) AS total_sold, SUM(oi.quantity * oi.price) AS total_amount, DATE(o.create_time) AS sale_date FROM order_item oi JOIN orders o ON oi.order_id o.id JOIN dish d ON oi.dish_id d.id WHERE o.status IN (1, 2, 3, 4) -- 只统计已支付及之后的订单 AND o.create_time BETWEEN #{startDate} AND #{endDate} GROUP BY d.id, DATE(o.create_time) ORDER BY total_sold DESC;逻辑说明只统计PAID及之后状态的订单排除待支付和已取消的。按菜品和日期分组商家可以看到某道菜一周内的销量趋势。参数说明startDate和endDate由前端日期选择器传入默认查最近 7 天。如果数据量大建议在order.create_time和order_item.order_id上建联合索引。4. 避坑与排查订单超卖、支付回调丢失、跨域这些坑怎么填4.1 现象饭点高峰期订单超卖库存扣成负数原因扣库存时先SELECT查库存再UPDATE扣减两个操作之间没有锁。并发上来后多个请求同时查到相同库存都以为够扣。解决改成原子更新UPDATE dish SET stock stock - #{qty} WHERE id #{id} AND stock #{qty}用数据库行锁保证一致性。如果返回影响行数为 0直接抛异常回滚。这是最稳妥的方案不需要引入分布式锁。4.2 现象学生支付成功但订单状态还是“待支付”原因支付回调接口没有做幂等处理或者回调地址配置错误。模拟支付时如果前端直接改状态后端没收到通知就会出现数据不一致。解决支付成功后前端轮询订单状态接口后端在支付流水表里查order_no是否存在。如果存在但订单状态未更新主动补偿更新。真实环境要加回调验签和重试机制。4.3 现象uni-app 请求后端接口报跨域错误原因开发阶段前端跑在localhost:8081后端跑在localhost:8080浏览器同源策略拦截。解决后端加全局跨域配置Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/api/**) .allowedOriginPatterns(*) .allowedMethods(GET, POST, PUT, DELETE) .allowCredentials(true) .maxAge(3600); } }注意生产环境要把allowedOriginPatterns改成具体域名不要用*配合allowCredentials(true)否则会有安全风险。4.4 现象商家修改菜品价格后历史订单金额对不上原因order_item表只存了dish_id没有存下单时的价格。商家改价后关联查询出来的金额全变了。解决下单时把price快照到order_item表。统计和展示都用快照价格不用dish表的当前价格。这个坑我在三个项目里见过每次都是血泪教训。4.5 现象订单超时未支付库存一直被占用原因没有定时任务清理超时订单库存扣了但订单没支付其他学生买不了。解决用Scheduled每分钟扫描一次Scheduled(fixedRate 60000) public void cancelTimeoutOrders() { // 查询创建超过15分钟且状态为待支付的订单 ListOrder timeoutOrders orderMapper.findTimeoutOrders(15); for (Order order : timeoutOrders) { // 恢复库存 ListOrderItem items orderItemMapper.findByOrderId(order.getId()); for (OrderItem item : items) { dishMapper.restoreStock(item.getDishId(), item.getQuantity()); } // 更新订单状态为已取消 orderMapper.updateStatus(order.getId(), OrderStatus.CANCELLED.getCode()); } }参数说明fixedRate 60000表示每分钟执行一次。15是超时分钟数可根据食堂备餐时间调整。5. 进阶技巧用状态机引擎管订单流转以及一份可复用的测试清单订单状态流转如果全靠if-else判断代码会膨胀得很快。我后来习惯引入轻量状态机把流转规则抽出来。以 Spring StateMachine 为例先定义状态和事件Configuration EnableStateMachine public class OrderStateMachineConfig extends StateMachineConfigurerAdapterOrderStatus, OrderEvent { Override public void configure(StateMachineStateConfigurerOrderStatus, OrderEvent states) throws Exception { states.withStates() .initial(OrderStatus.PENDING_PAYMENT) .state(OrderStatus.PAID) .state(OrderStatus.PREPARING) .state(OrderStatus.READY) .state(OrderStatus.COMPLETED) .state(OrderStatus.CANCELLED) .end(OrderStatus.COMPLETED) .end(OrderStatus.CANCELLED); } Override public void configure(StateMachineTransitionConfigurerOrderStatus, OrderEvent transitions) throws Exception { transitions .withExternal().source(OrderStatus.PENDING_PAYMENT).target(OrderStatus.PAID).event(OrderEvent.PAY) .and() .withExternal().source(OrderStatus.PENDING_PAYMENT).target(OrderStatus.CANCELLED).event(OrderEvent.CANCEL) .and() .withExternal().source(OrderStatus.PAID).target(OrderStatus.PREPARING).event(OrderEvent.ACCEPT) .and() .withExternal().source(OrderStatus.PREPARING).target(OrderStatus.READY).event(OrderEvent.FINISH) .and() .withExternal().source(OrderStatus.READY).target(OrderStatus.COMPLETED).event(OrderEvent.PICKUP); } }逻辑说明状态机把“什么状态下能触发什么事件”集中管理业务代码里只需要stateMachine.sendEvent(OrderEvent.PAY)不用再写一堆if (status PENDING_PAYMENT)。新增状态或调整流转规则时改配置类就行不会漏改。参数说明OrderStatus和OrderEvent都是枚举。withExternal表示外部状态转换转换后触发持久化操作。测试环节文档第 5 章提到黑盒测试。我一般会准备一份覆盖核心链路的清单测试场景输入预期结果正常下单库存充足余额充足订单创建成功库存扣减状态待支付库存不足购买数量大于库存返回“库存不足”事务回滚支付成功卡号以1开头订单状态变已支付写支付流水支付失败卡号不以1开头订单保持待支付提示余额不足取消订单待支付状态取消库存恢复状态变已取消超时未支付创建后15分钟未支付定时任务取消订单恢复库存商家接单已支付订单点接单状态变备餐中统计查询选择日期范围返回菜品销量和金额汇总这份清单我每次改完订单模块都会跑一遍尤其是库存和状态流转相关的用例。从那以后我每次动订单状态机之前都强制先把这份清单过一遍确认没有遗漏的流转分支。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

人脸超分与关键点估计迭代协作:注意力恢复机制解析

人脸超分与关键点估计迭代协作:注意力恢复机制解析

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

2026/10/14 1:39:10 阅读更多 →
YOLOv3电塔绝缘子检测权重:快速推理与微调实战

YOLOv3电塔绝缘子检测权重:快速推理与微调实战

简介:这是一份面向电力设施智能监测场景的YOLOv3电塔绝缘子检测训练成果包,适合目标检测初学者、电力巡检算法开发者及需要小目标检测参考方案的技术人员使用。资源包共990个文件,约520.07MB,包含json标注数据、png与jpg图像样本、…

2026/10/14 1:38:10 阅读更多 →
单链表头尾插法:带尾指针的工业级实现

单链表头尾插法:带尾指针的工业级实现

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

2026/10/14 1:38:10 阅读更多 →

最新新闻

风电水电联合调度优化算法与工程实践

风电水电联合调度优化算法与工程实践

1. 项目背景与核心价值去年参与某省级电网清洁能源消纳项目时,我第一次接触到风-水联合调度这个课题。当时面对风电出力的强随机性和水电调节的滞后性,团队在制定优化运行方案时遇到了不少挑战。这个经历让我深刻认识到:在双碳目标下&#xf…

2026/10/14 2:21:24 阅读更多 →
从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

1. 为什么我最终把数据库建模从商业软件迁到了PDMan做后端开发时间长了,数据库建模这件事几乎绕不开。早些年团队里清一色用PowerDesigner,画物理模型、生成DDL、导出字段文档,一套流程走下来确实顺手。但问题也很明显:正版授权费…

2026/10/14 2:21:24 阅读更多 →
微信小程序仿智行火车票开发实战:云开发+数据离线化方案

微信小程序仿智行火车票开发实战:云开发+数据离线化方案

简介:本资源是一套完整的微信小程序仿智行火车票12306系统实战项目,面向Java后端与小程序前端初学者及全栈学习者,聚焦铁路订票核心业务场景,涵盖用户查询、车次管理、订单生成等全流程功能实现。项目采用SSM(SpringSp…

2026/10/14 2:21:23 阅读更多 →
RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

简介:这份资源是面向需要在网页中播放RTMP流媒体的开发者与运维人员的一套Flash播放插件实现方案,核心解决旧系统或特定场景下通过Flash技术播放RTMP直播、点播流的问题。压缩包共5个文件,约1.15MB,包含2个swf播放器与安装检测组件…

2026/10/14 2:21:23 阅读更多 →
AI编程助手代码质量救星:TypeScript静态类型约束实战

AI编程助手代码质量救星:TypeScript静态类型约束实战

AI 编程助手越帮越乱,这个话题我最近真的是感同身受。我们团队接入 AI 编程助手之后,合并请求里的代码量倒是上去了,可编译期错误非但没减少,反而冒出来一批"语法完全合法、类型对不上、一跑就崩"的代码。后来大家坐下来…

2026/10/14 2:21:23 阅读更多 →
LaTeX 2025环境配置:texlive + TeXstudio

LaTeX 2025环境配置:texlive + TeXstudio

文章目录Latex2025环境配置一、LaTeX 简介1.1 什么是 LaTeX?1.2 为什么使用 LaTeX?1.3 如何开始使用 LaTeX?二、texlive下载安装2.1 texlive下载2.2 texlive安装2.3 常见问题2.3.1 用管理员权限打开install-tl-windows.bat 报错2.3.2 Latex安…

2026/10/14 2:20:23 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/13 16:22:04 阅读更多 →
影刀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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →