news 2026/7/16 5:28:30

AI编程助手深度集成若依框架:从环境配置到核心模块开发的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI编程助手深度集成若依框架:从环境配置到核心模块开发的实战指南

1. 项目概述:当AI助手遇上经典后台框架

最近在社区里看到不少朋友在讨论如何利用AI工具来辅助开发,特别是针对像若依(RuoYi)这样成熟的后台管理系统框架。作为一个常年和各类企业级项目打交道的老码农,我对此深有感触。若依框架凭借其清晰的架构、丰富的功能模块和活跃的社区,已经成为许多团队快速构建后台管理系统的首选。然而,即便是这样一个“开箱即用”的框架,在实际的二次开发、业务模块集成、甚至是日常的bug修复中,我们依然会面临大量的重复性编码、API文档查阅和配置调试工作。这个过程,恰恰是当前AI编程助手最能大显身手的地方。

这个项目,本质上是一次深度探索:我们能否将AI编程助手(如Cursor、GitHub Copilot、通义灵码等)无缝融入到若依框架的标准开发流程中?不是简单地让它生成几行代码,而是让它成为我们开发若依项目时的“副驾驶”,从环境搭建、代码生成、逻辑解释到问题排查,全程提供智能辅助。我们将聚焦于若依Vue3前后端分离版本,因为这是目前的主流选择,技术栈也更现代。通过这个项目,我希望分享的不仅仅是一些快捷键或提示词技巧,而是一套经过实战检验的、将AI工具深度整合到经典框架开发中的方法论,帮助大家真正提升开发效率,把精力更多地聚焦在核心业务逻辑和创新上。

2. 开发环境与AI工具链的深度配置

工欲善其事,必先利其器。在开始用AI“魔改”若依之前,一个稳定且高效的本地开发环境是基石。这里我分享一套我经过多次项目磨合后总结出的最佳实践配置,它能让AI工具发挥出最大效能。

2.1 核心开发环境搭建

首先,我们需要一个完整的若依前后端分离项目基础。我强烈建议从官方Gitee仓库拉取最新的master分支代码,以确保我们基于的是一个稳定且功能完整的基础。后端基于Spring Boot,前端基于Vue3 + Element Plus,这是当前企业级开发的主流组合。

后端环境的关键在于JDK和Maven的版本匹配。若依框架通常对JDK版本有明确要求,比如JDK 17或21。我个人的经验是,使用JDK 17 LTS版本最为稳妥,它在性能、稳定性和新特性支持上取得了很好的平衡。在安装JDK后,务必正确配置JAVA_HOMEPATH环境变量,并在IDE(如IntelliJ IDEA)中确认项目SDK已正确指向。Maven建议使用3.8.x或更高版本,并配置好国内的镜像源(如阿里云镜像),这能极大提升依赖下载速度。一个常见的坑是,Maven的settings.xml配置文件可能存在于用户目录和Maven安装目录两处,需要确认生效的是哪一个。

前端环境则依赖于Node.js和pnpm(或npm)。Node.js版本建议选择18.x或20.x的LTS版本。这里有一个非常重要的细节:不要使用过新或过旧的Node.js版本。我曾遇到过因Node版本过高导致某些前端依赖编译失败的问题。安装完成后,使用pnpm install(若依推荐pnpm)或npm install来安装项目依赖。如果遇到网络问题,可以配置淘宝的npm镜像。完成这些后,分别启动后端和前端服务,确保基础的若依系统能够正常运行,这是后续所有AI辅助操作的前提。

2.2 AI编程助手的选型与深度集成

目前主流的AI编程工具主要有几类:IDE插件(如GitHub Copilot、通义灵码)、独立编辑器(如Cursor)以及大模型聊天工具(如ChatGPT、Claude)。对于若依这种Java+Vue的全栈项目,我的策略是“组合拳”,而非单一依赖。

IntelliJ IDEA + GitHub Copilot / 通义灵码:这是后端开发的主力。Copilot的代码自动补全和注释生成功能已经非常强大,尤其在编写重复性的CRUD代码、实体类、Mapper接口时,效率提升显著。通义灵码在中文语境和阿里系技术栈(如Spring Cloud Alibaba)的理解上可能有独特优势。我的使用心得是:在IDE中,将AI助手主要定位为“超级代码提示”和“局部代码生成”。例如,在Service层写一个方法时,刚打出方法名,AI就能补全整个方法体的大致结构,包括参数校验、数据库操作等模板代码。

