From 5470429a79313630a7ddef601de1d89e7dada754 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 22 五月 2026 09:14:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro' into dev-new_pro_OA

---
 src/components/HeaderSearch/index.vue |   83 +++++++++++++++++++++++++++--------------
 1 files changed, 55 insertions(+), 28 deletions(-)

diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue
index b57fe69..a81dd98 100644
--- a/src/components/HeaderSearch/index.vue
+++ b/src/components/HeaderSearch/index.vue
@@ -1,13 +1,13 @@
 <template>
   <div class="header-search">
     <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
-    <el-dialog
-      v-model="show"
-      width="600"
-      @close="close"
-      :show-close="false"
-      append-to-body
-    >
+    <el-dialog
+      v-model="show"
+      width="600"
+      @close="close"
+      :show-close="true"
+      append-to-body
+    >
       <el-input
         v-model="search"
         ref="headerSearchSelectRef"
@@ -40,28 +40,51 @@
   </div>
 </template>
 
-<script setup>
-import Fuse from 'fuse.js'
-import { getNormalPath } from '@/utils/ruoyi'
-import { isHttp } from '@/utils/validate'
-import usePermissionStore from '@/store/modules/permission'
-
-const search = ref('')
-const options = ref([])
-const searchPool = ref([])
-const show = ref(false)
+<script setup>
+import Fuse from 'fuse.js'
+import { getNormalPath } from '@/utils/ruoyi'
+import { isHttp } from '@/utils/validate'
+import usePermissionStore from '@/store/modules/permission'
+
+const props = defineProps({
+  keyword: {
+    type: String,
+    default: ''
+  }
+})
+
+const search = ref('')
+const options = ref([])
+const searchPool = ref([])
+const show = ref(false)
 const fuse = ref(undefined)
 const headerSearchSelectRef = ref(null)
 const router = useRouter()
 const routes = computed(() => usePermissionStore().defaultRoutes)
 
-function click() {
-  show.value = !show.value
-  if (show.value) {
-    headerSearchSelectRef.value && headerSearchSelectRef.value.focus()
-    options.value = searchPool.value
-  }
-}
+function click() {
+  show.value = !show.value
+  if (show.value) {
+    syncSearchFromKeyword()
+    nextTick(() => {
+      headerSearchSelectRef.value && headerSearchSelectRef.value.focus()
+    })
+  }
+}
+
+function syncSearchFromKeyword() {
+  search.value = props.keyword?.trim?.() ?? ''
+  querySearch(search.value)
+}
+
+function open(keyword = props.keyword) {
+  show.value = true
+  search.value = keyword?.trim?.() ?? ''
+  querySearch(search.value)
+  nextTick(() => {
+    headerSearchSelectRef.value && headerSearchSelectRef.value.focus()
+  })
+}
 
 function close() {
   headerSearchSelectRef.value && headerSearchSelectRef.value.blur()
@@ -160,10 +183,14 @@
   searchPool.value = generateRoutes(routes.value)
 })
 
-watch(searchPool, (list) => {
-  initFuse(list)
-})
-</script>
+watch(searchPool, (list) => {
+  initFuse(list)
+})
+
+defineExpose({
+  open
+})
+</script>
 
 <style lang='scss' scoped>
 .header-search {

--
Gitblit v1.9.3