使用示例
基本使用
使用 useGameForm 添加游戏(推荐方式)
这是最推荐的方式,提供了完整的表单管理功能。
typescript
import { useGameForm } from '~/composables/ui/useGameForm'
import { useGameList } from '~/composables/ui/useGameList'
import { useMessage } from '~/composables/ui/useMessage'
import { useNotification } from 'naive-ui'
const { refreshGames } = useGameList()
const { showSuccess, showError } = useMessage()
const notification = useNotification()
const {
formData,
formRef,
isDetecting,
detectionResult,
isAutoDetected,
imagePreview,
uploadingImage,
selectFolder,
selectImage,
clearImage,
submitForm,
resetForm,
getGameTypeName
} = useGameForm()
// 1. 选择游戏文件夹(会自动检测游戏信息)
await selectFolder()
// 2. 如果需要,选择游戏图片
if (!imagePreview.value) {
await selectImage()
}
// 3. 提交表单
try {
const success = await submitForm()
if (success) {
showSuccess('游戏添加成功!')
await refreshGames() // 刷新游戏列表
resetForm()
}
} catch (error) {
showError('添加游戏失败')
// 显示详细错误信息(右下角)
notification.error({
title: '添加游戏失败',
content: error instanceof Error ? error.message : String(error),
duration: 5000,
placement: 'bottom-right'
})
}获取游戏列表
方式 1:使用 useGameList(推荐)
typescript
import { useGameList } from '~/composables/ui/useGameList'
const { games, isLoading, fetchGames, refreshGames } = useGameList()
// 获取所有游戏
await fetchGames()
// 访问游戏列表
console.log(games.value)方式 2:使用 useGameApi
typescript
import { useGameApi } from '~/composables/api/useGameApi'
const gameApi = useGameApi()
// 获取所有游戏
await gameApi.getGames()
// 访问游戏列表
console.log(gameApi.games.value)添加新游戏
方式 1:使用 useGameForm(推荐)
typescript
import { useGameForm } from '~/composables/ui/useGameForm'
import { useGameList } from '~/composables/ui/useGameList'
import { useMessage } from '~/composables/ui/useMessage'
import { useNotification } from 'naive-ui'
const { refreshGames } = useGameList()
const { showSuccess, showError } = useMessage()
const notification = useNotification()
const {
formData,
selectFolder,
submitForm,
resetForm
} = useGameForm()
// 1. 选择游戏文件夹(会自动检测游戏信息)
await selectFolder()
// 2. 提交表单
try {
const success = await submitForm()
if (success) {
showSuccess('游戏添加成功!')
await refreshGames() // 刷新游戏列表
resetForm()
}
} catch (error) {
showError('添加游戏失败')
// 显示详细错误
notification.error({
title: '添加游戏失败',
content: error instanceof Error ? error.message : String(error),
duration: 5000,
placement: 'bottom-right'
})
}方式 2:使用 useGameApi(手动控制)
typescript
import { useGameApi } from '~/composables/api/useGameApi'
const gameApi = useGameApi()
// 1. 选择游戏文件夹
const folderResponse = await gameApi.selectGameFolder()
if (!folderResponse?.success || !folderResponse.data) {
console.log('用户取消了选择')
return
}
// 2. 检测游戏信息
const detectResponse = await gameApi.detectGame(folderResponse.data)
if (!detectResponse.success) {
console.error('检测失败:', detectResponse.error)
return
}
// 3. 检查目录是否重复
const checkResponse = await gameApi.checkDuplicateDirectory(folderResponse.data)
if (!checkResponse.success) {
console.error('目录已被使用:', checkResponse.error)
return
}
// 4. 保存游戏
const saveResponse = await gameApi.saveGame({
name: detectResponse.data.game_name || 'GTA Game',
dir: folderResponse.data,
exe: detectResponse.data.executable || '',
type: detectResponse.data.type
})
if (saveResponse.success) {
console.log('游戏添加成功')
// 刷新游戏列表
await gameApi.getGames()
}启动游戏
方式 1:使用 useGameList(推荐)
typescript
import { useGameList } from '~/composables/ui/useGameList'
const { games, launchGame } = useGameList()
const game = games.value[0]
try {
await launchGame(game)
console.log('游戏启动成功')
} catch (error) {
console.error('启动失败:', error)
}方式 2:使用 useGameApi
typescript
import { useGameApi } from '~/composables/api/useGameApi'
const gameApi = useGameApi()
const game = gameApi.games.value[0]
const response = await gameApi.launchGame(game.dir, game.exe)
if (response.success) {
console.log('游戏启动成功')
} else {
console.error('启动失败:', response.error)
}MOD 管理
获取已安装的 MOD 列表
typescript
import { useModApi } from '~/composables/api/useModApi'
const modApi = useModApi()
const gameDir = 'C:/Games/GTA_SA'
const mods = await modApi.getGameMods(gameDir)
console.log('已安装的 MOD:', mods)
mods.forEach(mod => {
console.log(`- ${mod.name} (${mod.type})`)
if (mod.install_path) {
console.log(` 安装路径: ${mod.install_path}`)
}
})注意: 如果获取失败,getGameMods 会返回空数组 [],并自动显示错误消息。
安装单个 MOD 文件
typescript
import { useModApi } from '~/composables/api/useModApi'
const modApi = useModApi()
// 方式1: 选择文件
const filePath = await modApi.selectModFiles(false)
if (!filePath) {
console.log('用户取消了选择')
return
}
// 方式2: 直接安装
const result = await modApi.installUserMod({
game_dir: 'C:/Games/GTA_SA',
mod_source_path: filePath,
mod_name: '无限金钱',
overwrite: false
})
if (result) {
console.log('安装成功!')
console.log('已安装文件:', result.installed_files)
console.log('创建的目录:', result.created_directories)
// installUserMod 内部已显示成功消息
} else {
// installUserMod 内部已显示错误消息
console.log('安装失败')
}安装带配置的 MOD
typescript
import { useModApi } from '~/composables/api/useModApi'
const modApi = useModApi()
// 1. 选择 MOD 文件夹
const modDir = await modApi.selectModFiles(true)
if (!modDir) return
// 2. 检查是否有配置文件
const hasConfig = await modApi.checkModConfig(modDir)
console.log('是否有配置文件:', hasConfig)
// 3. 安装 MOD(如果有 g2m.json,会自动按照配置安装)
const result = await modApi.installUserMod({
game_dir: 'C:/Games/GTA_SA',
mod_source_path: modDir,
mod_name: '我的MOD',
overwrite: false
})
if (result) {
// 安装成功,内部已显示成功消息
console.log('安装成功')
}手动指定安装目录
typescript
import { useModApi } from '~/composables/api/useModApi'
const modApi = useModApi()
// 1. 选择 MOD 文件/文件夹
const modPath = await modApi.selectModFiles(false)
if (!modPath) return
// 2. 选择安装目录
const installDir = await modApi.selectGameInstallDirectory('C:/Games/GTA_SA')
if (!installDir) {
console.log('用户取消了选择')
return
}
// 3. 安装到指定目录
const result = await modApi.installUserMod({
game_dir: 'C:/Games/GTA_SA',
mod_source_path: modPath,
mod_name: '我的MOD',
overwrite: false,
target_directory: installDir // 指定安装目录
})
if (result) {
console.log('安装成功')
}应用信息
获取应用版本信息
typescript
import { useAppInfo } from '~/composables/api/useApp'
const { appInfo, getAppInfo } = useAppInfo()
await getAppInfo()
if (appInfo.value) {
console.log('应用名称:', appInfo.value.name)
console.log('版本号:', appInfo.value.version)
console.log('标识符:', appInfo.value.identifier)
}窗口控制
窗口操作
typescript
import { useWindowControl } from '~/composables/api/useApp'
const {
isMaximized,
minimizeWindow,
toggleMaximize,
closeWindow
} = useWindowControl()
// 最小化窗口
await minimizeWindow()
// 切换最大化/还原
await toggleMaximize()
// 关闭窗口
await closeWindow()
// 检查是否最大化
console.log('窗口是否最大化:', isMaximized.value)错误处理
完整的错误处理示例
typescript
import { useModApi } from '~/composables/api/useModApi'
import { useMessage } from '~/composables/ui/useMessage'
import { useNotification } from 'naive-ui'
const modApi = useModApi()
const { showError, showSuccess } = useMessage()
const notification = useNotification()
try {
const result = await modApi.installUserMod({
game_dir: 'C:/Games/GTA_SA',
mod_source_path: 'C:/Mods/my_mod.zip',
mod_name: '我的MOD',
overwrite: false
})
if (result) {
// installUserMod 内部已显示成功消息,这里不需要重复显示
// 刷新 MOD 列表
await modApi.getGameMods('C:/Games/GTA_SA')
} else {
// installUserMod 内部已经显示了错误消息
console.log('安装失败')
}
} catch (error) {
// 显示简短错误提示
showError('安装失败')
// 显示详细错误信息(右下角)
notification.error({
title: 'MOD 安装失败',
content: error instanceof Error ? error.message : String(error),
duration: 5000,
placement: 'bottom-right'
})
}组合使用
完整的游戏和 MOD 管理流程
typescript
import { useGameList } from '~/composables/ui/useGameList'
import { useModApi } from '~/composables/api/useModApi'
const { games, fetchGames } = useGameList()
const modApi = useModApi()
// 1. 获取游戏列表
await fetchGames()
// 2. 选择第一个游戏
const game = games.value[0]
if (!game) {
console.log('没有游戏')
return
}
// 3. 获取该游戏的 MOD 列表
const mods = await modApi.getGameMods(game.dir)
console.log(`游戏 "${game.name}" 已安装 ${mods.length} 个 MOD`)
// 4. 安装新 MOD
const modPath = await modApi.selectModFiles(false)
if (modPath) {
const result = await modApi.installUserMod({
game_dir: game.dir,
mod_source_path: modPath,
mod_name: '新MOD',
overwrite: false
})
if (result) {
// 重新获取 MOD 列表
const updatedMods = await modApi.getGameMods(game.dir)
console.log(`现在有 ${updatedMods.length} 个 MOD`)
}
}