又到毕业季每年这个时候总有一批人被毕设题目卡住。这次选题是《鲲龙装饰公司在线管理系统的设计与开发手机端》后端用SSM前端用Vue交付物是论文加程序。别一听“管理系统”就觉得是老掉牙的增删改查装修装饰行业的业务链其实相当长从客户咨询、预约量房、设计方案到报价、合同、施工、材料、验收每个环节都要有记录。把这类项目做明白你收获的不只是一个能过答辩的Demo更是一套完整的企业业务系统开发思路。我按自己的实际开发经验从需求梳理、技术选型、核心功能到论文写作和答辩准备把整条链路拆开讲清楚希望能帮你少走弯路。1. 项目定位与需求梳理1.1 装饰公司的业务链路装饰公司看起来只是“给人装修”实际运作中信息特别碎。客户从电话咨询、门店到访到销售跟进、设计师去量房再到方案沟通、报价谈判、签合同、开工交底、材料进场、施工阶段验收、竣工验收和售后回访每一个环节都要换人、换系统、换表单。如果没有统一管理很多信息就散落在Excel表格和微信聊天记录里某个项目经理请假工地上做到哪一步了、材料还剩多少可能没人说得清楚。所以这个系统管的不是单个小功能而是一条完整业务线。系统里至少要区分几种角色管理员负责账号、数据统计、报价和合同审核销售/业务员管客户、预约和跟进设计师上传案例、制作方案和报价单项目经理维护施工进度、材料清单和现场照片。权限如果一开始不做后面补起来会非常痛苦。我建议第一版先把这条主线打通其他辅助功能后面再慢慢加。1.2 手机端不是APP别自己吓自己看到“手机端”三个字很多人第一反应是要做APP。但题目技术栈写的是SSMVue没有说必须用原生Android或Flutter所以最合理的方案是做一个移动端H5页面用Vue配合移动端组件库比如Vant做出一套适合手机浏览器和微信内打开的系统。手机端展现为底部导航、卡片式列表、大按钮、简化的表单而不是把PC端页面缩小。这样做工作量可控答辩时也容易解释。在论文里可以表述为“面向移动端的响应式设计”讲清楚H5跨平台、免安装、方便现场使用即可。如果你真想提升演示效果最多做一个“管理员扫码登录”的彩蛋但不要花太多时间毕设的核心是把主业务闭环走通。2. 技术选型与整体架构2.1 SSM后端如何分工SSM是Spring、SpringMVC、MyBatis三个框架的组合。Spring管对象创建、依赖注入和事务SpringMVC管请求路由和参数绑定MyBatis管SQL和结果映射。很多同学把SQL直接写在Controller里Controller里面几百行Service层形同虚设这样后面答辩画架构图时很难自圆其说。我建议一开始就养成分层习惯Controller只做参数接收、调用Service、返回结果Service里写业务判断和事务控制Mapper只写数据库操作。比如新增预约时要同时生成待办提醒如果第二步失败了前面写入的预约数据必须回滚。这时候在Service方法上加事务注解保证数据一致性论文里还能写一句“系统通过声明式事务保证核心操作的数据完整性”属于加分项。Transactional public boolean createAppointment(AppointmentDTO dto) { customerMapper.insert(dto.getCustomer()); appointmentMapper.insert(dto.getAppointment()); reminderMapper.insert(dto.getReminder()); return true; }2.2 Vue3Vant4的移动端组合前端技术栈如果在2026年做建议用Vue3ViteVant4而不是还在Vue2的老教程里打转。Vue3配合新的组合式API写业务代码更清晰Vite启动速度也比Webpack快很多省下来的时间可以用来调页面。用Vue Router做页面跳转Pinia做全局状态管理Axios发接口请求这已经是一套很标准的移动端Web方案。项目结构可以这样规划src/api放接口请求src/views放页面src/router放路由配置src/store放全局状态。特别提醒一点不要在项目里同时混用Vant和Element Plus两个组件库的样式体系容易冲突手机端优先用Vant就够了。真机调试时让电脑和手机连同一个Wi-Fi前端启动后用局域网IP加端口访问不要用localhost。2.3 数据库链路与表设计数据库设计是整个项目的地基。建表不要一上来就铺二三十张先把核心主链“客户-预约-设计-报价-合同-施工-验收”建出来再补员工、角色、跟进记录、材料、收款这些辅助表。我常用的核心表大致如下表名用途关键字段employee员工表employee_no, real_name, mobile, password, role_idrole角色表role_code, role_namecustomer客户表customer_name, phone, community, statusappointment预约量房表customer_id, appoint_time, address, remarkfollow_record跟进记录表customer_id, content, next_time, creator_iddesign_case设计案例表title, cover_img, designer_id, contentquotation报价单主表customer_id, total_amount, discount, statusquotation_item报价明细表quotation_id, project_name, unit_price, quantitycontract合同表quotation_id, customer_id, sign_time, moneyconstruction_progress施工进度表contract_id, stage_code, progress_desc, photo_urlmaterial材料清单表contract_id, material_name, spec, quantity, budget_price这里尤其要注意金额字段用DECIMAL而不是doubleJava对应BigDecimal不然浮点数精度问题会在论文测试环节暴露出来。外键物理建不建都可以但业务上必须保证客户、报价、合同之间的关联关系是正确一致的。状态字段建议用编码值不要直接在页面里写死中文方便后面扩展。3. 核心功能模块拆解与实现3.1 登录、角色权限与安全设计登录模块不能只做一个账号密码比对。前后端分离后推荐用Token方案而不是传统Session因为手机端H5请求接口时需要带身份凭证Token放在请求头里更通用。Session需要依赖Cookie在部分移动端浏览器里行为并不可控所以Token更合适。毕设阶段可以把Token存在后端内存Map里启动时重置简单够用如果要显得专业一点可以引入Redis但考虑到答辩环境不要为了Redis增加额外部署成本。密码必须加密存储。最基础也要做MD5加盐再往上可以用SHA-256或者加一层盐值。答辩老师如果问“为什么不能明文存密码”答“防止数据库泄露后所有账号一起暴露”就够。PostMapping(/login) public Result login(RequestBody LoginDTO dto) { // 根据登录名查用户 Employee emp employeeMapper.selectByUsername(dto.getUsername()); if (emp null) { return Result.error(账号不存在); } String md5Pwd DigestUtils.md5DigestAsHex((dto.getPassword() emp.getSalt()).getBytes()); if (!md5Pwd.equals(emp.getPassword())) { return Result.error(账号或密码错误); } String token UUID.randomUUID().toString().replace(-, ); tokenStore.put(token, emp.getId()); return Result.success(token); }权限控制不要只隐藏前端按钮后端也要做拦截。比如设计师角色的请求不能操作报价单审核接口。SSM中可以用拦截器实现校验Token是否存在、用户角色是否匹配、接口是否在白名单内。把这些写进论文“系统安全设计”一节内容就很扎实。3.2 客户、预约与跟进管理客户管理是这类系统的门面也是最容易出效果的部分。客户列表要支持姓名、手机号、状态、来源筛选。手机端页面适合做顶部搜索框加下拉刷新卡片上显示客户姓名、小区、意向面积和当前状态。点击进入详情页后可以看到客户的基本信息、跟进记录、预约历史、关联报价单和合同。客户状态建议按业务流转设计意向客户、已预约、已量房、已报价、已签合同、施工中、已竣工、已验收。后端用一个状态码字段维护前端根据状态码渲染不同颜色的Tag。跟进记录要单独建表每次沟通都追加一条包括沟通内容、下次跟进时间和跟进人这样销售换人接手也能快速了解前情。新增客户时手机号最好做唯一校验避免重复数据这是答辩测试用例里很常见的一项。3.3 设计案例与报价单实现设计案例模块重点在图片上传。设计师从手机端选择多张案例图Vant的Uploader组件拿到文件后调用后端上传接口后端保存文件并返回访问路径前端再把路径和案例标题、描述一起提交。这个流程看着简单但要注意Uploader组件回调拿到的对象不是标准File需要先做格式处理上传接口只负责上传不要和案例保存逻辑混在一起方便复用。报价单是装饰公司最复杂的业务对象之一。一张报价单对应多个项目明细比如拆除、水电改造、木工、油漆、主材等每个明细有项目名称、单位、单价、数量、小计。前端以明细表格录入后端对应报价主表和报价明细表。计算总价时注意折扣字段有些客户谈的是九五折有些可能抹零所以总价不能简单由明细相加还要带上优惠逻辑。金额计算用BigDecimal否则会出现小数点后多一位的尴尬。3.4 施工进度与材料管理施工进度模块最能体现装饰行业特点。施工阶段可以分开工交底、水电改造、泥瓦工、木工、油漆、安装、竣工验收。每个阶段记录开始时间、完成时间、负责人、现场照片和备注。手机端更新进度时Vant的Steps组件可以直观展示当前阶段项目经理选好阶段后拍照上传、填写说明业主或管理员在另一端立刻看到更新。材料管理不要独立于合同存在。一张合同下维护材料清单包含材料名称、规格、单位、数量、预算单价、实际单价和供应商。项目经理报材料时系统提示当前合同下材料预算剩余额度。这需要DOUBLE判断如果实际单价和数量相乘超过预算就给出警告。这部分在论文中可以写成一个“限额提醒”小功能答辩时演示很直观。4. 手机端页面与接口联调细节4.1 移动端布局与导航设计手机端页面布局我建议用底部TabBar四个主要入口首页、客户、工作台、我的。首页放待办事项、近期预约、工期预警客户页是列表加筛选工作台按角色展示常用操作比如销售看到“新增客户”“预约量房”“跟进记录”设计师看到“上传案例”“新建报价”我的页面放个人信息、修改密码、退出登录。路由配置按页面懒加载避免首屏加载太多代码。适配方面Vant组件库基于375px设计稿在大多数手机浏览器上表现不错。按钮高度不要小于44px列表点击要有水波反馈或背景色变化。手机端不适合做复杂的多列布局优先使用单列卡片和折叠面板。图片列表要懒加载案例图和施工现场图容易撑爆流量可以用Vant的Lazyload插件体验会好很多。4.2 统一返回格式与接口管理前后端联调最头疼的问题就是每个接口返回结构不一致。我建议后端所有接口都返回统一结构public class Result { private Integer code; // 200成功其他为业务错误 private String msg; private Object data; }分页接口返回pageNum、pageSize、total、list四件套。前端在Axios响应拦截器里统一处理成功就返回data失败就弹Toast提示。这样页面里不用每个请求都写各种错误分支整体代码干净很多。如果接口路径设计得好前端和后端可以各写各的最后按接口文档对接就行。service.interceptors.response.use( response { const res response.data; if (res.code 200) { return res.data; } Toast.fail(res.msg); return Promise.reject(res); }, error { // 处理401、网络异常等 return Promise.reject(error); } );4.3 文件上传与图片预览避坑图片上传这块坑特别多很多人在本地开发时好好的部署到服务器就全部404。原因是后端保存图片到本地目录后没有把目录映射成可访问的静态资源。在SpringMVC的配置里需要加静态资源映射把/upload/**指向实际存储目录。如果是前后端分离部署在同一个Tomcat里可以放到WebApps下的upload目录如果分开部署就要保证存储目录有持久化和备份。上传时还要做两层校验前端限制文件类型和大小后端必须再做一次不能信任前端传来的参数。文件保存名称建议用时间戳加随机数不要直接用原文件名避免中文乱码和重名覆盖。保存的路径要返回相对路径前端展示时拼接完整地址这样切换开发环境和生产环境时只需要改接口域名。5. 论文写作与答辩准备5.1 论文章节如何组织论文结构大多按学校模板走常规套路是绪论、相关技术介绍、系统分析、系统设计、系统实现、系统测试、总结。最容易写空的是“相关技术介绍”不要只粘贴一堆网络定义。建议写清楚为什么用SSM而不是SpringBoot为什么前端选Vue而不是JSP以及手机端H5相对原生APP在企业应用中的优势。这些内容要结合项目本身去说才显得是你自己思考过的。“系统分析”部分要画用例图、功能模块图并写清楚每个角色有哪些权限。“系统设计”部分要放总体架构图、数据库E-R图、核心表结构。“系统实现”部分尽量每个小节配上线框截图和关键代码片段截图要保证清晰不能有脏乱桌面。论文里反复强调“面向业务闭环”和“移动端现场使用”就是区别于其他管理系统的特色。5.2 测试数据、演示环境与截图答辩翻车往往不是因为功能没做完而是现场演示时随机点到一个数据断层的地方。所以我强烈建议准备一套完整的演示数据创建三个账号分别对应销售、设计师、项目经理准备一个客户从“意向”逐步走到“竣工验收”的完整记录每张页面至少保存两张不同状态的截图。测试部分不要只写“功能正常”要写明具体的测试用例例如测试项操作预期结果正常登录输入正确账号密码跳转首页并显示用户昵称密码错误输入错误密码提示“账号或密码错误”重复手机号新增客户时输入已存在手机号提示“该客户已存在”越权访问销售账号调用设计师接口返回401并拦截图片上传超限上传大于5MB的文件提示“文件大小不能超过5MB”这些用例是答辩老师最爱翻的地方提前准备好被问到时直接展示比现场临场打字有说服力。演示时手机连不上校园网是个常见事故最好提前准备好手机热点或者录一段完整的操作视频作为后备。5.3 答辩高频问答思路答辩老师经常问的问题其实就那几类。“为什么用SSM不用SpringBoot”可以答SSM是传统企业分层框架用XML和注解结合的方式能更直观理解Spring核心机制SpringBoot本质是SSM的自动配置封装类比到科研选题选SSM是为了学习底层原理。“Token过期怎么办”可以答前端在响应拦截器里遇到401就清除本地登录状态并跳回登录页更完善的方案是加刷新Token接口但毕设阶段做到前端自动引导重新登录已经够用。“数据量大了怎么优化”可以从索引、分页、SQL字段优化、图片分离存储等角度说两条不需要太深。提前把这些问题的最简答案写进自己的笔记里答辩心态会稳很多。6. 常见问题速查与开发经验6.1 高频报错与解决办法开发过程中遇到的问题很多是共性的。我把常见的整理成一份速查表现象常见原因解决方向登录后刷新页面状态丢失Token只存在内存或刷新后没有重新拉用户信息刷新后根据Token调用一次用户信息接口再写入Pinia图片上传后访问404静态资源映射没有配置在SpringMVC配置或Nginx中映射/upload/目录真机访问不到页面电脑防火墙拦截或IP地址不对关闭防火墙或用ipconfig查局域网IP前端设置host分页数据不对PageHelper不止影响第一条查询或手写limit参数混乱分页查询单独一个Mapper方法不和其他查询混在一起跨域请求失败前后端端口不一致开发时用Vite代理生产环境同域部署日期格式显示乱码JSON序列化格式不对配置Jackson全局日期格式字段加JsonFormat修改密码后旧Token还能用服务端没有清理旧Token简易方案修改密码时在Token存储中移除并强制重新登录分页是很多人的痛点。用PageHelper时它的作用范围是紧随其后的第一条查询如果Service里先查了统计信息再查列表分页经常失效。解决办法是让分页查询单独走一条链路或者干脆手写SQL用LIMIT和COUNT分别控制。要保证pageNum从1开始返回total时用COUNT查询结果前端才能正确渲染分页组件。6.2 开发节奏、命名与工程管理如果现在开始做时间线不建议拖太长。第一周确认需求、建库建表、搭好前后端脚手架第二三周完成后端登录、客户、预约核心接口第四五周做设计案例、报价、施工模块第六周集中做手机端Vue页面和联调第七周测试、修Bug、补测试报告第八周写论文、截图、做PPT。如果时间只剩两周就优先做“客户-预约-报价-施工”这条主链路其余模块简单做数据维护即可。命名规范这事一定要坚持。Java包名按controller/service/mapper/entity/dto划分Controller命名为XxxControllerService为XxxServiceMapper为XxxMapper。数据库表名单数小写下划线字段名用customer_name这种不要用拼音缩写。代码注释不用多但核心业务方法和复杂状态判断一定要写一行说明。这些细节在答辩老师翻阅代码时会形成非常好的正面印象。6.3 一点个人体会这类SSMVue的管理系统项目我前前后后做过不少版本最大的体会是毕设不是炫技而是把业务讲通、把工程跑通、把论文写圆。很多人一上来就想加各种高大上的技术Redis、ElasticSearch、消息队列结果最后连基本流程都走不通。技术栈就算传统一点只要把装饰公司的业务闭环梳理清楚把权限、状态流转、数据关联做好一样能拿不错的成绩。另外工程能跑通之后论文别急着照抄模板。先根据实际功能列章节提纲再边截图边补充文字效率高很多。踩过的每个坑都值得记下来像分页失效、上传路径404、跨域拦截这类问题写在“开发中遇到的问题及解决”一节里反而比空谈原理更有说服力。真到答辩那天你会发现准备充分比临场发挥靠谱得多。