SpringBoot2+Vue3全栈电商系统开发实践
1. 项目概述欢迪迈手机商城的技术架构解析这个基于SpringBoot2Vue3MyBatis-PlusMySQL8.0的手机商城系统是我最近完成的一个全栈电商项目。整套系统采用前后端分离架构后端基于SpringBoot2框架提供RESTful API前端使用Vue3构建响应式界面数据持久层采用MyBatis-Plus简化数据库操作MySQL8.0作为底层数据存储。这种技术组合在当前Java Web开发领域非常主流特别适合中小型电商系统的快速开发。从实际开发体验来看这套技术栈有几个突出优势首先SpringBoot2的自动配置和起步依赖让后端服务搭建变得极其高效其次Vue3的Composition API相比Options API在复杂业务场景下代码组织更清晰再者MyBatis-Plus的Wrapper条件构造器让数据库操作代码量减少50%以上最后MySQL8.0的窗口函数、CTE等新特性在复杂报表查询时优势明显。2. 技术选型与核心组件分析2.1 SpringBoot2后端框架设计选择SpringBoot2.7.3版本作为基础框架主要考虑其成熟的生态和良好的长期支持。在项目初始化时通过start.spring.io生成的骨架项目中我特别添加了以下关键依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.2/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-validation/artifactId /dependency注意SpringBoot2默认使用Tomcat作为内嵌容器如果考虑性能优化可以替换为Undertow实测QPS能提升15%左右在Bean管理方面针对商城业务特点我采用了混合作用域策略控制器(Controller)和服务层(Service)保持默认的单例模式购物车相关的Bean使用原型(prototype)作用域通过Scope(prototype)注解实现定时任务使用EnableScheduling开启配合Async实现异步执行2.2 Vue3前端工程化实践前端采用Vue3.2组合式API开发项目初始化时选择了Vite作为构建工具相比Webpack启动速度提升明显。工程结构组织如下src/ ├── api/ # 接口请求封装 ├── assets/ # 静态资源 ├── components/ # 公共组件 ├── composables/ # 组合式函数 ├── router/ # 路由配置 ├── stores/ # Pinia状态管理 ├── utils/ # 工具函数 └── views/ # 页面组件在组件开发中大量使用了script setup语法糖配合TypeScript类型系统代码可维护性显著提高。例如商品列表组件script setup langts import { ref, onMounted } from vue import { getProductList } from /api/product interface Product { id: number name: string price: number stock: number } const products refProduct[]([]) const loading ref(false) onMounted(async () { loading.value true try { products.value await getProductList() } finally { loading.value false } }) /script2.3 MyBatis-Plus高效数据访问MyBatis-Plus 3.5.2版本在本项目中发挥了巨大作用主要体现在通用Mapper自动生成基础CRUD方法Lambda表达式构建条件查询分页插件自动处理物理分页自动填充创建/修改时间等字段典型的产品查询服务实现Service public class ProductServiceImpl extends ServiceImplProductMapper, Product implements ProductService { Override public PageProduct queryByCondition(ProductQueryDTO dto) { return lambdaQuery() .like(StringUtils.isNotBlank(dto.getName()), Product::getName, dto.getName()) .ge(dto.getMinPrice() ! null, Product::getPrice, dto.getMinPrice()) .le(dto.getMaxPrice() ! null, Product::getPrice, dto.getMaxPrice()) .eq(dto.getCategoryId() ! null, Product::getCategoryId, dto.getCategoryId()) .page(new Page(dto.getPageNum(), dto.getPageSize())); } }经验在application.yml中配置mybatis-plus.mapper-locations时建议使用classpath*:mapper/**/*.xml模式这样可以扫描到所有模块的Mapper文件2.4 MySQL8.0数据库设计数据库使用MySQL8.0.28主要利用了以下新特性窗口函数实现销售排名统计CTE(Common Table Expressions)简化复杂查询JSON字段类型存储商品扩展属性原子DDL保证表结构变更的安全性核心表结构设计示例CREATE TABLE product ( id bigint NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL COMMENT 商品名称, price decimal(10,2) NOT NULL COMMENT 销售价, market_price decimal(10,2) DEFAULT NULL COMMENT 市场价, cost_price decimal(10,2) DEFAULT NULL COMMENT 成本价, stock int NOT NULL DEFAULT 0 COMMENT 库存, category_id bigint DEFAULT NULL COMMENT 分类ID, specs json DEFAULT NULL COMMENT 规格参数, status tinyint NOT NULL DEFAULT 1 COMMENT 状态, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_category (category_id), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;3. 核心功能模块实现3.1 商品管理模块商品管理采用树形分类结构前端使用el-tree组件展示后端实现递归查询。关键技术点包括分类层级处理public ListCategoryTreeVO buildCategoryTree(ListCategory allCategories) { MapLong, ListCategory parentIdMap allCategories.stream() .collect(Collectors.groupingBy(Category::getParentId)); return buildTree(0L, parentIdMap); } private ListCategoryTreeVO buildTree(Long parentId, MapLong, ListCategory map) { return map.getOrDefault(parentId, Collections.emptyList()).stream() .map(category - { CategoryTreeVO vo new CategoryTreeVO(); BeanUtils.copyProperties(category, vo); vo.setChildren(buildTree(category.getId(), map)); return vo; }).collect(Collectors.toList()); }商品图片上传采用阿里云OSS存储前端实现多图上传组件template el-upload action/api/upload list-typepicture-card :file-listfileList :on-successhandleSuccess :before-uploadbeforeUpload el-iconPlus //el-icon /el-upload /template script setup const fileList ref([]) const beforeUpload (file) { const isImage file.type.startsWith(image/) const isLt5M file.size / 1024 / 1024 5 if (!isImage) { ElMessage.error(只能上传图片!) } if (!isLt5M) { ElMessage.error(图片大小不能超过5MB!) } return isImage isLt5M } /script3.2 购物车与订单系统购物车设计采用Redis缓存MySQL持久化的混合方案用户未登录时购物车数据存储在浏览器localStorage用户登录后合并本地购物车到Redis使用Hash结构存储 Key格式cart:{userId}Fieldproduct_{productId}Value商品数量订单生成流程预减库存Redis分布式锁保证原子性创建订单主表记录创建订单商品明细扣减实际库存清除购物车对应商品关键代码示例Transactional public Order createOrder(OrderCreateDTO dto, Long userId) { // 获取分布式锁 String lockKey order:lock: userId; try { boolean locked redisTemplate.opsForValue() .setIfAbsent(lockKey, 1, 30, TimeUnit.SECONDS); if (!locked) { throw new BusinessException(操作太频繁请稍后再试); } // 验证并预减库存 checkAndReduceStock(dto.getItems()); // 创建订单 Order order new Order(); order.setUserId(userId); order.setStatus(OrderStatus.UNPAID); orderMapper.insert(order); // 创建订单项 ListOrderItem items dto.getItems().stream() .map(item - { OrderItem orderItem new OrderItem(); orderItem.setOrderId(order.getId()); orderItem.setProductId(item.getProductId()); orderItem.setQuantity(item.getQuantity()); return orderItem; }).collect(Collectors.toList()); orderItemService.saveBatch(items); // 实际扣减库存 reduceRealStock(dto.getItems()); return order; } finally { redisTemplate.delete(lockKey); } }3.3 支付集成与回调处理支付模块对接了支付宝沙箱环境主要实现前端发起支付请求获取支付表单后端生成支付参数并签名支付宝异步通知处理支付结果查询接口支付回调处理要点验证签名确保请求来自支付宝处理幂等性同一通知可能多次发送异步更新订单状态记录支付日志用于对账PostMapping(/alipay/notify) public String alipayNotify(HttpServletRequest request) { MapString, String params convertRequestParams(request); // 验证签名 boolean signVerified AlipaySignature.rsaCheckV1( params, alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType()); if (!signVerified) { return failure; } // 处理业务 String tradeStatus params.get(trade_status); if (TRADE_SUCCESS.equals(tradeStatus)) { String orderNo params.get(out_trade_no); orderService.handlePaySuccess(orderNo, params); } return success; }4. 性能优化与安全实践4.1 缓存策略设计采用多级缓存架构提升系统响应速度本地缓存(Caffeine)缓存热点数据如商品分类、基础配置Redis缓存商品详情product:{id}秒杀库存seckill:stock:{productId}用户会话session:{token}MySQL查询缓存针对配置类表启用缓存一致性解决方案写操作后删除相关缓存设置合理的过期时间重要数据采用Cache Aside PatternCacheEvict(value product, key #product.id) public void updateProduct(Product product) { productMapper.updateById(product); // 异步更新搜索引擎数据 searchService.asyncUpdateProduct(product); }4.2 接口安全防护防XSS攻击前端使用vue-dompurify对富文本内容消毒后端对字符串参数进行HTML转义CSRF防护关键操作使用POST/PUT/DELETE方法接口增加CSRF Token验证SQL注入防护全部使用MyBatis-Plus的Wrapper构建查询条件禁止拼接SQL语句接口限流RateLimiter(value 10, key login: #username) PostMapping(/login) public Result login(RequestBody LoginDTO dto) { // 登录逻辑 }4.3 前端性能优化代码分割// 动态导入组件 const ProductDetail defineAsyncComponent(() import(/views/product/Detail.vue) )图片懒加载img v-lazyproduct.image alt商品图片API请求优化合并同类请求添加请求取消功能响应数据缓存Web Worker处理复杂计算// 在主线程 const worker new Worker(/workers/calculation.js) worker.postMessage(data) worker.onmessage (e) { // 处理结果 }5. 部署与监控方案5.1 容器化部署使用Docker Compose编排服务version: 3.8 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} volumes: - mysql_data:/var/lib/mysql ports: - 3306:3306 redis: image: redis:6.2 ports: - 6379:6379 volumes: - redis_data:/data backend: build: ./backend ports: - 8080:8080 depends_on: - mysql - redis frontend: build: ./frontend ports: - 80:80 volumes: mysql_data: redis_data:5.2 监控与日志SpringBoot Actuator暴露健康检查端点Prometheus Grafana监控系统指标ELK收集和分析日志SkyWalking实现分布式追踪关键监控指标JVM内存和GC情况MySQL连接池状态Redis缓存命中率接口响应时间P995.3 CI/CD流程GitLab CI配置示例stages: - build - test - deploy backend-build: stage: build script: - mvn clean package -DskipTests artifacts: paths: - backend/target/*.jar frontend-build: stage: build script: - cd frontend - npm install - npm run build artifacts: paths: - frontend/dist deploy-prod: stage: deploy script: - scp backend/target/*.jar prod-server:/app - ssh prod-server cd /app ./restart.sh only: - master6. 开发中的典型问题与解决方案6.1 MyBatis-Plus分页查询异常问题现象当使用MyBatis-Plus的分页插件时发现total字段始终为0但数据能正常返回。排查过程检查是否配置了分页插件确认SQL是否有count查询检查是否有拦截器修改了SQL解决方案Configuration public class MyBatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); // 分页插件必须作为第一个插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }关键点分页插件必须作为MyBatis-Plus拦截器链中的第一个插件否则可能导致分页信息计算错误6.2 Vue3组件间通信问题在商品列表和购物车组件间需要实时同步数据时遇到了组件间通信的挑战。最终采用的解决方案简单场景使用provide/inject// 父组件 provide(cartCount, ref(0)) // 子组件 const count inject(cartCount)复杂状态管理使用Pinia// stores/cart.js export const useCartStore defineStore(cart, { state: () ({ items: [], total: 0 }), actions: { addItem(product) { // 添加逻辑 } } }) // 组件中使用 const cart useCartStore() cart.addItem(product)6.3 MySQL8.0连接问题在Windows Server 2008 R2上安装MySQL8.0后应用无法连接报错caching_sha2_password。原因分析MySQL8.0默认使用新的认证插件caching_sha2_password旧版驱动可能不支持。解决方案降级认证方式不推荐ALTER USER username% IDENTIFIED WITH mysql_native_password BY password;推荐方案升级连接驱动在JDBC URL中添加参数jdbc:mysql://localhost:3306/db?useSSLfalseallowPublicKeyRetrievaltrue6.4 跨域问题处理开发阶段前后端分离带来的跨域问题通过以下方式解决后端配置Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(GET, POST, PUT, DELETE) .allowedHeaders(*) .maxAge(3600); } }前端开发环境配置vite.config.jsexport default defineConfig({ server: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true, rewrite: path path.replace(/^\/api/, ) } } } })7. 项目扩展与优化方向7.1 微服务化改造当前单体架构可以逐步拆分为商品服务用户服务订单服务支付服务搜索服务技术选型考虑服务注册与发现Nacos服务通信OpenFeign配置中心Apollo网关Spring Cloud Gateway7.2 引入搜索引擎对于商品搜索功能可以集成Elasticsearch提升搜索体验建立商品索引实现中文分词设计相关性评分算法同步MySQL数据到ESRepository public interface ProductSearchRepository extends ElasticsearchRepositoryProductES, Long { PageProductES findByNameOrKeywords(String name, String keywords, Pageable pageable); Query({\bool\: {\must\: [{\match\: {\name\: \?0\}}]}}) PageProductES searchByName(String name, Pageable pageable); }7.3 移动端适配方案基于uniapp开发跨平台应用使用Vue3TS实现核心逻辑复用条件编译处理平台差异封装通用业务组件项目结构示例uni-app/ ├── src/ │ ├── common/ # 通用逻辑 │ ├── components/ # 跨平台组件 │ ├── pages/ # 页面 │ ├── platforms/ # 平台特定代码 │ ├── stores/ # 状态管理 │ └── utils/ # 工具函数 └── package.json7.4 大数据分析扩展用户行为分析埋点数据收集Flink实时处理用户画像构建销售预测历史数据训练时间序列分析机器学习模型可视化大屏ECharts展示核心指标实时数据更新多维度下钻分析public interface SalesAnalysisService { /** * 获取商品销售趋势 */ ListSalesTrendDTO getProductSalesTrend(Long productId, Date start, Date end); /** * 用户购买偏好分析 */ UserPreferenceDTO analyzeUserPreference(Long userId); /** * 实时销售数据看板 */ RealTimeDashboardDTO getRealTimeDashboard(); }在完成这个项目的过程中最大的收获是对全栈开发有了更系统的认识。特别是前后端协作方面建立清晰的接口文档和版本管理机制非常重要。我们使用Swagger生成API文档并通过Git Tag管理接口版本有效减少了沟通成本。另一个深刻体会是技术选型需要平衡先进性和稳定性比如Vue3虽然新特性诱人但部分周边生态还不够成熟需要谨慎评估。

