当前位置: 首页 > news >正文

鸿蒙 ArkTS 实战:Medical Beauty Followup 从专业流程到完成闭环完整解析

鸿蒙 ArkTS 实战:Medical Beauty Followup 从专业流程到完成闭环完整解析

前言

Medical Beauty Followup 是一个面向医美术后随访场景的鸿蒙 ArkTS 单页应用。它没有把重点放在复杂后台能力上,而是围绕一线人员最常见的记录、统计、提醒和完成确认构建移动端工作台。

这类应用的价值在于把随访任务、备注信息和完成状态放到同一屏,减少纸质登记、聊天转述和临时表格之间的切换。本文会结合项目中的Index.ets,从数据模型、状态管理、统计逻辑、表单录入、列表渲染和扩展方向完整拆解。

场景判断:术后跟进容易分散在聊天记录和纸质登记里,客服很难快速判断当天还剩多少客户没有处理。

图示说明:本文关注的是 Medical Beauty Followup 这类轻量工具应用的页面状态、业务记录和交互闭环。

一、项目定位与业务目标

1.1 面向的真实业务

项目服务于 医美机构在术后第 3 天、第 7 天、第 14 天对客户恢复情况进行跟进。使用者主要包括医美咨询师、护理顾问、门店客服,他们对系统的要求通常不是功能堆叠,而是打开即用、信息集中、状态明确。

用一个轻量列表把随访对象、次数、护理备注和完成状态收束到同一屏,现场人员打开即可继续处理。 这也是该项目选择单页结构的核心原因。

1.2 页面能力拆分

当前页面可以拆成四个层次:

  1. 顶部标题,用来确认正在处理的业务类型。

  2. 统计区域,用FollowupsDone表示总量与完成度。

  3. 功能标签区域,用四个短标签压缩业务能力。

  4. 表单与列表区域,用于新增记录、展示备注、切换完成状态。

能力区域项目实现业务含义
统计卡片totalAmount / doneCount统计随访任务和完成数量
功能标签四个 Text 标签明确页面覆盖的业务点
录入表单三个 TextInput采集标题、数量和备注
记录列表ForEach 渲染展示任务并支持勾选

二、工程结构与入口文件

2.1 关键目录

项目采用标准鸿蒙 Stage 工程结构,业务页面位于entry/src/main/ets/pages/Index.ets。单页工具型应用的优势是路径清晰,阅读成本低,后续扩展时也容易把模型、组件和服务逐步拆出去。

entry/ src/ main/ ets/ entryability/ EntryAbility.ets pages/ Index.ets module.json5

2.2 模块配置关注点

模块配置负责声明入口 Ability 和资源范围。文章讨论的业务逻辑主要集中在页面层,但理解模块结构有助于定位运行入口。

{"module":{"name":"entry","type":"entry","srcEntry":"./ets/Application/AbilityStage.ts","abilities":[{"name":"EntryAbility","srcEntry":"./ets/entryability/EntryAbility.ets","exported":true}]},"articleTopic":"医美术后随访"}

这一层不直接参与业务计算,却决定应用如何被系统加载。对单页工具而言,保持配置简洁可以减少排查路径。

三、数据模型设计

3.1 记录对象的最小闭环

Medical Beauty Followup 的每条业务记录由titleamountnotedone四个字段构成。这个模型非常克制,但已经覆盖了列表工具的核心闭环:是什么、数量多少、有什么备注、是否完成。

interfaceWorkRecord{title:string;amount:number;note:string;done:boolean;}@Staterecords:WorkRecord[]=[{title:'Client A day 3',amount:1,note:'Recovery photo saved',done:false},{title:'Client B day 7',amount:1,note:'Care notes sent',done:false}];

3.2 默认数据的业务含义

项目内置了两条默认记录,方便首次打开页面时直接看到业务样例,也能验证统计区和列表区是否联动正常。

默认标题数量备注完成状态
Client A day 31Recovery photo savedfalse
Client B day 71Care notes sentfalse

