uniapp评价组件

在这里插入图片描述
在这里插入图片描述
组件目录 components/Evaluation.vue

<template><view class="evaluation-container"><!-- 综合评价 --><view class="evaluation-item" @tap="parentTap"><text class="label label-1">综合评价</text><view class="rating-icons"><imagev-for="(icon, index) in ratingIcons":key="index":class="['rating-icon', { active: icon.active }]":src="icon.active ? icon.selectedSrcDynamic : icon.unselectedSrc"@tap.stop="setRating(index)"/></view><text class="comment-text">{{ getCommentText(ratingIcons.filter(i => i.active).length) }}</text></view><!-- 描述相符 --><view class="evaluation-item" @tap="parentTap"><text class="label">描述相符</text><view class="heart-icons"><imagev-for="(heart, index) in descriptionHearts":key="index":class="['heart-icon', { active: heart.active }]":src="heart.active ? '/static/evaluate/heart-filled.png' : '/static/evaluate/heart-empty.png'"@tap.stop="setHeart(index, 'description')"/></view><text class="comment-text">{{ getCommentText(descriptionHearts.filter(i => i.active).length) }}</text></view><!-- 物流服务 --><view class="evaluation-item" @tap="parentTap"><text class="label">物流服务</text><view class="heart-icons"><imagev-for="(heart, index) in logisticsHearts":key="index":class="['heart-icon', { active: heart.active }]":src="heart.active ? '/static/evaluate/heart-filled.png' : '/static/evaluate/heart-empty.png'"@tap.stop="setHeart(index, 'logistics')"/></view><text class="comment-text">{{ getCommentText(logisticsHearts.filter(i => i.active).length) }}</text></view><!-- 服务态度 --><view class="evaluation-item" @tap="parentTap"><text class="label">服务态度</text><view class="heart-icons"><imagev-for="(heart, index) in serviceHearts":key="index":class="['heart-icon', { active: heart.active }]":src="heart.active ? '/static/evaluate/heart-filled.png' : '/static/evaluate/heart-empty.png'"@tap.stop="setHeart(index, 'service')"/></view><text class="comment-text">{{ getCommentText(serviceHearts.filter(i => i.active).length) }}</text></view></view>
</template><script>
export default {name: 'Evaluation',props: {defaultValues: {type: Object,default: () => ({})},readonly: {type: Boolean,default: false}},data() {return {ratingIcons: [{unselectedSrc: '/static/evaluate/face-very-bad-unselected.png',selectedSrc: '/static/evaluate/face-very-bad.png',selectedSrcDynamic: null,active: false},{unselectedSrc: '/static/evaluate/face-bad-unselected.png',selectedSrc: '/static/evaluate/face-bad.png',selectedSrcDynamic: null,active: false},{unselectedSrc: '/static/evaluate/face-neutral-unselected.png',selectedSrc: '/static/evaluate/face-neutral.png',selectedSrcDynamic: null,active: false},{unselectedSrc: '/static/evaluate/face-good-unselected.png',selectedSrc: '/static/evaluate/face-good.png',selectedSrcDynamic: null,active: false},{unselectedSrc: '/static/evaluate/face-very-good-unselected.png',selectedSrc: '/static/evaluate/face-very-good.png',selectedSrcDynamic: null,active: false}],descriptionHearts: Array(5).fill({ active: false }).map(h => ({ ...h })),logisticsHearts: Array(5).fill({ active: false }).map(h => ({ ...h })),serviceHearts: Array(5).fill({ active: false }).map(h => ({ ...h })),commentTexts: ['很差', '不满意', '一般', '满意', '超赞']};},mounted() {this.initEvaluation(this.defaultValues);},methods: {parentTap() {},setRating(index) {if (this.readonly) return;const selectedSrc = this.ratingIcons[index].selectedSrc;this.ratingIcons.forEach((icon, i) => {icon.active = i <= index;icon.selectedSrcDynamic = i <= index ? selectedSrc : null;});},setHeart(index, type) {if (this.readonly) return;const hearts = this[type + 'Hearts'];hearts.forEach((heart, i) => {heart.active = i <= index;});},getResult() {return {overall: this.ratingIcons.filter(i => i.active).length,description: this.descriptionHearts.filter(i => i.active).length,logistics: this.logisticsHearts.filter(i => i.active).length,service: this.serviceHearts.filter(i => i.active).length};},initEvaluation({ overall = 0, description = 0, logistics = 0, service = 0 }) {const selectedSrc = this.ratingIcons[overall - 1]?.selectedSrc || null;this.ratingIcons.forEach((icon, i) => {icon.active = i < overall;icon.selectedSrcDynamic = i < overall ? selectedSrc : null;});const setHearts = (arr, score) => {arr.forEach((item, i) => {item.active = i < score;});};setHearts(this.descriptionHearts, description);setHearts(this.logisticsHearts, logistics);setHearts(this.serviceHearts, service);},getCommentText(count) {if (count === 0) return '';return this.commentTexts[count - 1];}}
};
</script><style scoped>
.evaluation-container {/* padding: 20px; */
}
.evaluation-item {display: flex;align-items: center;margin-bottom: 28rpx;
}
.label{font-size: 28rpx;color: #2D2D2D;
}
.label-1{color: #0F1724;font-weight: 600;
}.rating-icons,
.heart-icons {display: flex;/* gap: 10px; */
}
.rating-icon,
.heart-icon {width: 60rpx;height: 60rpx;margin-left: 30rpx;
}/* 动画效果 */
@keyframes bounce {0% {transform: scale(1);}40% {transform: scale(1.3);}100% {transform: scale(1);}
}.rating-icon.active,
.heart-icon.active {animation: bounce 0.3s ease;
}/* 文案样式 */
.comment-text {margin-left: 24rpx;font-weight: 600;font-size: 28rpx;color: #0F1724;white-space: nowrap;
}
</style>

