当前位置: 首页 > news >正文

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

下载地址

uni-app官方插件市场: cc-comment组件

环境

基于vue3.2和uni-ui开发;
依赖版本参考如下:

    "dependencies": {"@dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","@dcloudio/uni-ui": "^1.4.28","uni-ui": "^1.0.0","vue": "^3.2.45"},"devDependencies": {"vite": "4.0.3"}
}

小程序调试基础库: 3.3.0

场景

即拿即用, 组件有详细注释内容, 方便二次开发;
目前仅在小程序使用, 其他平台能否使用请评论留言反馈谢谢, 祝大家使用愉快.

附言

主要是插件市场没找到满意的, 诸多用着也不顺, 所以有了cc-comment, 如有Bug请留言或Email, 开源不易且用且珍惜, 感谢使用.
关于功能样式, 主打一个借鉴如下;
参考[小红书]App的评论回复功能: 点击评论内容展示回复弹窗, 二级评论默认显示一条, 点击展开查看更多, 无评论收起功能.
参考[什么值得买]App的多层级回复评论title显示效果

功能

已实现
  • 无评论显示场景 √
  • 显示评论数量(新增和删除动态更新数量) √
  • 发起新评论 √
  • 点击评论内容回复 √
  • 回复一级评论 √
  • 回复二级评论 √
  • 展开二级评论 √
  • 展开超长评论内容 √
  • 不能回复自身评论 √
  • 删除 √
  • 仅可删除自身评论 √
  • 可选三类删除模式 √
  • 点赞 √
  • 点赞大于100显示99+ √
待实现
  • 图片上传 ×

有其他需求的评论区留言

:props 属性

属性名说明类型默认值必填说明
ref实例Object-true
tableData评论列表Array[ ]true
tableTotal评论总数Number0true
deleteMode评论删除模式Stringallfalsebind-当被删除的一级评论存在回复评论, 那么该评论内容变更显示为[当前评论内容已被移除] only-仅删除当前评论(后端删除相关联的回复评论, 否则总数显示不对) all-删除所有评论包括回复评论

deleteMode

@event 事件

属性名说明参数说明
likeClick点赞事件{{params},callback}{ params: 评论id }, callback回调函数, 请求后端接口后调用, 执行后续逻辑
replyClick回复事件{{params},callback}{ params:评论参数 }, callback回调函数, 请求后端接口后调用, 执行后续逻辑
deleteClick删除事件{{params,mode},callback}{ params: 评论数组id, mode:删除模式[all,bind,only] }, callback回调函数, 请求后端接口后调用, 执行后续逻辑

$ref 实例可调用属性&事件

属性名说明回调参数说明平台差异说明
newCommentFun发起新评论-event-

数据说明

// 用户信息
type userInfoKeys = {id: number // 用户iduser_name: string // 用户名user_avatar: string // 用户头像地址
}
// 评论表
type tableDataKeys = {id: number // 评论idparent_id: number // 父级评论idreply_id: number // 被回复人评论idreply_name: string // 被回复人名称user_name: string // 用户名user_avatar: string // 评论者头像地址user_content: string // 评论内容is_like: boolean // 是否点赞like_count: number // 点赞数统计create_time: string // 创建时间
}

使用方法

