首页消息提示这个功能感觉是做的最差劲的一个功能了。。。。
现在只支持按评论、回复、私信这三个类型依次渲染。。。还没新消息提醒功能。。。非常的丑。。。后面看看再怎么优化吧。。。
在头部组件做的功能,mounted方法,每次打开新路由或刷新页面都会执行。
首先要明确的是前端希望得到的数据格式,如何渲染。对我而言前端需要评论人、回复人以及对应的文章id、私信人这些数据,那么后端就需要返回三个数组给前端,前端拿到这些数据进行渲染,代码如下
//后端获取评论人、回复者、私信者,写到头部的消息提醒处
router.get("/getTips", (req,res,next) => {
var userId = req.session.user.userId
User.findOne({'userId':userId},(err,doc)=>{
if(err){
res.json({
status:'1',
msg:'err'
})
}else{
var publishReply=[];//[{from:xxx,articleId:xxx}]
var messageReply=[];//[[from:xxx]]
var articleReply=[];//[{from:xxx,articleId:xxx}]
for(var i = 0;i<doc.publishArticle.length;i++){
for(var j=0;j<doc.publishArticle[i].comment.length;j++){
if(doc.publishArticle[i].comment.length!=0){
publishReply[j]={from:doc.publishArticle[i].comment[j].from,articleId:doc.publishArticle[i].comment[j].articleId}
}
}
}
for(var i=0;i<doc.message.length;i++){
if(doc.message[i].hisMessageContent.length!=0){
for(var j=0;j<doc.message[i].hisMessageContent.length;j++)
messageReply[j]=doc.message[i].with
}
}
for(var i=0;i<doc.toMeReply.length;i++){
articleReply[i]={from:doc.toMeReply[i].from,articleId:doc.toMeReply[i].articleId}
}
res.json({
status:'0',
publishReply,
messageReply,
articleReply
})
}
})
})
//前端渲染
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="showNoMessageFlag">现在没有任何消息哦</el-dropdown-item>
<div v-for="(judge,key) in judge" :key="key"><router-link :to="{path:'/detail',query:{id:judge.articleId}}"><el-dropdown-item>{{judge.from}} 评论了你的文章 </el-dropdown-item> </router-link></div>
<div v-for="(reply,index) in reply" :key="index"><router-link :to="{path:'/detail',query:{id:reply.articleId}}"><el-dropdown-item>{{reply.from}} 回复了你 </el-dropdown-item></router-link></div>
<div v-for="message in message" @click="sendSignal"><router-link :to="{path:'/messageDetail',query:{name:message}}" ><el-dropdown-item>{{message}} 私信了你 </el-dropdown-item></router-link></div>
</el-dropdown-menu>
</el-dropdown>