Cursor Editor:这是本次项目的“秘密武器”。Cursor基于VS Code内核,但深度集成了AI能力(默认连接GPT-4)。它最大的优势在于对整个项目上下文的理解和操作能力。你可以直接让它“阅读”若依的代码结构,然后提出诸如“参照用户管理模块,为我生成一个产品管理的完整Controller、Service、Mapper和Vue页面”这样的复杂指令。它不仅能生成代码,还能解释代码逻辑、查找bug,甚至根据你的要求重构代码。对于快速理解和复用若依框架内的既有模式,Cursor的效率无与伦比。

大模型聊天工具:用于解决更宏观或更棘手的问题。例如,当遇到一个复杂的业务逻辑不知如何融入若依的权限体系时,或者需要设计一个非标准的数据库查询时,可以用它来探讨思路。关键技巧是提供充足的上下文:不要只问“Spring Boot事务怎么用?”,而要问“在若依框架的SysUserServiceImpl中,我有一个方法需要同时更新用户表和日志表,如何确保事务一致性?请参考项目中已有的@Transactional用法。”

注意:使用任何AI工具时,生成的代码绝不能直接信任并投入使用。必须经过仔细的人工审查,理解每一行代码的意图,并放入项目的上下文中进行测试。AI可能会生成过时的API用法、忽略项目特定的规范、甚至产生安全漏洞。它是一位强大的助手,但决策者和最终责任者必须是你自己。

3. AI辅助下的若依核心功能模块剖析与实现

有了趁手的工具,我们就可以开始深入若依框架的内部,让AI帮助我们更快地理解、定制和扩展其核心功能。我们以一个典型的业务场景——“资产管理”模块的从零到一实现为例,来演示AI如何贯穿整个开发流程。

3.1 理解若依架构:让AI成为项目导游

面对一个像若依这样功能丰富的中大型项目,新手上手最大的障碍是“迷路”。此时,我们可以让Cursor这样的工具充当导游。在Cursor中打开项目根目录,然后在Chat界面输入:

“请为我分析这个RuoYi-Vue项目的整体目录结构,重点说明后端ruoyi-admin模块中controllerservicemapperdomain层的职责划分和关联关系,并举例说明一个完整的请求(例如查询用户列表)是如何在这些层中流转的。”

AI会扫描项目文件,并给出一个清晰的总结。它可能会指出:domain存放实体类(如SysUser),mapper(配合MyBatis)存放数据库操作接口,service层实现业务逻辑,controller层处理HTTP请求和响应。更重要的是,它能结合SysUserControllerSysUserServiceImpl等具体文件,画出数据流的路径。通过几次这样的问答,你能快速建立起对项目骨架的认知,这比单纯阅读文档要直观得多。

接下来,可以深入特定机制,比如权限控制。可以询问:“本项目是如何使用@PreAuthorize注解进行接口权限控制的?请找到相关的配置类和安全逻辑,并解释hasPermihasRole表达式的区别。” AI会定位到Spring Security的配置类、自定义的权限验证服务,并解释两者对应若依后台管理中的“菜单权限”和“角色权限”概念。这种交互式学习效率极高。

3.2 数据库设计与实体层生成

假设我们要新增一个“资产”(Asset)表,包含id、名称、编号、类型、状态、所属部门等字段。传统的做法是手动创建SQL文件,然后编写对应的实体类、Mapper接口和XML文件。现在,我们可以让AI完成大部分重复工作。

首先,用自然语言描述表结构给AI(可以在Cursor Chat或IDE的AI插件中): “我需要在我的Spring Boot项目中创建一个名为biz_asset的数据库表,用于资产管理。字段包括:

  • asset_id: 主键,bigint,自增
  • asset_name: 资产名称,varchar(255),非空
  • asset_number: 资产编号,varchar(50),唯一
  • asset_type: 资产类型(0:设备,1:软件,2:其他),char(1)
  • status: 状态(0:正常,1:维修,2:报废),char(1)
  • dept_id: 所属部门id,bigint,关联sys_dept
  • remark: 备注,varchar(500)
  • 包含若依框架标准的创建时间、创建人、更新时间、更新人字段(字段名参考sys_user表)。 请为我生成完整的MySQL建表语句。”

