重构: confirmDialog抽composable+tool_result反向查找+search列限定

- FR-D5 抽 useConfirm 收敛 4 视图(Projects/ProjectDetail/Ideas/Settings)确认弹层重复
- FR-D4 replace_tool_result_content 正向 O(n) 改反向 rposition(审批替换命中最近,调用低频)
- FR-D2 search_vector SELECT * 改显式 14 列(消除隐式依赖,字段级精简待单独立项)
This commit is contained in:
2026-06-14 22:50:59 +08:00
parent 36d68ddb26
commit 4a95f6a1e2
7 changed files with 84 additions and 62 deletions

View File

@@ -373,6 +373,7 @@ import { reactive, ref, computed, watch, onMounted, onUnmounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { aiApi, knowledgeApi } from '../api'
import { useAppSettingsStore } from '../stores/appSettings'
import { useConfirm } from '../composables/useConfirm'
import type { AiProviderConfig } from '../api/types'
import i18n from '../i18n'
@@ -399,24 +400,9 @@ function showToast(msg: string, type: 'error' | 'warning' | 'info' = 'info') {
_toastTimer = setTimeout(() => { toast.visible = false }, 3000)
}
// 自建确认弹层(替代 window.confirm —— 后者带 webview 来源域名/端口,无法去除)
const confirmState = reactive({
visible: false,
msg: '',
resolve: null as null | ((v: boolean) => void),
})
function confirmDialog(msg: string): Promise<boolean> {
return new Promise(resolve => {
confirmState.msg = msg
confirmState.visible = true
confirmState.resolve = resolve
})
}
function answerConfirm(ok: boolean) {
confirmState.visible = false
confirmState.resolve?.(ok)
confirmState.resolve = null
}
// 确认弹层状态机抽至 composables/useConfirm(原 4 视图重复:Projects/ProjectDetail/Ideas/Settings)
// 模板 confirmState.visible/msg 在 <script setup> 中自动解包 ref,沿用既有内联确认弹层
const { confirmState, confirmDialog, answerConfirm } = useConfirm()
const providerForm = reactive({
visible: false,