icon-select.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <!-- 图标选择下拉框 -->
  2. <template>
  3. <ele-icon-select
  4. clearable
  5. filterable="popper"
  6. :data="iconData"
  7. v-model="model"
  8. :placeholder="placeholder"
  9. :disabled="disabled"
  10. :popper-width="420"
  11. :popper-height="294"
  12. :grid-style="{ gridTemplateColumns: 'repeat(6, 1fr)' }"
  13. :item-style="{ height: '52px' }"
  14. :popper-options="{ strategy: 'fixed' }"
  15. >
  16. <template #icon="{ icon }">
  17. <el-icon>
  18. <component :is="icon" />
  19. </el-icon>
  20. </template>
  21. </ele-icon-select>
  22. </template>
  23. <script setup>
  24. import * as MenuIcons from '@/layout/menu-icons';
  25. defineOptions({ components: MenuIcons });
  26. defineProps({
  27. /** 是否禁用 */
  28. disabled: Boolean,
  29. /** 提示信息 */
  30. placeholder: {
  31. type: String,
  32. default: '请选择菜单图标'
  33. }
  34. });
  35. /** 选中的图标 */
  36. const model = defineModel({ type: String });
  37. const iconNames = Object.keys(MenuIcons);
  38. const iconData = [
  39. {
  40. title: '线框风格',
  41. icons: iconNames.filter((name) => !name.endsWith('Filled'))
  42. },
  43. {
  44. title: '实底风格',
  45. icons: iconNames.filter((name) => name.endsWith('Filled'))
  46. }
  47. ];
  48. </script>