使用vant-ui+vue3实现一个可复用的评星组件

1111
如图所示 有两种情况 一种是5颗星 一种是3颗星
官网上只提供了图标类型的 并没有加文字

https://femessage-vant.netlify.app/#/zh-CN/

自己结合两种情况

在全局注册了此组件(后续还会持续更新代码~)

<template>
    <div class="vant_rate_wrapper">
        <van-rate class="vant_rate" :class="{'vant_rate_3': props.count===3}" :disabled="props.disabled"    color="#F4BA43"  void-icon="star" void-color="#EAEAEA" :count="props.count"  v-model="data.rateValue" />
        <div class="vant_rate_tip"  v-if="props.count===5">
            <span class="very_dissatisfied" :class="{'text-gray': data.rateValue < 1}">非常不满意</span>
            <span  class="dissatisfied" :class="{'text-gray': data.rateValue < 2}">不满意</span>
            <span class="general" :class="{'text-gray': data.rateValue < 3}">一般</span>
            <span class="pleased" :class="{'text-gray': data.rateValue < 4}">满意</span>
            <span class="very_pleased" :class="{'text-gray': data.rateValue < 5}">非常满意</span>
        </div>
        <div class="vant_rate_tip_three" v-else>
            <span class="very_dissatisfied" :class="{'text-gray': data.rateValue < 1}">非常不满意</span>
            <span class="general" :class="{'text-gray': data.rateValue < 2}">一般</span>
            <span class="pleased" :class="{'text-gray': data.rateValue < 3}">满意</span>
        </div>
    </div>
</template>

<script setup lang="ts">
import {ref, reactive, watch} from "vue";
//props
interface iProps {
    touchable?:boolean, //是否可以通过滑动手势选择评分
    count?:number
    disabled?: boolean
    error?:boolean
    modelValue: number
    [key: string]: any
}
//emit
interface iEmit {
    (e: 'click', value: string): void
    (e: 'input', value: string): void
    (e: 'change', value: string): void
    (e: 'update:modelValue', value: number): void   //更新v-model
}

const emit = defineEmits<iEmit>();
const props = withDefaults(defineProps<iProps>(), {
    modelValue:0
})
interface iData {
    rateValue:number,
}
const data:iData=reactive({
    rateValue:props.modelValue

})
watch(()=>props.modelValue,(newVal)=>{
    console.log(44434,newVal)
    data.rateValue = newVal
},{
    immediate: true
})
</script>

<style scoped lang="less">
.vant_rate_wrapper{
    width: calc(100% - 40px);
    height: 46px;
    border-radius: 5px;
    padding: 20px ;
    border: 1px solid #DDE0E8;
    /deep/.vant_rate{
        display: flex;
        justify-content: space-around;
        .van-rate__item{
            margin-left: 5px;
        }
    }
    /deep/.vant_rate_3{
        display: flex;
        justify-content: space-around;
        padding: 0 14px 0 20px;
        .van-rate__item {
            &:first-child {
                margin-left: 0; // 第一个星与五个星的第一个星对齐
            }
            &:nth-child(2) {
                margin-left: 36%; // 第二个星与五个星的第三个星对齐
            }
            &:nth-child(3) {
                margin-left: auto; // 第三个星与五个星的最后一个星对齐
            }
        }
    }
    .vant_rate_tip{
        margin-top: 14px;
        line-height: 1;
        display: flex;
        justify-content: flex-start;
        text-align: left;
        span{
            font-weight: 400;
            font-size: 12px;
            color:rgba(0,0,0,0.9)
        }
        .dissatisfied{
            margin-left: 10px;
        }
        .general{
            margin-left: 26px;
        }
        .pleased{
            margin-left: 36px;
        }
        .very_pleased{
            margin-left: 22px;
        }
    }
    .vant_rate_tip_three{
        margin-top: 14px;
        line-height: 1;
        display: flex;
        justify-content: flex-start;
        text-align: center;
        span{
            font-weight: 400;
            font-size: 12px;
        }
        .general{
            margin-left: 70px;
        }
        .pleased{
            margin-left: 97px;
        }
    }
    /deep/.van-rate--disabled{
        .van-rate__icon--full{
            color:#F4BA43;
        }
    }
    .text-gray {
        color: rgba(0,0,0,0.35) !important; // 灰色
    }
}


