feat(合卷操作): 扩展合卷操作类型范围支持200-299
fix(文件上传): 添加docx到默认支持文件类型列表 refactor(员工信息): 统一部门字段命名并修复备注字段 feat(酸轧合卷): 实现酸轧合卷页面功能 feat(员工入职): 新增员工入职页面及功能 style(合卷页面): 优化合卷页面布局和样式
This commit is contained in:
@@ -70,7 +70,7 @@
|
||||
<!-- 第二个位置:显示待合卷列表 -->
|
||||
<template v-else-if="!readonly">
|
||||
<div class="pending-list-title">待合卷钢卷列表</div>
|
||||
<div class="pending-coil-list" v-if="renderPendingMergeList.length > 0">
|
||||
<div class="pending-coil-list">
|
||||
<div class="pending-coil-item" v-for="pending in renderPendingMergeList" :key="pending.actionId"
|
||||
@click="selectPendingCoil(pending, index)">
|
||||
<div class="pending-coil-no">{{ pending.currentCoilNo }}</div>
|
||||
@@ -79,10 +79,11 @@
|
||||
<span class="pending-value">{{ formatTime(pending.updateTime) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="empty-tip">
|
||||
<i class="el-icon-info"></i>
|
||||
暂无其他待合卷钢卷
|
||||
<coil-selector @select="selectCoil($event, index)">
|
||||
<div class="pending-coil-item">
|
||||
选择其他钢卷
|
||||
</div>
|
||||
</coil-selector>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -116,116 +117,124 @@
|
||||
<span>新钢卷</span>
|
||||
</div>
|
||||
<div class="target-coil-body">
|
||||
<el-form size="small" label-width="90px">
|
||||
<el-form-item label="卷号">
|
||||
<el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input>
|
||||
<current-coil-no :current-coil-no="targetCoil.currentCoilNo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班组">
|
||||
<el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly">
|
||||
<el-option key="甲" label="甲" value="甲" />
|
||||
<el-option key="乙" label="乙" value="乙" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="材料类型">
|
||||
<el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%"
|
||||
:disabled="readonly" @change="handleMaterialTypeChange">
|
||||
<el-option label="原料" value="原料" />
|
||||
<el-option label="成品" value="成品" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="getItemLabel">
|
||||
<raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择原料" style="width: 100%" clearable :disabled="readonly || !targetCoil.materialType" />
|
||||
<product-selector v-else-if="targetCoil.materialType === '成品'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择成品" style="width: 100%" clearable :disabled="readonly || !targetCoil.materialType" />
|
||||
<div v-else>请先选择物料类型</div>
|
||||
</el-form-item>
|
||||
<el-form size="small" label-width="80px">
|
||||
<div class="form-row">
|
||||
<el-form-item label="卷号" class="form-item-half">
|
||||
<el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input>
|
||||
<current-coil-no :current-coil-no="targetCoil.currentCoilNo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班组" class="form-item-half">
|
||||
<el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly">
|
||||
<el-option key="甲" label="甲" value="甲" />
|
||||
<el-option key="乙" label="乙" value="乙" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="质量状态" prop="qualityStatus">
|
||||
<el-select v-model="targetCoil.qualityStatus" placeholder="请选择质量状态" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="材料类型" class="form-item-half">
|
||||
<el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%"
|
||||
:disabled="readonly" @change="handleMaterialTypeChange">
|
||||
<el-option label="原料" value="原料" />
|
||||
<el-option label="成品" value="成品" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="getItemLabel" class="form-item-half">
|
||||
<raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择原料" style="width: 100%" clearable
|
||||
:disabled="readonly || !targetCoil.materialType" />
|
||||
<product-selector v-else-if="targetCoil.materialType === '成品'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择成品" style="width: 100%" clearable
|
||||
:disabled="readonly || !targetCoil.materialType" />
|
||||
<div v-else>请先选择物料类型</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="切边要求" prop="trimmingRequirement">
|
||||
<el-select v-model="targetCoil.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="净边料" value="净边料" />
|
||||
<el-option label="毛边料" value="毛边料" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="质量状态" prop="qualityStatus" class="form-item-half">
|
||||
<el-select v-model="targetCoil.qualityStatus" placeholder="请选择质量状态" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="切边要求" prop="trimmingRequirement" class="form-item-half">
|
||||
<el-select v-model="targetCoil.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="净边料" value="净边料" />
|
||||
<el-option label="毛边料" value="毛边料" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="打包状态" prop="packingStatus">
|
||||
<el-input v-model="targetCoil.packingStatus" placeholder="请输入打包状态" :disabled="readonly">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="打包状态" prop="packingStatus" class="form-item-half">
|
||||
<el-input v-model="targetCoil.packingStatus" placeholder="请输入打包状态" :disabled="readonly">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="包装要求" prop="packagingRequirement" class="form-item-half">
|
||||
<el-select v-model="targetCoil.packagingRequirement" placeholder="请选择包装要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="裸包" value="裸包" />
|
||||
<el-option label="普包" value="普包" />
|
||||
<el-option label="简包" value="简包" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="包装要求" prop="packagingRequirement">
|
||||
<el-select v-model="targetCoil.packagingRequirement" placeholder="请选择包装要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="裸包" value="裸包" />
|
||||
<el-option label="普包" value="普包" />
|
||||
<el-option label="简包" value="简包" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="毛重(t)">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="净重(t)">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="长度(m)">
|
||||
<el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测长度(m)" prop="actualLength">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualLength" placeholder="请输入实测长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测宽度(m)" prop="actualWidth">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualWidth" placeholder="请输入实测宽度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="调制度" prop="temperGrade">
|
||||
<el-input v-model="targetCoil.temperGrade" placeholder="请输入调制度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="镀层种类" prop="coatingType">
|
||||
<MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区">
|
||||
<WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="毛重(t)" class="form-item-half">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="净重(t)" class="form-item-half">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="长度(m)" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测长度(m)" prop="actualLength" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualLength" placeholder="请输入实测长度"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="实测宽度(m)" prop="actualWidth" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualWidth" placeholder="请输入实测宽度"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="调制度" prop="temperGrade" class="form-item-half">
|
||||
<el-input v-model="targetCoil.temperGrade" placeholder="请输入调制度" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="镀层种类" prop="coatingType" class="form-item-half">
|
||||
<MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区" class="form-item-half">
|
||||
<WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 合卷规则说明 -->
|
||||
<!-- <div class="rule-card">
|
||||
<div class="rule-title">
|
||||
<i class="el-icon-warning-outline"></i>
|
||||
合卷规则
|
||||
</div>
|
||||
<ul class="rule-list">
|
||||
<li>至少需要2个源卷</li>
|
||||
<li>所有源卷的物品类型和物品ID应保持一致</li>
|
||||
<li>请确保录入正确的新钢卷号和班组信息</li>
|
||||
</ul>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -233,7 +242,7 @@
|
||||
|
||||
<script>
|
||||
import { getMaterialCoil, mergeMaterialCoil } from '@/api/wms/coil';
|
||||
import { listPendingAction, completeAction } from '@/api/wms/pendingAction';
|
||||
import { listPendingAction, completeAction, addPendingAction } from '@/api/wms/pendingAction';
|
||||
import CoilSelector from '@/components/CoilSelector';
|
||||
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
||||
import RawMaterialSelector from "@/components/KLPService/RawMaterialSelect";
|
||||
@@ -255,6 +264,7 @@ export default {
|
||||
const currentCoilNoPrefix = generateCoilNoPrefix()
|
||||
return {
|
||||
currentCoilNoPrefix,
|
||||
actionTypeCode: '',
|
||||
// 源卷列表
|
||||
sourceCoils: [],
|
||||
// 目标卷信息
|
||||
@@ -325,12 +335,18 @@ export default {
|
||||
const coilId = this.$route.query.coilId;
|
||||
const actionId = this.$route.query.actionId;
|
||||
const readonly = this.$route.query.readonly;
|
||||
const actionTypeCode = this.$route.query.actionTypeCode;
|
||||
|
||||
// 保存当前页面的待操作ID
|
||||
if (actionId) {
|
||||
this.actionId = actionId;
|
||||
}
|
||||
|
||||
// 保存当前页面的待操作类型
|
||||
if (actionTypeCode) {
|
||||
this.actionTypeCode = actionTypeCode;
|
||||
}
|
||||
|
||||
// 设置只读模式
|
||||
if (readonly === 'true' || readonly === true) {
|
||||
this.readonly = true;
|
||||
@@ -338,7 +354,7 @@ export default {
|
||||
|
||||
// 如果有coilId,加载该钢卷作为第一个源卷
|
||||
if (coilId) {
|
||||
await this.loadFirstCoil(coilId);
|
||||
await this.loadFirstCoil(coilId, actionId);
|
||||
// 加载其他待合卷的钢卷列表
|
||||
await this.loadPendingMergeList();
|
||||
} else {
|
||||
@@ -394,57 +410,53 @@ export default {
|
||||
this.$set(this.targetCoil, 'itemId', undefined);
|
||||
},
|
||||
// 加载第一个钢卷(从待操作进入时)
|
||||
async loadFirstCoil(coilId) {
|
||||
async loadFirstCoil(coilId, actionId) {
|
||||
try {
|
||||
this.loading = true;
|
||||
const response = await getMaterialCoil(coilId);
|
||||
if (response.code === 200 && response.data) {
|
||||
const data = response.data;
|
||||
const data = response.data;
|
||||
|
||||
// 初始化源卷列表,第一个是当前钢卷
|
||||
this.sourceCoils = [
|
||||
{
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
bomItems: data.bomItemList || [],
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
},
|
||||
{
|
||||
coilId: null,
|
||||
enterCoilNo: '',
|
||||
currentCoilNo: '',
|
||||
itemType: null,
|
||||
itemId: null,
|
||||
warehouseName: '',
|
||||
actualWarehouseName: '',
|
||||
materialName: '',
|
||||
productName: '',
|
||||
specification: '',
|
||||
bomItems: [],
|
||||
grossWeight: null,
|
||||
netWeight: null,
|
||||
length: null,
|
||||
}
|
||||
];
|
||||
// 初始化源卷列表,第一个是当前钢卷
|
||||
this.sourceCoils = [
|
||||
{
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
bomItems: data.bomItemList || [],
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
actionId: actionId // 保存待操作ID,用于后续完成操作
|
||||
},
|
||||
{
|
||||
coilId: null,
|
||||
enterCoilNo: '',
|
||||
currentCoilNo: '',
|
||||
itemType: null,
|
||||
itemId: null,
|
||||
warehouseName: '',
|
||||
actualWarehouseName: '',
|
||||
materialName: '',
|
||||
productName: '',
|
||||
specification: '',
|
||||
bomItems: [],
|
||||
grossWeight: null,
|
||||
netWeight: null,
|
||||
length: null,
|
||||
}
|
||||
];
|
||||
|
||||
// 自动填充目标卷信息
|
||||
this.targetCoil.itemType = data.itemType;
|
||||
this.targetCoil.itemId = data.itemId;
|
||||
this.targetCoil.warehouseId = data.warehouseId;
|
||||
// this.targetCoil.actualWarehouseId = data.actualWarehouseId;
|
||||
|
||||
// 不再预加载物品列表,改为实时搜索
|
||||
}
|
||||
// 自动填充目标卷信息
|
||||
this.targetCoil.itemType = data.itemType;
|
||||
this.targetCoil.itemId = data.itemId;
|
||||
this.targetCoil.warehouseId = data.warehouseId;
|
||||
} catch (error) {
|
||||
this.$message.error('加载钢卷信息失败');
|
||||
console.error(error);
|
||||
@@ -460,7 +472,7 @@ export default {
|
||||
|
||||
// 分别查询待处理和处理中的记录
|
||||
const responses = await listPendingAction({
|
||||
actionType: 200, // 合卷操作
|
||||
actionType: this.actionTypeCode, // 合卷操作
|
||||
actionStatus: '-1', // -1表示只查询不为2的记录
|
||||
pageNum: 1,
|
||||
pageSize: 1000
|
||||
@@ -482,28 +494,27 @@ export default {
|
||||
try {
|
||||
this.loading = true;
|
||||
const response = await getMaterialCoil(pending.coilId);
|
||||
if (response.code === 200 && response.data) {
|
||||
const data = response.data;
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
|
||||
this.$message.success('已添加到合卷列表');
|
||||
}
|
||||
const data = response.data;
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
|
||||
this.$message.success('已添加到合卷列表');
|
||||
} catch (error) {
|
||||
this.$message.error('加载钢卷信息失败');
|
||||
console.error(error);
|
||||
@@ -640,21 +651,16 @@ export default {
|
||||
text: '正在合卷,请稍后...',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.completeAllRelatedActions();
|
||||
await mergeMaterialCoil(mergeData);
|
||||
|
||||
const response = await mergeMaterialCoil(mergeData);
|
||||
if (response.code === 200) {
|
||||
this.$message.success('合卷保存成功');
|
||||
this.$message.success('合卷保存成功');
|
||||
|
||||
// 完成所有相关的待操作记录
|
||||
await this.completeAllRelatedActions();
|
||||
|
||||
// 延迟返回,让用户看到成功提示
|
||||
setTimeout(() => {
|
||||
this.$router.back();
|
||||
}, 100);
|
||||
} else {
|
||||
this.$message.error(response.msg || '合卷保存失败');
|
||||
}
|
||||
// 延迟返回,让用户看到成功提示
|
||||
setTimeout(() => {
|
||||
this.$router.back();
|
||||
}, 100);
|
||||
} catch (error) {
|
||||
this.$message.error('合卷保存失败');
|
||||
console.error(error);
|
||||
@@ -666,27 +672,66 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
async selectCoil(coil, index) {
|
||||
console.log(coil, index);
|
||||
const data = coil;
|
||||
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
nc: true,
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
},
|
||||
|
||||
// 完成所有相关的待操作记录
|
||||
async completeAllRelatedActions() {
|
||||
try {
|
||||
// 收集所有待操作ID
|
||||
const actionIds = [];
|
||||
const ncs = [];
|
||||
|
||||
// 当前页面的actionId(从路由参数获取)
|
||||
if (this.actionId) {
|
||||
actionIds.push(this.actionId);
|
||||
}
|
||||
// if (this.actionId) {
|
||||
// actionIds.push(this.actionId);
|
||||
// }
|
||||
|
||||
// 从待合卷列表中选择的钢卷的actionId
|
||||
this.sourceCoils.forEach(item => {
|
||||
if (item.actionId) {
|
||||
actionIds.push(item.actionId);
|
||||
}
|
||||
// 或许所有需要直接完成的
|
||||
if (item.nc) {
|
||||
ncs.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
// 批量完成所有待操作
|
||||
const promises = actionIds.map(id => completeAction(id));
|
||||
await Promise.all(promises);
|
||||
const promises1 = actionIds.map(id => completeAction(id));
|
||||
const promises2 = ncs.map(item => {
|
||||
addPendingAction({
|
||||
actionType: this.actionTypeCode, // 合卷操作
|
||||
actionStatus: '2', // 2表示已完成
|
||||
coilId: item.coilId,
|
||||
currentCoilNo: item.currentCoilNo || '',
|
||||
priority: 0,
|
||||
sourceType: 'manual',
|
||||
})
|
||||
});
|
||||
await Promise.all(promises1.concat(promises2));
|
||||
} catch (error) {
|
||||
console.error('完成待操作失败:', error);
|
||||
// 不影响主流程,只记录错误
|
||||
@@ -743,9 +788,9 @@ export default {
|
||||
/* 流程图容器 */
|
||||
.flow-container {
|
||||
display: flex;
|
||||
gap: 40px;
|
||||
gap: 20px;
|
||||
background: #fff;
|
||||
padding: 30px;
|
||||
padding: 20px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
min-height: 600px;
|
||||
@@ -753,11 +798,11 @@ export default {
|
||||
|
||||
.flow-left {
|
||||
flex: 1;
|
||||
max-width: 350px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.flow-middle {
|
||||
flex: 0 0 120px;
|
||||
flex: 0 0 80px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
@@ -767,7 +812,7 @@ export default {
|
||||
|
||||
.flow-right {
|
||||
flex: 1;
|
||||
max-width: 400px;
|
||||
min-width: 350px;
|
||||
}
|
||||
|
||||
.flow-section-title {
|
||||
@@ -803,8 +848,9 @@ export default {
|
||||
background: #fff;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 12px;
|
||||
margin-bottom: 10px;
|
||||
transition: all 0.3s;
|
||||
overflow: hidden;
|
||||
|
||||
&:hover {
|
||||
border-color: #0066cc;
|
||||
@@ -813,23 +859,23 @@ export default {
|
||||
}
|
||||
|
||||
.source-coil-header {
|
||||
padding: 12px 16px;
|
||||
padding: 10px 14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
gap: 10px;
|
||||
border-bottom: 1px solid #f5f7fa;
|
||||
}
|
||||
|
||||
.source-number {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
background: #0066cc;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@@ -843,16 +889,13 @@ export default {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.source-weight {
|
||||
font-size: 13px;
|
||||
color: #909399;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.source-coil-body {
|
||||
padding: 12px 16px;
|
||||
padding: 10px 14px;
|
||||
|
||||
&:empty {
|
||||
text-align: center;
|
||||
@@ -861,13 +904,13 @@ export default {
|
||||
.empty-tip {
|
||||
text-align: center;
|
||||
color: #909399;
|
||||
font-size: 13px;
|
||||
padding: 10px 0;
|
||||
font-size: 12px;
|
||||
padding: 8px 0;
|
||||
|
||||
i {
|
||||
display: block;
|
||||
font-size: 24px;
|
||||
margin-bottom: 5px;
|
||||
font-size: 20px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -930,8 +973,8 @@ export default {
|
||||
.source-detail-row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 8px;
|
||||
font-size: 13px;
|
||||
margin-bottom: 6px;
|
||||
font-size: 12px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
@@ -939,7 +982,7 @@ export default {
|
||||
|
||||
.detail-label {
|
||||
color: #909399;
|
||||
min-width: 90px;
|
||||
min-width: 80px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -951,27 +994,27 @@ export default {
|
||||
}
|
||||
|
||||
.source-detail-divider {
|
||||
margin: 10px 0 8px;
|
||||
padding: 5px 0;
|
||||
font-size: 12px;
|
||||
margin: 8px 0 6px;
|
||||
padding: 4px 0;
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
color: #606266;
|
||||
border-bottom: 1px solid #e4e7ed;
|
||||
}
|
||||
|
||||
.source-bom-params {
|
||||
margin-top: 8px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.source-bom-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 6px;
|
||||
font-size: 12px;
|
||||
margin-bottom: 4px;
|
||||
font-size: 11px;
|
||||
|
||||
.bom-key {
|
||||
color: #909399;
|
||||
min-width: 60px;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
.bom-value {
|
||||
@@ -1037,6 +1080,34 @@ export default {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* 双列表单布局 */
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
margin-bottom: 12px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-item-half {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* 响应式布局 */
|
||||
@media screen and (max-width: 768px) {
|
||||
.form-row {
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.form-item-half {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* 规则说明卡片 */
|
||||
.rule-card {
|
||||
background: #fff9f0;
|
||||
|
||||
Reference in New Issue
Block a user