feat: tag select ui

This commit is contained in:
tim
2025-07-10 12:01:47 +08:00
parent 463629e9c5
commit d7a242700b
3 changed files with 49 additions and 27 deletions

View File

@@ -1,15 +1,17 @@
<template>
<Dropdown v-model="selected" :fetch-options="fetchCategories" placeholder="选择分类">
<template #option="{ option }">
<div class="option-main">
<template v-if="option.icon">
<img v-if="isImageIcon(option.icon)" :src="option.icon" class="option-icon" />
<i v-else :class="['option-icon', option.icon]"></i>
</template>
<span>{{ option.name }}</span>
<span v-if="option.count > 0"> x {{ option.count }}</span>
<div class="option-container">
<div class="option-main">
<template v-if="option.icon">
<img v-if="isImageIcon(option.icon)" :src="option.icon" class="option-icon" />
<i v-else :class="['option-icon', option.icon]"></i>
</template>
<span>{{ option.name }}</span>
<span class="option-count" v-if="option.count > 0"> x {{ option.count }}</span>
</div>
<div v-if="option.description" class="option-desc">{{ option.description }}</div>
</div>
<div v-if="option.description" class="option-desc">{{ option.description }}</div>
</template>
</Dropdown>
</template>
@@ -50,6 +52,12 @@ export default {
</script>
<style scoped>
.option-container {
display: flex;
flex-direction: column;
gap: 5px;
}
.option-main {
display: flex;
align-items: center;
@@ -59,6 +67,10 @@ export default {
.option-desc {
font-size: 12px;
color: #666;
margin-left: 21px;
}
.option-count {
font-weight: bold;
opacity: 0.4;
}
</style>

View File

@@ -197,10 +197,9 @@ export default {
}
</script>
<style scoped>
<style>
.dropdown {
position: relative;
min-width: 200px;
}
.dropdown-display {
@@ -211,6 +210,7 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
min-width: 100px;
}
.placeholder {
@@ -226,6 +226,7 @@ export default {
border: 1px solid #ccc;
z-index: 10;
max-height: 200px;
min-width: 350px;
overflow-y: auto;
}

View File

@@ -1,21 +1,17 @@
<template>
<Dropdown
v-model="selected"
:fetch-options="fetchTags"
multiple
placeholder="选择标签"
remote
>
<Dropdown v-model="selected" :fetch-options="fetchTags" multiple placeholder="选择标签" remote>
<template #option="{ option }">
<div class="option-main">
<template v-if="option.icon">
<img v-if="isImageIcon(option.icon)" :src="option.icon" class="option-icon" />
<i v-else :class="['option-icon', option.icon]"></i>
</template>
<span>{{ option.name }}</span>
<span v-if="option.count > 0"> x {{ option.count }}</span>
<div class="option-container">
<div class="option-main">
<template v-if="option.icon">
<img v-if="isImageIcon(option.icon)" :src="option.icon" class="option-icon" />
<i v-else :class="['option-icon', option.icon]"></i>
</template>
<span>{{ option.name }}</span>
<span class="option-count" v-if="option.count > 0"> x {{ option.count }}</span>
</div>
<div v-if="option.description" class="option-desc">{{ option.description }}</div>
</div>
<div v-if="option.description" class="option-desc">{{ option.description }}</div>
</template>
</Dropdown>
</template>
@@ -51,7 +47,9 @@ export default {
if (res.ok) {
data = await res.json()
}
} catch {}
} catch {
toast.error('获取标签失败')
}
let options = [...data, ...localTags.value]
@@ -99,6 +97,12 @@ export default {
</script>
<style scoped>
.option-container {
display: flex;
flex-direction: column;
gap: 5px;
}
.option-main {
display: flex;
align-items: center;
@@ -110,4 +114,9 @@ export default {
color: #666;
margin-left: 21px;
}
.option-count {
font-weight: bold;
opacity: 0.4;
}
</style>