news 2026/4/23 9:26:16

Cordova与OpenHarmony浇水记录系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cordova与OpenHarmony浇水记录系统

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

浇水记录系统概述

浇水记录系统是植物养护应用的核心功能之一。它记录用户对植物的浇水操作,帮助用户了解植物的浇水历史和规律。在Cordova框架与OpenHarmony系统的结合下,我们需要实现一个完整的浇水记录系统,包括记录的创建、查询、统计和提醒功能。

浇水记录数据模型

classWateringRecord{constructor(plantId,amount,notes){this.id='water_'+Date.now();this.plantId=plantId;this.amount=amount;// 毫升this.date=newDate();this.notes=notes;this.soilMoisture=null;// 土壤湿度百分比}}classWateringManager{constructor(){this.records=[];this.loadFromStorage();}addWateringRecord(plantId,amount,notes){constrecord=newWateringRecord(plantId,amount,notes);this.records.push(record);this.saveToStorage();returnrecord;}getWateringRecordsForPlant(plantId){returnthis.records.filter(r=>r.plantId===plantId).sort((a,b)=>newDate(b.date)-newDate(a.date));}getLastWateringDate(plantId){constrecords=this.getWateringRecordsForPlant(plantId);returnrecords.length>0?records[0].date:null;}}

这个浇水记录数据模型定义了WateringRecord类和WateringManager类。WateringRecord类包含浇水的详细信息,包括植物ID、浇水量、日期和备注。WateringManager类管理所有浇水记录,提供了添加记录和查询功能。

与OpenHarmony传感器的集成

functionrecordWateringWithSensorData(plantId,amount,notes){// 获取土壤湿度传感器数据cordova.exec(function(sensorData){console.log("传感器数据获取成功");constrecord=newWateringRecord(plantId,amount,notes);record.soilMoisture=sensorData.moisture;wateringManager.records.push(record);wateringManager.saveToStorage();// 保存到数据库saveWateringRecordToDatabase(record);showToast('浇水记录已保存');},function(error){console.error("传感器数据获取失败:",error);// 即使传感器失败,仍然保存记录constrecord=wateringManager.addWateringRecord(plantId,amount,notes);saveWateringRecordToDatabase(record);},"SensorPlugin","getSoilMoisture",[plantId]);}

这段代码展示了如何与OpenHarmony的传感器服务集成。通过SensorPlugin,我们可以获取土壤湿度等传感器数据,并将其与浇水记录关联。这提供了更加准确的浇水数据。

浇水记录列表展示

functionrenderWateringRecords(plantId){constplant=plants.find(p=>p.id===plantId);if(!plant)return;constrecords=wateringManager.getWateringRecordsForPlant(plantId);constcontainer=document.getElementById('page-container');container.innerHTML=`<div class="watering-records-container"> <h2>${plant.name}的浇水记录</h2> <button class="add-record-btn" onclick="showAddWateringRecordDialog('${plantId}')"> ➕ 添加浇水记录 </button> </div>`;if(records.length===0){container.innerHTML+='<p class="empty-message">还没有浇水记录</p>';return;}constrecordsList=document.createElement('div');recordsList.className='records-list';records.forEach(record=>{constrecordItem=document.createElement('div');recordItem.className='record-item';recordItem.innerHTML=`<div class="record-info"> <p class="record-date">${record.date.toLocaleString('zh-CN')}</p> <p class="record-amount">💧 浇水量:${record.amount}ml</p>${record.soilMoisture?`<p class="soil-moisture">土壤湿度:${record.soilMoisture}%</p>`:''}${record.notes?`<p class="record-notes">备注:${record.notes}</p>`:''}</div> <div class="record-actions"> <button onclick="editWateringRecord('${record.id}')">编辑</button> <button onclick="deleteWateringRecord('${record.id}')">删除</button> </div>`;recordsList.appendChild(recordItem);});container.appendChild(recordsList);}

这个函数负责渲染浇水记录列表。它显示了特定植物的所有浇水记录,包括日期、浇水量、土壤湿度和备注。用户可以通过"编辑"和"删除"按钮管理记录。这种设计提供了清晰的记录展示。

添加浇水记录对话框

functionshowAddWateringRecordDialog(plantId){constdialog=document.createElement('div');dialog.className='modal-dialog';dialog.innerHTML=`<div class="modal-content"> <h3>添加浇水记录</h3> <form id="add-watering-form"> <div class="form-group"> <label>浇水量 (毫升)</label> <input type="number" id="watering-amount" min="0" required> </div> <div class="form-group"> <label>浇水日期</label> <input type="datetime-local" id="watering-date" required> </div> <div class="form-group"> <label>备注</label> <textarea id="watering-notes"></textarea> </div> <div class="form-actions"> <button type="submit">保存</button> <button type="button" onclick="closeDialog()">取消</button> </div> </form> </div>`;document.getElementById('modal-container').appendChild(dialog);// 设置默认日期为当前时间constnow=newDate();document.getElementById('watering-date').value=now.toISOString().slice(0,16);document.getElementById('add-watering-form').addEventListener('submit',function(e){e.preventDefault();constamount=parseFloat(document.getElementById('watering-amount').value);constdate=newDate(document.getElementById('watering-date').value);constnotes=document.getElementById('watering-notes').value;constrecord=newWateringRecord(plantId,amount,notes);record.date=date;wateringManager.records.push(record);wateringManager.saveToStorage();saveWateringRecordToDatabase(record);closeDialog();renderWateringRecords(plantId);showToast('浇水记录已添加');});}

这个函数创建并显示添加浇水记录的对话框。用户可以输入浇水量、日期和备注。提交后,新记录会被添加到wateringManager中,并保存到数据库。这种设计提供了灵活的记录输入方式。

浇水统计功能

classWateringStatistics{constructor(wateringManager){this.wateringManager=wateringManager;}getTotalWateringCount(plantId){returnthis.wateringManager.getWateringRecordsForPlant(plantId).length;}getAverageWateringAmount(plantId){constrecords=this.wateringManager.getWateringRecordsForPlant(plantId);if(records.length===0)return0;consttotal=records.reduce((sum,r)=>sum+r.amount,0);returntotal/records.length;}getWateringFrequency(plantId,days=30){constrecords=this.wateringManager.getWateringRecordsForPlant(plantId);constcutoffDate=newDate();cutoffDate.setDate(cutoffDate.getDate()-days);constrecentRecords=records.filter(r=>newDate(r.date)>cutoffDate);return(recentRecords.length/days*7).toFixed(2);// 每周浇水次数}getWateringTrend(plantId,days=30){constrecords=this.wateringManager.getWateringRecordsForPlant(plantId);consttrend={};records.forEach(record=>{constdate=newDate(record.date).toLocaleDateString('zh-CN');trend[date]=(trend[date]||0)+record.amount;});returntrend;}}

这个WateringStatistics类提供了浇水的统计功能。getTotalWateringCount返回浇水总次数,getAverageWateringAmount计算平均浇水量,getWateringFrequency计算浇水频率,getWateringTrend返回浇水趋势数据。这些统计信息可以帮助用户了解浇水规律。

浇水提醒功能

functioncheckWateringReminders(){plants.forEach(plant=>{constlastWateringDate=wateringManager.getLastWateringDate(plant.id);constwateringInterval=plant.wateringInterval||7;// 默认7天if(!lastWateringDate){// 从未浇过水sendWateringReminder(plant.id,plant.name,'从未浇过水');return;}constdaysSinceWatering=Math.floor((newDate()-newDate(lastWateringDate))/(24*60*60*1000));if(daysSinceWatering>=wateringInterval){sendWateringReminder(plant.id,plant.name,`${daysSinceWatering}天未浇水`);}});}functionsendWateringReminder(plantId,plantName,message){cordova.exec(function(result){console.log("提醒已发送");},function(error){console.error("提醒发送失败:",error);},"NotificationPlugin","sendReminder",[{title:`${plantName}需要浇水`,message:message,plantId:plantId,type:'watering'}]);}// 定期检查浇水提醒setInterval(checkWateringReminders,60*60*1000);// 每小时检查一次

这段代码实现了浇水提醒功能。checkWateringReminders函数检查所有植物,如果某个植物超过设定的浇水间隔,就发送提醒。通过NotificationPlugin,我们可以向用户发送系统通知。这个功能帮助用户不会忘记给植物浇水。

浇水记录导出

functionexportWateringRecords(plantId){constplant=plants.find(p=>p.id===plantId);constrecords=wateringManager.getWateringRecordsForPlant(plantId);constcsvContent=[['日期','浇水量(ml)','土壤湿度(%)','备注'],...records.map(r=>[r.date.toLocaleString('zh-CN'),r.amount,r.soilMoisture||'N/A',r.notes||''])].map(row=>row.join(',')).join('\n');cordova.exec(function(result){console.log("浇水记录已导出");},function(error){console.error("导出失败:",error);},"FilePlugin","exportData",[{filename:`${plant.name}_watering_records.csv`,content:csvContent}]);}

这段代码实现了浇水记录的导出功能。通过FilePlugin,我们可以将浇水记录导出为CSV格式的文件。这个功能允许用户备份和分析浇水数据。

总结

浇水记录系统是植物养护应用的重要功能。通过合理的数据模型设计、与OpenHarmony系统的集成和各种统计分析功能,我们可以创建一个功能完整的浇水记录系统,帮助用户科学地管理植物的浇水。

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

数据驱动领导管理革新,用友HR SaaS赋能国企构建全周期数智化体系!

近年来&#xff0c;在深化国有企业改革、推动高质量发展的宏观背景下&#xff0c;建设一支政治过硬、专业精湛、结构合理的干部队伍&#xff0c;已成为国有企业提升核心竞争力的关键。制度惯性、数据壁垒以及 “人” 的复杂性&#xff0c;使得传统干部管理仍较多依赖主观经验与…

作者头像 李华
网站建设 2026/4/22 2:41:16

迁移学习的第一类方法:数据分布自适应(1)——边缘分布自适应

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在上节说明了迁移学习领域的基本方法&#xff08;基于样本、特征、模型、关系的迁移&#xff09;之后&#xff0c;本文主要将介绍迁移学习的第一类方法——数据分布自适应&#xff0c;重点阐述了边缘分布自适应的原理与应用。该…

作者头像 李华
网站建设 2026/4/17 21:21:48

云原生安全实战:一次72小时的DDoS攻击,我们是怎么活下来的?

“我们被打崩了”&#xff1a;一次DDoS攻击&#xff0c;如何差点毁掉我们的项目&#xff1f;对于线上业务来说&#xff0c;最可怕的不是没用户&#xff0c;而是用户来了&#xff0c;你却挂了。这句话&#xff0c;是我们团队用真金白银和无数不眠之夜换来的教训。那是一个普通的…

作者头像 李华
网站建设 2026/4/15 8:07:56

【RegExp】正则表达式 - 基础语法

正则表达式基础 简介在线工具 元字符分组与引用运算符优先级贪婪模式 简介 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。 很可能…

作者头像 李华
网站建设 2026/4/7 11:49:49

Anthropic宪法

Anthropic宪法参考网址 ConstitutionalAI(RLAIF)_通过AI自我监督实现无害化训练&#xff1a;https://blog.csdn.net/shizheng_Li/article/details/147634853Claude3秘密武器曝光_Claude宪法&#xff1a;https://cloud.tencent.com/developer/article/2419721Constitutional AI …

作者头像 李华
网站建设 2026/4/18 14:44:11

太平洋大西洋水流问题:DFS递归、DFS栈、BFS三种解法全解析

一、问题描述给定一个 m x n 的非负整数矩阵 heights &#xff0c;矩阵的左边界和上边界毗邻太平洋&#xff0c;右边界和下边界毗邻大西洋。水流的流动规则为&#xff1a;只能从高处流向低处&#xff0c;或者在同等高度的单元格之间流动。请找出矩阵中所有既可以流向太平洋&…

作者头像 李华