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

news2024/12/24 10:02:54

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>

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

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

相关文章

Substrate 入门课第 14 期圆满结束,岗位内推直达知名 Web3 项目!

Substrate&#xff0c;一个完全免费且开源的框架&#xff0c;利用 Rust 语言的强大功能和安全性&#xff0c;为全球开发者提供了一个高效和灵活的开发环境。借助其模块化的设计&#xff0c;即使是新手开发者也能在短短 15 分钟内搭建起定制化的区块链。自 2020 年以来&#xff…

Att论文解读|ICLR 2018 《Graph attention networks》图注意力网络

论文地址 论文地址&#xff1a;https://arxiv.org/abs/1710.10903 github:PetarV-/GAT: Graph Attention Networks (https://arxiv.org/abs/1710.10903) (github.com) gordicaleksa/pytorch-GAT: My implementation of the original GAT paper (Veličković et al.). Ive addi…

ZFS 文件系统结构及 ZFS 文件系统数据恢复

ZFS是一种革命性的文件系统&#xff0c;它遵循完全不同的文件系统管理方法&#xff0c;同时提供目前其他文件系统无法提供的新功能和优势。ZFS 可靠、可扩展且易于管理。 它放弃了卷的概念&#xff0c;从而摆脱了传统的文件系统原则。另外&#xff0c;ZFS 提供更复杂的存储池&…

Java线程池:当核心线程数为 0 时,任务来了的执行流程

先说结论&#xff1a;创建一个临时线程直接执行 ThreadPoolExecutor.excute() public void execute(Runnable command) {if (command null)throw new NullPointerException();int c ctl.get();if (workerCountOf(c) < corePoolSize) {if (addWorker(command, true)) retu…

python + word文本框中文字识别并替换【真替换,不只是识别】

1. 简单描述 在一些转换场景下&#xff0c;文本框不会被转换&#xff0c;需要先识别成文字内容。 【识别的文字段落可能会和实际看到的效果有些差异&#xff0c;后续还需校对&#xff0c;如下图】。 不足&#xff1a;除了上面说的那个情况&#xff08;上图说的问题&#xff0…

pgAdmin 4 使用

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7,Microsoft Windows (64-bit) 10 版本&#xff1a;14 文档用途 本文介绍pgAdmin4使用技巧和工具所具有的比较好的功能。 详细信息 pgAdmin4是用于设计、维护和管理…

简单的表单初始密码验证的实现

目录 简单示例&#xff1a;表单初始密码验证 1.1准备工作(图1&#xff09; 1.2 index部分 1.3 css部分 1.3.1先把css部分链接到index.html中&#xff0c;注意链接的地址。 1.3.2添加样式 1.4 JS部分 1.4.1 先把js部分链接到index.html中&am…

Android APP读写外置SD卡无权限 java.io.IOException: Permission denied

在物联网应用里&#xff0c;app需要对挂载SD卡读写文件&#xff0c;从 Android 4.4&#xff08;KitKat&#xff09;版本开始&#xff0c;Google 引入了一项名为 "Storage Access Framework" 的新功能&#xff0c;该功能限制了应用对外部存储的直接读写权限,要不然就是…

Html + Express 实现大文件分片上传、断点续传、秒传

在日常的网页开发中&#xff0c;文件上传是一项常见操作。通过文件上传技术&#xff0c;用户可以将本地文件方便地传输到Web服务器上。这种功能在许多场景下都是必不可少的&#xff0c;比如上传文件到网盘或上传用户头像等。 然而&#xff0c;当需要上传大型文件时&#xff0c;…

构建第一个ArkTS应用之@AppStorage:应用全局的UI状态存储

AppStorage是应用全局的UI状态存储&#xff0c;是和应用的进程绑定的&#xff0c;由UI框架在应用程序启动时创建&#xff0c;为应用程序UI状态属性提供中央存储。 和AppStorage不同的是&#xff0c;LocalStorage是页面级的&#xff0c;通常应用于页面内的数据共享。而AppStora…

Apache Flume概述

Apache Flume概述 1.Flume定义 ​ Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。 它将各个服务器中的数据收集起来并送到指定的地方去&#xff0c;比如说送到HDFS、Hbase&#xff0c;简单来说flume就是收集日志的。 2.Flume基础架构…

导出QQ好友列表、群列表、群员列表

MENU 准备工作在浏览器地址栏中输入地址使用F12快捷键打开开发者工具(浏览器控制台)点击头像登入网站(推荐)或手机扫码登录获取群列表获取好友列表获取群员列表 准备工作 一台带有浏览器的电脑 在浏览器地址栏中输入地址 https://qun.qq.com/member.html 使用F12快捷键打开开发…

手机同步与数据安全:让手机和电脑完美结合!

在当今这个高度信息化的社会&#xff0c;手机和电脑不仅为我们提供了丰富的信息资源&#xff0c;让我们能够随时随地获取所需的信息&#xff0c;还为我们的生活带来了极大的便利。无论是工作、学习还是娱乐&#xff0c;手机和电脑都发挥着至关重要的作用。 然而&#xff0c;随…

阿里云服务器在线安装nginx

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《nginx实战》 目录 内容简介 安装步骤 1.root用户登录连接阿里云服务器 2.在usr/local下新建nginx目录 3.安装 1安装下载工具 2下载nginx压缩包 3解压 4安装nginx依赖的库 5编译并安装 6启动nginx 7开启…

【数据结构】顺序表(一)

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 不怕别人看不起&#xff0c;就怕自己不争气。路是人走出来的&#xff0c;关键要靠自己闯。振作起来&#xff0c;生活的含义就是前进。 目录 一、顺序表的概念&#xff1a; 二…

东南亚服务器租用托管的优势

东南亚地区在国际贸易领域展现出了巨大的潜力和吸引力&#xff0c;其未来的外贸发展前景被认为是广阔且充满了无限商机。这一地区以其人口众多、经济快速发展的特点&#xff0c;结合独特的地理优势和丰富的自然资源&#xff0c;正在吸引全球企业的目光。今天我们一起来看看东南…

YOLOv8火焰与烟雾智能检测系统

项目概述&#xff1a; 本项目旨在开发一款高效、实时的火焰与烟雾检测系统&#xff0c;利用先进的深度学习技术——YOLOv8&#xff0c;为安全监控领域提供智能化解决方案。系统不仅能够准确识别视频流或静态图像中的火焰与烟雾&#xff0c;还配备了用户友好的图形界面&#xff…

C++ | Leetcode C++题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution { public:bool exist(vector<vector<char>>& board, string word) {rows board.size();cols board[0].size();for(int i 0; i < rows; i) {for(int j 0; j < cols; j) {if (dfs(board, word, i, …

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

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

精益数字化是什么

在传统的生产过程中&#xff0c;存在很多工作是重复且无价值的&#xff0c;这些工作通常需要花费大量的时间和人力&#xff0c;而且容易出现错误。例如人工测量和记录、纸质文档管理、手工排序和分类等&#xff0c;为了解决这个问题。通过引入精益生产和数字化解决方案&#xf…