活动记录 Cordova 与 OpenHarmony 混合开发实战

📌 模块概述

活动记录功能记录用户的所有操作,包括创建、编辑、删除笔记等。用户可以查看活动历史,了解自己的操作记录。

🔗 完整流程

第一步:记录活动

每当用户执行操作时,记录活动。

第二步:存储活动

将活动存储到数据库。

第三步:显示活动

显示活动历史列表。

🔧 Web代码实现

javascript 复制代码
async renderActivity() {
  const activities = await noteDB.getAllActivities();
  const sortedActivities = activities.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));

  return `
    <div class="page active">
      <div class="page-header">
        <h1 class="page-title">📅 活动记录</h1>
      </div>
      <div class="activity-list">
        ${sortedActivities.map(activity => `
          <div class="activity-item">
            <span class="activity-type">${activity.type}</span>
            <span class="activity-description">${activity.description}</span>
            <span class="activity-time">${Utils.formatDate(activity.createdAt)}</span>
          </div>
        `).join('')}
      </div>
    </div>
  `;
}

// 记录活动
async recordActivity(type, description) {
  try {
    const activity = {
      id: Date.now(),
      type: type,
      description: description,
      createdAt: new Date().toISOString()
    };

    await noteDB.addActivity(activity);
  } catch (error) {
    console.error('记录活动失败:', error);
  }
}

🔌 OpenHarmony 原生代码

typescript 复制代码
// ActivityPlugin.ets - 活动记录插件
import { webview } from '@kit.ArkWeb';
import { common } from '@kit.AbilityKit';
import { fileIo } from '@kit.CoreFileKit';

@NativeComponent
export class ActivityPlugin {
  private context: common.UIAbilityContext;

  constructor(context: common.UIAbilityContext) {
    this.context = context;
  }

  // 初始化插件
  public init(webviewController: webview.WebviewController): void {
    webviewController.registerJavaScriptProxy(
      new ActivityJSProxy(this),
      'activityPlugin',
      ['recordActivity', 'getActivities']
    );
  }

  // 记录活动
  public recordActivity(type: string, description: string): Promise<boolean> {
    return new Promise((resolve) => {
      try {
        const activitiesPath = this.context.cacheDir + '/activities.json';
        let activities: Array<any> = [];
        
        try {
          const content = fileIo.readTextSync(activitiesPath);
          activities = JSON.parse(content);
        } catch {
          activities = [];
        }

        activities.push({
          id: Date.now(),
          type: type,
          description: description,
          createdAt: new Date().toISOString()
        });

        fileIo.writeTextSync(activitiesPath, JSON.stringify(activities, null, 2));
        resolve(true);
      } catch (error) {
        console.error('Failed to record activity:', error);
        resolve(false);
      }
    });
  }

  // 获取活动列表
  public getActivities(): Promise<Array<any>> {
    return new Promise((resolve) => {
      try {
        const activitiesPath = this.context.cacheDir + '/activities.json';
        const content = fileIo.readTextSync(activitiesPath);
        const activities = JSON.parse(content);
        resolve(activities);
      } catch (error) {
        console.error('Failed to get activities:', error);
        resolve([]);
      }
    });
  }
}

// ActivityJSProxy.ets - JavaScript代理类
class ActivityJSProxy {
  private plugin: ActivityPlugin;

  constructor(plugin: ActivityPlugin) {
    this.plugin = plugin;
  }

  recordActivity(type: string, description: string): void {
    this.plugin.recordActivity(type, description).then(success => {
      console.log('Activity recorded:', success);
    });
  }

  getActivities(): void {
    this.plugin.getActivities().then(activities => {
      console.log('Activities:', activities.length);
    });
  }
}

📝 总结

活动记录功能展示了如何在Cordova与OpenHarmony混合开发中实现操作日志系统。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
踏着七彩祥云的小丑2 小时前
Python——requests——响应码
python
Ulyanov2 小时前
Apache Kafka在雷达仿真数据流处理中的应用
分布式·python·kafka·apache·雷达电子战
u0109147602 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
电化学仪器白超2 小时前
小乌龟Git全程图形化操作指南:嵌入式本地版本管理与Gitee私有云备份实战
git·python·单片机·嵌入式硬件·物联网·gitee·自动化
2401_837163892 小时前
如何在 Go 中正确解析带命名空间的 SOAP 响应
jvm·数据库·python
_Evan_Yao2 小时前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程
m0_377618232 小时前
CSS如何处理溢出隐藏_使用overflow-hidden与盒模型
jvm·数据库·python
qq_5024289903 小时前
清华大学与微软亚洲研究院出品:Kronos 本地部署教程
数据结构·python·金融量化·kronos开源模型
2301_814809863 小时前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
m0_678485453 小时前
如何在Bootstrap中自定义Modal的弹出动画效果
jvm·数据库·python