<template><CCommentref="ccRef"v-model:userInfo="userInfo"v-model:tableData="tableData"v-model:tableTotal="tableTotal"@likeFun="likeFun"@replyFun="replyFun"@deleteFun="deleteFun":deleteMode="deleteMode"></CComment><view @tap="openComment">评论</view>
</template><script setup>
import CComment from "@/components/cc-comment";// 发起新评论
let ccRef = ref(null);
function openComment() {ccRef.value.newCommentFun();
}// 点赞回调事件
function likeFun({ params }, callback) {console.log("likeFun", params);// 当请求失败, 调用callback重置点赞效果;// Demo如下:// axios.post("http://xxx/like", { id: params }).then((res) => {//   if (res.code !== 0) {//     callback(res);//   }// });
}// 回复回调事件
function replyFun({ params }, callback) {console.log("replyFun", params);// 当请求成功, 调用callback执行评论插入;// Demo如下:// axios.post("http://xxx/reply", { ...params }).then((res) => {//   if (res.code === 0) {//     callback(res);//   }// });const res = { id: Math.random() }; // 很重要的回参! 必须拿到后端返回评论id! 删除需要!setTimeout(() => callback(res), 500); // 目前为了展示效果, 直接执行callback
}/** 删除回调事件* mode 删除模式* -- bind: 当被删除的一级评论存在回复评论, 那么该评论内容变更显示为[当前评论内容已被移除]* -- only: 仅删除当前评论(后端删除相关联的回复评论, 否则总数显示不对)* -- all : 删除所有评论包括回复评论*/
const deleteMode = ref("all");
function deleteFun({ params, mode }, callback) {console.log("deleteFun", { params, mode });// 当请求成功, 调用callback执行评论删除;switch (deleteMode) {case "bind":// 逻辑: 调用接口进行评论内容修改 updatesetTimeout(() => callback(), 500); // 目前为了展示效果, 直接执行callbackbreak;case "only":// 逻辑: 调用接口删除一个评论 deletesetTimeout(() => callback(), 500); // 目前为了展示效果, 直接执行callbackbreak;default:// all// 逻辑: 调用接口删除多个评论 [delete]// Demo如下:// axios.post("http://xxx/delete", { ids: params }).then((res) => {//   if (res.code === 0) {//     callback(res);//   }// });setTimeout(() => callback(), 500); // 目前为了展示效果, 直接执行callbackbreak;}
}// ----模拟数据------模拟数据------模拟数据----
// 当前登录用户信息
let userInfo = reactive({id: 120, // 评论iduser_name: "ikun", // 用户名user_avatar:"https://pic1.zhimg.com/80/v2-a79071a705f55c5d88f6c74e6111fe84_720w.webp", // 用户头像
});
let tableTotal = ref(4);// 评论总数
let tableData = reactive([{id: 120, // 评论idparent_id: null, // 父级评论idreply_id: null, // 被回复人评论idreply_name: null, // 被回复人名称user_name: "ikun", // 用户名user_avatar:"https://pic1.zhimg.com/80/v2-a79071a705f55c5d88f6c74e6111fe84_720w.webp", // 评论者头像地址user_content: "唱,跳,rap,篮球", // 评论内容is_like: false, // 是否点赞like_count: 120, // 点赞数统计create_time: "2024-01-01 09:16", // 创建时间},{id: 130,parent_id: 120, // 评论的父级idreply_id: 120, // 被回复评论idreply_name: "ikun", // 被回复人名称user_name: "小黑子", // 用户名user_avatar:"https://pic2.zhimg.com/80/v2-06eade66ec837713d765b1557bf20b25_720w.webp", // 评论者头像地址user_content: "姬霓太美", // 评论内容is_like: false, // 是否点赞like_count: 67, // 点赞数统计create_time: "2024-01-01 17:06", // 创建时间},{id: 140,parent_id: 120, // 评论的父级idreply_id: 130, // 被回复评论idreply_name: "小黑子", // 被回复人名称user_name: "守护宗主维护宗门", // 用户名user_avatar:"https://pic3.zhimg.com/80/v2-244696a62fa750b8570cf56bfaa5b26a_720w.webp", // 评论者头像地址user_content: "你露出鸡脚了", // 评论内容is_like: false, // 是否点赞like_count: 16, // 点赞数统计create_time: "2024-01-02 23:08", // 创建时间},{id: 150,parent_id: null, // 评论的父级idreply_id: null, // 被回复评论idreply_name: null, // 被回复人名称user_name: "音乐制作人", // 用户名user_avatar:"https://pic2.zhimg.com/80/v2-88ec6f8c6d3305122664dd18a28730e5_720w.webp", // 评论者头像地址user_content:"只因你太美baby 只因你太美baby 只因你实在是太美baby 只因你太美baby 迎面走来的你让我如此蠢蠢欲动 这种感觉我从未有 Cause I got a crush on you who you 你是我的 我是你的 谁 再多一眼看一眼就会爆炸 再近一点靠近点快被融化", // 评论内容is_like: true, // 是否点赞like_count: 8, // 点赞数统计create_time: "2024-01-08 00:45", // 创建时间},
]);// 评论表</script>

再放一遍下载地址

uni-app官方插件市场: cc-comment组件

感谢使用

相关文章:

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果 下载地址 uni-app官方插件市场: cc-comment组件 环境 基于vue3.2和uni-ui开发; 依赖版本参考如下: "dependencies": {"dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","dcloudio/uni-ui": "^1.4.28","…...

TongLINKQ(3):TongLINKQ常用命令

启动&#xff1a; tlq 暂停&#xff1a; tlq -cabort -y -w1 查看lic信息&#xff1a; tlqstat –lic 查看队列消息&#xff1a; tlqstat -qcu qcu名 -c 查看发送连接状态&#xff1a; tlqstat -snd qcu名 -1 -ct 1 查看指定的Qcu连接状态&#xff1a; tlqsta…...

抽水马桶出水慢解决记录

今天分享一些修马桶的小心得&#xff08;雾&#xff09; 家里的马桶出水很好&#xff0c;但是水却不怎么被冲下去&#xff08;出水很慢&#xff09;&#xff0c;这会导致内容物滞留&#xff0c;造成很不好的使用体验。 出于成本考虑&#xff0c;首先选择自己维修。 首先直接…...

img标签的奇怪问题

本来只是为实现一个轮播图&#xff0c;img的url地址是从后端接口获取的&#xff0c;但不巧的是url地址的图片都过期了。 因为懒得重新到网上找图&#xff0c;就想直接用一下本地的图片&#xff0c;简单的想法遇到一堆问题。 问题一&#xff1a; 因为是springboot项目&#xf…...

深入探究Hibernate:优雅、强大的Java持久化框架

目录 1、前言 2、Hibernate简介 2.1 什么是Hibernate 2.2 为什么选择Hibernate 3、Hibernate核心概念 3.1 实体类和映射文件 3.2 数据库表和持久化类的映射 3.3 主键生成策略 3.4 持久化操作 3.5 查询语言(HQL和Criteria) 3.6 事务管理 4、Hibernate配置与连接 4…...

JavaScript高级特性详解

摘要&#xff1a;本文将深入探讨JavaScript中的一些高级特性&#xff0c;包括闭包、原型链、高阶函数和异步编程。我们将通过详细的注释和实例来帮助读者理解这些概念&#xff0c;并通过总结部分强调其在实际开发中的应用。 一、闭包 闭包是JavaScript中一个非常重要的概念&a…...

网站建设网络设计营销类网站eyouCMS模板(PC+WAP)

模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&#xff0c;完美兼容IE7、Firefox、Chrome、360浏览器等&#xff1b;主流浏览器&#xff1b;结构容易优化&#xff1b;多终端均可正常预览。...

迅为RK3568开发板Android11/12/Linux编译驱动到内核

在平时的驱动开发中&#xff0c;经常需要在内核中配置某种功能&#xff0c;为了方便大家开发和学习&#xff0c;本小 节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。 Android11 源码如果想要修改内核&#xff0c;可以运行以下命令进行修改: cd ke…...

SaaS 应用深度解析:Marketo

随着数字营销的不断发展&#xff0c;企业需要强大而智能的工具来管理营销活动、吸引潜在客户、并实现销售目标。在众多营销自动化工具中&#xff0c;Marketo 是一款备受推崇的 SaaS 应用&#xff0c;为企业提供全面的营销解决方案。本文将深入了解 Marketo&#xff0c;探讨其功…...

闲聊篇-求职的点点滴滴~~

引言 求职之旅是一段充满挑战与机遇的旅程。它不仅仅是寻找工作的过程&#xff0c;更是一个自我探索和成长的过程。在这篇文章中&#xff0c;我们将探讨求职的各个方面&#xff0c;从准备简历到面试&#xff0c;再到最终拿到心仪的offer。 1. 简历&#xff1a;你的敲门砖 精…...

微软最新研究成果:使用GPT-4合成数据来训练AI模型,实现SOTA!

文本嵌入是各项NLP任务的基础&#xff0c;用于将自然语言转换为向量表示。现有的大部分方法通常采用复杂的多阶段训练流程&#xff0c;先在大规模数据上训练&#xff0c;再在小规模标注数据上微调。此过程依赖于手动收集数据制作正负样本对&#xff0c;缺乏任务的多样性和语言多…...

爬虫案例—抓取小米商店应用

爬虫案例—抓取小米商店应用 代码如下&#xff1a; # 抓取第一页的内容 import requests from lxml import etree url ‘https://app.mi.com/catTopList/0?page1’ headers { ‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (K…...

geemap学习笔记047:边缘检测

前言 边缘检测适用于众多的图像处理任务&#xff0c;除了上一节[[geemap046&#xff1a;线性卷积–低通滤波器和拉普拉斯算子|线性卷积]]中描述的边缘检测核之外&#xff0c;Earth Engine 中还有几种专门的边缘检测算法。其中Canny 边缘检测算法使用四个独立的滤波器来识别对角…...

《Git学习笔记:IDEA整合Git》

在IDEA中集成Git去使用 通过Git命令可以完成Git相关操作&#xff0c;为了简化操作过程&#xff0c;我们可以在IDEA中配置Git&#xff0c;配置好后就可以在IDEA中通过图形化的方式来操作Git。 在IDEA开发工具中可以集成Git&#xff1a; 集成后在IDEA中可以看到Git相关图标&…...

Scipy 高级教程——统计学

Python Scipy 高级教程&#xff1a;统计学 Scipy 提供了强大的统计学工具&#xff0c;用于描述、分析和推断数据的分布和性质。本篇博客将深入介绍 Scipy 中的统计学功能&#xff0c;并通过实例演示如何应用这些工具。 1. 描述性统计 描述性统计是统计学中最基本的任务之一&…...

《向量数据库指南》RAG 应用中的指代消解——解决方案初探

随着 ChatGPT 等大语言模型(LLM)的不断发展&#xff0c;越来越多的研究人员开始关注语言模型的应用。 其中&#xff0c;检索增强生成&#xff08;Retrieval-augmented generation&#xff0c;RAG&#xff09;是一种针对知识密集型 NLP 任务的生成方法&#xff0c;它通过在生成过…...

CSS 一行三列布局,可换行(含grid网格布局、flex弹性布局/inline-block布局 + 伪类选择器)

效果 一、HTML <div class"num-wrap"><div class"num-item" v-for"num in 8" :key"num">{{ num }}</div></div> 二、CSS 1、grid网格布局&#xff08;推荐&#xff09; .num-wrap {// grid网格布局display…...

class_3:lambda表达式

1、lambda表达式是c11引入的一种匿名函数的方式&#xff0c;它允许你在需要函数的地方内联的定义函数&#xff0c;而无需单独命名函数&#xff1b; #include <iostream>using namespace std;bool compare(int a,int b) {return a > b; }int getMax(int a,int b,bool (…...

Hadoop 实战 | 词频统计WordCount

词频统计 通过分析大量文本数据中的词频&#xff0c;可以识别常见词汇和短语&#xff0c;从而抽取文本的关键信息和概要&#xff0c;有助于识别文本中频繁出现的关键词&#xff0c;这对于理解文本内容和主题非常关键。同时&#xff0c;通过分析词在文本中的相对频率&#xff0…...

SpringCloud.04.熔断器Hystrix( Spring Cloud Alibaba 熔断(Sentinel))

目录 熔断器概述 使用Sentinel工具 什么是Sentinel 微服务集成Sentinel 配置provider文件&#xff0c;在里面加入有关控制台的配置 实现一个接口的限流 基本概念 重要功能 Sentinel规则 流控规则 简单配置 配置流控模式 配置流控效果 降级规则 SentinelResource…...

Cadence ADE XL/ADEL仿真提速与避坑指南:从APS多核设置到收敛问题解决

Cadence ADE XL/ADEL仿真提速与避坑指南&#xff1a;从APS多核设置到收敛问题解决 在集成电路设计领域&#xff0c;仿真效率直接决定了产品迭代速度。当电路规模达到数百万晶体管级别时&#xff0c;一次仿真可能耗费数小时甚至数天。本文将分享一套经过实战验证的Cadence仿真优…...

Godot行为树框架实战:构建模块化、可复用的游戏AI系统

1. 项目概述&#xff1a;为你的Godot游戏注入灵魂的AI框架 在游戏开发中&#xff0c;给NPC&#xff08;非玩家角色&#xff09;赋予“灵魂”一直是个既迷人又头疼的挑战。你肯定不想让敌人像木桩一样站着&#xff0c;或者只会沿着固定路线来回踱步&#xff0c;对吧&#xff1f;…...

代码托管工具在GEO工具中表现分析

随着生成式引擎优化&#xff08;GEO&#xff09;在技术选型决策中的影响持续扩大&#xff0c;AI搜索工具对代码托管、DevOps及制品管理工具的推荐结果&#xff0c;正在成为企业评估平台价值的重要参考。2026年&#xff0c;不同规模和需求的团队在借助AI搜索获取工具推荐时&…...

从STM32F103到RP2040:新手如何用Arduino快速上手这块‘网红’双核MCU(附Wokwi在线仿真链接)

从STM32F103到RP2040&#xff1a;用Arduino生态快速征服双核MCU 第一次拿到RP2040开发板时&#xff0c;我习惯性地翻出STM32的工程模板准备移植——直到发现这个拇指大小的板子藏着两个能跑到133MHz的Arm Cortex-M0核心。作为从STM32F103时代走过来的开发者&#xff0c;我们早…...

LettR编辑器光标增强插件:提升代码编辑效率的智能导航方案

1. 项目概述&#xff1a;一个为LettR编辑器量身定制的光标增强插件如果你和我一样&#xff0c;日常重度依赖代码编辑器&#xff0c;那你一定对光标这个看似不起眼的小东西又爱又恨。爱的是&#xff0c;它是我们与代码世界交互的核心&#xff1b;恨的是&#xff0c;当代码文件越…...

在Windows上优雅观看B站:BiliBili-UWP第三方客户端完全指南

在Windows上优雅观看B站&#xff1a;BiliBili-UWP第三方客户端完全指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端&#xff0c;当然&#xff0c;是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在用浏览器看B站视频吗&#xff1f;卡…...

从测试驱动到需求驱动:芯片验证范式的深度迁移与实践

1. 从“测试驱动”到“需求驱动”&#xff1a;一次验证范式的深度迁移干了十几年芯片验证&#xff0c;从早期的定向测试到后来的约束随机验证&#xff0c;再到覆盖率驱动验证&#xff0c;我亲眼看着这个领域的复杂度像坐火箭一样往上窜。现在一个SoC项目&#xff0c;动辄几亿门…...

一文看懂:什么是大语言模型

在过去很长一段时间里&#xff0c;计算机只是“执行命令的工具”。但这两年&#xff0c;一种新的技术正在改变这一切——它不仅能理解人类语言&#xff0c;还能写文章、写代码&#xff0c;甚至和你对话。从 ChatGPT 到 DeepSeek&#xff0c;再到 Claude 和 Gemini&#xff0c;“…...

给视觉开发新手的保姆级教程:在Ubuntu上从下载源码到成功运行Demo,搞定OpenCV 3环境搭建

给视觉开发新手的保姆级教程&#xff1a;在Ubuntu上从下载源码到成功运行Demo&#xff0c;搞定OpenCV 3环境搭建 第一次在Ubuntu上搭建OpenCV开发环境&#xff0c;对很多视觉开发新手来说可能是个令人望而生畏的任务。命令行操作、编译工具链、环境配置……这些术语听起来就让人…...

别再死记硬背公式了!用“预测-更新”的贝叶斯视角,5分钟看懂卡尔曼滤波核心

卡尔曼滤波&#xff1a;用贝叶斯思维解决自动驾驶中的不确定性追踪问题 想象一下你正驾驶一辆特斯拉行驶在高速公路上&#xff0c;车载雷达显示前方100米处有一辆卡车。但下一秒雷达数据突然跳变到105米&#xff0c;而摄像头却显示距离是98米。作为人类司机&#xff0c;你会本能…...