| | |
| | | <script setup lang="tsx"> |
| | | import { useMessage } from 'naive-ui' |
| | | import type { FormInst, FormRules, UploadCustomRequestOptions, UploadFileInfo } from 'naive-ui' |
| | | import { ref } from 'vue' |
| | | import { onActivated, onBeforeUnmount, onDeactivated, ref } from 'vue' |
| | | import { useRouter } from 'vue-router' |
| | | import { beforeUploadCheck, customDirectUploadRequest } from '@/utils/upload' |
| | | import { releaseAppVersion, stringifyAppVersionFileValue } from '@/service/api/appVersion' |
| | |
| | | return beforeUploadCheck(data, { maxSize: 500, allowedTypes: [] }) |
| | | } |
| | | |
| | | let androidAbortController: AbortController | null = null |
| | | let iosAbortController: AbortController | null = null |
| | | |
| | | function resetFormAndUploads() { |
| | | if (androidAbortController) { |
| | | androidAbortController.abort() |
| | | androidAbortController = null |
| | | } |
| | | if (iosAbortController) { |
| | | iosAbortController.abort() |
| | | iosAbortController = null |
| | | } |
| | | androidUploading.value = false |
| | | iosUploading.value = false |
| | | formModel.value = { |
| | | version: '', |
| | | androidFiles: [], |
| | | iosFiles: [], |
| | | updateNote: '', |
| | | isForceUpdate: false, |
| | | } |
| | | formRef.value?.restoreValidation() |
| | | } |
| | | |
| | | onActivated(() => { |
| | | resetFormAndUploads() |
| | | }) |
| | | |
| | | onDeactivated(() => { |
| | | resetFormAndUploads() |
| | | }) |
| | | |
| | | onBeforeUnmount(() => { |
| | | resetFormAndUploads() |
| | | }) |
| | | |
| | | async function customRequestAndroid(options: any) { |
| | | if (androidAbortController) { |
| | | androidAbortController.abort() |
| | | } |
| | | androidAbortController = new AbortController() |
| | | |
| | | androidUploading.value = true |
| | | logAppVersionAdd('android upload triggered', { |
| | | fileName: options?.file?.name, |
| | |
| | | } |
| | | try { |
| | | // 安卓包改为前端直传:先拿上传地址,再将文件直接传到 OSS |
| | | const res = await customDirectUploadRequest(options as UploadCustomRequestOptions) |
| | | const res = await customDirectUploadRequest({ |
| | | ...options, |
| | | signal: androidAbortController.signal, |
| | | } as UploadCustomRequestOptions) |
| | | if (!res) { |
| | | logAppVersionAdd('android upload result empty') |
| | | formModel.value.androidFiles = [] |
| | |
| | | } |
| | | |
| | | async function customRequestIos(options: any) { |
| | | if (iosAbortController) { |
| | | iosAbortController.abort() |
| | | } |
| | | iosAbortController = new AbortController() |
| | | |
| | | iosUploading.value = true |
| | | logAppVersionAdd('ios upload triggered', { |
| | | fileName: options?.file?.name, |
| | |
| | | } |
| | | try { |
| | | // iOS 包改为前端直传:上传完成后将 fileId 存入文件项 id 字段 |
| | | const res = await customDirectUploadRequest(options as UploadCustomRequestOptions) |
| | | const res = await customDirectUploadRequest({ |
| | | ...options, |
| | | signal: iosAbortController.signal, |
| | | } as UploadCustomRequestOptions) |
| | | if (!res) { |
| | | logAppVersionAdd('ios upload result empty') |
| | | formModel.value.iosFiles = [] |
| | |
| | | } |
| | | |
| | | function handleCancel() { |
| | | resetFormAndUploads() |
| | | router.back() |
| | | } |
| | | </script> |