# vue-juejin-comment

一个掘金 (opens new window)风格的评论组件✍。

GitHub 地址:https://github.com/fenhan34/vue-comment-component/tree/main (opens new window)

# 功能

  • ✅ 支持评论、回复操作。
  • ✅ 支持点赞、删除操作。
  • ✅ 支持上传(复制)图片,表情输入。
  • ✅ 自适应高度输入框。

# 安装

npm install vue-juejin-comment

# or yarn
yarn add vue-juejin-comment

# 使用

<template>
  <Comment
    v-model="data"
    :props="props"
    :user="currentUser"
    :before-submit="addComment"
    :before-delete="deleteComment"
    :before-like="likeComment"
    :upload-img="uploadOrCopyImg"
  />
</template>

<script>
import Comment from 'vue-juejin-comment'

export default {
  data() {
    return {
      data: [],
      props: {},
      currentUser: {
        name: '',
        avatar: '',
        author: false
      }
    }
  },
  methods: {
    addComment(comment) {
      // ...
    },
    deleteComment(comment) {
      // ...
    },
    likeComment(comment) {
      // ...
    },
    uploadOrCopyImg({ file, callback }) {
      // ...
      
      callback(imgUrl) // 图片地址必传
    }
  }
}
</script>

# 示例

查看代码
<template>
  <Comment
    v-model="data"
    :props="props"
    :user="currentUser"
    :before-submit="addComment"
    :before-delete="deleteComment"
    :before-like="likeComment"
    :upload-img="uploadOrCopyImg"
  />
</template>

<script>
import Comment from 'vue-juejin-comment'
import 'vue-juejin-comment/dist/vue-juejin-comment.css'

export default {
  components: { Comment },
  data() {
    const users = [
      {
        name: 'Up&Up',
        avatar:
          'https://img.vim-cn.com/26/f000a8ac95ec13fe86445732d7309a3cce596d.jpg',
        author: true,
      },
      {
        name: '我叫白云',
        avatar:
          'https://img.vim-cn.com/46/60955e1965607e5a9e9af1ba37a2c1ed99de60.png',
      },
      {
        name: '我叫黑土',
        avatar:
          'https://img.vim-cn.com/b7/6c70f9dc921123f8f1ab754ec938a2b04b52a7.jpg',
      },
      {
        name: 'NARUTO',
        avatar:
          'https://img.vim-cn.com/4d/5cbfa03caa043dcb7b3b4e75f827535538776a.jpg',
      },
    ]
    return {
      data: [],
      props: {
        content: 'content',
        imgSrc: 'imgSrc',
        children: 'childrenComments',
        likes: 'likes',
        reply: 'reply',
        createAt: 'createAt',
        user: 'visitor',
      },
      currentUser: users[0],
      users,
    }
  },
  created() {
    this.addData(1)
  },
  methods: {
    async addComment(comment) {
      const res = await new Promise((resolve) => {
        setTimeout(() => {
          resolve(comment)
        }, 0)
      })

      console.log('addComment: ', res)
    },
    async deleteComment(comment) {
      const res = await new Promise((resolve) => {
        setTimeout(() => {
          resolve(comment)
        }, 0)
      })
    },
    async likeComment(comment) {
      const res = await new Promise((resolve) => {
        setTimeout(() => {
          resolve(comment)
        }, 0)
      })
    },
    async uploadOrCopyImg({ file, callback }) {
      try {
        const res = await new Promise((resolve, reject) => {
          const reader = new FileReader()
          reader.readAsDataURL(file)
          reader.onload = () => {
            resolve(reader.result)
          }
          reader.onerror = () => {
            reject(reader.error)
          }
        })

        callback(res)
      } catch (e) {
        console.log(e)
      }
    },
    addData(times) {
      this.data = new Array(times)
        .fill([
          {
            content: '梦芸\n近况如何\n算来已有十月未见你\n甚是思念',
            visitor: {
              name: '我叫白云',
              avatar:
                'https://img.vim-cn.com/46/60955e1965607e5a9e9af1ba37a2c1ed99de60.png',
            },
            createAt: '2020.11.24',
            likes: 1,
            childrenComments: [
              {
                content:
                  '此刻我能闻见漫天火药味道\n我随军藏身长江边一暗无天日的地窖底\n埋首台灯下写这些字却不知把心绪给寄向何地',
                visitor: {
                  name: 'NARUTO',
                  avatar:
                    'https://img.vim-cn.com/4d/5cbfa03caa043dcb7b3b4e75f827535538776a.jpg',
                },
                createAt: '2020.11.25',
              },
              {
                content: '\n如磐石般坚毅',
                visitor: {
                  name: '我叫黑土',
                  avatar:
                    'https://img.vim-cn.com/b7/6c70f9dc921123f8f1ab754ec938a2b04b52a7.jpg',
                },
                createAt: '2020.11.25',
                reply: {
                  name: 'NARUTO',
                  avatar:
                    'https://img.vim-cn.com/4d/5cbfa03caa043dcb7b3b4e75f827535538776a.jpg',
                },
              },
            ],
          },
          {
            content:
              '我想时光亦是用来磨的\n细细地磨慢慢地磨\n总能磨出些许墨香来',
            visitor: {
              name: '我叫黑土',
              avatar:
                'https://img.vim-cn.com/b7/6c70f9dc921123f8f1ab754ec938a2b04b52a7.jpg',
            },
            createAt: '2020.12.5',
            childrenComments: [
              {
                content:
                  '即使我鼻子已不灵\n眼睛生出疾\n侥幸你的照片还能辨出依稀',
                visitor: {
                  name: 'NARUTO',
                  avatar:
                    'https://img.vim-cn.com/4d/5cbfa03caa043dcb7b3b4e75f827535538776a.jpg',
                },
                createAt: '2020.12.6',
              },
            ],
          },
        ])
        .flat(1)
    },
  },
}
</script>