AI会生成规范的DDL语句。确认无误后,在数据库中执行。

接下来,生成Java实体类。我们可以利用IDE的AI补全,也可以给AI更具体的指令: “请参照本项目domain包下的SysUser类风格,为上述biz_asset表创建对应的实体类Asset。注意:

  1. 类放在com.ruoyi.project.system.domain包中(假设我们放在system模块下)。
  2. 使用Lombok注解简化代码。
  3. assetTypestatus字段创建枚举类。
  4. deptId字段添加@Excel注解,以便后续导出功能。
  5. 添加数据校验注解,如@NotBlank用于assetName。”

AI会生成一个非常接近项目标准的实体类。我们只需要检查一下包路径、注解导入是否正确即可。对于枚举类,AI也能很好地生成,例如AssetTypeEnumAssetStatusEnum

3.3 数据持久层与业务逻辑层代码生成

有了实体类,下一步是Mapper和XML。在MyBatis环境下,这是一项繁琐但规则性强的工作。我们可以对AI说: “请为上面的Asset实体类创建对应的Mapper接口和MyBatis XML映射文件。Mapper接口应包含基本的insert、update、deleteById、selectById方法,以及一个根据条件(资产名称、资产类型、状态)分页查询List<Asset>的方法。请保持与项目中SysUserMapper一致的风格。XML文件中的结果映射(ResultMap)要完整。”

AI生成的Mapper接口和XML骨架通常很准确。这里有一个关键检查点:XML文件中SQL语句的字段名是否正确映射了实体类的驼峰属性名(例如dept_id映射到deptId)。若依框架通常配置了驼峰命名自动映射,但仍需仔细核对。

对于Service层,指令可以更业务化: “创建AssetService接口和其实现类AssetServiceImpl。接口需要包含分页查询、根据ID查询、新增、修改、删除(支持批量)等方法。实现类请注入上面生成的AssetMapper特别注意:新增和修改方法需要:

  1. 在插入前检查资产编号是否重复。
  2. 记录操作日志(可参考项目中SysOperLog的用法)。
  3. 添加@Transactional事务注解。 请确保代码风格与SysUserServiceImpl类保持一致。”

AI会根据上下文,模仿若依项目中已有的模式,生成结构清晰的Service代码,甚至会自动注入AsyncManager用于异步记录操作日志。我们只需要关注核心的业务校验逻辑是否完整。

3.4 控制器与API暴露

Controller层是前后端交互的桥梁。若依的Controller通常继承自BaseController,并大量使用Swagger注解(@ApiOperation等)来生成API文档。我们可以这样指导AI: “创建AssetController,继承BaseController。需要实现以下Restful接口:

  • GET /asset/list: 分页查询资产列表,支持条件过滤。
  • GET /asset/{assetId}: 获取资产详情。
  • POST /asset: 新增资产。
  • PUT /asset: 修改资产。
  • DELETE /asset/{assetIds}: 删除资产(支持批量)。 请为每个方法添加详细的Swagger注解、日志记录注解(@Log),并使用若依的TableDataInfo作为分页响应格式。对于新增和修改接口,参数前需要加@Validated注解进行校验。”

AI生成的Controller会非常规范,几乎可以直接使用。我们需要手动检查一下URL前缀是否符合项目规划,以及权限注解(@PreAuthorize)是否根据需求添加,例如@PreAuthorize("@ss.hasPermi('system:asset:list')")

4. 前端Vue3组件与页面的智能化构建

前后端分离项目中,前端页面的开发量同样巨大。若依Vue3前端使用了TypeScript、Element Plus和Vite,结构清晰但组件繁多。AI在这里可以帮助我们快速生成视图层代码。

4.1 基于Element Plus的视图组件生成

首先,我们需要一个资产管理的路由和菜单。可以在src/router/modules/目录下参考其他模块创建路由文件。然后,让AI帮助我们生成核心的Asset.vue页面组件。

