From 6768cdea0588478b0f0048676c8eb9d37dc61696 Mon Sep 17 00:00:00 2001
From: wangding <857299269.com>
Date: Mon, 29 May 2023 11:05:46 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B7=AF=E7=94=B1?=
 =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/App.vue                           |  3 ++
 src/components/RouterSearch/index.vue | 76 +++++++++++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 src/components/RouterSearch/index.vue

diff --git a/src/App.vue b/src/App.vue
index 75edd24f..c40f767e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,6 +3,8 @@ import { isDark } from '@/utils/is'
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+import routerSearch from '@/components/RouterSearch'
+
 
 const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('app')
@@ -24,6 +26,7 @@ setDefaultTheme()
 <template>
   <ConfigGlobal :size="currentSize">
     <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
+    <routerSearch/>
   </ConfigGlobal>
 </template>
 <style lang="scss">
diff --git a/src/components/RouterSearch/index.vue b/src/components/RouterSearch/index.vue
new file mode 100644
index 00000000..0f984ef7
--- /dev/null
+++ b/src/components/RouterSearch/index.vue
@@ -0,0 +1,76 @@
+<template>
+    <ElDialog v-model="showSearch" :show-close="false" title="菜单搜索">
+        <el-select
+            filterable
+            :reserve-keyword="false"
+            remote
+            placeholder="请输入菜单内容"
+            :remote-method="remoteMethod"
+            style="width: 100%;"
+            @change="handleChange"
+        >
+            <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+            />
+        </el-select>
+    </ElDialog>
+</template>
+
+<script setup lang="ts">
+const router = useRouter() // 路由对象
+const showSearch = ref(false) // 是否显示弹框
+const value:Ref = ref('') // 用户输入的值
+
+const routers = router.getRoutes() // 路由对象
+const options = computed(() => { // 提示选项
+    if(!value.value) {
+        return []
+    }
+    const list = routers.filter((item:any) => {
+        if(item.meta.title?.indexOf(value.value) > -1  || item.path.indexOf(value.value) > -1) {
+            return true
+        }
+    })
+    return list.map((item) => {
+        return {
+            label: `${item.meta.title}${item.path}`,
+            value: item.path
+        }
+    })
+})
+
+
+function remoteMethod(data) {
+    // 这里可以执行相应的操作(例如打开搜索框等)
+    value.value = data
+}
+
+function handleChange(path) {
+    router.push({path})
+}
+
+onMounted(() => {
+    window.addEventListener('keydown', listenKey)
+})
+
+onUnmounted(() => {
+    window.removeEventListener('keydown', listenKey)
+})
+
+// 监听 ctrl + k
+function listenKey(event) {
+    if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
+        showSearch.value = !showSearch.value
+        // 这里可以执行相应的操作(例如打开搜索框等)
+    }
+}
+
+defineExpose({
+    openSearch: () => {
+        showSearch.value = true
+    }
+})
+</script>
\ No newline at end of file

From 43f3c6743483544343eb814dfe98419e19cfc52e Mon Sep 17 00:00:00 2001
From: wangding <857299269.com>
Date: Mon, 29 May 2023 11:26:51 +0800
Subject: [PATCH 2/2] add router search

---
 .vscode/settings.json                 |  2 +-
 src/App.vue                           |  6 +-
 src/components/RouterSearch/index.vue | 94 +++++++++++++--------------
 3 files changed, 51 insertions(+), 51 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3036ebf1..5b3aa477 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -8,7 +8,7 @@
     "source.fixAll.eslint": true
   },
   "[vue]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
