【VUE】UniAPP之uview组件库,自定义tag封装,支持添加u-icon图标

组件代码

javascript 复制代码
<template>
    <view class="tag" :class="[props.mode, props.shape]">
        <slot name="left">
            <!-- icon图标 没有传入图标时不显示 -->
            <u-icon v-if="props.icon !== ''" :name="props.icon" :color="props.color" size="20" />
        </slot>
        {{ props.text }}
        <slot name="right"></slot>
    </view>
</template>

<script lang="ts" setup>
import { defineProps } from 'vue'
const props = defineProps({
    text: { //显示文本
        type: String,
        default: '自定义33'
    },
    color: { //颜色 主体颜色
        type: String,
        default: 'red'
    },
    mode: { //light	dark / plain
        type: String,
        default: 'light'
    },
    shape: { //形状square circle / circleLeft / circleRight
        type: String,
        default: 'circle'
    },
    icon: { //icon图标
        type: String,
        default: ''
    }

})
</script>

<style lang="scss" scoped>
$color: v-bind(color);

.tag {
    padding: 8rpx 22rpx;
    font-size: 20rpx;
    // border-radius: 36rpx;
    text-align: center;
    position: relative;
    z-index: 1;

    &::before {
        content: "";
        display: block;
        border-radius: 36rpx;
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        opacity: 0.07;
        z-index: 0;
    }
}

// 形状
.tag.circle {
    border-radius: 36rpx;
}

.tag.circleLeft {
    border-radius: 36rpx;
    border-bottom-left-radius: 0;
    border-top-left-radius: 0;
}

.tag.circleRight {
    border-radius: 36rpx;
    border-bottom-right-radius: 0;
    border-top-right-radius: 0;
}

// 模式

.tag.light {
    color: $color;
    border: 2rpx solid $color;

    &::before {

        background-color: $color;
    }
}

.tag.light2 {
    color: $color;

    &::before {

        background-color: $color;
    }
}

.tag.light3 {
    color: $color;
    background-color: #fff;

    &::before {
        // background-color: #fff;
        border: 1rpx solid $color;
    }
}

.tag.dark {
    color: #fff;
    background-color: $color;
}

.tag.plain {
    color: $color;
    border: 2rpx solid $color;
}
</style>

使用案例

javascript 复制代码
<tag text="分享" mode="light2" icon="zhuanfa" color="#3820d9" />
<tag text="重新生成" mode="light3" icon="reload" color="#000" />

效果展示

相关推荐
程序员Bears4 分钟前
实战教程:基于Vue.js与Django REST Framework的任务管理SPA开发全流程
前端·vue.js·django
我科绝伦(Huanhuan Zhou)10 分钟前
关系数据库基础入门
前端·数据库·mysql
心.c20 分钟前
TypeScript入门到精通
前端·javascript·typescript
不爱学英文的码字机器26 分钟前
微前端架构:从单体到模块化的前端新革命
前端·架构
Qredsun1 小时前
vue--ofd/pdf预览实现
前端·vue.js·pdf
BillKu7 小时前
Vue3 + Element Plus 中修改表格当前选中行的颜色
前端·vue.js·elementui
BillKu7 小时前
Axios中POST、PUT、PATCH用法区别
前端·vue.js
好奇的菜鸟8 小时前
掌握 npm 核心操作:从安装到管理依赖的完整指南
前端·npm·node.js
源码云商9 小时前
基于 SpringBoot + Vue 的海滨体育馆管理系统设计与实现
vue.js·spring boot·后端
肥肠可耐的西西公主10 小时前
前端(小程序)学习笔记(CLASS 2):WXML模板语法与WXSS模板样式
前端·学习·小程序