diff --git a/frontend/src/views/KPIAlignment.vue b/frontend/src/views/KPIAlignment.vue
index 6c094e9c..d4f9691b 100644
--- a/frontend/src/views/KPIAlignment.vue
+++ b/frontend/src/views/KPIAlignment.vue
@@ -15,6 +15,8 @@
+
import { ref, computed, onMounted } from 'vue'
import { useRoute, useRouter } from 'vue-router'
-import { ElMessage } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
// 统一走 api/index.ts 的 axios 实例(拦截器自动带 Bearer / 401 跳登录)
import { alignmentApi, mapApi } from '../api/index'
@@ -286,6 +288,14 @@ async function loadConfig() {
async function saveAlignConfig() {
if (!selectedMode.value) return
+ // 系统级设置二次确认:对齐模式存于全局配置(role_permissions 无 entity_id),切换影响全部账套
+ try {
+ await ElMessageBox.confirm(
+ `对齐模式为系统级设置,切换后将立即作用于全部账套。确认切换为「${selectedModeName.value}」?`,
+ '系统级设置二次确认',
+ { type: 'warning', confirmButtonText: '确认切换', cancelButtonText: '取消' }
+ )
+ } catch { return }
saving.value = true
try {
// 修复:原 `'Bearer ' + token` 模板字面量 bug(header 值被写死成字面量 → 必 401)