Merge remote-tracking branch 'origin/0.8.X' into 0.8.X

This commit is contained in:
2026-03-16 13:20:50 +08:00
7 changed files with 152 additions and 77 deletions

View File

@@ -157,6 +157,22 @@
</div> </div>
</div> </div>
<!-- 合卷操作区 -->
<div class="card-section" v-if="mergeTypes.length > 0">
<div class="section-title">合卷操作</div>
<div class="action-cards-row">
<div v-for="item in mergeTypes" :key="item.value" class="action-card"
:class="{ 'active': form.actionType == item.value }" @click="form.actionType = parseInt(item.value)">
<div class="card-icon">
<i :class="getActionIcon(item.value)"></i>
</div>
<div class="card-content">
<div class="card-title">{{ item.label }}</div>
<div class="card-desc">{{ item.remark || '钢卷操作' }}</div>
</div>
</div>
</div>
</div>
<!-- 其他操作区 --> <!-- 其他操作区 -->
<div class="card-section" v-if="otherTypes.length > 0"> <div class="card-section" v-if="otherTypes.length > 0">
<div class="section-title">其他操作</div> <div class="section-title">其他操作</div>
@@ -270,12 +286,20 @@ export default {
return value >= 100 && value <= 199; return value >= 100 && value <= 199;
}); });
}, },
// 合卷操作列表200-299
mergeTypes() {
if (!this.dict.type.action_type) return [];
return this.dict.type.action_type.filter(item => {
const value = parseInt(item.value);
return value >= 200 && value <= 299;
});
},
// 其他操作列表200-299等 // 其他操作列表200-299等
otherTypes() { otherTypes() {
if (!this.dict.type.action_type) return []; if (!this.dict.type.action_type) return [];
return this.dict.type.action_type.filter(item => { return this.dict.type.action_type.filter(item => {
const value = parseInt(item.value); const value = parseInt(item.value);
return value < 100 || value > 199; return value < 100 || value > 299;
}); });
} }
}, },

View File

