Spring Boot+Vue旅游资源网站前后端分离开发实战解析
做过旅游类后台开发的人应该都清楚这类系统的核心并不在于功能多花哨而在于信息流是否顺畅、状态是否闭环、代码是否好改。最近手头刚好在整理一套基于 Java 的旅游资源网站包含前台浏览、线路查询、预订留言和后端管理几大块内容源码层面的设计比较规整很适合拿来当项目实战参考。这篇文章我会从整体设计思路、环境搭建、功能实现细节、定制开发流程到常见问题排查尽量完整地拆一遍希望对正在做课程设计、毕业设计或者刚接手类似需求的朋友有点实际帮助。1. 项目整体设计与技术选型的底层逻辑1.1 为什么选前后端分离而不是传统 JSP很多校园项目和老单体内包含大量 JSPServlet 的痕迹页面充血、逻辑混在一起后期加需求特别痛苦。旅游资源网站这个场景里前台页面要展示景点轮播、线路列表、实时留言后台要维护订单和用户数据这两块对界面的交互要求和数据接口的稳定性其实差异很大。我在这套项目里用了前后端分离的结构。前端负责页面渲染和交互通过 HTTP 接口向后端要数据后端只用 Spring Boot 提供 Restful API不管页面长什么样。这样做的直接好处是团队分工明确前端可以并行开发后端接口写完用 Postman 自测就行后续要想换个门户风格或者单独做一个小程序端后端代码基本可以原封不动。提示如果只是校内演示或者个人学习分离与否影响不大但如果这个项目后续要扩展功能我建议一开始就按前后端分离的结构搭后面省下的返工时间非常可观。1.2 技术栈选型清单与理由这套系统的技术选型走的是一个主流、稳妥、资料多的组合后端Java Spring Boot 2.7.x MyBatis Plus前端Vue 3 Vite Element Plus Pinia数据库MySQL 8.x构建Maven 3.6.3 以上开发工具IDEA Navicat或任意你顺手的数据库客户端附加组件Redis用于会话管理和热门景点缓存可选为什么不用 Spring Cloud 那套微服务因为旅游资源网站本质上是一个中小型信息管理系统单机部署完全够用引入微服务只会带来分布式事务和链路追踪这些额外复杂度对业务本身没有帮助。Spring Boot 2.7 配合 JDK 8 也是目前兼容性最好、网上问题答案最多的组合遇到报错基本一搜就有解决方案。1.3 核心模块划分与页面结构整体系统功能上分成前台门户和后台管理两块。前台面向普通游客包含首页轮播与精选景点推荐旅游线路列表和线路详情景点分类筛选与关键字搜索在线留言与预订意向提交个人信息查看后台面向管理员包含景点信息管理增删改查、上下架线路与行程管理预订订单管理审核、取消、完成留言审核用户管理基础数据统计这个模块划分的意义在于前台保持轻交互后台以 CRUD 为核心两类角色隔离清楚权限控制也好做。实际开发时我先画出了功能联动图游客下了预订单商家端能看到待审核列表审核通过后订单状态变更前端详情页反馈给游客。整个流程链条打通了代码写起来就很顺。2. 环境准备与初始配置2.1 JDK 与 Maven 版本匹配的坑先说明一下版本匹配的重要性。Spring Boot 2.7 官方支持 JDK 8 到 JDK 21但实测在 IDEA 里最省事的是 JDK 8因为很多老教程、老依赖都和它匹配。如果你机器上装了多个 JDK 版本建议把 JAVA_HOME 明确指向 JDK 8并且保证 IDEA 中 Project Structure 里的 SDK 和模块编译级别一致。Maven 版本不要追求最新3.8.x 完全够用。我遇到过一个同学装了 Maven 4.x结果一堆插件不兼容反复报依赖解析错误最后降级到 3.8 才正常。配置好 Maven 后最好在 settings.xml 里配置一个国内镜像源比如阿里云公共仓库否则首次拉依赖的等待时间能让你怀疑人生。注意IDEA 中新建项目后检查 Maven 仓库路径是不是默认的 C 盘如果没配置本地仓库位置你后面调试第三方 jar 源码时会非常痛苦。2.2 MySQL 数据库初始化需要设置哪些参数数据库连接是这套系统最容易翻车的位置之一。推荐 MySQL 8.x创建数据库时直接指定 utf8mb4 字符集避免中文乱码CREATE DATABASE IF NOT EXISTS travel_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;在 application.yml 里配置数据源时有几个参数必须注意spring: datasource: url: jdbc:mysql://localhost:3306/travel_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse username: root password: 你的密码 driver-class-name: com.mysql.cj.jdbc.DriverserverTimezoneAsia/Shanghai 这个别漏否则会报时区错误。useSSL 设成 false 是因为本地开发环境没必要做 SSL 握手减轻一点连接耗时。如果你是 MySQL 5.7驱动类要换成 com.mysql.jdbc.Driver这一点很多教程没讲清楚导致新版项目连不上旧库。2.3 快速启动项目的步骤拿到源码后按下面顺序操作骨架能最快跑起来先用 Navicat 或命令行执行项目里的 create_table.sql导入建库建表语句和初始测试数据。打开 IDEAFile - Open 选择项目的 pom.xml让 IDEA 以 Maven 项目方式加载。等待依赖下载完成后找到启动类 XXXApplication配置好环境变量后运行 main 方法。后端端口默认配置在 application.yml 的 server.port通常用 8080。前端项目文件夹如果独立用 npm install 安装依赖npm run dev 启动访问提示的本地地址一般代理已经配好直接请求 8080 后端接口。这里要特别提醒如果前端和后端都起了但页面请求一直404先检查前端 vite.config.js 里的代理配置是否指到了正确的后端地址大多数情况下是这个没配对。3. 核心功能深入拆解与实现套路3.1 数据库表设计的核心关系旅游网站的数据结构并不复杂但表关系一旦设计混乱后期写 SQL 会想哭。这套项目我用了 8 张核心表重点说三张景区表scenic_spot: id、name、province、city、cover_image、description、status、create_time旅游线路表travel_route: id、scenic_id、route_name、days、price、trip_content、publish_time预订订单表booking_order: id、route_id、user_id、phone、travel_date、order_status、remark景区表和线路表是一对多关系一个景区下面可以挂多条线路。订单表和用户表、线路表都是多对一关系。我在设计时把逻辑删除字段 del_flag 放进了每张表这样删数据时只是标记删除页面还能从回收站恢复对运营来说很有安全感。外键要不要建我的做法是逻辑上建立关联物理上不强加外键约束。因为后续做定制开发频繁改表和导入数据时外键限制太多会拖慢效率。关联正确性靠代码端维护对中小型项目完全够用。3.2 景点检索与分页的实现细节前台检索是访客最高频的操作实现方案直接影响到体验。我的做法是后端用 MyBatis Plus 的 LambdaQueryWrapper 拼接条件前端用 Element Plus 的分页组件接口接收 pageNum、pageSize、name、province 等参数。public ResultPageResultScenicSpotVO pageScenicSpot(ScenicSpotQuery query) { LambdaQueryWrapperScenicSpot wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.hasText(query.getName()), ScenicSpot::getName, query.getName()) .eq(StringUtils.hasText(query.getProvince()), ScenicSpot::getProvince, query.getProvince()) .eq(ScenicSpot::getStatus, 1) .orderByDesc(ScenicSpot::getCreateTime); PageScenicSpot page scenicSpotMapper.selectPage(new Page(query.getPageNum(), query.getPageSize()), wrapper); return Result.success(BeanUtil.toBean(page, PageResult.class)); }这里有个非常实用的点条件构造器里第一个参数是 boolean 条件当 name 为空时like 条件自动跳过代码不用写一堆 if else。至于搜索性能测试数据量不大的情况下 MySQL 的 LIKE 查询就够了但如果要支持全文搜索且数据量大后期可以在 name 字段上建 FULLTEXT 索引。分页参数默认值要设好比如 pageNum1、pageSize6不然前端没传参数时接口会崩。3.3 预订状态流转订单生命周期是怎么管理的预订模块是核心业务最容易出问题。订单状态我设计成四个待审核、已确认、已取消、已完成。游客提交预订申请后订单进入待审核管理员后台点击确认状态变为已确认同时给用户展示“可用”如果资源不足管理员取消订单并填上取消原因游客实际出行完成管理员标记已完成进入历史归档。这个状态机的关键不是简单的字段更新而是每一次状态变更都要写一条订单日志。虽然多建一张表会麻烦一点但遇到纠纷时能明显提升排查效率。我在实际项目中遇到过用户说“我明明没下单”结果日志一查发现是同一账号在别的设备上操作真相大白。前端状态展示也要注意模板里把数字状态映射成汉字和对应 tag 颜色写成字典函数统一管理不要在页面里到处硬编码数字判断否则后面想改文案要改的地方太多。3.4 后台管理权限与统计报表怎么落地后台管理员和普通用户不能同权。我的方案很简单角色表就两个角色ROLE_ADMIN 和 ROLE_USER用拦截器校验请求路径。登录时把用户角色写入 Session后端写一个权限拦截器拦截 /admin/** 路径没有管理员角色直接重定向或者返回 401。提示如果你还想细化权限比如让不同管理员分别管景点和订单就要引入权限资源表把权限粒度做到按钮级别那复杂度会明显上去建议根据实际需求权衡不要一上来就搞重权限设计。数据统计模块用 SQL 聚合函数实现。比如统计每月新增订单数SELECT DATE_FORMAT(create_time, %Y-%m) AS month, COUNT(*) AS total FROM booking_order WHERE del_flag 0 GROUP BY month ORDER BY month DESC;管理员首页把这些图表数据用 ECharts 展示出来核心指标包括新增用户、热门景区 TOP5、订单转化率等。这里的坑在于日期字段的格式化和时区问题等你统计出来的数据和业务核对不上时百分之八十是 DATE_FORMAT 里的格式写错了。4. 定制化开发的实际操作流程4.1 需求沟通阶段别急着写代码定制开发的第一个关键词不是“开发”是“确认需求”。我见过太多项目延期全是因为一开始没把需求边界聊清楚。拿到需求后我习惯先列一张功能清单每一条都标注优先级P0必须有例如景点增删改查、订单流程P1最好有例如数据报表、留言审核P2以后再说例如优惠券、多语言这张清单需要客户或者产品负责人签字确认后面改需求就按变更流程走。哪怕只有一个项目网站一张清晰的优先级表格也能帮你挡住 80% 的不合理追加要求。注意需求描述里经常出现模糊词比如“做得好看点”“内容丰富一点”一定要追问到具体行为否则这样的需求无法验收。4.2 从原型到代码的落地流程定制开发流程里我倾向于把功能合并成三次迭代。第一次迭代先打通端到端主链路景点展示 - 注册登录 - 路线预订 - 后台订单审核。这四个流程能跑通项目骨架就算稳了前置开发期间各角色可以同步准备自己的部分。第二次迭代加上辅助模块留言板、个人信息页、数据统计、用户管理。第三次迭代进入体验细节图片懒加载、分页加载动画、异常提示统一化。这个顺序的核心逻辑是“先保证业务闭环再追求体验完善”。如果第二次迭代就到截止日期至少用户能完成核心业务不会出现“啥都做了一半、啥都用不了”的窘境。代码侧我和团队约定统一的目录分层。controller 只做参数接收和结果返回service 层写业务逻辑mapper 层只操作数据库。新人拿到这个结构基本不需要额外解释就知道往哪个位置塞代码。4.3 部署上线时需要复查哪些点开发完成后部署到云服务器至少要做这几件事把 application.yml 里的数据库密码改成强密码并修改线上数据库账号不要直接用 root。前端打包后需要 nginx 反向代理静态资源走 nginx/api 开头的请求转发到后端端口。后端用 maven 打包成 jar运行命令建议加上-Xms256m -Xmx512m避免默认堆内存过大导致小服务器卡顿。图片上传路径要改成服务器绝对路径本地路径“C:/”这种写死的话线上必挂。数据库数据要定期备份最简单的方式就是在服务器上写个 crontab 定时执行 mysqldump。不要小看这些上线检查很多项目代码写得好最后挂在部署细节上。我第一次部署时就把图片路径写成了本地绝对路径结果局域网访问全部裂图排查半天才明白图片地址不能写死。5. 常见问题与排查技巧实录5.1 启动阶段的高频报错与处理第一个高频问题数据库连不上。报错通常是 Communications link failure 或者 Access denied for user。前者检查 MySQL 是否启动、端口是否被改、服务器防火墙是否放行 3306后者基本就是用户名密码错误或者没有远程授权。本地开发时如果用的是 root 账户建议给项目建一个专用账号只授予 travel_db 的权限CREATE USER travel_userlocalhost IDENTIFIED BY 密码; GRANT ALL PRIVILEGES ON travel_db.* TO travel_userlocalhost; FLUSH PRIVILEGES;第二个高频问题端口被占用。Spring Boot 启动时显示 Port 8080 was already in use。Windows 下用netstat -ano | findstr 8080找到 PID然后在任务管理器里结束对应进程Linux 下用lsof -i:8080确认进程后再清理。第三个高频问题Maven 依赖下载失败或者 IDEA 报红。我先试 File - Maven - Reload Project如果还不行检查本地仓库下是否有 lastUpdated 结尾的坏文件找到后删掉重新下载一般就能解决。5.2 运行期间的中文乱码和时区问题页面显示中文乱码排查顺序很有讲究。第一步检查数据库和表字符集统一 utf8mb4第二步检查后端接口响应头看 Content-Type 是否带 charsetUTF-8第三步检查前端请求 header 里是否设置了 accept 编码。大部分情况下问题出在 MySQL 连接 URL 少了 characterEncodingutf8加上就好。时区问题的典型表现是插入数据库的时间比实际时间少了 8 小时。解决方案是 JDBC URL 里加 serverTimezoneAsia/Shanghai同时 MySQL 服务端 time_zone 设置为 8:00SET GLOBAL time_zone 8:00; SET time_zone 8:00;5.3 业务逻辑类问题排查的思路如果订单状态更新后页面没刷新先确认是不是缓存问题。页面数据用了 sessionStorage 或本地缓存状态更新后需要重新拉取接口。我见过的最隐蔽的一个 bug 是后端更新成功后返回了正确数据但前端用的还是旧对象排查好久才发现是 Pinia 里的 state 没有重新赋值为接口返回体而是直接修改了副本。如果后台管理改了数据前台页面没变化大概率是接口层做了缓存。Redis 缓存命中后没有主动删除 key导致旧数据一直占用。解决办法很简单在写操作完成之后调用 cache.evict 删除对应缓存思路总结为“先删缓存再改数据库延迟双删看场景”。如果前端拿到的数据结构不对比如多了一层包裹或者字段名乱了先把浏览器 Network 面板里的原始响应摊开看再用后端接口文档对照字段命名。前后端联调时最容易出现的问题就是后端返回了 cameCase前端要的是 snake_case这事在团队开发的场景里发生了几百遍。最好在项目初期就约定好命名规范字段全部小驼峰响应统一包裹 Result 对象。结果类封装成{ code: 200, message: success, data: {} }所有接口统一这一种结构前后端协作会简单很多这里封装代码写一次但能省无数沟通成本。5.4 我最依赖的几个调试技巧开发这套系统时帮我节省最多时间的技巧有三个。第一个是使用 IDEA 的 HTTP Client写过一次请求模板后可以直接在编辑器里发起请求不用频繁切换 Postman更不用把 URL 贴来贴去。第二个是 MyBatis 的日志开启。配置里加上这两行控制台就能直接看到每次查询的完整 SQL 和传入参数排查报错时能非常快速定位到是 SQL 语句写错还是参数传错mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl第三个是对接口优先做单元测试而不是每次用页面点来点去验证。比如计算订单金额和状态流转的方法直接用 JUnit 写几个用例跑一次就知道逻辑对不对。很多同学觉得单元测试浪费时间但等你因为改一行代码导致另外一个功能挂了而页面联调又要点七八步操作才能发现时就会明白自动化测试的价值。6. 给新接触这类项目的人几个实际建议根据我个人经验做 Java 旅游网站这种项目最大的坑从来不是某个技术点不会写而是需求边界不清楚、环境配置不一致、接口结构不统一这些“软问题”叠加起来会让进度变得非常慢。所以如果你是自己做学习演示尽量把文档写全如果你是在做定制开发每一步都做好记录包括需求变更、部署步骤、测试用例好改。最后再分享一个很实用的习惯在项目根目录建一个 UPDATE_LOG.md每次改了什么功能、修改了哪个文件、影响了哪个接口随手记录一行。等你有问题了回头看日志会比翻 Git 提交记录更直观。这个习惯我在开发这套旅游资源网站时坚持用了下来很多时候能帮你快速回忆当初的设计意图也为后续接手这个系统的人节约了大量沟通成本。

