From 5952d34811ee82e797ef0070f84ff041381072a5 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 10 三月 2026 17:52:40 +0800
Subject: [PATCH] 新增采购退货单增加费用等数据
---
src/views/procurementManagement/purchaseReturnOrder/New.vue | 280 ++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 203 insertions(+), 77 deletions(-)
diff --git a/src/views/procurementManagement/purchaseReturnOrder/New.vue b/src/views/procurementManagement/purchaseReturnOrder/New.vue
index 1fccb11..d2fe2a9 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/New.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/New.vue
@@ -3,10 +3,14 @@
<el-dialog
v-model="isShow"
title="鏂板閲囪喘閫�璐�"
- width="1200"
+ width="1600"
@close="closeModal"
>
<el-form label-width="140px" :model="formState" label-position="top" ref="formRef" :inline="true">
+ <div class="section-title">
+ <span class="title-dot"></span>
+ <span class="title-text">鍩烘湰淇℃伅</span>
+ </div>
<el-form-item
label="閫�鏂欏崟鍙�"
prop="no"
@@ -231,78 +235,138 @@
>
<el-input v-model="formState.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�"/>
</el-form-item>
- </el-form>
- <el-button type="primary" size="small" style="margin-bottom: 10px;" @click="isShowProductsModal = true" :disabled="!formState.purchaseLedgerId">娣诲姞浜у搧</el-button>
- <el-table :data="products" border>
- <el-table-column align="center"
- type="selection"
- width="55" />
- <el-table-column align="center"
- label="搴忓彿"
- type="index"
- width="60" />
- <el-table-column label="浜у搧澶х被"
- prop="productCategory" />
- <el-table-column label="瑙勬牸鍨嬪彿"
- prop="specificationModel" />
- <el-table-column label="鍗曚綅"
- prop="unit"
- width="70" />
- <el-table-column label="鏁伴噺"
- prop="quantity"
- width="70" />
- <el-table-column label="搴撳瓨棰勮鏁伴噺"
- prop="warnNum"
- width="120"
- show-overflow-tooltip />
- <el-table-column label="绋庣巼(%)"
- prop="taxRate"
- width="80" />
- <el-table-column label="鍚◣鍗曚环(鍏�)"
- prop="taxInclusiveUnitPrice"
- :formatter="formattedNumber"
- width="150" />
- <el-table-column label="鍚◣鎬讳环(鍏�)"
- prop="taxInclusiveTotalPrice"
- :formatter="formattedNumber"
- width="150" />
- <el-table-column label="涓嶅惈绋庢�讳环(鍏�)"
- prop="taxExclusiveTotalPrice"
- :formatter="formattedNumber"
- width="150" />
- <el-table-column label="鏄惁璐ㄦ"
- prop="isChecked"
- width="150">
- <template #default="scope">
- <el-tag :type="scope.row.isChecked ? 'success' : 'info'">
- {{ scope.row.isChecked ? '鏄�' : '鍚�' }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column fixed="right"
- label="鎿嶄綔"
- width="120"
- align="center">
- <template #default="scope">
- <el-button
- link
- type="primary"
- size="small"
- >
- 缂栬緫
- </el-button>
- <el-button
- link
- type="danger"
- size="small"
- @click="delProduct(scope.$index)"
- >
- 鍒犻櫎
- </el-button>
- </template>
- </el-table-column>
- </el-table>
+ <div style="margin: 20px 0;">
+ <div class="section-title">
+ <span class="title-dot"></span>
+ <span class="title-text">浜у搧鍒楄〃</span>
+ </div>
+ <el-button type="primary" size="small" style="margin-bottom: 20px" @click="isShowProductsModal = true" :disabled="!formState.purchaseLedgerId">娣诲姞浜у搧</el-button>
+ <el-table :data="formState.purchaseReturnOrderProductsDtos"
+ border
+ max-height="400"
+ :scroll-y="true"
+ show-summary
+ :summary-method="summarizeChildrenTable">
+ <el-table-column align="center"
+ type="selection"
+ width="55" />
+ <el-table-column align="center"
+ label="搴忓彿"
+ type="index"
+ width="60" />
+ <el-table-column label="浜у搧澶х被"
+ prop="productCategory" />
+ <el-table-column label="瑙勬牸鍨嬪彿"
+ prop="specificationModel" />
+ <el-table-column label="鍗曚綅"
+ prop="unit"
+ width="70" />
+ <el-table-column label="鏁伴噺"
+ prop="quantity"
+ width="70" />
+ <el-table-column label="閫�璐ф暟閲�"
+ prop="returnQuantity"
+ width="180">
+ <template #default="scope">
+ <el-input-number v-model="scope.row.returnQuantity"
+ controls-position="right"
+ :step="1"
+ :min="1"
+ :max="scope.row.quantity"
+ required
+ placeholder="璇疯緭鍏ラ��璐ф暟閲�" />
+ </template>
+ </el-table-column>
+ <el-table-column label="搴撳瓨棰勮鏁伴噺"
+ prop="warnNum"
+ width="120"
+ show-overflow-tooltip />
+ <el-table-column label="绋庣巼(%)"
+ prop="taxRate"
+ width="80" />
+ <el-table-column label="鍚◣鍗曚环(鍏�)"
+ prop="taxInclusiveUnitPrice"
+ :formatter="formattedNumber"
+ width="150" />
+ <el-table-column label="鍚◣鎬讳环(鍏�)"
+ prop="taxInclusiveTotalPrice"
+ :formatter="formattedNumber"
+ width="150" />
+ <el-table-column label="涓嶅惈绋庢�讳环(鍏�)"
+ prop="taxExclusiveTotalPrice"
+ :formatter="formattedNumber"
+ width="150" />
+ <el-table-column label="鏄惁璐ㄦ"
+ prop="isChecked"
+ width="150">
+ <template #default="scope">
+ <el-tag :type="scope.row.isChecked ? 'success' : 'info'">
+ {{ scope.row.isChecked ? '鏄�' : '鍚�' }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column fixed="right"
+ label="鎿嶄綔"
+ width="100"
+ align="center">
+ <template #default="scope">
+ <el-button
+ link
+ type="danger"
+ size="small"
+ @click="delProduct(scope.$index)"
+ >
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
+ <div class="section-title">
+ <span class="title-dot"></span>
+ <span class="title-text">璐圭敤淇℃伅</span>
+ </div>
+
+ <el-form-item
+ label="鏁村崟鎶樻墸棰濓細"
+ prop="totalDiscountAmount"
+ >
+ <el-input-number v-model="formState.totalDiscountAmount"
+ controls-position="right"
+ :step="0.01"
+ :precision="2"
+ style="width: 100%;"
+ @change="handleChangeTotalDiscountAmount"
+ placeholder="璇疯緭鍏ユ暣鍗曟姌鎵i"/>
+ </el-form-item>
+
+ <el-form-item
+ label="鏁村崟鎶樻墸鐜囷細"
+ prop="totalDiscountAmount"
+ >
+ <el-input-number v-model="formState.totalDiscountRate"
+ controls-position="right"
+ :step="0.01"
+ :precision="2"
+ style="width: 100%;"
+ placeholder="璇疯緭鍏ユ暣鍗曟姌鎵g巼"/>
+ </el-form-item>
+
+ <el-form-item
+ label="鎴愪氦閲戦锛�"
+ prop="totalAmount"
+ >
+ <el-input-number v-model="formState.totalAmount"
+ controls-position="right"
+ :step="0.01"
+ :precision="2"
+ style="width: 100%;"
+ @change="handleChangeTotalAmount"
+ placeholder="璇疯緭鍏ユ垚浜ら噾棰�"/>
+ </el-form-item>
+ </el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleSubmit">纭</el-button>
@@ -349,6 +413,10 @@
preparedUserId: undefined,
returnUserId: undefined,
purchaseLedgerId: undefined,
+ purchaseReturnOrderProductsDtos: [],
+ totalDiscountAmount: 0,
+ totalDiscountRate: undefined,
+ totalAmount: 0,
});
// 渚涘簲鍟嗛�夐」
const supplierOptions = ref([])
@@ -381,8 +449,6 @@
const userOptions = ref([])
// 閲囪喘鍙拌处閫夐」
const purchaseLedgerOptions = ref([])
-// 浜у搧鍒楄〃鏁版嵁
-const products = ref([])
// 鏄惁灞曠ず浜у搧鍒楄〃鏁版嵁
const isShowProductsModal = ref(false)
@@ -402,6 +468,31 @@
const closeModal = () => {
isShow.value = false;
};
+
+const summarizeChildrenTable = (param) => {
+ return proxy.summarizeTable(
+ param,
+ [
+ "quantity",
+ "returnQuantity",
+ "taxInclusiveUnitPrice",
+ "taxInclusiveTotalPrice",
+ "taxExclusiveTotalPrice",
+ ],
+ {
+ quantity: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ returnQuantity: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ }
+ );
+};
+
+const handleChangeTotalDiscountAmount= () => {
+ formState.value.totalAmount = formState.value.totalDiscountAmount * -1
+}
+
+const handleChangeTotalAmount= () => {
+ formState.value.totalDiscountAmount = formState.value.totalAmount * -1
+}
// 鑾峰彇渚涘簲鍟嗛�夐」
const fetchSupplierOptions = () => {
@@ -449,7 +540,7 @@
// 澶勭悊鏀瑰彉閲囪喘鍙拌处鏁版嵁
const handleChangePurchaseLedgerId = () => {
- products.value = []
+ formState.value.purchaseReturnOrderProductsDtos = []
}
// 澶勭悊鏀瑰彉鏄惁榛樿缂栧彿
@@ -461,16 +552,29 @@
// 澧炲姞浜у搧
const handleAddProduct = (selectedRows) => {
- products.value.push(...selectedRows)
+ const existingIds = new Set(formState.value.purchaseReturnOrderProductsDtos.map(item => item.id));
+ const newProducts = selectedRows.filter(item => !existingIds.has(item.id)).map(item => ({
+ ...item,
+ returnQuantity: undefined,
+ salesLedgerProductId: item.id,
+ }));
+ formState.value.purchaseReturnOrderProductsDtos.push(...newProducts);
}
// 鍒犻櫎鍗曢」浜у搧
const delProduct = (index) => {
- products.value.splice(index, 1)
+ formState.value.purchaseReturnOrderProductsDtos.splice(index, 1)
}
// 鎻愪氦琛ㄥ崟
const handleSubmit = () => {
+ // 楠岃瘉閫�璐ф暟閲�
+ const hasEmptyReturnQuantity = formState.value.purchaseReturnOrderProductsDtos.some(item => !item.returnQuantity || item.returnQuantity <= 0);
+ if (hasEmptyReturnQuantity) {
+ proxy.$modal.msgError("璇蜂负鎵�鏈変骇鍝佸~鍐欓��璐ф暟閲�");
+ return;
+ }
+
proxy.$refs["formRef"].validate(valid => {
if (valid) {
createPurchaseReturnOrder(formState.value).then(res => {
@@ -490,3 +594,25 @@
isShow,
});
</script>
+
+<style scoped lang="scss">
+.section-title {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ width: 100%;
+ clear: both;
+}
+
+.title-dot {
+ display: inline-block;
+ width: 8px;
+ height: 8px;
+ background-color: #409EFF;
+ border-radius: 50%;
+ margin-right: 8px;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3