news 2026/7/17 2:23:42

Vue+Spring Boot实现的智能办公毕设项目(含AI表单识别与会议摘要)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue+Spring Boot实现的智能办公毕设项目(含AI表单识别与会议摘要)

本文还有配套的精品资源,点击获取

简介:一套开箱即用的毕业设计级智能办公系统,前后端分离,后端用Spring Boot开发,前端基于Vue.js构建,数据库脚本齐全,部署文档详细。系统支持用户注册登录、角色权限分级管理、在线文档协作编辑、可视化任务看板、站内消息与邮件通知等标准办公功能。特别集成轻量级AI能力:上传图片或PDF表单可自动识别字段并结构化提取;会议录音或文字记录支持一键生成要点摘要。代码结构清晰,yeb-back是后端模块,yeb-front是前端工程,src目录存放核心逻辑,Graduation Design文件夹里有开题报告、答辩PPT、论文模板等教学配套材料。本地启动简单,只需JDK 8+、Node.js 14+和MySQL 5.7+环境,运行脚本即可完整演示从登录到任务处理再到AI辅助办公的全流程,适合计算机、软件工程等专业本科生直接用于课程设计或毕业课题。

1. 这不是又一个“登录+列表”的毕设模板,而是一套真正能跑通AI办公闭环的毕业设计实战样本

我带过六届计算机专业本科生做毕设,每年都会收到上百份“基于Spring Boot的XX管理系统”——用户管理、商品列表、订单查询,三板斧打完就收工。但去年开始,越来越多学生拿着这个项目来找我:“老师,这个yeb-demo真能把会议录音变成摘要?”“表单识别是不是只支持身份证?”“权限控制能不能细到按钮级?”——问题很具体,说明他们真去跑了、调了、卡住了。这恰恰是它和市面上95%毕设模板的本质区别:它不满足于“功能存在”,而是追求“流程闭环”。你上传一张手写的报销单照片,系统能定位金额、日期、事由字段,填进数据库;你粘贴一段3000字的会议记录,点击“生成摘要”,3秒后返回5条带编号的核心结论,且每条都能在原文中找到依据。这不是调用某个云API的简单封装,而是把OCR预处理、NLP关键词抽取、摘要排序逻辑全链路串了起来,连MySQL字段类型都按识别结果做了适配(比如金额字段用DECIMAL(12,2),日期字段用DATE而非VARCHAR)。前后端分离结构也经得起推敲:Vue里用Pinia做状态管理,不是Vuex的简单替换,而是针对文档协作场景做了实时冲突检测的轻量封装;Spring Boot后端用Spring Security + JWT实现RBAC权限模型,角色-菜单-按钮三级控制粒度,连“导出Excel”按钮的显隐都由后端接口动态返回。配套的Graduation Design文件夹更不是摆设——开题报告里明确写了“为何放弃通用OCR SDK而选择PaddleOCR轻量化部署”,答辩PPT第7页展示了表单识别准确率对比曲线(自研模型 vs 百度OCR vs 阿里云),论文模板里甚至预留了“AI模块性能压测章节”的写作框架。如果你正为毕设选题发愁,或者已经写了三个月还在纠结“怎么让管理员页面看起来不像后台管理系统”,那这个项目就是为你准备的:它不教你从零造轮子,而是带你拆解一个真实业务场景下,如何把AI能力像螺丝钉一样拧进传统办公系统的每个关节。

2. 整体架构设计与技术选型逻辑:为什么是Vue+Spring Boot+轻量AI,而不是其他组合?

2.1 前后端分离不是为了时髦,而是解决毕设最痛的三个现实问题

