增强和平小店账号管理
This commit is contained in:
@@ -3,6 +3,10 @@ import { useToast } from './useToast'
|
||||
import {
|
||||
GetAccounts,
|
||||
QueryXiaodianAssets,
|
||||
QueryXiaodianRoles,
|
||||
GetXiaodianBindQRCode,
|
||||
BindXiaodianRole,
|
||||
DeleteAccounts,
|
||||
QueryScore,
|
||||
ReloadAccounts,
|
||||
VerifyAllExchange,
|
||||
@@ -33,6 +37,25 @@ export interface XiaodianAssets {
|
||||
error?: string
|
||||
}
|
||||
const xiaodianAssetsMap = ref<Record<string, XiaodianAssets>>({})
|
||||
export interface XiaodianRole {
|
||||
success: boolean
|
||||
roleId?: string
|
||||
roleName?: string
|
||||
openId?: string
|
||||
type?: string
|
||||
platId?: number
|
||||
areaId?: number
|
||||
error?: string
|
||||
}
|
||||
export interface XiaodianQRCode {
|
||||
success: boolean
|
||||
accountName?: string
|
||||
url?: string
|
||||
gameRoleBindUrl?: string
|
||||
error?: string
|
||||
}
|
||||
const xiaodianRolesMap = ref<Record<string, XiaodianRole>>({})
|
||||
const xiaodianQRCode = ref<XiaodianQRCode | null>(null)
|
||||
|
||||
export function useAccounts() {
|
||||
const { showToast } = useToast()
|
||||
@@ -54,6 +77,32 @@ export function useAccounts() {
|
||||
showToast('账号已刷新', `共 ${data.count} 个账号`, 'success')
|
||||
}
|
||||
|
||||
const deleteAccount = async (accountName: string) => {
|
||||
if (!accountName) return false
|
||||
if (!window.confirm(`确定删除账号「${accountName}」及其 CK 吗?`)) return false
|
||||
try {
|
||||
const result = await DeleteAccounts([accountName])
|
||||
if (!result.success) {
|
||||
showToast('删除失败', result.error || '账号文件未更新', 'error')
|
||||
return false
|
||||
}
|
||||
selectedIndices.value = new Set()
|
||||
saveSelection()
|
||||
delete statusMap.value[accountName]
|
||||
delete accountProductMap.value[accountName]
|
||||
delete xiaodianAssetsMap.value[accountName]
|
||||
delete xiaodianRolesMap.value[accountName]
|
||||
localStorage.setItem('statusMap', JSON.stringify(statusMap.value))
|
||||
localStorage.setItem('accountProducts', JSON.stringify(accountProductMap.value))
|
||||
await loadAccounts()
|
||||
showToast('删除成功', `已删除 ${accountName} 及其 CK`, 'success')
|
||||
return true
|
||||
} catch (e: any) {
|
||||
showToast('删除失败', e?.message || '', 'error')
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const toggleAccount = (index: number) => {
|
||||
if (selectedIndices.value.has(index)) {
|
||||
selectedIndices.value.delete(index)
|
||||
@@ -117,17 +166,91 @@ export function useAccounts() {
|
||||
}
|
||||
|
||||
const queryAllXiaodianAssets = async () => {
|
||||
const accountNames = selectedAccountNames()
|
||||
if (accountNames.length === 0) {
|
||||
showToast('查询点券和碎片', '请先勾选要查询的账号', 'warn')
|
||||
return
|
||||
}
|
||||
showToast('查询点券和碎片', '正在查询账号资产...', 'info')
|
||||
try {
|
||||
const data = await QueryXiaodianAssets()
|
||||
xiaodianAssetsMap.value = data?.results || {}
|
||||
const successCount = Object.values(xiaodianAssetsMap.value).filter(item => item.success).length
|
||||
showToast('资产查询完成', `成功 ${successCount}/${accounts.value.length} 个账号`, successCount > 0 ? 'success' : 'warn')
|
||||
const data = await QueryXiaodianAssets(accountNames)
|
||||
const queriedResults = data?.results || {}
|
||||
xiaodianAssetsMap.value = {
|
||||
...xiaodianAssetsMap.value,
|
||||
...queriedResults
|
||||
}
|
||||
const successCount = Object.values(queriedResults).filter(item => item.success).length
|
||||
showToast('资产查询完成', `成功 ${successCount}/${accountNames.length} 个账号`, successCount > 0 ? 'success' : 'warn')
|
||||
} catch (e: any) {
|
||||
showToast('资产查询失败', e?.message || '', 'error')
|
||||
}
|
||||
}
|
||||
|
||||
const queryAllXiaodianRoles = async () => {
|
||||
const accountNames = selectedAccountNames()
|
||||
if (accountNames.length === 0) {
|
||||
showToast('查询角色信息', '请先勾选要查询的账号', 'warn')
|
||||
return
|
||||
}
|
||||
showToast('查询角色信息', '正在查询小店绑定角色...', 'info')
|
||||
try {
|
||||
const data = await QueryXiaodianRoles(accountNames)
|
||||
const queriedResults = data?.results || {}
|
||||
xiaodianRolesMap.value = {
|
||||
...xiaodianRolesMap.value,
|
||||
...queriedResults
|
||||
}
|
||||
const successCount = Object.values(queriedResults).filter(item => item.success).length
|
||||
showToast('角色查询完成', `成功 ${successCount}/${accountNames.length} 个账号`, successCount > 0 ? 'success' : 'warn')
|
||||
} catch (e: any) {
|
||||
showToast('角色查询失败', e?.message || '', 'error')
|
||||
}
|
||||
}
|
||||
|
||||
const getXiaodianRole = (name: string): XiaodianRole | undefined => xiaodianRolesMap.value[name]
|
||||
|
||||
const getXiaodianBindQRCode = async (accountName: string) => {
|
||||
if (!accountName) {
|
||||
showToast('获取二维码', '请先选择一个账号', 'warn')
|
||||
return false
|
||||
}
|
||||
try {
|
||||
const result = await GetXiaodianBindQRCode(accountName)
|
||||
if (!result?.success || !result.url) {
|
||||
xiaodianQRCode.value = null
|
||||
showToast('获取二维码失败', result?.error || '接口未返回二维码链接', 'error')
|
||||
return false
|
||||
}
|
||||
xiaodianQRCode.value = result
|
||||
return true
|
||||
} catch (e: any) {
|
||||
showToast('获取二维码失败', e?.message || '', 'error')
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const bindXiaodianRole = async () => {
|
||||
const accountName = xiaodianQRCode.value?.accountName || ''
|
||||
if (!accountName) return false
|
||||
try {
|
||||
const result = await BindXiaodianRole(accountName)
|
||||
xiaodianRolesMap.value = { ...xiaodianRolesMap.value, [accountName]: result }
|
||||
if (!result?.success || !result.roleName) {
|
||||
showToast('绑定失败', result?.error || '尚未检测到绑定角色,请先扫码', 'warn')
|
||||
return false
|
||||
}
|
||||
showToast('绑定成功', `${accountName}:${result.roleName}`, 'success')
|
||||
return true
|
||||
} catch (e: any) {
|
||||
showToast('绑定失败', e?.message || '', 'error')
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const closeXiaodianQRCode = () => {
|
||||
xiaodianQRCode.value = null
|
||||
}
|
||||
|
||||
const getScore = (name: string): string => {
|
||||
return scoreMap.value[name] || localStorage.getItem('accScore_' + name) || '-'
|
||||
}
|
||||
@@ -225,15 +348,23 @@ export function useAccounts() {
|
||||
statusMap,
|
||||
scoreMap,
|
||||
xiaodianAssetsMap,
|
||||
xiaodianRolesMap,
|
||||
xiaodianQRCode,
|
||||
accountProductMap,
|
||||
loadAccounts,
|
||||
reloadAccounts,
|
||||
deleteAccount,
|
||||
toggleAccount,
|
||||
toggleAll,
|
||||
clearSelection,
|
||||
restoreSelection,
|
||||
queryAllScore,
|
||||
queryAllXiaodianAssets,
|
||||
queryAllXiaodianRoles,
|
||||
getXiaodianRole,
|
||||
getXiaodianBindQRCode,
|
||||
bindXiaodianRole,
|
||||
closeXiaodianQRCode,
|
||||
getScore,
|
||||
getXiaodianAssets,
|
||||
resetStatus,
|
||||
|
||||
Reference in New Issue
Block a user