</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

requestAnimationFrame请求动画帧

一、前言 在Web应用中&#xff0c;实现动画效果的方法比较多&#xff1a; CSS3&#xff1a;Transition&#xff08;过度&#xff09; / Animation&#xff08;动画&#xff09; HTML5&#xff1a;Canvas JavaScript&#xff1a;setInterval&#xff08;定时器&#xff09; /…

2010年认证杯SPSSPRO杯数学建模D题(第一阶段)服务网点的分布全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 D题 服务网点的分布 原题再现&#xff1a; 服务网点、通讯基站的设置&#xff0c;都存在如何设置较少的站点&#xff0c;获得较大效益的问题。通讯基站的覆盖范围一般是圆形的&#xff0c;而消防、快餐、快递服务则受到道路情况和到达时间的限…

答辩PPT制作太费时?AI工具帮你节省时间

在我原本的认知里面&#xff0c;答辩PPT是要包含论文各个章节的&#xff0c;在答辩时需要方方面面都讲到的&#xff0c;什么摘要、文献综述、实证分析、研究结果样样不落。但是&#xff0c;这大错特错&#xff01; 答辩PPT环节时长一般不超过5分钟&#xff0c;老师想要的答辩P…

2024美国虚拟信用卡申请流程

一、消费场景 二、如果申请 Fomepay美国虚拟信用卡 1.打开 Fomepay官方网站地址 2、登录之后根据自己的需求选择卡bin 3、点击申请卡&#xff0c;选择金额、填写姓名&#xff0c;选择微信/支付宝点击确认开卡即可 记得刷新页面哦~~~~~ 卡信息在卡中心cvc安全码里面 4、虚拟信…

DRF渲染之异常处理

异常处理 【1 】引言 Django REST Framework 这个就是我们常常说的DRF APIView的dispatch方法&#xff1a; 当请求到达视图时&#xff0c;DRF 的 APIView 类会调用 dispatch 方法来处理请求。在 dispatch 方法中&#xff0c;有一个关键的步骤是处理异常。如果在视图类的方法…

mikefile函数与实用模板

文章目录 0.概述1.函数调用语法2.字符串处理函数2.1 subst&#xff08;字符串替换函数&#xff09;2.2 patsubst&#xff08;模式字符串替换函数&#xff09;2.3 strip&#xff08;去空格函数&#xff09;2.4 findstring&#xff08;查找字符串函数&#xff09;2.5 filter&…

Aigtek:电压放大器的选型标准是什么

选型电压放大器时&#xff0c;需要考虑多个因素&#xff0c;以确保选择适合特定应用需求的设备。电压放大器该怎么选择&#xff0c;下面安泰电子来介绍电压放大器常见的选型标准。 增益要求&#xff1a;首先需要确定所需的增益水平。根据输入信号的幅度和输出信号的要求&#x…

只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)

基本方法 搞一张照片&#xff0c;搞一段语音&#xff0c;合成照片和语音&#xff0c;同时让照片中的人物动起来&#xff0c;特别是头、眼睛和嘴。 语音合成 语音合成的方法很多&#xff0c;也比较成熟了&#xff0c;大家可以选择自己方便的&#xff0c;直接录音也可以&#…

【ZZULI数据结构实验】压缩与解码的钥匙:赫夫曼编码应用

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

大文件传输的好帮手Libarchive:功能强大的开源归档文件处理库

