diff --git a/frontend/admin-web/src/views/app-versions/hooks/use-upload.ts b/frontend/admin-web/src/views/app-versions/hooks/use-upload.ts index 527cfaf..ade4f59 100644 --- a/frontend/admin-web/src/views/app-versions/hooks/use-upload.ts +++ b/frontend/admin-web/src/views/app-versions/hooks/use-upload.ts @@ -3,20 +3,36 @@ import type { ChangeEvent } from 'react'; import type { AppType } from '@/domain/entities'; import { useUploadStore } from '@/store/zustand/upload.store'; -import { uploadVersionUseCase } from '@/application/use-cases/version.use-cases'; +import { parsePackageUseCase, uploadVersionUseCase } from '@/application/use-cases/version.use-cases'; export function useUpload(appType: AppType, onSuccess: () => void) { const store = useUploadStore(); - const handleFileChange = (e: ChangeEvent) => { + const handleFileChange = async (e: ChangeEvent) => { const f = e.target.files?.[0]; if (!f) return; store.setFile(f); store.setParseWarning(''); + store.setVersionName(''); + store.setBuildNumber(''); + store.setMinOsVersion(''); if (f.name.endsWith('.apk')) store.setPlatform('ANDROID'); else if (f.name.endsWith('.ipa')) store.setPlatform('IOS'); + + // 先解析,等解析完成后才允许点击上传(与 RWADurian 一致) + store.setIsParsing(true); + try { + const parsed = await parsePackageUseCase.execute(f); + if (parsed.versionName) store.setVersionName(parsed.versionName); + if (parsed.versionCode) store.setBuildNumber(String(parsed.versionCode)); + if (parsed.minSdkVersion) store.setMinOsVersion(parsed.minSdkVersion); + } catch { + store.setParseWarning('无法自动解析安装包信息,请手动填写版本号和构建号'); + } finally { + store.setIsParsing(false); + } }; const handleSubmit = async () => {