461 lines
13 KiB
Vue
461 lines
13 KiB
Vue
<template>
|
||
<view class="container">
|
||
<view class="header">
|
||
<!-- 顶部导航栏 -->
|
||
<z-nav-bar title="书评详情" bgColor="red"></z-nav-bar>
|
||
</view>
|
||
<view class="bookInfo flexbox">
|
||
<image :src="productInfo.images" mode="aspectFill"></image>
|
||
<view>
|
||
<span class="title">{{productInfo.name}}</span>
|
||
<view class="description">{{productInfo.description}}</view>
|
||
</view>
|
||
|
||
</view>
|
||
<view class="mainContent">
|
||
|
||
<view class="item">
|
||
<image v-if="commentInfo.image != ''" class="feng" :src="commentInfo.image" mode="scaleToFill" style=""></image>
|
||
<text class="title">{{commentInfo.title}}</text>
|
||
<!-- <view class="description">
|
||
|
||
</view> -->
|
||
<view class="mbtns flexbox">
|
||
<span class="time">{{commentInfo.updateTime}}</span>
|
||
<span class="flexbox opbtns">
|
||
<!-- <span class="flexbox" @click="dianzan('1')">
|
||
<u-icon name="heart" color="#55aa00" size="22"></u-icon>
|
||
<text>2656</text>
|
||
</span> -->
|
||
</span>
|
||
</view>
|
||
<view class="zhengwen" v-html="commentInfo.content"></view>
|
||
</view>
|
||
|
||
|
||
</view>
|
||
<view class="pinglunMain" >
|
||
<u-button class="addPl" type='success' plain @click="pinglun()">添加评论</u-button>
|
||
<h4>~ 精彩热评 ~</h4>
|
||
<view v-if="plList.length > 0">
|
||
<view class="item mb30" v-for="item in plList" :key="item.id">
|
||
<view class="content" v-html="item.phtml"></view>
|
||
<view class="btns flexbox">
|
||
<span class="time">{{item.createTime}}</span>
|
||
<!-- <span class="flexbox opbtns">
|
||
<span class="flexbox pingjia" @click="pinglun(item.id)">
|
||
<u-icon name="chat" color="#888" size="26"></u-icon>
|
||
</span>
|
||
</span> -->
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="quesheng" v-else>
|
||
<text>暂无评论内容~</text>
|
||
</view>
|
||
</view>
|
||
<view v-if="status==0" style="text-align: center;">
|
||
<u-loading-icon style="display: inline-block;"></u-loading-icon>
|
||
<font style='vertical-align: super;margin-left: 10px;font-size: 26rpx;color: #909399;'>努力加载中</font>
|
||
</view>
|
||
<u-divider v-if="status == 1" text="已加载全部评论"></u-divider>
|
||
<!-- 评价对话框 -->
|
||
<u-popup :show="pingjiaShow" :round="10" @close="closePingjia">
|
||
<view class="tanchu">
|
||
<view class="dp_title">添加评论</view>
|
||
<view style="max-height: 1000rpx;overflow-y: scroll;">
|
||
<!-- <u-button type="success" @click="submitPJ">提交评价</u-button> -->
|
||
<!-- 提交 -->
|
||
<view class="padding-bottom-sm flex padding-lr-sm" style="border-bottom: 1px solid #EEEEEE;">
|
||
|
||
<view class="flex-sub flexbox">
|
||
<i @click="showEmj()" :class="emojiIcon" ></i>
|
||
<!-- <input type="text" @focus="InputFocus" @blur="InputBlur" v-model="message" @input="textareaBInput" placeholder-style="font-size:24rpx;color:#aaaaaa;" placeholder="请输入您要发送的内容"></input> -->
|
||
<textarea class="textarea" v-model="Pform.comment" @focus="InputFocus" @blur="InputBlur" @input="textareaBInput" placeholder-style="font-size:24rpx;color:#aaaaaa;" placeholder="请输入您要发送的内容"></textarea>
|
||
</view>
|
||
<view class="">
|
||
<u-button type="success" @click="submitPJ">提交</u-button>
|
||
</view>
|
||
</view>
|
||
|
||
<view style="position: relative;">
|
||
<emotion @emotion="handleEmj" :height="220" v-if="isShowEmj" :windowWidth="windowWidth"></emotion>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
<music-play :playData="playData"></music-play>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import $http from '@/config/requestConfig.js';
|
||
import emotion from '@/bkhumor-emojiplus/components/bkhumor-emojiplus/bkhumor-emojiplus.vue';
|
||
import musicPlay from '@/components/music.vue'
|
||
import emojiList1 from '../../bkhumor-emojiplus/emoji/biaoqin.js'
|
||
import {
|
||
mapState
|
||
} from 'vuex';
|
||
export default {
|
||
data() {
|
||
return {
|
||
playData:{},
|
||
isShowEmj: false,
|
||
emojiIcon:'cuIcon-emoji',
|
||
windowWidth:0,
|
||
bookid:null,
|
||
bfa_id:null, //书评id
|
||
productInfo:{},
|
||
status:3,
|
||
pingjiaShow:false, //添加评价
|
||
Pform:{ // 评价表单
|
||
//star:0,
|
||
comment:'',
|
||
//img:[],
|
||
html:''
|
||
},
|
||
emoji:[],
|
||
Files:[],
|
||
commentInfo:{},
|
||
pPage:1,
|
||
pTotal:0, // 评论的总条数
|
||
pinglunId:null,
|
||
plList:[], // 书评的评论list
|
||
}
|
||
},
|
||
onLoad(e) {
|
||
this.windowWidth = uni.getSystemInfoSync().windowWidth;
|
||
console.log(e,'onload')
|
||
this.bookid = e.bookid
|
||
this.bfa_id = e.bfa_id
|
||
},
|
||
onShow() {
|
||
this.getProDetail()
|
||
this.getbookComInfo()
|
||
this.getCommPL()
|
||
},
|
||
onReachBottom() {
|
||
console.log('到底了')
|
||
if(this.pPage+1 <= this.pTotal){
|
||
this.status = 0
|
||
this.pPage++
|
||
this.getCommPL()
|
||
}else{
|
||
this.status = 3
|
||
}
|
||
},
|
||
computed:{
|
||
...mapState(['userInfo']),
|
||
},
|
||
methods: {
|
||
// 获得书评评论列表
|
||
getCommPL(){
|
||
let data = {
|
||
'bfa_id':this.bfa_id,
|
||
'limit': 5,
|
||
'page': this.pPage,
|
||
}
|
||
console.log(data,'data')
|
||
this.$http
|
||
.post('forum/comment/list', data)
|
||
.then(res => {
|
||
if(res.code == 0){
|
||
console.log(res,'书评评论')
|
||
this.plList = this.plList.concat(res.page.list)
|
||
this.pTotal = res.page.totalPage
|
||
this.status = 3
|
||
// 评论格式化
|
||
var newarr = []
|
||
this.plList.forEach((item1)=>{
|
||
var pjstr = ''
|
||
pjstr = this.getHtmlComment(item1.content)
|
||
item1.phtml = pjstr
|
||
// console.log(pjstr)
|
||
newarr.push(item1)
|
||
|
||
})
|
||
this.plList = newarr
|
||
console.log('改变格式后', this.plList)
|
||
}
|
||
}).catch((e)=>{
|
||
console.log(e)
|
||
})
|
||
},
|
||
// 获得书评详情
|
||
getbookComInfo(){
|
||
this.$http
|
||
.post(`forum/articles/appinfo/${this.bfa_id}`)
|
||
.then(res => {
|
||
if(res.code == 0){
|
||
console.log(res,'书评详细内容')
|
||
this.commentInfo = res.BookForumArticlesEntity
|
||
}
|
||
}).catch((e)=>{
|
||
console.log(e)
|
||
})
|
||
},
|
||
getProDetail(){
|
||
// 获取商品详情
|
||
uni.showLoading({
|
||
title: '加载中'
|
||
});
|
||
//console.log(e.id,'e.id')
|
||
this.$http
|
||
.post('book/book/appinfo/' + this.bookid + '/' + this.userInfo.id)
|
||
.then(res => {
|
||
console.log(res,'res')
|
||
this.productInfo = res.book
|
||
uni.hideLoading();
|
||
}).catch((e)=>{
|
||
console.log(e,'e')
|
||
})
|
||
},
|
||
// 获得输入的表情数组
|
||
handleEmj(i) {
|
||
console.log(i,'i---------');
|
||
this.inputValue = i
|
||
// console.log(this.inputValue);
|
||
if(i.emotioni == '[em_98]') {
|
||
//匹配最后一个表情符号并删除11。
|
||
this.Pform.comment = this.Pform.comment.replace(/(\[[^\]]+\]|[\s\S])$/, '');
|
||
if(this.emoji.length > 0){
|
||
this.emoji = this.emoji.slice(0,-1)
|
||
}
|
||
} else {
|
||
this.emoji.push({'tag' : i.emotion, 'name':i.emotioni})
|
||
// console.log(this.emoji,'this.emoji')
|
||
this.Pform.comment += i.emotioni;
|
||
/// this.Pform.html += i.emotion
|
||
}
|
||
},
|
||
textareaBInput(e) {
|
||
console.log(e,'e')
|
||
this.Pform.comment = e.detail.value
|
||
/// this.Pform.html = e.detail.value
|
||
},
|
||
showEmj() {
|
||
let bool = !this.isShowEmj;
|
||
if(bool) {
|
||
this.emojiIcon = 'cuIcon-keyboard';
|
||
} else {
|
||
this.emojiIcon = 'cuIcon-emoji';
|
||
}
|
||
|
||
this.isShowEmj = bool;
|
||
this.$emit('show')
|
||
},
|
||
InputBlur(e){
|
||
|
||
},
|
||
InputFocus(e){
|
||
this.isShowEmj = false;
|
||
this.emojiIcon = 'cuIcon-emoji';
|
||
this.$emit('foc')
|
||
},
|
||
|
||
// end
|
||
deleteImg(e){
|
||
// var arr = this.Pform.img.slice(0,-1)
|
||
this.Pform.img.pop()
|
||
// console.log('删除文件',arr)
|
||
console.log(this.Pform)
|
||
},
|
||
getStar(i){
|
||
this.Pform.star = i
|
||
},
|
||
select(e){
|
||
console.log('选择文件:',e)
|
||
let arr = e.tempFiles.map(item => {
|
||
return {'url':item.url,'name':item.name}
|
||
})
|
||
this.Pform.img = this.Pform.img.concat(...arr)
|
||
//this.Pform.img = arr
|
||
console.log(this.Pform,'img')
|
||
},
|
||
upSuccess(e){
|
||
console.log(e)
|
||
},
|
||
// 获取html格式的评论1
|
||
getHtmlComment(comment){
|
||
// 格式化html
|
||
// console.log(comment,'comment')
|
||
// 这里处理 链接 换行符
|
||
let replacedStr = comment.replace(/\[([^(\]|\[)]*)\]/g, (item, index) => {
|
||
// console.log(item, index)
|
||
var indexss = emojiList1.findIndex(item1 => item1.alt === item)
|
||
// console.log(indexss, 'indexss')
|
||
return '<img src="https://www.nuttyreading.com/emojis/emojis/qq/' + emojiList1[indexss].url + '" width="18rpx">';
|
||
});
|
||
// console.log(replacedStr,'replacedStr')
|
||
return replacedStr.replace(/(\r\n)|(\n)/g, '<br>');
|
||
|
||
|
||
},
|
||
deletePic() {
|
||
let that = this
|
||
that.Pform.img.splice(0, 1)
|
||
//console.log(that.Pform.img)
|
||
},
|
||
afterRead(e) {
|
||
//console.log(e)
|
||
let that = this
|
||
for (var i=0; i< e.file.length; i++) {
|
||
//console.log(i,e.file[i].url)
|
||
uni.uploadFile({
|
||
url: this.$baseUrl + 'oss/fileoss',
|
||
filePath: e.file[i].url,
|
||
//files:e.file,
|
||
name: 'file',
|
||
formData: {},
|
||
success: (res) => {
|
||
that.Pform.img.push({
|
||
url: JSON.parse(res.data).url
|
||
})
|
||
}
|
||
});
|
||
}
|
||
},
|
||
closePingjia(){
|
||
this.pingjiaShow = false
|
||
this.Pform.comment = ''
|
||
this.Pform.html = ''
|
||
this.emoji = []
|
||
},
|
||
// 点赞
|
||
dianzan(val){},
|
||
|
||
// 显示评论框
|
||
pinglun(val){
|
||
console.log(val)
|
||
this.pinglunId = val || null
|
||
this.pingjiaShow = true
|
||
},
|
||
// 提交评论
|
||
submitPJ(){
|
||
if(this.Pform.comment != ''){
|
||
|
||
let data={
|
||
'content':this.Pform.comment,
|
||
'userid':this.userInfo.id,
|
||
'bookid':this.bookid,
|
||
'bfaid' : this.bfa_id,
|
||
// 'id': this.pinglunId
|
||
}
|
||
console.log(data,'data')
|
||
$http.request({
|
||
url: "forum/comment/save",
|
||
method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
|
||
data,
|
||
header: { //默认 无 说明:请求头
|
||
'Content-Type': 'application/json'
|
||
},
|
||
}).then(res => {
|
||
if (res.code == 0) {
|
||
uni.showToast({
|
||
title:'评论成功!',
|
||
icon:'success'
|
||
})
|
||
this.getCommPL()
|
||
this.pingjiaShow = false
|
||
this.Pform.comment = ''
|
||
this.pinglunId = null
|
||
}
|
||
})
|
||
}else{
|
||
uni.showToast({
|
||
title:'请先输入您的评价内容 !',
|
||
icon:'none'
|
||
})
|
||
}
|
||
},
|
||
},
|
||
components:{
|
||
musicPlay,
|
||
emotion
|
||
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.addPl{padding-top: 20rpx; margin-bottom: 20rpx;}
|
||
.pinglunMain{
|
||
|
||
.content{margin-bottom: 15px; line-height: 40rpx; color: #666; }
|
||
background-color: #fff; padding: 10px;
|
||
h4{color: #55aa00; font-size: 40rpx; margin:30rpx 0 ; text-align: center;}
|
||
.time{color: #888; font-size: 24rpx;}
|
||
.btns{
|
||
color: #666; justify-content: space-between;
|
||
}
|
||
|
||
}
|
||
.mbtns{padding: 5px; background-color: #f4fff5; border-radius: 10px; font-size: 34rpx; color: #8b8a91; margin:15px 0; justify-content: space-between;}
|
||
.zhengwen{line-height: 50rpx; font-size: 30rpx;}
|
||
.flexbox{display: flex;}
|
||
.container{padding: 10px;}
|
||
.star{display: inline-block; width: 20px; height: 20px; margin-right: 10rpx;}
|
||
.starGray{ background : url(../../static/icon/star_greey.png) no-repeat; background-size: contain; }
|
||
.starLight{ background : url(../../static/icon/star_light.png) no-repeat; background-size: contain;}
|
||
.cuIcon-emoji {
|
||
background : url(../../static/biaoqing.png) no-repeat; background-size: contain; display: block; margin-right: 20rpx;
|
||
width: 30px; }
|
||
.cuIcon-keyboard{background : url(../../static/biaoqing.png) no-repeat; background-size: contain; display: block;
|
||
width: 30px; }
|
||
.tanchu {
|
||
padding: 40rpx 30rpx 40rpx 30rpx;
|
||
position: relative;
|
||
|
||
|
||
.dp_title {
|
||
font-size: 32rpx;
|
||
margin-bottom: 50rpx;
|
||
color: #555;
|
||
text-align: center;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.dp_add {
|
||
position: absolute;
|
||
top: 40rpx;
|
||
right: 30rpx;
|
||
font-size: 22rpx;
|
||
background-color: #fd6004;
|
||
color: #fff;
|
||
border-radius: 10rpx;
|
||
padding: 5rpx 10rpx;
|
||
|
||
.u-icon {
|
||
display: inline-block;
|
||
margin-right: 5rpx;
|
||
}
|
||
}}
|
||
|
||
.quesheng{text-align: center; margin-top: 100rpx; color: #8b8a91; padding-bottom: 20rpx;}
|
||
.bookInfo{justify-content: space-between; margin-bottom: 15px; background-color: #fff; padding:10px; border: 1px splid #999;
|
||
|
||
view{ padding-left: 30rpx;width: calc(100% - 150rpx); box-sizing: border-box;
|
||
.title{font-size: 38rpx; margin-top: 20rpx; margin-bottom: 20rpx; display: block;}
|
||
.description{line-height: 20px; width: 100%; color:#888; padding-left: 0;}
|
||
text{margin-left: 10px; line-height: 20px; color: #888; padding-left: 0;}
|
||
}
|
||
image{width: 150px; height: 150px;}
|
||
|
||
}
|
||
.mainContent{background-color: #fff;
|
||
.item{padding: 10px; margin-bottom: 30rpx;}
|
||
.feng{margin-bottom: 15px; overflow: hidden;}
|
||
.title{font-size: 38rpx; font-weight: blod; color: #55aa00; overflow: hidden;}
|
||
.description{ overflow: hidden; color: #666;
|
||
font-size: 28rpx; margin-bottom: 15px; margin-top:5px;
|
||
}
|
||
.btns{font-size: 24rpx; justify-content: space-between;
|
||
.time{font-size: 24rpx; color: #888; }
|
||
.opbtns{
|
||
.pingjia{margin-left: 10px;}
|
||
}
|
||
}
|
||
}
|
||
.mb30{margin-bottom: 30rpx; overflow: hidden;}
|
||
</style>
|