很多学生问我:“老师,为啥不用Spring MVC直接写前后端?少学一个框架多省事。”——这话听着有道理,但实际操作中会撞上三堵墙。第一堵是调试效率墙:当修改一个按钮样式需要重启整个Spring Boot应用时,前端同学等不起;第二堵是技术栈隔离墙:计算机专业课程里Java和JavaScript教学进度不同步,强行耦合会导致一方拖累另一方进度;第三堵是部署演示墙:答辩现场需要快速切换环境,Vue打包成静态文件扔到Nginx,比配置Tomcat+JSP快十倍。这个项目用Vue CLI 4.5构建前端,Spring Boot 2.7.18做后端,通过vue.config.js里的devServer.proxy和生产环境的Nginx反向代理打通,本质上是在模拟企业级微服务架构的最小可行单元。特别值得注意的是yeb-front/src/api/index.js里的请求封装:它没用Axios默认的全局拦截器,而是为不同业务域(user、doc、ai)创建了独立实例,每个实例自带超时设置(文档协作接口设为10秒,AI识别接口设为60秒)和错误重试策略(AI失败时自动降级为提示“请检查图片清晰度”而非抛出500错误)。这种设计不是炫技,而是应对毕设答辩时网络不稳定的真实场景——去年有学生答辩时AI接口超时,因为没做降级处理,整个演示卡死在loading状态,最后被评委质疑“系统健壮性不足”。

2.2 AI模块不做“黑盒调用”,而是选择可解释、可调试的轻量方案

项目里提到的“智能表单识别”和“会议摘要生成”,很容易让人联想到调用百度/腾讯的云API。但这个项目反其道而行之:表单识别用的是PaddleOCR的server版精简模型(ch_ppocr_server_v2.0_det+ch_ppocr_server_v2.0_rec),会议摘要用的是TextRank算法的Java重写版(src/main/java/com/yeb/ai/summary/TextRankSummarizer.java)。为什么?因为毕设答辩的核心考察点之一是“你能说清楚代码每一行在做什么”。如果只是写个curl https://api.xxx.com/ocr -d image=xxx,评委问“识别精度怎么优化”,你只能回答“调高置信度阈值”,这显然不够。而用PaddleOCR,你可以指着PPOCRService.java里的detectTextRegion()方法解释:“这里用DBNet做文本区域检测,输出的是四边形坐标,所以能适应斜拍的发票;识别阶段用CRNN模型,字符级预测概率存入recResult.getScore(),我们据此过滤掉置信度低于0.85的字段”。会议摘要同理,TextRankSummarizer里没有调用任何第三方jar包,所有权重计算都在calculatePageRank()方法里——句子相似度用余弦距离,迭代次数固定为10次,最终摘要长度按原文总字数的15%截断。这种“笨办法”的好处是:答辩时可以现场修改参数(比如把迭代次数改成5),立刻看到摘要结果变化,证明你真正理解了算法原理。配套的Graduation Design/Algorithm_Comparison.md文档里,还列出了TextRank与BERT-Summary在1000字会议记录上的对比数据:前者平均耗时120ms(适合毕设演示),后者需2.3秒(需GPU支持)。

2.3 数据库设计直击办公系统痛点,字段命名暗藏业务逻辑

打开yeb-back/src/main/resources/sql/init.sql,你会发现这张表结构不是教科书式的范式样板。以sys_form_template(表单模板表)为例:
-template_type VARCHAR(20)不是简单的“报销单/请假单”,而是枚举值REIMBURSEMENT/LEAVE/CONTRACT,对应后端FormType枚举类;
-field_config JSON字段存储的是类似[{"name":"amount","type":"number","required":true},{"name":"reason","type":"text","required":false}]的结构,前端渲染表单时直接解析JSON生成控件;
- 最关键的是ai_model_path VARCHAR(255),它指向服务器上存放PaddleOCR模型文件的相对路径(如/opt/models/reimbursement_det.onnx),这意味着同一套后端代码,通过修改这个字段就能切换不同表单的识别模型。
再看meeting_record表:raw_content TEXT存原始文字记录,summary TEXT存AI生成摘要,summary_status TINYINT标记状态(0=未生成,1=生成中,2=成功,3=失败),这个状态字段直接驱动前端的轮询逻辑——当用户点击“生成摘要”后,前端不是傻等,而是每2秒查一次summary_status,状态变2才显示结果。这种设计把AI的异步特性自然融入同步业务流,避免了“按钮点了没反应”的尴尬。而src/main/java/com/yeb/service/impl/MeetingRecordServiceImpl.java里,generateSummary()方法用@Async注解开启新线程处理,同时用Redis缓存中间结果(key为meeting:summary:${id}),既保证主线程响应速度,又防止重复提交。

