news 2026/9/20 4:11:33

SpringBoot+Vue搭建心理咨询预约测试平台:从预约排期到量表报告的完整工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot+Vue搭建心理咨询预约测试平台:从预约排期到量表报告的完整工程实践

毕业设计选了“springboot+vue基于web的心理咨询预约测试平台”这个题目,或者工作中接到类似需求的时候,很多人的第一反应是:这不就是个带预约功能的CRUD吗?用户注册登录、咨询师列表、选时间、提交预约,再附带几张心理测试问卷,把分数算出来展示一下。说实话,如果只做到这个程度,系统确实不难。但真正把“预约”“测试”和“平台”这三个词放在一起拆解时,你会发现这里面藏着一串容易被忽略的业务细节:排期冲突怎么防、咨询师临时改期如何处理、量表评分规则如何设计才能适应不同问卷、用户的测试报告怎么生成才不至于是一堆数字的堆砌。这篇文章我就围绕这个题目,把从需求梳理到数据库设计、后端接口、前端页面、再到部署上线的完整过程捋一遍,重点放在那些“课本里不会写但做项目一定会碰到”的地方。

无论你是正在做毕设的学生,还是刚工作不久想练手前后端分离项目的开发者,这篇文章都适合你。我会先把业务层讲透——因为这直接决定了你数据库怎么建、接口怎么设计;然后落到技术选型,给出一套稳妥的组合方案;再按模块拆解后端和前端的核心实现;最后聊聊我在实际调试中踩过的坑,以及系统上线后真正想让它“可用”还差哪些事。

1. 需求梳理:心理咨询预约平台到底在管理什么

1.1 三类用户的三套诉求,不是一张表能解决的

起步阶段最容易犯的错,是把系统设计成“一个用户表 + 一个预约表”的双角色模型。真实场景里,这个平台至少站着三类人:普通用户、咨询师、平台管理员,而且每一类人对系统的诉求完全不一样。

用户要的是什么?是快速找到合适的咨询师看到真实可约的时间段预约后能收到确认通知做完测试能拿到看得懂的报告。这中间还隐含了一层心理服务特有的需求——用户可能不愿意暴露太多个人信息,所以注册信息应该尽量精简,甚至可以用昵称 + 手机号完成整个流程。

咨询师要的是什么?是维护自己的可服务时间查看预约列表在咨询前后补充来访者信息填写简单的咨询记录。这里有个很关键的细节:咨询师的可约时间不是无限开放的,他们通常只在每周固定的一些时段接咨询,而且可能临时调整。所以排期模块不能做成“用户随便选任意时间”,而是要由咨询师提前设置一周内的可用时段,用户在已经被开放的时间窗里做选择。

管理员要的则更多是审核与运营视角的东西:审核咨询师的入驻资料、查看整个平台的预约量、某个时段的饱和度、用户的测试参与率等。这些诉求意味着系统内部必须有清晰的角色权限边界,不能让用户请求跑到咨询师的管理接口里去。

1.2 预约状态机:决定业务复杂度的中枢

预约功能是所有模块里最难做“严谨”的部分,难点不在写增删改查,而在于状态的流转。如果数据库里只存一个“是否预约”的布尔字段,你会发现后面根本没法面对真实情况。

一个完整的预约单,至少要经历这些状态:待确认/待支付 → 已确认 → 已完成,同时任意时刻都可能进入已取消。为什么需要“待确认”?因为咨询师可能设置的是“手动确认制”——用户提交预约后,咨询师需要在自己方便的时间确认是否接这个个案。为什么需要“已完成”?因为只有进入已完成状态,系统才能生成与本次预约关联的服务记录,用户也才能对这次咨询进行评价或后续追踪。

我建议把状态机直接用数字常量定义在后端枚举里,前端只展示对应的文字标签。状态字段本身在数据库里就是一个小整数,从0到4,每个数字的含义在枚举里注释清楚。这样可以避免前后端各维护一套字符串、接口传参时对不上的窘境。

还有一个容易被忽略的点:取消权限和时限。用户提交预约后能不能自己取消?咨询师能不能取消已经确认的预约?这些规则直接影响接口的校验逻辑。简单方案是:待确认状态双方都可取消,已确认状态只有用户可取消且至少提前24小时,超过时限需要联系管理员处理。这种规则不需要做成可配置的复杂引擎,直接在Service层写清楚即可,但一定要写,否则后面测试用例都编不出来。

1.3 心理测试模块:从量表到报告的完整链路