相关新闻

OpenClaw单机生产环境部署:Docker Compose架构设计与实战指南

OpenClaw单机生产环境部署:Docker Compose架构设计与实战指南

1. 项目概述:为什么需要这份单机部署指南?最近在折腾OpenClaw的生产环境部署,发现网上资料要么是简单的开发环境跑通,要么就是复杂的集群方案,对于想先在一个服务器上把服务稳定跑起来、验证业务逻辑的团队来说&#x…

2026/8/4 5:32:14 阅读更多 →
Power BI数据清洗实战:从脏数据到标准报表的完整流程

Power BI数据清洗实战:从脏数据到标准报表的完整流程

1. 从“脏数据”到“干净报表”:为什么数据清洗是Power BI的命门如果你用过Power BI,大概率经历过这种场景:从销售系统导出的Excel表格,产品名称一会儿是“iPhone 15 Pro”,一会儿是“iphone15pro”,一会儿…

2026/8/4 5:32:14 阅读更多 →
AI写SEO文章全链路拆解,从关键词挖掘到排名飙升的7步闭环工作流

AI写SEO文章全链路拆解,从关键词挖掘到排名飙升的7步闭环工作流

更多请点击: https://codechina.net 第一章:AI写SEO文章全链路拆解,从关键词挖掘到排名飙升的7步闭环工作流 SEO内容生产已进入AI驱动的精细化运营阶段。传统人工写作耗时长、覆盖窄、数据反馈滞后,而一套可复用、可验证、可迭代…