“请参考若依Vue3项目中system/user/index.vue的代码结构和风格,创建一个资产管理的主页面Asset.vue。要求:

  1. 使用<script setup lang=“ts”>语法。
  2. 模板部分包含:一个条件查询表单(字段:资产名称、资产类型下拉框、状态下拉框),一个包含新增、修改、删除、导出按钮的工具条,以及一个显示资产列表的表格。
  3. 表格列包括:资产编号、资产名称、类型(字典标签转换)、状态(字典标签转换)、所属部门、创建时间、操作列(修改和删除按钮)。
  4. 使用Hook风格,将查询、重置、新增、修改、删除、导出等逻辑分别封装成函数。
  5. 资产类型和状态的下拉选项,通过请求字典接口/system/dict/data/type/{dictType}获取,字典类型假设为biz_asset_typebiz_asset_status。 请生成完整的Vue3组合式API代码。”

AI能够生成一个功能齐全的页面骨架,包括模板、脚本和样式。它会自动使用若依封装的useDict来获取字典数据,使用getListhandleAddhandleUpdate等命名规范的函数。我们需要重点检查的是:API请求的路径是否正确(是否与后端Controller的@RequestMapping匹配)、表格列字段名是否与后端返回的数据对象属性一致、以及字典翻译的逻辑是否正确。

4.2 弹窗表单组件的快速生成

新增和修改通常需要一个弹窗表单。我们可以让AI基于我们之前定义的Asset实体类来生成表单。 “请生成一个用于新增和修改资产的弹窗组件AssetForm.vue。它是一个.vue文件,通过defineExpose暴露一个open方法。表单包含以下字段:

  • 资产名称(文本框,必填)
  • 资产编号(文本框,必填,新增时可输入,修改时只读)
  • 资产类型(下拉选择框,选项来自字典)
  • 状态(下拉选择框)
  • 所属部门(树形选择组件,参考用户管理页面的部门选择,数据来自/system/dept/list接口)
  • 备注(多行文本框) 表单验证规则请使用ElForm的rules属性进行定义。表单提交时,调用父组件传入的回调函数。”

AI会生成一个结构清晰的表单组件,包括完整的模板、表单数据对象、验证规则和提交逻辑。我们可能需要手动调整部门选择组件的值绑定和回显逻辑,因为这部分通常涉及父子组件间的数据传递,AI有时无法完全理解项目特定的封装方式。

4.3 前端与后端的联调辅助

当前后端代码都生成完毕后,进入联调阶段。AI在调试和问题排查上也能提供巨大帮助。

场景一:API 404错误。你可以将错误信息复制给AI:“我在前端调用/asset/list接口时返回404,我的后端AssetController@RequestMapping/asset,方法上的注解是@GetMapping(“/list”)。请帮我检查可能的原因。” AI可能会提示:检查后端应用是否成功启动、Controller类是否被@RestController注解、包扫描路径是否包含该类、或者是否存在拦截器过滤了该路径。

场景二:前端表格数据不显示。你可以把网络请求成功的响应数据和表格组件代码片段发给AI:“我的接口返回了{ code: 200, rows: […], total: 10 }的数据结构,但表格是空的。这是我的表格列配置代码,请帮我分析问题。” AI可能会发现,你定义的表格列属性propassetNumber,但后端返回的字段名可能是asset_number(如果未开启驼峰映射),或者v-for循环的变量名有误。

场景三:理解复杂的现有代码。当你需要修改一个若依原有的复杂功能(如工作流审批)时,可以让AI解释代码块。“请解释下面这个handleApproval方法里的逻辑,特别是this.$modal.msgConfirm和后续的Promise链。” AI能清晰地拆解出用户确认、发送请求、处理响应、刷新页面的整个流程,让你快速理解并在此基础上修改。

5. 进阶集成:AI辅助下的工作流与第三方组件融合

若依框架的强大之处在于其生态,它集成了工作流引擎、定时任务、代码生成器等众多模块。利用AI,我们可以更高效地完成这些进阶集成。

5.1 集成Flowable工作流引擎

若依整合了Flowable,用于实现业务流程管理。假设我们需要为“资产报废”创建一个审批流程。传统上需要绘制BPMN流程图、编写JavaDelegate实现类、配置流程变量等,步骤繁琐。

