295 lines
7.7 KiB
Vue
295 lines
7.7 KiB
Vue
|
|
<template>
|
|||
|
|
<ai-detail class="detail">
|
|||
|
|
<template slot="title">
|
|||
|
|
<ai-title title="帖子详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
|
|||
|
|
</ai-title>
|
|||
|
|
</template>
|
|||
|
|
<template slot="content">
|
|||
|
|
<ai-card title="帖子信息">
|
|||
|
|
<template #content>
|
|||
|
|
<div class="talk-info">
|
|||
|
|
<div class="user">
|
|||
|
|
<img :src="info.createUserAvatar" alt="">
|
|||
|
|
<div class="info">
|
|||
|
|
<h2>{{info.createUserName}}</h2>
|
|||
|
|
<div class="time-flex">
|
|||
|
|
<span class="area-name">{{info.publishDepartName}}</span>
|
|||
|
|
<span>{{info.createTime}}</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="content">
|
|||
|
|
<span v-if="info.themeId">#【{{info.themeInfo.title}}】</span>{{info.content}}
|
|||
|
|
</div>
|
|||
|
|
<ai-uploader :instance="instance" disabled v-model="info.files">
|
|||
|
|
</ai-uploader>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
</ai-card>
|
|||
|
|
<ai-card title="评论信息">
|
|||
|
|
<template #content>
|
|||
|
|
<div class="comment-list" v-if="commontList.length">
|
|||
|
|
<div class="title">评论</div>
|
|||
|
|
<div class="item" v-for="(item, index) in commontList" :key="index">
|
|||
|
|
<div class="user">
|
|||
|
|
<img :src="item.createUserAvatar" alt="">
|
|||
|
|
<div class="info-flex">
|
|||
|
|
<h2>{{item.createUserName}}</h2>
|
|||
|
|
<span>{{item.createTime}}</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="content-flex">
|
|||
|
|
<p>{{item.content}}</p>
|
|||
|
|
<div @click="delCommontOrReply('评论', item.id)">删除</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="reply-list" v-if="item.replyList && item.replyList.length && item.isShowReply">
|
|||
|
|
<div class="reply-item" v-for="(reply, indexs) in item.replyList" :key="indexs">
|
|||
|
|
<div class="reply-user">
|
|||
|
|
<img :src="item.createUserAvatar" alt="">
|
|||
|
|
<div class="reply-name">
|
|||
|
|
<span>{{reply.createUserName}}</span>回复<span>{{item.createUserName}}</span>
|
|||
|
|
</div>
|
|||
|
|
<span class="reply-time">{{reply.createTime}}</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="content-flex">
|
|||
|
|
<p>{{reply.content}}</p>
|
|||
|
|
<div @click="delCommontOrReply('回复', reply.id)">删除</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="reply-more" @click="item.isShowReply = !item.isShowReply" :class="[item.isShowReply ? 'active' : '']">
|
|||
|
|
<span class="line"></span>{{item.isShowReply ? '收起' : `展开${item.replyList.length}条回复`}}
|
|||
|
|
<i class="el-icon-arrow-down"></i>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<ai-empty v-else>暂无评论</ai-empty>
|
|||
|
|
</template>
|
|||
|
|
</ai-card>
|
|||
|
|
</template>
|
|||
|
|
</ai-detail>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
export default {
|
|||
|
|
name: 'Detail',
|
|||
|
|
|
|||
|
|
props: {
|
|||
|
|
instance: Function,
|
|||
|
|
dict: Object,
|
|||
|
|
params: Object
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
data () {
|
|||
|
|
return {
|
|||
|
|
commontList: [],
|
|||
|
|
info: {},
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
computed: {
|
|||
|
|
getAvatar(row){
|
|||
|
|
return row.avatar||row.photo||'https://cdn.cunwuyun.cn/dvcp/h5/defaultAvatar.png'
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
created () {
|
|||
|
|
this.getInfo()
|
|||
|
|
this.getList()
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
methods: {
|
|||
|
|
getList() {
|
|||
|
|
this.instance.post(`/app/appneighborhoodassistance/commontList?id=${this.params.id}&size=100`).then(res => {
|
|||
|
|
if (res.code == 0) {
|
|||
|
|
res.data.records.map((item) => {
|
|||
|
|
item.isShowReply = false
|
|||
|
|
})
|
|||
|
|
this.commontList = res.data.records
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
getInfo () {
|
|||
|
|
this.instance.post(`/app/appneighborhoodassistance/queryDetailById?id=${this.params.id}`).then(res => {
|
|||
|
|
if (res.code == 0) {
|
|||
|
|
if (res.data) {
|
|||
|
|
this.info = res.data
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
cancel () {
|
|||
|
|
this.$emit('change', {
|
|||
|
|
type: 'List',
|
|||
|
|
isRefresh: true
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
delCommontOrReply(text, id) {
|
|||
|
|
this.$confirm(`确定删除该${text}?`).then(() => {
|
|||
|
|
this.instance.post(`/app/appneighborhoodassistance/delComment?id=${id}`).then(res => {
|
|||
|
|
if (res.code == 0) {
|
|||
|
|
this.$message.success('删除成功!')
|
|||
|
|
this.getList()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.detail {
|
|||
|
|
.talk-info {
|
|||
|
|
.user {
|
|||
|
|
display: flex;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
img {
|
|||
|
|
width: 60px;
|
|||
|
|
height: 60px;
|
|||
|
|
margin-right: 16px;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
}
|
|||
|
|
.info {
|
|||
|
|
width: calc(100% - 76px);
|
|||
|
|
h2 {
|
|||
|
|
font-size: 20px;
|
|||
|
|
line-height: 30px;
|
|||
|
|
font-weight: 400;
|
|||
|
|
}
|
|||
|
|
.time-flex {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
color: #999;
|
|||
|
|
font-size: 14px;
|
|||
|
|
line-height: 30px;
|
|||
|
|
.area-name {
|
|||
|
|
color: #666;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.content {
|
|||
|
|
font-size: 16px;
|
|||
|
|
line-height: 32px;
|
|||
|
|
word-break: break-all;
|
|||
|
|
span {
|
|||
|
|
color: #26f;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.comment-list {
|
|||
|
|
.title {
|
|||
|
|
color: #333;
|
|||
|
|
font-size: 16px;
|
|||
|
|
font-weight: 700;
|
|||
|
|
line-height: 40px;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
}
|
|||
|
|
.item {
|
|||
|
|
border-bottom: 1px solid #ddd;
|
|||
|
|
padding-bottom: 16px;
|
|||
|
|
.user {
|
|||
|
|
display: flex;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
img {
|
|||
|
|
width: 60px;
|
|||
|
|
height: 60px;
|
|||
|
|
margin-right: 16px;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
}
|
|||
|
|
.info-flex {
|
|||
|
|
width: calc(100% - 76px);
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
line-height: 60px;
|
|||
|
|
h2 {
|
|||
|
|
font-size: 20px;
|
|||
|
|
font-weight: 400;
|
|||
|
|
}
|
|||
|
|
span {
|
|||
|
|
color: #999;
|
|||
|
|
font-size: 14px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.content-flex {
|
|||
|
|
display: flex;
|
|||
|
|
font-size: 16px;
|
|||
|
|
line-height: 30px;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
padding-left: 76px;
|
|||
|
|
p {
|
|||
|
|
width: calc(100% - 50px);
|
|||
|
|
word-break: break-all;
|
|||
|
|
}
|
|||
|
|
div {
|
|||
|
|
color: #26f;
|
|||
|
|
width: 50px;
|
|||
|
|
text-align: right;
|
|||
|
|
cursor: pointer;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.reply-list {
|
|||
|
|
padding-left: 100px;
|
|||
|
|
.reply-item {
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
.reply-user {
|
|||
|
|
font-size: 14px;
|
|||
|
|
img {
|
|||
|
|
width: 50px;
|
|||
|
|
height: 50px;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
vertical-align: middle;
|
|||
|
|
}
|
|||
|
|
.reply-name {
|
|||
|
|
display: inline-block;
|
|||
|
|
color: #333;
|
|||
|
|
width: 300px;
|
|||
|
|
span {
|
|||
|
|
display: inline-block;
|
|||
|
|
color: #666;
|
|||
|
|
margin: 0 8px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.reply-time {
|
|||
|
|
color: #999;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.content-flex {
|
|||
|
|
font-size: 14px;
|
|||
|
|
line-height: 24px;
|
|||
|
|
padding-left: 58px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.reply-more {
|
|||
|
|
font-size: 14px;
|
|||
|
|
line-height: 28px;
|
|||
|
|
color: #333;
|
|||
|
|
.line {
|
|||
|
|
display: inline-block;
|
|||
|
|
width: 120px;
|
|||
|
|
border-top: 1px solid #eee;
|
|||
|
|
vertical-align: middle;
|
|||
|
|
margin-right: 8px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.el-icon-arrow-down {
|
|||
|
|
transition: all ease 0.5s;
|
|||
|
|
transform: rotate(0);
|
|||
|
|
margin-left: 8px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
&.active .el-icon-arrow-down {
|
|||
|
|
transform: rotate(180deg);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|