|
|
@@ -229,8 +229,7 @@
|
|
|
import { getExpenseOrderDetail } from '@/api/elderly/fee/bill-pay'
|
|
|
import dayjs from 'dayjs'
|
|
|
import { useUserStore } from '@/store/modules/user'
|
|
|
-import { getTenant } from '@/api/system/tenant'
|
|
|
-import { getTenantId } from '@/utils/auth'
|
|
|
+import { getSealUrlByType, SEAL_TYPE } from '@/api/system/commonSeal'
|
|
|
import {
|
|
|
fixedNum,
|
|
|
formatCeil,
|
|
|
@@ -270,7 +269,7 @@ const longTermAmount = ref(0)
|
|
|
const payText = ref('')
|
|
|
const roundDown = ref(0)
|
|
|
|
|
|
-// 当前机构公章(来自租户接口 expenseCachetUrl);为空字符串时签章区不渲染
|
|
|
+// 当前机构账单公章(来自 /system/common-seal/list,type=expense_order_seal);为空字符串时签章区不渲染
|
|
|
const sealUrl = ref('')
|
|
|
|
|
|
const formatPayCreatedTime = (createdTime) => {
|
|
|
@@ -283,18 +282,18 @@ const formatPayCreatedTime = (createdTime) => {
|
|
|
/** 打开弹窗 */
|
|
|
const open = async (id, row) => {
|
|
|
dialogVisible.value = true
|
|
|
- // 并行:账单详情 + 当前机构公章(容错,租户接口失败不影响主流程)
|
|
|
- const [res, tenant] = await Promise.all([
|
|
|
+ // 并行:账单详情 + 当前机构账单公章(容错,公章接口失败不影响主流程)
|
|
|
+ const [res, seal] = await Promise.all([
|
|
|
getExpenseOrderDetail(id),
|
|
|
- getTenant(getTenantId() as number).catch(() => null)
|
|
|
+ getSealUrlByType(SEAL_TYPE.EXPENSE_ORDER)
|
|
|
])
|
|
|
- sealUrl.value = tenant?.expenseCachetUrl || ''
|
|
|
+ sealUrl.value = seal || ''
|
|
|
let flag = false
|
|
|
dataForm.value = res
|
|
|
res.items = res.items.filter((item) => item.isShow == 1)
|
|
|
res.items.map((item) => {
|
|
|
if (item.expenseSource == 'long_term_care_insurance') {
|
|
|
- longTermAmount.value += item.actualPrice
|
|
|
+ longTermAmount.value += formatLongCareAmount(item.actualPrice)
|
|
|
item.payStatus = 0
|
|
|
flag = true
|
|
|
// 遍历长护险
|
|
|
@@ -350,16 +349,18 @@ const open = async (id, row) => {
|
|
|
if (res.expenseSubsidyDO && res.expenseSubsidyDO.length) {
|
|
|
let num = 0
|
|
|
res.expenseSubsidyDO.map((item) => {
|
|
|
- num += item.amount
|
|
|
+ // 按长护险抹零配置取数
|
|
|
+ const amount = formatLongCareAmount(item.amount)
|
|
|
+ num += amount
|
|
|
|
|
|
dataForm.value.items.push({
|
|
|
expenseSource: 'long_term_care_insurance',
|
|
|
itemCategoryName: '长护险',
|
|
|
itemName: '长护险抵扣',
|
|
|
description: item.remarks ? item.remarks : item.month + '长护险抵扣',
|
|
|
- roundAmount: -item.amount,
|
|
|
- roundTwoDecimalAmount: -item.amount,
|
|
|
- totalAmount: -item.amount,
|
|
|
+ roundAmount: -amount,
|
|
|
+ roundTwoDecimalAmount: -amount,
|
|
|
+ totalAmount: -amount,
|
|
|
createdTime: item.month,
|
|
|
payTime: '',
|
|
|
payStatus: item.status
|
|
|
@@ -388,20 +389,20 @@ const handleClick = (val) => {
|
|
|
if (rounding.value) {
|
|
|
// 取整
|
|
|
monthNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else if (fixed2Num.value) {
|
|
|
// 四舍五入
|
|
|
monthNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else {
|
|
|
// 应收
|
|
|
monthNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(formatNum(item.totalAmount))
|
|
|
}
|
|
|
} else {
|
|
|
@@ -410,20 +411,20 @@ const handleClick = (val) => {
|
|
|
if (rounding.value) {
|
|
|
// 取整
|
|
|
otherNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else if (fixed2Num.value) {
|
|
|
// 四舍五入
|
|
|
otherNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else {
|
|
|
// 应收
|
|
|
otherNum +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(formatNum(item.totalAmount))
|
|
|
}
|
|
|
}
|
|
|
@@ -453,22 +454,53 @@ const fixed2Num = computed(() => {
|
|
|
return settingStore.getFix2Num
|
|
|
})
|
|
|
|
|
|
-const getConsumerVoucherAmountNumber = (item) => {
|
|
|
- const ruleValue = settingStore.getCouponRuleValue
|
|
|
+/** 按长护险抹零配置处理后的补贴金额 */
|
|
|
+const formatLongCareAmount = (amount) => {
|
|
|
+ const ruleValue = settingStore.getLongCareRuleValue
|
|
|
+ if (ruleValue == 2 || ruleValue == '2') {
|
|
|
+ return Number(formatRound(amount || 0))
|
|
|
+ }
|
|
|
+ return Number(amount || 0)
|
|
|
+}
|
|
|
+
|
|
|
+/** 消费券/长护险都按各自的抹零配置单独取数 */
|
|
|
+const hasSourceRule = (item) =>
|
|
|
+ item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'
|
|
|
+
|
|
|
+/** 取对应来源的抹零规则:2=取整,其它=保留两位小数 */
|
|
|
+const getSourceRuleValue = (item) =>
|
|
|
+ item.expenseSource == 'consumer_voucher'
|
|
|
+ ? settingStore.getCouponRuleValue
|
|
|
+ : settingStore.getLongCareRuleValue
|
|
|
+
|
|
|
+/** 按来源规则取金额(数字) */
|
|
|
+const getSourceAmountNumber = (item) => {
|
|
|
+ const ruleValue = getSourceRuleValue(item)
|
|
|
const rawAmount = item?.totalAmount ?? 0
|
|
|
if (ruleValue == 2 || ruleValue == '2') {
|
|
|
return Number(formatRound(rawAmount))
|
|
|
}
|
|
|
- return Number(formatNum(rawAmount))
|
|
|
+ if(item.expenseSource == 'consumer_voucher'){
|
|
|
+ return Number(formatNum(rawAmount))
|
|
|
+ }
|
|
|
+ if(item.expenseSource == 'long_term_care_insurance'){
|
|
|
+ return Number(rawAmount)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-const getConsumerVoucherAmountText = (item) => {
|
|
|
- const ruleValue = settingStore.getCouponRuleValue
|
|
|
+/** 按来源规则取金额(展示用字符串) */
|
|
|
+const getSourceAmountText = (item) => {
|
|
|
+ const ruleValue = getSourceRuleValue(item)
|
|
|
const rawAmount = item?.totalAmount ?? 0
|
|
|
if (ruleValue == 2 || ruleValue == '2') {
|
|
|
return formatRound(rawAmount)
|
|
|
}
|
|
|
- return formatNum(rawAmount)
|
|
|
+ if(item.expenseSource == 'consumer_voucher'){
|
|
|
+ return formatNum(rawAmount)
|
|
|
+ }
|
|
|
+ if(item.expenseSource == 'long_term_care_insurance'){
|
|
|
+ return Number(rawAmount)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 账单总额
|
|
|
@@ -480,53 +512,53 @@ const totalPayAmount = computed(() => {
|
|
|
dataForm.value.items.map((item) => {
|
|
|
if (item.itemName != '长护险护理补贴费用') {
|
|
|
num1 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
num2 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
if (item.isMonthlyExpense == 1 && dataForm.value.type == 1) {
|
|
|
if (settingStore.getAdmissionBill == 2) {
|
|
|
// 向上取整
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(formatCeil(item.totalAmount))
|
|
|
} else if (settingStore.getAdmissionBill == 3) {
|
|
|
// 四舍五入保留两位
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else if (settingStore.getAdmissionBill == 4) {
|
|
|
// 四舍五入取整
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else {
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.totalAmount)
|
|
|
}
|
|
|
} else {
|
|
|
if (rounding.value) {
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else if (fixed2Num.value) {
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else {
|
|
|
num3 +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.totalAmount)
|
|
|
}
|
|
|
}
|
|
|
@@ -564,8 +596,8 @@ const tableRowPrice = (row) => {
|
|
|
|
|
|
// 表格1总额单项小计
|
|
|
const tableRowPay = (row) => {
|
|
|
- if (row.expenseSource == 'consumer_voucher') {
|
|
|
- return getConsumerVoucherAmountText(row)
|
|
|
+ if (hasSourceRule(row)) {
|
|
|
+ return getSourceAmountText(row)
|
|
|
}
|
|
|
if (dataForm.value.type == '1' && row.isMonthlyExpense == 1) {
|
|
|
if (settingStore.getAdmissionBill == 2) {
|
|
|
@@ -599,43 +631,43 @@ const tableSubtotal = computed(() => {
|
|
|
if (settingStore.getAdmissionBill == 2) {
|
|
|
// 向上取整
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(formatCeil(item.totalAmount))
|
|
|
} else if (settingStore.getAdmissionBill == 3) {
|
|
|
// 四舍五入保留两位
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else if (settingStore.getAdmissionBill == 4) {
|
|
|
// 四舍五入取整
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else {
|
|
|
// 应收
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.totalAmount)
|
|
|
}
|
|
|
} else {
|
|
|
if (rounding.value) {
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundAmount)
|
|
|
} else if (fixed2Num.value) {
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.roundTwoDecimalAmount)
|
|
|
} else {
|
|
|
num +=
|
|
|
- item.expenseSource == 'consumer_voucher'
|
|
|
- ? getConsumerVoucherAmountNumber(item)
|
|
|
+ hasSourceRule(item)
|
|
|
+ ? getSourceAmountNumber(item)
|
|
|
: Number(item.totalAmount)
|
|
|
}
|
|
|
}
|