news 2026/6/8 21:53:28

统计概览-Cordovaopenharmony多维度数据展示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
统计概览-Cordovaopenharmony多维度数据展示

一、功能概述

喝水记录应用的核心价值之一是“让数据说话”。用户不仅希望看到当天喝了多少水,还希望了解最近一周、一个月的整体趋势,以及不同类型、不同容器的喝水分布。本篇文章以“统计概览”页面为例,介绍如何在Cordova Web 层汇总多维度指标,并通过OpenHarmony ArkTS提供原生侧的简洁统计视图,为后续接入图表库或桌面卡片打下基础。文章继续采用一段代码一段说明的方式,避免出现大段难以理解的代码块。

二、Web 端统计概览页面结构

<divid="stats-page"class="page page-stats"><h1>统计概览</h1><divclass="stats-cards"><divclass="card"id="card-week-total"><divclass="card-title">近 7 天总饮水量</div><divclass="card-value"id="week-total-ml">0 ml</div></div><divclass="card"id="card-month-total"><divclass="card-title">本月总饮水量</div><divclass="card-value"id="month-total-ml">0 ml</div></div></div></div>

这段 HTML 定义了统计概览页面的基础结构。顶部是一个标题“统计概览”,下方使用两张卡片展示近 7 天与本月的总饮水量。每张卡片中,card-title用于说明指标含义,card-value显示具体数值。通过为数值部分添加唯一id(如week-total-mlmonth-total-ml),后续可以在 JavaScript 中轻松更新它们的文本内容。尽管示例只展示了两个指标,但页面结构很容易扩展以展示更多维度的信息。

