Browse Source

fix(订单表单): 修复金额计算问题并优化物料导入逻辑

yz 1 month ago
parent
commit
441b4aca82

+ 14 - 7
src/components/order-form/material-detail-table.vue

@@ -111,6 +111,7 @@
             size="mini"
             style="width: 100%"
             placeholder="请输入税率"
+            :disabled="true"
             @input="validateFloatInput($event, scope.row, 'taxRate', 0, 100)"
             @blur="validateAndFormatFloatOnBlur(scope.row, 'taxRate', 0, 100); handleTaxRateChange(scope.row, scope.$index)"
           />
@@ -125,6 +126,7 @@
             size="mini"
             style="width: 100%"
             placeholder="请输入税额"
+            :disabled="true"
             @input="validateFloatInput($event, scope.row, 'taxAmount')"
             @blur="validateAndFormatFloatOnBlur(scope.row, 'taxAmount'); handleTaxAmountChange(scope.row, scope.$index)"
           />
@@ -139,6 +141,7 @@
             size="mini"
             style="width: 100%"
             placeholder="请输入总金额"
+            :disabled="true"
             @input="validateFloatInput($event, scope.row, 'totalAmount')"
             @blur="validateAndFormatFloatOnBlur(scope.row, 'totalAmount'); handleTotalAmountChange(scope.row, scope.$index)"
           />
@@ -601,27 +604,31 @@ export default {
         this.$message.warning('请先选择要导入的物料')
         return
       }
-
+  
       // 查找选中的物料数据
       const selectedMaterial = this.materialOptions.find(item => item.id === this.selectedMaterialId)
       if (!selectedMaterial) {
         this.$message.warning('未找到选中的物料数据')
         return
       }
-
+  
       // 检查是否已存在相同物料
       const existingMaterial = this.materialDetails.find(item => item.itemCode === selectedMaterial.itemCode)
       if (existingMaterial) {
         this.$message.warning(`物料 ${selectedMaterial.itemName} 已存在,请勿重复导入`)
         return
       }
-
+  
       // 构造物料明细数据
-      const materialDetail = this.prepareMaterialDetailData(selectedMaterial)
-
+      let materialDetail = this.prepareMaterialDetailData(selectedMaterial)
+      
+      // 导入时自动计算金额
+      materialDetail = this.calculateAmounts(materialDetail)
+  
       // 触发导入事件
       this.$emit(MATERIAL_DETAIL_EVENTS.MATERIAL_IMPORT, [materialDetail])
-
+      this.$emit(MATERIAL_DETAIL_EVENTS.REFRESH)
+  
       // 清空选择
       this.selectedMaterialId = null
       this.materialOptions = []
@@ -635,7 +642,6 @@ export default {
      * @private
      */
     prepareMaterialDetailData(material) {
-        console.log('material', material)
       return {
         id: this.generateUniqueId(),
         itemId: material.itemId,
@@ -1164,3 +1170,4 @@ export default {
   }
 }
 </style>
+

+ 11 - 4
src/components/order-form/order-form-mixin.js

@@ -1218,8 +1218,14 @@ export default {
           formatted.orderQuantity = quantityValidation.isValid ? Math.round(quantityValidation.value) : 1
           formatted.unitPrice = priceValidation.isValid ? preciseRound(priceValidation.value, 2) : 0
           formatted.taxRate = rateValidation.isValid && rateValidation.value > 0 ? preciseRound(rateValidation.value, 4) : 13
-          formatted.taxAmount = taxAmountValidation.isValid ? preciseRound(taxAmountValidation.value, 2) : 0
-          formatted.totalAmount = amountValidation.isValid ? preciseRound(amountValidation.value, 2) : 0
+
+          // Calculate total amount
+          const totalAmount = preciseMultiply(formatted.orderQuantity, formatted.unitPrice)
+          formatted.totalAmount = preciseRound(totalAmount, 2)
+
+          // Calculate tax amount
+          const taxAmount = preciseDivide(preciseMultiply(totalAmount, formatted.taxRate), 100)
+          formatted.taxAmount = preciseRound(taxAmount, 2)
 
           return formatted
         })
@@ -1266,8 +1272,9 @@ export default {
      * @this {import('./types').OrderFormMixinComponent}
      */
     handleMaterialChange(materialDetails) {
-      this.materialDetails = materialDetails
-      // 可以在这里添加其他业务逻辑,如计算订单总金额等
+      if (Array.isArray(materialDetails)) {
+        this.materialDetails = materialDetails
+      }
       this.calculateOrderTotal()
     },
 

+ 1 - 0
src/components/order-form/order-form.vue

@@ -320,3 +320,4 @@ export default {
   }
 }
 </style>
+