提交 1ae63629 作者: 无木

feat(app-search): auto focus on show

菜单搜索组件在显示后input自动获得焦点
上级 b218f10e
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<Input <Input
:class="`${prefixCls}-input`" :class="`${prefixCls}-input`"
:placeholder="t('common.searchText')" :placeholder="t('common.searchText')"
ref="inputRef"
allow-clear allow-clear
@change="handleSearch" @change="handleSearch"
> >
...@@ -57,7 +58,7 @@ ...@@ -57,7 +58,7 @@
</Teleport> </Teleport>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, computed, unref, ref } from 'vue'; import { defineComponent, computed, unref, ref, watch, nextTick } from 'vue';
import { SearchOutlined } from '@ant-design/icons-vue'; import { SearchOutlined } from '@ant-design/icons-vue';
import { Input } from 'ant-design-vue'; import { Input } from 'ant-design-vue';
...@@ -90,15 +91,10 @@ ...@@ -90,15 +91,10 @@
const { t } = useI18n(); const { t } = useI18n();
const [refs, setRefs] = useRefs(); const [refs, setRefs] = useRefs();
const { getIsMobile } = useAppInject(); const { getIsMobile } = useAppInject();
const inputRef = ref<Nullable<HTMLElement>>(null);
const { const { handleSearch, searchResult, keyword, activeIndex, handleEnter, handleMouseenter } =
handleSearch, useMenuSearch(refs, scrollWrap, emit);
searchResult,
keyword,
activeIndex,
handleEnter,
handleMouseenter,
} = useMenuSearch(refs, scrollWrap, emit);
const getIsNotData = computed(() => { const getIsNotData = computed(() => {
return !keyword || unref(searchResult).length === 0; return !keyword || unref(searchResult).length === 0;
...@@ -118,6 +114,16 @@ ...@@ -118,6 +114,16 @@
emit('close'); emit('close');
} }
watch(
() => _.visible,
(v: boolean) => {
v &&
nextTick(() => {
unref(inputRef)?.focus();
});
}
);
return { return {
t, t,
prefixCls, prefixCls,
...@@ -131,6 +137,7 @@ ...@@ -131,6 +137,7 @@
scrollWrap, scrollWrap,
handleMouseenter, handleMouseenter,
handleClose, handleClose,
inputRef,
}; };
}, },
}); });
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论