diff --git a/src/locales/de.ts b/src/locales/de.ts index 08cba2f..3ef58e2 100644 --- a/src/locales/de.ts +++ b/src/locales/de.ts @@ -1094,6 +1094,11 @@ export default { presetNameRequired: 'Bitte geben Sie einen Namen ein', presetSaved: 'Vorlage gespeichert', presetApplied: 'Vorlage angewendet', + deletePreset: 'Vorlage löschen', + presetDeleted: 'Vorlage gelöscht', + confirmOverwriteTitle: 'Vorlage existiert bereits', + confirmOverwriteMessage: 'Eine Vorlage mit dem Namen "{name}" existiert bereits. Überschreiben?', + cannotDeleteDefault: 'Standardvorlage kann nicht gelöscht werden', adminOnly: 'Nur Admin', selectPlanet: 'Planet auswählen', choosePlanet: 'Einen Planeten auswählen', diff --git a/src/locales/en.ts b/src/locales/en.ts index 8b9786e..f7c1a0d 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1110,6 +1110,11 @@ export default { presetNameRequired: 'Please enter a preset name', presetSaved: 'Preset saved', presetApplied: 'Preset applied', + deletePreset: 'Delete Preset', + presetDeleted: 'Preset deleted', + confirmOverwriteTitle: 'Preset Already Exists', + confirmOverwriteMessage: 'Preset with name "{name}" already exists. Overwrite?', + cannotDeleteDefault: 'Cannot delete default preset', adminOnly: 'Admin Only', selectPlanet: 'Select Planet', choosePlanet: 'Choose a planet', diff --git a/src/locales/es-LA.ts b/src/locales/es-LA.ts index a23e1f5..19d8899 100644 --- a/src/locales/es-LA.ts +++ b/src/locales/es-LA.ts @@ -1102,6 +1102,11 @@ export default { presetNameRequired: 'Ingrese el nombre del preajuste', presetSaved: 'Preajuste guardado', presetApplied: 'Preajuste aplicado', + deletePreset: 'Eliminar preajuste', + presetDeleted: 'Preajuste eliminado', + confirmOverwriteTitle: 'El preajuste ya existe', + confirmOverwriteMessage: 'El preajuste con el nombre "{name}" ya existe. ¿Sobrescribir?', + cannotDeleteDefault: 'No se puede eliminar el preajuste predeterminado', adminOnly: 'Solo Administrador', selectPlanet: 'Seleccionar Planeta', choosePlanet: 'Elige un planeta', diff --git a/src/locales/ja.ts b/src/locales/ja.ts index 40d1886..14956bb 100644 --- a/src/locales/ja.ts +++ b/src/locales/ja.ts @@ -1120,6 +1120,11 @@ export default { presetNameRequired: 'プリセット名を入力してください', presetSaved: '保存しました', presetApplied: '適用しました', + deletePreset: 'プリセット削除', + presetDeleted: 'プリセットを削除しました', + confirmOverwriteTitle: 'プリセットは既に存在します', + confirmOverwriteMessage: 'プリセット名 "{name}" は既に存在します。上書きしますか?', + cannotDeleteDefault: 'デフォルトプリセットは削除できません', adminOnly: '管理者専用', selectPlanet: '惑星を選択', choosePlanet: '惑星を選択してください', diff --git a/src/locales/ko.ts b/src/locales/ko.ts index db0adb9..41b2bb8 100644 --- a/src/locales/ko.ts +++ b/src/locales/ko.ts @@ -1070,6 +1070,11 @@ export default { presetNameRequired: '프리셋 이름을 입력하세요', presetSaved: '프리셋 저장됨', presetApplied: '프리셋 적용됨', + deletePreset: '프리셋 삭제', + presetDeleted: '프리셋 삭제됨', + confirmOverwriteTitle: '프리셋이 이미 존재함', + confirmOverwriteMessage: '"{name}" 이름의 프리셋이 이미 존재합니다. 덮어쓰시겠습니까?', + cannotDeleteDefault: '기본 프리셋은 삭제할 수 없습니다', adminOnly: '관리자 전용', selectPlanet: '행성 선택', choosePlanet: '행성을 선택하세요', diff --git a/src/locales/ru.ts b/src/locales/ru.ts index d891a67..567a6a9 100644 --- a/src/locales/ru.ts +++ b/src/locales/ru.ts @@ -1096,6 +1096,11 @@ export default { presetNameRequired: 'Введите название', presetSaved: 'Сохранено', presetApplied: 'Применено', + deletePreset: 'Удалить', + presetDeleted: 'Удалено', + confirmOverwriteTitle: 'Уже существует', + confirmOverwriteMessage: 'Предустановка с именем "{name}" уже существует. Перезаписать?', + cannotDeleteDefault: 'Нельзя удалить стандартную предустановку', adminOnly: 'Только для администратора', selectPlanet: 'Выбрать планету', choosePlanet: 'Выберите планету', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index c44c2e3..6858d40 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1104,6 +1104,11 @@ export default { presetNameRequired: '请输入预设名称', presetSaved: '预设保存成功', presetApplied: '预设应用成功', + deletePreset: '删除预设', + presetDeleted: '预设已删除', + confirmOverwriteTitle: '预设已存在', + confirmOverwriteMessage: '名为 "{name}" 的预设已存在,是否覆盖?', + cannotDeleteDefault: '无法删除默认预设', npcTesting: 'NPC 测试', npcTestingDesc: '测试NPC侦查和攻击行为', selectNPC: '选择NPC', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index 4df3e95..6df86c9 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -1089,6 +1089,11 @@ export default { presetNameRequired: '請輸入預設名稱', presetSaved: '預設已儲存', presetApplied: '預設已套用', + deletePreset: '刪除預設', + presetDeleted: '預設已刪除', + confirmOverwriteTitle: '預設已存在', + confirmOverwriteMessage: '名為 "{name}" 的預設已存在,是否覆蓋?', + cannotDeleteDefault: '無法刪除預設範本', adminOnly: '僅管理員', selectPlanet: '選擇星球', choosePlanet: '選擇一個星球', diff --git a/src/views/GMView.vue b/src/views/GMView.vue index 8fa1feb..fcd5751 100644 --- a/src/views/GMView.vue +++ b/src/views/GMView.vue @@ -99,6 +99,15 @@ +
@@ -242,6 +251,22 @@ + + + + + {{ t('gmView.confirmOverwriteTitle') || 'Preset Already Exists' }} + + {{ t('gmView.confirmOverwriteMessage', { name: pendingPresetToOverwrite?.name || '' }) || `Preset with name "${pendingPresetToOverwrite?.name}" already exists. Overwrite?` }} + + + + {{ t('common.cancel') }} + {{ t('common.confirm') }} + + + + @@ -293,7 +318,7 @@ import * as npcBehaviorLogic from '@/logic/npcBehaviorLogic' import * as publicLogic from '@/logic/publicLogic' import { calculateMaxFleetStorage } from '@/logic/fleetStorageLogic' - import { Home } from 'lucide-vue-next' + import { Home, Trash2 } from 'lucide-vue-next' // --- 预设系统 --- interface GMPreset { @@ -302,6 +327,14 @@ values: Record } + const presetOverwriteDialogOpen = ref(false) + const pendingPresetToOverwrite = ref<{ + section: any + name: string + values: Record + existingIndex: number + } | null>(null) + const getPresets = (type: string): GMPreset[] => { const data = localStorage.getItem(`gm_presets_${type}`) return data ? JSON.parse(data) : [] @@ -343,6 +376,20 @@ section.items.forEach((item: string) => { values[item] = section.getValue(item) }) + + // 检查是否存在同名预设 + const existingIndex = customPresets.value[section.tabValue]?.findIndex(p => p.name === name) ?? -1 + + if (existingIndex !== -1) { + pendingPresetToOverwrite.value = { + section, + name, + values, + existingIndex + } + presetOverwriteDialogOpen.value = true + return + } const newPreset: GMPreset = { id: Date.now().toString(), @@ -360,6 +407,49 @@ toast.success(t('gmView.presetSaved') || '预设保存成功') } + const handleConfirmOverwrite = () => { + if (!pendingPresetToOverwrite.value) return + + const { section, values, existingIndex } = pendingPresetToOverwrite.value + + if (customPresets.value[section.tabValue]) { + const presets = customPresets.value[section.tabValue]! + + if (presets[existingIndex]) { + // 更新现有预设的值,保持ID不变 + presets[existingIndex].values = values + + savePresets(section.tabValue, presets) + + presetNames.value[section.tabValue] = '' + selectedPresets.value[section.tabValue] = presets[existingIndex].id + + toast.success(t('gmView.presetSaved') || '预设保存成功') + } + } + + presetOverwriteDialogOpen.value = false + pendingPresetToOverwrite.value = null + } + + const handleDeletePreset = (section: any) => { + const presetId = selectedPresets.value[section.tabValue] + if (!presetId || presetId === 'default') { + toast.error(t('gmView.cannotDeleteDefault') || '无法删除默认预设') + return + } + + const presets = customPresets.value[section.tabValue] || [] + const index = presets.findIndex(p => p.id === presetId) + + if (index !== -1) { + presets.splice(index, 1) + savePresets(section.tabValue, presets) + selectedPresets.value[section.tabValue] = 'default' + toast.success(t('gmView.presetDeleted') || '预设已删除') + } + } + const handleApplyPreset = (section: any) => { const presetId = selectedPresets.value[section.tabValue] if (!presetId) return