现在,我们可以这样利用AI:

  1. 流程设计理解:询问AI:“在若依集成Flowable的项目中,一个典型的请假流程是如何实现的?请找出涉及的前端页面、后端启动流程的API、以及任务审批的代码。” AI会定位到bpmn文件夹下的流程图文件、ProcessService和相关Controller。这让你快速了解项目中的流程集成模式。

  2. 生成BPMN XML骨架:虽然AI不能直接绘制图形,但可以生成BPMN 2.0的XML描述骨架。“请为我生成一个简单的线性BPMN 2.0 XML流程定义,流程Key为asset_scrap,包含一个开始事件、一个用户任务(分配给部门经理审批)、一个排他网关(根据审批意见决定流向)、一个通过的服务任务(调用报废服务)和一个结束事件。”

  3. 编写流程业务逻辑:“请参考项目中LeaveServiceImplapply方法,编写一个AssetServiceImpl中的scrapApply方法,用于启动资产报废流程。它需要设置流程变量assetIdapplyUserId,并返回流程实例ID。”

  4. 生成审批页面:“请参考task/index.vue,生成一个资产报废审批页面,能列出待我审批的报废任务,并可以点击审批,弹出表单让我输入审批意见(同意/驳回)。”

通过这种分步骤、结合上下文的指令,AI能帮助我们快速搭建起工作流集成的核心代码,我们只需专注于最核心的业务规则和审批逻辑。

5.2 集成Seata分布式事务

在微服务架构下,若依可能需要集成Seata来保证跨服务的数据一致性。这个过程涉及配置文件和注解的修改,容易出错。

我们可以向AI描述目标:“我的若依项目需要集成Seata 2.5.0,实现分布式事务。当前项目是单模块的ruoyi-admin。请告诉我需要修改哪些配置,以及如何在涉及多个数据源操作的服务方法上添加注解。”

AI可能会给出一个清单:

  1. pom.xml中添加Seata依赖。
  2. application.yml中配置Seata注册中心、配置中心信息(通常使用Nacos)和事务组名。
  3. file.confregistry.conf中配置事务日志存储模式和注册细节。
  4. 在需要分布式事务的业务方法上添加@GlobalTransactional注解。

更重要的是,AI可以解释原理:“@GlobalTransactional和普通的@Transactional有何不同?在集成时,为什么需要手动代理数据源?” 通过解答这些问题,AI帮助我们避免“只知其然不知其所以然”的配置,减少生产环境的风险。

5.3 定制化代码生成器

若依自带强大的代码生成器,但有时我们需要根据公司规范进行定制,比如修改生成的模板文件(.vm文件)。理解这些Velocity模板需要时间。

我们可以让AI充当翻译:“请解释ruoyi-generator模块中vm/java/domain.java.vm这个模板文件,它如何将数据库字段信息(如columnName,attrName)映射成Java实体类的代码?如果我想在所有实体类上都加上@ApiModel注解,应该修改这个模板的哪一部分?”

AI会解析模板中的VTL语法,指出${column.attrName}等变量的作用,并告诉你添加@ApiModel注解的位置。这比直接阅读Velocity文档要高效得多。

6. 实战避坑:AI辅助开发中的常见问题与解决方案

尽管AI能力强大,但在实际融入若依开发的过程中,我踩过不少坑,也总结了一些让合作更顺畅的经验。

6.1 代码风格与项目规范冲突

AI生成的代码风格可能不完全符合若依项目或你团队的规范。

  • 问题:AI可能使用var而不是let/const,或者Java注解的排序、空格与项目原有代码不一致。
  • 解决方案在最初的指令中明确风格要求。例如:“请严格按照若依项目的代码风格,使用4个空格缩进,import语句分组排序,@RequestMapping注解放在类上方。” 对于前端,可以要求“使用TypeScript严格模式,避免使用any类型”。此外,在项目根目录提供完善的.eslintrc.js.prettierrc配置文件,并在IDE中启用保存时自动格式化,可以自动修正大部分风格问题。

6.2 生成过时或错误的API用法

AI的知识库可能未更新到项目使用的最新库版本。

  • 问题:生成的代码可能使用了已弃用的Element UI组件(如el-buttontype=“text”),或者Spring Boot 2.x的过时配置。
  • 解决方案始终将官方文档作为最终依据。生成代码后,对于关键的API调用,快速查阅若依文档、Element Plus文档或Spring官方文档进行核对。一个良好的习惯是,在IDE中安装相关库的代码提示插件,这样当AI生成过时代码时,IDE会直接给出警告或错误提示。

6.3 上下文理解不足导致的逻辑错误

