图标选择器 - SIconSelect
基于 SIcon 和 ASelect 封装,默认使用 @ant-design/icons-vue 图标,也支持自定义选项
演示
基本用法
基本用法
默认使用 @ant-design/icons-vue 图标组件,建议使用 tags 模式,支持单选/多选 (multiple)
单选 (multiple: false)
AlibabaOutlined
SearchOutlined
多选 (multiple: true)
AlibabaOutlined
FontColorsOutlined
SearchOutlined
ApartmentOutlined
复制代码
显示代码
vue
<template>
<ASpace
:size="10"
:wrap="true"
style="margin: 0"
direction="vertical"
>
<div class="title">
单选 (multiple: false)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value1"
style="width: 210px"
mode="tags"
/>
<SIconSelect
v-model:value="value2"
style="width: 210px"
mode="tags"
/>
</ASpace>
<div class="space" />
<div class="title">
多选 (multiple: true)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value3"
style="width: 210px"
:multiple="true"
mode="tags"
/>
<SIconSelect
v-model:value="value4"
style="width: 210px"
:multiple="true"
mode="tags"
/>
</ASpace>
</ASpace>
</template>
<script setup lang="ts">
const value1 = ref('AlibabaOutlined')
const value2 = ref('SearchOutlined')
const value3 = ref([
'AlibabaOutlined',
'FontColorsOutlined',
])
const value4 = ref([
'SearchOutlined',
'ApartmentOutlined',
])
</script>
<style lang="less" scoped>
.title {
width: 100%;
font-size: 14px;
color: #30323c;
}
.space {
width: 100%;
height: 8px;
}
</style>支持 iconfont
支持 iconfont
通过 iconPrefix 和 iconfontUrl 配置, 支持使用 iconfont 图标组件,建议使用 tags 模式
单选 (multiple: false)
font-product
font-shop
多选 (multiple: true)
font-product
font-setting
font-shop
font-refresh
复制代码
显示代码
vue
<template>
<ASpace
:size="10"
:wrap="true"
style="margin: 0"
direction="vertical"
>
<div class="title">
单选 (multiple: false)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value1"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:iconStyle="{ color: '#606266' }"
style="width: 210px"
mode="tags"
/>
<SIconSelect
v-model:value="value2"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:iconStyle="{ color: '#606266' }"
style="width: 210px"
mode="tags"
/>
</ASpace>
<div class="space" />
<div class="title">
多选 (multiple: true)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value3"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:iconStyle="{ color: '#606266' }"
style="width: 210px"
:multiple="true"
mode="tags"
/>
<SIconSelect
v-model:value="value4"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:iconStyle="{ color: '#606266' }"
style="width: 210px"
:multiple="true"
mode="tags"
/>
</ASpace>
</ASpace>
</template>
<script setup lang="ts">
const iconPrefix = 'font-'
const iconfontUrl = 'https://at.alicdn.com/t/c/font_1403293_zz95gjv9ru.js'
const value1 = ref('font-product')
const value2 = ref('font-shop')
const value3 = ref([
'font-product',
'font-setting',
])
const value4 = ref([
'font-shop',
'font-refresh',
])
</script>
<style lang="less" scoped>
.title {
width: 100%;
font-size: 14px;
color: #30323c;
}
.space {
width: 100%;
height: 8px;
}
</style>自定义 Icons
自定义 Icons
支持自定义选项 (Icons),建议使用 tags 模式
单选 (multiple: false)
font-personal-outline
font-phone-outline
多选 (multiple: true)
font-personal-outline
font-friend-outline
font-phone-outline
font-email-outline
复制代码
显示代码
vue
<template>
<ASpace
:size="10"
:wrap="true"
style="margin: 0"
direction="vertical"
>
<div class="title">
单选 (multiple: false)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value1"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:options="iconOptions"
style="width: 210px"
mode="tags"
/>
<SIconSelect
v-model:value="value2"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:options="iconOptions"
style="width: 210px"
mode="tags"
/>
</ASpace>
<div class="space" />
<div class="title">
多选 (multiple: true)
</div>
<ASpace
:size="25"
:wrap="true"
style="margin: 0"
>
<SIconSelect
v-model:value="value3"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:options="iconOptions"
style="width: 210px"
:multiple="true"
mode="tags"
/>
<SIconSelect
v-model:value="value4"
:iconPrefix="iconPrefix"
:iconfontUrl="iconfontUrl"
:options="iconOptions"
style="width: 210px"
:multiple="true"
mode="tags"
/>
</ASpace>
</ASpace>
</template>
<script setup lang="ts">
const iconPrefix = 'font-'
const iconfontUrl = 'https://at.alicdn.com/t/c/font_1403293_zz95gjv9ru.js'
const value1 = ref('font-personal-outline')
const value2 = ref('font-phone-outline')
const value3 = ref([
'font-personal-outline',
'font-friend-outline',
])
const value4 = ref([
'font-phone-outline',
'font-email-outline',
])
const iconOptions = iconOptionsDefiner([
{
label: '用户',
value: 'User',
options: [
{
label: 'font-personal-outline',
value: 'font-personal-outline',
},
{
label: 'font-friend-outline',
value: 'font-friend-outline',
},
{
label: 'font-customer-service-outline',
value: 'font-customer-service-outline',
},
],
},
{
label: '操作',
value: 'Operate',
options: [
{
label: 'font-phone-outline',
value: 'font-phone-outline',
},
{
label: 'font-email-outline',
value: 'font-email-outline',
},
],
},
])
</script>
<style lang="less" scoped>
.title {
width: 100%;
font-size: 14px;
color: #30323c;
}
.space {
width: 100%;
height: 8px;
}
</style>API
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| style | 设置 组件 style | string object | - |
| class | 设置 组件 class | string object | - |
| iconStyle | 设置 SIcon style | string object | - |
| iconClass | 设置 SIcon class | string object | - |
| iconPrefix | 设置 SIcon 的 iconfont icon 标识符 | string | - |
| iconfontUrl | 设置 SIcon 的 iconfont url 地址 | string | - |
| optionFilterProp | 搜索时过滤对应 option 属性 | string | - |
| optionLabelProp | 回填到选择框的 Option 的属性值 | string | - |
| placeholder | 选择框默认提示文字 | string | - |
| showSearch | 配置是否可搜索 | boolean | true |
| allowClear | 支持清除 | boolean | true |
| showArrow | 是否显示下拉小箭头 | boolean | true |
| multiple | 是否设置为多选 (即 value 值类型为 Array) | boolean | false |
| disabled | 是否禁用 | boolean | false |
| options | Options 数据 默认使用 icons-vue 图标选项 | SIconSelectOption[] | - |
| value (v-model) | 指定当前选中的条目 | string number string[] number[] | - |
| mode | 设置模式为多选或标签 | 'multiple' 'tags' | - |
| size | 组件大小 | 'large' 'middle' 'small' | - |
Emits
| 事件 | 说明 | 类型 |
|---|---|---|
| change | 选中 option,或 input 的 value 变更 | (value: any, option: any | any[]) => void |
| search | 文本框值变化时 | (value: string) => void |
| blur | 失去焦点时 | (event: Event) => void |
Definer
| 定义 | 说明 |
|---|---|
| iconOptionsDefiner | 辅助定义 Props options 选项,提供 TypeScript 提示和校验 |