@@ -415,6 +415,7 @@ import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect
import ProductSelect from "@/components/KLPService/ProductSelect"; import ProductSelect from "@/components/KLPService/ProductSelect";
import RawMaterialSelect from "@/components/KLPService/RawMaterialSelect"; import RawMaterialSelect from "@/components/KLPService/RawMaterialSelect";
import CoilTraceResult from "../panels/CoilTraceResult.vue"; import CoilTraceResult from "../panels/CoilTraceResult.vue";
import { getCoilTagPrintType } from '@/views/wms/coil/js/coilPrint'
export default { export default {
name: 'DoPage', name: 'DoPage',
@@ -753,10 +754,8 @@ export default {
/** 预览标签 */ /** 预览标签 */
handlePreviewLabel(row) { handlePreviewLabel(row) {
this.labelRender.visible = true; this.labelRender.visible = true;
const item = row.itemType === 'product' ? row.product : row.rawMaterial; const type = getCoilTagPrintType(row);
const itemName = row.itemType === 'product' ? item?.productName || '' : item?.rawMaterialName || ''; this.labelRender.type = type;
this.labelRender.type = row.itemType === 'product' ? '3' : '2'
this.labelRender.data = { this.labelRender.data = {
...row, ...row,
itemName: itemName, itemName: itemName,

View File

@@ -107,7 +107,8 @@
<el-table-column label="完成时间" align="center" prop="completeTime" width="220" :show-overflow-tooltip="true"> <el-table-column label="完成时间" align="center" prop="completeTime" width="220" :show-overflow-tooltip="true">
<template slot-scope="scope"> <template slot-scope="scope">
<el-date-picker @change="handleProcessTimeChange(scope.row)" value-format="yyyy-MM-dd HH:mm:ss" style="width: 200px" v-model="scope.row.completeTime" type="datetime" placeholder="选择完成时间" /> <el-date-picker @change="handleProcessTimeChange(scope.row)" value-format="yyyy-MM-dd HH:mm:ss"
style="width: 200px" v-model="scope.row.completeTime" type="datetime" placeholder="选择完成时间" />
</template> </template>
</el-table-column> </el-table-column>
@@ -129,8 +130,10 @@
</template> --> </template> -->
<!-- 已完成或已取消状态显示删除按钮 --> <!-- 已完成或已取消状态显示删除按钮 -->
<template v-if="scope.row.actionStatus === 2 || scope.row.actionStatus === 3"> <template v-if="scope.row.actionStatus === 2 || scope.row.actionStatus === 3">
<el-button v-if="scope.row.delFlag == 0" size="mini" type="danger" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button> <el-button v-if="scope.row.delFlag == 0" size="mini" type="danger" icon="el-icon-delete"
<el-button v-if="scope.row.delFlag == 2" size="mini" type="success" icon="el-icon-refresh" @click="handleRestore(scope.row)">还原</el-button> @click="handleDelete(scope.row)">删除</el-button>
<el-button v-if="scope.row.delFlag == 2" size="mini" type="success" icon="el-icon-refresh"
@click="handleRestore(scope.row)">还原</el-button>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
@@ -165,6 +168,23 @@
</div> </div>
</div> </div>
<!-- 合卷操作区 -->
<div class="card-section" v-if="mergeTypes.length > 0">
<div class="section-title">合卷操作</div>
<div class="action-cards-row">
<div v-for="item in mergeTypes" :key="item.value" class="action-card"
:class="{ 'active': form.actionType == item.value }" @click="form.actionType = parseInt(item.value)">
<div class="card-icon">
<i :class="getActionIcon(item.value)"></i>
</div>
<div class="card-content">
<div class="card-title">{{ item.label }}</div>
<div class="card-desc">{{ item.remark || '钢卷操作' }}</div>
</div>
</div>
</div>
</div>
<!-- 其他操作区 --> <!-- 其他操作区 -->
<div class="card-section" v-if="otherTypes.length > 0"> <div class="card-section" v-if="otherTypes.length > 0">
<div class="section-title">其他操作</div> <div class="section-title">其他操作</div>
@@ -195,7 +215,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="buttonLoading" v-loading="buttonLoading"> </el-button> <el-button type="primary" @click="submitForm" :disabled="buttonLoading" v-loading="buttonLoading">
</el-button>
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@@ -279,12 +300,20 @@ export default {
return value >= 100 && value <= 199; return value >= 100 && value <= 199;
}); });
}, },
// 合卷操作列表200-299
mergeTypes() {
if (!this.dict.type.action_type) return [];
return this.dict.type.action_type.filter(item => {
const value = parseInt(item.value);
return value >= 200 && value <= 299;
});
},
// 其他操作列表200-299等 // 其他操作列表200-299等
otherTypes() { otherTypes() {
if (!this.dict.type.action_type) return []; if (!this.dict.type.action_type) return [];
return this.dict.type.action_type.filter(item => { return this.dict.type.action_type.filter(item => {
const value = parseInt(item.value); const value = parseInt(item.value);
return value < 100 || value > 199; return value < 100 || value > 299;
}); });
} }
}, },
@@ -472,7 +501,7 @@ export default {
} }
else if (actionType < 100) { else if (actionType < 100) {
path = '/wms/typing'; path = '/wms/typing';
} }
// 其他操作类型 // 其他操作类型
else { else {
this.$message.error('特殊操作请到专门的页面进行处理'); this.$message.error('特殊操作请到专门的页面进行处理');
@@ -754,6 +783,3 @@ export default {
} }
} }
</style> </style>

View File

@@ -0,0 +1,46 @@
const ECoilPrintType = {
'原料标签': '2',
'成品标签': '3',
'镀锌成品': '4',
'镀铬成品': 'ge',
'镀锌原料': '5',
'脱脂原料': '6'
}
/**
* 根据钢卷信息获取打印的标签类型
* @param {*} coil 钢卷信息
* @returns 打印的标签类型
*/
export const getCoilTagPrintType = (coil) => {
const item = coil.itemType === 'product' ? coil.product : coil.rawMaterial;
const itemName = coil.itemType === 'product' ? item?.productName || '' : item?.rawMaterialName || '';
const itemType = coil.itemType || '';
const warehouseId = coil.warehouseId || '';
let type = '2'
// 在镀锌颜料库的卷使用镀锌原料标签
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
type = ECoilPrintType['镀锌原料'];
}
// 脱脂原料库
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
type = ECoilPrintType['脱脂原料'];
}
else if (itemType == 'raw_material') {
type = ECoilPrintType['原料标签'];
} else if (itemType == 'product' && itemName == '冷硬卷') {
type = ECoilPrintType['成品标签'];
} else if (itemType == 'product' && itemName == '热轧卷板') {
type = ECoilPrintType['成品标签'];
} else if (itemType == 'product' && itemName == '镀锌卷') {
type = ECoilPrintType['镀锌成品'];
} else if (itemType == 'product' && itemName == '冷轧卷') {
type = ECoilPrintType['成品标签'];
} else if (itemType == 'product' && itemName == '镀铬卷') {
type = ECoilPrintType['镀铬成品'];
} else {
type = ECoilPrintType['成品标签'];
}
return type
}

