UNPKG

ttk-app-core

Version:

@ttk/recat enterprise develop framework

200 lines (183 loc) 6.54 kB
import { isNotEmpty } from "@/utils" import { toFixed, toRMB, toFixedForce } from "@/utils/number" import { slFloat, jeFloat, djFloat } from "@/apps/app-demo/invoice-manage/constant" /** * 普通征税金额计算 * * 金额不能为空或等于0, 单价和数量可以都为空;当单价和数量有一者为空,单价通过金额/数量获得,数量=金额/单价;当三者都不为空,编辑单价/数量时,金额=编辑后的单价*数量,编辑金额不为0时,数量不变,单价=编辑后的金额/数量。 * 三者某一项为空,其他项不变 * */ export function calcPutongPrice(option) { let { type, value, index, hsbz, spsl, dj, je, sl, se, tmpJe, tmpHsje, tmpDj, tmpHsdj, updateGoodsForm } = option if (type == "spsl") { // 数量改变 spsl = value if (spsl == "") { } else if (dj && spsl != 0) { je = dj * spsl } else if (je && spsl != 0) { dj = je / spsl } } else if (type == "dj") { // 单价改变 dj = value if (dj == "") { } else if (spsl) { je = spsl * dj } else if (je && dj != 0) { spsl = je / dj } } else if (type == "je") { // 总价改变 je = value if (je == "") { } else if (je == 0) { dj = "" updateGoodsForm && setTimeout(() => { // 避免多次输入0时,je一直是"",会引起输入框内容不变 spsl = toFixed(spsl, slFloat) dj = toFixed(dj, djFloat) je = "" se = "" tmpJe = "" tmpHsje = "" updateGoodsForm({ spsl, dj, je, se, tmpJe, tmpHsje }, index); }, 0) } else if (spsl && spsl != 0) { dj = je / spsl } else if (dj && dj != 0) { spsl = je / dj } } // 计算不含税金额、含税金额、不含税单价、含税单价 if (hsbz) { tmpJe = isNotEmpty(je) ? je / (1 + Number(sl)) : '' tmpHsje = je // 不含税单价 tmpDj = isNotEmpty(dj) ? dj / (1 + Number(sl)) : '' // 含税单价 tmpHsdj = dj // 税额=不含税金额*税率 // 含税情况下,税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01 se = tmpJe * sl } else { tmpJe = je tmpHsje = isNotEmpty(je) ? je * (1 + Number(sl)) : '' // 不含税单价 tmpDj = dj // 含税单价 tmpHsdj = isNotEmpty(dj) ? dj * (1 + Number(sl)) : '' // 税额=不含税金额*税率 // 不含税情况下,税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01 se = toFixedForce(tmpJe, jeFloat) * sl } // 取小数位并四舍五入 spsl = toFixed(spsl, slFloat) je = toFixedForce(je, jeFloat) dj = toFixed(dj, djFloat) se = toFixedForce(se, jeFloat) tmpJe = toFixedForce(tmpJe, jeFloat) tmpHsje = toFixedForce(tmpHsje, jeFloat) tmpDj = toFixed(tmpDj, djFloat) tmpHsdj = toFixed(tmpHsdj, djFloat) return { spsl, dj, je, se, tmpJe, tmpHsje, tmpDj, tmpHsdj } } /** * 减按征税金额计算 * * 金额不能为空或等于0, 单价和数量可以都为空;当单价和数量有一者为空,单价通过金额/数量获得,数量=金额/单价;当三者都不为空,编辑单价/数量时,金额=编辑后的单价*数量,编辑金额不为0时,数量不变,单价=编辑后的金额/数量。 * 三者某一项为空,其他项不变 * */ export function calcJiananPrice(option) { let { type, index, value, spsl, dj, je, sl, se, tmpJe, tmpDj, updateGoodsForm } = option if (type == "spsl") { // 数量改变 spsl = value if (spsl == "") { } else if (dj && spsl != 0) { je = dj * spsl } else if (je && spsl != 0) { dj = je / spsl } } else if (type == "dj") { // 单价改变 dj = value if (dj == "") { } else if (spsl) { je = spsl * dj } else if (je && dj != 0) { spsl = je / dj } } else if (type == "je") { // 总价改变 je = value if (je == "") { } else if (je == 0 || je == "") { dj = "" updateGoodsForm && setTimeout(() => { // 避免多次输入0时,je一直是"",会引起输入框内容不变 spsl = toFixed(spsl, slFloat) dj = toFixed(dj, djFloat) je = "" se = "" tmpJe = "" updateGoodsForm({ spsl, dj, je, se, tmpJe }, index); }, 0) } else if (spsl && spsl != 0) { dj = je / spsl } else if (dj && dj != 0) { spsl = je / dj } } se = "" tmpJe = "" tmpDj = "" if (je > 0) { // 税额=含税金额*0.015/(1+5%) // 税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01 se = toFixedForce(je, jeFloat) * sl / 1.05 // 不含税金额=含税金额-税额 (减按征收的不含税金额都按含税金额算,提交时也是提交含税金额) tmpJe = je - se se = toFixedForce(se, jeFloat) tmpJe = toFixedForce(tmpJe, jeFloat) } if (dj > 0) { // 不含税单价 (减按征收的不含税金额都按含税金额算,提交时也是提交含税金额) tmpDj = toFixedForce(tmpJe, jeFloat) / spsl tmpDj = toFixed(tmpDj, djFloat) } // 取小数位并四舍五入 spsl = toFixed(spsl, slFloat) je = toFixedForce(je, jeFloat) dj = toFixed(dj, djFloat) return { spsl, dj, je, se, tmpJe, tmpDj } } /** * 差额征税 金额计算 * * 先算税额,若(含税销售额-扣除额)>0,税额=(含税销售额-扣除额)*(税率或征收率)/(1+税率或征收率),若(含税销售额-扣除额)<=0,则税额=0,再算金额=含税销售额-税额,如果数量不为空,则不含税单价=金额/数量,若数量为空,则不含税单价也为空。 * 三者某一项为空,其他项不变 * */ export function calcChaePrice(option) { let { type, value, spsl, dj, je, se, tmpJe, tmpDj } = option if (type == "spsl") { // 数量改变 spsl = value if (spsl == "") { } else if (je && spsl != 0) { dj = je / spsl } } else if (type == "dj") { // 单价改变 dj = value if (dj == "") { } else if (je && dj != 0) { spsl = je / dj } } // 取小数位并四舍五入 spsl = toFixed(spsl, slFloat) dj = toFixed(dj, djFloat) tmpDj = dj return { spsl, dj, je, se, tmpJe, tmpDj } }