订单表单页,明细模块的订阅事件
销售单价的订阅事件
<script setup> const [listData, index, headerInfo, emits, props, BigNumber, form, callback] = arguments if (callback.triggerAllEvevt) { // 如果是执行的全量订阅事件, 一行只需执行一个单元格的订阅事件就行,当前单元格的订阅事件不执行 return } if (listData.length === 0) { emits('dataValChangeEffectForm', [ { instanceCode: 'C_FID_yjjrmizgyl', value: 0 }, { instanceCode: 'C_FID_ztaiyxmp2n', value: 0 }, { instanceCode: 'C_FID_ev1di6fflq', value: 0 }, { instanceCode: 'C_FID_t3zs56rxeh', value: 0 } ]) return } function getInsCode(apiName) { return props.tableColumns.find((v) => v.apiName === apiName)?.instanceCode } // 数量 let num = getInsCode('c_amount') let numKey = listData[index][num]?.key || 0 // 指导价格(单价,价目表价格,原价) let guidePrice = getInsCode('c_guiding_price') let guidePriceKey = listData[index][guidePrice]?.key || 0 // 销售单价 let salesUnitPrice = getInsCode('c_selling_price') let salesUnitPriceKey = listData[index][salesUnitPrice]?.key || 0 // 销售总价 let totalPrice = getInsCode('c_total_prices') let totalPriceKey = listData[index][totalPrice]?.key || 0 // 增值税税率 let taxRate = getInsCode('c_value_added_tax_rate') let taxRateKey = listData[index][taxRate]?.key || 0 // 增值税税额 let tax = getInsCode('c_value_added_tax') let taxKey = listData[index][tax]?.key || 0 // 折扣额 let discountAmount = getInsCode('c_discount') let discountAmountKey = listData[index][discountAmount]?.key || 0 // 折扣率 let discountRate = getInsCode('c_discount_rate') // 原价合计 let originalCost = getInsCode('c_original_cost') let originalCostKey = listData[index][originalCost]?.key || 0 // 当前行的子项集合 let theRowChildren = listData.filter((item) => item.parentId === listData[index]?.id?.key) // if (!listData[index]?.parentId && theRowChildren.length) { // // 当前为父产品 且 有子项(排除独立售卖产品) // listData[index][guidePrice] = {key: null, value: null} // 清空单价 // listData[index][salesUnitPrice] = {key: null, value: null} // 清空销售单价 // listData[index][product_cost_unit_price] = {key: null, value: null} // 清空成本单价(含税) // return emits('emitEditTableData', callback.intoTree(listData, 'id.key')) // } // 销售总价 = 数量*销售单价 let _total1 = new BigNumber(numKey || 0).times(salesUnitPriceKey).toFixed(2) listData[index][totalPrice] = { ...listData[index][totalPrice], key: _total1, value: _total1 } // 原价合计 = 指导价格*数量 let _total2 = new BigNumber(numKey).times(guidePriceKey).toFixed(2) listData[index][originalCost] = { ...listData[index][originalCost], key: _total2, value: _total2 } // 折扣额 = (指导价格-销售单价)*数量 let _total3 = new BigNumber(_total2).minus(_total1).toFixed(2) listData[index][discountAmount] = { ...listData[index][discountAmount], key: _total3, value: _total3 } /** * 折扣率 = 销售单价除以原价单价(指导价格) */ let _total5 = guidePriceKey ? new BigNumber(salesUnitPriceKey).div(guidePriceKey).times(100).toFixed(2) : null listData[index][discountRate] = { ...listData[index][discountRate], key: _total5, value: _total5 } // 增值税税额 = 销售总价/(1+增值税税率)* 增值税税率 let _total4 = new BigNumber(_total1) .div(new BigNumber(taxRateKey).div(100).plus(1)) .times(new BigNumber(taxRateKey).div(100)) .toFixed(2) listData[index][tax] = { ...listData[index][tax], key: _total4, value: _total4 } // callback?.emitEditTableData?.() emits('emitEditTableData', callback.intoTree(listData, 'id.key')) /* 计算去除组件产品后的所有产品的合计----------- */ // orderTotalPrice 订单金额 // originTotalPrice 原价合计 // diffTotalRate 整单折扣 // allTotalPrice 总折扣额 let orderTotalPrice = 0 let originTotalPrice = 0 let diffTotalRate = 100 let allTotalPrice = 0 // 与主产品关系是否是组件item.C_FID_hvwwzmxlqf?.key == 'C_ST_0' listData.forEach((cur) => { if (cur.C_FID_hvwwzmxlqf?.key !== 'C_ST_0') { orderTotalPrice = new BigNumber(orderTotalPrice).plus(Number(cur[totalPrice]?.key || 0)) originTotalPrice = new BigNumber(originTotalPrice).plus(Number(cur[originalCost]?.key || 0)) } }) allTotalPrice = new BigNumber(originTotalPrice).minus(orderTotalPrice).toFixed(2) diffTotalRate = originTotalPrice != 0 ? new BigNumber(orderTotalPrice).div(originTotalPrice).times(100).toFixed(2) : null emits('dataValChangeEffectForm', [ { instanceCode: 'C_FID_yjjrmizgyl', value: orderTotalPrice.toFixed(2) }, // 订单金额 { instanceCode: 'C_FID_ztaiyxmp2n', value: originTotalPrice.toFixed(2) }, // 原价合计 { instanceCode: 'C_FID_ev1di6fflq', value: allTotalPrice }, // 总折扣额 { instanceCode: 'C_FID_t3zs56rxeh', value: diffTotalRate } // 整单折扣 ]) // emits('emitEditTableData', callback.intoTree(listData, 'id.key')) </script>
数量的订阅事件
<script setup> const [listData, index, headerInfo, emits, props, BigNumber, form, callback] = arguments function getInsCode(apiName) { return props.tableColumns.find((v) => v.apiName === apiName)?.instanceCode } // 数量 const num = getInsCode('c_num') const numVal = listData[index][num]?.key || 0 // 销售单价 const salesUnitPrice = getInsCode('c_sales_unit_price') // 与主产品关系 const relationship = getInsCode('c_type') // 主子数量倍率 const quantityMultiplier = getInsCode('c_count') const quantityMultiplierVal = listData[index][quantityMultiplier]?.key || 1 /* ---------------------------------计算主表合计---------------------------------- */ // 当前行的子项集合 let theRowChildren = [] // 当前行的组件子项集合 let theRowCompChildren = [] // 总数量 let totalCount = 0 // 与主产品关系是否是组件 item[relationship]?.key == 'C_ST_0' listData.forEach((cur, cIndex) => { if (cur.parentId === listData[index]?.id?.key) { // 记录子项 theRowChildren.push(cur) // 记录组件子项 cur[relationship]?.key == 'C_ST_0' && theRowCompChildren.push({ ...cur, originIndex: cIndex }) } }) /*----------------------------------计算数量相关-----------------------------------*/ if (!callback.triggerAllEvevt) { // 如果不是执行的全量订阅事件(只是修改了数量) 才需要进行数量计算 if (!listData[index]?.parentId && theRowCompChildren.length) { // 主产品 且 有组件子项(排除独立售卖产品) theRowCompChildren.forEach((item) => { const newNum = new BigNumber(numVal || 1).times(item[quantityMultiplier]?.key).toNumber() listData[item.originIndex][num] = { key: newNum, value: newNum } callback?.dataValueChangeTrigger?.(num, item.originIndex) }) } } callback?.dataValueChangeTrigger?.(salesUnitPrice, index) </script>