form generator
This commit is contained in:
119
src/views/tool/build/IconsDialog.vue
Normal file
119
src/views/tool/build/IconsDialog.vue
Normal file
@ -0,0 +1,119 @@
|
||||
<template>
|
||||
<div class="icon-dialog">
|
||||
<el-dialog
|
||||
v-bind="$attrs"
|
||||
width="980px"
|
||||
:modal-append-to-body="false"
|
||||
@open="onOpen"
|
||||
@close="onClose"
|
||||
>
|
||||
<!-- v-on="$listeners" -->
|
||||
<div slot="title">
|
||||
选择图标
|
||||
<el-input
|
||||
v-model="key"
|
||||
size="small"
|
||||
:style="{ width: '260px' }"
|
||||
placeholder="请输入图标名称"
|
||||
prefix-icon="search"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
<ul class="icon-ul">
|
||||
<li
|
||||
v-for="icon in iconList"
|
||||
:key="icon"
|
||||
:class="active === icon ? 'active-item' : ''"
|
||||
@click="onSelect(icon)"
|
||||
>
|
||||
<ElIcon>
|
||||
<component :is="icon"></component>
|
||||
</ElIcon>
|
||||
<div>{{ icon }}</div>
|
||||
</li>
|
||||
</ul>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import iconListJson from "@/utils/generator/icon.json";
|
||||
import { ref, toRefs, watch } from "vue";
|
||||
|
||||
// const originList = iconListJson.map((name) => `el-icon-${name}`);
|
||||
|
||||
const inheritAttrs = false;
|
||||
const emit = defineEmits(["select", "update:modelValue"]);
|
||||
const props = defineProps(["current"]);
|
||||
const { current } = toRefs(props);
|
||||
const iconList = ref(iconListJson);
|
||||
const active = ref(null);
|
||||
const key = ref("");
|
||||
watch(key, (val) => {
|
||||
if (val) {
|
||||
iconList.value = iconListJson.filter((name) => name.indexOf(val) > -1);
|
||||
} else {
|
||||
iconList.value = iconListJson;
|
||||
}
|
||||
});
|
||||
const onOpen = () => {
|
||||
active.value = current.value;
|
||||
key.value = "";
|
||||
};
|
||||
const onClose = () => {};
|
||||
const onSelect = (icon) => {
|
||||
active.value = icon;
|
||||
emit("select", icon);
|
||||
emit("update:modelValue", false);
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.icon-ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 0;
|
||||
li {
|
||||
list-style-type: none;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
width: 16.66%;
|
||||
box-sizing: border-box;
|
||||
height: 108px;
|
||||
padding: 15px 6px 6px 6px;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
&:hover {
|
||||
background: #f2f2f2;
|
||||
}
|
||||
&.active-item {
|
||||
background: #e1f3fb;
|
||||
color: #7a6df0;
|
||||
}
|
||||
> i {
|
||||
font-size: 30px;
|
||||
line-height: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.icon-dialog {
|
||||
:deep(.el-dialog) {
|
||||
border-radius: 8px;
|
||||
margin-bottom: 0;
|
||||
margin-top: 4vh !important;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-height: 92vh;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
.el-dialog__header {
|
||||
padding-top: 14px;
|
||||
}
|
||||
.el-dialog__body {
|
||||
margin: 0 20px 20px 20px;
|
||||
padding: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
Reference in New Issue
Block a user