页面使用

<template><view><Evaluationref="evaluation":default-values="{ overall: 0, description: 0, logistics: 0, service: 0 }":readonly="false"/><button @tap="submit">提交</button></view>
</template><script>
import Evaluation from '@/components/Evaluation.vue';export default {components: { Evaluation },methods: {submit() {const result = this.$refs.evaluation.getResult();console.log('提交评分结果', result);}}
};
</script>

readonly是否允许点击一般详情页可以传true不让点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88102.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server2022版详细安装教程(Windows)

一&#xff0c;下载SQL Server 可以浏览器自己搜索一下 2、安装 安装前需要先将防火墙和带杀毒软件的先退出关闭掉&#xff08;防止安装不成功&#xff09; 2.1、选择自定义安装 2.2、更改位置进行安装 2.3、等待安装 3、进行安装配置 当安装好后会弹出一个这样的页面 3.1、…

【图像】ubuntu中图像处理

一、环境设置 1、查看视频源 ls /dev/video* 2、查看摄像头的分辨率等参数 v4l2-ctl --device/dev/video0 --list-formats-ext 若未安装v4l-utils sudo apt install v4l-utils 3、测试摄像头能否正常工作 cheese

架构总结记录

1、架构模型解决的共同问题 1.1、高内聚低耦合&#xff1a;解耦外部依赖&#xff0c;分离业务复杂度和技术复杂度等。 1.2、信息孤岛和数据壁垒&#xff1a;单体架构垂直&#xff0c;没有相互调用和复用。逻辑抽象、能力下沉、多系统复用问题 1.3、熵增 2、‌单体架构与分布…

Python: file: encode: ‘gbk‘ codec can‘t encode character ‘\xe5‘ in position

错误 response requests.get(url, timeout5) # 请求一个网页 with open(‘response.txt’, ‘w’) as file: # 打开一个文件 file.write(response.text) # 向文件写入response 提示错&#xff1a; UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xe5’ in po…

PyTorch深度学习框架60天进阶学习计划 - 第59天模型鲁棒性(一):对抗样本生成机理与PGD攻击详解

PyTorch深度学习框架60天进阶学习计划 - 第59天模型鲁棒性&#xff08;一&#xff09;&#xff1a;对抗样本生成机理与PGD攻击详解 &#x1f3af; 第一部分&#xff1a;对抗样本的魔法世界 哈喽各位"反黑客"学员&#xff01;欢迎来到第59天的课程&#xff01;今天我…

kibana和elasticsearch安装

1、elasticsearch 6.8.23 安装包下载地址&#xff1a; Elasticsearch 6.8.23 | Elastic 通过网盘分享的文件&#xff1a;elasticsearch-6.8.23.zip 链接: https://pan.baidu.com/s/1D2SrJ8nVBlqC1QNswmMJXg?pwd1234 提取码: 1234 2、kibana 6.8.23 安装包下载地址&#xff…

vue3 el-table row-class-name 行字体颜色失效

在使用 Vue 3 中的 el-table 组件时&#xff0c;如果你遇到了 row-class-name 属性设置的行颜色失效&#xff0c;并被 el-table 的默认样式覆盖的问题&#xff0c;通常是因为 CSS 优先级或者样式冲突导致的。这里有几个方法可以帮助你解决这个问题&#xff1a; 1. 增加 CSS 优…

【跨界新视野】信号处理遇上VR/AR:下一代沉浸体验的核心技术与您的发表蓝海

导语&#xff1a; 元宇宙概念虽经历起伏&#xff0c;但其底层支撑技术——信号处理&#xff08;Signal Processing&#xff09;与虚拟/增强现实&#xff08;VR/AR&#xff09; 的融合创新正蓬勃发展。从高保真音效定位、脑机接口信号解析&#xff0c;到实时三维重建与交互渲染&…

VMware 2025安装教程(附安装包)VMware 2025下载详细安装图文教程