心理测试表面上是一张问卷,但真实系统里它是一个链路:量表管理 → 题目维护 → 用户作答 → 自动计分 → 生成报告。市面上常见的是SCL-90、SDS抑郁自评量表这类标准问卷,它们的共同特点是:题目有固定选项(比如“没有、轻度、中度、重度”),每个选项对应一个分值,最终得分落在不同区间对应不同的结果描述。

设计这个模块时,最容易掉进去的坑是把“一套量表”写死在代码里。今天上线一个SDS,明天用户说还需要一个SAS焦虑量表,代码就要改一遍。正确的做法是把量表的题目、选项、分值、结果规则都做成数据表的记录,后端只提供一个通用的计费引擎:根据量表ID取出题目列表,比对用户提交的答案,按规则计算原始分和标准分,再查结果区间,拼出报告内容。这样以后新增量表,只需要在管理后台录入数据,后端代码一行都不用改。

报告也不是存一个最终分数就完了。用户看到报告时,最好能看到每道题的作答情况分类得分总分解释一句合理的结果说明。所以数据库里要保存用户作答的明细记录,而不仅仅是最后那个数字,否则用户问“我为什么是这个结果”,系统完全没有可追溯的依据。

2. 技术选型与项目结构:一套稳妥不折腾的组合

2.1 后端:SpringBoot版本和依赖组合的选择逻辑

后端选择SpringBoot是没什么悬念的,真正需要纠结的是版本。目前网上能搜到的教程、毕设项目源码,大量停留在SpringBoot 2.x时代,而官方已经在推3.x,Spring Boot 3要求Java 17起步,且部分第三方starter还在适配期。

如果你是一个希望短期内把所有功能跑通的开发者,我给的建议很直白:选SpringBoot 2.7.x + Java 8或11。原因有三:第一,网上资料和现成代码最多,遇到报错一搜就有答案;第二,MyBatis-Plus、一些小众的工具库对2.x的兼容性最稳定;第三,毕设答辩或小团队内部项目对“能否运行”的重视程度远高于“是否用了最新版本”。等到你完整跑通过一个项目,理解了核心流程,再去升级SpringBoot 3也不迟。

ORM层面,MyBatis-Plus是省事利器。单表CRUD几乎不用写SQL,自带的分页插件、逻辑删除、自动填充时间字段,都能让代码量压缩不少。配合Lombok,实体类里的getter/setter也不用手敲了。这套组合在中小型管理类系统里非常成熟,没有激进的技术风险。

数据库我建议直接用MySQL 8.x。相比5.7,8.x的窗口函数、JSON能力、默认字符集utf8mb4都更顺手。开发阶段密码、账号配置写在application.yml里就行,但要注意别把配置文件的真实密码提交到公开仓库——因为毕设代码很多时候是要上传开题报告或演示的。

2.2 前端:Vue 2还是Vue 3,我给的最终答案

这是另一个绕不开的纠结。Vue 3 + Element Plus是当前主流方向,Composition API的代码组织方式也更现代。但有一个现实问题:Element Plus只支持Vue 3,而网上大量现成的后台管理模板、毕设配套前端代码都是Vue 2 + Element UI。如果项目周期紧,参考资料越多越好,那么用Vue 2不代表技术落后——它只是工程化成熟度不同。

从我的实操经验看,如果你准备自己从零写前端页面,推荐Vue 3 + Element Plus + Vite。开发体验确实比Vue 2时代好很多,Vite启动极快,组合式API写业务逻辑也更清晰。但如果你打算基于某个开源后台模板二次开发,那先看清模板用的是哪个版本,再决定自己用什么。模板版的坑在于:你换掉它的核心组件时,往往要连带改一堆依赖版本。

前端请求库直接用Axios,统一封装一个request实例,配置基准URL、超时时间和请求拦截器(自动携带token)。路由用Vue Router 4(Vue 3)或3(Vue 2),状态管理用Pinia或Vuex。整体就是一个标准的前后端分离的SPA。

2.3 加不加Redis、OSS和WebSocket:哪些是刚需

