| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <template>
- <text
- :class="[fontClass, iconClass]"
- :style="{ color: color, fontSize: size + 'rpx',verticalAlign: 'middle'}"
- @click="handleClick"
- ></text>
- </template>
- <script setup>
- /**
- * 图标组件
- * 基于iconfont图标库
- */
- import { computed } from 'vue';
- // 组件属性定义
- const props = defineProps({
- // 图标名称,对应iconfont中的类名,如'icon-home'
- name: {
- type: String,
- required: true
- },
- // 图标库:legacy(旧库)/base(基础库)/biz(业务库)
- // 不传默认使用旧库,兼容现有代码
- lib: {
- type: String,
- default: 'legacy'
- },
- // 图标颜色
- color: {
- type: String,
- default: '#000'
- },
- // 图标大小,单位rpx
- size: {
- type: [Number, String],
- default: 32
- }
- });
- // 事件
- const emit = defineEmits(['click']);
- // 选择字体库class
- const fontClass = computed(() => {
- if (props.lib === 'base') return 'icon-base'
- if (props.lib === 'biz') return 'icon-biz'
- return 'iconfont'
- })
- // 计算完整的图标类名
- const iconClass = computed(() => {
- return props.name;
- });
- // 点击事件处理
- const handleClick = (event) => {
- emit('click', event);
- };
- </script>
- <style>
- /* 引入iconfont样式 */
- @import '../../static/iconfont/iconfont.css';
- @import '../../static/iconfont/icon-base/iconfont.css';
- @import '../../static/iconfont/icon-biz/iconfont.css';
- .iconfont,
- .icon-base,
- .icon-biz{
- line-height: 1;
- }
- </style>
|