这两条数据不是随意占位,而是围绕客户档案恢复照片随访提醒护理备注四个业务点设计。

四、状态管理与输入缓存

4.1 页面状态字段

页面使用@State保存记录列表、三个输入框内容、提醒开关和状态文案。所有字段都直接参与界面刷新,因此适合放在组件状态中。

@StatetitleText:string='';@StateamountText:string='';@StatenoteText:string='';@StatealertOn:boolean=true;@Statestatus:string='Professional workflow ready';

4.2 为什么输入框独立保存

标题、数量、备注分别保存在titleTextamountTextnoteText中,避免用户输入过程直接污染记录列表。只有点击按钮并通过校验后,才会生成新的记录。

关键点:表单草稿和正式记录分离,可以降低误写入概率,也让状态文案有明确的反馈位置。

五、统计逻辑:总量与完成度

5.1 总量统计

totalAmount()遍历 records,把每条记录的 amount 累加。对于本项目来说,它代表Followups的当前总数,也就是页面顶部最醒目的业务指标。

5.2 完成数量统计

doneCount()只统计done为 true 的记录,并以完成数/总记录数的方式展示,让用户快速判断剩余处理压力。

privatetotalAmount():number{lettotal=0;this.records.forEach((item:WorkRecord)=>{total+=item.amount;});returntotal;}privatedoneCount():number{letcount=0;this.records.forEach((item:WorkRecord)=>{if(item.done){count++;}});returncount;}
方法输入输出页面位置
totalAmountrecords.amountFollowups左侧统计卡片
doneCountrecords.doneDone 比例右侧统计卡片
toggleDone记录索引完成状态变更列表勾选框

六、表单新增记录

6.1 校验规则

新增记录时先把数量字符串转换为数字,再检查标题是否为空、数量是否有效。校验失败时,页面会把状态文案改为Enter title and valid number

6.2 新记录插入到顶部

通过数组展开语法把新记录放到旧列表前面,这样最新任务会出现在最上方,符合现场工作台的使用习惯。

privateaddRecord():void{constamount=Number(this.amountText);if(this.titleText.trim().length===0||!Number.isFinite(amount)){this.status='Enter title and valid number';return;}this.records=[{title:this.titleText,amount:Math.round(amount),note:this.noteText.length>0?this.noteText:'No note yet',done:false},...this.records];this.titleText='';this.amountText='';this.noteText='';this.status='Record added';}

在 医美术后随访 场景里,新记录通常比历史记录更需要优先处理,因此顶部插入比尾部追加更适合移动端快速操作。

七、完成状态切换

7.1 勾选逻辑

完成状态通过 checkbox 触发。代码先修改指定索引的done字段,再使用数组展开生成新引用,确保 UI 能感知 records 的变化。

privatetoggleDone(index:number):void{this.records[index].done=!this.records[index].done;this.records=[...this.records];}

7.2 状态驱动视觉反馈

记录完成后,列表项背景会从白色切换为浅绿色。这个视觉变化比单纯文字更直接,适合一线人员在忙碌环境中快速扫描。

状态背景色用户感知
未完成#FFFFFF仍需处理
已完成#DCFCE7可以归档或跳过
输入异常状态文案提示需要修正标题或数量

八、页面布局与信息层级

8.1 统计卡片

顶部两张统计卡片分别表达总量和完成度,颜色也做了区分:蓝色强调数量,绿色强调完成状态。

Row({space:10}){Column({space:4}){Text('Followups').fontSize(13).fontColor('#475569')Text(String(this.totalAmount())).fontSize(24).fontWeight(FontWeight.Bold).fontColor('#1D4ED8')}.layoutWeight(1).padding(14).backgroundColor('#DBEAFE').borderRadius(8)Column({space:4}){Text('Done').fontSize(13).fontColor('#475569')Text(this.doneCount()+'/'+this.records.length).fontSize(24).fontWeight(FontWeight.Bold).fontColor('#047857')}.layoutWeight(1).padding(14).backgroundColor('#D1FAE5').borderRadius(8)}

