42 lines
6.3 KiB
Vue
42 lines
6.3 KiB
Vue
<script setup lang="ts">
|
||||
|
|
import '@/styles/adminDensity.css'
|
|||
|
|
import { computed } from 'vue'
|
|||
|
|
import type { ProcurementCommand } from '../api/procurementCommands'
|
|||
|
|
import type { PlatformProcurement, ProcurementFile } from '../procurementTypes'
|
|||
|
|
import { allowedDecisions, decisionLabels, remainingLabels, type ControlForm } from '../procurementControlForm'
|
|||
|
|
const props = defineProps<{ command: ProcurementCommand; detail: PlatformProcurement; files: ProcurementFile[] }>()
|
|||
|
|
const form = defineModel<ControlForm>({ required: true })
|
|||
|
|
const proofs = computed(() => props.files.filter(file => file.category === 'EXCEPTION'))
|
|||
|
|
const blockers = computed(() => props.detail.controls.notes.filter(note => note.blocking && !note.resolved_at))
|
|||
|
|
</script>
|
|||
|
|
<template>
|
|||
|
|
<div class="admin-density">
|
|||
|
|
<template v-if="command === 'control-notes'">
|
|||
|
|
<el-alert title="追加说明保留原购买、仓库、实收及交寄事实。需要阻断时,正式装箱、预估核对、核费及交寄须先处理异常。" type="info" :closable="false" />
|
|||
|
|
<el-form-item label="关联事实类型" required><el-select v-model="form.targetType" placeholder="选择需要留痕的事实" @change="form.targetId = ''"><el-option value="PURCHASE" label="真实购买" /><el-option value="WAREHOUSE" label="实际收货仓" /><el-option value="RECEIPT" label="实收记录" /><el-option value="SHIPMENT" label="实际交寄记录" /></el-select></el-form-item>
|
|||
|
|
<el-form-item v-if="form.targetType === 'RECEIPT'" label="关联实收" required><el-select v-model="form.targetId" placeholder="选择本单实收记录"><el-option v-for="row in detail.physical.receipts" :key="row.id" :value="row.id" :label="`${row.receiptNo} · ${row.leg === 'OVERSEAS' ? '海外' : '国内'}${row.active ? '' : '(已更正)'}`" /></el-select></el-form-item>
|
|||
|
|
<el-form-item v-if="form.targetType === 'SHIPMENT'" label="关联实际交寄" required><el-select v-model="form.targetId" placeholder="选择本单实际交寄记录"><el-option v-for="row in detail.transport.shipments" :key="row.id" :value="row.id" :label="`${row.shipmentNo} · ${row.leg === 'OVERSEAS' ? '国际段' : '寄客户段'}`" /></el-select></el-form-item>
|
|||
|
|
<dl v-if="form.targetType === 'WAREHOUSE'" class="density-fields"><div><dt>当前实际仓</dt><dd>{{ detail.customerView.order.actualWarehouseName || '尚无实际仓' }}</dd></div></dl>
|
|||
|
|
<el-form-item label="是否阻断后续正式作业" required><el-radio-group v-model="form.blocking"><el-radio :value="true">需要阻断</el-radio><el-radio :value="false">仅追加说明</el-radio></el-radio-group></el-form-item>
|
|||
|
|
<el-form-item label="对客摘要(客户可见,选填)"><el-input v-model="form.clientSummary" type="textarea" :rows="2" maxlength="500" show-word-limit placeholder="仅填写允许客户看到的处理摘要" /></el-form-item>
|
|||
|
|
</template>
|
|||
|
|
<template v-if="command === 'control-notes/resolve'"><el-alert title="解除阻断须填写处理依据并关联本单凭证,原说明与处理记录均保留。" type="info" :closable="false" /><el-form-item label="待解除阻断" required><el-select v-model="form.noteId" placeholder="选择本单未处理的阻断异常"><el-option v-for="note in blockers" :key="note.id" :value="note.id" :label="`${note.note_no} · ${note.reason.slice(0, 60)}`" /></el-select></el-form-item></template>
|
|||
|
|
<template v-if="command === 'actual-warehouse/correct'"><el-alert title="已有箱明细、交寄记录或订单已结束时,本操作仅追加更正说明和阻断,不重新归属货物。是否修改有效仓以服务端历史记录为准。" type="warning" :closable="false" /><dl class="density-fields"><div><dt>原实际收货仓</dt><dd>{{ detail.customerView.order.actualWarehouseName || '尚未记录' }}</dd></div></dl></template>
|
|||
|
|
<template v-if="command === 'exception-close'">
|
|||
|
|
<el-alert title="确认全部实物去向和资金处理后关闭。此操作不自动退款、不生成退货物流,不覆盖原履约事实。" type="warning" :closable="false" />
|
|||
|
|
<section v-for="row in form.resolutions" :key="`${row.kind}:${row.sourceId || ''}`" class="resolution-row"><h3>{{ remainingLabels[row.kind] }} · {{ row.businessNo || '—' }} · {{ row.quantity }} 件</h3><div class="resolution-grid"><el-form-item label="实际处置" required><el-select v-model="row.decision" placeholder="明确实际处置结果"><el-option v-for="value in allowedDecisions[row.kind]" :key="value" :value="value" :label="decisionLabels[value]" /></el-select></el-form-item><el-form-item label="本项处置凭证" required><el-select v-model="row.voucherFileId" placeholder="选择本单对应凭证"><el-option v-for="file in proofs" :key="file.fileId" :value="file.fileId" :label="file.fileName" /></el-select></el-form-item></div><el-form-item label="实际去向及接收方" required><el-input v-model="row.destination" maxlength="500" placeholder="填写货物实际去向、接收方或确认丢失的依据" /></el-form-item></section>
|
|||
|
|
<p v-if="!form.resolutions.length">服务端当前无待处置的剩余货物,仍需核对客户停止履约凭证和资金处理结论。</p>
|
|||
|
|
<el-form-item label="客户同意停止履约凭证" required><el-select v-model="form.customerVoucherFileId" placeholder="选择本单客户确认凭证"><el-option v-for="file in proofs" :key="file.fileId" :value="file.fileId" :label="file.fileName" /></el-select></el-form-item>
|
|||
|
|
<el-form-item label="财务处理结论(仅平台可见)" required><el-input v-model="form.financialConclusion" type="textarea" :rows="3" maxlength="1000" show-word-limit placeholder="说明扣款、调整、退款及冻结释放的最终处理结果" /></el-form-item>
|
|||
|
|
<el-form-item label="对客关闭摘要(客户可见)" required><el-input v-model="form.clientSummary" type="textarea" :rows="3" maxlength="500" show-word-limit placeholder="填写允许客户看到的最终处理结论" /></el-form-item>
|
|||
|
|
</template>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
<style scoped>
|
|||
|
|
.resolution-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--admin-space-3); }
|
|||
|
|
.resolution-row { padding-block: var(--admin-space-3); border-bottom: 1px solid var(--cc-border); }
|
|||
|
|
.resolution-row h3 { font-size: var(--admin-font-section); }
|
|||
|
|
:deep(.el-select) { width: 100%; }
|
|||
|
|
@media (max-width: 760px) { .resolution-grid { grid-template-columns: 1fr; } }
|
|||
|
|
</style>
|