const app = getApp() const db = wx.cloud.database() Page({ /** * 页面的初始数据 */ data: { mess : '', content : [],//聊天信息 mineAvatorSrc : '/images/user_male.jpg', himAvatorSrc : '/images/user_female.jpg', }, //获取格式化的时间 yyyy-mm-dd-hh:mm-ss getFormatTime(){ let date = new Date(); let ymd = date.toISOString().substring(0,10);//年-月-日 let hms = date.toTimeString().substring(0,8);//小时-分钟-秒钟 console.log(ymd + "-" + hms); return ymd + "-" + hms;//拼接 }, //“发送” sendMess(){ let that = this; let mess = that.data.mess; let content = that.data.content; let date = that.getFormatTime(); let id = that.data.currentId; wx.showLoading({ title: '发送ing...', mask: true, success: (res) => {}, fail: (res) => {}, complete: (res) => { db.collection('chatTest') .doc(id) .update({ data : { chatContent : content.concat({ id : 0,//用户自己发送,为0 text : mess, date : date }) }, success:function(res){ console.log("添加成功!",res); }, fail:function(err){ console.log("添加失败!",err); }, complete:function(){ that.setData({ mess : '', }) wx.hideLoading({ noConflict: true, success: (res) => {}, fail: (res) => {}, complete: (res) => {}, }) } }) }, }) }, //初始化数据库的字段 initChatContent(){ let that = this; wx.showLoading({ title: '初始化数据库的字段中...', mask: true, success: (res) => {}, fail: (res) => {}, complete: (res) => { db.collection('chatTest') .add({ data : { chatContent : [],//设置一个空的聊天循环体 }, success(res){ console.log("初始化成功!",res); that.setData({ currentId : res._id//设置当前的id }) }, fail(err){ console.log("初始化失败!",err); }, complete(){ wx.hideLoading({ noConflict: true, success: (res) => {}, fail: (res) => {}, complete: (res) => {}, }) } }) }, }) }, //查询聊天 queryChat(){ let that = this; wx.showLoading({ title: '查询...', mask: true, success: (res) => {}, fail: (res) => {}, complete: (res) => { db.collection('chatTest') //.doc('4efa204964219ab20003873513331ef9') .get({ success:function(res){ console.log("查询成功!",res); if(res.data.length == 0){ that.initChatContent();//初始化数据库字段 } else{ that.setData({ currentId : res.data[0]._id,//设置当前的id content : res.data[0].chatContent//赋值给当前的聊天循环体 }) //定位到最后一行 that.setData({ toBottom : `item${that.data.content.length - 1}`, }) } }, fail:function(err){ console.log("查询失败!",err); }, complete:function(){ wx.hideLoading({ noConflict: true, success: (res) => {}, fail: (res) => {}, complete: (res) => {}, }) } }) }, }) }, //数据库的监听器 dbWatcher(){ let that = this; db.collection('chatTest').where({ }) .watch({ onChange: function (res) { //监控数据发生变化时触发 console.log("res:",res); if(res.docChanges != null){ if(res.docChanges[0].dataType == "update"){//数据库监听到的内容 let length = res.docChanges[0].doc.chatContent.length; console.log("length : ",length); let value = res.docChanges[0].doc.chatContent[length - 1];//要增添的内容 console.log("value : ",value); that.setData({ content : that.data.content.concat(value) }) //定位到最后一行 that.setData({ toBottom : `item${that.data.content.length - 1}`, }) } } }, onError:(err) => { console.error(err) } }) }, //获取时间并格式化时间 checkDateAndTime(){ let date = new Date(); let ymd = date.toISOString().substring(0,10);//年-月-日 let time = date.toTimeString().substring(0,8);//时:分:秒 console.log("年-月-日 : ",ymd); console.log("时:分:秒 : ",time); let resDate = ymd + '-' + time; console.log("resDate : ",resDate); }, /** * 生命周期函数--监听页面加载 */ // 生命周期函数--监听页面加载 onLoad: function (options) { this.dbWatcher(); this.queryChat(); }, onReady(){ }, })