很多人在项目设计阶段容易进入“技术堆砌”模式:Redis缓存、RabbitMQ消息队列、WebSocket实时通知、OSS文件存储,总觉得不加上就显得系统不够完整。我的建议是逐个筛选需求,而不是先选技术。

  • Redis:当用户登录后需要频繁读取咨询师列表、量表列表这些变化不频繁的热数据时,加Redis做缓存是合理的。同时可以用Redis存验证码、登录token的分布式去重,都是加分项。但如果项目只是演示,不引入Redis也不会影响功能完整性。
  • OSS对象存储:涉及上传用户头像、咨询师资质图片时,才需要考虑。小项目完全可以用本地目录存储 + 数据库存相对路径解决,部署到服务器后再挂Nginx做静态资源映射。
  • WebSocket:在已经完成的预约状态下,给用户推送“预约成功”“咨询师已确认”等通知,理论上很实用。但实际开发中可以先用站内信表来代替,用户登录后拉取未读消息,效果差别不大,复杂度却低了一个量级。

我做这套系统时的建议是:核心功能优先全流程跑通,中间件按需添加。让预约、测试、报告这条主链路先闭环,再去考虑缓存和消息推送,这才是能稳定交付的顺序。

3. 数据库建模:四张核心表的边界与关系

3.1 用户表与角色权限:最小可用的RBAC设计

用户相关字段不需要做得很复杂。一张user表,包含id、账号、密码(BCrypt加密后的密文)、昵称、真实姓名、手机号、角色类型、状态、创建时间。角色类型这里不一定要单独建角色表,因为平台内角色就三类,用一个整数类型字段区分成本最低。如果要扩成更灵活的多角色权限,再引入RBAC三张表不迟——但针对“预约测试平台”这个场景,字段级别的roleType就够用了。

关于咨询师,还需要一个独立的咨询师信息表,存放用户表中roleType=2的用户在专业维度上的扩展信息:咨询方向、从业年限、资质描述、个人简介、可预约价格、状态(待审核、正常、禁用)。为什么不直接塞进user表?因为普通用户完全没有这些字段的取值,强行合并会让表变得臃肿且产生大量空值。

管理员账号数量极少,直接在user表里用roleType区分即可,不需要单独建表。

3.2 咨询师排期表:固定时段与单次时段的设计取舍

排期表是整个预约系统的地基,设计不好会导致后续预约校验变成一团乱麻。我建议采用“模板规则 + 单次例外”的双表方案,但这个方案对初学开发者偏复杂。更简单、也更适合毕设或小团队的方式是直接使用单次排期表

建一张schedule表,字段包括:id、咨询师ID、日期、开始时间、结束时间、状态(可用/已预约/已锁定)。咨询师在每周一设置下周一上午9:00-10:00可预约,就插入一条记录;某天临时有事,就锁定或删除对应记录。用户预约某个时段时,后端做的事情就是:检查这条schedule记录是否存在、状态是否可用,然后在一个数据库事务里把状态改成已预约,并插入预约单。这个方案直观、好理解、容易调试,对于每天预约量不高的心理平台完全够用。

如果你确实需要一个更“专业”的方案,可以在排期表上增加“星期几”和“开始时间”,形成周模板,再为特殊情况生成例外记录。但这类设计对查询逻辑的要求高不少,而且在毕设演示场景下,它的优势并不容易被看到。

3.3 预约单表 + 测评记录表:两个核心业务表的字段明细

预约单表字段大致包括:id、预约编号(业务编号,方便展示和查询)、用户ID、咨询师ID、排期ID、预约日期、开始时间、结束时间、咨询方式(线下/线上)、状态、备注、创建时间、更新时间。其中预约编号一定要有,用户会在订单记录里看到它,且和数据库自增ID解耦。

测评模块需要两张表。一张是测试记录表,字段包括:id、用户ID、量表ID、原始总分、标准分、结果等级、报告内容、创建时间。另一张是答卷明细表,字段包括:id、测试记录ID、题目ID、选中选项ID、选项分值。答卷明细保留的意义我前面说过了——用户需要追溯,报告展示也需要展示每题作答和分类得分。

量表本身的两张基础表:量表表存量表名称、类型、题干描述、是否启用、计分规则类型;题目表存所属量表ID、题目标题、题目顺序、选项内容(可以用JSON字符串存一组选项值)。用JSON字符串存选项的好处是避免为每个量表动态建表,坏处是查询统计稍麻烦,但在这个场景下,换取到的扩展性是值得的。

3.4 一个容易忽略的细节:数据库字段的时间类型与时区

规划表结构的时候,我强烈建议所有日期时间字段统一使用datetime类型,并由后端传入LocalDateTime,而不是依赖数据库的CURRENT_TIMESTAMP默认值。这样时间语义在你脑子里是明确的——所有时间都是服务器本地时间,前后端通过字符串格式传递,不引入时区转换的隐式逻辑。