2026/8/4 5:32:14 阅读更多 →

最新新闻

计算机毕业设计之基于Spring Boot框架的一加剧场管理系统的设计与实现

计算机毕业设计之基于Spring Boot框架的一加剧场管理系统的设计与实现

二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

2026/8/4 6:18:32 阅读更多 →
计算机毕业设计之基于Spring Boot框架的医疗废弃物收运管理系统的设计与实现

计算机毕业设计之基于Spring Boot框架的医疗废弃物收运管理系统的设计与实现

随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得医疗废弃物收运管理信息,因此,设计一种安全高效的医疗废弃物收运管理系统…

2026/8/4 6:18:32 阅读更多 →
2026年北京做城市生命线安全工程建设的厂家有哪些?

2026年北京做城市生命线安全工程建设的厂家有哪些?

北京的地下管网规模庞大、运行年限长,燃气、供热、供水、排水等生命线设施安全运行,直接关系首都功能核心区与超大城市的安全韧性。部分燃气管网与供热管网已运行数十年,老化风险与占压隐患并存,对城市安全运行监测的依赖尤为突出…

2026/8/4 6:18:32 阅读更多 →
Unity战斗系统受击反馈设计:从架构到性能优化的实战指南

Unity战斗系统受击反馈设计:从架构到性能优化的实战指南

