feat(planSheet): 新增排产单批量新增明细功能
实现了批量新增排产单明细的完整流程:添加批量新增按钮,开发批量选择合同和明细的对话框,支持搜索筛选合同、分页展示合同列表,多选明细后批量提交新增,新增成功后刷新列表
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
<h3>{{ currentPlanSheetInfo.planSheetName || '排产单详情' }}</h3>
|
||||
<div>
|
||||
<el-button type="primary" plain @click="handleAdd">新增明细</el-button>
|
||||
<el-button type="success" plain @click="handleBatchAdd">批量新增</el-button>
|
||||
<el-button type="info" plain @click="getList">刷新</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -287,6 +288,75 @@
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 批量新增对话框 -->
|
||||
<el-dialog title="批量新增" :visible.sync="batchAddDialogVisible" width="80%" append-to-body>
|
||||
<div class="batch-add-content">
|
||||
<!-- 合同选择 -->
|
||||
<div class="contract-section">
|
||||
<div class="section-title">选择合同</div>
|
||||
<el-form :model="batchQueryParams" ref="batchQueryForm" size="small" :inline="true" label-width="80px">
|
||||
<el-form-item label="合同号" prop="contractCode">
|
||||
<el-input v-model="batchQueryParams.contractCode" placeholder="请输入合同号" style="width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="客户">
|
||||
<el-input v-model="batchQueryParams.customerName" placeholder="请输入客户名称" style="width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="业务员">
|
||||
<el-input v-model="batchQueryParams.salesman" placeholder="请输入业务员" style="width: 120px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="getBatchOrderList">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetBatchQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="batchOrderLoading" :data="batchOrderList" style="width: 100%" border @row-click="selectBatchContract"
|
||||
highlight-current-row>
|
||||
<el-table-column prop="contractCode" label="合同号" />
|
||||
<el-table-column prop="signTime" label="签订时间" width="150" />
|
||||
<el-table-column prop="signLocation" label="签订地点" />
|
||||
<el-table-column prop="companyName" label="客户公司" />
|
||||
<el-table-column prop="salesman" label="业务员" width="100" />
|
||||
<el-table-column prop="deliveryDate" label="交货日期" width="150" />
|
||||
<el-table-column label="操作" width="80" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" @click.stop="selectBatchContract(scope.row)">选择</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination-container">
|
||||
<el-pagination background layout="prev, pager, next, jumper" :total="batchOrderTotal"
|
||||
:page-size="batchQueryParams.pageSize" :current-page.sync="batchQueryParams.pageNum"
|
||||
@current-change="getBatchOrderList" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 明细选择 -->
|
||||
<div class="item-section" v-if="selectedContract">
|
||||
<div class="section-title">选择明细(多选)</div>
|
||||
<el-table v-loading="batchItemLoading" :data="batchItemList" style="width: 100%" border
|
||||
@selection-change="handleBatchItemSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="产品类型" align="center" prop="productType" />
|
||||
<el-table-column label="成品宽度" align="center" prop="width" />
|
||||
<el-table-column label="成品厚度" align="center" prop="thickness" />
|
||||
<el-table-column label="成品规格" align="center" prop="finishedProductSpec" />
|
||||
<el-table-column label="材质" align="center" prop="material" />
|
||||
<el-table-column label="重量" align="center" prop="weight" />
|
||||
<el-table-column label="卷数" align="center" prop="productNum" />
|
||||
<el-table-column label="表面处理" align="center" prop="surfaceTreatment" />
|
||||
<el-table-column label="包装要求" align="center" prop="packagingReq" />
|
||||
<el-table-column label="切边要求" align="center" prop="edgeCuttingReq" />
|
||||
<el-table-column label="用途" align="center" prop="purpose" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="batchAddDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="confirmBatchAdd" :disabled="selectedBatchItems.length === 0">确认新增</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -351,7 +421,31 @@ export default {
|
||||
// 订单明细加载状态
|
||||
orderItemLoading: false,
|
||||
// 当前编辑的行
|
||||
currentEditingRow: null
|
||||
currentEditingRow: null,
|
||||
// 批量新增对话框
|
||||
batchAddDialogVisible: false,
|
||||
// 批量查询参数
|
||||
batchQueryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
contractCode: undefined,
|
||||
customerName: undefined,
|
||||
salesman: undefined
|
||||
},
|
||||
// 批量订单列表
|
||||
batchOrderList: [],
|
||||
// 批量订单总数
|
||||
batchOrderTotal: 0,
|
||||
// 批量订单加载状态
|
||||
batchOrderLoading: false,
|
||||
// 批量明细列表
|
||||
batchItemList: [],
|
||||
// 批量明细加载状态
|
||||
batchItemLoading: false,
|
||||
// 选中的合同
|
||||
selectedContract: null,
|
||||
// 选中的明细
|
||||
selectedBatchItems: []
|
||||
};
|
||||
},
|
||||
created() {
|
||||
@@ -582,6 +676,98 @@ export default {
|
||||
// 处理订单行点击
|
||||
handleOrderSelect(row) {
|
||||
this.selectOrder(row);
|
||||
},
|
||||
// 打开批量新增对话框
|
||||
handleBatchAdd() {
|
||||
this.batchAddDialogVisible = true;
|
||||
this.selectedContract = null;
|
||||
this.selectedBatchItems = [];
|
||||
this.getBatchOrderList();
|
||||
},
|
||||
// 获取批量订单列表
|
||||
getBatchOrderList() {
|
||||
this.batchOrderLoading = true;
|
||||
listOrder(this.batchQueryParams).then(response => {
|
||||
this.batchOrderList = response.rows;
|
||||
this.batchOrderTotal = response.total;
|
||||
this.batchOrderLoading = false;
|
||||
});
|
||||
},
|
||||
// 重置批量查询参数
|
||||
resetBatchQuery() {
|
||||
this.batchQueryParams = {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
contractCode: undefined,
|
||||
customerName: undefined,
|
||||
salesman: undefined
|
||||
};
|
||||
this.getBatchOrderList();
|
||||
},
|
||||
// 选择批量合同
|
||||
selectBatchContract(row) {
|
||||
this.selectedContract = row;
|
||||
this.selectedBatchItems = [];
|
||||
this.batchItemLoading = true;
|
||||
listOrderItem({ orderId: row.orderId }).then(res => {
|
||||
this.batchItemList = res.rows;
|
||||
this.batchItemLoading = false;
|
||||
});
|
||||
},
|
||||
// 处理批量明细选择变更
|
||||
handleBatchItemSelectionChange(selection) {
|
||||
this.selectedBatchItems = selection;
|
||||
},
|
||||
// 确认批量新增
|
||||
confirmBatchAdd() {
|
||||
if (this.selectedBatchItems.length === 0) {
|
||||
this.$message.warning('请至少选择一条明细');
|
||||
return;
|
||||
}
|
||||
|
||||
this.$confirm(`确认新增 ${this.selectedBatchItems.length} 条明细?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
const currentMaxSeqNo = this.planDetailList.length > 0
|
||||
? Math.max(...this.planDetailList.map(item => parseInt(item.bizSeqNo) || 0))
|
||||
: 0;
|
||||
|
||||
const addPromises = this.selectedBatchItems.map((item, index) => {
|
||||
const newRow = {
|
||||
planSheetId: this.currentPlanSheetId,
|
||||
bizSeqNo: currentMaxSeqNo + index + 1,
|
||||
orderCode: this.selectedContract.orderCode,
|
||||
contractCode: this.selectedContract.contractCode,
|
||||
customerName: this.selectedContract.companyName,
|
||||
salesman: this.selectedContract.salesman,
|
||||
orderId: this.selectedContract.orderId,
|
||||
productName: item.productType,
|
||||
productMaterial: item.material,
|
||||
productWidth: item.width,
|
||||
rollingThick: item.thickness,
|
||||
markCoatThick: item.thickness,
|
||||
tonSteelLengthRange: 0,
|
||||
planQty: item.productNum,
|
||||
planWeight: item.weight,
|
||||
surfaceTreatment: item.surfaceTreatment,
|
||||
productPackaging: item.packagingReq,
|
||||
widthReq: item.edgeCuttingReq,
|
||||
productEdgeReq: item.widthTolerance,
|
||||
usageReq: item.purpose
|
||||
};
|
||||
return addPlanDetail(newRow);
|
||||
});
|
||||
|
||||
Promise.all(addPromises).then(() => {
|
||||
this.$message.success('批量新增成功');
|
||||
this.batchAddDialogVisible = false;
|
||||
this.getList();
|
||||
}).catch(error => {
|
||||
this.$message.error('批量新增失败');
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -654,4 +840,25 @@ export default {
|
||||
/* ::v-deep .el-input__inner {
|
||||
padding: 0 1px;
|
||||
} */
|
||||
|
||||
.batch-add-content {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.contract-section {
|
||||
margin-bottom: 30px;
|
||||
padding-bottom: 20px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.item-section {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 15px;
|
||||
color: #303133;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user