123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <template>
- <div class="icon-selector-warp-row">
- <el-scrollbar ref="selectorScrollbarRef">
- <el-row :gutter="10" v-if="props.list.length > 0">
- <el-col :xs="6" :sm="4" :md="4" :lg="4" :xl="4" v-for="(v, k) in list" :key="k" @click="onColClick(v)">
- <div class="icon-selector-warp-item" :class="{ 'icon-selector-active': prefix === v }">
- <SvgIcon :name="v" />
- </div>
- </el-col>
- </el-row>
- <el-empty :image-size="100" v-if="list.length <= 0" :description="empty"></el-empty>
- </el-scrollbar>
- </div>
- </template>
- <script setup lang="ts" name="iconSelectorList">
- // 定义父组件传过来的值
- const props = defineProps({
- // 图标列表数据
- list: {
- type: Array,
- default: () => [],
- },
- // 自定义空状态描述文字
- empty: {
- type: String,
- default: () => '无相关图标',
- },
- // 高亮当前选中图标
- prefix: {
- type: String,
- default: () => '',
- },
- });
- // 定义子组件向父组件传值/事件
- const emit = defineEmits(['get-icon']);
- // 当前 icon 图标点击时
- const onColClick = (v: unknown | string) => {
- emit('get-icon', v);
- };
- </script>
- <style scoped lang="scss">
- .icon-selector-warp-row {
- height: 230px;
- overflow: hidden;
- .el-row {
- padding: 15px;
- }
- .el-scrollbar__bar.is-horizontal {
- display: none;
- }
- .icon-selector-warp-item {
- display: flex;
- justify-content: center;
- align-items: center;
- border: 1px solid var(--el-border-color);
- border-radius: 5px;
- margin-bottom: 10px;
- height: 30px;
- i {
- font-size: 20px;
- color: var(--el-text-color-regular);
- }
- &:hover {
- cursor: pointer;
- background-color: var(--el-color-primary-light-9);
- border: 1px solid var(--el-color-primary-light-5);
- i {
- color: var(--el-color-primary);
- }
- }
- }
- .icon-selector-active {
- background-color: var(--el-color-primary-light-9);
- border: 1px solid var(--el-color-primary-light-5);
- i {
- color: var(--el-color-primary);
- }
- }
- }
- </style>
|