style(admin): unify dialog layouts and dense readonly presentation

This commit is contained in:
2026-10-20 10:11:31 +08:00
parent 7ff7c9914f
commit 3267679758
214 changed files with 10931 additions and 2654 deletions
@@ -11,6 +11,7 @@ import { listPlatformWarehouses } from '@/modules/warehouses'
import { getApiErrorDetails, type ApiErrorDetails } from '@/shared/api/http'
import AdminPage from '@/shared/components/AdminPage.vue'
import ApiErrorMeta from '@/shared/components/ApiErrorMeta.vue'
import AppDialog from '@/shared/components/AppDialog.vue'
import DataTable, { type DataTableColumn } from '@/shared/components/DataTable.vue'
import ListPageLayout from '@/shared/components/ListPageLayout.vue'
import LoadErrorState from '@/shared/components/LoadErrorState.vue'
@@ -35,6 +36,7 @@ type FilterModel = QueryModel & {
const props = defineProps<{ mode: InboundTaskMode; title?: string }>()
const router = useRouter()
const access = useAccessPreviewStore()
const reviewPanelRef = ref<InstanceType<typeof MeasurementReviewPanel> | null>(null)
const page = ref(1)
const pageSize = ref(20)
const loading = ref(false)
@@ -413,12 +415,14 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
</DataTable></section>
</ListPageLayout>
<el-dialog
<AppDialog
v-if="isReview"
v-model="reviewDialogOpen"
:title="selectedInbound ? `${taskLabel} · ${selectedInbound.inboundCode || '入仓码待补充'}` : taskLabel"
width="min(1560px, calc(100vw - 48px))"
top="4vh"
fullscreenable
:show-confirm="false"
destroy-on-close
append-to-body
:close-on-click-modal="!reviewNavigationLoading"
@@ -433,6 +437,8 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
</el-alert>
<MeasurementReviewPanel
v-if="selectedInbound"
ref="reviewPanelRef"
:show-actions="false"
:tenant-id="selectedInbound.tenantId"
:inbound-id="selectedInbound.id"
:fulfillment-type="selectedInbound.fulfillmentType"
@@ -443,7 +449,16 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
:approval-completed="reviewApproved"
@changed="handleTaskChanged"
/>
</el-dialog>
<template #footer="{ close }">
<div class="review-dialog-footer">
<el-button :disabled="reviewNavigationLoading" @click="close">关闭</el-button>
<template v-if="reviewPanelRef?.isPending && reviewPanelRef?.canReview">
<el-button type="primary" plain @click="reviewPanelRef?.enableWeightCorrection()">修改重量</el-button>
<el-button type="primary" :loading="reviewPanelRef?.actionLoading === 'approve' || reviewNavigationLoading" :disabled="reviewApproved" @click="reviewPanelRef?.confirmApprove()">{{ reviewApproved ? '审核已通过' : reviewPanelRef?.approvalButtonLabel }}</el-button>
</template>
</div>
</template>
</AppDialog>
<InboundMeasurementDialog
v-if="!isReview && selectedInbound"
@@ -460,6 +475,8 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
</template>
<style scoped>
.review-dialog-footer { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: var(--admin-space-4, 10px); }
.review-dialog-footer :deep(.el-button) { margin-left: 0; }
.inbound-task-page { min-width: 0; }
.state-stack { display: grid; gap: var(--admin-space-5, 12px); }
.review-navigation-error { margin-bottom: 14px; }
@@ -476,7 +493,6 @@ onBeforeUnmount(() => { disposed = true; requestSerial += 1; optionsRequestSeria
<style>
.inbound-task-dialog.admin-density-workspace.el-dialog:not(.is-fullscreen) { height: auto; max-height: 92vh; overflow: hidden; }
.inbound-task-dialog .el-dialog__body { max-height: calc(92vh - 62px); }
@media (max-width: 520px) {
.inbound-task-dialog .el-dialog__body { padding: 14px; }
}