refactor(script): 重构脚本列表获取逻辑,优化用户数据加载方式

This commit is contained in:
2025-08-25 13:25:58 +08:00
parent 08daef4dcd
commit dc27127322
5 changed files with 289 additions and 141 deletions

View File

@@ -80,7 +80,7 @@ import { useScriptApi } from '@/composables/useScriptApi'
import { useUserApi } from '@/composables/useUserApi'
const router = useRouter()
const { addScript, deleteScript, getScripts, loading } = useScriptApi()
const { addScript, deleteScript, getScriptsWithUsers, loading } = useScriptApi()
const { addUser, updateUser, deleteUser, loading: userLoading } = useUserApi()
const scripts = ref<Script[]>([])
@@ -94,108 +94,17 @@ onMounted(() => {
const loadScripts = async () => {
try {
const scriptDetails = await getScripts()
const scriptDetails = await getScriptsWithUsers()
// 将 ScriptDetail 转换为 Script 格式(为了兼容现有的表格组件)
scripts.value = scriptDetails.map(detail => {
// 从配置中提取用户数据
const users: User[] = []
// 检查配置中是否有用户数据
if (detail.config && typeof detail.config === 'object') {
const config = detail.config as any
// 检查 SubConfigsInfo.UserData.instances
if (
config.SubConfigsInfo?.UserData?.instances &&
Array.isArray(config.SubConfigsInfo.UserData.instances)
) {
config.SubConfigsInfo.UserData.instances.forEach((instance: any, index: number) => {
if (instance && typeof instance === 'object' && instance.uid) {
// 从用户数据中获取实际的用户信息
const userData = config.SubConfigsInfo.UserData[instance.uid]
if (userData) {
// 创建用户对象,使用真实的用户数据
const user: User = {
id: instance.uid, // 使用真实的用户ID
name: userData.Info?.Name || `用户${index + 1}`,
Info: {
Name: userData.Info?.Name || `用户${index + 1}`,
Id: userData.Info?.Id || '',
Password: userData.Info?.Password || '',
Server: userData.Info?.Server || '官服',
MedicineNumb: userData.Info?.MedicineNumb || 0,
RemainedDay: userData.Info?.RemainedDay || 0,
SeriesNumb: userData.Info?.SeriesNumb || '',
Notes: userData.Info?.Notes || '',
Status: userData.Info?.Status !== undefined ? userData.Info.Status : true,
Mode: userData.Info?.Mode || 'MAA',
InfrastMode: userData.Info?.InfrastMode || '默认',
Routine: userData.Info?.Routine !== undefined ? userData.Info.Routine : true,
Annihilation: userData.Info?.Annihilation || '当期',
Stage: userData.Info?.Stage || '1-7',
StageMode: userData.Info?.StageMode || '刷完即停',
Stage_1: userData.Info?.Stage_1 || '',
Stage_2: userData.Info?.Stage_2 || '',
Stage_3: userData.Info?.Stage_3 || '',
Stage_Remain: userData.Info?.Stage_Remain || '',
IfSkland: userData.Info?.IfSkland || false,
SklandToken: userData.Info?.SklandToken || '',
},
Task: {
IfBase: userData.Task?.IfBase !== undefined ? userData.Task.IfBase : true,
IfCombat: userData.Task?.IfCombat !== undefined ? userData.Task.IfCombat : true,
IfMall: userData.Task?.IfMall !== undefined ? userData.Task.IfMall : true,
IfMission:
userData.Task?.IfMission !== undefined ? userData.Task.IfMission : true,
IfRecruiting:
userData.Task?.IfRecruiting !== undefined ? userData.Task.IfRecruiting : true,
IfReclamation: userData.Task?.IfReclamation || false,
IfAutoRoguelike: userData.Task?.IfAutoRoguelike || false,
IfWakeUp: userData.Task?.IfWakeUp || false,
},
Notify: {
Enabled: userData.Notify?.Enabled || false,
ToAddress: userData.Notify?.ToAddress || '',
IfSendMail: userData.Notify?.IfSendMail || false,
IfSendSixStar: userData.Notify?.IfSendSixStar || false,
IfSendStatistic: userData.Notify?.IfSendStatistic || false,
IfServerChan: userData.Notify?.IfServerChan || false,
IfCompanyWebHookBot: userData.Notify?.IfCompanyWebHookBot || false,
ServerChanKey: userData.Notify?.ServerChanKey || '',
ServerChanChannel: userData.Notify?.ServerChanChannel || '',
ServerChanTag: userData.Notify?.ServerChanTag || '',
CompanyWebHookBotUrl: userData.Notify?.CompanyWebHookBotUrl || '',
},
Data: {
CustomInfrastPlanIndex: userData.Data?.CustomInfrastPlanIndex || '',
IfPassCheck: userData.Data?.IfPassCheck || false,
LastAnnihilationDate: userData.Data?.LastAnnihilationDate || '',
LastProxyDate: userData.Data?.LastProxyDate || '',
LastSklandDate: userData.Data?.LastSklandDate || '',
ProxyTimes: userData.Data?.ProxyTimes || 0,
},
QFluentWidgets: {
ThemeColor: userData.QFluentWidgets?.ThemeColor || 'blue',
ThemeMode: userData.QFluentWidgets?.ThemeMode || 'system',
},
}
users.push(user)
}
}
})
}
}
return {
id: detail.uid,
type: detail.type,
name: detail.name,
config: detail.config,
users,
createTime: detail.createTime || new Date().toLocaleString(),
}
})
scripts.value = scriptDetails.map(detail => ({
id: detail.uid,
type: detail.type,
name: detail.name,
config: detail.config,
users: detail.users || [],
createTime: detail.createTime || new Date().toLocaleString(),
}))
} catch (error) {
console.error('加载脚本列表失败:', error)
message.error('加载脚本列表失败')

View File

@@ -933,7 +933,7 @@ import { useScriptApi } from '@/composables/useScriptApi'
const router = useRouter()
const route = useRoute()
const { addUser, updateUser, loading: userLoading } = useUserApi()
const { addUser, updateUser, getUsers, loading: userLoading } = useUserApi()
const { getScript } = useScriptApi()
const formRef = ref<FormInstance>()
@@ -1115,44 +1115,8 @@ const loadScriptInfo = async () => {
})
// 如果是编辑模式,加载用户数据
if (isEdit.value && script.config) {
const config = script.config as any
if (config.SubConfigsInfo?.UserData?.instances) {
const userInstance = config.SubConfigsInfo.UserData.instances.find(
(instance: any) => instance.uid === userId
)
if (userInstance) {
// 从用户数据中获取实际的用户信息
const userData = config.SubConfigsInfo.UserData[userInstance.uid]
if (userData) {
// 根据脚本类型填充用户数据
if (scriptType.value === 'MAA') {
Object.assign(formData, {
Info: { ...getDefaultMAAUserData().Info, ...userData.Info },
Task: { ...getDefaultMAAUserData().Task, ...userData.Task },
Notify: { ...getDefaultMAAUserData().Notify, ...userData.Notify },
Data: { ...getDefaultMAAUserData().Data, ...userData.Data },
QFluentWidgets: {
...getDefaultMAAUserData().QFluentWidgets,
...userData.QFluentWidgets,
},
})
} else {
// 通用脚本
Object.assign(formData, {
Info: { ...getDefaultGeneralUserData().Info, ...userData.Info },
Notify: { ...getDefaultGeneralUserData().Notify, ...userData.Notify },
Data: { ...getDefaultGeneralUserData().Data, ...userData.Data },
})
}
// 同步扁平化字段
formData.userName = formData.Info.Name
formData.userId = formData.Info.Id || ''
}
}
}
if (isEdit.value) {
await loadUserData()
}
} else {
message.error('脚本不存在')
@@ -1164,6 +1128,56 @@ const loadScriptInfo = async () => {
}
}
// 加载用户数据
const loadUserData = async () => {
try {
const userResponse = await getUsers(scriptId, userId)
if (userResponse && userResponse.code === 200) {
// 查找指定的用户数据
const userIndex = userResponse.index.find(index => index.uid === userId)
if (userIndex && userResponse.data[userId]) {
const userData = userResponse.data[userId] as any
// 根据脚本类型填充用户数据
if (scriptType.value === 'MAA' && userIndex.type === 'MaaUserConfig') {
Object.assign(formData, {
Info: { ...getDefaultMAAUserData().Info, ...userData.Info },
Task: { ...getDefaultMAAUserData().Task, ...userData.Task },
Notify: { ...getDefaultMAAUserData().Notify, ...userData.Notify },
Data: { ...getDefaultMAAUserData().Data, ...userData.Data },
QFluentWidgets: {
...getDefaultMAAUserData().QFluentWidgets,
...userData.QFluentWidgets,
},
})
} else if (scriptType.value === 'General' && userIndex.type === 'GeneralUserConfig') {
Object.assign(formData, {
Info: { ...getDefaultGeneralUserData().Info, ...userData.Info },
Notify: { ...getDefaultGeneralUserData().Notify, ...userData.Notify },
Data: { ...getDefaultGeneralUserData().Data, ...userData.Data },
})
}
// 同步扁平化字段
formData.userName = formData.Info.Name || ''
formData.userId = formData.Info.Id || ''
console.log('用户数据加载成功:', formData)
} else {
message.error('用户不存在')
handleCancel()
}
} else {
message.error('获取用户数据失败')
handleCancel()
}
} catch (error) {
console.error('加载用户数据失败:', error)
message.error('加载用户数据失败')
}
}
const handleSubmit = async () => {
try {
await formRef.value?.validate()