/** 软件版本上传进度与错误(任务 129):上传 job 状态转换与失败消息兜底;纯逻辑。 */ export type VersionUploadStatus = 'idle' | 'running' | 'done' | 'failed' export interface VersionUploadState { status: VersionUploadStatus progress: number message?: string } export function createVersionUploadState(): VersionUploadState { return { status: 'idle', progress: 0 } } export function startVersionUpload(_state: VersionUploadState): VersionUploadState { return { status: 'running', progress: 0 } } export function succeedVersionUpload(_state: VersionUploadState): VersionUploadState { return { status: 'done', progress: 100 } } export function failVersionUpload(_state: VersionUploadState, message: string): VersionUploadState { const text = typeof message === 'string' ? message.trim() : '' return { status: 'failed', progress: 0, message: text || '上传失败,请重试' } }