时区问题是我每次联调必踩的坑。2.7版本的SpringBoot在返回JSON时间时,默认序列化格式是ISO格式,和前端组件解析格式不一致,会出现显示的日期比实际晚8小时之类的问题。解决办法是在application.yml里统一配置Jackson的时间格式化,或者在全局配置类里注册JavaTimeModule并设定格式。这个细节我在第6章会详细说。

4. 后端核心模块实现:三个需要用心写的地方

4.1 JWT登录鉴权与权限拦截:从注解到拦截器的落地

登录接口本身的逻辑不复杂:接收账号密码,BCrypt校验密码,通过后签发JWT返回前端。JWT里我会放用户ID、用户名、角色类型三个字段,过期时间设为24小时。密钥放在配置文件中,生产环境通过环境变量注入,不过毕设项目写死在yml里问题也不大,关键是别泄漏到公开仓库。

拦截器是这套鉴权体系的核心。在SpringBoot里实现HandlerInterceptor接口,在preHandle方法里从请求头获取token,解析校验,然后把userId、roleType放进request.setAttribute,方便后续控制器直接取用。放行名单包括登录注册接口、量表列表查询接口(用户未登录也希望能看量表介绍)等,用指定的URI前缀匹配。

角色权限控制,我的做法是写一个简单的自定义注解@RequireRole(value = "admin"),配合拦截器或AOP判断当前用户的roleType是否符合要求。这样在咨询师管理和预约管理接口上各加一个注解,语义非常清晰,比拦截器里写死URL列表好维护得多。

4.2 预约防冲突:数据库事务里做状态校验才是最稳的

预约的核心方法,我踩过一次很深的坑:一开始我是在Service层先查询排期状态,然后在代码里判断“状态为可用则更新”。本地单用户测试没问题,一旦用JMeter模拟两个用户同时抢同一个时段,就会出现超卖——两个请求都读到“可用”,然后都更新成功。

后来改成先更新,后判断更新行数。即将原本两步操作合成一条带条件的UPDATE语句,例如UPDATE schedule SET status = 1 WHERE id = ? AND status = 0。如果更新影响行数为0,说明时段已经被抢,直接抛出业务异常。这条更新语句至少要放在事务方法中(@Transactional),确保状态变更和预约单插入同时成功或同时回滚。数据库层面也可加上唯一索引兜底,把排期ID在预约单表设为唯一约束,确保同一个排期最多产生一条有效预约。

这个“先更新、后判断影响行数”的思路,在所有秒杀类、抢购类业务场景里都是通用解法,比应用层加锁更简单也更安全,建议牢牢记住。

4.3 通用测评计分引擎:用规则数据代替硬编码

不同量表计分方式略有差异,但绝大多数可以抽象成两段逻辑:选项分值和区间规则。我的通用引擎实现是:

  • 每题包含若干选项,每个选项配置对应的分值;
  • 后端接收用户提交的[{questionId, optionId}]数组;
  • 引擎遍历题目,根据选项算出原始分,再将所有题的分数累加得到原始总分;
  • 根据量表预先定义的规则,比如score <= 13为无焦虑,14~19为轻度焦虑,查对应的规则记录,得到结果等级和标准报告文案;
  • 组装reportMap,把原题答案、分值明细、总分、等级、建议文案一并返回。

设计这套规则数据时,关键点是规则区间要用minmax两个字段而不是一个字符串区间。数据库查询时直接WHERE scale_id = ? AND min_score <= ? AND max_score >= ?,一次查出来,完全避免在代码里截取解析字符串。另外注意闭区间还是开区间,这个要写清楚,否则边界分数会落进错误区间。

4.4 管理后台的统计接口:用聚合SQL而不是遍历循环算

平台首页通常需要展示几个数字:今日新增用户、今日预约量、本月预约人数、各咨询师接单排行、测试参与趋势等。如果每个数字都写一个Service查全表再在Java内存里统计,不仅代码难看,数据量上来后还会很慢。建议直接写聚合SQL,例如SELECT COUNT(*) FROM appointment WHERE DATE(create_time) = CURDATE()这种,配合Mapper的@Select注解,一个统计结果一个方法,清晰高效。

联合多个表统计的,比如统计每个咨询师的接单数并排序,用MySQL的GROUP BY+ORDER BY就足够了,不需要为了“性能”引入额外的重型组件。小规模数据下,SQL层面的优化是最直接有效的。

5. 前端实现:Vue里的页面组织、权限控制与组件复用

5.1 前端目录结构与请求封装:一开始就按模块划分

