This commit is contained in:
2026-08-13 19:00:37 +08:00
parent 41038e1edd
commit 0f0ae612ca
18 changed files with 175 additions and 170 deletions
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { computed, onBeforeUnmount, ref, watch } from 'vue'
import { Box, ClipboardCheck, Pencil, RefreshCw } from '@lucide/vue'
import { ClipboardCheck, Pencil, RefreshCw } from '@lucide/vue'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import { getApiErrorDetails, type ApiErrorDetails } from '@/shared/api/http'
import ApiErrorMeta from '@/shared/components/ApiErrorMeta.vue'
@@ -103,7 +103,6 @@ onBeforeUnmount(() => {
<header class="workspace-header">
<div>
<div class="workspace-title-row">
<span class="workspace-mark" aria-hidden="true"><Box :size="20" /></span>
<h2>入库码:{{ title }}</h2>
<StatusBadge v-if="detail" :status="statusLabel" />
</div>
@@ -135,8 +134,8 @@ onBeforeUnmount(() => {
<InboundSummaryPanel :summary="detail.summary" :public-remark="detail.publicRemark" />
</el-tab-pane>
<el-tab-pane label="货品与测量" name="measurement" lazy>
<div class="workflow-launch-panel">
<div><h3>编辑入库测量数据</h3><p>核对原单数据、确认扫描箱数,并查看服务端计算的重量和体积结果。</p></div>
<div class="workflow-action-row">
<span>核对原单数据、确认扫描箱数,并查看服务端计算的重量和体积结果。</span>
<el-button type="primary" @click="measurementDialogOpen = true"><Pencil :size="16" />编辑测量数据</el-button>
</div>
<div class="measurement-workflow">
@@ -149,8 +148,8 @@ onBeforeUnmount(() => {
</div>
</el-tab-pane>
<el-tab-pane label="测量审核" name="review" lazy>
<div v-if="canViewMeasurement" class="workflow-launch-panel">
<div><h3>审核入库测量数据</h3><p>对照原单、设备实测和称重 OCR 结果后作出审核决定。</p></div>
<div v-if="canViewMeasurement" class="workflow-action-row">
<span>对照原单、设备实测和称重 OCR 结果后作出审核决定。</span>
<el-button type="primary" @click="reviewDialogOpen = true"><ClipboardCheck :size="16" />审核测量数据</el-button>
</div>
<el-alert
@@ -196,7 +195,7 @@ onBeforeUnmount(() => {
v-model="measurementDialogOpen"
class="inbound-operation-dialog inbound-measurement-dialog"
title="编辑入库测量数据"
width="min(1900px, calc(100vw - 32px))"
width="min(1240px, calc(100vw - 32px))"
top="4vh"
destroy-on-close
:close-on-click-modal="false"
@@ -213,7 +212,7 @@ onBeforeUnmount(() => {
<template #footer>
<div class="inbound-operation-dialog__footer">
<el-button @click="measurementDialogOpen = false">取消</el-button>
<el-button v-if="measurementPanelRef?.canEdit" type="primary" plain :loading="measurementPanelRef?.saving" :disabled="!measurementPanelRef?.mayMaintain" @click="measurementPanelRef?.saveDraft()">保存确认箱数</el-button>
<el-button v-if="measurementPanelRef?.canEdit" type="primary" plain :loading="measurementPanelRef?.saving" :disabled="!measurementPanelRef?.mayMaintain" @click="measurementPanelRef?.saveDraft()">保存测量数据</el-button>
<el-button v-if="measurementPanelRef?.canSubmit" type="primary" :loading="measurementPanelRef?.submitting" :disabled="!measurementPanelRef?.maySubmit" @click="measurementPanelRef?.submitForReview()">提交审核</el-button>
</div>
</template>
@@ -223,7 +222,7 @@ onBeforeUnmount(() => {
v-model="reviewDialogOpen"
class="inbound-operation-dialog inbound-review-dialog"
title="审核入库测量数据"
width="min(1700px, calc(100vw - 32px))"
width="min(1240px, calc(100vw - 32px))"
top="4vh"
destroy-on-close
:close-on-click-modal="false"
@@ -254,7 +253,6 @@ onBeforeUnmount(() => {
.inbound-workspace { min-width: 0; }
.workspace-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; padding: 18px 24px 16px; border-bottom: 1px solid var(--cc-border); }
.workspace-title-row { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 10px; }
.workspace-mark { display: grid; width: 36px; height: 36px; flex: 0 0 36px; place-items: center; border-radius: 8px; background: #1e293b; color: #fff; }
.workspace-title-row h2 { margin: 0; overflow-wrap: anywhere; color: #172033; font-size: 16px; line-height: 1.35; }
.workspace-header p { margin: 5px 0 0; color: var(--cc-muted); font-size: 12px; line-height: 1.5; }
.workspace-state { margin: 24px; }
@@ -266,9 +264,7 @@ onBeforeUnmount(() => {
.workflow-tabs :deep(.el-tabs__item) { min-height: 44px; padding: 0 18px; color: #475467; font-size: 13px; font-weight: 500; }
.workflow-tabs :deep(.el-tabs__item.is-active) { color: var(--cc-primary); font-weight: 650; }
.measurement-workflow { display: grid; min-width: 0; gap: 28px; }
.workflow-launch-panel { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 20px; padding: 20px; border: 1px solid var(--cc-border); border-radius: 8px; background: #fff; }
.workflow-launch-panel h3 { margin: 0; color: var(--cc-text); font-size: 15px; }
.workflow-launch-panel p { margin: 5px 0 0; color: var(--cc-muted); font-size: 12px; line-height: 1.55; }
.workflow-action-row { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 16px; padding: 0 0 14px; border-bottom: 1px solid var(--cc-border); color: var(--cc-muted); font-size: 12px; line-height: 1.5; }
.inbound-operation-dialog__body { min-width: 0; }
.inbound-operation-dialog__footer { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; }
.inbound-operation-dialog__footer :deep(.el-button) { margin-left: 0; }
@@ -286,8 +282,8 @@ onBeforeUnmount(() => {
.workflow-tabs { padding: 0 16px 16px; }
.workflow-tabs :deep(.el-tabs__nav-wrap) { overflow-x: auto; }
.workflow-tabs :deep(.el-tabs__item) { min-height: 44px; padding-inline: 14px; }
.workflow-launch-panel { align-items: stretch; flex-direction: column; padding: 16px; }
.workflow-launch-panel :deep(.el-button) { width: 100%; min-height: 44px; }
.workflow-action-row { align-items: stretch; flex-direction: column; }
.workflow-action-row :deep(.el-button) { width: 100%; min-height: 44px; }
:global(.inbound-operation-dialog.el-dialog) { width: calc(100vw - 20px) !important; max-width: calc(100vw - 20px); height: 92vh; }
:global(.inbound-operation-dialog .el-dialog__header) { padding: 16px; }
:global(.inbound-operation-dialog .el-dialog__body) { padding: 14px; }