8.2 功能标签

页面中的四个标签分别是Client profileRecovery photoFollowup alertCare notes。它们不是按钮,而是能力提示,用来让使用者快速确认这个工具覆盖哪些工作环节。

功能标签对应到中文业务,可以理解为:

  • 客户档案:确认记录主体。

  • 恢复照片:补充关键过程信息。

  • 随访提醒:让任务不会沉没。

  • 护理备注:为后续交接保留依据。

九、输入区域与列表渲染

9.1 输入区域

表单区采用三个输入框加一个按钮的结构,字段少、路径短,适合移动端单手录入。数量输入框使用InputType.Number,降低录入非数字内容的概率。

Column({space:10}){TextInput({placeholder:'Title',text:this.titleText}).onChange((value:string)=>this.titleText=value)TextInput({placeholder:'Number',text:this.amountText}).type(InputType.Number).onChange((value:string)=>this.amountText=value)TextInput({placeholder:'Note',text:this.noteText}).onChange((value:string)=>this.noteText=value)Button('Add record').height(42).width('100%').onClick(()=>this.addRecord())}

9.2 列表区域

列表使用ForEach根据 records 渲染。每行左侧是完成勾选,中间是标题和备注,右侧是数量,信息密度较高但不会混乱。

ForEach(this.records,(item:WorkRecord,index:number)=>{Row(){Toggle({type:ToggleType.Checkbox,isOn:item.done}).onChange(()=>this.toggleDone(index))Column({space:6}){Text(item.title).fontSize(18).fontWeight(FontWeight.Bold).fontColor('#111827')Text(item.note).fontSize(14).fontColor('#475569')}.layoutWeight(1).margin({left:8})Text(String(item.amount)).fontSize(18).fontWeight(FontWeight.Bold).fontColor('#1D4ED8')}.padding(14).backgroundColor(item.done?'#DCFCE7':'#FFFFFF').borderRadius(8).width('100%')})

这个布局非常适合 医美术后随访:标题承载对象,备注承载现场上下文,数量承载统计口径,勾选承载工作闭环。

十、业务流程复盘

10.1 从录入到完成

结合项目代码,Medical Beauty Followup 的一次完整业务流可以分为四步:

  1. 录入客户阶段。

  2. 保存恢复照片备注。

  3. 开启随访提醒。

  4. 勾选完成状态。

10.2 异常路径

当标题为空或数量无效时,新增动作不会写入列表,而是更新状态文案。这个处理虽然简单,但避免了空记录进入正式列表。

constamount=Number(this.amountText);constinvalid=this.titleText.trim().length===0||!Number.isFinite(amount);if(invalid){this.status='Enter title and valid number';}

十一、体验细节与可维护性

11.1 低成本可维护

项目没有引入额外状态库,页面逻辑都在组件内部完成。对于这类轻量工具,简单结构反而有利于交付和维护。

11.2 可扩展边界

后续可以把恢复照片、护理方案和复诊预约关联到同一条随访记录。

扩展时可以遵循下面顺序:

  1. 先把记录模型从页面拆到独立文件。

  2. 再增加本地持久化,保证关闭应用后数据不丢失。

  3. 最后接入网络同步、权限和多端协同。

interfacePersistedRecord{id:string;title:string;amount:number;note:string;done:boolean;updatedAt:number;}

十二、调试与验证思路

12.1 手动验证路径

验证时重点看三件事:新增记录是否在顶部出现、统计总量是否变化、勾选后完成比例和背景色是否同步更新。

12.2 边界输入

边界输入包括空标题、非数字数量、负数、超大数量和空备注。当前代码已经拦截空标题和非数字,空备注会自动使用No note yet

# DevEco Studio 中可执行的常规验证动作# 1. 启动预览或真机运行# 2. 输入标题和数量# 3. 点击 Add record# 4. 勾选列表项观察 Done 统计
验证项预期结果业务意义
新增有效记录列表顶部出现新行现场可以快速追加任务
空标题提交显示错误状态避免无效记录
勾选完成Done 统计变化形成完成闭环
备注为空使用默认备注保持列表信息完整