前端项目如果用的是Vite,建议目录按特征划分:src/api放接口定义,src/views放页面组件,src/router放路由配置,src/store放Pinia或Vuex状态,src/utils放封装工具,src/components放通用组件。每个页面模块在views下再分子目录,比如views/userviews/consultantviews/admin

请求封装是前端最值得花时间的基础工作。一个典型的Axios实例配置包含:baseURL: '/api',请求拦截器里从localStorage取token并设置到请求头,响应拦截器里统一处理HTTP 401(跳到登录页)、403(提示无权限)、200但业务码非成功(弹出错误消息)。这样每个页面里的接口调用都不用重复处理错误逻辑,页面代码能短一截。

5.2 路由守卫与权限控制:不止拦截未登录

Vue Router没有原生权限机制,但路由守卫可以做到基础的访问控制。在全局前置守卫里,先判断是否访问白名单(登录、注册、量表介绍页),然后判断store里有没有用户信息,没有则跳到登录页。登录后再判断路由的meta.role字段是否包含当前用户角色,不包含则跳转403或首页。

这层控制能挡住普通用户通过改URL访问后台页面,但有经验的人会告诉你,真正的权限校验一定在后端接口上,前端路由守卫只是用户体验层面的保护。因为前端代码是公开的,恶意用户可以直接调接口,所以后端每个受保护接口都要有过硬的权限判断,前端隐藏按钮、拦截路由只是“看起来更专业”。

5.3 咨询师排期设置页面:用日历组件降低操作成本

排期设置如果只是一排表单,用户填起来很痛苦。我建议直接在客户端引入日历组件,比如Element Plus的el-calendar,在日历上点击某一天就弹出窗口,设置当天哪些时间段可预约,已设置的时段显示在日历格子里。咨询师可以快速浏览下周的安排,也能一键删除已设置的时段。

这里有个交互细节:日历组件选中状态的数据结构,建议贴近后端schedule表的字段——提交时组装成一个{date, startTime, endTime}[]数组,后端一次接收并插入多条记录。这比每次只新增一条、同事又要请求一次列表展示,体验好得多。

5.4 测试页面与报告展示:动态渲染通用题目的关键

用户在选择量表后的测试页面,核心是根据量表ID动态从后端获取题目列表,再根据题目类型渲染不同的表单控件。常见的题目类型就单选、多选、量表式选项,单选量表题用一个el-radio-group循环渲染即可,完全不需要为每个量表单独开发页面。用户点击提交后,前端只需把答案数组传到后端接口,报告用新的结果页展示。

报告页的展示要注意一个细节:除了把总分级报告文案放出来,最好把用户每道题的作答记录也展示出来,比如“您在第3题选择了‘经常’,该题得分3分”。这会让系统看起来非常完整,而数据来源就是前面提到的答卷明细表。

5.5 Vuex/Pinia状态管理:别把什么都塞进去

Vuex或Pinia只应该存跨页面共享且需要实时响应的数据,比如当前登录用户信息、未读消息数、角色权限码。至于某个页面里的表单数据、列表查询结果,应该放在组件自身的ref或reactive里,用完即丢。把列表数据放全局store,只会带来垃圾数据残留和刷新后数据丢失的烦恼,还会让状态流变混乱。

我习惯在登录成功后,把用户基本信息、角色、token一起写入store并同步到localStorage。刷新页面时,在App.vue的onMounted里做一次getUserInfo请求,拿真实用户信息覆盖本地快照,这样兼顾了刷新后的持久化和后端数据的一致性。

6. 联调、部署与踩坑实录

6.1 前后端联调:跨域与代理配置

开发阶段前后端分离,必然会遇到跨域问题。最简单的解法不是在后端写CORS配置类,而是利用前端开发服务器的代理。Vite开发服务器配置server.proxy,把/api开头的请求转发到http://localhost:8080,同时在Axios实例的baseURL也写/api,这样浏览器看到的请求是同源的,完美规避跨域。

如果后端一定要开启CORS来应对一些特殊场景,例如给第三方客户端调接口,那再在SpringSecurity或过滤器中配置允许跨域。但注意不要让allowOrigins*,至少要限定为本项目的前端地址。

6.2 Nginx部署:Spring Boot打jar包 + 前端构建后的静态资源

上线时,后端打成jar包,用java -jar app.jar跑起来;前端执行npm run build,生成dist目录。Nginx配置的核心要点是:location /指向dist目录做静态资源服务,location /api/做反向代理转发到后端服务端口。同时因为前端路由用了history模式,要在location /里配置try_files $uri $uri/ /index.html;,否则刷新非首页路由会404。

