@@ -156,6 +156,43 @@ const applyLoadedTarget = async (target: LoadedSearchTarget | undefined) => {
156156 }
157157}
158158
159+ const ensureLoadedTargetReady = async (): Promise <boolean > => {
160+ if (sourceMode .value !== ' loaded' ) {
161+ return Boolean (fileName .value && (fileContent .value || fileHandle .value ))
162+ }
163+
164+ const targets = props .loadedTargets ?? []
165+ if (targets .length === 0 ) return false
166+
167+ const selectedExists = selectedLoadedTargetId .value
168+ ? targets .some (item => item .id === selectedLoadedTargetId .value )
169+ : false
170+
171+ let targetId = selectedExists ? selectedLoadedTargetId .value : ' '
172+ if (! targetId ) {
173+ targetId = props .loadedDefaultTargetId && targets .some (item => item .id === props .loadedDefaultTargetId )
174+ ? props .loadedDefaultTargetId
175+ : targets [0 ].id
176+ }
177+ if (! targetId ) return false
178+
179+ if (selectedLoadedTargetId .value !== targetId ) {
180+ selectedLoadedTargetId .value = targetId
181+ }
182+
183+ const target = targets .find (item => item .id === targetId )
184+ if (! target ) return false
185+
186+ const expectedName = target .fileName || target .label
187+ const contentReady = Boolean (fileName .value && (fileContent .value || fileHandle .value ))
188+ const sameTargetLoaded = fileName .value === expectedName
189+ if (! contentReady || ! sameTargetLoaded ) {
190+ await applyLoadedTarget (target )
191+ }
192+
193+ return Boolean (fileName .value && (fileContent .value || fileHandle .value ))
194+ }
195+
159196watch (
160197 () => [props .loadedTargets , props .loadedDefaultTargetId ] as const ,
161198 async ([targets , defaultId ]) => {
@@ -186,7 +223,6 @@ watch(
186223 },
187224 { immediate: true , deep: true }
188225)
189-
190226watch (selectedLoadedTargetId , async (id ) => {
191227 if (sourceMode .value !== ' loaded' ) return
192228 const target = (props .loadedTargets ?? []).find (item => item .id === id )
@@ -302,9 +338,15 @@ const performSearch = async () => {
302338 return
303339 }
304340
305- // 检查是否有文件
306- if (! fileName .value || (! fileContent .value && ! fileHandle .value )) {
307- alert (sourceMode .value === ' loaded' ? ' 请先选择已加载目标文件' : ' 请先选择文件' )
341+ // 检查是否有文件;loaded 模式下尝试自动补齐默认目标
342+ if (sourceMode .value === ' loaded' ) {
343+ const ready = await ensureLoadedTargetReady ()
344+ if (! ready ) {
345+ alert (' 请先选择已加载目标文件' )
346+ return
347+ }
348+ } else if (! fileName .value || (! fileContent .value && ! fileHandle .value )) {
349+ alert (' 请先选择文件' )
308350 return
309351 }
310352
0 commit comments