inleft
2022-08-16 c14e3278893b9dd1022aa488cee53a888c2a4c7e
src/components/mini/box12-comment.vue
@@ -1,98 +1,286 @@
<template>
   <div class="myFriend">
      <a-form-model ref="myForm" layout="inline" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol">
         <a-form-model-item label="昵称">
            <a-input v-model="form.secret" placeholder="..">
            </a-input>
         </a-form-model-item>
         <a-form-model-item label="邮箱">
            <a-input v-model="form.secret" placeholder="..仅后台可见">
            </a-input>
         </a-form-model-item>
         <a-form-model-item label="主页">
            <a-input v-model="form.secret" placeholder="http:// or https://">
            </a-input>
         </a-form-model-item>
   <div>
      <a-collapse v-if="foldReply">
         <a-collapse-panel key="replyPanel" header="回复">
            <replyBox ref="commentBoxId" v-bind="$attrs" @sendMsg="sendMsg()"></replyBox>
         </a-collapse-panel>
      </a-collapse>
      <div v-else>
         <replyBox ref="commentBoxId" v-bind="$attrs" @sendMsg="sendMsg()" ></replyBox>
      </div>
      </a-form-model>
      <a-modal v-model="visible" :title="replyTaget" :footer="null"
         :bodyStyle="{'overflow':'overlay','height': '700px','scrollbarWidth': 'none'}">
         <replyBox ref="replyBoxId" v-bind="$attrs" @sendMsg="sendMsg()" :parseContent="parseContent"
            :visible="visible"></replyBox>
      </a-modal>
      <a-comment>
         <div slot="content">
            <a-form-item>
               <a-textarea :rows="4" :value="value" />
            </a-form-item>
            <a-form-item>
               <a-button html-type="submit" type="primary">
                  高低整两句
               </a-button>
               <div>
                  <a-checkbox style="margin-left: 8px;">
                     悄悄回复<span class="myTip">(仅登录后可查看)</span>
                  </a-checkbox>
                  <a-checkbox>
                     接收邮件回复通知
                  </a-checkbox>
      <div class="mySecret" style="max-height:250px ;" v-if="commentListData.length==0">
         <p>空空如也..</p>
      </div>
      <div v-for="temp in commentListData" class="commentList">
         <div class="commentGroup">
            <a-comment>
               <div slot="actions" key="comment-nested-reply-to" class="actionList">
                  <span style="cursor: default;padding-right: 6px;" class="myTip">{{temp.createDate}} </span>
                  <span @click="replyCall(temp)">
                     <a-icon type="message" />
                  </span>
               </div>
            </a-form-item>
         </div>
      </a-comment>
      <a-comment>
         <span slot="actions" key="comment-nested-reply-to"><a-icon type="edit" />回复</span>
         <a slot="author">Han Solo</a>
         <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
            alt="Han Solo" />
         <p slot="content">1+1=?</p>
         <a-comment>
            <span slot="actions" key="comment-nested-reply-to"><a-icon type="edit" />回复</span>
            <a slot="author">yi @ Han Solo</a>
            <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
               alt="Han Solo" />
            <p slot="content">2!
            </p>
            <a-comment>
               <span slot="actions" key="comment-nested-reply-to"><a-icon type="edit" />回复</span>
               <a slot="author">bimo @ yi</a>
               <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
                  alt="Han Solo" />
               <p slot="content">不对3!
               </p>
               <div slot="avatar" style="display: flex;">
                  <div class="myTextDeal">
                     <a :href="temp.visitorHomePage" target="_blank" v-if="temp.visitorHomePage!=''">
                        <a-tooltip placement="bottomLeft" :title="temp.visitorNickName">
                           {{temp.visitorNickName}}
                        </a-tooltip>
                     </a>
                     <a-tooltip placement="bottomLeft" :title="temp.visitorNickName" v-else>
                        {{temp.visitorNickName}}
                     </a-tooltip>
                  </div>
                  <div class="samllPadding">:</div>
               </div>
               <p :id="temp.id" slot="content" v-html="parseContent(temp.commentContent)" class="myContent"></p>
               <a-comment v-for="tempData in temp.replyList">
                  <div slot="actions" key="comment-nested-reply-to" class="actionList">
                     <span style="cursor: default;padding-right: 6px;" class="myTip">{{tempData.createDate}}
                     </span>
                     <span @click="replyCall(tempData)">
                        <a-icon type="message" />
                     </span>
                  </div>
                  <div slot="avatar" style="display: flex;">
                     <div class="myTextDeal">
                        <a :href="tempData.visitorHomePage" target="_blank" v-if="tempData.visitorHomePage!=''">
                           <a-tooltip placement="bottomLeft" :title="tempData.visitorNickName">
                              {{tempData.visitorNickName}}
                           </a-tooltip>
                        </a>
                        <a-tooltip placement="bottomLeft" :title="tempData.visitorNickName" v-else>
                           {{tempData.visitorNickName}}
                        </a-tooltip>
                     </div>
                     <div class="samllPadding">:</div>
                     <div class="myTip myTextDeal" style="padding-bottom: 5px; max-width: 150px;">
                        @<a :href="tempData.replyUserHomePage" target="_blank"
                           v-if="tempData.replyUserHomePage!=''">
                           <a-tooltip placement="bottomLeft" :title="tempData.replyUserName">
                              {{tempData.replyUserName}}
                           </a-tooltip>
                        </a>
                        <a-tooltip placement="bottomLeft" :title="tempData.replyUserName" v-else>
                           {{tempData.replyUserName}}
                        </a-tooltip>
                     </div>
                  </div>
                  <p :id="tempData.id" slot="content" v-html="parseContent(tempData.commentContent)"></p>
               </a-comment>
            </a-comment>
            <a-comment>
               <span slot="actions" key="comment-nested-reply-to"><a-icon type="edit" />回复</span>
               <a slot="author">er @ yi</a>
               <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
                  alt="Han Solo" />
               <p slot="content">+∞
               </p>
            </a-comment>
         </a-comment>
      </a-comment>
            <div class="loadMore" @click="loadMore(temp)" v-if="temp.isHasNext==1">
               <span>
                  <a-icon type="down" />展开
               </span>
            </div>
         </div>
      </div>
      <a-row type="flex" justify="center">
         <div>
            <a-pagination @change="onChange" :showQuickJumper="true" :size="page.size" v-model="page.current"
               :defaultPageSize="page.defaultPageSize" :pageSize="page.pageSize" :total="page.total" />
         </div>
      </a-row>
   </div>