相关新闻

HDFS机架感知配置实战:从原理到副本安全

HDFS机架感知配置实战:从原理到副本安全

做大数据的人应该都遇到过这种场景:集群明明有几十个节点,机柜也分了七八个,但HDFS的副本就是乱放,数据块经常整整齐齐聚在一台交换机下面,结果某天那台交换机一抖动,一堆block同时告警丢失。这种问题十有八…

2026/10/13 3:42:54 阅读更多 →
AI Agent Skill实战:把可复用流程固化给大模型,告别低效提示词

AI Agent Skill实战:把可复用流程固化给大模型,告别低效提示词

我大概是去年年底才开始认真用上“Skill”这个概念的。在此之前,我一直觉得让 AI 干点正经活,靠的就是把提示词写得越来越长、越来越细。直到我花了一个下午,把一套反复用了七八次的“调研–分析–输出简报”流程,真正固化成一个 …

2026/10/13 3:42:54 阅读更多 →
WPF+MVVM+SqlSugar数据接入实战:从界面到数据库的完整闭环

WPF+MVVM+SqlSugar数据接入实战:从界面到数据库的完整闭环

/* 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 3:42:54 阅读更多 →

最新新闻

12寸晶圆产线PB级数据治理:软件定义存储与生命周期管理实践

12寸晶圆产线PB级数据治理:软件定义存储与生命周期管理实践

1. 项目背景与行业痛点1.1 产线数据从“资产”变成“包袱”一条12寸晶圆产线,每天都在源源不断地产生设备日志、工艺配方参数、量测数据、缺陷检测图片、WIP追踪记录,甚至传感器采集的秒级时序数据。过去大家觉得这些数据“存下来总会有用”,…

2026/10/13 4:26:05 阅读更多 →
MySQL 5.7 Docker容器中文乱码根治:从字符集配置到编码转换全链路排查

MySQL 5.7 Docker容器中文乱码根治:从字符集配置到编码转换全链路排查

部署旧版本系统时,MySQL 5.7 在 Docker 容器里的乱码问题,我前前后后碰了不下十次。每次帮别人排查,症状都差不多:数据写进去是好的,读出来变"???",或者网页上显示"锟斤拷"&#xf…

2026/10/13 4:26:05 阅读更多 →
个人电脑安全体检:从系统配置到网络暴露面的全面评估指南

个人电脑安全体检:从系统配置到网络暴露面的全面评估指南

1. 为什么我们需要给个人电脑做“安全体检”干了这么多年系统维护和IT支持,我越来越觉得“安全状态检测与评估”这件事,像给车做年检一样。不是说你平时开着没毛病就不用管,也不是装了杀毒软件就万事大吉。个人电脑里的数据、账号、浏览记录、…

2026/10/13 4:26:05 阅读更多 →
DLT645-2007电表协议实战:报文解析与联调避坑指南

DLT645-2007电表协议实战:报文解析与联调避坑指南

简介:DL/T 645-2007《多功能电能表通信协议》最终版完整文档,由电力行业电测量标准化技术委员会归口发布,替代了1997年旧版,面向电能表研发、用电信息采集系统开发、计量运维及规约测试人员。文档系统规定了多功能电能表与数据采集…

2026/10/13 4:26:05 阅读更多 →
Linux内核链表实战:从自然数重排掌握list_head核心操作

Linux内核链表实战:从自然数重排掌握list_head核心操作

1. 从一道内核链表题说起:为什么值得认真拆解第一次看到“用链表存储若干自然数,把 1 2 3 4 5 6 7 8 9 重排成 1 3 5 7 9 8 6 4 2”这个题目时,很多人第一反应是“这不就是个数组排序题吗,开个数组分奇偶两半,奇数正着…

2026/10/13 4:26:05 阅读更多 →
年销460万辆同比增7.73%:新能源头部车企销量背后的结构密码

年销460万辆同比增7.73%:新能源头部车企销量背后的结构密码

开头,我直接说结论:2025年,某头部新能源车企全年销量突破460万辆,同比增速7.73%。这个数字放在整个行业里有多重?2024年这家企业的销量基数已经在400万辆以上,能在这样的体量上继续维持正增长,而…

2026/10/13 4:25:05 阅读更多 →

日新闻

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

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

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

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