Skip to content

Commit b95b800

Browse files
committed
feat: 菜单右上角加一个搜索图标
1 parent 1744c6e commit b95b800

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

src/components/RouterSearch/index.vue

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<ElDialog v-model="showSearch" :show-close="false" title="菜单搜索">
2+
<ElDialog v-if="isModal" v-model="showSearch" :show-close="false" title="菜单搜索">
33
<el-select
44
filterable
55
:reserve-keyword="false"
@@ -17,11 +17,34 @@
1717
/>
1818
</el-select>
1919
</ElDialog>
20+
<div v-else class="custom-hover" @click.stop="showTopSearch = !showTopSearch">
21+
<Icon icon="ep:search" />
22+
<el-select
23+
filterable
24+
:reserve-keyword="false"
25+
remote
26+
placeholder="请输入菜单内容"
27+
:remote-method="remoteMethod"
28+
class="overflow-hidden transition-all-600"
29+
:class="showTopSearch ? 'w-220px ml2' : 'w-0'"
30+
@change="handleChange"
31+
>
32+
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
33+
</el-select>
34+
</div>
2035
</template>
2136

2237
<script lang="ts" setup>
38+
defineProps({
39+
isModal: {
40+
type: Boolean,
41+
default: true
42+
}
43+
})
44+
2345
const router = useRouter() // 路由对象
2446
const showSearch = ref(false) // 是否显示弹框
47+
const showTopSearch = ref(false) // 是否显示顶部搜索框
2548
const value: Ref = ref('') // 用户输入的值
2649
2750
const routers = router.getRoutes() // 路由对象
@@ -50,14 +73,21 @@ function remoteMethod(data) {
5073
5174
function handleChange(path) {
5275
router.push({ path })
76+
hiddenTopSearch();
77+
}
78+
79+
function hiddenTopSearch() {
80+
showTopSearch.value = false
5381
}
5482
5583
onMounted(() => {
5684
window.addEventListener('keydown', listenKey)
85+
window.addEventListener('click', hiddenTopSearch)
5786
})
5887
5988
onUnmounted(() => {
6089
window.removeEventListener('keydown', listenKey)
90+
window.removeEventListener('click', hiddenTopSearch)
6191
})
6292
6393
// 监听 ctrl + k

src/layout/components/ToolHeader.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Screenfull } from '@/layout/components/Screenfull'
77
import { Breadcrumb } from '@/layout/components/Breadcrumb'
88
import { SizeDropdown } from '@/layout/components/SizeDropdown'
99
import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
10+
import RouterSearch from '@/components/RouterSearch/index.vue'
1011
import { useAppStore } from '@/store/modules/app'
1112
import { useDesign } from '@/hooks/web/useDesign'
1213
@@ -25,6 +26,9 @@ const hamburger = computed(() => appStore.getHamburger)
2526
// 全屏图标
2627
const screenfull = computed(() => appStore.getScreenfull)
2728
29+
// 搜索图片
30+
const search = computed(() => appStore.search)
31+
2832
// 尺寸图标
2933
const size = computed(() => appStore.getSize)
3034
@@ -61,6 +65,7 @@ export default defineComponent({
6165
{screenfull.value ? (
6266
<Screenfull class="custom-hover" color="var(--top-header-text-color)"></Screenfull>
6367
) : undefined}
68+
{search.value ? (<RouterSearch isModal={false} />) : undefined}
6469
{size.value ? (
6570
<SizeDropdown class="custom-hover" color="var(--top-header-text-color)"></SizeDropdown>
6671
) : undefined}

src/store/modules/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ interface AppState {
1616
uniqueOpened: boolean
1717
hamburger: boolean
1818
screenfull: boolean
19+
search: boolean
1920
size: boolean
2021
locale: boolean
2122
message: boolean
@@ -52,6 +53,7 @@ export const useAppStore = defineStore('app', {
5253
uniqueOpened: true, // 是否只保持一个子菜单的展开
5354
hamburger: true, // 折叠图标
5455
screenfull: true, // 全屏图标
56+
search: true, // 搜索图标
5557
size: true, // 尺寸图标
5658
locale: true, // 多语言图标
5759
message: true, // 消息图标

0 commit comments

Comments
 (0)