View File

@@ -102,11 +102,11 @@
<div class="target-coil-body"> <div class="target-coil-body">
<el-form size="small" label-width="80px" :model="targetCoil" :rules="rules"> <el-form size="small" label-width="80px" :model="targetCoil" :rules="rules">
<div class="form-row"> <div class="form-row">
<el-form-item label="卷号" class="form-item-half"> <el-form-item label="卷号" class="form-item-half" prop="currentCoilNo">
<el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input> <el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input>
<current-coil-no :current-coil-no="targetCoil.currentCoilNo" /> <current-coil-no :current-coil-no="targetCoil.currentCoilNo" />
</el-form-item> </el-form-item>
<el-form-item label="班组" class="form-item-half"> <el-form-item label="班组" class="form-item-half" prop="team">
<el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly"> <el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly">
<el-option key="甲" label="甲" value="甲" /> <el-option key="甲" label="甲" value="甲" />
<el-option key="乙" label="乙" value="乙" /> <el-option key="乙" label="乙" value="乙" />
@@ -115,14 +115,14 @@
</div> </div>
<div class="form-row"> <div class="form-row">
<el-form-item label="材料类型" class="form-item-half"> <el-form-item label="材料类型" class="form-item-half" prop="materialType">
<el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%" <el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%"
:disabled="readonly" @change="handleMaterialTypeChange"> :disabled="readonly" @change="handleMaterialTypeChange">
<el-option label="原料" value="原料" /> <el-option label="原料" value="原料" />
<el-option label="成品" value="成品" /> <el-option label="成品" value="成品" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="getItemLabel" class="form-item-half"> <el-form-item :label="getItemLabel" class="form-item-half" prop="itemId">
<raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId" <raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId"
placeholder="请选择原料" style="width: 100%" clearable placeholder="请选择原料" style="width: 100%" clearable
:disabled="readonly || !targetCoil.materialType" /> :disabled="readonly || !targetCoil.materialType" />
@@ -166,13 +166,13 @@
</div> </div>
<div class="form-row"> <div class="form-row">
<el-form-item label="毛重(t)" class="form-item-half"> <el-form-item label="毛重(t)" prop="grossWeight" class="form-item-half">
<el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重" <el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重"
type="number" :step="0.01" :disabled="readonly"> type="number" :step="0.01" :disabled="readonly">
<template slot="append"></template> <template slot="append"></template>
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="净重(t)" class="form-item-half"> <el-form-item label="净重(t)" prop="netWeight" class="form-item-half">
<el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重" <el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重"
type="number" :step="0.01" :disabled="readonly"> type="number" :step="0.01" :disabled="readonly">
<template slot="append"></template> <template slot="append"></template>
@@ -181,7 +181,7 @@
</div> </div>
<div class="form-row"> <div class="form-row">
<el-form-item label="长度(m)" class="form-item-half"> <el-form-item label="长度(m)" prop="length" class="form-item-half">
<el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number" <el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number"
:step="0.01" :disabled="readonly"> :step="0.01" :disabled="readonly">
<template slot="append"></template> <template slot="append"></template>
@@ -211,7 +211,7 @@
<el-form-item label="镀层种类" prop="coatingType" class="form-item-half"> <el-form-item label="镀层种类" prop="coatingType" class="form-item-half">
<MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" /> <MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" />
</el-form-item> </el-form-item>
<el-form-item label="逻辑库区" class="form-item-half"> <el-form-item label="逻辑库区" prop="warehouseId" class="form-item-half">
<WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" /> <WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
</el-form-item> </el-form-item>
</div> </div>
@@ -272,7 +272,35 @@ export default {
actualWidth: undefined, actualWidth: undefined,
}, },
rules: { rules: {
currentCoilNo: [
{ required: true, message: "当前钢卷号不能为空", trigger: "blur" },
{
// 当前钢卷号必须大于等于10位
validator: (rule, value, callback) => {
if (value.length < 10) {
callback(new Error('当前钢卷号必须大于等于10位'));
} else {
callback();
}
}, trigger: 'blur'
},
],
team: [
{ required: true, message: "班组不能为空", trigger: "change" }
],
materialType: [
{ required: true, message: "材料类型不能为空", trigger: "change" }
],
itemId: [
{ required: true, message: "物品ID不能为空", trigger: "blur" }
],
itemType: [
{ required: true, message: "物品类型不能为空", trigger: "change" }
],
// 净重和毛重
netWeight: [
{ required: true, message: "净重不能为空", trigger: "blur" }
],
}, },
buttonLoading: false, buttonLoading: false,
loading: false, loading: false,

