2025-03-23 22:45:38 +08:00

361 lines
12 KiB
Vue

<template>
<div>
<div class="user-coin-card mb-4">
<div class="row" style="width: 100%">
<!-- 内容 -->
<div class="container">
<div class="content-wrap" style="float: none">
<div class="content-layout">
<div class="fixed-wrap bbs-home-tab">
<div class="fixed-wrap-content">
<div class="tab-content bbs-main-tab-content">
<!-- 文章列表 -->
<div class="ajaxpager active" id="home-tab-2">
<div class="forum-posts detail alone ajax-item">
<div class="user-info flex ac mb10">
<!-- <a href="/"> -->
<div @click="showConfirm">
<span class="avatar-img"
><img
src="https://onlinephoto.oss-cn-chengdu.aliyuncs.com/hangtian/touxiang.jpg"
data-src="//www.cmstui.com/wp-content/themes/zibll/img/avatar-default.png"
class="lazyload avatar avatar-id-1"
/>
</span>
</div>
<!-- </a> -->
<div class="user-right flex flex1 ac jsb ml10">
<div class="flex1">
<div class="flex ac flex1">
<a
class="display-name text-ellipsis"
href="/"
>{{ getUserName(forums.userId) }}</a
>
</div>
</div>
</div>
</div>
<div>
<div class="content mt6">
<a
target="_blank"
href="#"
class="excerpt"
v-html="forums.articleContent"
></a>
</div>
</div>
<div class="flex ac jsb mt10">
<div class="action-meta flex0 flex jsb">
<div class="score-btns">
<a
href="javascript:;"
ajax-action="score_extra"
class="btn-score extra"
><svg class="icon" aria-hidden="true">
<use
xlink:href="#icon-extra-points"
></use></svg></a
><text>评分</text>
<a
href="javascript:;"
ajax-action="score_deduct"
class="btn-score deduct"
><svg class="icon" aria-hidden="true">
<use
xlink:href="#icon-deduct-points"
></use></svg
></a>
</div>
<a href="#" class="item"
><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-comment"></use></svg
><text>回复</text></a
>
<a
mobile-bottom="true"
data-height="243"
class="btn-share item"
href="javascript:;"
data-toggle="RefreshModal"
><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-share"></use></svg
><text>分享</text></a
>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<section id="comments" class="box-show wow fadeInDown">
<div id="comt-respond" class="commentpost">
<h4>
发表评论<span
><a
rel="nofollow"
id="cancel-reply"
href="#comment"
class="page_speeder_1817808094"
></a
></span>
</h4>
<form id="frmSumbit">
<input type="hidden" id="inpId" value="413" />
<input type="hidden" id="inpRevID" value="0" />
<div id="comment-tools">
<div class="tools_text">
<textarea
placeholder="请输入您的评论"
name="txaArticle"
id="txaArticle"
class="text input-block-level comt-area"
cols="50"
rows="4"
tabindex="5"
v-model="text"
></textarea>
</div>
</div>
</form>
<div class="psumbit">
<a-button type="primary" @click="PublishComments">
提交
</a-button>
</div>
</div>
<div id="commentlist" class="commentlist">
<div class="comment-tab">
<div class="come-comt">
评论列表 <span id="comment_div"></span>
</div>
</div>
</div>
<h2 class="comment-text-center" v-if="!this.msg">
<i class="icon font-meiyou"></i> 还没有评论,来说两句吧...
</h2>
<label id="AjaxCommentBegin"></label>
<div v-for="(item, index) in comments" :key="index">
<div
class="shadow-box msg noimg wow fadeInRight"
data-wow-delay="0.25s"
id="cmt225"
>
<div
style="
display: flex;
flex-direction: row;
align-items: end;
justify-content: flex-end;
"
@click="DeleteComments(item)"
>
删除
</div>
<div class="msgimg">
<img
class="avatar"
src="https://q2.qlogo.cn/headimg_dl?dst_uin=36926842&spec=100"
alt="网友昵称:访客"
title="网友昵称:访客"
/>
</div>
<div class="msgtxt">
<div class="msgname">
<span class="autlv aut-6 vs">V</span
><span class="autlv autlvname aut-6">游客</span>
<span class="dot shafa">沙发</span>
</div>
<div class="interact-bar">
<span class="interact-time" title="评论时间">{{
item.publishTime | formatTime
}}</span>
</div>
<div class="msgarticle">
{{ item.commentContent }}<label id="AjaxComment225"></label>
</div>
</div>
</div>
</div>
</section>
</div>
<!-- 评论列表 -->
</div>
</div>
</div>
</template>
<script>
import {
ArticleById,
CommentsById,
PublishComments,
DeleteComments,
AllUser,
} from "@/api";
import ColumnSetting from "@/components/common/ColumnSetting.vue";
export default {
name: "UserCenter",
data() {
return {
userId: this.$store.state.user.userId,
userName: this.$store.state.user.userName,
likes: "",
dianzan: "",
forums: {},
ArticleId: this.$route.query.id,
text: "",
msg: "",
comments: [],
users: [],
};
},
mounted() {
this.fetchData();
this.getuser();
},
filters: {
formatTime(time) {
// 将 ISO 8601 格式的时间转换为 Date 对象
const date = new Date(time);
// 获取年月日时分秒
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
// 返回格式化后的时间字符串
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
},
methods: {
showConfirm() {
this.$confirm({
title: "添加好友?",
content: "是否现在与该用户进行聊天",
onOk: () => {
// 使用箭头函数定义回调函数
let data = {
friendId: this.forums.userId,
friendName: this.getUserName(this.forums.userId),
};
console.log(data);
this.$api.addFriend(data).then((res) => {
console.log(res);
});
},
onCancel() {},
});
},
PublishComments() {
// 发布评论
let formdata = {
articleId: this.ArticleId,
commentContent: this.text,
userId: this.userId,
};
// console.log(formdata);
PublishComments(formdata)
.then((res) => {
if (res.code == 200) {
this.$message.success("发布成功");
// 发布成功后重新获取评论
this.fetchData();
}
})
.catch((error) => {
console.log(error);
this.$message.error(error.msg || "发布失败");
});
},
fetchData() {
// 获取文章
let datas = { id: this.ArticleId };
ArticleById(datas)
.then((res) => {
if (res.code === 200) {
this.forums = res.data;
// 获取文章成功后再获取评论
this.getuser();
this.fetchComments();
}
})
.catch((error) => {
console.log(error);
});
},
// 删除评论
DeleteComments(item) {
DeleteComments(item.commentId)
.then((res) => {
if (res.code == 200) {
this.$message.success("删除成功");
// 获取文章成功后再获取评论
this.fetchComments();
}
})
.catch((error) => {
this.$message.error(error || "删除失败");
});
},
fetchComments() {
// 获取评论
let data = { id: this.ArticleId };
CommentsById(data)
.then((res) => {
this.msg = res.data.length || 0;
this.comments = res.data;
// console.log(this.comments);
console.log(this.comments);
})
.catch((error) => {
console.log(error);
});
},
getuser() {
AllUser()
.then((response) => {
this.users = response.data;
})
.catch((error) => {
console.error("Failed to load users:", error);
});
},
getUserName(userId) {
const user = this.users.find((u) => u.userId === userId);
return user ? user.userName : "未知用户";
},
},
};
</script>
<style src="@/assets/pages.css"></style>
<style scoped>
button {
color: #ffffff;
background-color: #3690cf;
height: 30px;
width: 88px;
border-top-width: 0;
border-right-width: 0;
border-bottom-width: 0;
border-left-width: 0;
border-radius: 4px;
float: right;
margin: 2px 10px 0 10px;
}
.router-link-exact-active {
color: none;
}
</style>