1
1
<template >
2
- <ElDialog v-model =" showSearch" :show-close =" false" title =" 菜单搜索" >
3
- <el-select
4
- filterable
5
- :reserve-keyword =" false"
6
- remote
7
- placeholder =" 请输入菜单内容"
8
- :remote-method =" remoteMethod"
9
- style =" width : 100% ; "
10
- @change =" handleChange"
11
- >
12
- <el-option
13
- v-for =" item in options"
14
- :key =" item.value"
15
- :label =" item.label"
16
- :value =" item.value"
17
- />
18
- </el-select >
19
- </ElDialog >
2
+ <ElDialog v-model =" showSearch" :show-close =" false" title =" 菜单搜索" >
3
+ <el-select
4
+ filterable
5
+ :reserve-keyword =" false"
6
+ remote
7
+ placeholder =" 请输入菜单内容"
8
+ :remote-method =" remoteMethod"
9
+ style =" width : 100% "
10
+ @change =" handleChange"
11
+ >
12
+ <el-option
13
+ v-for =" item in options"
14
+ :key =" item.value"
15
+ :label =" item.label"
16
+ :value =" item.value"
17
+ />
18
+ </el-select >
19
+ </ElDialog >
20
20
</template >
21
21
22
22
<script setup lang="ts">
23
23
const router = useRouter () // 路由对象
24
24
const showSearch = ref (false ) // 是否显示弹框
25
- const value: Ref = ref (' ' ) // 用户输入的值
25
+ const value: Ref = ref (' ' ) // 用户输入的值
26
26
27
27
const routers = router .getRoutes () // 路由对象
28
- const options = computed (() => { // 提示选项
29
- if (! value .value ) {
30
- return []
28
+ const options = computed (() => {
29
+ // 提示选项
30
+ if (! value .value ) {
31
+ return []
32
+ }
33
+ const list = routers .filter ((item : any ) => {
34
+ if (item .meta .title ?.indexOf (value .value ) > - 1 || item .path .indexOf (value .value ) > - 1 ) {
35
+ return true
31
36
}
32
- const list = routers .filter ((item : any ) => {
33
- if (item .meta .title ?.indexOf (value .value ) > - 1 || item .path .indexOf (value .value ) > - 1 ) {
34
- return true
35
- }
36
- })
37
- return list .map ((item ) => {
38
- return {
39
- label: ` ${item .meta .title }${item .path } ` ,
40
- value: item .path
41
- }
42
- })
37
+ })
38
+ return list .map ((item ) => {
39
+ return {
40
+ label: ` ${item .meta .title }${item .path } ` ,
41
+ value: item .path
42
+ }
43
+ })
43
44
})
44
45
45
-
46
46
function remoteMethod(data ) {
47
- // 这里可以执行相应的操作(例如打开搜索框等)
48
- value .value = data
47
+ // 这里可以执行相应的操作(例如打开搜索框等)
48
+ value .value = data
49
49
}
50
50
51
51
function handleChange(path ) {
52
- router .push ({path })
52
+ router .push ({ path })
53
53
}
54
54
55
55
onMounted (() => {
56
- window .addEventListener (' keydown' , listenKey )
56
+ window .addEventListener (' keydown' , listenKey )
57
57
})
58
58
59
59
onUnmounted (() => {
60
- window .removeEventListener (' keydown' , listenKey )
60
+ window .removeEventListener (' keydown' , listenKey )
61
61
})
62
62
63
63
// 监听 ctrl + k
64
64
function listenKey(event ) {
65
- if ((event .ctrlKey || event .metaKey ) && event .key === ' k' ) {
66
- showSearch .value = ! showSearch .value
67
- // 这里可以执行相应的操作(例如打开搜索框等)
68
- }
65
+ if ((event .ctrlKey || event .metaKey ) && event .key === ' k' ) {
66
+ showSearch .value = ! showSearch .value
67
+ // 这里可以执行相应的操作(例如打开搜索框等)
68
+ }
69
69
}
70
70
71
71
defineExpose ({
72
- openSearch : () => {
73
- showSearch .value = true
74
- }
72
+ openSearch : () => {
73
+ showSearch .value = true
74
+ }
75
75
})
76
- </script >
76
+ </script >
0 commit comments