From 23930765ba52a235c49944cdc210f0196a7853df Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期三, 11 二月 2026 14:12:30 +0800
Subject: [PATCH] Merge branch 'dev_New' of http://114.132.189.42:9002/r/product-inventory-management into dev_New
---
src/views/procurementManagement/procurementInvoiceLedger/index.vue | 31 ++++++++++-----
src/views/salesManagement/invoiceRegistration/index.vue | 62 ++++++++++++++++++++++++++-----
2 files changed, 73 insertions(+), 20 deletions(-)
diff --git a/src/views/procurementManagement/procurementInvoiceLedger/index.vue b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
index 00ae65a..d82e3e7 100644
--- a/src/views/procurementManagement/procurementInvoiceLedger/index.vue
+++ b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -237,21 +237,32 @@
}
);
-// 涓昏〃鍚堣鏂规硶
const summarizeMainTable = (param) => {
- return proxy.summarizeTable(
+ const sums = proxy.summarizeTable(
param,
- [
- "taxInclusiveTotalPrice",
- "ticketsAmount",
- "unTicketsPrice",
- "invoiceAmount",
- ],
+ ["ticketsAmount", "unTicketsPrice", "invoiceAmount"],
{
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ ticketsNum: { noDecimal: true },
+ futureTickets: { noDecimal: true },
}
);
+
+ const keySet = new Set();
+ let taxInclusiveSum = 0;
+ (param.data || []).forEach((row) => {
+ const key = `${row.purchaseContractNumber ?? ""}\n${row.salesContractNo ?? ""}\n${row.productCategory ?? ""}\n${row.specificationModel ?? ""}`;
+ if (keySet.has(key)) return;
+ keySet.add(key);
+ const val = Number(row.taxInclusiveTotalPrice);
+ if (!isNaN(val)) taxInclusiveSum += val;
+ });
+ const taxInclusiveIndex = (param.columns || []).findIndex(
+ (c) => c.property === "taxInclusiveTotalPrice"
+ );
+ if (taxInclusiveIndex !== -1) {
+ sums[taxInclusiveIndex] = taxInclusiveSum.toFixed(2);
+ }
+ return sums;
};
const handleSelectionChange = (val) => {
diff --git a/src/views/salesManagement/invoiceRegistration/index.vue b/src/views/salesManagement/invoiceRegistration/index.vue
index 9cc1d66..2f6e60c 100644
--- a/src/views/salesManagement/invoiceRegistration/index.vue
+++ b/src/views/salesManagement/invoiceRegistration/index.vue
@@ -30,7 +30,12 @@
<div class="flex justify-between">
<div></div>
<div>
- <el-button type="primary" @click="openForm" style="margin-bottom: 8px">
+ <el-button
+ type="primary"
+ @click="openForm"
+ style="margin-bottom: 8px"
+ :disabled="!canInvoice"
+ >
寮�绁ㄧ櫥璁�
</el-button>
</div>
@@ -296,10 +301,14 @@
/>
<el-table-column label="鏈寮�绁ㄦ暟" prop="currentInvoiceNum" width="180">
<template #default="scope">
- <el-input-number :step="0.1" :min="0" style="width: 100%"
- :precision="2"
- v-model="scope.row.currentInvoiceNum"
- @change="invoiceNumBlur(scope.row)"
+ <el-input-number
+ :step="0.1"
+ :min="0"
+ style="width: 100%"
+ :precision="2"
+ v-model="scope.row.currentInvoiceNum"
+ @change="invoiceNumBlur(scope.row)"
+ :disabled="isProductInvoiceDisabled(scope.row)"
></el-input-number>
</template>
</el-table-column>
@@ -309,10 +318,14 @@
width="180"
>
<template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%"
- :precision="2"
- v-model="scope.row.currentInvoiceAmount"
- @change="invoiceAmountBlur(scope.row)"
+ <el-input-number
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ :precision="2"
+ v-model="scope.row.currentInvoiceAmount"
+ @change="invoiceAmountBlur(scope.row)"
+ :disabled="isProductInvoiceDisabled(scope.row)"
></el-input-number>
</template>
</el-table-column>
@@ -375,7 +388,7 @@
<script setup>
import pagination from "@/components/PIMTable/Pagination.vue";
import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { onMounted, ref } from "vue";
+import { onMounted, ref, computed } from "vue";
import { Search } from "@element-plus/icons-vue";
import { ElMessageBox } from "element-plus";
// import {userListNoPage} from "@/api/system/user.js";
@@ -450,6 +463,27 @@
const formattedInputNumber = (value) => {
return value ? parseFloat(value).toFixed(2) : 0;
+};
+
+// 鍒ゆ柇鏄惁鍙互寮�绁紙鍩轰簬閫変腑鐨勫彴璐︽暟鎹級
+const canInvoice = computed(() => {
+ if (selectedRows.value.length === 0) {
+ return false;
+ }
+ // 妫�鏌ユ墍鏈夐�変腑鐨勫彴璐︼紝鍙鏈変竴涓湭寮�绁ㄩ噾棰濆ぇ浜�0锛屽氨鍙互寮�绁�
+ return selectedRows.value.some(row => {
+ const noInvoiceAmount = parseFloat(row.noInvoiceAmountTotal || 0);
+ return noInvoiceAmount > 0;
+ });
+});
+
+// 鍒ゆ柇鍗曚釜浜у搧鏄惁鍙互寮�绁�
+const isProductInvoiceDisabled = (row) => {
+ // 妫�鏌ユ湭寮�绁ㄩ噾棰濆拰鏈紑绁ㄦ暟锛屽鏋滈兘涓�0鎴栧皬浜庣瓑浜�0锛屽垯绂佺敤
+ // 浼樺厛浣跨敤 tempnoInvoiceAmount 鍜� tempNoInvoiceNum锛堝垵濮嬪�硷級锛屽鏋滄病鏈夊垯浣跨敤 noInvoiceAmount 鍜� originalNoInvoiceNum
+ const noInvoiceAmount = parseFloat(row.tempnoInvoiceAmount || row.noInvoiceAmount || 0);
+ const noInvoiceNum = parseFloat(row.tempNoInvoiceNum || row.originalNoInvoiceNum || row.noInvoiceNum || 0);
+ return noInvoiceAmount <= 0 || noInvoiceNum <= 0;
};
// 鏌ヨ鍒楄〃
@@ -579,6 +613,14 @@
productData.value = allProductData;
+ // 瀵逛簬涓嶈兘寮�绁ㄧ殑浜у搧锛屽皢寮�绁ㄦ暟鍜屽紑绁ㄩ噾棰濊缃负0
+ productData.value.forEach(item => {
+ if (isProductInvoiceDisabled(item)) {
+ item.currentInvoiceNum = 0;
+ item.currentInvoiceAmount = 0;
+ }
+ });
+
dialogFormVisible.value = true;
console.log("productData.value ", productData.value);
});
--
Gitblit v1.9.3