feat(wms/receive/plan): 添加入库计划差异对比配置与重量差异校验
1. 新增差异对比阈值配置面板,支持设置重量差异阈值 2. 调整材质字段映射关系,修复字段匹配错误 3. 新增数值字段差异校验逻辑,支持基于阈值对比重量差异 4. 增加重新计算差异的按钮和配置说明文案
This commit is contained in:
@@ -164,6 +164,17 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="差异对比" name="diff">
|
<el-tab-pane label="差异对比" name="diff">
|
||||||
|
<div class="diff-config">
|
||||||
|
<el-form :model="diffConfig" inline>
|
||||||
|
<el-form-item label="重量差异阈值(kg)">
|
||||||
|
<el-input-number v-model="diffConfig.weightThreshold" :precision="2" :step="0.1" :min="0" style="width: 120px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" size="mini" @click="calculateDiff">重新计算差异</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<span class="config-tip">重量差异在此阈值内视为相同,超出则标记为不一致</span>
|
||||||
|
</div>
|
||||||
<el-row :gutter="16" class="diff-row">
|
<el-row :gutter="16" class="diff-row">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<div class="diff-section">
|
<div class="diff-section">
|
||||||
@@ -461,6 +472,9 @@ export default {
|
|||||||
missingCoils: [],
|
missingCoils: [],
|
||||||
extraCoils: [],
|
extraCoils: [],
|
||||||
diffCoils: [],
|
diffCoils: [],
|
||||||
|
diffConfig: {
|
||||||
|
weightThreshold: 0.5
|
||||||
|
},
|
||||||
|
|
||||||
importOpen: false,
|
importOpen: false,
|
||||||
file: null,
|
file: null,
|
||||||
@@ -666,8 +680,8 @@ export default {
|
|||||||
const compareFields = [
|
const compareFields = [
|
||||||
{ planField: 'goodsName', actualField: 'itemName', fieldName: '名称' },
|
{ planField: 'goodsName', actualField: 'itemName', fieldName: '名称' },
|
||||||
{ planField: 'spec', actualField: 'specification', fieldName: '规格' },
|
{ planField: 'spec', actualField: 'specification', fieldName: '规格' },
|
||||||
{ planField: 'materialType', actualField: 'materialType', fieldName: '材质' },
|
{ planField: 'materialType', actualField: 'material', fieldName: '材质' },
|
||||||
{ planField: 'weight', actualField: 'netWeight', fieldName: '重量' },
|
{ planField: 'weight', actualField: 'netWeight', fieldName: '重量', isNumber: true },
|
||||||
{ planField: 'manufacturer', actualField: 'manufacturer', fieldName: '生产厂家' },
|
{ planField: 'manufacturer', actualField: 'manufacturer', fieldName: '生产厂家' },
|
||||||
{ planField: 'zincCoating', actualField: 'zincLayer', fieldName: '锌层' }
|
{ planField: 'zincCoating', actualField: 'zincLayer', fieldName: '锌层' }
|
||||||
];
|
];
|
||||||
@@ -678,9 +692,19 @@ export default {
|
|||||||
if (actualItem) {
|
if (actualItem) {
|
||||||
const diffs = [];
|
const diffs = [];
|
||||||
compareFields.forEach(field => {
|
compareFields.forEach(field => {
|
||||||
const planValue = String(planItem[field.planField] || '');
|
let planValue = String(planItem[field.planField] || '');
|
||||||
const actualValue = String(actualItem[field.actualField] || '');
|
let actualValue = String(actualItem[field.actualField] || '');
|
||||||
if (planValue !== actualValue) {
|
if (field.isNumber) {
|
||||||
|
planValue = Number(planValue);
|
||||||
|
actualValue = Number(actualValue);
|
||||||
|
}
|
||||||
|
let isDiff = false;
|
||||||
|
if (field.isNumber) {
|
||||||
|
isDiff = Math.abs(planValue - actualValue) > this.diffConfig.weightThreshold;
|
||||||
|
} else {
|
||||||
|
isDiff = planValue !== actualValue;
|
||||||
|
}
|
||||||
|
if (isDiff) {
|
||||||
diffs.push({
|
diffs.push({
|
||||||
fieldName: field.fieldName,
|
fieldName: field.fieldName,
|
||||||
planValue,
|
planValue,
|
||||||
@@ -1123,6 +1147,22 @@ export default {
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.diff-config {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
border: 1px solid #e4e7ed;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-tip {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
|
||||||
.diff-section {
|
.diff-section {
|
||||||
background: #fafafa;
|
background: #fafafa;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|||||||
Reference in New Issue
Block a user