修复: workspace_root 编译期常量消除+data_dir 运行期+首次授权引导

- 删除 production 中全部 env!("CARGO_MANIFEST_DIR")引用
- workspace_root() 替换为运行期 data_dir(Tauri app_data_dir)
- 相对路径锚定改为 AllowedDirs.first_persistent_dir(),无授权时引导绑定项目
- .trash 迁到 data_dir/.trash,含自动迁移
- authz_debug → temp_dir,workspace_drive → current_dir
- run_command 默认 working_dir 改为空串
- G1 目标刷新改为每次消息覆盖(含 ai_chat_edit 路径)
- #6 评分关键词拆到独立文件 scoring_keywords.rs
- #7 promote 补偿删除 purge_with_descendants → soft_delete
- #8 关联双向同步: 后端事务 sync_related_ids + IPC + 前端全链路
- 设置面板新增数据目录显示
This commit is contained in:
2026-06-27 21:32:12 +08:00
parent a6d692270f
commit 9c3f27f4ca
26 changed files with 743 additions and 104 deletions

View File

@@ -5,6 +5,11 @@
<h2>{{ $t('settings.sectionAdvanced') }}</h2>
</div>
<div class="general-settings">
<!-- 应用数据目录(运行期确定,跨平台) -->
<SettingRow :label="$t('settings.labelDataDir')" :desc="$t('settings.descDataDir')">
<span class="data-dir-path" :title="dataDir">{{ dataDir || $t('settings.loading') }}</span>
</SettingRow>
<!-- F-#97:三档 low/medium/alllow=仅低风险自动(等价旧 autoExecute=false);
medium=含中风险自动;all=全自动无审批(完全 AI 接管,选时二次确认) -->
<SettingRow ref="rowAutoExecute" :label="$t('settings.labelAutoExecute')" :desc="$t('settings.descAutoExecute')">
@@ -40,10 +45,11 @@
</template>
<script setup lang="ts">
import { reactive, watch, useTemplateRef } from 'vue'
import { ref, reactive, watch, useTemplateRef, onMounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { useConfirm } from '@/composables/useConfirm'
import { useAppSettingsStore } from '@/stores/appSettings'
import { settingsApi } from '@/api'
import SettingRow from './SettingRow.vue'
// ============================================================
@@ -56,6 +62,14 @@ import SettingRow from './SettingRow.vue'
// ============================================================
const { t } = useI18n()
const appSettings = useAppSettingsStore()
// 应用数据目录(运行期确定,跨平台)
const dataDir = ref('')
onMounted(async () => {
try {
dataDir.value = await settingsApi.getDataDir()
} catch { /* 静默 */ }
})
// useConfirm 真实 API:返回 { confirmState, confirmDialog(msg, dangerLabel), answerConfirm(ok) }
// confirmDialog 返回 Promise<boolean>(true=确认,false=取消),无 title/content/confirmText/cancelText
// 字段。此处用 msg 拼标题+内容,dangerLabel 作确认按钮文案,自渲染独立弹层(上方模板)。
@@ -125,6 +139,11 @@ function markSaved() {
F-#97 all 二次确认弹层:复用 Settings.vue 壳层 confirm 弹层同款样式(mask/box/msg/
actions/transition),此处独立持有 useConfirm 状态(不与壳层共用,壳层按钮写死「删除」)。 */
.data-dir-path {
font-size: 12px;
color: var(--df-text-dim);
word-break: break-all;
}
.confirm-mask {
position: fixed;
inset: 0;