十三、适合复用的页面模式

13.1 通用记录台

Medical Beauty Followup 的实现可以抽象成通用记录台:一个数组、三个输入字段、两个统计函数、一个新增函数、一个完成切换函数。许多门店、培训、医疗、仓储类小工具都可以复用这个模式。

13.2 适配更多行业

只要把默认数据、统计名称、功能标签和业务文案替换掉,就能变成另一个行业的小工具。真正需要谨慎处理的是字段语义和统计口径,不能只改标题。

复用公式: 业务对象 + 数量口径 + 备注上下文 + 完成状态 = 可闭环的移动工作台

总结

Medical Beauty Followup 用非常克制的 ArkTS 实现,完成了医美术后随访场景中的核心闭环:记录任务、统计数量、补充备注、切换完成状态。它的代码重点不在复杂算法,而在业务信息组织方式。

对于 医美咨询师、护理顾问、门店客服 来说,这种轻量工具的关键价值是减少切换、降低漏处理概率,并把当天工作沉淀成清晰列表。后续如果接入本地持久化、提醒能力和行业字段,这个项目就能从演示型页面继续成长为可落地的小型业务应用。

如果这篇文章对你有帮助,可以点赞、收藏并关注,后续会继续拆解更多鸿蒙 ArkTS 实战项目。


相关资源:

  • HarmonyOS 应用开发
  • ArkTS 语言基础
  • ArkUI 声明式开发
  • DevEco Studio
  • 应用包结构
  • Ability Kit
  • CSDN 写作平台
  • Markdown 基础语法
http://www.cnnetsun.cn/news/3473754.html

相关文章:

  • FastAPI多线程实战:提升IO密集型应用性能
  • express户外骑行社区与装备共享APP---附源码25899
  • 公司制度靠“查纸质本“来审计?我用飞算JavaAI做了个合规巡检看板
  • CDF实战指南:从统计概念到业务阈值决策的核心工具
  • UniApp开发Android TV应用全攻略
  • 基于Qwen的像素艺术AI辅助创作:从概念到成稿的全流程工具链
  • Jeff Dahn团队给NMC正极“辟谣“:四大流行误区
  • Chomsky(乔姆斯基)将文法分为四类
  • ACM模式与核心代码模式:编程竞赛与面试的两种解题方式
  • VB中SendMessage API的wMsg参数详解与应用
  • C++试除法判定质数:从暴力枚举到sqrt(n)优化的算法精讲
  • GPU架构演进与并行计算优化实战
  • OpenVLA:开源机器人通用大脑,以7B参数超越谷歌RT-2-X
  • 8259A PIC中断机制解析与内核开发实践
  • Java线程与CPU调度原理及性能优化实践
  • PageHelper分页插件ThreadLocal问题分析与解决方案
  • Unity游戏Mod加载器MelonLoader安装与使用全攻略
  • HarmonyOS ArkTS 实战:实现一个校园爱心捐赠物资登记应用
  • 具身智能十五大落地方向:制造业、医疗与物流的物理世界实战指南
  • Airflow ETL管道实战:可调试、可扩展、可交付的生产级实现
  • Flutter行为录制器:用户操作录制与回放技术解析
  • Java基础语法入门与核心概念详解
  • 局中人的谢幕:当AI完成最后1%的合围,普通人如何赚到最后的“肉身红利”?
  • PCB设计中槽孔的高压隔离与安全规范
  • DLSS Swapper终极指南:免费提升游戏性能45%的智能优化神器
  • Laravel Echo实现Web实时通信的完整指南
  • Python+Selenium实现大麦网自动化抢票技术解析
  • 大疆低空巡检私有化无人机系统 无人机巡检效率低?这套政企级管控平台,让低空作业一键高效协同
  • Java资源识别机制:解决系统异常处理与资源管理难题
  • C++性能优化实战:从算法到硬件,全方位提升代码效率