Files
lingji-work-fe/src/components/common-select/index.vue

74 lines
1.4 KiB
Vue
Raw Normal View History

2025-06-27 18:37:42 +08:00
<!--
* @Author: RenXiaoDong
* @Date: 2025-06-25 14:02:40
-->
<template>
<a-select
v-model="selectedValues"
2025-06-27 18:37:42 +08:00
:multiple="multiple"
size="medium"
:placeholder="placeholder"
2025-08-01 17:25:21 +08:00
:allow-clear="allClear"
:max-tag-count="maxTagCount"
2025-06-27 18:37:42 +08:00
@change="handleChange"
>
<a-option v-for="(item, index) in options" :key="index" :value="item.id" :label="item.name">
2025-09-04 11:09:21 +08:00
<div class="flex items-center">
<img v-if="item.icon" :src="item.icon" class="w-16px h-16px mr-8px rounded-4px" />
{{ item.name }}
</div>
2025-06-27 18:37:42 +08:00
</a-option>
</a-select>
</template>
<script setup>
import { ref, watch } from 'vue';
const props = defineProps({
modelValue: {
type: [Array, String, Number],
default: () => [],
},
multiple: {
type: Boolean,
default: true,
},
placeholder: {
type: String,
default: '全部',
},
options: {
type: Array,
default: () => [],
},
maxTagCount: {
type: Number,
default: 3,
},
2025-08-01 17:25:21 +08:00
allClear: {
type: Boolean,
default: true,
}
2025-06-27 18:37:42 +08:00
});
const emits = defineEmits(['update:modelValue', 'change']);
const selectedValues = ref(props.multiple ? [] : '');
2025-06-27 18:37:42 +08:00
watch(
() => props.modelValue,
(newVal) => {
selectedValues.value = newVal;
2025-06-27 18:37:42 +08:00
},
{ immediate: true },
);
watch(selectedValues, (newVal) => {
2025-06-27 18:37:42 +08:00
emits('update:modelValue', newVal);
});
const handleChange = (value) => {
selectedValues.value = value;
2025-06-27 18:37:42 +08:00
emits('change', value);
};
2025-09-04 11:09:21 +08:00
</script>