fix(admin): lock submitted measurement rule editing
This commit is contained in:
@@ -346,7 +346,8 @@ describe('UnifiedOrdersView contract', () => {
|
|||||||
expect(source).toContain('仓库修改外箱(宽)')
|
expect(source).toContain('仓库修改外箱(宽)')
|
||||||
expect(source).toContain('仓库修改外箱(高)')
|
expect(source).toContain('仓库修改外箱(高)')
|
||||||
expect(source).toContain('saveWarehouseOuterDimensions')
|
expect(source).toContain('saveWarehouseOuterDimensions')
|
||||||
expect(source).toContain("'MEASURE_REJECTED', 'WAIT_SPLIT'")
|
expect(source).toContain("'PREPARING', 'WAIT_MEASURE', 'MEASURING', 'MEASURE_REJECTED'")
|
||||||
|
expect(source).toContain('v-if="measurementDraftEditable"')
|
||||||
expect(source).not.toContain('请至少输入一项需要修改的外箱尺寸')
|
expect(source).not.toContain('请至少输入一项需要修改的外箱尺寸')
|
||||||
expect(source).toContain(".map((value) => value == null || value === '' ? null : Number(value))")
|
expect(source).toContain(".map((value) => value == null || value === '' ? null : Number(value))")
|
||||||
expect(source).toContain('相关数值已重新计算')
|
expect(source).toContain('相关数值已重新计算')
|
||||||
@@ -381,7 +382,7 @@ describe('UnifiedOrdersView contract', () => {
|
|||||||
expect(source).toContain('label="箱规系数" value="MULTIPLY"')
|
expect(source).toContain('label="箱规系数" value="MULTIPLY"')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('keeps preview modes independent and persists both outer-carton selectors immediately', () => {
|
it('keeps preview modes independent and only persists outer-carton selectors while the measurement draft is editable', () => {
|
||||||
expect(source).toContain("measurementSectionModes = reactive<Record<MeasurementSection, MeasurementCalculationMode>>")
|
expect(source).toContain("measurementSectionModes = reactive<Record<MeasurementSection, MeasurementCalculationMode>>")
|
||||||
expect(source).toContain(':model-value="measurementSectionModes.customer"')
|
expect(source).toContain(':model-value="measurementSectionModes.customer"')
|
||||||
expect(source).toContain(':model-value="measurementSectionModes.outer"')
|
expect(source).toContain(':model-value="measurementSectionModes.outer"')
|
||||||
@@ -391,7 +392,10 @@ describe('UnifiedOrdersView contract', () => {
|
|||||||
expect(source).not.toContain("updateMeasurementSectionMode('outer', $event)")
|
expect(source).not.toContain("updateMeasurementSectionMode('outer', $event)")
|
||||||
expect(source.match(/@change="selectAndSaveOuterMeasurementMode\(\$event\)"/g)).toHaveLength(2)
|
expect(source.match(/@change="selectAndSaveOuterMeasurementMode\(\$event\)"/g)).toHaveLength(2)
|
||||||
expect(source).not.toContain('@visible-change="handleOuterModeDropdownVisibleChange($event)"')
|
expect(source).not.toContain('@visible-change="handleOuterModeDropdownVisibleChange($event)"')
|
||||||
expect(source.match(/:disabled="Boolean\(measurementStrategySavingId\) \|\| !can\('platform:firstleg:inbound:measure:edit'\)"/g)).toHaveLength(2)
|
expect(source.match(/:disabled="Boolean\(measurementStrategySavingId\) \|\| !measurementDraftEditable"/g)).toHaveLength(2)
|
||||||
|
expect(source).toContain("measurementDetail.value?.processStatus === 'MEASURE_PENDING'")
|
||||||
|
expect(source).toContain('测量已提交待审核;如需修改箱规计算规则,请先退回测量')
|
||||||
|
expect(source).toContain('if (!measurementDraftEditable.value)')
|
||||||
expect(source).toContain('const previousMode = measurementSectionModes.outer')
|
expect(source).toContain('const previousMode = measurementSectionModes.outer')
|
||||||
expect(source).toContain('if (!saved) measurementSectionModes.outer = previousMode')
|
expect(source).toContain('if (!saved) measurementSectionModes.outer = previousMode')
|
||||||
expect(source).not.toContain('handleOuterModeDropdownVisibleChange')
|
expect(source).not.toContain('handleOuterModeDropdownVisibleChange')
|
||||||
|
|||||||
@@ -224,6 +224,18 @@ type MeasurementCalculationMode = 'ACTUAL' | 'ADD' | 'MULTIPLY'
|
|||||||
const measurementSectionModes = reactive<Record<MeasurementSection, MeasurementCalculationMode>>({
|
const measurementSectionModes = reactive<Record<MeasurementSection, MeasurementCalculationMode>>({
|
||||||
customer: 'ACTUAL', outer: 'ACTUAL', actual: 'ACTUAL',
|
customer: 'ACTUAL', outer: 'ACTUAL', actual: 'ACTUAL',
|
||||||
})
|
})
|
||||||
|
const measurementDraftEditableStatuses = new Set([
|
||||||
|
'PREPARING', 'WAIT_MEASURE', 'MEASURING', 'MEASURE_REJECTED',
|
||||||
|
])
|
||||||
|
const measurementDraftEditable = computed(() => (
|
||||||
|
can('platform:firstleg:inbound:measure:edit')
|
||||||
|
&& measurementDraftEditableStatuses.has(measurementDetail.value?.processStatus || '')
|
||||||
|
))
|
||||||
|
const measurementDraftLockedHint = computed(() => {
|
||||||
|
if (!can('platform:firstleg:inbound:measure:edit')) return '当前账号缺少测量编辑权限'
|
||||||
|
if (measurementDetail.value?.processStatus === 'MEASURE_PENDING') return '测量已提交待审核;如需修改箱规计算规则,请先退回测量'
|
||||||
|
return '当前测量状态已冻结,不能修改箱规计算规则'
|
||||||
|
})
|
||||||
const cargoImagePreviewUrls = new Set<string>()
|
const cargoImagePreviewUrls = new Set<string>()
|
||||||
const measurementDialogOpen = ref(false)
|
const measurementDialogOpen = ref(false)
|
||||||
const openWarehouseSuggestionOnMeasurementLoad = ref(false)
|
const openWarehouseSuggestionOnMeasurementLoad = ref(false)
|
||||||
@@ -516,6 +528,10 @@ function updateMeasurementSectionMode(section: MeasurementSection, mode: Measure
|
|||||||
|
|
||||||
async function selectAndSaveOuterMeasurementMode(mode: MeasurementCalculationMode, ruleId?: string) {
|
async function selectAndSaveOuterMeasurementMode(mode: MeasurementCalculationMode, ruleId?: string) {
|
||||||
if (measurementStrategySavingId.value) return
|
if (measurementStrategySavingId.value) return
|
||||||
|
if (!measurementDraftEditable.value) {
|
||||||
|
ElMessage.warning(measurementDraftLockedHint.value)
|
||||||
|
return
|
||||||
|
}
|
||||||
const previousMode = measurementSectionModes.outer
|
const previousMode = measurementSectionModes.outer
|
||||||
if (mode === 'MULTIPLY' && !activeMeasurementChargeRule.value) {
|
if (mode === 'MULTIPLY' && !activeMeasurementChargeRule.value) {
|
||||||
ElMessage.warning('该客户尚未启用系数配置,请先到客户计费规则中设置默认规则')
|
ElMessage.warning('该客户尚未启用系数配置,请先到客户计费规则中设置默认规则')
|
||||||
@@ -969,7 +985,7 @@ function measurementCalculationModeForRow(row: Record<string, unknown>): Measure
|
|||||||
async function updateMeasurementCalculationMode(row: Record<string, unknown> | null, mode: MeasurementCalculationMode, selectedRuleId?: string): Promise<boolean> {
|
async function updateMeasurementCalculationMode(row: Record<string, unknown> | null, mode: MeasurementCalculationMode, selectedRuleId?: string): Promise<boolean> {
|
||||||
const summary = detail.value?.summary
|
const summary = detail.value?.summary
|
||||||
const measurement = measurementDetail.value
|
const measurement = measurementDetail.value
|
||||||
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null || !can('platform:firstleg:inbound:measure:edit')) return false
|
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null || !measurementDraftEditable.value) return false
|
||||||
const itemId = normalizedIdentifier(row?.id)
|
const itemId = normalizedIdentifier(row?.id)
|
||||||
const itemNo = normalizedIdentifier(row?.itemNo)
|
const itemNo = normalizedIdentifier(row?.itemNo)
|
||||||
const targetIds = new Set(measurement.items
|
const targetIds = new Set(measurement.items
|
||||||
@@ -1065,19 +1081,14 @@ async function updateMeasurementCalculationMode(row: Record<string, unknown> | n
|
|||||||
async function saveWarehouseOuterDimensions(row: Record<string, unknown>) {
|
async function saveWarehouseOuterDimensions(row: Record<string, unknown>) {
|
||||||
const summary = detail.value?.summary
|
const summary = detail.value?.summary
|
||||||
const measurement = measurementDetail.value
|
const measurement = measurementDetail.value
|
||||||
const editableMeasurementStatuses = new Set([
|
const currentStatus = measurement?.processStatus || summary?.mainStatus || ''
|
||||||
'WAIT_MEASURE', 'MEASURING', 'MEASURE_PENDING', 'MEASURE_REJECTED', 'WAIT_SPLIT',
|
if (measurement && !measurementDraftEditableStatuses.has(currentStatus)) {
|
||||||
])
|
|
||||||
const currentStatus = editableMeasurementStatuses.has(measurement?.processStatus || '')
|
|
||||||
? measurement!.processStatus
|
|
||||||
: summary?.mainStatus || measurement?.processStatus || ''
|
|
||||||
if (measurement && !editableMeasurementStatuses.has(currentStatus)) {
|
|
||||||
const statusLabel = orderStatusLabel(summary?.mainStatus) || measurementStatusLabel(currentStatus)
|
const statusLabel = orderStatusLabel(summary?.mainStatus) || measurementStatusLabel(currentStatus)
|
||||||
ElMessage.warning(`当前状态为“${statusLabel}”,该状态不可以修改测量数据`)
|
ElMessage.warning(`当前状态为“${statusLabel}”,该状态不可以修改测量数据`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null
|
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null
|
||||||
|| !can('platform:firstleg:inbound:measure:edit')) return
|
|| !measurementDraftEditable.value) return
|
||||||
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm]
|
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm]
|
||||||
.map((value) => value == null || value === '' ? null : Number(value))
|
.map((value) => value == null || value === '' ? null : Number(value))
|
||||||
if (dimensions.some((value) => value != null && (!Number.isFinite(value) || value <= 0))) {
|
if (dimensions.some((value) => value != null && (!Number.isFinite(value) || value <= 0))) {
|
||||||
@@ -2442,7 +2453,7 @@ onBeforeUnmount(() => {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section class="measurement-section">
|
<section class="measurement-section">
|
||||||
<div class="measurement-section-title"><button type="button" class="measurement-section-toggle" :aria-expanded="!measurementCollapsed.outer" @click="toggleMeasurementSection('outer')"><h3>二、外箱规数据</h3><span class="measurement-section-summary"><span>总件数:{{ measurementTotals(outerMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(outerMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(outerMeasurementRows).volume, 6) }}</span><span>总材积重:{{ formatNumber(measurementTotals(outerMeasurementRows).volumetric) }}</span><span>重量体积:{{ formatNumber(measurementTotals(outerMeasurementRows).weightVolume, 6) }}</span></span><ChevronUp v-if="!measurementCollapsed.outer" :size="18" /><ChevronDown v-else :size="18" /></button><el-select class="measurement-section-mode" :model-value="measurementSectionModes.outer" aria-label="外箱规数据计算方式" :loading="Boolean(measurementStrategySavingId)" :disabled="Boolean(measurementStrategySavingId) || !can('platform:firstleg:inbound:measure:edit')" @change="selectAndSaveOuterMeasurementMode($event)"><el-option label="实测原尺寸(不调整)" value="ACTUAL" /><el-option label="箱规尺寸" value="ADD" /><el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" /></el-select></div>
|
<div class="measurement-section-title"><button type="button" class="measurement-section-toggle" :aria-expanded="!measurementCollapsed.outer" @click="toggleMeasurementSection('outer')"><h3>二、外箱规数据</h3><span class="measurement-section-summary"><span>总件数:{{ measurementTotals(outerMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(outerMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(outerMeasurementRows).volume, 6) }}</span><span>总材积重:{{ formatNumber(measurementTotals(outerMeasurementRows).volumetric) }}</span><span>重量体积:{{ formatNumber(measurementTotals(outerMeasurementRows).weightVolume, 6) }}</span></span><ChevronUp v-if="!measurementCollapsed.outer" :size="18" /><ChevronDown v-else :size="18" /></button><el-tooltip :content="measurementDraftLockedHint" :disabled="measurementDraftEditable"><span><el-select class="measurement-section-mode" :model-value="measurementSectionModes.outer" aria-label="外箱规数据计算方式" :loading="Boolean(measurementStrategySavingId)" :disabled="Boolean(measurementStrategySavingId) || !measurementDraftEditable" @change="selectAndSaveOuterMeasurementMode($event)"><el-option label="实测原尺寸(不调整)" value="ACTUAL" /><el-option label="箱规尺寸" value="ADD" /><el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" /></el-select></span></el-tooltip></div>
|
||||||
<div v-if="!measurementCollapsed.outer">
|
<div v-if="!measurementCollapsed.outer">
|
||||||
<div v-loading="measurementLoading" class="detail-table-wrap"><el-table :data="outerMeasurementRows" border stripe empty-text="暂无外箱规数据"><el-table-column label="#" prop="itemNo" min-width="70" /><el-table-column v-for="column in outerColumns.filter((item) => item.key !== 'itemNo')" :key="column.key" :label="column.label" :prop="column.key" min-width="150"><template #default="{ row }"><LineClampText v-if="column.key === 'remark'" :content="measurementValue(row as Record<string, unknown>, column.key)" /><template v-else>{{ measurementValue(row as Record<string, unknown>, column.key) }}</template></template></el-table-column></el-table></div>
|
<div v-loading="measurementLoading" class="detail-table-wrap"><el-table :data="outerMeasurementRows" border stripe empty-text="暂无外箱规数据"><el-table-column label="#" prop="itemNo" min-width="70" /><el-table-column v-for="column in outerColumns.filter((item) => item.key !== 'itemNo')" :key="column.key" :label="column.label" :prop="column.key" min-width="150"><template #default="{ row }"><LineClampText v-if="column.key === 'remark'" :content="measurementValue(row as Record<string, unknown>, column.key)" /><template v-else>{{ measurementValue(row as Record<string, unknown>, column.key) }}</template></template></el-table-column></el-table></div>
|
||||||
<div class="measurement-total"><strong>合计</strong><span>箱数:{{ measurementTotals(outerMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(outerMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(outerMeasurementRows).volume, 6) }}</span><span>总材积:{{ formatNumber(measurementTotals(outerMeasurementRows).volumetric) }}</span></div>
|
<div class="measurement-total"><strong>合计</strong><span>箱数:{{ measurementTotals(outerMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(outerMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(outerMeasurementRows).volume, 6) }}</span><span>总材积:{{ formatNumber(measurementTotals(outerMeasurementRows).volumetric) }}</span></div>
|
||||||
@@ -2450,12 +2461,12 @@ onBeforeUnmount(() => {
|
|||||||
</section>
|
</section>
|
||||||
<div class="measurement-rule-selector">
|
<div class="measurement-rule-selector">
|
||||||
<span class="measurement-rule-selector__label">箱规计算规则选择</span>
|
<span class="measurement-rule-selector__label">箱规计算规则选择</span>
|
||||||
<el-select class="measurement-rule-selector__control" :model-value="measurementSectionModes.outer" aria-label="外箱规数据计算方式" :loading="Boolean(measurementStrategySavingId)" :disabled="Boolean(measurementStrategySavingId) || !can('platform:firstleg:inbound:measure:edit')" @change="selectAndSaveOuterMeasurementMode($event)">
|
<el-tooltip :content="measurementDraftLockedHint" :disabled="measurementDraftEditable"><span><el-select class="measurement-rule-selector__control" :model-value="measurementSectionModes.outer" aria-label="外箱规数据计算方式" :loading="Boolean(measurementStrategySavingId)" :disabled="Boolean(measurementStrategySavingId) || !measurementDraftEditable" @change="selectAndSaveOuterMeasurementMode($event)">
|
||||||
<el-option label="实测原尺寸(不调整)" value="ACTUAL" />
|
<el-option label="实测原尺寸(不调整)" value="ACTUAL" />
|
||||||
<el-option label="箱规尺寸" value="ADD" />
|
<el-option label="箱规尺寸" value="ADD" />
|
||||||
<el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" />
|
<el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" />
|
||||||
</el-select>
|
</el-select></span></el-tooltip>
|
||||||
<span class="measurement-rule-selector__hint">规则参数来源:客户管理</span>
|
<span class="measurement-rule-selector__hint">{{ measurementDraftEditable ? '规则参数来源:客户管理' : measurementDraftLockedHint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<section class="measurement-section">
|
<section class="measurement-section">
|
||||||
<div class="measurement-section-title"><button type="button" class="measurement-section-toggle" :aria-expanded="!measurementCollapsed.actual" @click="toggleMeasurementSection('actual')"><h3>三、实际测量数据</h3><span class="measurement-section-summary"><span>总件数:{{ measurementTotals(actualMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(actualMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(actualMeasurementRows).volume, 6) }}</span><span>总材积重:{{ formatNumber(measurementTotals(actualMeasurementRows).volumetric) }}</span><span>重量体积:{{ formatNumber(measurementTotals(actualMeasurementRows).weightVolume, 6) }}</span></span><ChevronUp v-if="!measurementCollapsed.actual" :size="18" /><ChevronDown v-else :size="18" /></button><el-select class="measurement-section-mode" :model-value="measurementSectionModes.actual" aria-label="实际测量数据计算方式" @change="updateMeasurementSectionMode('actual', $event)"><el-option label="实测原尺寸(不调整)" value="ACTUAL" /><el-option label="箱规尺寸" value="ADD" /><el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" /></el-select></div>
|
<div class="measurement-section-title"><button type="button" class="measurement-section-toggle" :aria-expanded="!measurementCollapsed.actual" @click="toggleMeasurementSection('actual')"><h3>三、实际测量数据</h3><span class="measurement-section-summary"><span>总件数:{{ measurementTotals(actualMeasurementRows).count ?? '—' }}</span><span>总毛重:{{ formatNumber(measurementTotals(actualMeasurementRows).gross) }}</span><span>总体积:{{ formatNumber(measurementTotals(actualMeasurementRows).volume, 6) }}</span><span>总材积重:{{ formatNumber(measurementTotals(actualMeasurementRows).volumetric) }}</span><span>重量体积:{{ formatNumber(measurementTotals(actualMeasurementRows).weightVolume, 6) }}</span></span><ChevronUp v-if="!measurementCollapsed.actual" :size="18" /><ChevronDown v-else :size="18" /></button><el-select class="measurement-section-mode" :model-value="measurementSectionModes.actual" aria-label="实际测量数据计算方式" @change="updateMeasurementSectionMode('actual', $event)"><el-option label="实测原尺寸(不调整)" value="ACTUAL" /><el-option label="箱规尺寸" value="ADD" /><el-option label="箱规系数" value="MULTIPLY" :disabled="multiplyModeDisabled" /></el-select></div>
|
||||||
@@ -2467,15 +2478,15 @@ onBeforeUnmount(() => {
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="#" prop="itemNo" min-width="70" fixed="left" />
|
<el-table-column label="#" prop="itemNo" min-width="70" fixed="left" />
|
||||||
<el-table-column label="仓库修改外箱(长)" min-width="160">
|
<el-table-column label="仓库修改外箱(长)" min-width="160">
|
||||||
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerLengthCm" aria-label="仓库修改外箱长" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerLengthCm) }}</template></template>
|
<template #default="{ row }"><el-input-number v-if="measurementDraftEditable" v-model="row.outerLengthCm" aria-label="仓库修改外箱长" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerLengthCm) }}</template></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="仓库修改外箱(宽)" min-width="160">
|
<el-table-column label="仓库修改外箱(宽)" min-width="160">
|
||||||
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerWidthCm" aria-label="仓库修改外箱宽" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerWidthCm) }}</template></template>
|
<template #default="{ row }"><el-input-number v-if="measurementDraftEditable" v-model="row.outerWidthCm" aria-label="仓库修改外箱宽" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerWidthCm) }}</template></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="仓库修改外箱(高)" min-width="160">
|
<el-table-column label="仓库修改外箱(高)" min-width="160">
|
||||||
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerHeightCm" aria-label="仓库修改外箱高" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerHeightCm) }}</template></template>
|
<template #default="{ row }"><el-input-number v-if="measurementDraftEditable" v-model="row.outerHeightCm" aria-label="仓库修改外箱高" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerHeightCm) }}</template></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="can('platform:firstleg:inbound:measure:edit')" label="仓库外箱操作" min-width="120">
|
<el-table-column v-if="measurementDraftEditable" label="仓库外箱操作" min-width="120">
|
||||||
<template #default="{ row }"><el-button type="primary" plain size="small" :loading="measurementOuterSavingId === String(row.id)" :disabled="Boolean(measurementOuterSavingId)" @click="saveWarehouseOuterDimensions(row as Record<string, unknown>)">保存外箱</el-button></template>
|
<template #default="{ row }"><el-button type="primary" plain size="small" :loading="measurementOuterSavingId === String(row.id)" :disabled="Boolean(measurementOuterSavingId)" @click="saveWarehouseOuterDimensions(row as Record<string, unknown>)">保存外箱</el-button></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-for="column in actualMeasuredColumns" :key="column.key" :label="column.label" :prop="column.key" min-width="120">
|
<el-table-column v-for="column in actualMeasuredColumns" :key="column.key" :label="column.label" :prop="column.key" min-width="120">
|
||||||
|
|||||||
Reference in New Issue
Block a user