3. 核心功能模块深度解析:从登录到AI摘要,每一步都藏着可复用的工程技巧

3.1 权限控制不止于菜单隐藏,而是实现按钮级动态渲染

很多毕设的权限系统停留在“管理员能看到全部菜单,普通用户只能看个人中心”这种粗粒度控制。这个项目的RBAC模型深入到了DOM节点级别。关键在于yeb-front/src/directives/permission.js这个自定义指令:

// 指令注册 Vue.directive('permission', { inserted(el, binding) { const { value } = binding; // 从Pinia store获取当前用户权限码数组 const permissions = useUserStore().permissions; // 检查是否包含所需权限码,如'btn:doc:export' if (!permissions.includes(value)) { el.parentNode && el.parentNode.removeChild(el); } } });

使用时只需在按钮上加v-permission="'btn:doc:export'",指令就会根据用户权限动态移除DOM节点。而权限码的生成逻辑在后端SysMenuServiceImpl.javabuildPermissionCode()方法里:菜单ID为102(文档管理)的子菜单ID为1021(导出按钮),权限码自动生成为btn:doc:export。更巧妙的是,这个权限码不仅用于前端控制,还作为ShiroFilter的拦截规则——/api/doc/export接口的@RequiresPermissions("btn:doc:export")注解,确保即使绕过前端,后端也会校验权限。这种前后端双重校验的设计,让权限系统不再是摆设。我在指导学生时特别强调:答辩时一定要演示“用普通用户账号登录,打开开发者工具手动添加导出按钮的HTML,点击后后端返回403 Forbidden”,这才是真正的权限落地。

3.2 文档协作编辑的实时性不靠WebSocket,而是用乐观锁+版本号

在线文档协作常被误认为必须上WebSocket。这个项目用更轻量的方案解决了核心问题:多人同时编辑同一文档时,谁先保存谁生效,后保存者收到冲突提示。关键在document表的version INT字段和DocumentService.java里的updateContent()方法:

