This commit is contained in:
2026-10-20 23:34:11 +08:00
parent f155976f52
commit 13e4aa56ec
321 changed files with 6756 additions and 2110 deletions
@@ -30,7 +30,13 @@ describe('PDA release workbench', () => {
expect(page).toContain('<template #toolbar-start>')
expect(page).toContain('<template #toolbar-actions>')
expect(page).toContain('class="pda-release-actions density-actions row-actions admin-text-actions"')
expect(page).toContain('<h1>PDA版本</h1>')
const toolbar = page.match(/<template #toolbar-start>([\s\S]*?)<\/template>/)?.[1]
expect(toolbar).toContain('class="pda-release-context query-toolbar workbench-list-tabs"')
expect(toolbar).toContain('<el-radio-group v-model="app" size="small" aria-label="选择PDA应用">')
expect(toolbar).toContain('当前 APK')
expect(toolbar).toContain('当前 WGT')
expect(page).not.toContain('<template #filters>')
expect(page).not.toContain('<h1>PDA版本</h1>')
expect(pdaReleaseRoutes[0]?.meta?.showPageHeading).toBe(false)
})
})
@@ -1,4 +1,5 @@
<script setup lang="ts">
import '@/styles/adminWorkbench.css'
import '@/styles/adminDensity.css'
import { computed, onMounted, reactive, ref, watch } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -93,7 +94,7 @@ async function changeStatus(row: PdaRelease, action: 'publish' | 'withdraw') {
const label = action === 'publish' ? '发布' : '停发'
try {
await ElMessageBox.confirm(`确认${label}${row.app === 'domestic' ? '国内' : '海外'}PDA ${row.packageType.toUpperCase()} ${row.versionName}?${action === 'publish' ? '发布后设备将收到更新。' : '停发后设备不再获取这个版本。'}`,
`${label}PDA版本`, { type: 'warning', confirmButtonText: `确认${label}`, cancelButtonText: '取消', customClass: 'admin-density-confirm' })
`${label}PDA版本`, { type: 'warning', confirmButtonText: `确认${label}`, cancelButtonText: '取消', customClass: 'admin-density-confirm admin-workbench' })
} catch { return }
actionId.value = row.id
try {
@@ -119,12 +120,11 @@ function download(row: PdaRelease) {
</script>
<template>
<AdminPage class="admin-density pda-releases-page">
<AdminPage class="admin-density pda-releases-page admin-workbench">
<ListPageLayout aria-label="PDA版本">
<DataTable appearance="integrated" :stripe="false" column-settings-mode="show" preference-key="pda-releases-table" :data="rows" :columns="columns" :loading="loading" :aria-busy="loading" row-key="id" border empty-text="暂无版本记录">
<template #toolbar-start><h1>PDA版本</h1></template>
<template #filters>
<div class="pda-release-context query-toolbar">
<div class="workbench-table is-page-surface"><DataTable appearance="integrated" :stripe="false" column-settings-mode="show" preference-key="pda-releases-table" :data="rows" :columns="columns" :loading="loading" :aria-busy="loading" row-key="id" border empty-text="暂无版本记录">
<template #toolbar-start>
<div class="pda-release-context query-toolbar workbench-list-tabs">
<el-radio-group v-model="app" size="small" aria-label="选择PDA应用">
<el-radio-button value="domestic">国内 PDA</el-radio-button>
<el-radio-button value="overseas">海外 PDA</el-radio-button>
@@ -156,10 +156,10 @@ function download(row: PdaRelease) {
<template #sizeBytes="{ row }">{{ (row.sizeBytes / 1024 / 1024).toFixed(1) }} MB</template>
<template #createdAt="{ row }">{{ row.createdAt?.replace('T', ' ').slice(0, 19) || '—' }}</template>
<template #publishedAt="{ row }">{{ row.publishedAt?.replace('T', ' ').slice(0, 19) || '—' }}</template>
</DataTable>
</DataTable></div>
</ListPageLayout>
<AppDialog v-model="uploadOpen" class="admin-density-dialog" title="上传PDA版本" width="min(640px, calc(100vw - 28px))" confirm-text="保存草稿" :confirm-loading="uploading" @confirm="upload">
<AppDialog v-model="uploadOpen" class="admin-density-dialog admin-workbench is-dialog" title="上传PDA版本" width="min(640px, calc(100vw - 28px))" confirm-text="保存草稿" :confirm-loading="uploading" @confirm="upload">
<el-form label-position="top" class="pda-release-form">
<el-form-item label="包类型">
<el-radio-group v-model="form.packageType"><el-radio-button value="apk">APK 整包</el-radio-button><el-radio-button value="wgt">WGT 热更新</el-radio-button></el-radio-group>
@@ -183,8 +183,8 @@ function download(row: PdaRelease) {
.pda-release-context { display: flex; min-width: 0; align-items: center; gap: var(--admin-space-6); }
.pda-release-current { display: flex; min-width: 0; flex-wrap: wrap; gap: var(--admin-space-3) var(--admin-space-6); margin: 0; }
.pda-release-current > div { display: flex; min-width: 0; align-items: baseline; gap: var(--admin-space-2); }
.pda-release-current dt { color: var(--cc-muted); font-size: var(--admin-font-caption); }
.pda-release-current dd { margin: 0; color: var(--cc-text); font-size: var(--admin-font-body); font-variant-numeric: tabular-nums; }
.pda-release-current dt { color: var(--workbench-muted); font-size: var(--admin-font-caption); }
.pda-release-current dd { margin: 0; color: var(--workbench-text); font-size: var(--admin-font-body); font-variant-numeric: tabular-nums; }
.pda-release-actions { display: flex; align-items: center; gap: var(--admin-space-2); }
.pda-release-actions :deep(.el-button) { display: inline-flex; align-items: center; gap: 5px; }
.pda-release-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 18px; }