鸿蒙 ArkTS 实战:Work Order Dispatch 从业务记录到移动工作台完整解析
鸿蒙 ArkTS 实战:Work Order Dispatch 从业务记录到移动工作台完整解析
前言
Work Order Dispatch 是一个面向维修工单派发的鸿蒙 ArkTS 单页应用。它的实现并不追求复杂后台,而是把一线业务里最常见的记录、数量统计、备注和完成状态放到一个移动工作台中。
项目适用于 物业或售后团队创建维修工单、分配技术员、更新进度并记录客户评价。对于客服调度、维修主管、物业前台来说,核心目标是减少临时纸条、聊天转发和表格补录,把当天任务沉淀成可追踪的列表。
业务痛点:维修工单从创建到回访需要多人协作,状态不清会导致客户重复催单。
图示说明:本文围绕 Work Order Dispatch 的页面状态、业务记录、统计卡片和交互闭环展开。
一、业务定位与页面目标
1.1 解决什么问题
派单看板把工单、人员、进度和完成状态集中呈现,让调度员能快速识别未闭环任务。 这类小工具的关键不是功能数量,而是把一个高频动作做短、做稳、做清楚。
1.2 页面能力概览
当前页面主要由四部分组成:
顶部标题,确认工具所属业务场景。
统计卡片,展示
Orders与 Done 完成度。业务标签,概括页面覆盖的关键环节。
表单和列表,完成新增、展示、勾选和反馈。
| 页面区域 | 代码元素 | 业务作用 |
|---|---|---|
| 标题区 | Text | 标识维修工单派发场景 |
| 统计区 | totalAmount / doneCount | 统计工单数量与完成度 |
| 标签区 | 四个能力标签 | 提示业务范围 |
| 列表区 | ForEach | 承载记录闭环 |
二、工程结构与入口文件
2.1 目录结构
项目采用标准 Stage 工程,页面逻辑集中在entry/src/main/ets/pages/Index.ets。这对于工具型应用很合适,定位问题时路径短,阅读代码时上下文集中。
entry/ src/ main/ ets/ entryability/ EntryAbility.ets pages/ Index.ets module.json52.2 入口配置理解
页面虽然是业务主体,但应用加载依赖模块配置和 Ability 入口。理解这个关系,可以避免只看页面代码却找不到运行入口的问题。
{"module":{"name":"entry","type":"entry","abilities":[{"name":"EntryAbility","srcEntry":"./ets/entryability/EntryAbility.ets","exported":true}]},"topic":"维修工单派发"}三、数据模型:四个字段完成闭环
3.1 记录结构
项目使用ToolRecord描述一条业务记录。title表示任务主体,amount表示数量口径,note保存上下文,done表示是否完成。
interfaceToolRecord{title:string;amount:number;note:string;done:boolean;}@Staterecords:ToolRecord[]=[{title:'AC repair 502',amount:1,note:'Technician Wang assigned',done:false},{title:'Pipe leak 301',amount:1,note:'Progress 70 percent',done:false}];3.2 默认记录分析
默认记录用于表达项目的真实业务方向,同时也能在首次运行时验证统计和列表渲染是否正常。
| 默认标题 | 数量 | 备注 | 完成状态 |
|---|---|---|---|
| AC repair 502 | 1 | Technician Wang assigned | false |
| Pipe leak 301 | 1 | Progress 70 percent | false |
这些默认数据分别触达工单创建、技术员分配、进度更新和客户评价,不是空泛占位。
四、状态管理设计
4.1 页面状态字段
页面把 records、输入框草稿、提醒开关和状态文案都放在@State中。它们变化后会驱动 UI 重新渲染,适合轻量页面直接管理。
@StatetitleText:string='';@StateamountText:string='';@StatenoteText:string='';@StatenotifyOn:boolean=true;@Statestatus:string='Tool workflow ready';4.2 草稿和正式记录分离
三个输入框先写入草稿状态,只有点击新增并通过校验后才进入 records。这样可以避免用户输入一半时影响正式列表。
关键点:移动端工具越简单,越要保证数据进入列表前经过明确动作和基础校验。
五、统计逻辑:总量与完成度
5.1 总量统计
totalAmount()遍历 records,把 amount 累加为Orders。它是顶部左侧卡片的数据来源。
5.2 完成统计
doneCount()统计 done 为 true 的记录数量,并与总记录数拼接显示。这个指标能快速反映任务推进情况。
privatetotalAmount():number{lettotal=0;this.records.forEach((item:ToolRecord)=>{total+=item.amount;});returntotal;}privatedoneCount():number{letcount=0;this.records.forEach((item:ToolRecord)=>{if(item.done){count++;}});returncount;}| 函数 | 统计来源 | 页面表现 | 业务意义 |
|---|---|---|---|
| totalAmount | amount | Orders | 掌握工单数量 |
| doneCount | done | Done | 掌握完成进度 |
| toggleDone | index | 背景变化 | 形成闭环 |
六、新增记录流程
6.1 输入校验
新增时先把数量转换为数字,再判断标题是否为空、数量是否有效。无效输入不会进入正式列表。
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 触发完成状态切换。代码修改对应记录后,重新展开数组生成新引用,从而稳定触发刷新。
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('Orders').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 业务标签解读
四个标签分别是Order create、Technician assign、Progress update、Customer review。它们帮助用户快速理解工具覆盖的业务范围。
工单创建:确认记录对象。
技术员分配:明确执行计划。
进度更新:处理异常或提醒。
客户评价:保留交接依据。
九、表单与列表渲染
9.1 表单区域
表单由标题、数字、备注三个输入框组成,配合一个新增按钮完成最短路径录入。
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(this.records,(item:ToolRecord,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 标准路径
Work Order Dispatch 的业务闭环可以拆成四步:
创建维修工单。
填写数量或优先级。
备注人员和进度。
完工后勾选完成。
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 模型拆分
当业务继续增长时,可以把记录模型拆到独立文件,并增加 id、时间戳和来源字段。
interfacePersistedRecord{id:string;title:string;amount:number;note:string;done:boolean;updatedAt:number;}11.2 行业扩展
后续可以接入拍照报修、定位、工时统计和满意度回访。
扩展顺序可以保持为:
增加本地持久化,保证数据不因关闭应用丢失。
增加行业字段,让记录更贴近真实业务。
增加导出、提醒或同步能力,支撑团队协作。
十二、调试与验证
12.1 核心验证点
验证时重点观察新增记录、统计变化、完成勾选和异常输入四类路径。
12.2 运行检查
可以在 DevEco Studio 中启动预览或真机运行,按业务流程逐项验证交互是否符合预期。
# 常规验证动作# 1. 输入标题、数量和备注# 2. 点击 Add record# 3. 检查新记录是否位于顶部# 4. 勾选记录并观察 Done 统计| 验证项 | 预期结果 | 业务意义 |
|---|---|---|
| 有效新增 | 列表顶部新增记录 | 快速追加现场任务 |
| 空标题 | 显示错误状态 | 拦截无效数据 |
| 勾选完成 | 统计和背景同步变化 | 完成闭环明确 |
| 空备注 | 自动写入默认备注 | 记录保持完整 |
十三、可复用的工具应用模式
13.1 通用公式
这个项目可以抽象为一个通用模式:业务对象、数量口径、备注上下文、完成状态。很多线下管理工具都能从这个公式起步。
业务对象 + 数量口径 + 备注上下文 + 完成状态 = 可落地的移动工作台13.2 复用时要注意什么
复用时不能只替换标题,还要同步调整默认数据、统计文案、功能标签和业务备注,否则页面会失去行业可信度。
总结
Work Order Dispatch 通过简洁的 ArkTS 代码,把维修工单派发中的高频记录动作整理成移动端工作台。它的核心价值在于让记录可新增、数量可统计、备注可追溯、状态可闭环。
对 客服调度、维修主管、物业前台 来说,这种应用能够降低现场沟通成本,并把当天任务形成清晰列表。随着持久化、提醒和行业字段补齐,它可以继续扩展成更完整的业务工具。
如果这篇文章对你有帮助,可以点赞、收藏并关注,后续会继续拆解更多鸿蒙 ArkTS 实战项目。
相关资源:
- HarmonyOS 应用开发
- ArkTS 语言基础
- ArkUI 声明式开发
- DevEco Studio
- Stage 模型应用结构
- Ability Kit
