SpringBoot+Vue+微信小程序多端教务系统源码实战:排课冲突与数据一致性
简介这是一套基于SpringBoot后端与Vue前端构建的多端教务管理系统源码同时兼容微信小程序运行环境面向教育培训机构的技术开发者与二次开发学习者用于解决多校区教务协同、招生财务与教学管理等业务场景的数字化需求。压缩包共359个文件约6.98MB其中Java源码260个构成核心业务逻辑另有27张PNG与1张JPG图形资源、4个XML与2个YML配置文件、properties属性配置及说明文档等目录结构清晰便于按模块检索与二次开发。系统支持跨区域多校区运营功能覆盖课程排期、学员档案、财务稽核、招生渠道、团体报名与分销、在线直播录播教学并提供PC管理后台、家长小程序与微信小程序管理端三种访问方式。目前已有70人学习下载适合希望研究多端教务系统架构、借鉴SpringBoot与Vue工程实践或进行功能裁剪复用的开发者参考。1. 多端教务系统到底解决什么问题从一次排课冲突说起去年帮一所高职做教务系统迁移最头疼的不是功能多少而是同一份数据要在三个地方保持一致教务处老师在 PC 后台排课辅导员在微信小程序里查班级课表学生用小程序看自己的课和成绩。旧系统是单体的 JSP 后台老师改完课表学生端要等半小时缓存刷新期间冲突的教室安排照样显示投诉电话直接打到信息中心。这就是多端教务管理系统要解决的核心矛盾——一套业务数据多个终端实时消费。标题里的技术组合「SpringBoot Vue 微信小程序 PC 管理后台」不是随便堆的。SpringBoot 负责统一的后端 API 和权限、事务、排课冲突校验Vue 做 PC 管理后台适合表格密集、批量操作的教务场景微信小程序承接学生和教师的高频轻查询免安装、能拿手机号做身份绑定。三者共用一套 REST 接口和一套 JWT 鉴权数据只有一份改完即生效。这套方案适合谁中小院校、培训机构、院系级教务团队 25 人想用一套源码快速搭起可维护的多端系统。不适合超大规模选课秒杀场景那是另一个量级的架构问题。下面按「后端怎么搭 → 前端怎么接 → 小程序怎么登 → 坑在哪 → 怎么验证」的顺序讲透。2. SpringBoot 后端把排课冲突校验做成可复用的服务后端是整个系统的地基教务系统的复杂度几乎全在业务规则上一个教室同一时间段只能排一门课一个教师同一时间段不能跨校区一个班级的课程不能撞车。这些规则如果散落在各个 Controller 里改一处漏一处。我一般把它们收敛到 Service 层用统一的时间段冲突检测方法。2.1 项目结构与依赖选型常见做法是按功能分包而不是按技术分层。教务系统的模块边界很清晰course课程、schedule排课、student学生、teacher教师、auth鉴权。每个包内部再分 controller/service/mapper/entity这样改排课逻辑时不会误伤学生模块。依赖上SpringBoot 版本别追最新。热词里有人问「springboot版本太高」怎么办这是血泪经验SpringBoot 3.x 默认要求 JDK 17很多学校的服务器还停在 JDK 8而且 3.x 对javax到jakarta的包名迁移会让一堆老代码编译不过。稳妥选 SpringBoot 2.7.x JDK 8/11生态最全MyBatis-Plus、JWT、Redis 客户端都验证充分。!-- pom.xml 关键依赖版本按 2.7.x 线选 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version0.9.1/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency这段依赖里mybatis-plus省掉大量单表 CRUD 的 XML教务系统里学生、教师、教室的基础查询基本靠它jjwt负责签发和校验 tokenPC 端和小程序端共用同一套Redis 用来存 token 黑名单和课表缓存。参数上注意jjwt 0.9.1依赖javax.xml.bindJDK 11 以上要额外引jaxb-api否则启动报ClassNotFoundException这是新手最容易卡住的地方。2.2 排课冲突检测的核心实现冲突检测的本质是区间重叠判断。把每节课抽象成[startTime, endTime)半开区间两节课冲突当且仅当a.start b.end b.start a.end。用半开区间而不是闭区间是为了让「第一节 8:00-8:45」和「第二节 8:45-9:30」不算冲突这个边界坑很多人踩过。Service public class ScheduleConflictService { Autowired private ScheduleMapper scheduleMapper; /** * 检测待排课程是否与已有课表冲突 * param req 含 classroomId/teacherId/classId/weekday/startTime/endTime * return 冲突详情null 表示无冲突 */ public ConflictResult check(ScheduleRequest req) { // 查同一天、同一教室/教师/班级的所有已排课程 ListSchedule existing scheduleMapper.selectByDayAndResources( req.getWeekday(), req.getClassroomId(), req.getTeacherId(), req.getClassId()); for (Schedule s : existing) { // 半开区间重叠判断注意用 isBefore 而非 compareTo 0 boolean overlap req.getStartTime().isBefore(s.getEndTime()) s.getStartTime().isBefore(req.getEndTime()); if (overlap) { return new ConflictResult(s, resolveReason(req, s)); } } return null; } private String resolveReason(ScheduleRequest req, Schedule s) { if (req.getClassroomId().equals(s.getClassroomId())) return 教室占用; if (req.getTeacherId().equals(s.getTeacherId())) return 教师时间冲突; return 班级课程冲突; } }逻辑说明先按「星期 三类资源」一次性捞出候选课程避免在循环里反复查库再用半开区间判断重叠。参数上weekday用 17 表示周一到周日startTime/endTime用LocalTime别用字符串比较字符串比较在跨小时时会出错。resolveReason返回具体冲突原因前端能直接提示「3 号教学楼 201 教室已被占用」比笼统报「排课失败」体验好太多。提示冲突检测要在事务里做并且对同一教室的排课加行级锁或 Redis 分布式锁否则两个老师同时排同一教室检测都通过最后双写冲突。并发量不大的院校用SELECT ... FOR UPDATE就够。2.3 统一响应与全局异常多端系统最怕接口返回格式不统一小程序端解析一套、PC 端解析另一套。我一般定义一个ResultT包装类code/message/data 三字段配合RestControllerAdvice全局捕获异常。这样前端只写一次拦截器两端复用。参数校验用Valid JSR-303 注解把「课程名不能为空」「学分必须为正」这类规则写在实体上Controller 里不用写 if-else。3. Vue PC 管理后台表格密集场景下的路由与权限PC 后台是教务老师的主战场特点是表格多、批量操作多、权限细。Vue 选型上Vue 3 Element Plus 是当前主流Vue 2 Element UI 在老项目里还大量存在。如果团队没有历史包袱直接上 Vue 3组合式 API 在权限逻辑复用上比选项式清爽。3.1 环境搭建与动态路由热词里「vue安装及环境配置」「vue路由」「vue动态路由」问得最多。标准流程是 Node 16、用 Vite 建项目比 Vue CLI 快很多。装依赖时如果卡在vue安装依赖多半是镜像源问题换国内源即可。# 用 Vite 创建 Vue3 项目 npm create vitelatest edu-admin -- --template vue cd edu-admin npm install # 装路由和 UI 库 npm install vue-router4 element-plus axios pinia npm run dev装完后核心是路由设计。教务后台的菜单要按角色动态生成教务主任能看排课和教师管理普通老师只能看自己的课表。做法是登录后拿到后端返回的权限码列表前端用router.addRoute动态挂载。// router/permission.js 路由守卫核心逻辑 import router from ./index import { useUserStore } from /store/user const whiteList [/login] // 免登录白名单 router.beforeEach(async (to, from, next) { const userStore useUserStore() if (userStore.token) { if (to.path /login) { next(/) } else { // 已登录但还没拉过权限先拉权限再放行 if (!userStore.routesLoaded) { const routes await userStore.generateRoutes() routes.forEach(r router.addRoute(r)) next({ ...to, replace: true }) // replace 避免历史记录残留 } else { next() } } } else { whiteList.includes(to.path) ? next() : next(/login) } })逻辑说明generateRoutes里根据后端返回的权限码从本地路由表过滤出可访问的路由。next({ ...to, replace: true })这行是关键动态添加路由后必须重新触发一次导航否则首次进入会白屏这是 Vue 动态路由最经典的坑。参数上routesLoaded标记防止每次跳转都重新拉权限登出时要重置为 false。3.2 课表组件的性能处理教务后台的课表是一个二维网格行是节次列是星期。用 Element Plus 的el-table硬拼会很别扭常见做法是用 CSS Grid 自己画。一个班一周 25 节课一个年级几十个班如果每个格子都渲染完整课程卡片页面会卡。优化手段是虚拟滚动或分页切换班级别一次性渲染所有班级的课表。数据请求上课表接口按「班级 周次」查询返回该周的课程数组前端按weekday和section定位到格子。注意周次参数教务系统有单双周、调课周的概念接口要支持weekType字段否则单周课会错误显示在双周。3.3 打包后放进 SpringBoot 的两种方式热词里「vue打包放进springboot中」是高频需求很多院校只给一个端口前后端要合并部署。两种做法一是把npm run build产出的dist拷到 SpringBoot 的src/main/resources/static二是用 Nginx 反代。前者简单适合单机部署。# 前端打包注意 base 路径要和后端 context-path 一致 npm run build # 产物在 dist 目录拷到后端静态资源目录 cp -r dist/* ../edu-server/src/main/resources/static/拷进去后SpringBoot 要配置一个 fallback让前端路由history 模式刷新不 404。写个WebMvcConfigurer把非/api开头的请求都转发到index.html。参数上注意vite.config.js里的base要和后端访问路径匹配如果后端配了server.servlet.context-path/edu前端 base 也要改成/edu/否则静态资源 404。4. 微信小程序端登录、手机号与课表查询小程序端面向学生和教师核心功能就三个登录绑定身份、查课表、查成绩。功能不复杂但登录链路是新手最容易翻车的地方。4.1 登录与手机号获取的完整链路热词里「微信小程序登录获取手机号」是刚需。完整链路是小程序调wx.login拿 code → 后端用 code 换 openid 和 session_key → 小程序用getPhoneNumber按钮拿加密的 phone code → 后端解密或调接口换手机号 → 匹配学生表完成绑定。// pages/login/login.js 小程序端登录 Page({ data: { phone: }, // 第一步静默登录拿 code onLoad() { wx.login({ success: (res) { // code 有效期 5 分钟立刻发给后端换 openid wx.request({ url: https://your-domain/api/auth/wx-login, method: POST, data: { code: res.code }, success: (r) { wx.setStorageSync(token, r.data.data.token) } }) } }) }, // 第二步用户点击授权按钮拿手机号 getPhone(e) { if (e.detail.errMsg ! getPhoneNumber:ok) return wx.request({ url: https://your-domain/api/auth/bind-phone, method: POST, header: { Authorization: wx.getStorageSync(token) }, data: { code: e.detail.code }, // 新版用 code旧版用 encryptedDataiv success: (r) { if (r.data.code 200) wx.reLaunch({ url: /pages/schedule/index }) } }) } })逻辑说明wx.login的 code 只能用一次且 5 分钟过期必须立刻换 openid别缓存。手机号获取现在推荐用e.detail.code传给后端由后端调微信接口换取比前端解密encryptedData更安全也避开了 session_key 失效问题。参数上bind-phone接口要校验 token 有效并把手机号和学生表里的预留手机号比对匹配上才允许绑定防止随便一个微信号就能查别人课表。注意getPhoneNumber必须由用户点击按钮触发不能自动调用这是微信的硬性限制。按钮要用button open-typegetPhoneNumber bindgetphonenumbergetPhone普通 view 绑事件无效。4.2 课表页面的渲染与缓存小程序课表用scroll-view或自定义网格。顶部导航栏高度在不同机型不一样热词里「微信小程序顶部导航栏高度」就是问这个。用wx.getSystemInfoSync()拿statusBarHeight和胶囊按钮位置动态算导航栏高度别写死。// 计算自定义导航栏高度 const sysInfo wx.getSystemInfoSync() const menuButton wx.getMenuButtonBoundingClientRect() // 导航栏高度 胶囊底部到状态栏底部的距离 * 2 胶囊高度 const navBarHeight (menuButton.top - sysInfo.statusBarHeight) * 2 menuButton.height课表数据缓存策略学生一周看课表频率高但数据变化少用wx.setStorageSync缓存课表加一个时间戳超过 1 小时或用户手动下拉才重新请求。这样打开小程序秒显体验好很多。注意缓存 key 要带学号和周次否则换周次会读到旧数据。4.3 与 PC 后台共用接口的注意事项小程序和 PC 共用一套 REST 接口但请求头不同小程序没有 Cookie全靠Authorization头传 token。后端鉴权拦截器要同时支持从 header 读 token别只依赖 session。另外小程序的wx.request默认不带 referer如果后端做了防盗链要放行。返回数据上小程序端流量敏感列表接口要支持分页别一次返回全校学生。5. 多端联调避坑5 个真实踩过的坑5.1 跨域配置在开发环境生效、生产环境失效现象本地 Vue 调后端接口正常打包部署后全部 403。原因开发时用 Vite 的proxy代理生产环境走 Nginx 或直接静态资源跨域规则没同步。解决后端CorsConfig里用allowedOriginPatterns而不是allowedOrigins并把生产域名加进去或者干脆前后端同源部署用第 3.3 节的方案从根上避开跨域。5.2 JWT token 过期后小程序端白屏现象学生用了一上午下午打开小程序所有接口 401页面空白。原因token 过期后前端没做统一拦截请求失败但页面没提示。解决封装wx.request在fail和状态码 401 时清 token 并跳登录页PC 端在 axios 响应拦截器里做同样处理。token 有效期别设太短教务场景设 7 天配合 Redis 黑名单支持主动登出。5.3 排课并发导致教室双占现象两个教务老师同时给同一教室排课系统都提示成功课表出现重叠。原因冲突检测和插入之间没有锁两个请求都通过了检测。解决对classroomId weekday加 Redis 分布式锁锁住检测到插入的整个过程或者数据库层面对该教室该时段加唯一索引插入冲突时抛异常回滚。后者更可靠推荐。5.4 小程序手机号解密失败现象bind-phone接口报-41003或解密乱码。原因session_key 过期或者前端传的是旧版encryptedData而后端按新版 code 解析。解决统一用新版e.detail.code方案后端调phonenumber.getPhoneNumber接口换取不再自己解密。如果必须解密session_key 要在wx.login后立刻存 Redis有效期和微信保持一致。5.5 Vue 打包后静态资源 404现象SpringBoot 里放好 dist访问首页正常刷新子路由或加载 JS 报 404。原因Vue Router 用了 history 模式后端没配 fallback或者vite.config.js的base和后端 context-path 不一致。解决后端加index.html转发配置前端 base 改成相对路径./或与 context-path 一致。这两个改完基本就通了。6. 怎么验证这套源码值不值得投入三个可落地的检验动作拿到一套多端教务源码别急着改业务先做三个验证动作半小时就能判断它的工程质量。第一个动作跑通登录闭环。启动后端确认能连上数据库和 Redis启动 Vue 后台用默认账号登录看菜单是否按角色渲染用微信开发者工具打开小程序走一遍wx.login 手机号绑定。这一步能暴露 80% 的环境配置问题比如 JDK 版本、数据库字符集、小程序 appid 是否配置。第二个动作压一次排课冲突。手动构造两个冲突的排课请求用 Postman 或 JMeter 并发发出去看系统是正确拦截一个还是两个都成功。这一步验证的是核心业务逻辑的严谨性也是教务系统最容易出事故的地方。如果并发下双写成功说明锁没做对这套源码的排课模块要重写。第三个动作检查多端数据一致性。在 PC 后台改一门课的时间立刻在小程序刷新课表看是否同步。如果小程序有缓存确认缓存失效策略是否合理。这一步验证的是架构设计数据源是否真的统一。检验项通过标准常见失败原因登录闭环三端都能登录并拿到正确权限JDK 版本、appid 未配、Redis 未启动排课冲突并发下只成功一条缺分布式锁或唯一索引数据一致性改完即生效或缓存合理失效多数据源、缓存 key 设计错误我自己的习惯是任何一套源码先看它的鉴权拦截器和事务边界这两处写清楚了业务代码再乱也能救这两处含糊功能再多也是定时炸弹。多端教务系统尤其如此数据一致性是命根子宁可功能少做也不能让课表对不上。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Wardrobe如何一眼找出照片里所有衣服?OpenAI视觉API结构化输出实现原理

Wardrobe如何一眼找出照片里所有衣服?OpenAI视觉API结构化输出实现原理

Wardrobe如何一眼找出照片里所有衣服?OpenAI视觉API结构化输出实现原理 【免费下载链接】wardrobe Your clothes, extracted and organized with gpt-image. 项目地址: https://gitcode.com/gh_mirrors/wardro/wardrobe Wardrobe 是一个开源的 AI 衣橱整理工…

2026/10/12 19:23:13 阅读更多 →
开源工业级EMS全栈系统:SpringBoot 3 + React 18与113页面实践解析

开源工业级EMS全栈系统:SpringBoot 3 + React 18与113页面实践解析

做全栈这几年,我关注的开源项目少说也有上百个,但像今天这套能让我专门停下来写篇长文的不多。能源管理系统(EMS),在开源圈一直是个稀缺品类——不是没人做,而是能做到“工业级”还愿意开源的,屈…

2026/10/13 9:32:14 阅读更多 →
Agent技能体系搭建实战:从Prompt堆叠到结构化技能库

Agent技能体系搭建实战:从Prompt堆叠到结构化技能库

做Agent产品落地这一年多,我最大的感受是:模型本身的能力进步得比我们想象中快,真正拖后腿的,反而是我们给它搭的“手脚”。早期我习惯把一堆指令塞进System Prompt里,让模型自由发挥,结果场景一复杂就开始…

2026/10/12 9:08:50 阅读更多 →

最新新闻

东方财富行情数据接口抓取实战:从XHR响应到SQLite增量存储

东方财富行情数据接口抓取实战:从XHR响应到SQLite增量存储

做数据的人,十个里有八个都动过爬东方财富网的心思。这个系列第二篇,我不再抓静态页面,而是直接抓行情数据接口。上一篇跑通了最基础的页面解析,但那只是开胃菜:页面源码里看不到的几个关键字段——最新价、涨跌幅、成…

2026/10/14 17:37:01 阅读更多 →
B7-H3抗体:一种在肿瘤免疫治疗中兼具双重调控潜力的新兴靶点如何被研究?

B7-H3抗体:一种在肿瘤免疫治疗中兼具双重调控潜力的新兴靶点如何被研究?

B7-H3(又称CD276)是B7免疫共信号家族中的一种I型跨膜蛋白,在正常组织中表达有限,但在黑色素瘤、肺癌、前列腺癌等多种恶性肿瘤表面过表达。其确切功能机制尚存争议:早期研究支持其作为共刺激受体促进T细胞活化&#xf…

2026/10/14 17:37:01 阅读更多 →
Echarts折线图区域高亮交互实现指南

Echarts折线图区域高亮交互实现指南

1. 项目概述:让折线图真正“活”起来的交互细节Echarts 折线图区域鼠标事件高亮——这八个字背后,藏着一个被大量业务系统长期忽视却极其关键的用户体验断点。我做过不下二十个数据可视化项目,从某高校实验室的科研数据看板,到某公…

2026/10/14 17:37:01 阅读更多 →
压裂方案毕设头秃?这些 AI 工具可以这样搭着用 ✨

压裂方案毕设头秃?这些 AI 工具可以这样搭着用 ✨

先交代一下背景:我是石油工程方向的,毕业设计做的是某低渗透砂岩油藏水力压裂工艺方案设计。这类题目在工学 / 矿业类 / 石油工程专业里很典型——要读大量区块地质和压裂文献,要写开题报告和任务书,要做裂缝参数计算、施工参数优…

2026/10/14 17:37:01 阅读更多 →
Ubuntu上构建嵌入式LCD+触摸屏软件模拟器

Ubuntu上构建嵌入式LCD+触摸屏软件模拟器

1. 项目概述:为什么要在Ubuntu上跑开发板的LCD触摸屏模拟器?“Ubuntu——配置开发板lcd和触摸屏模拟器”这个标题乍看像一句操作指令,但背后藏着嵌入式开发中一个高频、高痛、却极少被系统梳理的实操场景:在通用PC环境里&#xff…

2026/10/14 17:37:01 阅读更多 →
IntelliJ IDEA 的Qoder CN 插件报错“暂时无法同步代码库索引选择”怎么解决?完整排查与修复指南

IntelliJ IDEA 的Qoder CN 插件报错“暂时无法同步代码库索引选择”怎么解决?完整排查与修复指南

摘要 本文针对在IDEA中使用Qoder CN时出现的报错,给出官方说明与实战解决步骤。官方指出需启用代码库索引:可点击“创建”手动启用,或切换“自动索引”。实战中,先登录Qoder CN且不要输入提示词,再进入设置—>Qode…

2026/10/14 17:36:00 阅读更多 →

日新闻

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/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 7:53:34 阅读更多 →