170 lines
4.5 KiB
Vue
170 lines
4.5 KiB
Vue
<!-- 评论列表 -->
|
||
<template>
|
||
<div>
|
||
<div class="commentList">
|
||
<div v-for="comment in commentListData" :key="comment.id" class="comment-item">
|
||
<div class="user-info">
|
||
<!-- <img :src="comment.avatar" alt="用户昵称" class="avatar"> -->
|
||
<image-preview :src="comment.avatar" :width="25" :height="25" />
|
||
<div class="username">
|
||
<div style="margin-right: 5px;">
|
||
{{ comment.nickName }}
|
||
</div>
|
||
<!-- <div v-if="comment.parentId" class="reply-to"></div>
|
||
<div v-if="comment.parentId" class="reply-to-username">{{ comment.replyNickName }}</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="user-details">
|
||
<div class="comment-content">{{ comment.content }}</div>
|
||
<div class="comment-info">
|
||
<span class="comment-time">{{ comment.createTime }}</span>
|
||
<span class="ip-address">IP: {{ comment.address?comment.address:'未知' }}</span>
|
||
</div>
|
||
</div>
|
||
<div v-if="comment.daList && comment.daList.length" class="replies">
|
||
<div v-for="reply in comment.daList" :key="reply.id" class="reply-item">
|
||
<div class="user-info">
|
||
<!-- <img :src="reply.avatar" alt="" class="avatar"> -->
|
||
<image-preview :src="reply.avatar" :width="25" :height="25" />
|
||
<div class="">
|
||
<div class="username">
|
||
<span>{{ reply.nickName }}</span>
|
||
<div class="reply-to"></div>
|
||
<span>{{ reply.replyNickName }}</span>
|
||
</div>
|
||
<div class="comment-content" style="margin-left: 10px;">{{ reply.content }}</div>
|
||
<div class="comment-info" style="margin-left: 10px;">
|
||
<span class="comment-time">{{ reply.createTime }}</span>
|
||
<span class="ip-address">IP: {{ reply.address?reply.address:'未知' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum"
|
||
v-model:limit="queryParams.pageSize" @pagination="getCommentList" />
|
||
</div>
|
||
</template>
|
||
|
||
<script setup lang="ts" name="commentList">
|
||
import { ref, reactive, onMounted, nextTick } from 'vue';
|
||
import {commentList } from '@/api/manage/scenic';
|
||
|
||
//导入父组件传递的值
|
||
const props = defineProps({
|
||
bizId:{
|
||
type: Number,
|
||
default: null,
|
||
}
|
||
});
|
||
const queryParams = reactive({
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
bizId: null,
|
||
status: 0,
|
||
});
|
||
// 监听父组件传递的tagIds,当tagIds发生变化时,重新获取数据
|
||
watch(
|
||
() => props.bizId,
|
||
(newVal, oldVal) => {
|
||
console.log(newVal);
|
||
queryParams.bizId = newVal;
|
||
if (newVal) {
|
||
//获取数据
|
||
nextTick(() => {
|
||
getCommentList();
|
||
});
|
||
}
|
||
},
|
||
{ immediate: true }
|
||
);
|
||
const total=ref(0)
|
||
const loading = ref(false);
|
||
const commentListData = ref([]);
|
||
// 导入父组件定义的函数
|
||
const emit = defineEmits(['hideDialog']);
|
||
/**
|
||
* 获取评论列表
|
||
*/
|
||
const getCommentList = async () => {
|
||
loading.value = true;
|
||
let res=await commentList(queryParams).finally(() => (loading.value = false));
|
||
console.log('评论列表:',res);
|
||
total.value=res.total;
|
||
commentListData.value = res.rows;
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.commentList {
|
||
height: 500px;
|
||
overflow-y: auto;
|
||
|
||
.comment-item {
|
||
padding: 10px 0px;
|
||
|
||
.user-info {
|
||
display: flex;
|
||
|
||
.username {
|
||
display: flex;
|
||
|
||
color: #000;
|
||
font-weight: bold;
|
||
margin-left: 10px;
|
||
vertical-align: super;
|
||
|
||
.reply-to {
|
||
width: 0;
|
||
height: 0;
|
||
border-top: 6px solid transparent;
|
||
/* 上边框透明 */
|
||
border-bottom: 6px solid transparent;
|
||
/* 下边框透明 */
|
||
border-left: 6px solid #999;
|
||
/* 左边框为箭头颜色,这里设为黑色,可按需更改 */
|
||
|
||
margin: 0px 8px;
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.reply-to-username {
|
||
margin-left: 5px;
|
||
}
|
||
}
|
||
}
|
||
|
||
.user-details {
|
||
margin-left: 35px;
|
||
}
|
||
|
||
.comment-content {
|
||
color: #000;
|
||
font-size: 16px;
|
||
padding: 3px 0px;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
.ip-address {
|
||
margin-left: 15px;
|
||
}
|
||
|
||
.replies {
|
||
margin-left: 35px;
|
||
|
||
.reply-item {
|
||
margin-top: 5px;
|
||
padding: 5px 0px;
|
||
}
|
||
}
|
||
|
||
#table_page {
|
||
height: 50px !important;
|
||
margin-top: 10px !important;
|
||
padding-bottom: 0px !important;
|
||
margin-bottom: 0px !important;
|
||
}
|
||
</style> |