View File

@@ -446,6 +446,7 @@ import { PDFDocument } from 'pdf-lib';
import { listUser } from "@/api/system/user"; import { listUser } from "@/api/system/user";
import AbnormalList from "./abnormal.vue"; import AbnormalList from "./abnormal.vue";
import LogTable from "@/views/wms/warehouse/components/LogTable.vue"; import LogTable from "@/views/wms/warehouse/components/LogTable.vue";
import { getCoilTagPrintType } from '@/views/wms/coil/js/coilPrint'
export default { export default {
name: "MaterialCoil", name: "MaterialCoil",
@@ -811,33 +812,8 @@ export default {
}, },
// 打印标签 // 打印标签
handlePrintLabel(row) { handlePrintLabel(row) {
const item = row.itemType === 'product' ? row.product : row.rawMaterial; const type = getCoilTagPrintType(row);
const itemName = row.itemType === 'product' ? item?.productName || '' : item?.rawMaterialName || ''; this.labelRender.type = type;
const itemType = row.itemType || '';
const warehouseId = row.warehouseId || '';
// 在镀锌颜料库的卷使用镀锌原料标签
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
this.labelRender.type = '5';
}
// 脱脂原料库
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
this.labelRender.type = '6';
}
else if (itemType == 'raw_material') {
this.labelRender.type = '2';
} else if (itemType == 'product' && itemName == '冷硬卷') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '热轧卷板') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '镀锌卷') {
this.labelRender.type = '4';
} else if (itemType == 'product' && itemName == '冷轧卷') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '镀铬卷') {
this.labelRender.type = 'ge';
} else {
this.labelRender.type = '3';
}
this.labelRender.data = { this.labelRender.data = {
...row, ...row,
itemName: itemName, itemName: itemName,

View File

@@ -494,6 +494,7 @@ import RawMaterialInfo from '@/components/KLPService/Renderer/RawMaterialInfo'
import { addCoilAbnormal } from '@/api/wms/coilAbnormal' import { addCoilAbnormal } from '@/api/wms/coilAbnormal'
import LabelRender from './LabelRender/index.vue' import LabelRender from './LabelRender/index.vue'
import StepSplit from './stepSplit.vue' import StepSplit from './stepSplit.vue'
import { getCoilTagPrintType } from '@/views/wms/coil/js/coilPrint'
export default { export default {
name: 'DoPage', name: 'DoPage',
@@ -715,33 +716,8 @@ export default {
parseTime, parseTime,
// 打印标签 // 打印标签
handlePrintLabel(row) { handlePrintLabel(row) {
const item = row.itemType === 'product' ? row.product : row.rawMaterial; const type = getCoilTagPrintType(row);
const itemName = row.itemType === 'product' ? item?.productName || '' : item?.rawMaterialName || ''; this.labelRender.type = type;
const itemType = row.itemType || '';
const warehouseId = row.warehouseId || '';
// 在镀锌颜料库的卷使用镀锌原料标签
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
this.labelRender.type = '5';
}
// 脱脂原料库
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
this.labelRender.type = '6';
}
else if (itemType == 'raw_material') {
this.labelRender.type = '2';
} else if (itemType == 'product' && itemName == '冷硬卷') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '热轧卷板') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '镀锌卷') {
this.labelRender.type = '4';
} else if (itemType == 'product' && itemName == '冷轧卷') {
this.labelRender.type = '3';
} else if (itemType == 'product' && itemName == '镀铬卷') {
this.labelRender.type = 'ge';
} else {
this.labelRender.type = '3';
}
this.labelRender.data = { this.labelRender.data = {
...row, ...row,
itemName: itemName, itemName: itemName,