Преглед на файлове

ADD

我的关注和收藏后端对接
mulioid преди 4 години
родител
ревизия
a91de2d430

+ 13 - 0
cloudfunctions/deleteFavorite/index.js

@@ -10,6 +10,19 @@ exports.main = async (event, context) => {
     OPENID
   } = cloud.getWXContext()
 
+  const favorite_check = await db.collection('favorite')
+    .where({
+      user_id: OPENID,
+      msg_id: event.msg_id || ''
+    })
+    .get()
+  if (favorite_check.data.length === 0) {
+    return {
+      errMsg: '信息不存在',
+      status: 'ERR'
+    }
+  }
+
   const favorite = await db.collection('favorite')
     .where({
       user_id: OPENID,

+ 13 - 0
cloudfunctions/deleteFollow/index.js

@@ -10,6 +10,19 @@ exports.main = async (event, context) => {
     OPENID
   } = cloud.getWXContext()
 
+  const follow_check = await db.collection('follow')
+    .where({
+      user_id: OPENID,
+      pub_id: event.pub_id || ''
+    })
+    .get()
+  if (follow_check.data.length === 0) {
+    return {
+      errMsg: '社团组织不存在',
+      status: 'ERR'
+    }
+  }
+
   const follow = await db.collection('follow')
     .where({
       user_id: OPENID,

+ 1 - 1
cloudfunctions/deleteMessage/index.js

@@ -12,7 +12,7 @@ exports.main = async (event, context) => {
 
   const message_check = await db.collection('message')
     .where({
-      _id: event.msg_id
+      _id: event.msg_id || ''
     })
     .get()
   if (message_check.data.length === 0) {

+ 1 - 2
cloudfunctions/getMessage/index.js

@@ -21,6 +21,7 @@ exports.main = async (event, context) => {
       foreignField: '_id',
       as: 'publisher'
     })
+    .unwind('$publisher')
     .end()
   if (message.list.length === 0) {
     return {
@@ -29,8 +30,6 @@ exports.main = async (event, context) => {
     }
   }
 
-  message.list[0].publisher = message.list[0].publisher[0]
-
   await db.collection('read')
     .add({
       data: {

+ 3 - 12
cloudfunctions/listMessages/index.js

@@ -55,12 +55,9 @@ exports.main = async (event, context) => {
         foreignField: '_id',
         as: 'publisher'
       })
+      .unwind('$publisher')
       .end()
 
-    for (let i = 0; i < messages.list.length; i++) {
-      messages.list[i].publisher = messages.list[i].publisher[0]
-    }
-
     await db.collection('search')
       .add({
         data: {
@@ -100,12 +97,9 @@ exports.main = async (event, context) => {
         foreignField: '_id',
         as: 'publisher'
       })
+      .unwind('$publisher')
       .end()
 
-    for (let i = 0; i < messages.list.length; i++) {
-      messages.list[i].publisher = messages.list[i].publisher[0]
-    }
-
     return {
       list: messages.list,
       next_page_token: event.page_token + messages.list.length,
@@ -125,12 +119,9 @@ exports.main = async (event, context) => {
         foreignField: '_id',
         as: 'publisher'
       })
+      .unwind('$publisher')
       .end()
 
-    for (let i = 0; i < messages.list.length; i++) {
-      messages.list[i].publisher = messages.list[i].publisher[0]
-    }
-
     return {
       list: messages.list,
       next_page_token: event.page_token + messages.list.length,

+ 32 - 7
cloudfunctions/listPublishers/index.js

@@ -3,6 +3,8 @@ const cloud = require('wx-server-sdk')
 
 cloud.init()
 const db = cloud.database()
+const _ = db.command
+const $ = db.command.aggregate
 
 // 云函数入口函数
 exports.main = async (event, context) => {
@@ -10,11 +12,11 @@ exports.main = async (event, context) => {
     OPENID
   } = cloud.getWXContext()
 
-  if (event.user_id) {
+  if (event.manager) {
     const managers = await db.collection('manager')
       .aggregate()
       .match({
-        user_id: event.user_id
+        user_id: OPENID
       })
       .skip(event.page_token)
       .limit(event.page_size)
@@ -24,19 +26,42 @@ exports.main = async (event, context) => {
         foreignField: '_id',
         as: 'publisher'
       })
+      .unwind('$publisher')
       .end()
 
-    for (let i = 0; i < managers.list.length; i++) {
-      managers.list[i].publisher = managers.list[i].publisher[0]
-    }
-
     return {
       list: managers.list,
       next_page_token: event.page_token + managers.list.length,
       status: 'OK'
     }
+  } else if (event.follow) {
+    const publishers = await db.collection('publisher')
+      .aggregate()
+      .lookup({
+        from: 'follow',
+        let: {
+          pub_id: '$_id'
+        },
+        pipeline: $.pipeline()
+          .match(_.expr($.and([$.eq(['$pub_id', '$$pub_id']), $.eq(['$user_id', OPENID])])))
+          .project({
+            _id: 0,
+            follow_time: 1
+          }).done(),
+        as: 'follow'
+      })
+      .unwind('$follow')
+      .skip(event.page_token)
+      .limit(event.page_size)
+      .end()
+
+    return {
+      list: publishers.list,
+      next_page_token: event.page_token + publishers.list.length,
+      status: 'OK'
+    }
   } else {
-    const publishers = await db.collection('manager')
+    const publishers = await db.collection('publisher')
       .aggregate()
       .skip(event.page_token)
       .limit(event.page_size)

+ 1 - 1
miniprogram/app.js

@@ -35,7 +35,7 @@ App({
         return wx.cloud.callFunction({
           name: 'listPublishers',
           data: {
-            user_id: this.globalData.userInfo._id,
+            manager: true,
             page_token: 0,
             page_size: 20
           }

+ 49 - 49
miniprogram/components/itemmyLikeMessage/itemmyLikeMessage.js

@@ -8,67 +8,67 @@ Component({
   },
 
   data: {
-    like: 1,
-    likeEnable: true
+    show: true,
+    like: 1
   },
 
   methods: {
     getActivityInfo: function () {
       wx.navigateTo({
-        url: "/pages/activity/activity?id=" + this.properties.item.id
+        url: '/pages/activity/activity',
+        events: {
+          deleteMessage: () => {
+            this.setData({
+              show: false
+            })
+          }
+        }
+      }).then(res => {
+        res.eventChannel.emit('loadCommonData', {
+          data: this.data.item
+        })
+      })
+    },
+
+    getPublisherInfo: function () {
+      wx.navigateTo({
+        url: '/pages/publisher/publisher',
+      }).then(res => {
+        res.eventChannel.emit('loadCommonData', {
+          data: this.data.item.publisher
+        })
       })
     },
 
     toggleLike: function () {
-      if (!this.data.likeEnable) return
-      this.setData({
-        likeEnable: false
+      if (this.data.likeDisabled) {
+        return
+      }
+      wx.showLoading({
+        title: this.data.like ? '取消收藏' : '收藏中'
       })
-      const db = wx.cloud.database()
-      if (this.data.like == 0) {
-        db.collection("likeData").add({
-          data: {
-            type: "message",
-            id: this.properties.item.id
-          },
-          success: function() {
-            this.setData({
-              like: 1,
-              likeEnable: true
-            })
-            wx.showToast({
-              title: "已收藏",
-            })
-          }.bind(this),
-          fail: function() {
-            wx.showToast({
-              title: "网络错误",
-              icon: "none"
-            })
-          }
+      wx.cloud.callFunction({
+        name: this.data.like ? 'deleteFavorite' : 'createFavorite',
+        data: {
+          msg_id: this.data.item._id
+        }
+      }).then(res => {
+        wx.hideLoading()
+        if (res.result.status !== 'OK') {
+          wx.showToast({
+            title: res.result.errMsg,
+            icon: 'none'
+          })
+          return
+        }
+        wx.showToast({
+          title: this.data.like ? '取消收藏成功' : '收藏成功',
+          icon: 'none'
         })
-      } else {
-        db.collection("likeData").where({
-          type: "message",
-          id: this.properties.item.id
-        }).remove({
-          success: function() {
-            this.setData({
-              like: 0,
-              likeEnable: true
-            })
-            wx.showToast({
-              title: "已取消收藏",
-            })
-          }.bind(this),
-          fail: function() {
-            wx.showToast({
-              title: "网络错误",
-              icon: "none"
-            })
-          }
+        this.setData({
+          like: !this.data.like
         })
-      }
+      })
     }
   }
 })

+ 6 - 8
miniprogram/components/itemmyLikeMessage/itemmyLikeMessage.wxml

@@ -1,14 +1,12 @@
 <!-- 为消息-关注动态里消息的组件,数据来自data: newMessageData.js-->
-<view class="card" catchtap="getActivityInfo">
+<view wx:if="{{show}}" class="card" catchtap="getActivityInfo">
   <view class="profile">
-    <view class="publisher-name primary-text-color">
-      <image class="publisher-avatar" src="{{item.publisher.avatar}}" mode="aspectFill"
-        data-publisher-id="{{item.pub_id}}" />
-      <text style="font-weight:900">{{item.publisherName}}</text>
+    <view class="publisher-name primary-text-color" catchtap="getPublisherInfo">
+      <image class="publisher-avatar" src="{{item.publisher.avatar}}" mode="aspectFill" />
+      <text style="font-weight: bold;">{{item.publisher.name}}</text>
     </view>
     <image class="like" src="/images/like/{{like ? 'heart' : 'hollowheart'}}.png" catchtap="toggleLike" />
   </view>
-  <view class="title">{{item.title}}</view>
-  <view class="sub-title">{{item.subTitle}}</view>
-  <view class="line divider-color"></view>
+  <view class="title">{{item.name}}</view>
+  <view class="sub-title">{{item.brief}}</view>
 </view>

+ 12 - 12
miniprogram/components/itemmyLikeMessage/itemmyLikeMessage.wxss

@@ -1,50 +1,50 @@
-.card{
-  height: auto;
-  width: 700rpx;
-  margin-top: 20rpx;
+.card {
+  margin: 4rpx 0rpx;
+  padding: 20rpx;
+  background-color: #ffffff;
 }
 
-.publisher-avatar{
+.publisher-avatar {
   width: 50rpx;
   height: 50rpx;
   border-radius: 30rpx;
   margin-right: 20rpx;
 }
 
-.profile{
+.profile {
   width: 700rpx;
   display: flex;
   align-items: center;
   justify-content: space-between;
 }
 
-.publisher-name{
+.publisher-name {
   font-size: 30rpx;
   align-self: center;
   display: flex;
 }
 
-.title{
+.title {
   font-size: 30rpx;
   margin-left: 70rpx;
   margin-bottom: 10rpx;
-  font-weight: 800;
+  font-weight: bolder;
 }
 
-.sub-title{
+.sub-title {
   font-size: 25rpx;
   margin-left: 70rpx;
   margin-bottom: 20rpx;
   margin-right: 20rpx;
 }
 
-.line{
+.line {
   width: 700rpx;
   height: 1rpx;
   margin-top: 20rpx;
 }
 
-.like{
+.like {
   height: 40rpx;
   width: 40rpx;
 }

+ 32 - 51
miniprogram/components/itemmyLikePublisher/itemmyLikePublisher.js

@@ -8,68 +8,49 @@ Component({
   },
 
   data: {
-    like: 1,
-    likeEnable: true
+    like: 1
   },
 
   methods: {
     getPublisherInfo: function () {
       wx.navigateTo({
-        url: "/pages/publisher/publisher?id=" + this.properties.item.id
+        url: '/pages/publisher/publisher',
+      }).then(res => {
+        res.eventChannel.emit('loadCommonData', {
+          data: this.data.item
+        })
       })
     },
-    
-   
+
     toggleLike: function () {
-      if (!this.data.likeEnable) return
-      this.setData({
-        likeEnable: false
+      if (this.data.likeDisabled) {
+        return
+      }
+      wx.showLoading({
+        title: this.data.like ? '取消关注' : '关注中'
       })
-      const db = wx.cloud.database()
-      if (this.data.like == 0) {
-        db.collection("likeData").add({
-          data: {
-            type: "publisher",
-            id: this.properties.item.id
-          },
-          success: function() {
-            this.setData({
-              like: 1,
-              likeEnable: true
-            })
-            wx.showToast({
-              title: "已收藏",
-            })
-          }.bind(this),
-          fail: function() {
-            wx.showToast({
-              title: "网络错误",
-              icon: "none"
-            })
-          }
+      wx.cloud.callFunction({
+        name: this.data.like ? 'deleteFollow' : 'createFollow',
+        data: {
+          pub_id: this.data.item._id
+        }
+      }).then(res => {
+        wx.hideLoading()
+        if (res.result.status !== 'OK') {
+          wx.showToast({
+            title: res.result.errMsg,
+            icon: 'none'
+          })
+          return
+        }
+        wx.showToast({
+          title: this.data.like ? '取消关注成功' : '关注成功',
+          icon: 'none'
         })
-      } else {
-        db.collection("likeData").where({
-          type: "publisher",
-          id: this.properties.item.id
-        }).remove({
-          success: function() {
-            this.setData({
-              like: 0,
-              likeEnable: true
-            })
-            wx.showToast({
-              title: "已取消收藏",
-            })
-          }.bind(this),
-          fail: function() {
-            wx.showToast({
-              title: "网络错误",
-              icon: "none"
-            })
-          }
+        this.setData({
+          like: !this.data.like
         })
-      }
+      })
     }
   }
 })

+ 3 - 3
miniprogram/components/itemmyLikePublisher/itemmyLikePublisher.wxml

@@ -1,8 +1,8 @@
 <!-- 为消息-我的消息里通知的组件,组件中数据来自data:newNewsData.js -->
 <view class="block" catchtap="getPublisherInfo">
   <view class="left">
-      <image class="btn-icon" src="{{item.publisherAvatar}}" mode="aspectFill" data-publisher-id="{{item.publisherID}}" />
-      <text>{{item.publisherName}}</text>
+    <image class="btn-icon" src="{{item.avatar}}" mode="aspectFill" />
+    <text>{{item.name}}</text>
   </view>
   <image class="like" src="/images/like/{{like ? 'heart' : 'hollowheart'}}.png" catchtap="toggleLike" />
-</view>
+</view>

+ 1 - 3
miniprogram/components/itemmyLikePublisher/itemmyLikePublisher.wxss

@@ -4,14 +4,12 @@
 }
 
 .block {
-  margin-bottom: 4rpx;
+  margin: 4rpx 0rpx;
   padding: 20rpx 40rpx 20rpx 20rpx;
   display: flex;
   justify-content: space-between;
-  align-items: center;
   font-size: 30rpx;
   background-color: #ffffff;
-  align-items: center;
 }
 
 .left {

+ 0 - 2
miniprogram/pages/main/main.wxss

@@ -1,9 +1,7 @@
 .page {
   display: flex;
   flex-direction: column;
-  justify-content: flex-start;
   align-items: center;
-  width: 100%;
 }
 
 .filter {

+ 32 - 56
miniprogram/pages/myFavor/myFavor.js

@@ -1,68 +1,44 @@
-Component({
+const util = require('../../utils/util.js')
+
+Page({
   data: {
     pageToken: 0,
     favorData: []
   },
 
-  lifetimes: {
-    ready: function () {
-      wx.showLoading({
-        title: "加载中"
-      })
-      wx.cloud.callFunction({
-        name: 'listMessages',
-        data: {
-          favorite: true,
-          page_token: this.data.pageToken,
-          page_size: 20
-        }
-      }).then(res => {
-        wx.hideLoading()
-        if (res.result.status !== 'OK') {
-          wx.showToast({
-            title: res.result.errMsg,
-            icon: 'none'
-          })
-          return
-        }
-        this.setData({
-          favorData: this.data.favorData.concat(res.result.list),
-          pageToken: res.result.next_page_token
+  loadFavoriteData: function () {
+    wx.showNavigationBarLoading()
+    wx.cloud.callFunction({
+      name: 'listMessages',
+      data: {
+        favorite: true,
+        page_token: this.data.pageToken,
+        page_size: 20
+      }
+    }).then(res => {
+      wx.hideNavigationBarLoading()
+      if (res.result.status !== 'OK') {
+        wx.showToast({
+          title: res.result.errMsg,
+          icon: 'none'
         })
+        return
+      }
+      for (let i = 0; i < res.result.list.length; i++) {
+        res.result.list[i] = util.dbToMsg(res.result.list[i])
+      }
+      this.setData({
+        favorData: this.data.favorData.concat(res.result.list),
+        pageToken: res.result.next_page_token
       })
+    })
+  },
 
-      // const db = wx.cloud.database()
-      // db.collection("likeData").where({
-      //   type: "message"
-      // }).get({
-      //   success: function (res) {
-      //     if (res.data.length == 0) {
-      //       wx.hideLoading()
-      //       return
-      //     }
-      //     this.processData(res.data)
-      //   }.bind(this)
-      // })
-    }
+  onLoad: function () {
+    this.loadFavoriteData()
   },
 
-  methods: {
-    processData: function (arr) {
-      const db = wx.cloud.database()
-      for (let i = 0; i < arr.length; i++) {
-        db.collection("mainData").doc(arr[i].id).get({
-          success: function (res) {
-            arr[i].publisherAvatar = res.data.publisherAvatar
-            arr[i].publisherName = res.data.publisherName
-            arr[i].title = res.data.title
-            arr[i].subTitle = res.data.subTitle
-            this.setData({
-              newNews: arr
-            })
-            wx.hideLoading()
-          }.bind(this)
-        })
-      }
-    }
+  onReachBottom: function () {
+    this.loadFavoriteData()
   }
 })

+ 0 - 1
miniprogram/pages/myFavor/myFavor.json

@@ -1,5 +1,4 @@
 {
-  "component": true,
   "usingComponents": {
     "itemmyLikeMessage": "/components/itemmyLikeMessage/itemmyLikeMessage"
   }

+ 2 - 2
miniprogram/pages/myFavor/myFavor.wxml

@@ -1,6 +1,6 @@
 <!-- 消息-我的消息组件,含component:itemmyNews;含data:newNewsData -->
 <view class="page">
-  <view class="card" wx:for="{{favorData}}" wx:for-item="favor" wx:key="id">
-    <itemmyLikeMessage item="{{favor}}" />
+  <view class="card" wx:for="{{favorData}}" wx:for-item="msg" wx:key="_id">
+    <itemmyLikeMessage item="{{msg}}" />
   </view>
 </view>

+ 2 - 5
miniprogram/pages/myFavor/myFavor.wxss

@@ -1,7 +1,4 @@
-.page{
+.page {
   display: flex;
   flex-direction: column;
-  justify-content: flex-start;
-  align-items: center;
-  margin: 0%;
-}
+}

+ 31 - 27
miniprogram/pages/myFollow/myFollow.js

@@ -1,35 +1,39 @@
-Component({
+Page({
   data: {
-    newMessage: []
+    pageToken: 0,
+    followData: []
   },
 
-  lifetimes: {
-    ready: function() {
-      const db = wx.cloud.database()
-      db.collection("likeData").where({
-        type: "publisher"
-      }).get({
-        success: function (res) {
-          this.processData(res.data)
-        }.bind(this)
+  loadFollowData: function () {
+    wx.showNavigationBarLoading()
+    wx.cloud.callFunction({
+      name: 'listPublishers',
+      data: {
+        follow: true,
+        page_token: this.data.pageToken,
+        page_size: 20
+      }
+    }).then(res => {
+      wx.hideNavigationBarLoading()
+      if (res.result.status !== 'OK') {
+        wx.showToast({
+          title: res.result.errMsg,
+          icon: 'none'
+        })
+        return
+      }
+      this.setData({
+        followData: this.data.followData.concat(res.result.list),
+        pageToken: res.result.next_page_token
       })
-    }
+    })
   },
 
-  methods: {
-    processData: function (arr) {
-      const db = wx.cloud.database()
-      for (let i = 0; i < arr.length; i++) {
-        db.collection("publisherInfoData").doc(arr[i].id).get({
-          success: function (res) {
-            arr[i].publisherAvatar = res.data.publisherAvatar
-            arr[i].publisherName = res.data.publisherName
-            this.setData({
-              newMessage: arr
-            })
-          }.bind(this)
-        })
-      }
-    }
+  onReady: function () {
+    this.loadFollowData()
+  },
+
+  onReachBottom: function () {
+    this.loadFollowData()
   }
 })

+ 0 - 1
miniprogram/pages/myFollow/myFollow.json

@@ -1,5 +1,4 @@
 {
-  "component": true,
   "usingComponents": {
     "itemmyLikePublisher":"/components/itemmyLikePublisher/itemmyLikePublisher"
   }

+ 2 - 2
miniprogram/pages/myFollow/myFollow.wxml

@@ -1,6 +1,6 @@
 <!-- 我关注的发布者组件,含component:itemfollowNews; 含data:newMessageData.js-->
 <view class="page">
-  <view class="card" wx:for="{{newMessage}}" wx:for-item="item" wx:key="id" wx:index="index">
-    <itemmyLikePublisher item="{{item}}"/>
+  <view class="card" wx:for="{{followData}}" wx:for-item="pub" wx:key="_id">
+    <itemmyLikePublisher item="{{pub}}" />
   </view>
 </view>

+ 2 - 5
miniprogram/pages/myFollow/myFollow.wxss

@@ -1,7 +1,4 @@
-.page{
+.page {
   display: flex;
   flex-direction: column;
-  justify-content: flex-start;
-  align-items: center;
-  margin: 0%;
-}
+}