mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 16:05:12 +08:00
1.6.5
This commit is contained in:
@@ -179,8 +179,8 @@
|
||||
areMainSwitchesOff
|
||||
? t('settings.notificationsDisabled')
|
||||
: isTypesExpanded
|
||||
? t('settings.collapseTypes')
|
||||
: t('settings.expandTypes')
|
||||
? t('settings.collapseTypes')
|
||||
: t('settings.expandTypes')
|
||||
}}
|
||||
</p>
|
||||
</div>
|
||||
@@ -591,31 +591,92 @@
|
||||
const fileName = `${pkg.name}-${new Date().toISOString().slice(0, 10)}-${Date.now()}.json`
|
||||
const jsonString = JSON.stringify(exportData, null, 2)
|
||||
|
||||
// Android 保存到公共 Downloads 目录
|
||||
// Android/原生平台
|
||||
if (Capacitor.isNativePlatform()) {
|
||||
// 检查并请求存储权限
|
||||
const permStatus = await Filesystem.checkPermissions()
|
||||
if (permStatus.publicStorage !== 'granted') {
|
||||
// 尝试保存到公共 Downloads 目录
|
||||
try {
|
||||
const permStatus = await Filesystem.checkPermissions()
|
||||
if (permStatus.publicStorage === 'granted') {
|
||||
const result = await Filesystem.writeFile({
|
||||
path: `Download/${fileName}`,
|
||||
data: jsonString,
|
||||
directory: Directory.ExternalStorage,
|
||||
encoding: Encoding.UTF8
|
||||
})
|
||||
toast.success(t('settings.exportSuccessWithPath', { path: result.uri }))
|
||||
return
|
||||
}
|
||||
|
||||
// 尝试请求权限
|
||||
const reqResult = await Filesystem.requestPermissions()
|
||||
if (reqResult.publicStorage !== 'granted') {
|
||||
toast.error(t('settings.storagePermissionDenied'))
|
||||
if (reqResult.publicStorage === 'granted') {
|
||||
const result = await Filesystem.writeFile({
|
||||
path: `Download/${fileName}`,
|
||||
data: jsonString,
|
||||
directory: Directory.ExternalStorage,
|
||||
encoding: Encoding.UTF8
|
||||
})
|
||||
toast.success(t('settings.exportSuccessWithPath', { path: result.uri }))
|
||||
return
|
||||
}
|
||||
} catch (extError) {
|
||||
console.warn('ExternalStorage failed, trying Documents:', extError)
|
||||
}
|
||||
|
||||
// 备选方案:保存到应用文档目录 (TapPlay 等沙盒环境)
|
||||
try {
|
||||
const result = await Filesystem.writeFile({
|
||||
path: fileName,
|
||||
data: jsonString,
|
||||
directory: Directory.Documents,
|
||||
encoding: Encoding.UTF8
|
||||
})
|
||||
toast.success(t('settings.exportSuccessWithPath', { path: result.uri }))
|
||||
return
|
||||
} catch (docError) {
|
||||
console.warn('Documents failed, trying Data:', docError)
|
||||
}
|
||||
|
||||
// 最后备选:保存到应用数据目录
|
||||
try {
|
||||
const result = await Filesystem.writeFile({
|
||||
path: fileName,
|
||||
data: jsonString,
|
||||
directory: Directory.Data,
|
||||
encoding: Encoding.UTF8
|
||||
})
|
||||
toast.success(t('settings.exportSuccessWithPath', { path: result.uri }))
|
||||
return
|
||||
} catch (dataError) {
|
||||
console.warn('Data directory failed:', dataError)
|
||||
}
|
||||
|
||||
// 所有文件系统方式都失败,尝试 Web Share API
|
||||
if (navigator.share && navigator.canShare) {
|
||||
const file = new File([jsonString], fileName, { type: 'application/json' })
|
||||
if (navigator.canShare({ files: [file] })) {
|
||||
await navigator.share({
|
||||
files: [file],
|
||||
title: t('settings.exportData')
|
||||
})
|
||||
toast.success(t('settings.exportSuccess'))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
const result = await Filesystem.writeFile({
|
||||
path: `Download/${fileName}`,
|
||||
data: jsonString,
|
||||
directory: Directory.ExternalStorage,
|
||||
encoding: Encoding.UTF8
|
||||
})
|
||||
toast.success(t('settings.exportSuccessWithPath', { path: result.uri }))
|
||||
return
|
||||
// 最后的备选:复制到剪贴板
|
||||
try {
|
||||
await navigator.clipboard.writeText(jsonString)
|
||||
toast.success(t('settings.exportCopiedToClipboard'))
|
||||
return
|
||||
} catch {
|
||||
toast.error(t('settings.exportFailed'))
|
||||
}
|
||||
} else {
|
||||
// Web 使用 file-saver
|
||||
saveAs(new Blob([jsonString], { type: 'application/json' }), fileName)
|
||||
toast.success(t('settings.exportSuccess'))
|
||||
}
|
||||
toast.success(t('settings.exportSuccess'))
|
||||
} catch (error) {
|
||||
console.error('Export failed:', error)
|
||||
toast.error(t('settings.exportFailed'))
|
||||
|
||||
Reference in New Issue
Block a user