基于SSM+Vue的家电售后服务平台毕业设计完整复盘

发布时间:2026/10/20 17:36:12

基于SSM+Vue的家电售后服务平台毕业设计完整复盘 又到了毕业设计选题季。如果你正在纠结“家用电器售后服务平台”这个题目我可以先给个结论它比单纯的商品管理、新闻发布这类题目更有做头但也没难到让人劝退的程度。我完成的这个毕设是后端 SSM、前端 Vue 的架构覆盖了报修工单提交、客服派单、工程师维修、备件管理、评价闭环这几条主线最后论文和程序一起提交。这个帖子就把整个项目完整复盘一遍从选题、数据库建模、后端接口、前端联调到论文撰写和答辩准备凡是做这类题目可能卡住的地方我都会展开讲适合正在选题目或者已经开工的同学参考。不少人容易把售后服务平台理解成“给后台加几个增删改查页面”实际做一遍就会发现它真正要处理的是工单的生命周期流转以及围绕工件状态产生的角色协作。这个业务模型刚好适合做毕业设计模块数量足够撑起论文篇幅逻辑复杂度又不会让人做到一半崩溃。只要把状态流转想清楚技术层面的工作量其实很可控。1. 选题定位家电售后平台难在哪又好在哪1.1 业务场景售后和进销存不是一回事家电售后平台的核心对象不是商品而是“故障”和“服务过程”。一台冰箱报修后系统要记录客户、电器信息、故障描述、指派了哪个工程师、什么时候接单、用了哪些备件、最后怎么评价。这个链路天然带有一个状态机和普通的增删改查不一样。很多同学会把“用户下单”和“用户报修”混着做页面倒是好看了但业务逻辑是散的。售后业务的典型特征是同一份数据要被多个角色在不同阶段修改而且每个阶段都有明确的先后约束。比如工单还没有被客服分配工程师就不能接单工程师没完成维修客户就不能评价。这些约束写进代码里就是论文里可以拿出来讲的“业务规则”。1.2 角色与用例四种身份决定功能边界我最终把系统角色定成四类客户、客服人员、维修工程师、管理员。不要嫌角色多售后场景天然就是多方协作缺了任何一方流程都走不通。客户注册登录、登记家电、提交报修工单、查看工单进度、取消未受理工单、对完成的服务进行评价。客服人员查看新工单、给工单指派维修工程师、添加处理备注、对异常工单进行回访并关闭。维修工程师查看待接单列表、接单、更新维修状态、填写维修结果和备件使用情况。管理员管理用户和员工账号、维护电器品牌与型号、管理备件库存、查看工单统计报表、发布售后公告。角色划清之后功能边界自然就出来了。比如工程师只能看到派给自己的工单客服只能操作未被接单的工单管理员看全部但不直接参与工单操作。1.3 功能清单先圈地再施工防止毕设无限膨胀毕设最忌讳一开始就把系统想得太大。我的做法是先列一张需求表把所有要做的功能写清楚标出优先级再确定哪些必须实现、哪些可以在论文里作为“扩展方向”提出但不实盘编码。模块功能点实现优先级说明用户模块注册、登录、个人信息维护必做所有角色的入口家电档案增删改查用户家电必做工单需要关联家电信息工单模块提交、分配、接单、维修、评价必做项目核心备件管理备件入库、出库、库存列表选做但建议做工作量小论文能加分公告模块管理员发布公告选做用来撑页面数量统计报表按状态、时间统计工单数量选做答辩时好展示这张表还有一个用途写论文需求分析章节时可以直接把表格转换成功能需求条目老师会觉得你逻辑清晰。2. 技术选型与项目结构为什么 SSM Vue 是很实际的组合2.1 后端为什么用 SSM 而不是直接上 Spring Boot很多教程都喜欢用 Spring Boot 起步但毕设题目强调 SSM其实是有原因的。SSM 是 Spring、Spring MVC、MyBatis 三个框架的手动整合需要自己配置 XML 或者配置类这一套“手动拼装”的过程正好把三层架构、依赖注入、事务管理、ORM 映射这些知识点全部过了一遍。Spring Boot 确实开发快但很多答辩老师会追问你用了 Boot 的自动配置那底层原理是什么如果学生对内嵌容器、自动配置机制讲不清反而容易扣分。SSM 项目则不然哪怕你只学会了基础的 XML 配置也能把 Spring 的 IoC 容器、MVC 的请求分发、MyBatis 的 SQL 映射讲得头头是道。对这个题目来说SSM 是更稳妥的“可控路线”。2.2 前端为什么搭配 Vue以及版本怎么选Vue 在毕设管理系统里的优势是组件化与响应式。一个页面拆成表单组件、表格组件、状态标签组件改起来非常快。Vue 生态里的组件库也能直接拿来当后台 UI不用自己手写 CSS 布局省下的时间可以全部花在业务逻辑和论文上。版本选择上如果你希望资料最多、踩坑最少我建议直接锁定 Vue 2 配合 Element UI 组件库。网上能找到的案例和对策几乎都是这套组合。如果学校要求必须用 Vue 3那就用 Element Plus整体开发思路一样只是部分组件用法有差异。做后台管理类系统纯前端难度本来就不高关键是和接口联调的部分要稳。2.3 开发环境与工程结构参考我实际使用的环境是 JDK 1.8、Tomcat 8.5、MySQL 5.7 兼容模式、Maven 3.6前端用 Vue CLI 4。不要把环境版本拉得太新因为新版本和旧教程的兼容性会消耗大量时间。比如 JDK 17 配合 Tomcat 9 也能跑但网上 SSM 配置方案大多是给 JDK 1.8 写的用旧环境反而省事。后端包结构建议这样分com.example.portal启动相关配置com.example.controllerREST 接口com.example.service / service.impl业务逻辑com.example.mapperMyBatis 接口com.example.entity实体类com.example.common统一返回结果、异常、工具类com.example.interceptor登录拦截器com.example.configSpring MVC 配置这样分层在写论文时可以直接画成架构图不会出现“代码和论文结构对不上”的尴尬。3. 数据库建模核心是工单状态而不是数据表多少3.1 表结构总览一张清单把需要的东西列清楚我设计的数据库共十张表左右具体看功能多少可以增减。核心表如下表名作用关键字段user用户/员工账号id, username, password, role, phoneappliance用户的家电档案id, user_id, kind, brand_name, model_name, buy_date, warranty_end_daterepair_order报修工单id, order_no, user_id, appliance_id, fault_desc, status, assignee_id, create_timeorder_log工单操作日志id, order_id, operator_id, action, log_time, remarkrepair_result维修结果id, order_id, engineer_id, content, use_parts, finish_timepart备件库存id, name, model, stock_num, warn_num, pricepart_usage工单备件消耗id, order_id, part_id, quantityevaluation评价记录id, order_id, user_id, score, content, reply, create_timeannouncement公告id, title, content, publisher_id, publish_time“user”表用一个 role 字段区分四种角色而不是给每种角色建单独的表。这种设计在论文里可以写成“基于 RBAC 的角色统一管理模型”实现也最简单。3.2 工单表的核心字段设计工单表是整个数据库的心脏字段设计要提前想清楚否则后期改表特别痛苦。我保留的关键字段包括order_no工单编号可以直接用时间加随机数生成方便显示和检索status工单状态用 int 存方便前端做字典映射user_id报修客户appliance_id关联的家电fault_type / fault_desc故障类型与详细描述assignee_id当前负责的工程师customer_service_id处理的客服create_time / assign_time / accept_time / finish_time各环节时间点论文里可以画出完整的时序evaluate_status是否已评价用于控制评价入口建议加入 order_log 表记录每一次状态变化。“谁在什么时间把工单从什么状态改成了什么状态”全部留痕。这样既能实现消息提醒也能在论文测试部分说明系统的可追溯性。3.3 状态字段与状态机让流程不被写死在页面里状态机是这类项目的灵魂。我把工单状态设计成以下常量状态值含义可执行的操作0待分配客服派单客户取消1待接单工程师接单客服改派客户取消2维修中工程师提交维修结果3待确认客服/客户确认完成4已完成客户评价5已取消无在代码里不要直接用数字散落在各个方法中建议定义一个常量类比如OrderStatus.PENDING_ASSIGN、OrderStatus.PENDING_ACCEPT。写查询条件时可读性会好很多。前端拿到后端的状态值后通过字典映射成中文状态标签。状态流转不能只看页面按钮后端 Service 层必须校验当前状态是否允许执行下一步否则并发操作时会出现一个工单被两个客服同时派给不同工程师的脏数据问题。3.4 外键与索引论文层次和实践取舍毕设论文里一般要画 E-R 图并说明表之间的关系。外键约束我建议只在论文里体现逻辑关系数据库层面可以不建物理外键而是由 Service 层保证引用完整性。这样做的理由有三点一是数据导入方便二是避免删除是外键报错导致演示中断三是真实项目中物理外键本来就不常用。索引方面至少要给工单表的 status、user_id、assignee_id、create_time 加普通索引。答辩时如果老师问系统数据量大了怎么办可以从索引优化、分页查询、SQL 走索引这几个方向回答。4. 后端实现从登录鉴权到工单流转的编码链路4.1 登录与权限拦截一张拦截器控制所有接口SSM 项目做登录校验最常见的方式是定义 HandlerInterceptor把所有/api/**接口统一拦下来白名单放行登录、注册、公告查询等公开接口。我用 JWT 生成 token登录成功后返回给前端前端存在本地后续请求通过请求头带上。拦截器核心逻辑如下public class AuthInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String uri request.getRequestURI(); if (uri.contains(/api/login) || uri.contains(/api/register)) { return true; } String token request.getHeader(Authorization); if (token ! null JwtUtil.verify(token)) { Long userId JwtUtil.getUserId(token); request.setAttribute(currentUserId, userId); return true; } response.setStatus(401); response.setContentType(application/json;charsetUTF-8); response.getWriter().write({\code\:401,\msg\:\未登录或登录失效\}); return false; } }角色区分可以在 Service 层或者专门的权限注解里处理。为了控制代码量我用了一个简单的方法在需要限制角色的接口上手动判断当前用户角色角色不对就返回 403。论文中就把这套描述为“基于拦截器和 RBAC 的轻量权限控制”。4.2 统一返回结构和全局异常处理前后端分离项目接口返回格式必须统一。我定义了一个 Result 类包含 code、message、data 三个字段。业务方法直接用Result.success(data)和Result.error(code, msg)返回Controller 层就不需要每处都写 try-catch。全局异常处理用ControllerAdvice声明一个全局异常处理器分别处理业务异常、参数校验异常和数据库异常。这样写的好处是代码路径清爽而且论文可以拿“统一异常处理”作为一个亮点写进系统设计。4.3 工单创建的事务控制创建工单涉及多张表的写入生成工单号、插入工单记录、插入操作日志。这三步必须在一个事务里完成否则会出现工单已经创建但日志丢失的情况。在 Spring 的 Service 方法上加上Transactional就能实现事务控制前提是数据库表引擎使用 InnoDB。举个例子Transactional public void createOrder(OrderCreateVO vo) { String orderNo GD DateUtil.format(new Date(), yyyyMMddHHmmss) RandomUtil.randomNumbers(4); RepairOrder order buildOrder(orderNo, vo); repairOrderMapper.insert(order); orderLogMapper.insert(new OrderLog(order.getId(), vo.getUserId(), 提交报修工单, orderNo)); }如果后续要加图片上传可以在事务里把上传成功的图片地址和工单 ID 关联起来。事务方法内部尽量不要调用别的 Service 方法做复杂网络操作否则容易造成长事务影响数据库连接释放。毕设规模下不必太担心但答辩时能说出这个问题会显得有经验。4.4 派单并发用条件更新保证只有一个人能抢到单工单派单最经典的并发问题两个客服同时看到一条待分配工单同时点了“派给我负责的工程师”如果不做控制工单有可能被指派两次。最稳妥的做法是更新时带上旧状态条件根据受影响行数判断是否成功。int rows repairOrderMapper.assignOrder(orderId, targetEngineerId, OrderStatus.PENDING_ASSIGN); if (rows 0) { throw new BizException(该工单已被处理请刷新后重试); }对应的 MyBatis SQL 是update repair_order set status 1, assignee_id #{engineerId}, assign_time now() where id #{orderId} and status 0只有状态下还是 0 的时候才会更新成功。这就是用“条件更新”代替“先查询再更新”的经典做法论文测试章节也能围绕这个场景写并发测试用例。4.5 工单列表查询MyBatis 动态 SQL 是刚需工单列表通常要按客户、状态、工程师、时间段等多个条件组合筛选。MyBatis 的动态 SQL 正好适合这种场景用where加if组织条件select idselectOrderPage resultTypecom.example.entity.RepairOrderVO select * from repair_order where if testuserId ! null and user_id #{userId} /if if teststatus ! null and status #{status} /if if testassigneeId ! null and assignee_id #{assigneeId} /if if teststartTime ! null and create_time gt; #{startTime} /if /where order by create_time desc /select这份 SQL 还有一个好处可以延伸到 “高级搜索” 功能。前端页面放几个筛选下拉框和日期选择器列表数据传条件即可。5. 前端实现与联调Vue 页面组织和接口对接里的坑5.1 axios 封装与登录态注入前端不能每个页面都手工拼接 axios 请求我只封装了一个 request.js统一处理请求头、响应拦截和错误提示。登录成功后把 token 存到 localStorage每次请求自动带上。import axios from axios const service axios.create({ baseURL: /api, timeout: 10000 }) service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers[Authorization] token } return config }) service.interceptors.response.use( response { const res response.data if (res.code 401) { router.push(/login) } return res }, error { ElMessage.error(请求失败请稍后重试) return Promise.reject(error) } )路由守卫里再检查一次登录状态访问需要登录的页面时如果没有 token 就跳转到登录页。这样前后端各做一层校验体验会好很多。5.2 页面拆解报修表单、工单列表、状态时间线页面不需要太多但要把核心流程的交互做顺畅。我的前端主要拆成以下部分登录注册页统一入口登录后按角色跳转到不同首页家电档案页用户维护自己的电器列表报修表单页选择家电、填写故障描述、上传图片工单列表页分角色展示不同范围的数据支持状态筛选工单详情页展示工单状态流转时间线、维修记录、操作按钮备件库存页管理员查看和调整备件数量统计页用简单的柱状图展示各状态工单数量状态时间线用 Element UI 的 Steps 组件实现把后端返回的状态值映射成当前 step 的 index界面效果一目了然。5.3 联调时最容易卡住的跨域与数据格式问题前后端分离开发时两地联调最容易卡在跨域。我的经验是开发阶段直接用 vue.config.js 里的 devServer 代理把/api开头的请求转发到后端地址这样前端就没有跨域问题。如果坚持让浏览器直接请求后端地址后端就需要配置跨域过滤器。更省事的方案是后端的 Spring MVC 配置允许跨域请求我两边都做了但实际用 devServer 代理就足够。另一个高频问题是时间和日期格式。后端返回的 LocalDateTime 默认序列化格式和前端组件预期不一致导致表格日期显示成一大串数字。解决办法是后端统一配置 JSON 序列化格式为yyyy-MM-dd HH:mm:ss同时前面对 null 值做兜底处理。5.4 图片上传等常见附属需求的做法报修单经常要上传故障照片。前端用 Element UI 的 Upload 组件提交时用 FormData 携带文件字段名和后端 MultipartFile 参数名保持一致。后端接收后把文件保存到本地指定的 upload 目录再返回相对访问路径。注意 Tomcat 部署时不要把文件直接写进项目 classpath否则重新部署会丢失图片。6. 论文撰写与答辩准备如何把项目写成有思考含金量的内容6.1 论文章节安排哪部分最容易写成流水账很多同学论文容易在“相关技术”和“系统实现”这两章写崩。“相关技术”整段粘贴框架介绍老师一眼就能看出来是做工作量的。正确做法是轻描淡写技术本身重点写“本系统哪个地方用到了这项技术的哪个能力”。比如 MyBatis 就写工单多条件筛选用到了动态 SQLSpring 就写事务和 IoC 在工单创建和模块解耦中的作用。“系统实现”章节也不要把代码全文贴进去而是每个模块截图配几句功能说明再挑一个核心设计点切入讲解。例如工单模块讲状态机的常量定义和 Service 层流转校验比贴一百行业务代码有价值得多。6.2 需求分析中的用例描述要写到什么程度需求分析章节画完用例图后最好给每个核心用例写一份规范描述。以“客户提交报修工单”为例应包含前置条件客户已登录且名下已登记至少一台家电基本流程进入报修页面选择家电填写故障类型和描述上传照片提交异常流程未选择家电时提示提交时登录过期则跳转登录页重复提交时后端通过状态判断拦截这些内容如实写就行因为它们都来自你实际开发的逻辑。论文答辩时老师如果抽查到用例描述你会发现每一条都能对上代码自信心完全不一样。6.3 测试章节功能用例表与并发场景描述测试章节要避免只写“系统运行正常功能全部通过”这类空话。可以列功能测试用例表明确测试步骤、预期结果、实际结果。还有两个很出彩的测试场景建议写在论文里未登录访问受保护接口应返回 401两个客服同时点击派单其中一个会收到“该工单已被处理”的提示这两个场景能证明你不是只做了页面而是真正考虑了接口安全和并发一致性。6.4 答辩高频问题与回答思路根据实际答辩经验老师最常问的问题基本集中在这几类问题回答思路为什么选 SSM 不选 Spring Boot强调手动整合框架能体现对三层架构和 IoC 的理解同时符合课程知识体系工单并发派单怎么防止冲突讲清楚条件更新的 SQL 和受影响行数判断逻辑状态流转怎么保证不乱讲后端 Service 层统一校验当前状态数据库不直接改状态所有修改走方法项目如何部署运行简述 MySQL 初始化、后端 war 包发布、前端打包放入 Tomcat 的基本过程数据库表为什么不用物理外键讲服务层保证引用完整性同时便于开发和演示答辩前可以照着这些问题自己模拟一遍回答比背完整篇论文有效得多。7. 实战中容易踩的版本与部署坑7.1 MySQL 8 驱动与时区问题如果你本地装的是 MySQL 8JDBC 驱动名需要写成com.mysql.cj.jdbc.Driver同时 URL 上要带时区参数否则启动后会报时区错误。我常用的连接串是这样的jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/after_sale?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalseallowPublicKeyRetrievaltrueMySQL 5.7 的项目照这个配置也能跑唯一要注意的是数据库和表的编码都设为 utf8mb4避免中文乱码。7.2 前端打包部署时的路径问题开发时用 devServer 代理很舒服但部署到 Tomcat 时要把npm run build生成的 dist 目录内容放到 Tomcat 的 webapps/ROOT 下。如果项目带了 context path接口路径也要同步改成包含 context path 的形式。更简单的方式是保持 ROOT 部署前端路由使用 hash 模式避免刷新后出现 404。我自己踩过的坑是前端用了 history 模式部署后初次访问没问题刷新详细页就白屏。后来切回 hash 模式才解决。毕设演示通常不会太在意 URL 有没有井号稳定性优先。7.3 MyBatis XML 中特殊符号与动态条件在 MyBatis XML 里写小于号、大于号时要注意转义。比如查询创建时间大于等于某个时间写成gt;才能被正常解析。还有一个常见问题多个if条件同时为空时SQL 最终只剩where order by create_time desc语法报错。我给列表查询统一加了where标签它会自动去掉多余的 and这类问题就能避免。7.4 依赖版本不一致引发的运行怪象SSM 整合时最容易出的怪问题来自 jar 包版本冲突。比如 Spring 的核心包版本不统一启动时会报各种奇怪的 error。我建议 Maven 依赖中直接统一 Spring 版本比如使用一个 5.x 的固定版本号MyBatis 和 Spring 整合包用配套的版本不要混搭。前端则是注意 Vue 2 不能直接安装 Element Plus必须安装 Element UIVue 3 项目用 Element Plus。装错版本后的报错信息很迷惑半天找不到问题根源。最后补一个我自己的习惯定稿前先从零恢复一份初始数据库按“客户注册、登记家电、提交报修、客服派单、工程师接单、维修完成、客户评价”这条主流程完整走一遍同时录屏保存演示视频。很多同学答辩前发现数据里出现半截工单或者角色权限提示不受控其实不是代码错了而是演示前没把数据状态归零。只要把这一步做扎实整个项目交付就会稳很多。
延伸阅读

更多相关文章

2026/10/20 17:36:12

本源昌盛-来自宇宙深处的本体丰沛 | 赵杰 | 量子精神哲学

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

2026/10/20 17:36:12

APK反编译实战:用Androidfby将DEX转为可读Java代码的完整流程

简介:这是一份面向 Android 开发者、测试人员及逆向爱好者的 APK 反编译工具资源包,用于解析应用内部结构、查看 Java 源代码与资源文件,帮助理解他人应用实现原理或辅助二次调试。压缩包共 488 个文件,大小约 8.84MB,…

2026/10/20 17:36:12

小白程序员的大模型应用实战入门:从提示词到RAG

如果你是写代码的,最近两年一定被“大模型”这个词刷屏了。博客、短视频、公司技术分享,绕来绕去都在聊一个话题:AI 大模型到底怎么学、怎么用、能拿它做什么。很多小白程序员第一反应是“我又没学过机器学习,数学底子也就那样&am…

2026/10/20 18:42:00

中央空调水系统变频改造实战:西门子S7-200 SMART PLC控制与调试复盘

前两年接了一个商业综合体的中央空调水系统改造项目,核心工作是用西门子S7-200 SMART PLC做控制核心,配套Smart系列触摸屏,把冷冻水泵从常年工频运行改成变频运行。中央空调水系统变频改造说起来不算新东西,网上一搜一大把原理图&…

2026/10/20 18:42:00

从场景出发:P6进度计划在投标、施工与EPC中的实操要点

1. 先把场景理清楚:同样一套P6,在不同阶段解决的是不同问题干工程项目进度管理这些年,P6这套软件几乎是绕不开的。很多新手一听到P6,第一反应是菜单多、字段多、上手难;而很多老手说它“太重”,排个计划还不…

2026/10/20 18:42:00

Hermes Agent四大核心能力:会话、工具、MCP与记忆的工程化实践

1. 项目概述:这不是一个“智能体框架”的空泛概念,而是一套可落地的会话工程实践体系“Hermes Agent能力篇:会话、工具、MCP、记忆”——这个标题里没有一个词是虚的。它不讲大模型原理,不堆参数指标,也不画架构图&…

2026/10/20 18:42:00

Harness:大模型评测的声明式协议与端到端优化实践

1. 为什么“Harness”突然成了大模型评测圈的高频词?最近在几场闭门技术分享会上,我听到不止一位算法工程师提到:“我们不跑 benchmark 了,现在统一走 harness 流程。”起初我以为是口误——毕竟 benchmark 这个词用了十几年&…

2026/10/20 18:42:00

HMI选型怎么不踩坑?五类方案实测对比与工业触摸屏避坑指南

做设备选型这件事,我向来觉得“调研”两个字最容易被轻视。HMI这个词,做工业设备的几乎天天挂在嘴边,可真要坐下来做个常用方案的横向对比,我发现很多团队心里其实没有一套说得清的标准。前阵子我刚好接了一个活儿:为一…

2026/10/20 18:36:54

AI渗透26个技术方向:程序员如何从焦虑到行动

1. 一份预测报告引发的行业焦虑前几天在技术社群里聊天,有位做后端开发的朋友突然甩出一句:“你们看了那份2026技术趋势预测报告没有?我越看越慌,感觉自己的活儿再过两年就要被AI吃掉了。”群里瞬间炸锅,做测试的、做运…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

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

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

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

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