@Transactional public Result updateContent(Long docId, String newContent, Long version) { // 先查当前版本 Document doc = documentMapper.selectById(docId); if (doc.getVersion() != version) { return Result.fail("文档已被他人修改,请刷新后重试"); } // 更新内容并递增版本号 doc.setContent(newContent); doc.setVersion(version + 1); documentMapper.updateById(doc); return Result.success(); }

前端每次保存前,会把当前文档版本号(从document.version字段读取)传给后端。如果版本号不匹配,说明有人抢先保存了,前端就弹出提示框:“张三刚刚更新了此文档,最新内容已加载”。这种乐观锁方案比WebSocket简单得多,却完美覆盖了毕设场景——毕竟学生演示时不会真有10人同时编辑。配套的yeb-front/src/views/doc/EditDoc.vue里,版本号被存入ref响应式变量,每次编辑内容变更时自动更新,确保传递给后端的永远是最新的版本号。这种设计教会学生一个朴素真理:技术选型要匹配真实需求,而不是堆砌概念。

3.3 AI表单识别的预处理环节,决定了90%的识别成功率

很多学生以为AI识别就是“上传图片→调API→拿结果”,但实际落地时,80%的问题出在图片质量上。这个项目在yeb-back/src/main/java/com/yeb/ai/ocr/OcrService.java里实现了完整的预处理流水线:
1.尺寸归一化:用Thumbnailator库将图片缩放到宽度1200px(保持宽高比),避免大图导致内存溢出;
2.灰度化与二值化:对扫描件用OpenCVcv::threshold()函数,阈值设为128,突出文字边缘;
3.倾斜校正:用霍夫变换检测直线,计算主文字行角度,旋转图片至水平;
4.噪声过滤:对手机拍摄的图片,用中值滤波(cv::medianBlur())去除椒盐噪声。
这些步骤不是凭空添加的,而是源于对1000+张真实报销单测试样本的分析——模糊图片占32%,倾斜图片占27%,低对比度占18%。预处理后的识别准确率从61%提升到89%。更值得学习的是错误处理机制:当PaddleOCR返回空结果时,系统不会直接报错,而是触发降级流程——调用Tesseract OCR(备用引擎)再次识别,若仍失败,则返回{"code":500,"msg":"图片质量不佳,请拍摄清晰、平整的表单"}。这种“主备引擎+明确提示”的设计,让AI模块在答辩演示时异常稳定。我在指导时会让学生用自己手机拍一张歪斜的发票上传,亲眼看到系统自动校正并识别出金额,这种直观效果比讲十遍原理都有说服力。

3.4 会议摘要生成的“要点提炼”,本质是业务规则与算法的结合

会议摘要不是简单压缩文字,而是提取决策点、行动项、时间节点。TextRankSummarizer.javaextractKeyPoints()方法做了三层过滤:
-第一层:句子筛选——剔除问候语(“大家好”、“谢谢各位”)、无意义短句(“嗯”、“啊”);
-第二层:实体标注——用HanLP分词库识别出人名、部门名、日期(如“张经理”、“财务部”、“下周三”),这些实体所在句子优先入选;
-第三层:动词强化——统计句子中“确定”、“批准”、“要求”、“完成”等决策动词出现频次,频次高的句子权重翻倍。
最终摘要按权重排序,取Top5。例如输入:“张经理提出下周三前完成报销系统上线,李总监要求测试环境同步部署,王主管确认资源已到位”,输出:
1. 确定报销系统于下周三前上线
2. 测试环境需同步部署
3. 王主管确认资源已到位
这种结果明显优于纯统计摘要(如“报销系统上线,测试环境部署,资源到位”)。配套的Graduation Design/AI_Module_Design.pdf里,详细记录了30次人工评估结果:算法摘要被认可为“准确反映会议结论”的比例达92%,而随机抽取5句的基线方法只有63%。这说明,好的AI应用不是追求算法有多前沿,而是让算法服务于业务目标。

4. 本地快速启动实操指南:避开99%新手会踩的5个环境坑

4.1 JDK与Node.js版本陷阱:不是越高越好,而是要匹配项目锁定版本

项目文档说“JDK 8+、Node.js 14+”,但实际运行时,JDK 17或Node.js 18会出问题。原因在于:
-yeb-backpom.xmlspring-boot-starter-parent版本是2.7.18,它依赖的spring-boot-starter-web底层用的是Tomcat 9.0.x,而Tomcat 9.0.x官方支持的最高JDK版本是17,但项目里某些反射调用(如SecurityConfig.java里的@Bean方法)在JDK 17+的强封装策略下会报IllegalAccessError
-yeb-frontpackage.jsonvue-cli-service版本是4.5.15,它依赖的webpack-dev-server3.x不兼容Node.js 18的fetch全局对象,会导致热更新失效。
正确做法
1. 下载JDK 8u202(推荐Adoptium Temurin 8u202-b08);
2. 下载Node.js 14.21.3(LTS版本);
3. 启动前执行node -v && java -version确认版本;

提示:Windows用户务必用cmd而非PowerShell运行npm install,否则node-gyp编译会因Python路径问题失败。

4.2 MySQL初始化必须执行两步,漏掉第二步会导致AI模块报错

很多人只运行init.sql就启动项目,结果AI接口返回Table 'yeb.sys_form_template' doesn't exist。这是因为项目用了MyBatis-Plus的自动建表功能,但init.sql只创建了基础表(user、menu等),AI相关的表(sys_form_templateai_ocr_log)需要额外脚本。
完整步骤
1. 在MySQL中创建数据库yeb(字符集utf8mb4,排序规则utf8mb4_unicode_ci);
2. 执行yeb-back/src/main/resources/sql/init.sql
3.关键一步:执行yeb-back/src/main/resources/sql/ai_init.sql(该文件在资源包根目录的sql文件夹里,容易被忽略);
4. 修改yeb-back/src/main/resources/application.yml里的数据库连接:

spring: datasource: url: jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: your_password # 默认密码为空,若修改过请填对应密码

4.3 PaddleOCR模型文件必须手动下载,且路径要严格匹配

项目启动后,首次调用表单识别会报错Model file not found: /opt/models/reimbursement_det.onnx。这是因为PaddleOCR模型文件太大(单个det模型约120MB),未放入Git仓库。
解决方案
1. 访问PaddleOCR官方GitHub Release页(https://github.com/PaddlePaddle/PaddleOCR/releases),下载ch_ppocr_server_v2.0_det.onnxch_ppocr_server_v2.0_rec.onnx
2. 在服务器上创建目录/opt/models/(Linux/Mac)或C:\models\(Windows);
3. 将两个onnx文件放入该目录;
4. 修改yeb-back/src/main/resources/application.yml里的模型路径:

ai: ocr: det-model-path: /opt/models/ch_ppocr_server_v2.0_det.onnx # Linux/Mac # det-model-path: C:\\models\\ch_ppocr_server_v2.0_det.onnx # Windows,注意双反斜杠

注意:Windows路径必须用双反斜杠\\,单斜杠/会导致JavaFile.exists()返回false。

4.4 Vue前端跨域代理配置,本地开发与生产环境要区分对待

vue.config.js里的代理配置常被学生直接复制到生产环境,导致Nginx反向代理失效。正确配置是:

// vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', // 开发时指向后端 changeOrigin: true, pathRewrite: { '^/api': '' // 把/api前缀去掉再转发 } } } }, // 生产环境构建时,API基础路径改为相对路径 publicPath: process.env.NODE_ENV === 'production' ? './' : '/' }

构建生产包时,npm run build生成的dist目录里,所有API请求都是相对路径(如/api/user/login),这时需要Nginx配置:

location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }

如果忘记配置Nginx,访问http://localhost:8080会看到Vue页面,但所有接口404——因为浏览器请求的是http://localhost:8080/api/user/login,而Nginx没把/api转发给后端。

4.5 启动顺序与端口占用排查:一个命令解决所有依赖启动

学生常遇到“后端启动了,前端报504 Gateway Timeout”。这是因为前端开发服务器(默认8080)和后端Spring Boot(默认8080)端口冲突。
标准启动流程
1. 启动MySQL服务(确保3306端口空闲);
2. 进入yeb-back目录,执行:

mvn clean package -Dmaven.test.skip=true java -jar target/yeb-back-1.0.jar --server.port=8081
  1. 新开终端,进入yeb-front目录,执行:
npm install npm run serve # 自动启动在8080端口
  1. 浏览器访问http://localhost:8080,登录账号admin/123456

    实操心得:我让学生在yeb-backpom.xml里把<artifactId>spring-boot-maven-plugin</artifactId>版本锁定为2.7.18,避免Maven自动升级插件导致打包失败;前端package.json"scripts"下的"serve"命令已预设--port 8080,无需额外参数。

5. 常见问题与排查技巧实录:从答辩现场到课程设计,这些坑我都替你趟过了

5.1 表单识别返回空结果?先查这三件事

问题现象排查步骤解决方案
上传清晰发票图片,返回{"code":200,"data":[]}1. 查yeb-back日志,搜索OcrService关键字
2. 看是否有No text detected日志
3. 检查/opt/models/目录下onnx文件大小是否为0
文件损坏则重新下载;若日志显示OutOfMemoryError,在java -jar命令后加-Xmx2g参数
识别出文字但字段错位(金额跑到日期位置)1. 用curl -X POST http://localhost:8081/api/ai/ocr/test上传同一图片
2. 观察返回的bounding_box坐标是否合理
坐标异常说明det模型失效,更换为ch_ppocr_mobile_v2.0_det.onnx(轻量版)
只识别中文,英文数字全乱码1. 检查application.ymlai.ocr.rec-model-path路径是否正确
2. 用file命令查看onnx文件编码
rec模型路径错误或模型文件损坏,重新下载ch_ppocr_server_v2.0_rec.onnx

5.2 会议摘要生成慢?不是算法问题,而是文本预处理没做好

学生常抱怨“粘贴200字就卡3秒”。其实TextRank算法本身很快,瓶颈在HanLP分词。TextRankSummarizer.java里有个隐藏开关:

// 默认启用精确分词(慢但准) private static final boolean USE_ACCURATE_SEGMENT = false; // 改为true则启用

USE_ACCURATE_SEGMENT = true时,HanLP会加载完整词典(约100MB),首次分词需5秒;设为false则用极速分词模式(基于词典+规则),200字分词仅需80ms。我在指导时会让学生改这个开关,现场对比速度差异,理解“精度与性能的权衡”这一工程核心命题。

5.3 权限控制失效?90%是因为没清浏览器缓存

最经典的案例:学生修改了数据库里用户的权限码,前端菜单还是旧的。原因在于Pinia store的数据持久化到localStorage,而localStorage不会随后端数据变更自动更新。
强制刷新方案
1. 前端src/store/modules/user.js里,login()方法末尾添加:

// 登录成功后清除旧权限缓存 localStorage.removeItem('user_permissions');
  1. src/main.js里,路由守卫增加:
router.beforeEach((to, from, next) => { const permissions = localStorage.getItem('user_permissions'); if (!permissions && to.path !== '/login') { next('/login'); } else { next(); } });

这样每次访问非登录页,都会检查权限缓存是否存在,不存在则跳转登录——逼用户重新登录获取最新权限。

5.4 文档协作编辑冲突提示不友好?用业务语言替代技术术语

原始提示是“版本号不匹配,请刷新页面”。答辩时评委问:“普通用户看不懂‘版本号’是什么,怎么优化?”
优化方案
1. 后端DocumentService.java返回更友好的消息:

return Result.fail("文档已被其他人修改,最新内容已自动加载,请检查后再保存");
  1. 前端EditDoc.vue里,把alert()换成Element Plus的ElMessage
ElMessage.warning({ message: '文档已被其他人修改,最新内容已自动加载', duration: 3000 });
  1. 关键动作:在提示后,自动调用loadLatestContent()方法重新拉取文档内容,而不是让用户手动刷新页面。这种“自动恢复+业务化提示”的设计,让系统显得更智能、更人性化。

5.5 毕设答辩演示卡顿?三个必做优化让流程丝滑如德芙

  1. 数据库预热:答辩前10分钟,用Postman批量请求/api/user/list?page=1&limit=20等高频接口,让MySQL缓冲池加载常用数据;
  2. AI模型预加载:启动后端时加参数-Dpaddle.ocr.preload=true,在OcrService构造函数里提前加载onnx模型到内存;
  3. 前端静态资源CDN化:把yeb-front/dist目录下的jscss文件上传到免费CDN(如jsDelivr),修改index.html里的<script src>为CDN链接,减少本地Nginx压力。
    这三项做完,从登录到生成会议摘要的全流程,能在42秒内完成(实测数据),远超答辩要求的2分钟时限。

6. 毕设延伸与教学价值:如何把这个项目变成你的学术亮点

这个项目最珍贵的不是代码本身,而是它提供了一套可复用的“毕设方法论”。我指导的学生中,有三人基于此项目做出了差异化成果:
- 一位同学聚焦表单识别精度提升,在OcrService.java里增加了基于OpenCV的ROI(感兴趣区域)自动裁剪功能——针对报销单,程序能自动定位“金额”、“日期”、“收款人”三个区域,分别调用OCR,使金额字段识别准确率从89%提升到97.3%;
- 另一位同学拓展会议摘要的多模态输入,在MeetingRecordController.java里新增/api/meeting/audio接口,用FFmpeg将MP3转WAV,再用VAD(语音活动检测)切分音频,调用Whisper.cpp做语音转文字,最后送入TextRank——实现了“上传录音→生成摘要”的全流程;
- 第三位同学重构权限系统的审计能力,在SysLogAspect.java里增加对@RequiresPermissions注解的环绕通知,记录每次权限校验的IP、时间、用户ID、所需权限码,生成security_audit.log文件,答辩时展示了“某用户在23:45尝试访问删除接口被拒绝”的审计日志。
这些延伸不是天马行空,而是紧扣项目原有架构:OCR优化在ai包下,语音转文字在ai包下,审计日志在aspect包下。它们证明了一个事实:好的毕设项目,应该像乐高积木——基础模块稳固,扩展接口清晰,让你能站在巨人肩膀上,做出真正属于自己的那一块。

我个人在实际指导中发现,学生最容易忽略的是“问题定义”的严谨性。比如做表单识别,不要笼统说“提高准确率”,而要定义清楚:“在1000张真实报销单测试集上,金额字段的F1值从89%提升至95%以上”。这种定义让工作量可衡量、成果可验证,答辩时评委一眼就能判断你是否真的完成了目标。这个项目的价值,正在于它把抽象的“AI办公”拆解成了一个个可定义、可测量、可实现的具体问题——而解决问题的过程,才是毕设真正的灵魂。

本文还有配套的精品资源,点击获取

简介:一套开箱即用的毕业设计级智能办公系统,前后端分离,后端用Spring Boot开发,前端基于Vue.js构建,数据库脚本齐全,部署文档详细。系统支持用户注册登录、角色权限分级管理、在线文档协作编辑、可视化任务看板、站内消息与邮件通知等标准办公功能。特别集成轻量级AI能力:上传图片或PDF表单可自动识别字段并结构化提取;会议录音或文字记录支持一键生成要点摘要。代码结构清晰,yeb-back是后端模块,yeb-front是前端工程,src目录存放核心逻辑,Graduation Design文件夹里有开题报告、答辩PPT、论文模板等教学配套材料。本地启动简单,只需JDK 8+、Node.js 14+和MySQL 5.7+环境,运行脚本即可完整演示从登录到任务处理再到AI辅助办公的全流程,适合计算机、软件工程等专业本科生直接用于课程设计或毕业课题。


本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 2:23:28

Windows系统PIN不可用问题排查与修复指南

1. 问题现象与背景解析当你在Windows 10/11系统开机或唤醒时看到"PIN不可用"的提示&#xff0c;这通常意味着系统无法验证你设置的登录PIN码。这种情况多发生在以下场景&#xff1a;系统更新后首次启动硬件配置发生变化&#xff08;如更换主板&#xff09;微软账户同…

作者头像 李华
网站建设 2026/7/17 2:20:46

VC6.0编译的纯C++2048游戏,双击test.exe即玩,WASD操作+图形界面

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;这个2048小游戏用标准C编写&#xff0c;完全不依赖第三方库或运行时环境&#xff0c;直接在Windows上双击test.exe就能启动。操作方式简单直观&#xff1a;W键向上滑动、A键向左、S键向下、D键向右&#xff0c;…

作者头像 李华
网站建设 2026/7/17 2:19:15

iKuai软路由IPv6配置指南:实现内网设备直连公网

在实际网络部署中&#xff0c;IPv6 的普及程度越来越高&#xff0c;但很多中小企业和家庭用户在使用软路由系统时&#xff0c;仍然会遇到内网设备无法获取公网 IPv6 地址的问题。iKuai&#xff08;爱快&#xff09;作为一款功能完善的软路由系统&#xff0c;提供了完整的 IPv6 …

作者头像 李华
网站建设 2026/7/17 2:18:21

Windows 11下VirtualBox安装与优化全指南

1. Windows 11与VirtualBox的兼容性现状2022年发布的Windows 11对硬件虚拟化提出了更严格的安全要求&#xff0c;这直接影响了VirtualBox这类虚拟化软件的运行环境。微软强制启用的Hyper-V虚拟化平台与VirtualBox存在底层冲突&#xff0c;特别是在家庭版系统上表现尤为明显。我…

作者头像 李华