提交修改

This commit is contained in:
daihh
2022-05-30 23:25:01 +08:00
parent b050613020
commit b749df42e6
19 changed files with 481 additions and 307 deletions

View File

@@ -32,7 +32,7 @@
<el-button type="text" icon="el-icon-edit">写回答</el-button>
</div>
<span class="answer-total">共计{{detailData.answers}}条回答</span>
<interactBar :type="4" :comments="false" :data="detailData" :views="false"></interactBar>
<interactBar v-if="detailData.id" :type="4" :comments="false" :data="detailData" :views="false"></interactBar>
</div>
</el-card>
<div v-if="answerShow">
@@ -45,9 +45,7 @@
<!-- <el-checkbox style="margin-left:20px" v-model="checked"></el-checkbox><span style="margin-left:10px" @click="qaFormCheckedShow = true">我已阅读并遵守平台内容发布要求</span> -->
<el-checkbox style="margin-left:20px" v-model="checked"></el-checkbox><span style="font-size:14px;color:#787878;margin-left:10px">我已阅读并遵守<span style="color:#588afc;cursor: pointer;" @click="qaFormCheckedShow = true">平台内容发布要求</span></span>
</div>
</el-card>
</div>
<el-card class="box-card" v-if="answerList.length ==0&&!answerShow" :body-style="{ padding: '0px' }">
<div>
@@ -55,8 +53,7 @@
<img style="width:50px" src="../../../assets/images/icon/anser.png" alt="" srcset="">
</div>
<div style="font-size:14px;padding-bottom: 50px;">
暂时还没有回答开始
<el-link type="primary" @click="openAnswer">写第一个回答</el-link>
暂时还没有回答开始 <el-link type="primary" @click="openAnswer">写第一个回答</el-link>
</div>
</div>
@@ -67,82 +64,122 @@
<el-input placeholder="写回答...1-1000个字" minlength="1" maxlength="255" v-model="content"></el-input>
<el-button type="primary" class="dian-btn" @click="publishAnswer">发布</el-button>
</el-card> -->
<el-card :body-style="{ padding: '0px' }" class="data">
<div class="answer data-item" v-for="(item, index) of answerList" :key="item.id" :style="index === answerList.length - 1 ? 'border-bottom:none;' : ''">
<div class="top">
<!-- <author :avatar="item.avatar" :name="item.name" :info="item.orgInfo"></author> -->
<author :avatar="item.avatar" :name="item.sysCreateBy" :sex="item.sex"></author>
<span v-if="detailData.isResolve&&item.isBest" style="color: #ffb30f">最佳答案</span>
<el-card :body-style="{ padding: '0px' }" class="answer-reply-box">
<div class="answer" v-for="(item, index) of answerList" :key="item.id" :style="index === answerList.length - 1 ? 'border-bottom:none;' : ''">
<div class="answer-top">
<div><author :avatar="item.avatar" :name="item.sysCreateBy" :sex="item.sex"></author></div>
<div>
<span v-if="detailData.isResolve&&item.isBest" style="color: #ffb30f">最佳答案</span>
<el-button type="primary" v-if="!detailData.isResolve && detailData.sysCreateAid == userInfo.aid" class="zuijia" @click="editAnsweBest(item)">设为最佳答案</el-button>
</div>
</div>
<div class="text">{{ displayAll(item) }}
<span v-if="item.content.length>170" @click="changeIsAll(item)">{{item.isAll?'收起':'全文'}}</span></div>
<span class="editTime">
<div>发布于 <time-show :time="item.sysCreateTime"></time-show></div>
<interactBar :type="5" :comments="false" :favorites="false" :data="item" :shares="false" :views="false"></interactBar>
</span>
<div class="tip">
<!-- 这个组件的点赞失效了应该我传入的参没有组件需要的id值有关评论是因为没有对应的字段 -->
<i class="el-icon-chat-line-round" @click="showRowInput(item,{})" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="item.sysCreateAid == userInfo.aid" @click="editAnswer(item)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||item.sysCreateAid == userInfo.aid" @click="delAnswer(item)"></i>
<el-button type="primary" v-if="!detailData.isResolve && detailData.sysCreateAid == userInfo.aid" class="zuijia" @click="editAnsweBest(item)">设为最佳答案</el-button>
</div>
<div v-show="curParentId==item.id" class="reply-box">
<el-input type="textarea" v-model="replyContent" placeholder="回复内容"></el-input>
<el-button type="primary" @click="replyContentMethod(item,{})">回复</el-button>
</div>
<div v-if="item.answers && item.answers.length!=0">
<div class="answer-reply" v-for="(con,i) in item.answers" :key="i">
<div class="answer-reply-first">
<author :avatar="con.avatar" :name="con.sysCreateBy" :sex="con.sex"></author>
<span class="answer-reply-text">回复</span>
<span style="font-size: 14px;color: rgb(102, 102, 102);">{{con.replayName}}</span>
</div>
<div class="answer-reply-content">
{{ displayAll(con) }}
<span v-if="con.content.length>170" @click="changeIsAll(con)" style="cursor: pointer;color: #409EFF">
{{con.isAll?'收起':'全文'}}
</span>
</div>
<span class="editTime"><span>发布于 <time-show :time="con.sysCreateTime"></time-show></span></span>
<div class="tip">
<!-- <i class="el-icon-thumb" style="margin-right:10px;"></i> -->
<i class="el-icon-chat-line-round" @click="showRowInput(con,item)" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="con.sysCreateAid == userInfo.aid" @click="editAnswer(con)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||con.sysCreateAid == userInfo.aid" @click="delAnswer(con)"></i>
</div>
<div class="reply-box" v-show="curParentId==con.id">
<el-input type="textarea" v-model="replyContent" placeholder="回复内容"></el-input>
<el-button type="primary" @click="replyContentMethod(con,item)">回复</el-button>
</div>
<!--三级数据-->
<div style="padding-left: 40px;" v-if="con.answers && con.answers.length>0">
<div v-for="(row,rowIdx) in con.answers" :key="rowIdx">
<div class="answer-reply-first">
<author :avatar="row.avatar" :name="row.sysCreateBy" :sex="row.sex"></author>
<span class="answer-reply-text">回复</span>
<span style="font-size: 14px;color: rgb(102, 102, 102);">{{row.replayName}}</span>
</div>
<div class="answer-reply-content">
{{ displayAll(row) }}
<span v-if="row.content.length>170" @click="changeIsAll(row)" style="cursor: pointer;color: #409EFF">
{{row.isAll?'收起':'全文'}}
</span>
</div>
<span class="editTime"><span>发布于 <time-show :time="row.sysCreateTime"></time-show></span></span>
<div class="tip">
<!-- <i class="el-icon-thumb" style="margin-right:10px;"></i> -->
<i class="el-icon-chat-line-round" @click="showRowInput(row,con)" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="row.sysCreateAid == userInfo.aid" @click="editAnswer(row)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||row.sysCreateAid == userInfo.aid" @click="delAnswer(row)"></i>
</div>
<div class="reply-box" v-show="curParentId==row.id">
<el-input type="textarea" v-model="replyContent" placeholder="回复内容"></el-input>
<el-button type="primary" @click="replyContentMethod(row,con)">回复</el-button>
</div>
<div class="answer-body">
<div @mouseover="showButtons(item.id)" @mouseout="hideButtons()"><!--在这一层上加事件-->
<div class="answer-text">{{ displayAll(item) }}
<span v-if="item.content.length>170" @click="changeIsAll(item)">{{item.isAll?'收起':'全文'}}</span>
</div>
<div class="answer-time">
<div>回答于 <time-show :time="item.sysCreateTime"></time-show></div>
<div style="margin-right: 10px;"><interactBar :type="5" :comments="false" :favorites="false" :data="item" :shares="false" :views="false"></interactBar></div>
</div>
<div class="answer-boot">
<div class="answer-boot-btns">
<div v-show="btnsShowRowId==item.id">
<a @click="showRowInput(item,{})"><svg-icon icon-class="comment" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>回复</span></a>
<a v-if="item.sysCreateAid == userInfo.aid" @click="editAnswer(item)"> <i class="el-icon-edit" style="margin-right:10px;font-size: 15px;color: #8590A6; ">编辑</i></a>
<a v-if="item.sysCreateAid == userInfo.aid" @click="delAnswer(item)"><svg-icon icon-class="remove" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>删除</span></a>
<!-- <a v-if="item.answers && item.answers.length==5" @click="showMoreReply(item)" ><svg-icon icon-class="all" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>全部回复</span></a> -->
</div>
<!-- <i class="el-icon-chat-line-round" @click="showRowInput(item,{})" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="item.sysCreateAid == userInfo.aid" @click="editAnswer(item)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||item.sysCreateAid == userInfo.aid" @click="delAnswer(item)"></i> -->
</div>
</div>
<!---->
<div v-show="curParentId==item.id" class="answer-reply">
<el-input type="textarea" v-model="replyContent" show-word-limit maxlength="800" placeholder="回复内容"></el-input>
<el-button type="primary" @click="replyContentMethod(item,{})">发布回复</el-button>
</div>
</div>
<!--一级评论二级数据-->
<div v-if="item.answers && item.answers.length!=0">
<div class="comment" v-for="(con,i) in item.answers" :key="i" :class="i===item.answers.length-1 ? 'comment-last' : ''">
<div class="comment-top">
<div class="comment-author">
<author :avatar="con.avatar" :name="con.sysCreateBy" :sex="con.sex"></author>
<span class="comment-author-text">回复</span>
<span style="margin-left: 10px; font-size:14px">{{con.replayName}}</span>
</div>
<div class="comment-time">
<time-show :time="con.sysCreateTime"></time-show>
</div>
</div>
<div class="comment-body" >
<div class="comment-info" @mouseover="showButtons(con.id)" @mouseout="hideButtons()">
<div class="comment-content">
{{ displayAll(con) }}
<span v-if="con.content.length>170" @click="changeIsAll(con)">
{{con.isAll?'收起':'全文'}}
</span>
</div>
<div class="comment-btns">
<div v-show="btnsShowRowId==con.id">
<a @click="showRowInput(con,item)"><svg-icon icon-class="comment" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>回复</span></a>
<a v-if="con.sysCreateAid == userInfo.aid" @click="delAnswer(con)"><svg-icon icon-class="remove" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>删除</span></a>
</div>
<!-- <i class="el-icon-chat-line-round" @click="showRowInput(con,item)" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="con.sysCreateAid == userInfo.aid" @click="editAnswer(con)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||con.sysCreateAid == userInfo.aid" @click="delAnswer(con)"></i> -->
</div>
<div class="comment-reply" v-show="curParentId==con.id">
<el-input type="textarea" v-model="replyContent" placeholder="回复内容" show-word-limit maxlength="100"></el-input>
<el-button type="primary" @click="replyContentMethod(con,item)">发布回复</el-button>
</div>
</div>
<!--三级数据-->
<div v-if="con.answers && con.answers.length>0">
<div class="comment" v-for="(row,rowIdx) in con.answers" :key="rowIdx" :class="rowIdx===con.answers.length-1 ? 'comment-last' : ''">
<div class="comment-top">
<div class="comment-author">
<author :avatar="row.avatar" :name="row.sysCreateBy" :sex="row.sex"></author>
<span class="comment-author-text">回复</span>
<span style="margin-left: 10px; font-size:14px">{{row.replayName}}</span>
</div>
<div class="comment-time">
<time-show :time="row.sysCreateTime"></time-show>
</div>
</div>
<div class="comment-body">
<div class="comment-info" @mouseover="showButtons(row.id)" @mouseout="hideButtons()">
<div class="comment-content">
{{ displayAll(row) }}
<span v-if="row.content.length>170" @click="changeIsAll(row)">
{{row.isAll?'收起':'全文'}}
</span>
</div>
<div class="comment-btns">
<div v-show="btnsShowRowId==row.id">
<a @click="showRowInput(row,con)"><svg-icon icon-class="comment" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>回复</span></a>
<a v-if="row.sysCreateAid == userInfo.aid" @click="delAnswer(row)"><svg-icon icon-class="remove" style="margin-right: 0px;font-size: 16px;"></svg-icon><span>删除</span></a>
</div>
<!-- <i class="el-icon-thumb" style="margin-right:10px;"></i> -->
<!-- <i class="el-icon-chat-line-round" @click="showRowInput(row,con)" style="margin-right:10px;"></i>
<i class="el-icon-edit" style="margin-right:10px;" v-if="row.sysCreateAid == userInfo.aid" @click="editAnswer(row)"></i>
<i class="el-icon-delete" v-if="detailData.sysCreateAid == userInfo.aid||row.sysCreateAid == userInfo.aid" @click="delAnswer(row)"></i> -->
</div>
</div>
<div class="comment-reply" v-show="curParentId==row.id">
<el-input type="textarea" v-model="replyContent" show-word-limit maxlength="100" placeholder="回复内容"></el-input>
<el-button type="primary" @click="replyContentMethod(row,con)">发布回复</el-button>
</div>
</div>
</div>
</div>
</div><!--二级数据结束-->
</div>
</div>
</div>
</div>
</div>
</div>
</el-card>
@@ -203,11 +240,11 @@
</div>
<addQuestion ref="addQuestion" @sure="toDetail"></addQuestion>
<editQuestion ref="editQuestion" @enSure="enSure" :editData="editData"></editQuestion>
<el-dialog class="checked-show" :visible.sync="qaFormCheckedShow" width="800px" :show-close="false" :modal="false">
<el-dialog class="checked-show" :visible.sync="qaFormCheckedShow" width="800px" top="14vh" :show-close="false" :modal="false">
<agreement></agreement>
<span slot="footer" class="dialog-footer">
<!-- <el-button @click="qaFormCheckedShow = false"> </el-button> -->
<el-button type="primary" @click="qaFormCheckedShow = false"> </el-button>
<el-button style="margin-right:10px" type="primary" @click="qaFormCheckedShow = false"> </el-button>
</span>
</el-dialog>
</div>
@@ -272,7 +309,18 @@ export default {
controlListNew: [], //用来控制回复输入框的显示与否
curParent:{},//当前输入的上级的对象用于往answers中追加回复的内容
curParentId:'',//当前回复的内容的id
replyContent: "" //回复的内容
replyContent: "" ,//回复的内容
readonly:false,//是否只读,用于预览
btnsShowRowId:'',//显示的button的条目id
replyDiaglog:{
show:false,
pageIndex:1,
pageSize:8,
pages:1,
count:0,
commentId:'',
list:[]
}
};
},
watch: {
@@ -601,6 +649,14 @@ export default {
this.loadAnswer();
this.$off("ensure");
},
showButtons(id){
if(!this.readonly){
this.btnsShowRowId=id;
}
},
hideButtons(){
this.btnsShowRowId='';
},
//展示全部
displayAll(item) {
if(!item.isAll && item.content.length > 170) {
@@ -662,7 +718,51 @@ export default {
this.$message.error("回复失败");
}
});
}
},
showMoreReply(comment){
this.replyDiaglog.pages=1;
this.replyDiaglog.count=0;
this.replyDiaglog.pageIndex=1;
this.replyDiaglog.list=[];
this.replyDiaglog.show=true;
this.replyDiaglog.commentId=comment.id;
this.loadAllReplyData(false);
},
loadMoreReply(){
this.replyDiaglog.pageIndex++;
this.loadAllReplyData(true);
},
loadAllReplyData(append){
let params={
pageIndex:this.replyDiaglog.pageIndex,
pageSize:this.replyDiaglog.pageSize,
commentId:this.replyDiaglog.commentId
}
let $this=this;
// apiComment.replyList(params).then(rs=>{
// if(rs.status==200){
// $this.replyDiaglog.count=rs.result.count;
// $this.replyDiaglog.pages=rs.result.totalPages;
// let ids=[];
// if(append){
// rs.result.list.forEach(item=>{
// item.avatar='';
// ids.push(item.sysCreateAid);
// $this.replyDiaglog.list.push(item);
// })
// }else{
// rs.result.list.forEach(item=>{
// item.avatar='';
// ids.push(item.sysCreateAid);
// })
// $this.replyDiaglog.list=rs.result.list;
// }
// this.loadAuthorInfo(rs.result.list,ids);
// }else{
// this.$message.error(rs.message);
// }
// })
},
}
};
</script>
@@ -672,10 +772,6 @@ export default {
.el-dialog__header{
padding:0;
}
.el-dialog__footer{
border-top: 1px solid #F5F5F6;
background-color: #F5F5F6;
}
}
::v-deep .el-card__body {
padding: 0;
@@ -764,8 +860,9 @@ export default {
.answer {
margin-top: 14px;
background-color: #fff;
border-bottom: 1px solid #dddddd;
// padding: 5px 20px 20px 20px;
.top {
.answer-top {
font-size: 16px;
font-weight: 600;
display: flex;
@@ -778,41 +875,6 @@ export default {
border-radius: 50%;
vertical-align: middle;
}
}
.submit-div {
margin: 15px 0;
}
.bottom {
text-align: right;
}
}
.data {
margin-top: 10px;
background-color: #fff;
padding: 5px 20px 10px 20px;
.text {
margin: 21px 0;
line-height: 24px;
white-space: pre-wrap;
word-break: break-all;
span {
color: #409eff;
cursor: pointer;
margin-left: 5px;
}
}
::v-deep .tip {
color: #999999;
margin: 15px 0;
display: flex;
justify-content: flex-start;
align-items: center;
i {
color: #a3b1cc;
// margin-left: 10px;
cursor: pointer;
}
.zuijia {
width: 106px;
height: 42px;
@@ -826,77 +888,144 @@ export default {
line-height: 42px;
text-align: center;
}
.interact-bar-btn {
margin: 0;
margin-right: 10px;
min-width: 0 !important;
span {
display: none;
}
}
}
.data-item {
.answer-body{
padding-left: 40px;
.answer-text{
margin: 20px 0 15px;
line-height: 24px;
white-space: pre-wrap;
word-break: break-all;
span {
color: #409eff;
cursor: pointer;
margin-left: 5px;
}
}
.answer-time{
font-size: 14px;
color: #8590a6;
display: flex;
justify-content: space-between;
align-items: center;
}
.answer-boot{
height: 35px;
line-height: 35px;
display: flex;
justify-content: space-between;
.answer-boot-btns{
a{
margin-right:15px;
span{
margin-left: 6px;
color: #8590A6;
font-size: 14px;
}
}
}
}
.answer-reply {
display: flex;
margin-bottom: 10px;
.el-button {
margin-left: 10px;
}
}
}
// .bottom {
// text-align: right;
// }
}
.comment{
margin-top: 10px;
background-color: #FFFFFF;
border-bottom: 1px solid #dddddd;
.reply-box {
display: flex;
margin-bottom: 10px;
.el-button {
margin-left: 10px;
}
}
&:last-of-type {
border: 0;
}
.editTime {
font-size: 14px;
color: #8590a6;
display: flex;
justify-content: space-between;
align-items: center;
}
.answer-reply {
margin-left: 40px;
// margin-bottom: 20px;
padding: 10px 0;
border-bottom: 1px solid #dddddd;
&:last-of-type {
border: 0;
}
.answer-reply-first {
.comment-top{
display: flex;
justify-content: space-between;
padding-bottom:10px;
font-weight: 500;
line-height: 30px;
font-size: 1.1em;
.comment-author{
display: flex;
align-items: center;
.answer-reply-text {
margin: 0 10px;
color: #8590a6;
font-size: 14px;
font-weight: 500;
height: 30px;
line-height: 30px;
.comment-author-text{
margin-left: 10px;
color: #8590A6;
font-size:14px;
}
}
.answer-reply-content {
line-height: 1.5;
margin: 21px 0;
.comment-time{
color: #666666;
font-size: 12px;
}
}
.comment-body{
padding-left: 40px;
.comment-content{
padding-bottom: 0px;
word-break:break-all;
span{
cursor: pointer;
color: #409EFF
}
}
.comment-btns{
// padding: 5px 10px 10px 0px;
height: 35px;
line-height: 35px;
a{
margin-right:15px;
span{
margin-left: 6px;
color: #8590A6;
font-size: 14px;
}
}
}
.comment-reply {
display: flex;
margin-bottom: 10px;
.el-button {
margin-left: 10px;
}
}
}
.comment-replys{
padding-left: 40px;
}
}
.comment-last{
border-bottom: none;
}
::v-deep .publishAnswer {
padding: 24px 20px;
.el-card__body {
// display: flex;
// justify-content: space-between;
align-items: center;
.el-input__inner {
height: 48px;
}
.el-button {
margin-left: 20px;
// height: 48px;
// width: 78px;
color: #e8f3fa;
font-size: 16px;
}
}
.answer-reply-box {
margin-top: 10px;
background-color: #fff;
padding: 5px 20px 10px 20px;
}
// ::v-deep .publishAnswer {
// padding: 24px 20px;
// .el-card__body {
// // display: flex;
// // justify-content: space-between;
// align-items: center;
// .el-input__inner {
// height: 48px;
// }
// .el-button {
// margin-left: 20px;
// // height: 48px;
// // width: 78px;
// color: #e8f3fa;
// font-size: 16px;
// }
// }
// }
.box-card {
text-align: center;
font-size: 18px;