AI有时无法完全理解整个项目的业务上下文。

  • 问题:在生成“检查资产编号重复”的逻辑时,AI可能只生成一个简单的数据库查询。但在实际业务中,我们可能需要在逻辑删除(del_flag)的过滤条件下进行查重。
  • 解决方案提供更精确的上下文和范例。不要只说“检查重复”,而应该说:“请参考SysUserServiceImpl中检查用户名是否重复的checkUserNameUnique方法,实现一个类似的checkAssetNumberUnique方法,注意要排除逻辑删除的记录(del_flag = 0)。” 直接指向项目内的正确范例,是获得准确代码最有效的方式。

6.4 对复杂业务逻辑的把握有限

AI擅长模式化的代码,但对高度定制、复杂的业务规则可能力不从心。

  • 问题:生成一个涉及多状态转换、复杂计算或特定领域规则的业务服务方法。
  • 解决方案将复杂任务拆解,让AI分步实现。先让AI生成方法骨架和简单的CRUD部分。然后,用注释或TODO标记出复杂的核心算法部分,再针对这一小块逻辑向AI详细描述规则。或者,完全由自己来实现最核心的业务部分,让AI负责周边支撑代码(如参数校验、日志记录、异常处理等)。

6.5 依赖管理与配置错误

AI可能会错误地建议依赖版本或配置项。

  • 问题:建议的Seata版本与当前Spring Cloud Alibaba版本不兼容,或者在application.yml中写错了配置项的层级。
  • 解决方案依赖和配置以官方推荐为准。对于若依项目,优先查看项目pom.xml中已有的依赖管理(dependencyManagement)和官方文档的推荐版本。对于配置,可以命令AI:“请根据若依官方文档中关于Redis集群的配置示例,为我生成相应的application-redis.yml配置片段。” 这样能提高准确性。

我个人最深的一个体会是,AI编程助手不是替代者,而是一个反应极其迅速、知识面极广的“实习生”。你需要像带实习生一样指导它:任务要明确,范例要清晰,成果要审查。当你学会如何有效地向它提问、如何利用它快速探索项目结构、如何让它处理那些繁琐而规范的“体力活”时,你会发现,开发若依这样的项目不再是一件令人畏惧的工程,而是一次充满创造力和效率的愉快旅程。真正的价值,在于你将节省下来的时间,用于思考更深刻的架构设计和业务创新。

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

C++11 lambda表达式与std::function包装器:现代C++函数式编程核心

1. 项目概述&#xff1a;为什么C11的lambda和包装器是“现代C”的基石如果你是从C98/03时代一路走过来的老码农&#xff0c;看到“lambda表达式”和“包装器”这几个字&#xff0c;大概率会和我一样&#xff0c;有种“终于等到你”的感觉。在C11之前&#xff0c;我们想实现一个…

作者头像 李华
网站建设 2026/7/16 5:26:05

AI产品命名策略与竞品跟踪:从Sam Altman误判Claude事件谈起

1. 先搞清楚这件事到底是怎么回事Sam Altman 在社交媒体上看到有人提到 Claude AI&#xff0c;第一反应是“这名字听起来像在讽刺我”&#xff0c;还专门发帖问“这是认真的还是开玩笑的”。后来才知道 Claude 是 Anthropic 公司开发的真实 AI 产品&#xff0c;和 OpenAI 的 Ch…

作者头像 李华
网站建设 2026/7/16 5:23:19

C++编程入门:从Hello World到构建命令行计算器

1. 项目概述&#xff1a;从“Hello World”到构建第一个程序如果你已经跟着上一篇文章&#xff0c;成功在电脑上装好了C的编译器&#xff0c;并且用命令行或者一个简单的编辑器敲出了那个经典的“Hello World”&#xff0c;那么恭喜你&#xff0c;你已经跨过了最艰难的第一步—…

作者头像 李华
网站建设 2026/7/16 5:22:53

HarmonyOS7 健身打卡应用实战:打卡页要让进度马上可见

文章目录打卡页的反馈链路训练数据如何驱动统计关键代码&#xff1a;环形进度抽成 Builder关键代码&#xff1a;打卡时同步更新总数据完整代码可以继续加的一个功能健身打卡页最重要的是反馈快。用户点一下完成训练&#xff0c;卡路里、分钟数、完成率都应该马上变&#xff1b;…

作者头像 李华