394 lines
9.2 KiB
Vue
394 lines
9.2 KiB
Vue
<template>
|
||
<view class="publishre">
|
||
<view class="publishreItem">
|
||
<view style="color: #333333;">{{optionItems.title}}</view>
|
||
<view class="publishreindex">发布时间:{{optionItems.timestamp}}</view>
|
||
<view class="publishreindex">作者:{{optionItems.creator}}</view>
|
||
<view class="publishreindex">单位:{{optionItems.borough}}{{ '--'+optionItems.station}}</view>
|
||
</view>
|
||
<view class="imagetext">
|
||
<view>
|
||
<view v-for="(item,index) in optionItems.imageUrls" :key="index" style="text-align: center;">
|
||
<image :lazy-load="true" show-menu-by-longpress='1' style="height: 460rpx;width: 95%;"
|
||
:src="'https://www.lonsungsh.com:8083' + item" @click="srcIndex(item,index)"></image>
|
||
</view>
|
||
<view class="Text" style="padding: 0 0 40rpx 30rpx">
|
||
<p class="TextITem">
|
||
{{optionItems.comment?optionItems.comment:'无'}}
|
||
</p>
|
||
</br>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<u-overlay :show="showUrl" @click="showUrl = false">
|
||
<view class="warp">
|
||
<movable-area :scale-area="true" style="width: 100vh;">
|
||
<movable-view direction="all" style="width: 348px; height: 300px;" @scale="onScale" scale="true"
|
||
scale-min="1" scale-max="4" :scale-value="scale" :x="1" :y="10">
|
||
<image class="rect" :src="showUrlList" mode="widthFix"></image>
|
||
</movable-view>
|
||
</movable-area>
|
||
</view>
|
||
</u-overlay>
|
||
|
||
|
||
<view>
|
||
<u-popup :show="popupshow" mode="bottom" @close="popupshow = false" @open="open" v-if="popupshow">
|
||
<view class="flex justify-between ai-end padding-sm mb-1 mt-1">
|
||
<view class="com-textarea-box">
|
||
<u--textarea :height="190" :cursorSpacing="100" class="com-textarea" :focus="focus"
|
||
:showConfirmBar="false" placeholder="请留下您的感想" maxlength="300"></u--textarea>
|
||
<span>回复</span>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
</view>
|
||
|
||
<!-- 评论点赞 -->
|
||
<view class="review">
|
||
<view style="display: flex;">
|
||
<!-- @tap.stop="showComments()" -->
|
||
<view class="reviewItem">
|
||
<image style="width: 100%;height: 100%;" src="../../static/campus/评论.png"></image>
|
||
</view>
|
||
<span style="color: #818181;font-size: 12px;margin-right: 10rpx;">{{this.reviewdataList.length}}</span>
|
||
<!-- <view style="width: 30rpx;height: 30rpx;">
|
||
<u-icon name="heart" color="#818181" size="32"></u-icon>
|
||
</view>
|
||
<span style="color: #818181;font-size: 12px;">1134</span> -->
|
||
</view>
|
||
<view style="display: flex;">
|
||
<!-- <view style="width: 30rpx;height: 30rpx;">
|
||
<u-icon name="heart" color="#818181" size="32"></u-icon>
|
||
</view>
|
||
<span style="color: #489dea;font-size: 12px;">赞一个</span> -->
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 评论 -->
|
||
<view style="padding: 20rpx 0 0 30rpx;display: flex;width: 93%;">
|
||
<view style="width: 50rpx; height: 47rpx;">
|
||
<image style="width: 100%;height: 100%;" src="../../static/campus/评论区头像.png"></image>
|
||
</view>
|
||
<view :class="[!titleFocus?'reviewnumber':'reviewn']">
|
||
<view :class="[!titleFocus?'textareaItem':'textareaIndex']">
|
||
<textarea @focus="onfocus" class="textarea" auto-height v-model="titleFocus"
|
||
:placeholder="titleFocus || '请留下您的感想' " />
|
||
</view>
|
||
</view>
|
||
<view v-if="titleFocus">
|
||
<view style="color: ivory">1</view>
|
||
<view class="publish" @click="onSend">发送</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 评论数据展示 1-->
|
||
<view v-if="reviewdataList.length" style="padding-bottom: 50px">
|
||
<view v-for="(item,index) in reviewdataList" :key="item.id">
|
||
<view style="padding: 20rpx 0 0 30rpx;display: flex;width: 93%;">
|
||
<view style="width: 50rpx; height: 47rpx;">
|
||
<image style="width: 100%;height: 100%;" :src="item.url"></image>
|
||
</view>
|
||
<view class="reviewList">
|
||
<view>
|
||
<span
|
||
style="color: #333333;font-size: 13px;display: inline-block;width: 160rpx;">{{item.personName}}</span>
|
||
<span style="color: #818282; font-size: 12px;">{{item.timestamp}}</span>
|
||
</view>
|
||
<view style="color: #818282; font-size: 12px;margin: 10rpx 0 30rpx 0;">{{item.data}}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else style="padding: 0 22px">
|
||
<u-divider text="暂无评论" textSize="24"></u-divider>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import urlTile from '../../static/campus/评论区头像.png'
|
||
import {
|
||
watch
|
||
} from 'vue'
|
||
import {
|
||
getremarkAdd,
|
||
getremarkgetlist
|
||
} from '@/api/login.js'
|
||
import {
|
||
mapGetters,
|
||
mapMutations
|
||
} from 'vuex';
|
||
import {
|
||
getTime
|
||
} from '@/utils/index.js'
|
||
export default {
|
||
data() {
|
||
return {
|
||
scale: 1,
|
||
showUrl: false,
|
||
showUrlList: '',
|
||
show: false,
|
||
title: '发布评论',
|
||
titleFocus: '',
|
||
reviewdataList: [],
|
||
optionItems: undefined,
|
||
popupshow: false
|
||
}
|
||
},
|
||
created() {},
|
||
onLoad: function(options) {
|
||
const that = this
|
||
// uni.$on('value', (data) => {
|
||
// data.imageUrls = JSON.parse(data.imageUrls)
|
||
// that.optionItems = data
|
||
// this.getremarkget()
|
||
// console.log(data);
|
||
// })
|
||
},
|
||
onShow() {
|
||
const that = this
|
||
const dataList = uni.getStorageSync('valueList')
|
||
const data = JSON.parse(dataList)
|
||
data.imageUrls = JSON.parse(data.imageUrls)
|
||
that.optionItems = data
|
||
this.getremarkget()
|
||
},
|
||
onUnload() {
|
||
// 移除监听事件
|
||
uni.$off('value');
|
||
},
|
||
beforeDestroy() {
|
||
uni.removeStorage({key:'valueList'})
|
||
},
|
||
computed: {
|
||
// 拿取vuex数据
|
||
...mapGetters({
|
||
userInfo: 'users/getLoginInfo',
|
||
})
|
||
},
|
||
methods: {
|
||
showComments() {
|
||
this.popupshow = true;
|
||
},
|
||
open() {
|
||
this.popupshow = true;
|
||
console.log('open');
|
||
},
|
||
onfocus(e) {},
|
||
cancel() {
|
||
this.titleFocus = ''
|
||
this.show = false
|
||
},
|
||
async getremarkget() {
|
||
const that = this
|
||
const resp = await getremarkgetlist({
|
||
newsId: that.optionItems.newsId,
|
||
personId: that.userInfo.id,
|
||
})
|
||
resp.data.map((item) => {
|
||
return item['url'] = require('../../static/campus/评论区头像.png')
|
||
})
|
||
// resp.data.map((item) => {
|
||
// return item['time'] = getTime(item.timestamp)
|
||
// })
|
||
that.reviewdataList = resp.data
|
||
},
|
||
// 发送评论
|
||
async onSend() {
|
||
const that = this
|
||
const listremark = {
|
||
newsId: that.optionItems.newsId,
|
||
personId: that.userInfo.id,
|
||
personName: that.userInfo.name,
|
||
data: that.titleFocus
|
||
}
|
||
const resp = await getremarkAdd(listremark)
|
||
uni.showLoading({
|
||
title: '正在评论中...'
|
||
});
|
||
setTimeout(() => {
|
||
uni.hideLoading();
|
||
uni.showToast({
|
||
title: '评论成功',
|
||
icon: 'success',
|
||
mask: true,
|
||
success() {
|
||
that.titleFocus = ''
|
||
that.getremarkget()
|
||
}
|
||
});
|
||
}, 800);
|
||
},
|
||
srcIndex(item, index) {
|
||
console.log(item, index);
|
||
this.showUrl = true
|
||
this.showUrlList = 'https://www.lonsungsh.com:8083' + item
|
||
},
|
||
// 缩放
|
||
onScale(e) {
|
||
console.log(e, '22');
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.publishre {
|
||
.publishreItem {
|
||
padding: 30rpx;
|
||
|
||
.publishreindex {
|
||
font-size: 12px;
|
||
margin-top: 18rpx;
|
||
color: #989898;
|
||
}
|
||
|
||
}
|
||
|
||
.imagetext {
|
||
.Text {
|
||
// height: 200rpx;
|
||
width: 97%;
|
||
font-size: 12px;
|
||
// border: 1px solid #989898;
|
||
|
||
.TextITem {
|
||
text-indent: 24px;
|
||
letter-spacing: 6rpx
|
||
}
|
||
}
|
||
}
|
||
|
||
.review {
|
||
padding: 30rpx 0 15rpx 0;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
border-bottom: solid 1px #d6d6d6;
|
||
margin: 0 28rpx;
|
||
overflow: hidden;
|
||
|
||
.reviewItem {
|
||
width: 30rpx;
|
||
height: 30rpx;
|
||
}
|
||
}
|
||
|
||
.reviewnumber {
|
||
background-color: #f0f0f0;
|
||
// height: 60rpx;
|
||
margin-left: 15rpx;
|
||
width: 100%;
|
||
// width: 310px;
|
||
line-height: 50rpx;
|
||
border-radius: 18rpx;
|
||
transition: all 0.5s ease-out;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.reviewn {
|
||
background-color: #f0f0f0;
|
||
// height: 60rpx;
|
||
margin-left: 15rpx;
|
||
width: 70%;
|
||
line-height: 50rpx;
|
||
border-radius: 18rpx;
|
||
transition: all 0.3s ease-out;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.textareaItem {
|
||
margin-left: 20rpx;
|
||
font-size: 11px;
|
||
margin-top: 4rpx;
|
||
height: 38rpx
|
||
}
|
||
|
||
.textareaIndex {
|
||
margin-left: 20rpx;
|
||
font-size: 11px;
|
||
margin-top: 4rpx;
|
||
height: 38rpx
|
||
}
|
||
|
||
.publish {
|
||
width: 72rpx;
|
||
height: 35rpx;
|
||
border-radius: 23rpx;
|
||
background-color: #fc2b55;
|
||
color: #fff;
|
||
line-height: 35rpx;
|
||
font-size: 12px;
|
||
margin-top: 8rpx;
|
||
text-align: center;
|
||
margin-left: 10rpx;
|
||
}
|
||
|
||
.reviewList {
|
||
width: 100%;
|
||
margin-left: 15rpx;
|
||
border-bottom: solid 1px #d6d6d6;
|
||
}
|
||
|
||
.textarea {
|
||
width: 97%;
|
||
line-height: normal;
|
||
margin-top: 13rpx;
|
||
}
|
||
|
||
.warp {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
// width: 93%;
|
||
height: 258rpx;
|
||
transform: translate(15px, 86%); // height: 100%;
|
||
|
||
.rect {
|
||
width: 100%;
|
||
height: 100%;
|
||
// background-color: #fff;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
.swiper {
|
||
height: 500rpx;
|
||
}
|
||
|
||
.swiper-item {
|
||
display: block;
|
||
height: 300rpx;
|
||
line-height: 300rpx;
|
||
text-align: center;
|
||
}
|
||
|
||
.swiper-list {
|
||
margin-top: 40rpx;
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
</style>
|
||
|
||
<style lang="scss">
|
||
.justify-between {
|
||
height: 128px;
|
||
.com-textarea-box {
|
||
width: 85%;
|
||
display: flex;
|
||
align-items: baseline;
|
||
.com-textarea {
|
||
textarea {
|
||
min-height: 200rpx;
|
||
padding: 20rpx;
|
||
background: rgba(51, 51, 51, 0.02);
|
||
color: #000 !important;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style> |