news 2026/8/7 12:47:25

统计概览-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/8/7 0:01:52

LobeChat WebSocket通信机制剖析:实时对话是如何实现的?

LobeChat WebSocket通信机制剖析&#xff1a;实时对话是如何实现的&#xff1f; 在构建现代AI聊天应用时&#xff0c;一个核心挑战是——如何让用户感觉“对面真的有人在打字”&#xff1f;当我们在LobeChat中输入问题后&#xff0c;答案不是一次性弹出&#xff0c;而是像打字机…

作者头像 李华
网站建设 2026/8/7 6:27:24

公司网站wordpress主题推荐

视频背景wordpress官网主题红色风格的wordpress主题&#xff0c;首页视频背景&#xff0c;鼠标滚动翻转展示内容&#xff0c;适合公司官网使用。https://www.jianzhanpress.com/?p7288服务类公司wordpress企业主题红色大气的wordpress企业主题&#xff0c;适合服务行业的公司搭…

作者头像 李华
网站建设 2026/8/7 11:48:30

金融从业者福音:LobeChat搭建合规AI分析助手

金融从业者福音&#xff1a;LobeChat搭建合规AI分析助手 在智能投研、客户画像和风险建模日益成为金融机构核心竞争力的今天&#xff0c;生成式AI正以前所未有的速度重塑行业格局。然而&#xff0c;一个现实困境始终挥之不去&#xff1a;如何在享受大语言模型强大能力的同时&am…

作者头像 李华
网站建设 2026/8/6 22:02:51

LobeChat科技新闻深度解读

LobeChat&#xff1a;重塑大语言模型交互体验的开源框架 在今天&#xff0c;几乎每个科技公司都在尝试接入大语言模型&#xff08;LLM&#xff09;&#xff0c;从客服机器人到内部知识助手&#xff0c;AI 正以前所未有的速度渗透进我们的工作流。但一个现实问题随之浮现&#x…

作者头像 李华
网站建设 2026/8/7 3:26:20

LinkedIn职业建议:LobeChat撰写个人简介

LinkedIn职业建议&#xff1a;LobeChat撰写个人简介 在求职竞争日益激烈的今天&#xff0c;一份出色的LinkedIn个人简介可能就是你与理想机会之间的最后一道桥梁。它不只是简历的电子版延伸&#xff0c;而是一个展示专业形象、传递职业价值的动态窗口。然而&#xff0c;很多人依…

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

9 个 MBA 论文降AI工具,AI 写作优化推荐

9 个 MBA 论文降AI工具&#xff0c;AI 写作优化推荐 论文写作的战场&#xff0c;你是否也在挣扎&#xff1f; MBA毕业论文不仅是对专业知识的总结&#xff0c;更是对个人研究能力和学术素养的全面检验。然而&#xff0c;对于许多MBA学生来说&#xff0c;这却是一场艰难的战役。…

作者头像 李华