You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
619 lines
17 KiB
619 lines
17 KiB
<template>
|
|
<view>
|
|
<view class="">
|
|
<pic-text :info="detailinfo" :isDetail="true" :index="-1" :stopVideo="stopVideo" @addComment="changeCommentNum" :currentPlay="currentPlay" @changePlay="changePlay()"></pic-text>
|
|
</view>
|
|
<view class="">
|
|
<view style="font-size: 18px;font-weight: bold;padding: 10px;color: #333;">评论</view>
|
|
<view style="padding: 0px 10px;color: #333;">
|
|
<view class="comment-item" v-for="(item, index) in commentList" :key="index">
|
|
<view class="dis-flex">
|
|
<image class="avatar2" :src="item.avatar" mode="" @click="toHomePage(item.mid)"></image>
|
|
<view class="name">{{ item.nickname }}</view>
|
|
<view style="font-size: 12px;margin-right: 20upx;" @click="like(item)">
|
|
<text v-show="!item.is_fabulous" class="iconfont icon-like" style="font-size: 30upx;padding-right: 8upx;"></text>
|
|
<text v-show="item.is_fabulous" class="iconfont icon-likefill" style="font-size: 30upx;padding-right: 8upx;color: #f00;"></text>
|
|
<text v-if="item.likenum>0">{{item.likenum}}</text>
|
|
</view>
|
|
<view style="margin-right: 20upx;" v-if="myMid == item.mid" @click="editCommentShow(item,index)">
|
|
<text class="iconfont icon-bianji" style="font-size: 30upx;padding-right: 8upx;"></text>
|
|
</view>
|
|
<view style="margin-right: 20upx;" v-if="myMid == item.mid" @click="deleteComt(item,index)">
|
|
<text class="iconfont icon-delete" style="font-size: 30upx;padding-right: 8upx;"></text>
|
|
</view>
|
|
</view>
|
|
<view style="padding-left: 38px;font-size: 14px;margin: 5px auto 10px;" @click="replyShow(item.id, item.mid, item.list, item.nickname)">{{ item.content }}</view>
|
|
<view class="dis-flex" style="padding-left: 38px;">
|
|
<view class="comment-num" @click="showReply()">{{ item.list.length }}条回复</view>
|
|
<view style="color: #999999;font-size: 12px;">{{ item.createtime }}</view>
|
|
</view>
|
|
<view class="" v-show="item.list.length>0" style="padding-left: 38px;">
|
|
<view v-for="(items,indexs) in item.list" :key="indexs" class="dis-flex" style="padding: 4px 0px;" @click="replyShow(item.id, items.smid, item.list, items.reply_name)">
|
|
<view style="flex: 1;">
|
|
<span class="name" style="color: #4280c5;">{{ items.reply_name }}</span>
|
|
<span style="font-size: 13px;margin: 0px 2px;">回复</span>
|
|
<span class="name" style="color: #4280c5;">{{ items.name }}</span>
|
|
<span style="font-size: 13px;">:</span>
|
|
<span style="font-size: 13px;margin: 0px 2px;white-space: pre-wrap;word-break: break-all;">{{ items.content }}</span>
|
|
</view>
|
|
<view>
|
|
<text class="iconfont icon-bianji" v-if="myMid == items.smid" style="color: #80A9D6;font-size: 30upx;padding-right: 20upx;" @click.stop="xghuPopShow(items,index,indexs)"></text>
|
|
<text class="iconfont icon-delete" v-if="myMid == items.smid" style="color: #ff4444;font-size: 30upx;" @click.stop="deletehcomnt(items,index,indexs)"></text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view style="text-align: center;font-size: 14px;padding: 20px;" @click="showMoreComment">
|
|
<text style="color: #f00;" v-if="!commentText">查看更多评论</text>
|
|
<text v-else>{{commentText}}</text>
|
|
</view>
|
|
</view>
|
|
<view class="">
|
|
<view style="font-size: 18px;font-weight: bold;padding: 10px;color: #333;">热门推荐</view>
|
|
<view style="padding: 0px 10px;">
|
|
<block v-for="(item, index) in communityList" :key="index">
|
|
<view @click="toDetails(item.id)" style="border-bottom: 1px solid #efefef;">
|
|
<pic-text :info="item" :index="index" :stopVideo="stopVideo" :currentPlay="currentPlay" @changePlay="changePlay()"></pic-text>
|
|
</view>
|
|
</block>
|
|
</view>
|
|
</view>
|
|
<!-- 评论弹窗 -->
|
|
<view style="width: 100%;height: 100%;position: fixed;top: 0;left: 0;z-index:9;
|
|
background-color: rgba(0,0,0,.3);" v-if="rpShow" @click.stop="closeRpShow"></view>
|
|
<view class="reply-wrapper" v-if="rpShow">
|
|
<textarea @click.stop class="my-text" v-model="rpText" name="" id="" cols="30" rows="10" placeholder="回复"></textarea>
|
|
<button type="primary" style="margin: 20rpx 80rpx;border-radius: 50px;" @click.stop="reply">发送</button>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
// 这个页面参考 'pages/subPages/postDetails/postDetails?id='
|
|
import App from '@/common/js/app.js';
|
|
|
|
import picText from "@/components/template/pic_text/pic_text.vue"
|
|
export default {
|
|
data() {
|
|
return {
|
|
detailinfo: {},
|
|
id: null,//帖子id
|
|
commentList: [],
|
|
commentPage: 1,
|
|
page_index: 10,
|
|
forwardTotal: 0,
|
|
commentTotal: null,
|
|
appreciateTotal: 0,
|
|
commentText: null,//文字“查看更多评论”
|
|
communityList: [],//热门推荐
|
|
page_index: 10,
|
|
indexShow: -1,
|
|
rpText: '',//回复。修改回复。修改评论弹出框
|
|
rpShow: false,
|
|
myMid: null,
|
|
items: [],
|
|
commentItem: {},//编辑评论时的信息
|
|
popType: "",//edReply编辑回复,edCom编辑评论
|
|
CommentNum: 1, //1增加评论,2删除评论
|
|
stopVideo: 0,
|
|
scrollLock: false,
|
|
scrollTimer: null,
|
|
currentPlay: -2,//当前正在播放的视频在列表中的索引,-2表示没有正在播放,-1是帖子详情的视频
|
|
}
|
|
},
|
|
components:{
|
|
picText
|
|
},
|
|
onLoad(e) {
|
|
let _this = this;
|
|
_this.id = e.id;
|
|
uni.setStorageSync('DetailsId',_this.id);
|
|
_this.poster = uni.getStorageSync('platformInfor').videoimg;
|
|
_this.myMid = uni.getStorageSync('userinfo').mid;
|
|
_this.examine = e.examine || 0;
|
|
uni.getStorage({
|
|
key: 'location',
|
|
success: function(res) {
|
|
_this.lat = res.data.latitude;
|
|
_this.lng = res.data.longitude;
|
|
}
|
|
});
|
|
|
|
this.commentList = [];
|
|
this.init(this.id);
|
|
this.getHotList();
|
|
},
|
|
onShow() {
|
|
},
|
|
methods: {
|
|
init(id){
|
|
let _this = this,
|
|
client = App.getClientType();
|
|
_this.getCommentList(id);
|
|
let curLoction = uni.getStorageSync('curLoction'),
|
|
// 手动选择位置信息
|
|
agencyData = uni.getStorageSync('agencyData');
|
|
if (client === "1" || client === "3") {
|
|
if (!!curLoction) {
|
|
if (!!agencyData) {
|
|
_this.getDetailinfo(id, curLoction)
|
|
} else {
|
|
App.getAreaId(curLoction, "", "", (options) => {
|
|
console.log(options,'post1');
|
|
_this.getDetailinfo(id, curLoction)
|
|
})
|
|
}
|
|
} else {
|
|
if (!!agencyData) {
|
|
_this.getDetailinfo(id, _this.currentLoction)
|
|
} else {
|
|
App.getLocation().then(res => {
|
|
App.getAreaId(res, "", "", (options) => {
|
|
_this.$nextTick(function() {
|
|
_this.getDetailinfo(id, res)
|
|
})
|
|
});
|
|
_this.setData({
|
|
currentLoction: res
|
|
});
|
|
uni.setStorageSync('curLoction', res);
|
|
})
|
|
}
|
|
}
|
|
} else {
|
|
_this.getDetailinfo(id)
|
|
}
|
|
},
|
|
getCommentList(id){
|
|
let _this = this;
|
|
let data = {
|
|
id: _this.id || id,
|
|
page: _this.commentPage,
|
|
page_index: _this.page_index
|
|
};
|
|
App._post_form('&p=pocket&do=commentList', data, res => {
|
|
_this.commentList = [..._this.commentList, ...res.data.list];
|
|
_this.commentTotal = res.data.total;
|
|
if (_this.commentPage == res.data.total || res.data.list.length < 2) {
|
|
_this.commentText = '已无更多数据';
|
|
}else{
|
|
_this.commentText = null;
|
|
}
|
|
});
|
|
},
|
|
showMoreComment(){
|
|
let _this = this;
|
|
if (!_this.commentText) {
|
|
if (_this.page_index == 2) {
|
|
_this.page_index = 10;
|
|
let data = {
|
|
id: _this.id,
|
|
page: _this.commentPage,
|
|
page_index: _this.page_index
|
|
};
|
|
App._post_form('&p=pocket&do=commentList', data, res => {
|
|
_this.commentList = res.data.list;
|
|
_this.commentTotal = res.data.total;
|
|
if (_this.commentPage == res.data.total) {
|
|
_this.commentText = '已无更多数据';
|
|
}
|
|
});
|
|
} else {
|
|
_this.commentPage++;
|
|
_this.page_index = 10;
|
|
_this.getCommentList();
|
|
}
|
|
}
|
|
},
|
|
// 获取帖子详细信息
|
|
getDetailinfo(id = "", location = "") {
|
|
let _this = this;
|
|
let data = {
|
|
id: _this.id || id,
|
|
lat: !!location ? location.latitude : "",
|
|
lng: !!location ? location.longitude : "",
|
|
examine: _this.examine
|
|
};
|
|
App._post_form(
|
|
'&p=pocket&do=detail',
|
|
data,
|
|
res => {
|
|
let newData = {...res.data}
|
|
newData.comment_list = {total:newData.comment_total};//传给组件需要
|
|
newData.id = _this.id;//传给组件需要
|
|
_this.setData({
|
|
detailinfo: newData,
|
|
})
|
|
},
|
|
fail => {
|
|
if (fail.message == '掌上信息已关闭') {
|
|
App.navigationTo({
|
|
url: 'pages/mainPages/index/index'
|
|
});
|
|
}
|
|
}
|
|
);
|
|
},
|
|
getHotList(page = 1, isPage = false){
|
|
let _this = this;
|
|
let data = {
|
|
id: 0,//0对应掌上生活的全部类目
|
|
two_id: undefined,
|
|
page,
|
|
page_index: _this.page_index,
|
|
homeflag: 1,
|
|
keyword:'',
|
|
};
|
|
|
|
App._post_form('&p=pocket&do=infoList', data, res => {
|
|
console.log(res, '--------------')
|
|
let list = [];
|
|
if (!isPage) {
|
|
if (res.data.list.length > 0) {
|
|
list = res.data.list;
|
|
list = list.sort(function(){// 乱序一下
|
|
return Math.random() - 0.5;
|
|
});
|
|
_this.setData({
|
|
communityList: list
|
|
})
|
|
} else {
|
|
|
|
}
|
|
} else {
|
|
|
|
};
|
|
});
|
|
},
|
|
lookimg(){},
|
|
operationShow(e) {},
|
|
getover(id,bor){},
|
|
changeCommentNum(data){
|
|
if(this.CommentNum === 1){
|
|
this.commentList.unshift(data);
|
|
let newData = {...this.detailinfo}
|
|
newData.comment_list.total++;//传给组件需要
|
|
this.setData({
|
|
detailinfo: newData,
|
|
})
|
|
}else{
|
|
let newData = {...this.detailinfo}
|
|
newData.comment_list.total--;//传给组件需要
|
|
this.setData({
|
|
detailinfo: newData,
|
|
})
|
|
this.CommentNum = 1;
|
|
}
|
|
},
|
|
// 打开编辑评论弹框
|
|
editCommentShow(item,index){
|
|
let _this = this;
|
|
_this.commentItem = item;
|
|
_this.commentItem.index = index;
|
|
_this.rpText = item.content;
|
|
_this.rpShow = true;
|
|
_this.popType = 'edCom';
|
|
},
|
|
// 修改评论
|
|
changeComment(){
|
|
let _this = this;
|
|
if(_this.rpText == _this.commentItem.content){
|
|
uni.showToast({
|
|
icon:'none',
|
|
title:'请先进行修改'
|
|
});
|
|
return
|
|
}
|
|
let datas = {
|
|
id:_this.commentItem.id,
|
|
type:1,
|
|
text:_this.rpText
|
|
}
|
|
App._post_form('&p=pocket&do=changeComment', datas, res =>{
|
|
uni.showToast({
|
|
title: '修改成功'
|
|
})
|
|
_this.commentList.map((item,index)=>{
|
|
if(index == _this.commentItem.index){
|
|
item.content = _this.rpText
|
|
}
|
|
});
|
|
_this.rpText = '';
|
|
_this.rpShow = false;
|
|
_this.commentItem = {};
|
|
})
|
|
},
|
|
/** 删除评论
|
|
* @param {Object} item
|
|
* @param {Object} index
|
|
*/
|
|
deleteComt(item,index){
|
|
let _this = this;
|
|
let datas = {
|
|
id:item.id,
|
|
type:0
|
|
}
|
|
App.showError(
|
|
`确认删除此条评论?`,
|
|
data => {
|
|
if (data.confirm) {
|
|
App._post_form('&p=pocket&do=changeComment', datas, res => {
|
|
// _this.plShow = false;
|
|
App.showSuccess('删除成功', () => {
|
|
_this.commentList.map((items,indexs)=>{
|
|
if(index == indexs){
|
|
_this.commentList.splice(indexs,1);
|
|
}
|
|
});
|
|
_this.CommentNum = 2;
|
|
_this.changeCommentNum();
|
|
})
|
|
},fail=>{
|
|
});
|
|
}
|
|
},
|
|
true
|
|
);
|
|
},
|
|
//关闭评论窗口
|
|
closeRpShow(){
|
|
this.rpShow = false;
|
|
},
|
|
// 打开回复弹窗
|
|
replyShow(cid, amid, items, name) {
|
|
let _this = this;
|
|
_this.rpShow = true;
|
|
_this.cid = cid;//主评论id
|
|
_this.amid = amid;//任意被回复用户的id
|
|
_this.items = items;//主评论的回复列表
|
|
_this.name = name;//任意被回复用户的name
|
|
console.info(_this.items);
|
|
},
|
|
// 发送回复、编辑回复、编辑评论
|
|
reply(){
|
|
if(this.commentItem.content){// 编辑
|
|
if(this.popType=='edReply'){
|
|
this.changeReply();
|
|
return;
|
|
}else if(this.popType=='edCom'){
|
|
this.changeComment();
|
|
return;
|
|
}
|
|
}
|
|
let _this = this;
|
|
let data = {
|
|
id: _this.id,//帖子id
|
|
cid: _this.cid,//主评论id
|
|
amid: _this.amid,//任意被回复用户的id
|
|
text: _this.rpText
|
|
};
|
|
App._post_form('&p=pocket&do=reply', data, res => {
|
|
_this.rpShow = false;
|
|
// _this.isComment = false;
|
|
let arr = {
|
|
content: _this.rpText,
|
|
reply_name: uni.getStorageSync('userinfo').nickname,
|
|
name: _this.name,//任意被回复用户的name
|
|
smid:_this.myMid,//写回复用户的id
|
|
id:res.data
|
|
};
|
|
console.info(_this.items);
|
|
_this.items.push(arr);
|
|
_this.rpText = '';
|
|
uni.showToast({
|
|
title: res.message,
|
|
icon: 'none'
|
|
})
|
|
});
|
|
},
|
|
/** 打开编辑回复弹窗
|
|
* @param {Object} data 回复的信息
|
|
* @param {Object} index 主评论的索引
|
|
* @param {Object} indexs 回复信息的索引
|
|
*/
|
|
xghuPopShow(data,index,indexs){
|
|
let _this = this;
|
|
_this.commentItem = data;
|
|
_this.commentItem.index = index;
|
|
_this.commentItem.indexs = indexs;
|
|
_this.rpText = data.content;
|
|
_this.rpShow = true;
|
|
console.log(this.commentItem);
|
|
_this.popType = 'edReply';
|
|
},
|
|
/** 修改回复
|
|
* @param {Object} type
|
|
*/
|
|
changeReply(type){
|
|
let _this = this,
|
|
data = {
|
|
id: _this.commentItem.id,
|
|
type: 1,
|
|
text: _this.rpText
|
|
};
|
|
App._post_form('&p=pocket&do=changeReply', data, res => {
|
|
_this.rpShow = false;
|
|
uni.showToast({
|
|
title:'修改成功'
|
|
});
|
|
_this.commentList.map((item,index)=>{
|
|
if(index == _this.commentItem.index){
|
|
item.list.map((items,indexs)=>{
|
|
if(indexs == _this.commentItem.indexs){
|
|
items.content = _this.rpText;
|
|
}
|
|
})
|
|
}
|
|
})
|
|
_this.rpText = '';
|
|
_this.commentItem = {};
|
|
});
|
|
},
|
|
/** 删除回复
|
|
* @param {Object} item
|
|
* @param {Object} index
|
|
* @param {Object} indexs
|
|
*/
|
|
deletehcomnt(item,index,indexs){
|
|
let _this = this;
|
|
let datas = {
|
|
id:item.id,
|
|
type:0
|
|
}
|
|
App.showError(
|
|
`确认删除此条评论?`,
|
|
data => {
|
|
if (data.confirm) {
|
|
App._post_form('&p=pocket&do=changeReply', datas, res => {
|
|
// _this.plShow = false;
|
|
App.showSuccess('删除成功', () => {
|
|
_this.commentList.map((items,i)=>{
|
|
if(index == i){
|
|
items.list.map((itemss,indexss)=>{
|
|
if(indexss == indexs){
|
|
_this.commentList[i].list.splice(indexs,1);
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
})
|
|
},fail=>{
|
|
// _this.isComment = false;
|
|
});
|
|
}
|
|
},
|
|
true
|
|
);
|
|
},
|
|
like(item){
|
|
App._post_form('&p=pocket&do=fabulousReply', {id: item.id}, res => {
|
|
if(item.is_fabulous){
|
|
uni.showToast({
|
|
title: '取消成功',
|
|
icon:'none'
|
|
})
|
|
item.likenum--;
|
|
item.is_fabulous = false;
|
|
}else{
|
|
uni.showToast({
|
|
title: '点赞成功',
|
|
icon:'none'
|
|
})
|
|
item.likenum++;
|
|
item.is_fabulous = true;
|
|
}
|
|
})
|
|
},
|
|
// 跳转正文详情
|
|
toDetails(id){
|
|
uni.navigateTo({
|
|
url:"/pagesA/pictureTextDetails/pictureTextDetails?id=" + id
|
|
})
|
|
},
|
|
toHomePage(mid){
|
|
App.navigationTo({
|
|
url: 'pages/subPages/homepage/homepage/homepage?mid=' + mid + '&checkType=' + 1
|
|
});
|
|
},
|
|
handlerScroll(){
|
|
if(this.scrollLock){
|
|
clearTimeout(this.scrollTimer);
|
|
}
|
|
this.scrollTimer = setTimeout(()=>{
|
|
this.scrollLock = false;
|
|
this.stopVideo++;
|
|
}, 500)
|
|
},
|
|
changePlay(e){
|
|
this.stopVideo++;//先关闭上一个播放的按钮,再改变当前播放索引=最新播放视频索引
|
|
this.currentPlay = e;
|
|
}
|
|
},
|
|
onShareAppMessage(res){
|
|
let _this = this;
|
|
let listId;
|
|
if (res.from === 'button') {// 来自页面内分享按钮
|
|
listId = res.target.id;
|
|
// let title = res.target.dataset.title;
|
|
}else{//右上角按钮
|
|
listId = this.id;
|
|
}
|
|
App._post_form('&p=pocket&do=shareNum', { id: listId }, res => {
|
|
if(listId == _this.id){
|
|
_this.detailinfo.share++;
|
|
}else{
|
|
for(let index=0;index<_this.communityList.length;index++){
|
|
if(_this.communityList[index].id == listId){
|
|
_this.communityList[index].share++;
|
|
}
|
|
}
|
|
}
|
|
setTimeout(()=>{
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '分享成功',
|
|
duration: 2000
|
|
});
|
|
}, 2000)
|
|
});
|
|
return {
|
|
title: '粤职才',
|
|
path: '/pagesA/pictureTextDetails/pictureTextDetails?id='+listId
|
|
}
|
|
},
|
|
onPageScroll(){
|
|
//页面滚动,视频暂停
|
|
this.scrollLock = true;
|
|
this.handlerScroll();
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.dis-flex{
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.comment-item{
|
|
padding: 10px 0px;
|
|
border-bottom: 1px solid #efefef;
|
|
.avatar2{
|
|
width: 30px;
|
|
height: 30px;
|
|
background-color: #000;
|
|
border-radius: 50%;
|
|
margin-right: 8px;
|
|
}
|
|
.name{
|
|
font-size: 13px;
|
|
flex: 1;
|
|
}
|
|
.comment-num{
|
|
padding: 2px 8px;
|
|
border-radius: 20px;
|
|
background-color: #efefef;
|
|
margin-right: 8px;
|
|
font-size: 13px;
|
|
}
|
|
}
|
|
.reply-wrapper{
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
z-index: 9;
|
|
width: 560rpx;
|
|
height: 430rpx;
|
|
background-color: #fff;
|
|
border-radius: 20px;
|
|
transform: translate(-50%, -50%);
|
|
box-shadow: 0px 0px 3px 0px rgba(0,0,0,.05);
|
|
|
|
.my-text{
|
|
padding: 50rpx 30rpx;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
}
|
|
}
|
|
</style>
|
|
|