云笔记小程序的实现

1.前言

云笔记, 是基于HotApp小程序统计云后台提供的api接口开发的一个微信小程序。

2.功能

  • 离线保存笔记

  • 云端数据同步, 更换了设备也可以找到以前的笔记

  • 接入了好推二维码提供的数据统计工具, 可以到平台上查看用户分析、留存分析、事件分析。

3.界面效果

***HotApp云笔记,基于HotApp小程序统计云后台

***免费云后台申请地址 https://weixin.hotapp.cn/cloud

***API 文档地址:https://weixin.hotapp.cn/api

四、代码实现

{"pages": ["pages/index/index","pages/feedback/index","pages/edit/index","pages/create/index"],"window": {"navigationBarBackgroundColor": "#ff9b6e","navigationBarTitleText": "HotApp云笔记","navigationBarTextStyle": "black","backgroundTextStyle": "light","backgroundColor": "#efeff4","enablePullDownRefresh": true},"tabBar": {"color": "#b3b3b3","selectedColor": "#fc8e5d","backgroundColor": "#f5f5f7","borderStyle": "white","position": "bottom","list": [{"pagePath": "pages/index/index","text": "记事本","iconPath": "images/icon1.png","selectedIconPath": "images/sicon1.png"},{"pagePath": "pages/feedback/index","text": "反馈","iconPath": "images/icon2.png","selectedIconPath": "images/sicon2.png"}]},"sitemapLocation": "sitemap.json"
}
<!--/*
***HotApp云笔记,基于HotApp小程序统计云后台
***免费云后台申请地址 https://weixin.hotapp.cn/cloud
***API 文档地址:https://weixin.hotapp.cn/api*/-->
<!--index.wxml-->
<view class="container"><!--写笔记--><view class='col'><view class='item add_box'  bindtap="onNewItem"><image class="add_bg" src="../../images/add.png" style="width:120rpx;height:120rpx;"></image></view> <!--没有笔记时的提示--><block wx:if="{{items.length < 1}}"><view class='tips'><view class='tips_box'><image class='tips_icon' src="../../images/tips_icon.png"style="width:70rpx;height:70rpx;"></image></view><view class='tips_txt'>点此添加新记事本</view></view></block></view><!--笔记列表--><block wx:for="{{items}}"><view class="col" wx:if="{{ item.state != 3 }}"><view class='item notepad {{item.class}}' data-key="{{item.key}}" bindtap="onEditItem"><view class='content'><view class='txt'>{{item.value.title}}</view></view><view class='bottom'><view class='txt'>{{item.year}} {{item.month}} {{item.date}}</view></view></view></view></block>
</view>
/*
***HotApp云笔记,基于HotApp小程序统计云后台
***免费云后台申请地址 https://weixin.hotapp.cn/cloud
***API 文档地址:https://weixin.hotapp.cn/api
*/
var app = getApp();Page({data: {items: [],},/*** 首次渲染事件*/onShow: function() {this.setData({items: []});// 获取数据var that = this;app.globalData.hotapp.wxlogin(function(res) {that.onLoadData();});},/*** 新增笔记事件*/onNewItem: function(event) {wx.navigateTo({url: "../create/index"})},/*** 编辑笔记事件*/onEditItem: function(event) {wx.navigateTo({url: '../edit/index?key=' + event.currentTarget.dataset.key})},/*** 获取数据事件*/onLoadData: function() {var that = this;app.getItems(function(items) {that.setData({items: items});});},/*** 下拉刷新事件, 数据同步*/onPullDownRefresh: function() {wx.showToast({title: '正在同步数据',icon: 'loading'});// 临时变量var tempData = this.data.items;var that = this;// 先检查版本, 如果和服务器版本不同, 则需要从服务器拉取数据app.checkVersion(function(shouldPullData) {if (shouldPullData) {var filters = {prefix: app.globalData.hotapp.getPrefix('item')};// 从服务器拉取所有数据app.globalData.hotapp.searchkey(filters, function(res) {if (res.ret == 0) {// 拉取成功, 更新版本号app.updateVersion(function(success) {if (success) {// 更新版本号之后把本地数据和服务器数据合并去重tempData = that.syncServerDatatoLocal(tempData, res.data.items);tempData.forEach(function(item, index, arr) {arr[index] = app.formatItem(item);arr[index].state = 2;});// 更新视图数据that.setData({items: tempData});// 把合并好的数据存缓存wx.setStorageSync('items', tempData);that.syncLocalDataToServer(tempData);}});}}); } else {// 版本号和服务器相同, 则不需要从服务器上拉取数据, 直接同步数据到服务器that.syncLocalDataToServer(tempData);}});},/*** 将本地数据同步到服务器*/syncLocalDataToServer: function(data) {var that = this;// 遍历所有的数据data.forEach(function(item, index, items) {app.globalData.hotapp.replaceOpenIdKey(item.key, function(newKey) {if (newKey) {item.key = newKey;// 如果还有数据没有同步过, 则调用post接口同步到服务器if (item.state == 1) {app.globalData.hotapp.post(item.key, item.value, function(res) {if (res.ret == 0) {// 同步成功后更新状态, 并存缓存item.state = 2;item = app.formatItem(item);that.setData({items: items});wx.setStorageSync('items', items);}});}// 如果数据被删除过, 则调用delete接口从服务器删除数据if (item.state == 3) {app.globalData.hotapp.del(item.key, function(res) {if (res.ret == 0 || res.ret == 103) {// 服务器的数据删除成功后, 删除本地数据并更新缓存items.splice(index, 1);that.setData({items: items});wx.setStorageSync('items', items);}});}} else {return;}})});},/*** 将服务器的数据同步到本地*/syncServerDatatoLocal: function(localData, serverData) {var that = this;// 通过hash的性质去重, 服务器数据覆盖本地数据// 但是要保留本地中状态为已删除的数据// 删除的逻辑不在这里处理var localHash = new Array();localData.forEach(function(item) {localHash[item.key] = item;});var serverHash = new Array();serverData.forEach(function(item) {serverHash[item.key] = item;});// 先把服务器上有的数据但是本地没有的数据合并serverData.forEach(function(item) {var t = localHash[item.key];// 有新增的数据if (!t) {localHash[item.key] = item;}// 有相同的key则以服务器端为准if (t && t.state != 3) {item.state = 2;item = app.formatItem(item);localHash[item.key] = item;}});// 然后再删除本地同步过的但是服务器上没有的缓存数据(在其它设备上删除过了)localData.forEach(function(item, index, arr) {var t = serverHash[item.key];if (!t && item.state == 2) {console.log(item);delete localHash[item.key];}});// 将hash中的数据转换回数组var result = new Array();for (var prob in localHash) {result.push(localHash[prob]);}// 按时间排序result.sort(function(a, b) {return a.create_time < b.create_time;});console.log(result);return result;}
})

五、源码下载

云笔记小程序实现.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

【opencv】示例-stereo_match.cpp 立体匹配:通过对左右视图图像进行处理来生成视差图和点云数据...

/** stereo_match.cpp* calibration** 创建者 Victor Eruhimov&#xff0c;日期为 2010年1月18日。* 版权所有 2010 Argus Corp.**/#include "opencv2/calib3d/calib3d.hpp" // 导入OpenCV相机标定和三维重建相关的头文件 #include "opencv2/imgproc.hpp&qu…

您与此网站之间建立的连接不安全

正如标题一样&#xff0c;打开的网站地址栏显示&#xff1a;如果你使用浏览器提示您与此网站之间建立的连接不安全、与此站点的连接不安全、网站非安全连接等类似提示。 是因为网站采取的是http地址协议&#xff0c;这种协议有一种缺点&#xff0c;当您常使用的网站出现上述提示…

ASP.NET基于BS的图书销售管理系统的设计与实现

随着Internet的兴起&#xff0c;网络已经成为现代人生活中的一部分&#xff0c;越来越多的人喜欢在网上交易。本系统就是一个基于B/S模式的网络化的图书销售管理系统,采用的是ASP.NET技术&#xff0c;实现了用户注册信息管理、用户信息管理、图书销售点管理、图书信息管理、客户…

8. Spring Boot 配置文件

源码地址&#xff1a;SpringBoot_demo 本篇文章内容源码位于上述地址的com/chenshu/springboot_demo/config包下 1. 配置文件是什么 上节说到&#xff0c;Spring Boot的项目分为三个部分&#xff1a;源代码目录、资源目录、单元测试目录。 而配置文件的位置就位于资源目录res…

科技助力输电线安全隐患预警,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建电力设备场景下输电线安全隐患目标检测预警系统

电力的普及让我们的生活变得更加便利&#xff0c;四通八达的电网连接着生活的方方面面&#xff0c;电力能源主要是依托于庞大复杂的电网电力设备进行传输的&#xff0c;有效地保障电网场景下输电线的安全对于保障我们日常生活所需要的电力有着重要的意义&#xff0c;但是电力设…

宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目

这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作&#xff0c;最终可以完成部署。 步骤1&#xff1a;在某个文件夹中创建一个django项目 安装django pip install django创建一个django项目将其命名为djangoProject …

再写-全景拼接

全景拼接 1. 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 import cv2 import numpy as np# 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 image_left cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie…

微信登录功能-保姆级教学

目录 一、使用组件 二、登录功能 2.1 步骤 2.2 首先找到网页权限 复制demo 代码 这里我们需要修改两个参数 三、前端代码 3.1 api 里weiXinApi.ts 3.2 api里的 index.ts 3.3 pinia.ts 3.4 My.vue 四、后端代码 4.1 WeiXinController 4.2 Access_Token.Java 4.3 We…

1027: 舞伴问题

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int main() {int n, m, k;cin >> n;vector<char> man(n);for (int i 0; i < n; i) cin >> man[i];cin >> m;vector<char> woman(m);for (int i 0…

实现 .NET 8 部署到 Docker

一、前言 本文仅针对操作系统为 CentOS 8 的环境下部署方法进行讲述。如有需要,后续将在其他文章中进行其他系统下的部署方式讲解。 二、准备工作 确保服务器已安装 docker。 可以通过命令 docker -v 进行检查,如出现下图结果则表示已安装。 代码准备 在代码项目名称上右键…

设计模式学习笔记 - 设计模式与范式 -行为型:17.中介模式:什么时候用中介模式?什么时候用观察者模式?

概述 本章学习 23 种经典设计模式中的最后一个设计模式&#xff0c;中介模式。和之前讲过的命令模式、解释器模式类似&#xff0c;中介模式也不怎么常用&#xff0c;应用场景比较特殊、有限&#xff0c;但是&#xff0c;跟它俩不同的是&#xff0c;中介模式理解起来并不难&…