SpringBoot+Vue超市管理系统:一小时极速搭建与核心流程解析
最近在帮几个学弟学妹看期末大作业发现一个挺有意思的现象很多人一听到“超市管理系统”或者“SpringBootVue前后端分离”第一反应就是去网上找源码然后试图在一天内“跑起来”交差。结果往往是环境报错、数据库连不上、前端页面白屏、接口404最后几个小时全耗在了解决各种莫名其妙的错误上项目没跑通该学的核心流程也完全没理解。这其实陷入了一个误区把期末大作业当成了“安装部署”任务。但它的核心价值恰恰在于通过一个完整的、有业务逻辑的项目把一学期学的零散知识点数据库、后端框架、前端框架串联起来理解数据是如何从前端表单经过网络请求抵达后端控制器再通过ORM与数据库交互最后把结果渲染回页面的。这个过程比代码本身更重要。今天我们就以这个经典的“SpringBootVue2超市管理系统”为例不追求花哨的功能而是聚焦于如何用最短的时间搭建一个能跑通、能演示、代码结构清晰、并且你自己能讲清楚每一层作用的项目。我们的目标不是“复制粘贴”而是“理解并重现”。我会带你走一遍从零到一的完整流程并重点解释那些容易卡住的关键环节和背后的“为什么”。1. 为什么选择“超市管理系统”作为练手项目在开始敲代码之前我们先要搞清楚为什么老师总喜欢出“XX管理系统”这类题目它到底在考察什么理解了这一点你才能有的放矢而不是盲目堆砌功能。1.1 它是一个完美的CRUD综合体CRUD增删改查是后端开发最基础、最核心的操作。一个超市管理系统天然包含了这些操作Create添加新商品、新员工、新供应商。Read查询商品列表、查看销售记录、统计库存。Update修改商品信息、更新库存数量、调整商品售价。Delete下架商品、删除离职员工信息。通过实现这套流程你就能完整地实践从前端表单提交到后端接收参数、处理业务、操作数据库再返回结果的全链路。这是任何企业级应用的基石。1.2 它涵盖了典型的数据关系和业务逻辑除了简单的单表操作超市系统还涉及稍微复杂点的关系一对多一个商品类别下有多个商品。多对多一次销售单包含多个商品一个商品也可以出现在多张销售单中通过中间表“销售明细”连接。聚合计算统计每日销售额、计算商品利润、盘点库存总量。 这些关系映射到数据库就是表关联JOIN映射到后端就是实体类之间的关联映射如MyBatis-Plus的TableField或JPA的OneToMany映射到前端可能就是级联选择器或表格嵌套。理解这些就从“会写接口”进阶到了“会设计数据模型”。1.3 技术栈匹配度极高资源丰富SpringBoot Vue2 MySQL 这个技术栈几乎是高校教学和初学者入门的事实标准。SpringBoot简化了后端配置Vue2的响应式和组件化思想易于上手MySQL资料更是随处可见。这意味着学习成本可控你遇到的大部分问题都能在网上找到成堆的解决方案。项目结构成熟有大量开源项目可以参考其目录划分、配置方式避免从零设计架构的茫然。便于演示和答辩前后端分离前端页面美观后端接口清晰非常适合在期末演示时分模块讲解。所以做这个项目你的首要目标不是创新而是通过实现一个标准流程把书本上的概念如MVC、RESTful API、组件、路由变成自己亲手验证过的经验。2. 一小时极速搭建先让项目“跑起来”我们采用“先骨架后血肉”的策略。第一步不计较细节只用最快速度搭建一个最小可运行的环境看到浏览器里的欢迎页和后端接口的返回数据。这能建立信心并验证基础环境是否正确。2.1 后端SpringBoot快速初始化使用Spring Initializr官方或IDE如IntelliJ IDEA内置的Spring Boot创建向导。核心依赖选择Spring Web用于构建RESTful API。MyBatis Framework或MyBatis-Plus后者是国内更流行的增强工具能极大减少单表CRUD的代码量建议初学者使用。MySQL Driver连接MySQL数据库。Lombok通过注解自动生成Getter/Setter等方法让实体类代码更简洁。创建完成后你的pom.xml里应该包含这些依赖。dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.3.0/version !-- 使用与SpringBoot版本匹配的版本 -- /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies关键配置 (application.yml或application.properties)server: port: 8080 # 后端服务端口 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/supermarket_db?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai username: root # 你的数据库用户名 password: yourpassword # 你的数据库密码 mybatis: mapper-locations: classpath:mapper/*.xml # MyBatis的SQL映射文件位置 configuration: map-underscore-to-camel-case: true # 重要自动将数据库的user_name映射到Java的userName注意serverTimezoneAsia/Shanghai对于高版本MySQL驱动非常重要缺少它可能导致连接失败。map-underscore-to-camel-case能省去大量手动映射的麻烦。2.2 前端Vue2快速初始化使用Vue CLI需要提前安装Node.js。# 1. 安装Vue CLI (如果已安装请跳过) npm install -g vue/cli # 2. 创建项目 vue create supermarket-frontend # 3. 进入项目目录 cd supermarket-frontend # 4. 安装基础依赖创建时通常已包含 # 如果需要手动安装axios用于网络请求和element-ui作为UI组件库 npm install axios element-ui -S创建后修改src/main.js引入Element-UI和axiosimport Vue from vue import App from ./App.vue import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import axios from axios Vue.use(ElementUI); Vue.prototype.$axios axios; // 将axios挂载到Vue原型上方便使用 axios.defaults.baseURL http://localhost:8080; // 设置后端API基础地址 new Vue({ render: h h(App), }).$mount(#app)2.3 打通第一个API从数据库到浏览器现在我们来创建一个最简单的“商品查询”功能验证前后端是否联通。第一步设计数据库表CREATE DATABASE IF NOT EXISTS supermarket_db; USE supermarket_db; CREATE TABLE product ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL COMMENT 商品名称, price decimal(10,2) NOT NULL COMMENT 单价, stock int(11) NOT NULL DEFAULT 0 COMMENT 库存, category varchar(50) DEFAULT NULL COMMENT 类别, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO product (name, price, stock, category) VALUES (可口可乐, 3.00, 100, 饮料), (乐事薯片, 6.50, 50, 零食);第二步创建SpringBoot后端实体、Mapper、Service、Controller实体类 (Product.java): 使用Lombok简化代码。import lombok.Data; Data public class Product { private Integer id; private String name; private BigDecimal price; private Integer stock; private String category; }Mapper接口 (ProductMapper.java): 使用MyBatis-Plus则继承BaseMapper无需写XML。import com.baomidou.mybatisplus.core.mapper.BaseMapper; Mapper public interface ProductMapper extends BaseMapperProduct { // 基本的CRUD方法已由BaseMapper提供 }Service层 (ProductService.java): 封装业务逻辑。Service public class ProductService { Autowired private ProductMapper productMapper; public ListProduct getAllProducts() { return productMapper.selectList(null); // 查询所有 } }Controller层 (ProductController.java): 提供REST API。RestController RequestMapping(/api/product) public class ProductController { Autowired private ProductService productService; GetMapping(/list) public Result getAllProducts() { ListProduct list productService.getAllProducts(); return Result.success(list); // Result是一个自定义的统一响应体 } }Result类示例Data public class ResultT { private Integer code; private String msg; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.setCode(200); result.setMsg(成功); result.setData(data); return result; } }第三步创建Vue前端页面在src/components下创建ProductList.vuetemplate div h2商品列表/h2 el-table :dataproductList stylewidth: 100% el-table-column propid labelID/el-table-column el-table-column propname label商品名/el-table-column el-table-column propprice label单价/el-table-column el-table-column propstock label库存/el-table-column el-table-column propcategory label类别/el-table-column /el-table /div /template script export default { data() { return { productList: [] }; }, mounted() { this.fetchProductList(); }, methods: { fetchProductList() { this.$axios.get(/api/product/list) .then(response { if (response.data.code 200) { this.productList response.data.data; } }) .catch(error { console.error(获取商品列表失败:, error); this.$message.error(获取数据失败); }); } } }; /script在App.vue中引入这个组件。第四步运行与测试启动MySQL服务。运行SpringBoot主类通常是XxxApplication.java。在前端项目目录下运行npm run serve。打开浏览器访问http://localhost:8080后端看是否有默认页或检查日志。访问http://localhost:8081Vue前端默认端口你应该能看到一个表格里面显示着“可口可乐”和“乐事薯片”的数据。如果这一步成功了恭喜你最艰难的环境打通工作已经完成。你已经拥有了一个前后端分离、能进行数据交互的完整项目骨架。3. 核心功能实现与代码分层理解骨架搭好接下来就是填充血肉——实现超市系统的核心模块。我们以“商品管理”和“销售管理”为例重点理解代码如何分层以及每层的职责。3.1 商品管理模块完整的CRUD流程这是最标准的增删改查。我们来实现添加商品、分页查询商品、修改商品、删除商品。后端实现要点Controller层定义API端点处理HTTP请求和响应。PostMapping(/add) public Result addProduct(RequestBody Product product) { // RequestBody接收JSON boolean saved productService.save(product); return saved ? Result.success(添加成功) : Result.error(添加失败); } GetMapping(/page) public Result getProductByPage(RequestParam Integer pageNum, RequestParam Integer pageSize) { PageProduct page new Page(pageNum, pageSize); PageProduct result productService.page(page); return Result.success(result); }Service层这里可以加入业务逻辑比如添加商品前检查名称是否重复修改时更新库存等。public boolean saveProduct(Product product) { // 业务逻辑检查商品名是否已存在 QueryWrapperProduct wrapper new QueryWrapper(); wrapper.eq(name, product.getName()); if (this.getOne(wrapper) ! null) { throw new RuntimeException(商品已存在); } return this.save(product); }Mapper层MyBatis-Plus的BaseMapper已经提供了绝大部分单表方法。复杂查询如多表关联可能需要自定义SQL写在XML文件或注解里。前端实现要点组件化将商品列表ProductList.vue、商品表单ProductForm.vue拆分成独立组件。API调用封装可以创建一个api/product.js文件集中管理所有商品相关的请求函数使组件逻辑更清晰。// src/api/product.js import request from /utils/request // 通常会对axios进行二次封装 export function getProductList(params) { return request({ url: /api/product/page, method: get, params }) } export function addProduct(data) { return request({ url: /api/product/add, method: post, data }) }表单验证使用Element UI的el-form配合rules属性进行前端输入验证。状态管理可选对于简单的期末项目用组件内状态data和props/$emit传递数据基本足够。如果状态复杂可以考虑引入Vuex。3.2 销售管理模块理解事务与数据关联销售模块比商品模块复杂因为它涉及事务和多表操作。销售单 (SaleOrder)记录一次销售的总信息单号、时间、总金额、操作员。销售明细 (SaleItem)记录本次销售包含了哪些商品、数量、单价。后端实现要点实体关联SaleOrder实体中有一个ListSaleItem属性。Service层的事务控制添加销售单是一个典型的事务操作需要保证“创建销售单记录”和“批量插入销售明细”同时成功或失败并且要更新商品的库存。Transactional // 关键注解声明事务 public boolean createSaleOrder(SaleOrderDTO saleOrderDTO) { // 1. 保存销售单主表 SaleOrder order convertToOrder(saleOrderDTO); this.save(order); // 2. 遍历明细保存明细表并扣减对应商品库存 for (SaleItemDTO itemDTO : saleOrderDTO.getItems()) { SaleItem item convertToItem(itemDTO, order.getId()); saleItemService.save(item); // 扣减库存 productService.deductStock(itemDTO.getProductId(), itemDTO.getQuantity()); } // 3. 其他业务逻辑... return true; }注意Transactional默认只对运行时异常RuntimeException进行回滚。如果业务中需要检查异常也回滚需指定rollbackFor Exception.class。这是面试和实际开发中常见的考点。前端实现要点动态表单销售单需要动态添加/删除商品行。可以使用v-for循环渲染一个数组每个数组元素代表一个商品行。级联与计算选择商品后自动带出单价输入数量后自动计算该行小计所有行小计之和自动计算为总金额。这些都可以用Vue的计算属性computed和监听器watch轻松实现。数据提交前端需要构造一个嵌套的JSON对象传给后端结构大致如{ orderInfo: {...}, items: [...] }。通过实现这个模块你才能真正理解“业务逻辑”是什么以及数据库事务在保证数据一致性中的关键作用。4. 项目打包、部署与答辩准备代码写完了本地也能跑但怎么交给老师或进行答辩演示你需要一个“开箱即用”的部署包。4.1 后端SpringBoot打包SpringBoot项目打包非常简单通常打包成一个可执行的JAR文件。确保pom.xml中有SpringBoot的Maven插件。build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build在项目根目录下执行Maven命令mvn clean package -DskipTests打包完成后在target目录下会生成一个your-project-name-0.0.1-SNAPSHOT.jar文件。运行在服务器或演示电脑上只需安装Java环境JRE然后通过命令行运行java -jar your-project-name-0.0.1-SNAPSHOT.jar程序会使用内嵌的Tomcat服务器启动。4.2 前端Vue项目打包与整合Vue项目需要打包成静态资源HTML, JS, CSS。修改前端项目的vue.config.js文件如果没有则创建解决开发和生产环境API地址问题并设置打包路径。module.exports { // 打包后静态资源输出的目录可选默认dist outputDir: dist, // 静态资源路径如果你的后端服务在根路径可以设为空或./ publicPath: process.env.NODE_ENV production ? ./ : /, // 配置开发环境代理解决跨域仅开发时有效 devServer: { proxy: { /api: { target: http://localhost:8080, // 你的后端地址 changeOrigin: true } } } }执行打包命令npm run build打包后dist文件夹里就是所有静态文件。如何部署有两种常见方式方式一前后端完全分离部署将dist里的文件放到Nginx或Apache等Web服务器上后端JAR单独运行。前端通过配置Nginx代理将/api请求转发到后端服务。这是生产环境标准做法。方式二整合到SpringBoot适合答辩演示将dist文件夹下的所有文件复制到SpringBoot项目的src/main/resources/static目录下。然后重新打包SpringBoot项目。这样运行JAR后访问http://localhost:8080就能直接看到前端页面后端API也在同一个端口下/api。这是最省事、最适合期末演示的方法。4.3 数据库的交付SQL脚本与初始数据你不能要求老师的电脑上正好有一个叫supermarket_db的数据库。你需要提供一个SQL脚本。在你的MySQL客户端导出数据库结构和数据。生成一个supermarket_init.sql文件。将这个文件放在项目根目录的/docs或/sql文件夹下。在项目说明文档README.md中清晰地写明第一步执行这个SQL脚本。-- 在MySQL中执行 source /path/to/your/supermarket_init.sql; -- 或者用图形化工具导入4.4 答辩准备理解重于演示答辩时老师最想听的往往不是你的功能有多炫而是你是否理解你写的代码。你需要能讲清楚项目结构为什么分Controller、Service、Mapper层每层干什么关键技术点前后端如何通信RESTful API, Axios如何解决跨域问题开发时用Vue代理生产时用Nginx或整合部署数据库连接池是啥SpringBoot自动配置了HikariCPMyBatis-Plus比原生MyBatis方便在哪条件构造器、通用CRUD销售功能为什么要用Transactional保证数据一致性遇到的问题与解决准备一两个你实际遇到并解决的bug比如时区问题、依赖冲突、前端跨域并说明排查思路。这能极大体现你的实践能力。如何运行你的项目用最简洁的步骤1.导入SQL2.运行JAR3.访问页面告诉老师。5. 从“能跑”到“好用”可选的进阶优化点如果你的时间还有富余或者想给项目增加亮点可以考虑以下优化方向。这些不是必须的但每一个都能加深你对工程化的理解。5.1 后端优化统一响应封装我们已经用了Result类这很好。可以进一步统一异常处理ControllerAdviceExceptionHandler让所有异常都返回格式一致的错误信息。参数校验使用Validated注解和JSR-303校验注解如NotBlank,Min在Controller层进行入参校验避免无效数据进入Service。日志记录使用SLF4J Logback在关键业务节点如创建订单、修改库存记录日志便于排查问题。简单权限控制如果要求用户登录可以引入Spring Security或JWTJSON Web Token实现一个最简单的登录拦截和权限验证。5.2 前端优化路由管理使用Vue Router管理页面跳转实现单页面应用SPA体验。状态管理如果组件间通信变得复杂引入Vuex来集中管理状态如用户登录信息、购物车。API模块化如前所述将所有的axios请求按模块封装到src/api目录下。环境配置通过.env.development和.env.production文件管理不同环境开发、生产的API基础地址等配置。5.3 部署优化了解即可Docker化编写Dockerfile将后端、前端、数据库分别容器化用docker-compose.yml一键启动整个应用。这是现代应用部署的流行方式写在报告里是很好的加分项。使用配置文件将数据库密码等敏感信息从application.yml移到application-prod.yml并通过启动参数--spring.profiles.activeprod激活生产配置避免密码硬编码。完成这个项目你收获的绝不仅仅是一个可以交差的作业。你完整地走通了一个现代Web应用从设计、开发、调试到打包部署的全流程。你理解了数据如何流动代码如何分层前后端如何协作。下次再遇到“管理系统”类的需求你心里会有一个清晰的蓝图知道从哪里开始可能会遇到什么坑以及如何系统地解决它们。这才是期末大作业乃至任何学习项目真正想要带给你的东西。

