feat(dict): 优化字典选择组件并添加清空功能
- 在 dict.vue 中更新字典选择框的占位符为国际化文本 - 在 vue-select.vue 中添加清空选择的功能和相关样式 - 更新中文翻译文件,添加新的占位符文本
This commit is contained in:
parent
599897ae85
commit
a6b4a4fa6c
@ -34,7 +34,7 @@
|
||||
v-model="filterParams.number"
|
||||
:options="numberOptions"
|
||||
:is-loading="isLoadingNumberOptions"
|
||||
placeholder="请选择或输入父级字典"
|
||||
:placeholder="$t('jewpmsApp.dict.parentPlaceholder')"
|
||||
@search="loadNumberOptions"
|
||||
@select="option => (filterParams.number = option.value)"
|
||||
/>
|
||||
|
||||
@ -18,7 +18,14 @@
|
||||
<span v-if="isLoading" class="v-select-loading">
|
||||
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
|
||||
</span>
|
||||
<span v-else class="v-select-arrow" :class="{ 'is-open': isOpen }">
|
||||
<span v-else-if="isOpen" class="v-select-clear" @mousedown.stop.prevent="clearSelection">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24">
|
||||
<path
|
||||
d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="v-select-arrow" :class="{ 'is-open': isOpen }" @mousedown.stop.prevent="onDropdown">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="10" viewBox="0 0 14 10">
|
||||
<path
|
||||
d="M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"
|
||||
@ -96,6 +103,7 @@ export default defineComponent({
|
||||
const highlightedIndex = ref(-1);
|
||||
const closeTimeout = ref<number | null>(null);
|
||||
const focusTriggered = ref(false);
|
||||
const cleanTriggered = ref(false);
|
||||
|
||||
// 计算当前选中的选项标签
|
||||
const selectedLabel = computed(() => {
|
||||
@ -135,6 +143,7 @@ export default defineComponent({
|
||||
|
||||
// 监听下拉框状态变化
|
||||
watch(isOpen, newValue => {
|
||||
//console.log('isOpen changed', newValue);
|
||||
if (newValue) {
|
||||
emit('open');
|
||||
nextTick(() => {
|
||||
@ -158,9 +167,11 @@ export default defineComponent({
|
||||
// 切换下拉框显示状态
|
||||
const toggleDropdown = () => {
|
||||
// 如果是由focus事件触发的,则不要切换状态,只重置标志
|
||||
if (focusTriggered.value) {
|
||||
if (focusTriggered.value || cleanTriggered.value) {
|
||||
cleanTriggered.value = false;
|
||||
focusTriggered.value = false;
|
||||
} else {
|
||||
//console.log('toggleDropdown',isOpen.value);
|
||||
isOpen.value = !isOpen.value;
|
||||
}
|
||||
};
|
||||
@ -227,6 +238,19 @@ export default defineComponent({
|
||||
};
|
||||
});
|
||||
|
||||
// 清除选择
|
||||
const clearSelection = () => {
|
||||
cleanTriggered.value = true;
|
||||
emit('update:modelValue', null);
|
||||
searchQuery.value = '';
|
||||
emit('select', searchQuery.value);
|
||||
};
|
||||
|
||||
// 清除选择
|
||||
const onDropdown = () => {
|
||||
//console.log('onDropdown');
|
||||
};
|
||||
|
||||
return {
|
||||
isOpen,
|
||||
searchQuery,
|
||||
@ -240,6 +264,8 @@ export default defineComponent({
|
||||
highlightNext,
|
||||
highlightPrev,
|
||||
selectHighlighted,
|
||||
clearSelection,
|
||||
onDropdown,
|
||||
};
|
||||
},
|
||||
});
|
||||
@ -319,4 +345,14 @@ export default defineComponent({
|
||||
.v-select-loading {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.v-select-clear {
|
||||
margin-right: 8px;
|
||||
cursor: pointer;
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.v-select-clear:hover {
|
||||
color: #dc3545;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -31,7 +31,8 @@
|
||||
"createdDate": "创建时间",
|
||||
"updatedBy": "更新人",
|
||||
"updatedDate": "更新时间",
|
||||
"version": "版本号"
|
||||
"version": "版本号",
|
||||
"parentPlaceholder": "请选择或输入父级字典"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user