文章目录 引言第A部分&#xff1a;vmware虚拟机安装包的获取与准备第1步&#xff1a;下载VMware虚拟机安装程序 第B部分&#xff1a;VMware虚拟机安装步骤第3步&#xff1a;启动安装向导第4步&#xff1a;同意软件许可协议第5步&#xff1a;设定程序安装路径第6步&#xff1a;配…

wsl2 用桥接方式连网

安装 Hyper-V windows 家庭版怎么安装 Hyper-V-CSDN博客 用管理员打开 PowerShell 执行 Get-NetAdapter 出系统所有的网卡&#xff0c;记住想要桥接的网卡名称 无线网名称一般为 WLAN&#xff0c;有线网名称一般为 以太网&#xff0c;我的是 以太网 2 执行 Get-VMSwitch 查…

<tauri><threejs><rust><GUI>基于tauri和threejs,实现一个3D图形浏览程序

前言 本专栏是基于rust和tauri&#xff0c;由于tauri是前、后端结合的GUI框架&#xff0c;既可以直接生成包含前端代码的文件&#xff0c;也可以在已有的前端项目上集成tauri框架&#xff0c;将前端页面化为桌面GUI。 发文平台 CSDN 环境配置 系统&#xff1a;windows 10 …

C++基础之指针

文章目录 指针介绍 C指针的定义与用法指针的定义指针的基本操作指针的常见用法1. 动态内存分配2. 指针与数组3. 指针作为函数参数&#xff08;传址调用&#xff09;4. 函数返回指针 特殊指针类型智能指针&#xff08;C11起&#xff09;2.入门代码3.总结 指针介绍 C指针的定义与…

基于存储过程的MySQL自动化DDL同步系统设计

在现代SaaS与微服务架构中&#xff0c;数据库结构的自动化管理成为保障系统迭代效率与数据一致性的关键一环。本文将围绕如何通过 MySQL 存储过程构建一个自动建表、字段同步、索引维护、错误日志记录于一体的 DDL 自动同步系统&#xff0c;提供一套完整的工程化实现方案。 一…

【cmake学习】添加库文件

文章目录 目的一、原理二、步骤1.修改CMakeList2.main函数如下3.编译运行 目的 上一篇 学习了使用cmake 构建多源文件工程在项目开发工程中&#xff0c;一般都会生成库文件或者调用其它的一些库文件&#xff0c;所以我们要学习一下简单生成和使用库文件这里主要介绍 add_libra…

Docker容器化部署实战:Spring Boot + MySQL + Nginx 一键部署完整指南

📖 前言 容器化技术已经成为现代软件部署的标准实践。作为一名DevOps工程师,我在过去几年中参与了数十个项目的容器化改造,深刻体会到Docker在提升部署效率、环境一致性和运维便利性方面的巨大价值。 今天我将通过一个完整的实战案例,详细展示如何使用Docker部署一个包含…

分布式选举算法<一> Bully算法

分布式选举算法详解&#xff1a;Bully算法 引言 在分布式系统中&#xff0c;节点故障是不可避免的。当主节点&#xff08;Leader&#xff09;发生故障时&#xff0c;系统需要快速选举出新的主节点来保证服务的连续性。Bully算法是一种经典的分布式选举算法&#xff0c;以其简…

高效调试 AI 大模型 API:用 Apipost 实现 SSE 流式解析与可视化

借助 AI 大模型的实时接口&#xff08;如 OpenAI GPT 或其他第三方模型 API&#xff09;&#xff0c;开发者可以通过 SSE&#xff08;Server-Sent Events&#xff09;流式处理数据&#xff0c;实时获取模型的逐步输出。这一技术已广泛应用于实时问答、代码生成等领域。本文将基…

【网络产品经营】园区网络

园区网络的产品经营逻辑发生显著变化&#xff0c;从传统的“连接功能”导向转向“业务体验驱动”&#xff0c;并结合行业场景化需求、技术架构革新及智能化能力提升&#xff0c;形成多维度的产品策略升级。 一、技术架构变革&#xff1a;从多层复杂到极简全光 传统架构的瓶颈与…

EasyExcel 4.X 读写数据

文章目录 EasyExcel与SpringBoot集成读数据读取数据的流程定义实体类简单读取自定义监听器 读取指定sheet和所有sheet多行头读取数据格式转换列表数据实体类自定义转换器自定义监听器数据读取 写数据简单数据写出存储到磁盘返回前端下载 写出指定列宽&#xff0c;和数值精度丢失…

JVM内存管理<一>:Java内存异常问题排查

一、 内存溢出问题的排查 1. 使用工具 - jdk自带 jmapvisualvm 2. 流程 堆转储&#xff1a; (1) 方法一&#xff1a;程序运行时&#xff0c;采用&#xff1a;jmap -dump:formatb,filed:\\data\\xxlJob.hprof 23300 进行堆文件的转储 (2) 方法二&#xff1a;在内存溢出的时候…