1. 项目概述:为什么受击反馈是战斗系统的灵魂在任何一个动作或角色扮演游戏中,战斗系统的“手感”好坏,往往直接决定了玩家的留存意愿。而“手感”这个看似玄学的概念,其核心构成之一,就是受击反馈。想象一下&#xff…

2026/8/4 6:18:32 阅读更多 →
26DMA-11:本地AI编程Agent从代码生成到自动执行的完整指南

26DMA-11:本地AI编程Agent从代码生成到自动执行的完整指南

如果你是一位开发者,最近在关注 AI 编程助手,可能会发现一个现象:GitHub 上那些标榜“智能”、“全能”的 Agent 项目越来越多,但真正能让你在本地顺畅跑起来、解决实际编码问题的,却少之又少。要么是环境配置复杂到劝…

2026/8/4 6:18:32 阅读更多 →
计算机毕业设计之基于Spring Boot框架的流浪动物救助平台设计与实现

计算机毕业设计之基于Spring Boot框架的流浪动物救助平台设计与实现

在网络计算机快速发展的时代,信息管理系统已成为社会现代化发展中有着重要的作用。随着信息管理系统的不断添加,传统的人工管理易出错,且双方缺少信息关联和沟通。因此,建立一个依托互联网的流浪动物救助平台来建立一个交流和沟通的渠道势在必…

2026/8/4 6:17:31 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →