云开发:4小时实现个人留言板小程序

news/2024/7/20 2:56:15 标签: 小程序, javascript

纯云开发实现一个留言板小程序,包含以下基本功能:

  • 用户授权–》写留言

  • 作者进入后台审核通过–》显示留言

  • 作者回复用户的留言

  • 留言60s之后才能继续写留言

  • 不是管理员即游客,无法访问后台

效果演示

纯云开发:4小时开发一个留言板小程序

云开发:集合(表)结构设计,如下:

在这里插入图片描述
调用云函数发布留言:

javascript">// 时间戳
var timestamp = Date.parse(new Date());
// 评论参数
let commentParam = {
    _id: timestamp,
    userURL: app.globalData.userInfo.avatarUrl,
    Nickname: app.globalData.userInfo.nickName,
    time: time.customFormatTime(timestamp,'Y-M-D'),
    content: that.data.CommentContent,
    // 是否已通过审核
    flag:false,
    // 作者回复
    replyMessage: ""
}
wx.cloud.callFunction({
    name: "addMessages",
    data: {
        dbName: "comment",
        param: commentParam
    }
}).then( res => {
    // console.log("云函数插入评论成功回调:",res)
    // wx.showToast({
    //   title: "留言成功,审核通过即可显示!",
    //   duration: 2000
    // });
    wx.showModal({
        title: '提示',
        content: '留言成功,审核通过后即可显示!',
        showCancel: false,
        success(res){
            if (res.confirm) {
                console.log('用户点击确定')
            }
        }
    })
    // 清空输入框
    this.setData({
        commentValue: "",
        CommentContent: ""
    });
    //查询(刷新)评论内容
    this.selectAllMessages()
})

作者回复(根据 _id 更新集合的replyMessage字段):

javascript">//获取留言
var that = this;
// console.log("提交的留言信息为:"+this.data.messages)
if (that.data.replyContent === ""){
    wx: wx.showToast({
        title: '请输入回复内容...',
        icon: 'none',
    })
}else{
    let replyparam = {
        replyMessage: this.data.replyContent
    }
    // console.log("param:",replyparam)
    // 调用云函数修改作者回复
    wx.cloud.callFunction({
        name: "updatemessage",
        data: {
            dbName: "comment",
            param: replyparam,
            filter:{
                _id: this.data.commentItem._id
            }
        }
    }).then( res => {
        // console.log("回复成功:",res)
        this.setData({
            messagesnull: '',//清空文本域
            replyContent: ''
        })
        wx.showToast({
            title: '回复成功!',
            // icon:"success"
        })
        wx.navigateTo({
            url: '../index/index',
        })
    }).catch(console.error)
}

云函数获取当前用户的OpenID,判断是否是管理员:

javascript">// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

调用:

javascript">var that = this;
// 云函数调用
wx.cloud.callFunction({
    // 云函数名称
    name: 'getOpenid',
    // 传给云函数的参数
    data: {
    },
    success(res) {
        // console.log("CloudResult:", res);
        // console.log("openidCloudResult:", res.result.openid);
        that.setData({
            openid: res.result.openid
        });
        if (res.result.openid == that.data.adminOpenid) {
            app.globalData.roleFlag = true;
            that.setData({
                Role: '管理员',
            });
            if (app.globalData.userInfo) {
                that.setData({
                    roleFlag: true,
                });
            }
            // console.warn("你是管理员!");
        } else {
            app.globalData.roleFlag = false;
            that.setData({
                Role: '游客',
                roleFlag: false,
            });
            // console.warn("你不是管理员!");
        };
    }
})

云函数添加数据:

javascript">// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  let dbName = event.dbName
  let param = event.param ? event.param : {}
  let flag = false

  await db.collection(dbName).add({ data: param }).then(res => {
    flag =  true
  }).catch(res=>{

  })

  return flag
  
}

云函数查询数据:

javascript">// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  let dbName = event.dbName
  let filter = event.filter ? event.filter : {}

  const countResult = await db.collection(dbName).where(filter).count()
  
  return db.collection(dbName).where(filter).get().then(res => {
    res.count = countResult
    return res;
  })
}

云函数更新数据:

javascript">// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  let dbName = event.dbName
  let filter = event.filter ? event.filter : {}
  let param = event.param ? event.param : {}

  return db.collection(dbName).where(filter).update({ data: param })
}

END

  18年3月份,微信官方就关闭了公众号留言功能,之后申请的所有公众号都不能留言了,现在的两种解决办法是:

  1. 通过公众号迁移,就是迁移到18年之前申请的公众号,该方法的成本比较大,不太实用。
  2. 在公众号文章中嵌入小程序,就是在公众号中嵌入一个留言板的小程序连接,18年之后的很多号主也是使用该方法。

  不过现在小程序官方的审核太严了,只要小程序中有让用户输入的组件(输入框等)基本都审核不通过,如下记录就是视频中的第二个小程序的提交申请记录,也是一个纯云开发+colorUI实现的,本来打算这几天就上线的,但一直审核不通过,删除blog文章发布功能的话,小程序的主要功能就没了,没劲😪😪后面再改改看能不能上线了。
在这里插入图片描述
  第一个留言板小程序,在公众号回复“留言板小程序”关键字即可获取源码,第二个公众号同名小程序“遇见0和1”,花了很多精力,暂时不开源。

  第二个小程序使用云开发+colorUI组件库实现,页面样式很多参照了大佬 爱敲代码的猫 的开源项目WeHalo:https://gitee.com/aquanrun/WeHalo


http://www.niftyadmin.cn/n/1128205.html

相关文章

平台树型部件获取或设置水平/垂直网格线

获取或设置水平网格线:获取或设置是否显示树型部件的水平网格线,true表示显示网格线,false表示不显示网格线。 获取或设置垂直网格线:获取或设置是否显示树型部件的垂直网格线,true表示显示网格线,false表示…

互联网诊疗管理来了:有法可依 现有格局或受影响

日前,一份卫计委印发的《关于征求互联网诊疗管理办法 (试行)(征求意见稿)和关于推进互联网医疗服务发展的意见(征求意见稿)意见的函》在网络流传。该征求意见稿对开展互联网诊疗活动的医疗机构制…

SSL ***的无客户端配置实验

实验目的:主要是通过在ASA防火墙做SSL 的无客户端模式,来使得公网上的一台客户机能够通过加密隧道来访问局域网内部的资源。拓扑比较简单,主要是原理,配置过程如下:ISP运营商的配置,只需要配置IP地址即可。…

Android中使用Java8特性之Lambda

前言 早在几年前,Java8就已经发布了正式版本,可是到现在为止,在Android的开发中,大部分人还是一直使用的是Java6和Java7的属性和方法,这使得有时候在开发过程中难免会出现一些问题。 什么是 lambda 表达式? 简单的说&…

公众号同名小程序“遇见0和1”正式上线了

前言 之前一直有想法要做一款个人博客类型的小程序,但一直没找到让我看中的小程序组件库,写出来的页面让我这个外貌协会的人看着,着实难受,直到8月中旬,我看到了 ColorUI 这个优质的小程序组件库,以及一位大…

jQuery EasyUI API 中文文档 - 日期时间框(DateTimeBox)

DateTimeBox 日期时间框 博客园 风流涕淌 &#xff08;philoo.cnblogs.com&#xff09; 翻译。不当之处&#xff0c;敬请指正。转载请保留出处&#xff01;扩展自 $.fn.datebox.defaults。用 $.fn.datetimebox.defaults 重写了 defaults。 依赖dateboxtimespinner用法1. <…

强制Scala函数产生“副作用”

最近看到一个有意思的题目&#xff1a;波斯公主选驸马链接 &#xff0c;手痒想写代码模拟实现一下。正好在做scala的项目&#xff0c;自然就想用scala来实现。 模型里首先要实现一个"洗牌算法" &#xff0c;该算法用java实现的话如下&#xff1a; void MySwap(int &a…

在项目中集成富文本编辑器

作者公众号&#xff1a;遇见0和1 小程序&#xff1a;遇见0和1 Hexo博客&#xff1a;http://vogos.cn/ 前言 现在学程序的都离不开 Markdown 语法了吧&#xff0c;Markdown 已经成为典型的转换为HTML的非正式规范和参考实现&#xff0c;现在市场上也出现了许多Markdown实现&…