mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-07 18:07:47 +08:00
feat(frontend): improve provider detail drawer and pool actions
This commit is contained in:
@@ -90,6 +90,8 @@
|
||||
size="icon"
|
||||
class="h-8 w-8 shrink-0"
|
||||
:title="action.title"
|
||||
@pointerenter="action.key === 'viewProvider' && emit('prefetchProvider')"
|
||||
@focus="action.key === 'viewProvider' && emit('prefetchProvider')"
|
||||
@click="emit(action.event)"
|
||||
>
|
||||
<component
|
||||
@@ -249,6 +251,8 @@
|
||||
class="h-8 w-8"
|
||||
:data-testid="action.key === 'demandMetrics' ? 'pool-demand-metrics-button' : undefined"
|
||||
:title="action.title"
|
||||
@pointerenter="action.key === 'viewProvider' && emit('prefetchProvider')"
|
||||
@focus="action.key === 'viewProvider' && emit('prefetchProvider')"
|
||||
@click="emit(action.event)"
|
||||
>
|
||||
<component
|
||||
@@ -329,6 +333,7 @@ import {
|
||||
Settings2,
|
||||
SlidersHorizontal,
|
||||
SquareCheckBig,
|
||||
Upload,
|
||||
} from 'lucide-vue-next'
|
||||
import {
|
||||
Button,
|
||||
@@ -352,12 +357,14 @@ import {
|
||||
} from '@/features/pool/utils/poolBatchActions'
|
||||
|
||||
type HeaderActionEvent =
|
||||
| 'import'
|
||||
| 'scheduling'
|
||||
| 'viewProvider'
|
||||
| 'demandMetrics'
|
||||
| 'advanced'
|
||||
|
||||
type HeaderActionKey =
|
||||
| 'import'
|
||||
| 'scheduling'
|
||||
| 'viewProvider'
|
||||
| 'demandMetrics'
|
||||
@@ -395,6 +402,8 @@ const emit = defineEmits<{
|
||||
'update:providerId': [value: string]
|
||||
'update:status': [value: string]
|
||||
'update:search': [value: string]
|
||||
import: []
|
||||
prefetchProvider: []
|
||||
scheduling: []
|
||||
viewProvider: []
|
||||
demandMetrics: []
|
||||
@@ -428,6 +437,7 @@ const selectedCountLabel = computed(() => legacyT(`已选 ${Math.max(0, props.se
|
||||
const mobileActions = computed<HeaderAction[]>(() => {
|
||||
const actions: HeaderAction[] = [
|
||||
{ key: 'viewProvider', title: legacyT('查看详情'), event: 'viewProvider', icon: Eye },
|
||||
{ key: 'import', title: legacyT('导入账号'), event: 'import', icon: Upload },
|
||||
{ key: 'scheduling', title: legacyT('号池调度'), event: 'scheduling', icon: SlidersHorizontal },
|
||||
]
|
||||
if (props.showAdaptiveHotPoolMetricsButton) {
|
||||
@@ -442,6 +452,7 @@ const mobileActions = computed<HeaderAction[]>(() => {
|
||||
const desktopActions = computed<HeaderAction[]>(() => {
|
||||
const actions: HeaderAction[] = [
|
||||
{ key: 'viewProvider', title: legacyT('查看详情'), event: 'viewProvider', icon: Eye },
|
||||
{ key: 'import', title: legacyT('导入账号'), event: 'import', icon: Upload },
|
||||
]
|
||||
if (props.showAdaptiveHotPoolMetricsButton) {
|
||||
actions.push({ key: 'demandMetrics', title: legacyT('查看自适应热池指标'), event: 'demandMetrics', icon: Activity })
|
||||
|
||||
@@ -35,6 +35,8 @@ describe('PoolManagementHeader', () => {
|
||||
refreshLoading: false,
|
||||
refreshTitle: '刷新',
|
||||
onViewProvider: () => events.push('viewProvider'),
|
||||
onImport: () => events.push('import'),
|
||||
onPrefetchProvider: () => events.push('prefetchProvider'),
|
||||
onScheduling: () => events.push('scheduling'),
|
||||
onDemandMetrics: () => events.push('demandMetrics'),
|
||||
onAdvanced: () => events.push('advanced'),
|
||||
@@ -51,7 +53,10 @@ describe('PoolManagementHeader', () => {
|
||||
app.use(createI18n())
|
||||
app.mount(root)
|
||||
|
||||
root.querySelector<HTMLButtonElement>('[title="查看详情"]')?.click()
|
||||
const mobileViewProviderButton = root.querySelector<HTMLButtonElement>('[title="查看详情"]')
|
||||
mobileViewProviderButton?.dispatchEvent(new Event('pointerenter'))
|
||||
mobileViewProviderButton?.click()
|
||||
root.querySelector<HTMLButtonElement>('[title="导入账号"]')?.click()
|
||||
root.querySelector<HTMLButtonElement>('[title="点击调整号池调度"]')?.click()
|
||||
root.querySelector<HTMLButtonElement>('[title="查看自适应热池指标"]')?.click()
|
||||
const desktopActions = root.querySelector('[data-testid="pool-header-actions"]')
|
||||
@@ -67,7 +72,9 @@ describe('PoolManagementHeader', () => {
|
||||
root.querySelector<HTMLButtonElement>('[title="刷新"]')?.click()
|
||||
|
||||
expect(events).toEqual([
|
||||
'prefetchProvider',
|
||||
'viewProvider',
|
||||
'import',
|
||||
'scheduling',
|
||||
'demandMetrics',
|
||||
'advanced',
|
||||
@@ -75,8 +82,11 @@ describe('PoolManagementHeader', () => {
|
||||
'batchAction:refresh_quota',
|
||||
'refresh',
|
||||
])
|
||||
const viewProviderButton = desktopActions?.querySelector<HTMLButtonElement>('[title="查看详情"]')
|
||||
const importButton = desktopActions?.querySelector<HTMLButtonElement>('[title="导入账号"]')
|
||||
expect(selectAllButton?.textContent?.trim()).toBe('')
|
||||
expect(selectAllButton?.getAttribute('title')).toBe('全选')
|
||||
expect(viewProviderButton?.nextElementSibling).toBe(importButton)
|
||||
expect(advancedButton?.nextElementSibling).toBe(selectAllButton)
|
||||
expect(selectAllButton?.nextElementSibling).toBe(batchActionsButton)
|
||||
expect(batchActionsButton?.getAttribute('title')).toBe('选择执行动作')
|
||||
|
||||
Reference in New Issue
Block a user