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
@@ -16,6 +16,18 @@ function activeCustomer(id: string, tenantName: string, legalName: string | null
}
describe('InboundTaskList measurement scope', () => {
it('uses supplied order status tabs in the toolbar and keeps standalone mode titles as fallback', () => {
const source = readFileSync(resolve('src/modules/inbounds/components/InboundTaskList.vue'), 'utf8')
const toolbar = source.match(/<template #toolbar-start>([\s\S]*?)<\/template>/)?.[1]
const filters = source.match(/<template #filters>([\s\S]*?)<\/template>/)?.[1]
expect(toolbar).toContain('<slot name="status-tabs"><h1>')
expect(toolbar).toContain("title || (isReview ? '测量数据审核' : '订单测量')")
expect(toolbar).toContain('</h1></slot>')
expect(filters).toContain('<QueryToolbar')
expect(filters).not.toContain('name="status-tabs"')
expect(source).toContain('<template v-if="isReview && access.can(actionPermission)" #toolbar-actions>')
})
it('supports selecting only pending measurement reviews for batch approval', () => {
const source = readFileSync(resolve('src/modules/inbounds/components/InboundTaskList.vue'), 'utf8')
@@ -1,5 +1,6 @@
<script setup lang="ts">
import '@/styles/adminDensity.css'
import '@/styles/adminWorkbench.css'
import '../measurement/measurementDensity.css'
import { computed, onActivated, onBeforeUnmount, onMounted, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
@@ -341,13 +342,13 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
</script>
<template>
<AdminPage as="div" class="inbound-task-page admin-density">
<AdminPage as="div" class="inbound-task-page admin-density admin-workbench">
<ListPageLayout :aria-label="`${taskLabel}待办`">
<section :aria-busy="loading"><DataTable appearance="integrated" :stripe="false" column-settings-mode="show" :results-visible="!loadError"
<section :aria-busy="loading"><div class="workbench-table is-page-surface"><DataTable appearance="integrated" :stripe="false" column-settings-mode="show" :results-visible="!loadError"
v-model:page="page"
v-model:page-size="pageSize"
:data="result.records"
@@ -361,9 +362,8 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
:aria-label="`${taskLabel}待办列表`"
@selection-change="handleReviewSelectionChange"
>
<template #toolbar-start><h1>{{ title || (isReview ? '测量数据审核' : '订单测量') }}</h1></template>
<template #toolbar-start><slot name="status-tabs"><h1>{{ title || (isReview ? '测量数据审核' : '订单测量') }}</h1></slot></template>
<template #filters>
<slot name="status-tabs" />
<QueryToolbar
v-model="filters"
:ariaLabel="`${taskLabel}待办筛选`"
@@ -415,7 +415,7 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
<template #actualVolumeCbm="{ row }">{{ formatNumber((row as InboundOrderSummary).actualVolumeCbm) }}</template>
<template #measureCompletedAt="{ row }">{{ formatDate((row as InboundOrderSummary).measureCompletedAt) }}</template>
<template #empty><el-empty :description="emptyText" /></template>
</DataTable></section>
</DataTable></div></section>
</ListPageLayout>
<AppDialog
@@ -430,7 +430,7 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
append-to-body
:close-on-click-modal="!reviewNavigationLoading"
:close-on-press-escape="!reviewNavigationLoading"
class="inbound-task-dialog admin-density-dialog admin-density-workspace inbound-density"
class="inbound-task-dialog admin-density-dialog admin-density-workspace inbound-density admin-workbench is-dialog"
@closed="clearSelectedInbound"
>
<el-alert v-if="reviewNavigationError" type="error" :closable="false" show-icon class="review-navigation-error">
@@ -487,7 +487,7 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
.primary-cell { display: grid; gap: 3px; min-width: 0; }
.primary-cell strong, .primary-cell span { overflow-wrap: anywhere; }
.inbound-code-cell { display: grid; gap: 3px; min-width: 0; }
.primary-cell span, .muted-action { color: var(--cc-muted); font-size: var(--admin-font-caption, 12px); }
.primary-cell span, .muted-action { color: var(--workbench-muted); font-size: var(--admin-font-caption, 12px); }
@media (max-width: 520px) {
.row-actions { align-items: stretch; flex-direction: column; }
.row-actions :deep(.el-button) { width: 100%; }