|
@@ -61,18 +61,15 @@ import { getFormOption } from './form-option'
|
|
|
import MaterialDetailTable from './material-detail-table.vue'
|
|
|
|
|
|
/**
|
|
|
- * @typedef {import('@/api/order/order-item').OrderItemRecord} OrderItemRecord
|
|
|
- * @typedef {import('./constants').OrderFormModel} OrderFormModel
|
|
|
- * @typedef {import('./constants').MaterialDetailRecord} MaterialDetailRecord
|
|
|
- * @typedef {import('./constants').MaterialDeleteEventData} MaterialDeleteEventData
|
|
|
+ * @typedef {import('./types').OrderFormModel} OrderFormModel
|
|
|
+ * @typedef {import('./types').MaterialDetailRecord} MaterialDetailRecord
|
|
|
+ * @typedef {import('./types').MaterialUpdateEventData} MaterialUpdateEventData
|
|
|
+ * @typedef {import('./types').MaterialDeleteEventData} MaterialDeleteEventData
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* 订单表单组件
|
|
|
- * @description 基于AvueJS的订单表单组件,支持新增和编辑订单功能
|
|
|
- * @author 系统开发团队
|
|
|
- * @version 2.0.0
|
|
|
- * @since 2024-01-15
|
|
|
+ * @description 基于AvueJS的订单表单组件,支持新增和编辑订单功能,包含物料明细管理和自动计算功能
|
|
|
*/
|
|
|
export default {
|
|
|
name: 'OrderForm',
|
|
@@ -91,10 +88,10 @@ export default {
|
|
|
data() {
|
|
|
return {
|
|
|
/**
|
|
|
- * 物料明细列表
|
|
|
- * @type {MaterialDetailRecord[]}
|
|
|
- * @description 存储当前订单的物料明细数据,包含数据来源和删除权限标识
|
|
|
- */
|
|
|
+ * 物料明细列表
|
|
|
+ * @type {MaterialDetailRecord[]}
|
|
|
+ * @description 存储当前订单的物料明细数据,包含数据来源和删除权限标识
|
|
|
+ */
|
|
|
materialDetails: []
|
|
|
}
|
|
|
},
|
|
@@ -234,8 +231,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 处理物料明细数据变化
|
|
|
- * @description 当物料明细表格数据发生变化时的回调处理
|
|
|
- * @param {OrderItemRecord[]} materialDetails - 更新后的物料明细列表
|
|
|
+ * @description 当物料明细表格数据发生变化时的回调处理,自动重新计算订单总金额和总数量
|
|
|
+ * @param {MaterialDetailRecord[]} materialDetails - 更新后的物料明细列表
|
|
|
* @returns {void}
|
|
|
*/
|
|
|
handleMaterialChange(materialDetails) {
|
|
@@ -246,8 +243,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 处理物料导入事件
|
|
|
- * @description 当从物料导入弹窗确认导入物料时的回调处理
|
|
|
- * @param {OrderItemRecord[]} importedMaterials - 导入的物料列表
|
|
|
+ * @description 当从物料导入弹窗确认导入物料时的回调处理,自动重新计算订单总金额和总数量
|
|
|
+ * @param {MaterialDetailRecord[]} importedMaterials - 导入的物料列表
|
|
|
* @returns {void}
|
|
|
*/
|
|
|
handleMaterialImport(importedMaterials) {
|
|
@@ -262,10 +259,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 处理物料明细更新事件
|
|
|
- * @description 当物料明细表格中的数据被编辑时的回调处理
|
|
|
- * @param {Object} updateData - 更新数据对象
|
|
|
- * @param {MaterialDetailRecord} updateData.row - 更新后的行数据
|
|
|
- * @param {number} updateData.index - 行索引
|
|
|
+ * @description 当物料明细表格中的数据被编辑时的回调处理,自动重新计算订单总金额和总数量
|
|
|
+ * @param {MaterialUpdateEventData} updateData - 更新数据对象
|
|
|
* @returns {void}
|
|
|
*/
|
|
|
handleMaterialUpdate({ row, index }) {
|
|
@@ -279,23 +274,30 @@ export default {
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
- * 计算订单总金额
|
|
|
- * @description 根据物料明细计算订单总金额并更新表单数据
|
|
|
+ * 计算订单总金额和总数量
|
|
|
+ * @description 根据物料明细计算订单总金额、总数量、总税额并更新表单数据
|
|
|
* @returns {void}
|
|
|
*/
|
|
|
calculateOrderTotal() {
|
|
|
+ // 计算订单总金额
|
|
|
const totalAmount = this.materialDetails.reduce((sum, item) => {
|
|
|
return sum + (Number(item.totalAmount) || 0)
|
|
|
}, 0)
|
|
|
|
|
|
+ // 计算订单总数量
|
|
|
+ const totalQuantity = this.materialDetails.reduce((sum, item) => {
|
|
|
+ return sum + (Number(item.orderQuantity) || 0)
|
|
|
+ }, 0)
|
|
|
+
|
|
|
// 计算总税额
|
|
|
const totalTaxAmount = this.materialDetails.reduce((sum, item) => {
|
|
|
return sum + (Number(item.taxAmount) || 0)
|
|
|
}, 0)
|
|
|
|
|
|
- // 更新表单中的总金额和税额字段
|
|
|
+ // 更新表单中的总金额、总数量和税额字段
|
|
|
if (this.formData) {
|
|
|
this.$set(this.formData, 'totalAmount', Math.round(totalAmount * 100) / 100)
|
|
|
+ this.$set(this.formData, 'totalQuantity', Math.round(totalQuantity))
|
|
|
this.$set(this.formData, 'totalTaxAmount', Math.round(totalTaxAmount * 100) / 100)
|
|
|
}
|
|
|
}
|