Merge remote-tracking branch 'origin/0.8.X' into 0.8.X
This commit is contained in:
@@ -64,3 +64,13 @@ export function listTodayOrder(query) {
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 导出正式订单主列表(业务精简字段)
|
||||
export function exportOrder(query) {
|
||||
return request({
|
||||
url: '/crm/order/exportDetail',
|
||||
method: 'post',
|
||||
data: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -42,3 +42,13 @@ export function delOrderItem(itemId) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出正式订单明细列表(业务精简字段)
|
||||
export function exportOrderItem(query) {
|
||||
return request({
|
||||
url: '/crm/orderItem/exportDetail',
|
||||
method: 'post',
|
||||
data: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -84,7 +84,10 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="业务员" prop="saleName" v-if="orderBy">
|
||||
<el-input v-model="queryParams.saleName" placeholder="请输入业务员" clearable size="small" />
|
||||
<el-select v-model="queryParams.saleName" placeholder="请选择业务员" clearable size="small" filterable allow-create>
|
||||
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="合同号" prop="contractNo" v-if="orderBy">
|
||||
@@ -303,7 +306,7 @@ export default {
|
||||
DragResizePanel,
|
||||
OrderDetail
|
||||
},
|
||||
dicts: ['coil_itemname', 'coil_material', 'coil_manufacturer', 'coil_quality_status'],
|
||||
dicts: ['coil_itemname', 'coil_material', 'coil_manufacturer', 'coil_quality_status', 'wip_pack_saleman'],
|
||||
props: {
|
||||
// 非触发器模式下,外部控制显隐(触发器模式下无效)
|
||||
visible: {
|
||||
|
||||
@@ -1,26 +1,28 @@
|
||||
<template>
|
||||
<el-select
|
||||
v-model="selectedValue"
|
||||
:multiple="multiple"
|
||||
filterable
|
||||
remote
|
||||
:remote-method="handleSearch"
|
||||
:loading="loading"
|
||||
:placeholder="placeholder"
|
||||
style="width: 100%"
|
||||
@change="handleChange"
|
||||
:clearable="clearable"
|
||||
>
|
||||
<el-option
|
||||
v-for="user in filteredUsers"
|
||||
:key="user.userId"
|
||||
:label="`${user.nickName}(${user.dept && user.dept.deptName ? user.dept.deptName : '无部门'})`"
|
||||
:value="user.userId"
|
||||
<div class="user-select-wrapper" :class="{ 'has-value': selectedValue && (Array.isArray(selectedValue) ? selectedValue.length > 0 : true) }">
|
||||
<el-select
|
||||
v-model="selectedValue"
|
||||
:multiple="multiple"
|
||||
filterable
|
||||
remote
|
||||
:remote-method="handleSearch"
|
||||
:loading="loading"
|
||||
:placeholder="placeholder"
|
||||
style="width: 100%"
|
||||
@change="handleChange"
|
||||
:clearable="clearable"
|
||||
>
|
||||
<span>{{ user.nickName }}</span>
|
||||
<span style="color: #999; font-size: 12px; margin-left: 8px;">{{ user.dept && user.dept.deptName ? user.dept.deptName : '无部门' }}</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-option
|
||||
v-for="user in filteredUsers"
|
||||
:key="user.userId"
|
||||
:label="`${user.nickName}(${user.dept && user.dept.deptName ? user.dept.deptName : '无部门'})`"
|
||||
:value="user.userId"
|
||||
>
|
||||
<span>{{ user.nickName }}</span>
|
||||
<span style="color: #999; font-size: 12px; margin-left: 8px;">{{ user.dept && user.dept.deptName ? user.dept.deptName : '无部门' }}</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@@ -109,4 +111,62 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.user-select-wrapper {
|
||||
position: relative;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
padding: 2px 8px;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
min-height: 32px;
|
||||
}
|
||||
|
||||
.user-select-wrapper:hover {
|
||||
border-color: #c0c4cc;
|
||||
}
|
||||
|
||||
.user-select-wrapper.has-value {
|
||||
border-color: #5F7BA0;
|
||||
box-shadow: 0 0 0 1px rgba(95, 123, 160, 0.1);
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-select__tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
position: relative !important;
|
||||
top: auto !important;
|
||||
left: auto !important;
|
||||
transform: none !important;
|
||||
overflow: visible;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-select__tags .el-tag {
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-input {
|
||||
width: auto;
|
||||
min-width: 60px;
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-select .el-select__input {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.user-select-wrapper /deep/ .el-select__tags-text {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* Hide the original el-select border since wrapper provides it */
|
||||
.user-select-wrapper /deep/ .el-select .el-input__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
padding-left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<el-table-column label="逻辑库位" align="center" prop="warehouseName" />
|
||||
<el-table-column label="实际库区" align="center" prop="actualWarehouseName" />
|
||||
<el-table-column label="物料类型" align="center" prop="materialType" />
|
||||
<el-table-column label="产品类型" align="center" width="180">
|
||||
<el-table-column label="产品类型" align="center" width="140">
|
||||
<template slot-scope="scope">
|
||||
<ProductInfo v-if="scope.row.itemType == 'product'" :product="scope.row" />
|
||||
<RawMaterialInfo v-else-if="scope.row.itemType === 'raw_material'" :material="scope.row" />
|
||||
|
||||
@@ -1,51 +1,91 @@
|
||||
<template>
|
||||
<div class="contract-tabs">
|
||||
<div v-if="orderId" class="tabs-content">
|
||||
<el-tabs v-model="activeTab" type="border-card">
|
||||
<el-tab-pane label="财务状态" name="finance" v-hasPermi="['crm:order:finance']">
|
||||
<div class="order-finance" v-if="activeTab === 'finance'">
|
||||
<!-- 财务状态内容 -->
|
||||
<ReceiveTable :order="currentOrder" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- 自定义Tab头部 -->
|
||||
<div class="tab-header">
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'contract' }"
|
||||
@click="activeTab = 'contract'"
|
||||
>合同信息</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'finance' }"
|
||||
@click="activeTab = 'finance'"
|
||||
>财务状态</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'dispute' }"
|
||||
@click="activeTab = 'dispute'"
|
||||
>订单异议</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'product' }"
|
||||
@click="activeTab = 'product'"
|
||||
>生产成果</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'coil' }"
|
||||
@click="activeTab = 'coil'"
|
||||
>发货配卷</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'delivery' }"
|
||||
@click="activeTab = 'delivery'"
|
||||
>发货单据</span>
|
||||
<span
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'attachment' }"
|
||||
@click="activeTab = 'attachment'"
|
||||
>合同附件</span>
|
||||
</div>
|
||||
|
||||
<el-tab-pane label="订单异议" name="dispute" v-hasPermi="['crm:order:objection']">
|
||||
<div class="order-dispute" v-if="activeTab === 'dispute'">
|
||||
<!-- 订单异议内容 -->
|
||||
<OrderObjection :order="currentOrder" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="生产成果" name="product">
|
||||
<div class="order-record" v-if="activeTab === 'product'" v-loading="productCoilLoading">
|
||||
<!-- 生产成果内容 -->
|
||||
<CoilTable ref="productCoilTable" :data="productCoilList || []" :showSelection="true"
|
||||
:pagination="productPagination" :total-statistics="productTotalStatistics"
|
||||
@selection-change="handleProductSelectionChange"
|
||||
@page-change="handleProductPageChange">
|
||||
<template slot="filter-actions" slot-scope="{ selectedRows }">
|
||||
<el-button type="primary" size="mini" icon="el-icon-refresh"
|
||||
:disabled="!selectedRows.length" @click="handleBatchTransferContract(selectedRows)">
|
||||
批量转单
|
||||
</el-button>
|
||||
</template>
|
||||
</CoilTable>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="发货配卷" name="coil">
|
||||
<div class="order-record" v-if="activeTab === 'coil'" v-loading="deliveryCoilLoading">
|
||||
<!-- 发货配卷内容 -->
|
||||
<CoilTable :data="deliveryCoilList || []"
|
||||
:pagination="deliveryPagination" :total-statistics="deliveryTotalStatistics"
|
||||
@page-change="handleDeliveryPageChange" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="发货单据" name="delivery">
|
||||
<div class="order-record" v-if="activeTab === 'delivery'">
|
||||
<!-- 发货单内容 -->
|
||||
<DeliveryTable :data="deliveryWaybillList || []" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同附件" name="attachment" v-hasPermi="['crm:order:record']">
|
||||
<!-- Tab内容区域(可滚动) -->
|
||||
<div class="tab-body">
|
||||
<!-- 合同信息 -->
|
||||
<div v-show="activeTab === 'contract'">
|
||||
<ContractPreview :contract="currentOrder" @updateStatus="$emit('updateStatus', $event)" />
|
||||
</div>
|
||||
|
||||
<!-- 财务状态 -->
|
||||
<div v-show="activeTab === 'finance'">
|
||||
<ReceiveTable :order="currentOrder" />
|
||||
</div>
|
||||
|
||||
<!-- 订单异议 -->
|
||||
<div v-show="activeTab === 'dispute'">
|
||||
<OrderObjection :order="currentOrder" />
|
||||
</div>
|
||||
|
||||
<!-- 生产成果 -->
|
||||
<div v-show="activeTab === 'product'" v-loading="productCoilLoading">
|
||||
<CoilTable ref="productCoilTable" :data="productCoilList || []" :showSelection="true"
|
||||
:pagination="productPagination" :total-statistics="productTotalStatistics"
|
||||
@selection-change="handleProductSelectionChange"
|
||||
@page-change="handleProductPageChange">
|
||||
<template slot="filter-actions" slot-scope="{ selectedRows }">
|
||||
<el-button type="primary" size="mini" icon="el-icon-refresh"
|
||||
:disabled="!selectedRows.length" @click="handleBatchTransferContract(selectedRows)">
|
||||
批量转单
|
||||
</el-button>
|
||||
</template>
|
||||
</CoilTable>
|
||||
</div>
|
||||
|
||||
<!-- 发货配卷 -->
|
||||
<div v-show="activeTab === 'coil'" v-loading="deliveryCoilLoading">
|
||||
<CoilTable :data="deliveryCoilList || []"
|
||||
:pagination="deliveryPagination" :total-statistics="deliveryTotalStatistics"
|
||||
@page-change="handleDeliveryPageChange" />
|
||||
</div>
|
||||
|
||||
<!-- 发货单据 -->
|
||||
<div v-show="activeTab === 'delivery'">
|
||||
<DeliveryTable :data="deliveryWaybillList || []" />
|
||||
</div>
|
||||
|
||||
<!-- 合同附件 -->
|
||||
<div v-show="activeTab === 'attachment'">
|
||||
<div class="attachment-item">
|
||||
<h4>商务附件</h4>
|
||||
<FileList :oss-ids="contractAttachment" />
|
||||
@@ -62,8 +102,8 @@
|
||||
<h4>其他附件</h4>
|
||||
<FileList :oss-ids="form.annexFiles" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 批量转单 - 选择目标合同弹窗 -->
|
||||
<el-dialog title="批量转单" :visible.sync="batchTransferDialogVisible" width="500px" append-to-body
|
||||
@@ -79,7 +119,7 @@
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-else class="no-selection" style="display: flex; align-items: center; justify-content: center; height: 100%;">
|
||||
<div v-else class="no-selection">
|
||||
<el-empty description="请先选择合同" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -91,6 +131,7 @@ import ContractSelect from "@/components/KLPService/ContractSelect";
|
||||
import { batchUpdateContractCoil } from "@/api/wms/coil";
|
||||
import FileList from "@/components/FileList";
|
||||
import DeliveryTable from "../../components/DeliveryTable.vue";
|
||||
import ContractPreview from "./ContractPreview.vue";
|
||||
|
||||
// 导入可能需要的组件
|
||||
import OrderDetail from "../../components/OrderDetail.vue";
|
||||
@@ -108,6 +149,7 @@ export default {
|
||||
ContractSelect,
|
||||
FileList,
|
||||
DeliveryTable,
|
||||
ContractPreview,
|
||||
OrderDetail,
|
||||
OrderEdit,
|
||||
ReceiveTable,
|
||||
@@ -153,7 +195,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
// 活动tab
|
||||
activeTab: "finance",
|
||||
activeTab: "contract",
|
||||
selectedProductRows: [],
|
||||
batchTransferDialogVisible: false,
|
||||
batchTargetContractId: '',
|
||||
@@ -304,4 +346,57 @@ export default {
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.contract-tabs {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tabs-content {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tab-header {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
border-bottom: 2px solid #e4e7ed;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
padding: 10px 20px;
|
||||
cursor: pointer;
|
||||
color: #606266;
|
||||
font-size: 14px;
|
||||
border-bottom: 2px solid transparent;
|
||||
margin-bottom: -2px;
|
||||
transition: color .3s, border-color .3s;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.tab-item:hover {
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.tab-item.active {
|
||||
color: #409eff;
|
||||
border-bottom-color: #409eff;
|
||||
}
|
||||
|
||||
.tab-body {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.no-selection {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
/>
|
||||
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
||||
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||
<span v-if="total > 0" class="result-count">共 {{ total }} 条记录</span>
|
||||
</div>
|
||||
|
||||
@@ -130,6 +131,14 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 业务员 -->
|
||||
<el-table-column label="业务员" width="110">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.salesman" size="small" class="editable-cell" style="width: 100%" @change="saveRow(scope.row)">
|
||||
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 签订日期 -->
|
||||
<el-table-column label="签订日期" prop="signTime" width="100">
|
||||
<template slot-scope="scope">
|
||||
@@ -421,8 +430,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listOrder, updateOrder } from '@/api/crm/order'
|
||||
import { listOrder, updateOrder, exportOrder } from '@/api/crm/order'
|
||||
import { listCustomer } from '@/api/crm/customer'
|
||||
import { blobValidate } from "@/utils/klp";
|
||||
import { saveAs } from 'file-saver'
|
||||
|
||||
const STATUS_MAP = {
|
||||
'0': { label: '草稿', type: 'info' },
|
||||
@@ -433,6 +444,7 @@ const STATUS_MAP = {
|
||||
|
||||
export default {
|
||||
name: 'ContractDetailEdit',
|
||||
dicts: ['wip_pack_saleman'],
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
@@ -628,7 +640,38 @@ export default {
|
||||
}
|
||||
this.customerDialogVisible = false
|
||||
this.saveRow(row)
|
||||
}
|
||||
},
|
||||
|
||||
// 导出合同明细(按当前筛选条件)
|
||||
handleExport() {
|
||||
const params = {}
|
||||
if (this.contractQuery.contractCode) params.contractCode = this.contractQuery.contractCode
|
||||
if (this.contractQuery.supplier) params.supplier = this.contractQuery.supplier
|
||||
if (this.contractQuery.customer) params.customer = this.contractQuery.customer
|
||||
if (this.contractQuery.status !== undefined && this.contractQuery.status !== null) params.status = this.contractQuery.status
|
||||
if (this.contractQuery.signDateStart) params.signDateStart = this.contractQuery.signDateStart
|
||||
if (this.contractQuery.signDateEnd) params.signDateEnd = this.contractQuery.signDateEnd
|
||||
if (this.contractQuery.deliveryDateStart) params.deliveryDateStart = this.contractQuery.deliveryDateStart
|
||||
if (this.contractQuery.deliveryDateEnd) params.deliveryDateEnd = this.contractQuery.deliveryDateEnd
|
||||
if (this.contractQuery.signLocation) params.signLocation = this.contractQuery.signLocation
|
||||
exportOrder(params).then((res) => {
|
||||
this.handleExportBlob(res, '合同编辑详情.xlsx')
|
||||
}).catch(() => {})
|
||||
},
|
||||
|
||||
// 处理blob文件导出
|
||||
async handleExportBlob(res, fileName) {
|
||||
const isBlob = blobValidate(res);
|
||||
if (isBlob) {
|
||||
saveAs(res, fileName);
|
||||
this.$message.success('导出成功!');
|
||||
} else {
|
||||
const resText = await res.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = rspObj.msg || '导出失败';
|
||||
this.$message.error(errMsg);
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -727,6 +770,22 @@ export default {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
/* 业务员下拉框样式 */
|
||||
.select-salesman ::v-deep .el-input__inner {
|
||||
background-color: #f3f0ff;
|
||||
border-color: transparent;
|
||||
padding: 0 8px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.select-salesman ::v-deep .el-input__inner:focus {
|
||||
border-color: #5F7BA0;
|
||||
background-color: #fff;
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
/* 日期选择器样式 */
|
||||
.editable-cell-date ::v-deep .el-input__inner {
|
||||
background-color: #e6f7ff;
|
||||
|
||||
@@ -11,24 +11,11 @@
|
||||
|
||||
<!-- 右侧内容区域 -->
|
||||
<div class="right-panel" v-if="form.orderId" style="flex: 1; display: flex; flex-direction: column;">
|
||||
<!-- 右侧上方:合同内容信息预览 -->
|
||||
<div class="preview-panel" ref="previewPanel"
|
||||
style="flex: 1; overflow-y: auto; border-bottom: 1px solid #e4e7ed;">
|
||||
<ContractPreview :contract="form" @updateStatus="handleStatusChange" />
|
||||
</div>
|
||||
|
||||
<!-- 拖拽调整条 -->
|
||||
<div class="resize-handle" ref="resizeHandle"
|
||||
style="height: 8px; background-color: #f5f7fa; cursor: row-resize; display: flex; align-items: center; justify-content: center;"
|
||||
@mousedown="startResize">
|
||||
<div style="width: 40px; height: 2px; background-color: #dcdfe6;"></div>
|
||||
</div>
|
||||
|
||||
<!-- 右侧下方:Tab标签页 -->
|
||||
<div class="tab-panel" ref="tabPanel" style="flex: 1; overflow-y: auto;">
|
||||
<div class="tab-panel" style="flex: 1; overflow: hidden;">
|
||||
<ContractTabs :orderId="form.orderId" :deliveryWaybillList="wmsDeliveryWaybills"
|
||||
:contract-attachment="form.businessAnnex" :technical-agreement="form.techAnnex"
|
||||
:other-attachment="form.productionSchedule" :currentOrder="form" />
|
||||
:other-attachment="form.productionSchedule" :currentOrder="form"
|
||||
@updateStatus="handleStatusChange" />
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="flex: 1; display: flex; flex-direction: column;">
|
||||
@@ -234,7 +221,6 @@ import { addCustomer } from "@/api/crm/customer";
|
||||
import { listDeliveryWaybill } from "@/api/wms/deliveryWaybill";
|
||||
import dayjs from "dayjs";
|
||||
import ContractList from "./components/ContractList.vue";
|
||||
import ContractPreview from "./components/ContractPreview.vue";
|
||||
import ContractTabs from "./components/ContractTabs.vue";
|
||||
import ContractExportDialog from "./components/ContractExportDialog.vue";
|
||||
import ProductContent from "./components/ProductContent.vue";
|
||||
@@ -246,7 +232,6 @@ export default {
|
||||
name: "Contract",
|
||||
components: {
|
||||
ContractList,
|
||||
ContractPreview,
|
||||
ContractTabs,
|
||||
ContractExportDialog,
|
||||
ProductContent,
|
||||
@@ -706,34 +691,6 @@ export default {
|
||||
this.customerOpen = false;
|
||||
this.customerForm = {};
|
||||
},
|
||||
/** 开始拖拽调整 */
|
||||
startResize(e) {
|
||||
e.preventDefault();
|
||||
const previewPanel = this.$refs.previewPanel;
|
||||
const tabPanel = this.$refs.tabPanel;
|
||||
const startY = e.clientY;
|
||||
const startPreviewHeight = previewPanel.offsetHeight;
|
||||
const parentHeight = previewPanel.parentElement.offsetHeight;
|
||||
|
||||
const handleMouseMove = (event) => {
|
||||
const deltaY = event.clientY - startY;
|
||||
const newPreviewHeight = startPreviewHeight + deltaY;
|
||||
const newTabHeight = parentHeight - newPreviewHeight - 8; // 8是拖拽条的高度
|
||||
|
||||
if (newPreviewHeight > 100 && newTabHeight > 100) { // 最小高度限制
|
||||
previewPanel.style.flex = `0 0 ${newPreviewHeight}px`;
|
||||
tabPanel.style.flex = `0 0 ${newTabHeight}px`;
|
||||
}
|
||||
};
|
||||
|
||||
const handleMouseUp = () => {
|
||||
document.removeEventListener('mousemove', handleMouseMove);
|
||||
document.removeEventListener('mouseup', handleMouseUp);
|
||||
};
|
||||
|
||||
document.addEventListener('mousemove', handleMouseMove);
|
||||
document.addEventListener('mouseup', handleMouseUp);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -756,11 +713,7 @@ export default {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.preview-panel {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.tab-panel {
|
||||
overflow-y: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
<div class="toolbar">
|
||||
<el-button type="danger" size="small" icon="el-icon-delete" :disabled="!selection.length" @click="handleBatchDelete">批量删除</el-button>
|
||||
<el-button type="primary" size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||
<span class="toolbar-tip">合同列为只读;明细列失焦自动保存(需有修改权限)</span>
|
||||
</div>
|
||||
|
||||
@@ -50,6 +51,9 @@
|
||||
<el-table-column label="供方" min-width="120" show-overflow-tooltip>
|
||||
<template slot-scope="{ row }">{{ (row.orderInfo && row.orderInfo.supplier) || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="业务员" min-width="80" show-overflow-tooltip>
|
||||
<template slot-scope="{ row }">{{ (row.orderInfo && row.orderInfo.salesman) || row.salesman || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="签订时间" width="110">
|
||||
<template slot-scope="{ row }">{{ row.orderInfo && row.orderInfo.signTime ? parseTime(row.orderInfo.signTime, '{y}-{m}-{d}') : '-' }}</template>
|
||||
</el-table-column>
|
||||
@@ -201,7 +205,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listOrderItem, updateOrderItem, delOrderItem } from '@/api/crm/orderItem'
|
||||
import { listOrderItem, updateOrderItem, delOrderItem, exportOrderItem } from '@/api/crm/orderItem'
|
||||
import { blobValidate } from "@/utils/klp";
|
||||
import { saveAs } from 'file-saver'
|
||||
|
||||
const ITEM_PAYLOAD_KEYS = [
|
||||
'itemId',
|
||||
@@ -354,7 +360,36 @@ export default {
|
||||
console.error('批量删除失败:', err)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
// 导出订单明细(按当前筛选条件)
|
||||
handleExport() {
|
||||
const params = {}
|
||||
if (this.queryParams.contractCode) params.contractCode = this.queryParams.contractCode
|
||||
if (this.queryParams.customer) params.customer = this.queryParams.customer
|
||||
if (this.queryParams.material) params.material = this.queryParams.material
|
||||
if (this.queryParams.orderId) {
|
||||
const n = Number(this.queryParams.orderId)
|
||||
params.orderId = Number.isNaN(n) ? this.queryParams.orderId : n
|
||||
}
|
||||
exportOrderItem(params).then((res) => {
|
||||
this.handleExportBlob(res, '正式订单明细.xlsx')
|
||||
}).catch(() => {})
|
||||
},
|
||||
|
||||
// 处理blob文件导出
|
||||
async handleExportBlob(res, fileName) {
|
||||
const isBlob = blobValidate(res);
|
||||
if (isBlob) {
|
||||
saveAs(res, fileName);
|
||||
this.$modal.msgSuccess('导出成功!');
|
||||
} else {
|
||||
const resText = await res.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = rspObj.msg || '导出失败';
|
||||
this.$modal.msgError(errMsg);
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
/>
|
||||
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
||||
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||
<span class="sort-hint">已按合同签订日期默认当月,结果按交货日期倒序排列</span>
|
||||
</div>
|
||||
|
||||
@@ -96,6 +97,11 @@
|
||||
<span class="contract-info" :title="row.customer">{{ row.customer }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="业务员" width="80">
|
||||
<template slot-scope="{ row }">
|
||||
<span class="contract-info">{{ row._order && row._order.salesman ? row._order.salesman : '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="签订日期" prop="signTime" width="100">
|
||||
<template slot-scope="{ row }">
|
||||
<span class="contract-info contract-date">{{ formatDate(row.signTime) }}</span>
|
||||
@@ -270,8 +276,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listOrder, updateOrder } from '@/api/crm/order'
|
||||
import { listOrder, updateOrder, exportOrder } from '@/api/crm/order'
|
||||
import { parseProductContent, stringifyProductContent, calculateProductFields, recalculateTotals } from '@/utils/productContent'
|
||||
import { blobValidate } from "@/utils/klp";
|
||||
import { saveAs } from 'file-saver'
|
||||
|
||||
export default {
|
||||
name: 'OrderItemList',
|
||||
@@ -555,6 +563,34 @@ export default {
|
||||
this.getList()
|
||||
},
|
||||
|
||||
// 导出订单明细(按当前筛选条件)
|
||||
handleExport() {
|
||||
const params = {}
|
||||
if (this.queryParams.contractCode) params.contractCode = this.queryParams.contractCode
|
||||
if (this.queryParams.customer) params.customer = this.queryParams.customer
|
||||
if (this.queryParams.signDateStart) params.signDateStart = this.queryParams.signDateStart
|
||||
if (this.queryParams.signDateEnd) params.signDateEnd = this.queryParams.signDateEnd
|
||||
if (this.queryParams.deliveryDateStart) params.deliveryDateStart = this.queryParams.deliveryDateStart
|
||||
if (this.queryParams.deliveryDateEnd) params.deliveryDateEnd = this.queryParams.deliveryDateEnd
|
||||
exportOrder(params).then((res) => {
|
||||
this.handleExportBlob(res, '订单明细列表.xlsx')
|
||||
}).catch(() => {})
|
||||
},
|
||||
|
||||
// 处理blob文件导出
|
||||
async handleExportBlob(res, fileName) {
|
||||
const isBlob = blobValidate(res);
|
||||
if (isBlob) {
|
||||
saveAs(res, fileName);
|
||||
this.$message.success('导出成功!');
|
||||
} else {
|
||||
const resText = await res.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = rspObj.msg || '导出失败';
|
||||
this.$message.error(errMsg);
|
||||
}
|
||||
},
|
||||
|
||||
groupRowClassName({ row, rowIndex }) {
|
||||
if (row.productIndex === 0) {
|
||||
return 'group-row-a'
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -334,16 +334,13 @@ export default {
|
||||
|
||||
/** 打印标签 */
|
||||
handlePrintLabel(row) {
|
||||
this.labelRender.data = row;
|
||||
this.labelRender.type = getCoilTagPrintType(row);
|
||||
this.labelRender.data = {
|
||||
...row,
|
||||
updateTime: row.updateTime?.split(' ')[0] || '',
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
const el = this.$refs.labelRender && this.$refs.labelRender.$el;
|
||||
if (el) {
|
||||
el.style.display = 'block';
|
||||
window.print();
|
||||
el.style.display = 'none';
|
||||
}
|
||||
});
|
||||
this.$refs.labelRender.printLabel();
|
||||
})
|
||||
},
|
||||
|
||||
handleExport() {
|
||||
|
||||
@@ -83,7 +83,10 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="业务员" prop="saleName">
|
||||
<el-input v-model="queryParams.saleName" placeholder="请输入业务员" clearable size="small" />
|
||||
<el-select v-model="queryParams.saleName" placeholder="请选择业务员" clearable size="small" filterable allow-create>
|
||||
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="合同号" prop="contractNo">
|
||||
@@ -997,7 +1000,7 @@ export default {
|
||||
ContractSelect,
|
||||
ExceptionManager,
|
||||
},
|
||||
dicts: ['product_coil_status', 'coil_material', 'coil_itemname', 'coil_manufacturer', 'coil_quality_status', 'wms_next_warehouse', 'coil_business_purpose'],
|
||||
dicts: ['product_coil_status', 'coil_material', 'coil_itemname', 'coil_manufacturer', 'coil_quality_status', 'wms_next_warehouse', 'coil_business_purpose', 'wip_pack_saleman'],
|
||||
props: {
|
||||
qrcode: {
|
||||
type: Boolean,
|
||||
|
||||
@@ -167,45 +167,29 @@ export default {
|
||||
if (newVal !== oldVal) {
|
||||
// 预处理数据
|
||||
this.tableData = newVal.map(item => {
|
||||
const isEmpty = this.isEmpty(item);
|
||||
if (isEmpty) {
|
||||
return {
|
||||
...item,
|
||||
oBefore: {
|
||||
manufacturer: item.manufacturerBefore,
|
||||
specification: item.specificationBefore,
|
||||
material: item.materialBefore,
|
||||
itemName: item.materialNameBefore,
|
||||
surfaceTreatmentDesc: item.surfaceTreatmentBefore,
|
||||
zincLayer: item.zincLayerBefore
|
||||
},
|
||||
oAfter: {
|
||||
manufacturer: item.manufacturerAfter,
|
||||
specification: item.specificationAfter,
|
||||
material: item.materialAfter,
|
||||
itemName: item.materialNameAfter,
|
||||
surfaceTreatmentDesc: item.surfaceTreatmentAfter,
|
||||
zincLayer: item.zincLayerAfter
|
||||
},
|
||||
isConfirmed: this.isConfirmed(item)
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
...item,
|
||||
oBefore: {
|
||||
manufacturer: item.manufacturerBefore,
|
||||
specification: item.specificationBefore,
|
||||
material: item.materialBefore,
|
||||
itemName: item.materialNameBefore,
|
||||
surfaceTreatmentDesc: item.surfaceTreatmentBefore,
|
||||
zincLayer: item.zincLayerBefore
|
||||
},
|
||||
// 将三个after字段设置为与before相同
|
||||
itemIdAfter: item.itemIdBefore,
|
||||
warehouseIdAfter: item.warehouseIdBefore,
|
||||
materialTypeAfter: item.materialTypeBefore,
|
||||
isConfirmed: this.isConfirmed(item)
|
||||
}
|
||||
return {
|
||||
...item,
|
||||
oBefore: {
|
||||
manufacturer: item.manufacturerBefore,
|
||||
specification: item.specificationBefore,
|
||||
material: item.materialBefore,
|
||||
itemName: item.materialNameBefore,
|
||||
surfaceTreatmentDesc: item.surfaceTreatmentBefore,
|
||||
zincLayer: item.zincLayerBefore
|
||||
},
|
||||
oAfter: {
|
||||
manufacturer: item.manufacturerAfter ?? item.manufacturerBefore,
|
||||
specification: item.specificationAfter ?? item.specificationBefore,
|
||||
material: item.materialAfter ?? item.materialBefore,
|
||||
itemName: item.materialNameAfter ?? item.materialNameBefore,
|
||||
surfaceTreatmentDesc: item.surfaceTreatmentAfter ?? item.surfaceTreatmentBefore,
|
||||
zincLayer: item.zincLayerAfter ?? item.zincLayerBefore
|
||||
},
|
||||
// 每个字段独立判断:如果after有值则用after,否则回退到before
|
||||
itemIdAfter: item.itemIdAfter ?? item.itemIdBefore,
|
||||
warehouseIdAfter: item.warehouseIdAfter ?? item.warehouseIdBefore,
|
||||
materialTypeAfter: item.materialTypeAfter ?? item.materialTypeBefore,
|
||||
isConfirmed: this.isConfirmed(item)
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -226,10 +210,6 @@ export default {
|
||||
// return item && item.itemIdAfter && item.warehouseIdAfter && item.materialTypeAfter
|
||||
return item.isTransferred == 1
|
||||
},
|
||||
// isEmpty 是否为空
|
||||
isEmpty(item) {
|
||||
return item && item.itemIdAfter && item.warehouseIdAfter && item.materialTypeAfter
|
||||
},
|
||||
handleUpdate(row) {
|
||||
updateTransferOrderItem(row).then(res => {
|
||||
this.$message({
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
</WarehouseSelect>
|
||||
</el-form-item>
|
||||
<el-form-item label="调拨单号">
|
||||
<el-select v-model="queryParams.transferNo" filterable remote clearable
|
||||
<el-select v-model="queryParams.transferId" filterable remote clearable
|
||||
remote-method="remoteSearchTransferOrder" :remote-loading="transferOrderLoading" placeholder="请输入调拨单号搜索"
|
||||
@change="handleRegularSearch" style="width:220px">
|
||||
<el-option v-for="item in transferOrderOptions" :key="item.orderId" :label="item.transferNo"
|
||||
:value="item.transferNo" />
|
||||
:value="item.orderId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效状态">
|
||||
@@ -32,7 +32,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" plain @click="handleRegularSearch">查询</el-button>
|
||||
<el-button type="success" icon="el-icon-check" plain @click="handleConfirmBatch">批量执行</el-button>
|
||||
<el-button type="success" icon="el-icon-check" plain :loading="batchConfirmLoading" @click="handleConfirmBatch">批量执行</el-button>
|
||||
<el-button @click="handleReset">清空</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -46,7 +46,7 @@
|
||||
<!-- 调拨表格, 显示调拨记录, 常规筛选作用下生效 -->
|
||||
<TransferItemTable :data="transferList" :canEdit="false" :canConfirm="true" v-loading="loading"
|
||||
ref="transferItemTable" :refreshLabel="refreshLabel" :transferRemark="transferRemark"
|
||||
@refreshData="handleRegularSearch"></TransferItemTable>
|
||||
@refreshData="handleBatchConfirmDone"></TransferItemTable>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||
@pagination="handleRegularSearch" />
|
||||
@@ -103,7 +103,7 @@ export default {
|
||||
currentCoilNo: '',
|
||||
warehouseIdBefore: '',
|
||||
warehouseIdAfter: '',
|
||||
transferNo: '',
|
||||
transferId: '',
|
||||
isTransferred: '0',
|
||||
pageSize: 20,
|
||||
pageNum: 1,
|
||||
@@ -114,6 +114,7 @@ export default {
|
||||
transferOrderOptions: [],
|
||||
transferOrderLoading: false,
|
||||
loading: false,
|
||||
batchConfirmLoading: false,
|
||||
total: 0,
|
||||
dialogVisible: false,
|
||||
};
|
||||
@@ -171,7 +172,7 @@ export default {
|
||||
currentCoilNo: '',
|
||||
warehouseIdBefore: '',
|
||||
warehouseIdAfter: '',
|
||||
transferNo: '',
|
||||
transferId: '',
|
||||
isTransferred: '0',
|
||||
pageSize: 20,
|
||||
pageNum: 1,
|
||||
@@ -192,7 +193,18 @@ export default {
|
||||
}
|
||||
},
|
||||
handleConfirmBatch() {
|
||||
this.$refs.transferItemTable.handleBatchConfirm();
|
||||
this.$confirm('确定要批量执行调拨吗?', '确认操作', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.batchConfirmLoading = true;
|
||||
this.$refs.transferItemTable.handleBatchConfirm();
|
||||
}).catch(() => {});
|
||||
},
|
||||
handleBatchConfirmDone() {
|
||||
this.batchConfirmLoading = false;
|
||||
this.handleRegularSearch();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
</WarehouseSelect>
|
||||
</el-form-item>
|
||||
<el-form-item label="调拨单号">
|
||||
<el-select v-model="queryParams.transferNo" filterable remote clearable
|
||||
<el-select v-model="queryParams.transferId" filterable remote clearable
|
||||
remote-method="remoteSearchTransferOrder" :remote-loading="transferOrderLoading"
|
||||
placeholder="请输入调拨单号搜索" @change="handleRegularSearch" style="width:220px">
|
||||
<el-option v-for="item in transferOrderOptions" :key="item.orderId"
|
||||
:label="item.transferNo" :value="item.transferNo" />
|
||||
:label="item.transferNo" :value="item.orderId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效状态">
|
||||
@@ -105,7 +105,7 @@ export default {
|
||||
currentCoilNo: '',
|
||||
warehouseIdBefore: '',
|
||||
warehouseIdAfter: '',
|
||||
transferNo: '',
|
||||
transferId: '',
|
||||
isTransferred: '',
|
||||
pageSize: 20,
|
||||
pageNum: 1,
|
||||
@@ -173,7 +173,7 @@ export default {
|
||||
currentCoilNo: '',
|
||||
warehouseIdBefore: '',
|
||||
warehouseIdAfter: '',
|
||||
transferNo: '',
|
||||
transferId: '',
|
||||
isTransferred: '',
|
||||
pageSize: 20,
|
||||
pageNum: 1,
|
||||
|
||||
@@ -46,13 +46,22 @@ const CATEGORIES = [
|
||||
{ key: '冷硬钢卷', label: '冷硬钢卷', match: ['冷硬'] },
|
||||
{ key: '冷轧钢卷', label: '冷轧钢卷', match: ['冷轧'] },
|
||||
{ key: '镀锌钢卷', label: '镀锌钢卷', match: ['镀锌分剪卷', '镀锌卷', '镀锌'] },
|
||||
{ key: '镀锌管材', label: '镀锌管材', match: ['镀锌管'] },
|
||||
{ key: '镀锌管材', label: '镀锌管材', match: ['镀锌卷', '镀锌分剪卷', '镀锌管'] },
|
||||
{ key: '花纹板', label: '花纹板', match: ['花纹板'] },
|
||||
{ key: '镀铬', label: '镀铬', match: ['镀铬'] },
|
||||
]
|
||||
// 匹配优先级:镀锌管材必须在镀锌钢卷之前检查
|
||||
const MATCH_PRIORITY = ['镀锌管材', '冷硬钢卷', '冷轧钢卷', '镀锌钢卷', '花纹板', '镀铬']
|
||||
|
||||
// 仓库 → 允许匹配的品类(按优先级排序),未列出的仓库使用 MATCH_PRIORITY
|
||||
const WAREHOUSE_CATS = {
|
||||
'1988150099140866050': ['冷硬钢卷'],
|
||||
'1988150915591499777': ['冷轧钢卷', '花纹板'],
|
||||
'1988150323162836993': ['镀锌钢卷', '镀锌管材'],
|
||||
'1988150487185289217': ['镀锌管材'],
|
||||
'1988151132361519105': ['镀铬'],
|
||||
}
|
||||
|
||||
/**
|
||||
* 品质等级 → 分组映射
|
||||
* A/B → 'AB', C/D/O → 'CDO', 其他 → null
|
||||
@@ -60,8 +69,8 @@ const MATCH_PRIORITY = ['镀锌管材', '冷硬钢卷', '冷轧钢卷', '镀锌
|
||||
function getQualityGroup(status) {
|
||||
if (!status) return null
|
||||
const s = String(status).toUpperCase().trim()
|
||||
if (['A', 'B'].includes(s)) return 'AB'
|
||||
if (['C', 'D', 'O'].includes(s)) return 'CDO'
|
||||
if (s.startsWith('A') || s === 'B' || s === 'B级') return 'AB'
|
||||
if (s.startsWith('C') || s.startsWith('D') || s.startsWith('O')) return 'CDO'
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -93,9 +102,10 @@ export default {
|
||||
let unmatchedCount = 0
|
||||
|
||||
this.rawList.forEach(item => {
|
||||
// 匹配钢材品类
|
||||
// 匹配钢材品类(按仓库限制品类范围)
|
||||
const catMap = new Map(CATEGORIES.map(c => [c.key, c]))
|
||||
const cat = MATCH_PRIORITY.map(k => catMap.get(k)).find(
|
||||
const allowed = WAREHOUSE_CATS[item.warehouseId] || MATCH_PRIORITY
|
||||
const cat = allowed.map(k => catMap.get(k)).find(
|
||||
c => item.itemName && c.match.some(m => item.itemName.includes(m))
|
||||
)
|
||||
if (!cat) { unmatchedCount++; return }
|
||||
@@ -239,14 +249,23 @@ export default {
|
||||
this.loading = true
|
||||
this.rawList = []
|
||||
|
||||
listCoilWithIds({
|
||||
selectType: 'product',
|
||||
status: 0,
|
||||
dataType: 1,
|
||||
pageSize: 99999,
|
||||
pageNum: 1,
|
||||
}).then(res => {
|
||||
this.rawList = res.rows || []
|
||||
Promise.all([
|
||||
// 酸连轧成品库 → 冷硬钢卷
|
||||
listCoilWithIds({ warehouseIds: '1988150099140866050', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
|
||||
// 拉矫成品库 → 冷轧钢卷 / 花纹板(按 itemName 区分)
|
||||
listCoilWithIds({ warehouseIds: '1988150915591499777', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
|
||||
// 镀锌成品库 → 镀锌钢卷 / 镀锌管材(按 itemName 区分)
|
||||
listCoilWithIds({ warehouseIds: '1988150323162836993', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
|
||||
// 镀锌纵剪分条原料库 → 镀锌管材(raw_material 镀锌卷)
|
||||
listCoilWithIds({ warehouseIds: '1988150487185289217', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
|
||||
// 镀铬成品库 → 镀铬
|
||||
listCoilWithIds({ warehouseIds: '1988151132361519105', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
|
||||
]).then(results => {
|
||||
const map = new Map()
|
||||
results.forEach(res => {
|
||||
;(res.rows || []).forEach(item => map.set(item.coilId, item))
|
||||
})
|
||||
this.rawList = Array.from(map.values())
|
||||
this.loading = false
|
||||
}).catch(() => {
|
||||
this.loading = false
|
||||
|
||||
Reference in New Issue
Block a user