an_xiao/police_uniapp/pages/publishreview/publishreview.vue

394 lines
9.2 KiB
Vue
Raw Normal View History

2024-07-25 16:03:08 +08:00
<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>