在这里我提醒一个真实环境中常见的坑:前后端部署在不同的服务器或端口时,后端接口的HOST和端口在Nginx里配置正确,但前端代码里如果用了绝对地址比如http://localhost:8080,会在生产环境直接失效。最佳做法是前端所有接口都走相对路径/api,由Nginx统一代理,这样迁移服务器时只需改Nginx配置。

6.3 三个必踩的经典坑:Long精度丢失、时间格式、本地存储安全

第一个坑:MyBatis-Plus实体主键如果用的是雪花算法生成的Long型,传给前端时会在JavaScript里发生精度丢失,id尾数变成0000或错误数字。解决方法是后端在序列化时把Long转成String,要么在字段上加@JsonSerialize(using = ToStringSerializer.class),要么全局配置ObjectMapper转换。

第二个坑:时间是LocalDateTime类型时,如果不配置Jackson格式,前端收到的可能是"2024-06-01T10:30:00"这种带T的字符串。日历组件格式化很麻烦,建议统一在后端配置为yyyy-MM-dd HH:mm:ss,前端直接用字符串展示。

第三个坑:本地存储localStorage存token本身是没问题的,但不要存密码、身份证号这类敏感信息,也不要指望前端加密能保护什么。真正保护数据安全的方式是:后端对敏感字段脱敏返回、接口做严格鉴权、限制请求频率。前端的localStorage更像是一个便捷会话缓存,而不是安全边界。

7. 体验与扩展:从“能运行”到“真能用”的进阶方向

系统做到这一步,已经可以从头到尾跑通预约、测试、报告的完整流程。但如果你是在做实操项目或毕设,我还想提几个“加分项”,它们改动量不算大,却能明显提升系统的完整度:

第一,咨询师详情与用户评价模块。预约前查看咨询师的资质、评分、历史评价,能显著增强用户选择的信任感。评价可以做成预约完成后两日内允许评价,评价内容存入一张评价表,关联预约ID和咨询师ID。

第二,通知中心的站内信实现。当预约状态变化时,向用户插入一条站内信;用户登录后通过消息接口拉取未读数量,在导航栏右上角做红点提示。这个功能在我的实践里对用户体验提升非常明显,而且实现成本很低。

第三,管理后台的图表统计。用ECharts展示近30天的预约趋势、各咨询师接单排行、测试参与人数等。ECharts官方案例拿来即用,配合后端聚合SQL,效果相当唬人,验收时是加分项中的加分项。

据我观察,很多做完这类项目的人都会有一个共同的体会:真正拉开工作量的,从来不是某个单一功能的难度,而是功能之间的联动和边界条件的处理。预约要联动排期,测试要联动报表,权限要贯穿所有接口,这些才是一个平台项目“有点意思”的地方。希望这篇拆解能帮你少走一些弯路,把这套系统真正做成一个自己拿得出手的作品。

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

UI-TARS Desktop:10 分钟装好并跑通第一个 GUI 自动化任务

UI-TARS Desktop&#xff1a;10 分钟装好并跑通第一个 GUI 自动化任务 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-deskto…

作者头像 李华
网站建设 2026/9/20 4:07:46

PyCharm 2025 正版安装与高效配置实战

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

作者头像 李华
网站建设 2026/9/20 4:06:05

CC Switch 接 TaoToken:三个模型一键切换不再改 Base URL

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

作者头像 李华
网站建设 2026/9/20 4:05:58

Unity 3D场景搭建入门:从编辑器操作到场景管理

1. 从零上手 Unity&#xff1a;为什么第一个 3D 场景值得认真搭很多人第一次打开 Unity 编辑器&#xff0c;看到满屏的面板、按钮和密密麻麻的菜单&#xff0c;第一反应是“这玩意儿从哪下手”。我当初也一样&#xff0c;下载完 Unity Hub、装好编辑器、新建了一个 3D 项目&…

作者头像 李华
网站建设 2026/9/20 4:03:34

用Python读取Excel核对指定列尺寸信息:从规则解析到自动标注

作为一名常年和数据表打交道的从业者&#xff0c;我看到“853-读取excell核对指定列内尺寸信息是否正确”这个标题&#xff0c;第一反应就是亲切——这不就是我每天都在干的活儿吗。这个编号“853”&#xff0c;可能是某个工单号&#xff0c;可能是项目任务序号&#xff0c;也可…

作者头像 李华