相关新闻

企业家AI原生学习平台推荐:AI迭代一日千里,高参学堂直击行业前沿

企业家AI原生学习平台推荐:AI迭代一日千里,高参学堂直击行业前沿

现下,AI技术迭代速度远超以往任何产业。麦肯锡《2025年AI现状报告》显示,88%的企业已在至少一个业务中部署AI,但近三分之二仍停留在试验阶段,未能规模化落地。与此同时,斯坦福《2026 AI指数报告》指出,全球企业AI投资飙升至5817亿美元,中美AI差距已缩小至2.7%——技术红利窗口正…

2026/10/21 23:23:52 阅读更多 →
金融数据采集_financial-data-collector

金融数据采集_financial-data-collector

以下为本文档的中文说明financial-data-collector 是一个专业的金融数据采集技能,能够从 yfinance 等免费公开渠道收集美国上市公司的真实财务数据,并以标准化 JSON 格式输出,供下游金融分析技能(如 DCF 估值建模、可比公司分析、…

2026/10/22 20:55:32 阅读更多 →
SolidWorks快捷键全攻略:从S键到自定义,解锁高效设计

SolidWorks快捷键全攻略:从S键到自定义,解锁高效设计

你是不是也遇到过这样的场景:在SolidWorks里画图,左手在键盘上摸索半天,右手握着鼠标来回切换工具,一个简单的操作硬是拖慢了整个设计节奏?或者,看着同事行云流水地建模,自己却还在菜单栏里“大…

2026/10/21 20:15:14 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/21 21:32:28 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 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/21 21:50:56 阅读更多 →
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/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练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/22 19:06:46 阅读更多 →