From ae7c75abc5b9299041cb47b7ce99cffd808ce2eb Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 7 May 2026 15:35:49 +0800 Subject: [PATCH] =?UTF-8?q?apk=E5=8C=85=E5=8C=BA=E5=88=86sdk=E5=92=8Cwitho?= =?UTF-8?q?ut=20sdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/core/apk.ts | 9 +- .../src/views/operation/apk/index.vue | 105 ++++++++++++------ 2 files changed, 82 insertions(+), 32 deletions(-) diff --git a/apps/web-antd/src/api/core/apk.ts b/apps/web-antd/src/api/core/apk.ts index 0a3fca9..9338ff4 100644 --- a/apps/web-antd/src/api/core/apk.ts +++ b/apps/web-antd/src/api/core/apk.ts @@ -2,18 +2,25 @@ import { requestClient } from '#/api/request'; export namespace ApkApi { export type Environment = 'dev' | 'prod' | 'stable'; + export type PackageType = 'with_sdk' | 'without_sdk'; export interface PackageItem { downloadPath: string; env: Environment; + packageType: PackageType; exists: boolean; fileName: string; size: number; uploadedAt: string; version: string; } + + export interface EnvironmentPackages { + env: Environment; + variants: Partial>; + } } export async function getApkPackagesApi() { - return requestClient.get('/apk/packages'); + return requestClient.get('/apk/packages'); } \ No newline at end of file diff --git a/apps/web-antd/src/views/operation/apk/index.vue b/apps/web-antd/src/views/operation/apk/index.vue index ac1519c..2a172c8 100644 --- a/apps/web-antd/src/views/operation/apk/index.vue +++ b/apps/web-antd/src/views/operation/apk/index.vue @@ -14,8 +14,9 @@ const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); const accessStore = useAccessStore(); const loading = ref(false); -const downloadingEnv = ref(''); -const packages = ref([]); +const downloadingKey = ref(''); +const packages = ref([]); +const packageTypes: ApkApi.PackageType[] = ['with_sdk', 'without_sdk']; const envLabelMap: Record = { dev: '开发环境', @@ -29,6 +30,16 @@ const envDescriptionMap: Record = { prod: '用于正式对外发布。', }; +const packageTypeLabelMap: Record = { + with_sdk: '包含 SDK', + without_sdk: '不包含 SDK', +}; + +const packageTypeDescriptionMap: Record = { + with_sdk: '适合渠道联调、SDK 验证和三方能力测试。', + without_sdk: '适合纯净包验证、基础功能测试和问题排查。', +}; + async function loadPackages() { loading.value = true; try { @@ -57,8 +68,11 @@ function formatTime(value: string) { return dayjs(value).format('YYYY-MM-DD HH:mm:ss'); } -function resolveDownloadUrl(env: ApkApi.Environment) { - return `${apiURL.replace(/\/$/, '')}/apk/download/${env}`; +function resolveDownloadUrl(item: ApkApi.PackageItem) { + if (item.downloadPath) { + return `${apiURL.replace(/\/$/, '')}${item.downloadPath}`; + } + return `${apiURL.replace(/\/$/, '')}/apk/download/${item.env}?packageType=${item.packageType}`; } function resolveDownloadName(item: ApkApi.PackageItem, disposition: null | string) { @@ -90,9 +104,9 @@ async function downloadPackage(item: ApkApi.PackageItem) { return; } - downloadingEnv.value = item.env; + downloadingKey.value = `${item.env}:${item.packageType}`; try { - const response = await fetch(resolveDownloadUrl(item.env), { + const response = await fetch(resolveDownloadUrl(item), { headers: { Authorization: `Bearer ${accessStore.accessToken}`, }, @@ -118,12 +132,23 @@ async function downloadPackage(item: ApkApi.PackageItem) { message.success(`开始下载 ${downloadName}`); } catch (error) { console.error(error); - message.error(`${envLabelMap[item.env]} APK 下载失败`); + message.error(`${envLabelMap[item.env]} ${packageTypeLabelMap[item.packageType]} APK 下载失败`); } finally { - downloadingEnv.value = ''; + downloadingKey.value = ''; } } +function getVariantItem( + envPackages: ApkApi.EnvironmentPackages, + packageType: ApkApi.PackageType, +) { + return envPackages.variants[packageType]; +} + +function getDownloadKey(env: ApkApi.Environment, packageType: ApkApi.PackageType) { + return `${env}:${packageType}`; +} + onMounted(() => { loadPackages(); }); @@ -134,42 +159,60 @@ onMounted(() => {
- 当前页面展示 dev、stable、prod 三套客户端 APK 包。 + 当前页面展示 dev、stable、prod 三套环境下的 SDK 包和非 SDK 包。 Jenkins 通过后端上传接口更新包后,这里会自动展示最新版本并支持后台下载。
- + - - {{ item.exists ? '已上传' : '暂无包' }} - - {{ item.env }} + {{ envPackages.env }} - {{ envDescriptionMap[item.env] }} + {{ envDescriptionMap[envPackages.env] }} -
-
文件名:{{ item.fileName || '-' }}
-
版本号:{{ item.version || '-' }}
-
文件大小:{{ formatSize(item.size) }}
-
上传时间:{{ formatTime(item.uploadedAt) }}
-
- -
- +
+
+ {{ packageTypeLabelMap[packageType] }} +
+ + {{ getVariantItem(envPackages, packageType)?.exists ? '已上传' : '暂无包' }} + +
+ + + {{ packageTypeDescriptionMap[packageType] }} + + +
+
文件名:{{ getVariantItem(envPackages, packageType)?.fileName || '-' }}
+
版本号:{{ getVariantItem(envPackages, packageType)?.version || '-' }}
+
文件大小:{{ formatSize(getVariantItem(envPackages, packageType)?.size || 0) }}
+
上传时间:{{ formatTime(getVariantItem(envPackages, packageType)?.uploadedAt || '') }}
+
+ +
+ +
+