feat(wms/crm): 升级钢卷查询筛选条件,新增多维度搜索能力

1. 调整筛选表单布局,拆分钢卷号为入场卷号和当前卷号
2. 新增逻辑库区、物料类型筛选,替换旧的材料类型选择
3. 将单选型质量状态改为多选,并新增品名、材质、规格、厂家筛选条件
4. 注册新增的组件并添加对应字典依赖
5. 重构接口传参方式,优化筛选参数提交逻辑
6. 修复发货状态选项,移除冗余的在途选项
This commit is contained in:
砂糖
2026-07-10 09:45:47 +08:00
parent bf1ac5ed2e
commit 94876b1c86
3 changed files with 172 additions and 78 deletions

View File

@@ -60,29 +60,44 @@
<!-- 生产成果 -->
<div v-show="activeTab === 'product'" v-loading="productCoilLoading">
<el-form :inline="true" size="small" class="coil-filter-bar">
<el-form-item label="卷号">
<el-input v-model="productCoilBo.currentCoilNo" placeholder="当前钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
<el-form-item label="入场卷号">
<el-input v-model="productCoilBo.enterCoilNo" placeholder="请输入入场钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="材料类型">
<el-select v-model="productCoilBo.materialType" placeholder="全部" clearable style="width: 100px;">
<el-option label="成品" value="成品" />
<el-option label="原料" value="原料" />
</el-select>
<el-form-item label="当前卷号">
<el-input v-model="productCoilBo.currentCoilNo" placeholder="请输入当前钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="质量状态">
<el-select v-model="productCoilBo.qualityStatus" placeholder="全部" clearable style="width: 100px;">
<el-option label="正常" value="0" />
<el-option label="待检" value="1" />
<el-option label="不合格" value="2" />
<el-form-item label="逻辑库区">
<warehouse-select v-model="productCoilBo.warehouseId" placeholder="请选择逻辑库位" style="width: 160px;" clearable />
</el-form-item>
<el-form-item label="物料类型">
<el-select v-model="productCoilBo.itemType" placeholder="全部" clearable style="width: 100px;" @change="handleProductFilter">
<el-option label="成品" value="product" />
<el-option label="原料" value="raw_material" />
</el-select>
</el-form-item>
<el-form-item label="发货状态">
<el-select v-model="productCoilBo.status" placeholder="全部" clearable style="width: 100px;">
<el-option label="在库" :value="0" />
<el-option label="在途" :value="1" />
<el-option label="已发货" :value="2" />
<el-option label="已发货" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="质量状态">
<muti-select v-model="productCoilBo.qualityStatusCsv" :options="dict.type.coil_quality_status" placeholder="请选择品质" clearable style="width: 160px;" />
</el-form-item>
<template v-if="productCoilBo.itemType">
<el-form-item label="品名">
<muti-select v-model="productCoilBo.itemName" :options="dict.type.coil_itemname" placeholder="请选择物料" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="材质">
<muti-select v-model="productCoilBo.itemMaterial" :options="dict.type.coil_material" placeholder="请选择材质" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="规格">
<memo-input v-model="productCoilBo.itemSpecification" storageKey="coilSpec" placeholder="请选择规格" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="厂家">
<muti-select v-model="productCoilBo.itemManufacturer" :options="dict.type.coil_manufacturer" placeholder="请选择厂家" clearable style="width: 160px;" />
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" size="mini" @click="handleProductFilter">查询</el-button>
<el-button size="mini" @click="resetProductFilter">重置</el-button>
@@ -104,29 +119,44 @@
<!-- 发货配卷 -->
<div v-show="activeTab === 'coil'" v-loading="deliveryCoilLoading">
<el-form :inline="true" size="small" class="coil-filter-bar">
<el-form-item label="卷号">
<el-input v-model="deliveryCoilBo.currentCoilNo" placeholder="当前钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
<el-form-item label="入场卷号">
<el-input v-model="deliveryCoilBo.enterCoilNo" placeholder="请输入入场钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="材料类型">
<el-select v-model="deliveryCoilBo.materialType" placeholder="全部" clearable style="width: 100px;">
<el-option label="成品" value="成品" />
<el-option label="原料" value="原料" />
</el-select>
<el-form-item label="当前卷号">
<el-input v-model="deliveryCoilBo.currentCoilNo" placeholder="请输入当前钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="质量状态">
<el-select v-model="deliveryCoilBo.qualityStatus" placeholder="全部" clearable style="width: 100px;">
<el-option label="正常" value="0" />
<el-option label="待检" value="1" />
<el-option label="不合格" value="2" />
<el-form-item label="逻辑库区">
<warehouse-select v-model="deliveryCoilBo.warehouseId" placeholder="请选择逻辑库位" style="width: 160px;" clearable />
</el-form-item>
<el-form-item label="物料类型">
<el-select v-model="deliveryCoilBo.itemType" placeholder="全部" clearable style="width: 100px;" @change="handleDeliveryFilter">
<el-option label="成品" value="product" />
<el-option label="原料" value="raw_material" />
</el-select>
</el-form-item>
<el-form-item label="发货状态">
<el-select v-model="deliveryCoilBo.status" placeholder="全部" clearable style="width: 100px;">
<el-option label="在库" :value="0" />
<el-option label="在途" :value="1" />
<el-option label="已发货" :value="2" />
<el-option label="已发货" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="质量状态">
<muti-select v-model="deliveryCoilBo.qualityStatusCsv" :options="dict.type.coil_quality_status" placeholder="请选择品质" clearable style="width: 160px;" />
</el-form-item>
<template v-if="deliveryCoilBo.itemType">
<el-form-item label="品名">
<muti-select v-model="deliveryCoilBo.itemName" :options="dict.type.coil_itemname" placeholder="请选择物料" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="材质">
<muti-select v-model="deliveryCoilBo.itemMaterial" :options="dict.type.coil_material" placeholder="请选择材质" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="规格">
<memo-input v-model="deliveryCoilBo.itemSpecification" storageKey="coilSpec" placeholder="请选择规格" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="厂家">
<muti-select v-model="deliveryCoilBo.itemManufacturer" :options="dict.type.coil_manufacturer" placeholder="请选择厂家" clearable style="width: 160px;" />
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" size="mini" @click="handleDeliveryFilter">查询</el-button>
<el-button size="mini" @click="resetDeliveryFilter">重置</el-button>
@@ -190,6 +220,9 @@ import { batchUpdateContractCoil } from "@/api/wms/coil";
import FileList from "@/components/FileList";
import DeliveryTable from "../../components/DeliveryTable.vue";
import ContractPreview from "./ContractPreview.vue";
import WarehouseSelect from "@/components/KLPService/WarehouseSelect";
import MemoInput from "@/components/MemoInput";
import MutiSelect from "@/components/MutiSelect";
// 导入可能需要的组件
import OrderDetail from "../../components/OrderDetail.vue";
@@ -212,8 +245,12 @@ export default {
OrderEdit,
ReceiveTable,
OrderObjection,
OrderRecord
OrderRecord,
WarehouseSelect,
MemoInput,
MutiSelect
},
dicts: ['coil_itemname', 'coil_material', 'coil_manufacturer', 'coil_quality_status'],
props: {
orderId: {
type: [Number, String],
@@ -377,10 +414,10 @@ export default {
fetchProductCoils() {
this.productCoilLoading = true;
listProductCoilsByContract({
contractId: this.orderId,
orderId: this.orderId,
pageNum: this.productPagination.currentPage,
pageSize: this.productPagination.pageSize,
coilBo: this.productCoilBo
...this.productCoilBo
}).then(res => {
this.productCoilList = res.rows || [];
this.productPagination.total = res.total || 0;
@@ -394,11 +431,12 @@ export default {
});
},
fetchProductCoilStatistics() {
getProductCoilsStatisticsByContract({ contractId: this.orderId, coilBo: this.productCoilBo }).then(res => {
getProductCoilsStatisticsByContract({ ...this.productCoilBo, orderId: this.orderId }).then(res => {
this.productCoilStatistics = res.data || {};
});
},
handleProductFilter() {
this.productCoilBo.selectType = this.productCoilBo.itemType || '';
this.productPagination.currentPage = 1;
this.fetchProductCoils();
this.fetchProductCoilStatistics();
@@ -408,6 +446,7 @@ export default {
this.handleProductFilter();
},
handleDeliveryFilter() {
this.deliveryCoilBo.selectType = this.deliveryCoilBo.itemType || '';
this.deliveryPagination.currentPage = 1;
this.fetchDeliveryCoils();
this.fetchDeliveryCoilStatistics();

View File

@@ -78,29 +78,44 @@
<el-tab-pane label="生产成果" name="production">
<div v-loading="productCoilLoading">
<el-form :inline="true" size="small" class="coil-filter-bar" style="margin-bottom: 8px;">
<el-form-item label="卷号">
<el-input v-model="productCoilBo.currentCoilNo" placeholder="当前钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
<el-form-item label="入场卷号">
<el-input v-model="productCoilBo.enterCoilNo" placeholder="请输入入场钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="材料类型">
<el-select v-model="productCoilBo.materialType" placeholder="全部" clearable style="width: 100px;">
<el-option label="成品" value="成品" />
<el-option label="原料" value="原料" />
</el-select>
<el-form-item label="当前卷号">
<el-input v-model="productCoilBo.currentCoilNo" placeholder="请输入当前钢卷号" clearable @keyup.enter.native="handleProductFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="质量状态">
<el-select v-model="productCoilBo.qualityStatus" placeholder="全部" clearable style="width: 100px;">
<el-option label="正常" value="0" />
<el-option label="待检" value="1" />
<el-option label="不合格" value="2" />
<el-form-item label="逻辑库区">
<warehouse-select v-model="productCoilBo.warehouseId" placeholder="请选择逻辑库位" style="width: 160px;" clearable />
</el-form-item>
<el-form-item label="物料类型">
<el-select v-model="productCoilBo.itemType" placeholder="全部" clearable style="width: 100px;" @change="handleProductFilter">
<el-option label="成品" value="product" />
<el-option label="原料" value="raw_material" />
</el-select>
</el-form-item>
<el-form-item label="发货状态">
<el-select v-model="productCoilBo.status" placeholder="全部" clearable style="width: 100px;">
<el-option label="在库" :value="0" />
<el-option label="在途" :value="1" />
<el-option label="已发货" :value="2" />
<el-option label="已发货" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="质量状态">
<muti-select v-model="productCoilBo.qualityStatusCsv" :options="dict.type.coil_quality_status" placeholder="请选择品质" clearable style="width: 160px;" />
</el-form-item>
<template v-if="productCoilBo.itemType">
<el-form-item label="品名">
<muti-select v-model="productCoilBo.itemName" :options="dict.type.coil_itemname" placeholder="请选择物料" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="材质">
<muti-select v-model="productCoilBo.itemMaterial" :options="dict.type.coil_material" placeholder="请选择材质" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="规格">
<memo-input v-model="productCoilBo.itemSpecification" storageKey="coilSpec" placeholder="请选择规格" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="厂家">
<muti-select v-model="productCoilBo.itemManufacturer" :options="dict.type.coil_manufacturer" placeholder="请选择厂家" clearable style="width: 160px;" />
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" size="mini" @click="handleProductFilter">查询</el-button>
<el-button size="mini" @click="resetProductFilter">重置</el-button>
@@ -114,22 +129,38 @@
<el-tab-pane label="计划发货" name="planDelivery">
<div v-loading="deliveryCoilLoading">
<el-form :inline="true" size="small" class="coil-filter-bar" style="margin-bottom: 8px;">
<el-form-item label="卷号">
<el-input v-model="deliveryCoilBo.currentCoilNo" placeholder="当前钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
<el-form-item label="入场卷号">
<el-input v-model="deliveryCoilBo.enterCoilNo" placeholder="请输入入场钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="材料类型">
<el-select v-model="deliveryCoilBo.materialType" placeholder="全部" clearable style="width: 100px;">
<el-option label="成品" value="成品" />
<el-option label="原料" value="原料" />
<el-form-item label="当前卷号">
<el-input v-model="deliveryCoilBo.currentCoilNo" placeholder="请输入当前钢卷号" clearable @keyup.enter.native="handleDeliveryFilter" style="width: 160px;" />
</el-form-item>
<el-form-item label="逻辑库区">
<warehouse-select v-model="deliveryCoilBo.warehouseId" placeholder="请选择逻辑库位" style="width: 160px;" clearable />
</el-form-item>
<el-form-item label="物料类型">
<el-select v-model="deliveryCoilBo.itemType" placeholder="全部" clearable style="width: 100px;" @change="handleDeliveryFilter">
<el-option label="成品" value="product" />
<el-option label="原料" value="raw_material" />
</el-select>
</el-form-item>
<el-form-item label="质量状态">
<el-select v-model="deliveryCoilBo.qualityStatus" placeholder="全部" clearable style="width: 100px;">
<el-option label="正常" value="0" />
<el-option label="待检" value="1" />
<el-option label="不合格" value="2" />
</el-select>
<muti-select v-model="deliveryCoilBo.qualityStatusCsv" :options="dict.type.coil_quality_status" placeholder="请选择品质" clearable style="width: 160px;" />
</el-form-item>
<template v-if="deliveryCoilBo.itemType">
<el-form-item label="品名">
<muti-select v-model="deliveryCoilBo.itemName" :options="dict.type.coil_itemname" placeholder="请选择物料" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="材质">
<muti-select v-model="deliveryCoilBo.itemMaterial" :options="dict.type.coil_material" placeholder="请选择材质" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="规格">
<memo-input v-model="deliveryCoilBo.itemSpecification" storageKey="coilSpec" placeholder="请选择规格" clearable style="width: 160px;" />
</el-form-item>
<el-form-item label="厂家">
<muti-select v-model="deliveryCoilBo.itemManufacturer" :options="dict.type.coil_manufacturer" placeholder="请选择厂家" clearable style="width: 160px;" />
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" size="mini" @click="handleDeliveryFilter">查询</el-button>
<el-button size="mini" @click="resetDeliveryFilter">重置</el-button>
@@ -178,6 +209,9 @@ import { listData, getData, delData, addData, updateData } from "@/api/system/di
import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type";
import CoilTable from "../components/CoilTable.vue";
import DeliveryTable from "../components/DeliveryTable.vue";
import WarehouseSelect from "@/components/KLPService/WarehouseSelect";
import MemoInput from "@/components/MemoInput";
import MutiSelect from "@/components/MutiSelect";
import { listDeliveryWaybill } from "@/api/wms/deliveryWaybill";
import { listCustomer } from "@/api/crm/customer";
@@ -186,8 +220,8 @@ import { listProductCoilsBySalesman, getProductCoilsStatisticsBySalesman, listDe
export default {
name: "Data",
components: { DragResizePanel, CoilTable, DeliveryTable },
dicts: ['sys_normal_disable'],
components: { DragResizePanel, CoilTable, DeliveryTable, WarehouseSelect, MemoInput, MutiSelect },
dicts: ['sys_normal_disable', 'coil_itemname', 'coil_material', 'coil_manufacturer', 'coil_quality_status'],
data() {
return {
// 遮罩层
@@ -425,6 +459,7 @@ export default {
});
},
handleProductFilter() {
this.productCoilBo.selectType = this.productCoilBo.itemType || '';
this.productPagination.currentPage = 1;
if (this.selectedItem) {
this.fetchProductCoils(this.selectedItem.dictValue);
@@ -459,6 +494,7 @@ export default {
});
},
handleDeliveryFilter() {
this.deliveryCoilBo.selectType = this.deliveryCoilBo.itemType || '';
this.deliveryPagination.currentPage = 1;
if (this.selectedItem) {
this.fetchDeliveryCoils(this.selectedItem.dictValue);