</template>
<script>
   import replyBox from "./box13-reply.vue"
   import {
      queryBlogCommentList,
      queryBlogCommentSubList
   } from '../../api/blogArticleComment.js'
   import OwOjsonConfig from '../../assets/OwO.json'
   export default {
      components: {
         replyBox,
      },
      props: {
         "foldReply": {
            default: false,
         },
      },
      methods: {
         parseContent(content) {
            let  tempStrArray=content.match("\:\&\(.*\)");
            console.log(OwOjsonConfig);
            console.log(333);
            return content;
         },
         updateCommentList(articleId) {
            queryBlogCommentList({
               pageNo: this.page.current,
               pageSize: this.page.pageSize,
               articleId: articleId
            }).then((res) => {
               this.page.total = Number(res.data.total)
               this.page.pageSize = Number(res.data.size);
               this.commentListData = res.data.records;
            })
         },
         sendMsg() {
            this.visible = false;
            this.$message.info("列表刷新中..")
            setTimeout(() => {
               this.updateCommentList(this.$attrs.articleId);
            }, 1000);
         },
         onChange(current) {
            this.page.current = current;
            this.updateCommentList();
         },
         loadMore(temp) {
            temp.isHasNext = 0;
            queryBlogCommentSubList({
               commentId: temp.id
            }).then((res) => {
               if (res.data.length == temp.replyList.length) {
                  this.$message.info("没有更多了..")
               }
               temp.replyList = res.data;
            })
         },
         replyCall(obj, replyId) {
            this.visible = true;
            this.replyTaget = "回复Ta @" + obj.visitorNickName;
            var msgInfo = {
               useName: obj.visitorNickName,
               userComment: obj.commentContent,
               parentId: obj.parentId == 0 ? obj.id : obj.parentId,
               replyId: obj.id
            };
            this.$nextTick(() => {
               this.$refs.replyBoxId.getMsgInfo(msgInfo);
            });
         }
      },
      data() {
         return {
            value: "",
            labelCol: {
               span: 6,
               offset: 0,
            page: {
               size: "small",
               total: 1,
               pageSize: 5,
               current: 1,
               defaultPageSize: 10
            },
            wrapperCol: {
               span: 18,
               offset: 0
            },
            form: {
               secret: ""
            }
            replyTaget: "",
            visible: false,
            commentListData: [],
         }
      }
   }
</script>
<style>
<style lang="less">
   .myContent img {
      margin-bottom: -0.125rem;
      img min-height: 3.5rem;
      height: 2em;
   }
   .samllPadding {
      padding: 0px 3px 5px;
   }
   .visitInfo {
      user-select: none;
   }
   .myTextDeal {
      // display: -webkit-container;
      max-width: 80px;
      -webkit-line-clamp: 1;
      text-overflow: ellipsis;
      overflow: hidden;
      word-wrap: break-word;
      white-space: nowrap;
      word-break: break-all;
   }
   .loadMore {
      margin: 10px;
      display: flex;
      justify-content: center;
   }
   .loadMore:hover {
      background-color: #00000021
   }
   .ant-drawer-wrapper-body::-webkit-scrollbar,
   .ant-modal-body::-webkit-scrollbar {
      display: none;
   }
   .actionList {
      display: flex;
      justify-content: flex-end;
   }
   .commentList {
      a {
         color: black;
      }
      img {
         user-select: none;
      }
      .ant-comment-nested {
         margin-left: 20px;
      }
      .ant-comment-avatar {
         cursor: default;
      }
      .ant-comment-actions {
         li {
            width: -webkit-fill-available;
         }
         margin-bottom: 0px;
      }
      .ant-comment-content-author {
         margin-bottom: 0px;
      }
      .ant-comment-inner {
         padding: 10px 10px 0px;
         flex-direction: column;
      }
      .commentGroup {
         border-top: 1px solid #e5e9ef;
         margin-bottom: 5px;
         padding-bottom: 0px;
      }
      .ant-comment-content-detail {
         padding-left: 50px;
         padding-top: 5px;
         p {
            margin-bottom: 0px;
         }
      }
   }
</style>