.page-stats{padding:16px 24px;}.stats-cards{display:flex;gap:12px;margin-top:16px;}.stats-cards .card{flex:1;padding:16px;border-radius:8px;background-color:#1f2933;color:#fff;}

CSS 部分为统计卡片提供了基础布局与视觉样式。.stats-cards使用横向flex布局与间距,让多张卡片整齐排列;.card通过内边距、圆角和深色背景塑造出统一的卡片视觉风格,与仪表板、类型管理等页面保持一致。这样的布局既适合在 PC 端展示,也方便在后续做响应式调整。

三、从 IndexedDB 汇总统计数据

asyncfunctionloadStatsOverview(){consttoday=newDate();constweekStart=newDate(today);weekStart.setDate(today.getDate()-6);constmonthStart=newDate(today.getFullYear(),today.getMonth(),1);constweekTotal=awaitdb.getTotalAmountBetween(weekStart,today);constmonthTotal=awaitdb.getTotalAmountBetween(monthStart,today);document.getElementById('week-total-ml')!.textContent=`${weekTotal}ml`;document.getElementById('month-total-ml')!.textContent=`${monthTotal}ml`;syncStatsToNative({weekTotal,monthTotal});}

loadStatsOverview函数负责从 IndexedDB 中汇总统计数据并更新页面显示。首先计算近 7 天的起始日期weekStart(包含今天在内的连续 7 天),以及本月起始日期monthStart。然后调用封装好的db.getTotalAmountBetween方法,在给定时间范围之间计算总饮水量。拿到结果后,直接更新两个卡片的数值文本,并调用syncStatsToNative将这两个统计指标发送给原生层。这样一来,Web 和原生可以共享同一份统计结果,避免重复计算。

document.addEventListener('DOMContentLoaded',()=>{loadStatsOverview();});

DOMContentLoaded事件中调用loadStatsOverview,确保页面结构准备就绪后再进行统计计算和渲染。统计操作通常涉及数据库扫描,放在页面初始化时执行既能保证数据的及时性,又不会阻塞整体应用启动流程。

四、通过 Cordova 同步统计概览到原生

functionsyncStatsToNative(stats){if(!window.cordova){console.warn('[Stats] cordova not ready, skip native sync');return;}cordova.exec(()=>{console.info('[Stats] sync overview success');},(err)=>{console.error('[Stats] sync overview failed',err);},'WaterTrackerStats','setOverview',[stats]);}

syncStatsToNative函数展示了如何将统计概览数据通过 Cordova 桥接发送给 ArkTS 插件。函数内部对window.cordova进行检查,以避免在 Cordova 尚未就绪时调用;随后使用cordova.exec调用插件WaterTrackerStatssetOverview动作,并将包含weekTotalmonthTotal字段的对象作为参数传入。原生侧收到该对象后,就可以直接使用这些统计数据,而不必再重新遍历数据库。

五、OpenHarmony ArkTS 插件与统计存储

// entry/src/main/ets/plugins/WaterTrackerStatsPlugin.etsimportcommonfrom'@ohos.app.ability.common';exportinterfaceStatsOverview{weekTotal:number;monthTotal:number;}exportclassStatsStore{privatestatic_overview:StatsOverview={weekTotal:0,monthTotal:0};staticsetOverview(value:StatsOverview){this._overview=value;}staticgetoverview(){returnthis._overview;}}exportdefaultclassWaterTrackerStatsPlugin{context:common.UIAbilityContext;constructor(ctx:common.UIAbilityContext){this.context=ctx;}setOverview(args:Array<Object>,callbackId:number){constoverview=args[0]asStatsOverview;StatsStore.setOverview(overview);console.info(`[StatsPlugin] weekTotal=${overview.weekTotal}, monthTotal=${overview.monthTotal}`);}}

这段 ArkTS 代码定义了统计插件WaterTrackerStatsPlugin与配套存储StatsStoreStatsOverview接口描述了统计概览对象包含的字段:近 7 天总饮水量和本月总饮水量。StatsStore使用一个静态字段_overview缓存最新的统计结果,并提供setOverviewoverview两个方法用于更新和读取。插件类在setOverview方法中从args[0]解析出统计对象,并交给StatsStore.setOverview存储,同时打印日志。在 ArkUI 组件中,可以直接通过StatsStore.overview获取这两个指标,从而构建原生侧的统计视图。

六、ArkUI 中展示多维度统计信息

// entry/src/main/ets/pages/StatsOverviewPage.etsimport{StatsStore}from'../plugins/WaterTrackerStatsPlugin';@Component struct StatsOverviewView{build(){constoverview=StatsStore.overview;Column(){Text('喝水统计概览').fontSize(18).margin({bottom:8});Text(`近 7 天总饮水量:${overview.weekTotal}ml`).fontSize(16);Text(`本月总饮水量:${overview.monthTotal}ml`).fontSize(16).margin({top:4});}.padding(16)}}

StatsOverviewView是一个简单的 ArkUI 组件示例,用于在原生界面中展示近 7 天和本月总饮水量。组件在build方法中从StatsStore.overview中读取统计结果,并使用多行Text将其以自然语言的形式呈现出来。尽管这里只展示了两个基础指标,但已经足以为用户提供一个直观的总体印象。后续可以在此基础上接入图表库,在 Web 或原生侧进一步可视化这些数据,例如绘制柱状图、折线图等。

七、小结

本篇文章展示了“统计概览”功能在 Cordova&openharmony 混合应用中的一条完整实现路径。Web 层通过loadStatsOverview函数从 IndexedDB 汇总近 7 天和本月的饮水总量,并更新页面上的统计卡片;随后利用syncStatsToNative将统计结果同步给 OpenHarmony ArkTS 插件。原生侧通过StatsStoreWaterTrackerStatsPlugin缓存这些指标,并在 ArkUI 组件StatsOverviewView中提供原生统计视图。

通过一段代码一段说明的方式,本文强调了“先在 Web 层充分利用现有数据模型进行汇总,再把结果分享给原生层复用”的思路,避免在多个层级重复做同样的统计工作。你可以在此基础上继续扩展更多维度的统计,例如按类型、按容器的总量排行,或者按时间段的平均喝水量等,将“统计概览”打造为整个喝水记录应用的数据中枢。

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

LobeChat辅助编程实测:写代码真的更快了吗?

LobeChat辅助编程实测&#xff1a;写代码真的更快了吗&#xff1f; 在今天&#xff0c;一个开发者可能上午还在用Python处理数据&#xff0c;下午就得写前端组件&#xff0c;晚上又要给运维同事解释API接口的设计逻辑。面对这种“全栈即日常”的现实&#xff0c;我们越来越依赖…

作者头像 李华
网站建设 2026/6/8 5:40:19

2025.12.16新闻

百度首页 哈哈哈分享万岁 人民币,大涨!对美元将“破7”? 每日经济新闻 2025-12-16 00:18每日经济新闻官方账号 已关注 12月15日,人民币对美元汇率显著走强,更多反映国际投资者预期的离岸人民币于盘中升破7.05,在岸、离岸人民币汇率双双达到去年10月中旬以来的高点。…

作者头像 李华
网站建设 2026/6/7 12:55:48

LobeChat会议通知模板自动生成

LobeChat&#xff1a;让AI真正“动手”的智能办公入口 在一家快速扩张的科技公司里&#xff0c;行政助理小李每天要处理十几场会议安排。过去&#xff0c;她需要反复确认时间、手动撰写通知、逐个发送邮件——繁琐且容易出错。如今&#xff0c;她的工作方式变了&#xff1a;“只…

作者头像 李华
网站建设 2026/6/6 11:45:57

LobeChat能否连接Airtable?轻量级后台管理系统集成

LobeChat 能否连接 Airtable&#xff1f;轻量级后台管理系统集成 在 AI 应用快速落地的今天&#xff0c;一个常见但棘手的问题浮出水面&#xff1a;我们有了强大的大语言模型&#xff0c;也部署了美观流畅的聊天界面&#xff0c;可一旦涉及“记录留存”、“任务追踪”或“团队协…

作者头像 李华
网站建设 2026/6/8 9:36:53

LobeChat儿童节亲子活动策划

LobeChat儿童节亲子活动策划 在儿童节这样一个充满欢笑与期待的日子里&#xff0c;越来越多的家庭开始尝试将科技融入亲子互动。然而&#xff0c;市面上大多数智能语音助手虽然能回答问题&#xff0c;却往往缺乏个性、不够安全&#xff0c;甚至可能输出不适合儿童的内容。如何为…

作者头像 李华
网站建设 2026/6/5 21:30:02

LobeChat能否接入Pinterest API?视觉灵感内容推荐

LobeChat能否接入Pinterest API&#xff1f;视觉灵感内容推荐 在设计师和内容创作者越来越依赖视觉素材激发创意的今天&#xff0c;如何用一句话就找到符合心境的设计灵感&#xff0c;成了一个值得深思的技术命题。传统的图像搜索往往需要精准关键词、复杂的筛选条件&#xff…

作者头像 李华