This commit is contained in:
谦君
2026-01-06 08:15:59 +08:00
parent ec96d2541e
commit 9e8ceb0414
23 changed files with 4280 additions and 1407 deletions

View File

@@ -399,8 +399,10 @@
import WebDAVFileListDialog from '@/components/settings/WebDAVFileListDialog.vue'
import { useHints } from '@/composables/useHints'
import { uploadToWebDAV, downloadFromWebDAV } from '@/services/webdavService'
import { createSaveSystem } from '@/services/saveSystem'
const { t } = useI18n()
const saveSystem = createSaveSystem()
const { hintsEnabled, setHintsEnabled, resetHints } = useHints()
const gameStore = useGameStore()
@@ -568,27 +570,10 @@
try {
isExporting.value = true
// 获取游戏数据
const gameData = localStorage.getItem(pkg.name)
// 获取地图数据
const universeData = localStorage.getItem(`${pkg.name}-universe`)
// 获取npc数据
const npcData = localStorage.getItem(`${pkg.name}-npcs`)
if (!gameData) {
toast.error(t('settings.exportFailed'))
return
}
// 合并数据
const exportData = {
game: gameData,
npcs: npcData,
universe: universeData || null
}
// 使用 SaveSystem 导出(带版本号的 SaveEnvelope 格式)
const jsonString = saveSystem.exportSave()
const fileName = `${pkg.name}-${new Date().toISOString().slice(0, 10)}-${Date.now()}.json`
const jsonString = JSON.stringify(exportData, null, 2)
// Android 保存到公共 Downloads 目录
if (Capacitor.isNativePlatform()) {
@@ -643,33 +628,12 @@
const importData = async (file: File) => {
try {
const reader = new FileReader()
reader.onload = e => {
reader.onload = async e => {
try {
const result = e.target?.result
if (typeof result === 'string') {
const importData = JSON.parse(result)
// 兼容旧版本:如果是旧格式(直接是字符串),只导入游戏数据
if (typeof importData === 'string' || !importData.game) {
localStorage.setItem(pkg.name, result)
toast.success(t('settings.importSuccess'))
setTimeout(() => window.location.reload(), 1000)
return
}
// 新格式:分别导入游戏数据和地图数据
if (importData.game) {
localStorage.setItem(pkg.name, importData.game)
}
if (importData.universe) {
localStorage.setItem(`${pkg.name}-universe`, importData.universe)
}
if (importData.npcs) {
localStorage.setItem(`${pkg.name}-npcs`, importData.npcs)
}
// 使用 SaveSystem 导入(支持新旧格式自动转换和迁移)
await saveSystem.importSave(result)
toast.success(t('settings.importSuccess'))
// 延迟刷新页面以让toast显示
setTimeout(() => window.location.reload(), 1000)
@@ -778,24 +742,8 @@
isWebDAVUploading.value = true
try {
// 获取游戏数据
const gameData = localStorage.getItem(pkg.name)
const universeData = localStorage.getItem(`${pkg.name}-universe`)
const npcData = localStorage.getItem(`${pkg.name}-npcs`)
if (!gameData) {
toast.error(t('settings.exportFailed'))
return
}
// 合并数据
const exportData = {
game: gameData,
npcs: npcData,
universe: universeData || null
}
const jsonString = JSON.stringify(exportData, null, 2)
// 使用 SaveSystem 导出(带版本号的 SaveEnvelope 格式)
const jsonString = saveSystem.exportSave()
const result = await uploadToWebDAV(webdavConfig.value, jsonString)
if (result.success) {
@@ -829,25 +777,10 @@
showConfirmDialog.value = true
gameStore.isPaused = true
confirmCallback = () => {
confirmCallback = async () => {
try {
const importData = JSON.parse(result.data!)
// 兼容旧版本格式
if (typeof importData === 'string' || !importData.game) {
localStorage.setItem(pkg.name, result.data!)
} else {
if (importData.game) {
localStorage.setItem(pkg.name, importData.game)
}
if (importData.universe) {
localStorage.setItem(`${pkg.name}-universe`, importData.universe)
}
if (importData.npcs) {
localStorage.setItem(`${pkg.name}-npcs`, importData.npcs)
}
}
// 使用 SaveSystem 导入(支持新旧格式自动转换和迁移)
await saveSystem.importSave(result.data!)
toast.success(t('settings.importSuccess'))
setTimeout(() => window.location.reload(), 1000)
} catch (error) {