+    "editor.defaultFormatter": "Vue.volar"
   },
   "[javascript]": {
     "editor.defaultFormatter": "esbenp.prettier-vscode"
diff --git a/src/App.vue b/src/App.vue
index c40f767e..f75478cd 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,8 +3,7 @@ import { isDark } from '@/utils/is'
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
-import routerSearch from '@/components/RouterSearch'
-
+import routerSearch from '@/components/RouterSearch/index.vue'
 
 const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('app')
@@ -26,11 +25,12 @@ setDefaultTheme()
 <template>
   <ConfigGlobal :size="currentSize">
     <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
-    <routerSearch/>
+    <routerSearch />
   </ConfigGlobal>
 </template>
 <style lang="scss">
 $prefix-cls: #{$namespace}-app;
+
 .size {
   width: 100%;
   height: 100%;
diff --git a/src/components/RouterSearch/index.vue b/src/components/RouterSearch/index.vue
index 0f984ef7..d44ce267 100644
--- a/src/components/RouterSearch/index.vue
+++ b/src/components/RouterSearch/index.vue
@@ -1,76 +1,76 @@
 <template>
-    <ElDialog v-model="showSearch" :show-close="false" title="菜单搜索">
-        <el-select
-            filterable
-            :reserve-keyword="false"
-            remote
-            placeholder="请输入菜单内容"
-            :remote-method="remoteMethod"
-            style="width: 100%;"
-            @change="handleChange"
-        >
-            <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-            />
-        </el-select>
-    </ElDialog>
+  <ElDialog v-model="showSearch" :show-close="false" title="菜单搜索">
+    <el-select
+      filterable
+      :reserve-keyword="false"
+      remote
+      placeholder="请输入菜单内容"
+      :remote-method="remoteMethod"
+      style="width: 100%"
+      @change="handleChange"
+    >
+      <el-option
+        v-for="item in options"
+        :key="item.value"
+        :label="item.label"
+        :value="item.value"
+      />
+    </el-select>
+  </ElDialog>
 </template>
 
 <script setup lang="ts">
 const router = useRouter() // 路由对象
 const showSearch = ref(false) // 是否显示弹框
-const value:Ref = ref('') // 用户输入的值
+const value: Ref = ref('') // 用户输入的值
 
 const routers = router.getRoutes() // 路由对象
-const options = computed(() => { // 提示选项
-    if(!value.value) {
-        return []
+const options = computed(() => {
+  // 提示选项
+  if (!value.value) {
+    return []
+  }
+  const list = routers.filter((item: any) => {
+    if (item.meta.title?.indexOf(value.value) > -1 || item.path.indexOf(value.value) > -1) {
+      return true
     }
-    const list = routers.filter((item:any) => {
-        if(item.meta.title?.indexOf(value.value) > -1  || item.path.indexOf(value.value) > -1) {
-            return true
-        }
-    })
-    return list.map((item) => {
-        return {
-            label: `${item.meta.title}${item.path}`,
-            value: item.path
-        }
-    })
+  })
+  return list.map((item) => {
+    return {
+      label: `${item.meta.title}${item.path}`,
+      value: item.path
+    }
+  })
 })
 
-
 function remoteMethod(data) {
-    // 这里可以执行相应的操作(例如打开搜索框等)
-    value.value = data
+  // 这里可以执行相应的操作(例如打开搜索框等)
+  value.value = data
 }
 
 function handleChange(path) {
-    router.push({path})
+  router.push({ path })
 }
 
 onMounted(() => {
-    window.addEventListener('keydown', listenKey)
+  window.addEventListener('keydown', listenKey)
 })
 
 onUnmounted(() => {
-    window.removeEventListener('keydown', listenKey)
+  window.removeEventListener('keydown', listenKey)
 })
 
 // 监听 ctrl + k
 function listenKey(event) {
-    if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
-        showSearch.value = !showSearch.value
-        // 这里可以执行相应的操作(例如打开搜索框等)
-    }
+  if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
+    showSearch.value = !showSearch.value
+    // 这里可以执行相应的操作(例如打开搜索框等)
+  }
 }
 
 defineExpose({
-    openSearch: () => {
-        showSearch.value = true
-    }
+  openSearch: () => {
+    showSearch.value = true
+  }
 })
-</script>
\ No newline at end of file
+</script>