在数字化时代&#xff0c;文件的存储和传输对于企业的日常运作至关重要。但是&#xff0c;服务器中的压缩文件往往无法直接查看或预览&#xff0c;这给用户带来了不便。为了解决这一问题&#xff0c;在线解压功能的开发变得尤为重要。接下来&#xff0c;小编将介绍一个能够实现…

了解集合与数据结构(java)

什么是数据结构? 数据结构就是 数据结构, 功能就是描述和组织数据 比如我有10万个QQ号, 我来组织, 有很多种组织方法, 比如链表, 树, 堆, 栈等等. 假如QQ号要查找数据, 有种数据结构查找数据速度很快, 我们就用它 加入QQ号要进行删除数据, 有种数据结构删除速度很快, 我们…

Spring Cloud Alibaba 网关 Gateway 集成(7)

项目的源码地址 Spring Cloud Alibaba 工程搭建&#xff08;1&#xff09; Spring Cloud Alibaba 工程搭建连接数据库&#xff08;2&#xff09; Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用&#xff08;3&#xff09; Spring Cloud Alibaba Ribbo…

【Web】CTFSHOW 月饼杯 题解(全)

目录 web1_此夜圆 web2_故人心 web3_莫负婵娟 web1_此夜圆 拿到源码&#xff0c;一眼字符串逃逸 本地测一测&#xff0c;成功弹出计算器 <?phpclass a {public $uname;public $password;public function __wakeup(){system(calc);} }function filter($string){retur…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第5章 安装SSH

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

【深度学习Labelme】使用Segment Anything Model (SAM)快速打标,labelme多边形转yolo txt框看看对不对

文章目录 windows安装环境打开labelme自动保存勾选上&#xff0c;保存图片数据不要勾选选SAM精准模型&#xff0c;然后打开图片路径&#xff0c;然后点击创建AI多边形&#xff1a;鼠标点击确认物体控制点&#xff0c;确认完成后&#xff0c;双击鼠标完成选取&#xff0c;并给上…

Django 静态文件管理与部署指南

title: Django 静态文件管理与部署指南 date: 2024/5/10 17:38:36 updated: 2024/5/10 17:38:36 categories: 后端开发 tags: WebOptCDN加速DjangoCompressWebpackStaticDeployCICD-ToolsSecStatic 第一章&#xff1a;介绍 Django 静态文件的概念和重要性 在 Web 开发中&a…

解读计数器算法:原理、Java实现与优劣分析

计数器算法的介绍 计数器算法的基本原理是通过一个计数器来记录事件的发生次数。每当一个特定的事件发生时&#xff0c;计数器的值就会增加一。当需要检查这个事件发生的次数时&#xff0c;只需要查看计数器的当前值即可。这种方法简单直观&#xff0c;易于理解和实现。 想象…

Docker + Django跨域解决方案

什么是Django Django 是一个开源的高级 Python Web 框架&#xff0c;它鼓励快速开发并遵循可重用和可维护的实践。Django 是在 MTV&#xff08;模型-模板-视图&#xff09;模式的基础上设计的&#xff0c;这个模式类似于但不同于 MVC&#xff08;模型-视图-控制器&#xff09;模…

雷森托尔环保科技有限公司见证2024杭州数字供应链装备展潮流

参展企业介绍 青岛雷森托尔环保科技有限公司创建于2018年&#xff0c;位于山东青岛&#xff0c;现注册资本3000万。公司主营生产模压木托盘、化工木托盘、大型设备木包装、出口木托盘、酒柜木酒架等&#xff0c;公司拥有技术人员6人&#xff0c;均为包装设计专业毕业&#xff0…

智慧公厕管理系统的四层架构:感知层、传输层、平台层和应用层

智慧公厕管理系统是一种利用先进技术实现智能化管理和优化厕所体验的创新解决方案。该系统采用复杂的架构&#xff0c;涵盖了多个应用子系统&#xff0c;致力于提高公厕的卫生状况、资源利用效率、安全性以及用户体验。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#…