Преглед изворни кода

综合设置增加长护险抹零设置,账单缴费,缴费通知单,对账单预览根据设置取值

xiongxing пре 1 недеља
родитељ
комит
c69cd306a7

+ 9 - 0
src/store/modules/setting.ts

@@ -12,6 +12,8 @@ export const useSettingStore = defineStore('setting', {
     admissionBill: -1, // 入院账单(应收1,四舍五入3,向上取整2, 四舍五入取整4)
     // 消费券规则
     couponRuleValue: '',
+    // 长护险规则
+    longCareRuleValue: ''
   }),
   getters: {
     getIsLoaded(): boolean {
@@ -35,6 +37,9 @@ export const useSettingStore = defineStore('setting', {
     getCouponRuleValue(): string{ // 消费券规则
       return this.couponRuleValue
     },
+    getLongCareRuleValue(): string{ //长护险规则
+      return this.longCareRuleValue
+    }
   },
   actions: {
     async getParamsConfig(){
@@ -54,6 +59,10 @@ export const useSettingStore = defineStore('setting', {
       if(item3){
         this.couponRuleValue = item3.value
       }
+      const item4 = res.find(item=>item.configName == '长护险抹零设置')
+      if(item4){
+        this.longCareRuleValue = item4.value
+      }
       this.isLoaded = true
     }
   }

+ 15 - 9
src/views/elderly/fee/bill-pay/Form.vue

@@ -572,7 +572,6 @@ const route = useRoute()
 const router = useRouter()
 const isEdit = ref(false)
 const roundDown = ref(0)
-
 // 取整金额
 const rounding = computed(()=>{
   return settingStore.getRounding
@@ -588,6 +587,11 @@ const couponRuleValue = computed(()=>{
   return settingStore.getCouponRuleValue
 })
 
+// 长护险规则
+const longCareRuleValue = computed(()=>{
+  return settingStore.getLongCareRuleValue
+})
+
 const tTitle = computed(() => {
   const arr = dataForm.value.billingMonth ? dataForm.value.billingMonth.split('-') : ''
   if (arr.length) {
@@ -629,14 +633,16 @@ const stageExpandSubtotalAmount = stageSubtotalAmount
 
 const getReceivableAmount = (item) => {
   if (item?.expenseSource == 'consumer_voucher') {
-    const ruleValue = couponRuleValue.value
-    if (ruleValue == 2 || ruleValue == '2') {
+    if (couponRuleValue.value == 2 || couponRuleValue.value == '2') {
       return Number(formatRound(item.totalAmount || 0))
     }
     return Number(formatNum(item.totalAmount || 0))
   }
   if (item?.expenseSource == 'long_term_care_insurance') {
-    return Number(item.totalAmount || 0)
+    if (longCareRuleValue.value == 2 || longCareRuleValue.value == '2') {
+      return Number(formatRound(item.totalAmount || 0))
+    }
+    return Number(formatNum(item.totalAmount || 0))
   }
   if (dataForm.value.type == 1 && item?.isMonthlyExpense == 1) {
     if (settingStore.getAdmissionBill == 2) {
@@ -788,7 +794,7 @@ const handleMonthSelectionChange = (val) => {
   val.map((item) => {// 入院账单固定费用有设置向上取整
     if(item.isShow){
       if(dataForm.value.type == '1'){
-        if(item.expenseSource == 'consumer_voucher'){
+        if(item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'){
           total += formatDecimal(getReceivableAmount(item) - (item.payAmount || 0)) as number
         }else if(settingStore.getAdmissionBill == 2){ // 向上取整
           total += formatDecimal(Number(formatCeil(item.totalAmount - (item.payAmount || 0)))) as number
@@ -800,7 +806,7 @@ const handleMonthSelectionChange = (val) => {
           total += formatDecimal(formatNum(item.totalAmount - (item.payAmount || 0))) as number
         }
       }else{
-        if(item.expenseSource == 'consumer_voucher'){
+        if(item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'){
           total += formatDecimal(getReceivableAmount(item) - (item.payAmount || 0)) as number
         }else if(rounding.value){ // 账单取整
           total += formatDecimal(formatNum(item.roundAmount - (item.payAmount || 0))) as number
@@ -823,7 +829,7 @@ const handleDepositSelectionChange = (val) => {
   let total = 0
   val.map((item) => {
     if(item.isShow){
-      if(item.expenseSource == 'consumer_voucher'){
+      if(item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'){
         total += formatDecimal(getReceivableAmount(item) - (item.payAmount || 0)) as number
       }else if(rounding.value){ // 账单取整
         total += formatDecimal(formatNum(item.roundAmount - (item.payAmount || 0))) as number
@@ -845,7 +851,7 @@ const handleOneTimeSelectionChange = (val) => {
   let total = 0
   val.map((item) => {
     if(item.isShow){
-      if(item.expenseSource == 'consumer_voucher'){
+      if(item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'){
         total += formatDecimal(getReceivableAmount(item) - (item.payAmount || 0)) as number
       }else if(rounding.value){ // 账单取整
         total += formatDecimal(formatNum(item.roundAmount - (item.payAmount || 0))) as number
@@ -867,7 +873,7 @@ const handleStageExpandSelectionChange = (val) => {
   let total = 0
     val.map((item) => {
       if(item.isShow){
-        if(item.expenseSource == 'consumer_voucher'){
+        if(item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'){
           total += formatDecimal(getReceivableAmount(item) - (item.payAmount || 0)) as number
         }else if(rounding.value){ // 账单取整
           total += formatDecimal(formatNum(item.roundAmount - (item.payAmount || 0))) as number

+ 78 - 55
src/views/elderly/fee/bill-pay/preview.vue

@@ -294,7 +294,7 @@ const open = async (id, row) => {
   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 +350,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 +390,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 +412,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,8 +455,28 @@ 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(formatNum(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))
@@ -462,8 +484,9 @@ const getConsumerVoucherAmountNumber = (item) => {
   return Number(formatNum(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)
@@ -480,53 +503,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 +587,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 +622,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)
       }
     }

+ 52 - 15
src/views/elderly/fee/bill-pay/unpay-preview.vue

@@ -171,6 +171,40 @@ const fixed2Num = computed(() => {
   return settingStore.getFix2Num
 })
 
+// 长护险规则
+const longCareRuleValue = computed(() => {
+  return settingStore.getLongCareRuleValue
+})
+
+/** 消费券/长护险都按各自的抹零配置单独取数 */
+const hasSourceRule = (item) =>
+  item.expenseSource == 'consumer_voucher' || item.expenseSource == 'long_term_care_insurance'
+
+/** 长护险金额:按长护险抹零配置取数(2=取整,其它=保留两位小数) */
+const getLongCareAmountNumber = (item) => {
+  const rawAmount = item?.totalAmount ?? 0
+  if (longCareRuleValue.value == 2 || longCareRuleValue.value == '2') {
+    return Number(formatRound(rawAmount))
+  }
+  return Number(formatNum(rawAmount))
+}
+
+/** 长护险金额:展示用字符串 */
+const getLongCareAmountText = (item) => {
+  if (longCareRuleValue.value == 2 || longCareRuleValue.value == '2') {
+    return formatRound(item?.totalAmount ?? 0)
+  }
+  return formatNum(item?.totalAmount ?? 0)
+}
+
+/** 按长护险规则处理后的补贴金额 */
+const formatLongCareAmount = (amount) => {
+  if (longCareRuleValue.value == 2 || longCareRuleValue.value == '2') {
+    return Number(formatRound(amount || 0))
+  }
+  return Number(formatNum(amount || 0))
+}
+
 const tempResValue = ref({})
 
 // 家属信息:后端响应 relatives 数组(每项含 peopleName/relation/phone/idCard/insurance/isBillSender 等)
@@ -178,6 +212,7 @@ const relatives = ref<any[]>([])
 const relativeDialogVisible = ref(false)
 
 const getItemPreviewAmount = (item) => {
+  // 消费券/长护险优先按各自抹零规则取数(与表格展示保持一致)
   if (item.expenseSource == 'consumer_voucher') {
     const ruleValue = settingStore.getCouponRuleValue
     if (ruleValue == 2 || ruleValue == '2') {
@@ -185,6 +220,9 @@ const getItemPreviewAmount = (item) => {
     }
     return Number(formatNum(item.totalAmount))
   }
+  if (item.expenseSource == 'long_term_care_insurance') {
+    return getLongCareAmountNumber(item)
+  }
 
   if (dataForm.value.type == '1' && item.isMonthlyExpense == 1) {
     if (settingStore.getAdmissionBill == 2) {
@@ -196,8 +234,6 @@ const getItemPreviewAmount = (item) => {
     } else {
       return Number(formatNum(item.totalAmount))
     }
-  } else if (item.expenseSource == 'long_term_care_insurance') {
-    return Number(formatNum(item.totalAmount))
   } else if (rounding.value) {
     return Number(item.roundAmount)
   } else if (fixed2Num.value) {
@@ -232,7 +268,7 @@ const open = async (id) => {
   dataForm.value = res
   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
       // 遍历长护险
@@ -249,9 +285,9 @@ const open = async (id) => {
 
     if (hasPartialPay) {
       total.value +=
-        item.expenseSource == 'consumer_voucher' ? getItemPreviewAmount(item) : item.roundAmount
+        hasSourceRule(item) ? getItemPreviewAmount(item) : item.roundAmount
       totalDecimal.value +=
-        item.expenseSource == 'consumer_voucher'
+        hasSourceRule(item)
           ? getItemPreviewAmount(item)
           : item.roundTwoDecimalAmount
       return
@@ -269,11 +305,9 @@ const open = async (id) => {
       } catch (e) {}
     }
     total.value +=
-      item.expenseSource == 'consumer_voucher' ? getItemPreviewAmount(item) : item.roundAmount
+      hasSourceRule(item) ? getItemPreviewAmount(item) : item.roundAmount
     totalDecimal.value +=
-      item.expenseSource == 'consumer_voucher'
-        ? getItemPreviewAmount(item)
-        : item.roundTwoDecimalAmount
+      hasSourceRule(item) ? getItemPreviewAmount(item) : item.roundTwoDecimalAmount
   })
 
   // 有长护险
@@ -281,16 +315,18 @@ const open = async (id) => {
     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
@@ -351,12 +387,15 @@ const caclAdminssionTotalPrice = computed(() => {
 
 // 总额
 const calcTotalPrice = (item) => {
+  // 消费券/长护险优先按各自抹零规则取数
   if (item.expenseSource == 'consumer_voucher') {
     const ruleValue = settingStore.getCouponRuleValue
     if (ruleValue == 2 || ruleValue == '2') {
       return formatRound(item.totalAmount)
     }
     return formatNum(item.totalAmount)
+  } else if (item.expenseSource == 'long_term_care_insurance') {
+    return getLongCareAmountText(item)
   } else if (dataForm.value.type == '1' && item.isMonthlyExpense == 1) {
     if (settingStore.getAdmissionBill == 2) {
       // 向上取整
@@ -371,8 +410,6 @@ const calcTotalPrice = (item) => {
       // 应收
       return formatNum(item.totalAmount)
     }
-  } else if (item.expenseSource == 'long_term_care_insurance') {
-    return formatNum(item.totalAmount)
   } else if (rounding.value) {
     return formatRound(item.roundAmount)
   } else if (fixed2Num.value) {

+ 14 - 0
src/views/elderly/fee/comprehensive-setting/index.vue

@@ -383,6 +383,20 @@ const list = ref<any[]>([
         rule: true,
         title: '财务模块配置'
       },
+      {
+        configName: '长护险抹零设置',
+        desc: '在账单缴费时长护险抹零设置',
+        type: 'select',
+        placeholder: '请选择',
+        dict: DICT_TYPE.CONSUMER_ROLE_AMOUNT,
+        value: '',
+        id: '',
+        label: '请选择',
+        prop: 'insurance_amount',
+        tgType: true,
+        rule: true,
+        title: '财务模块配置'
+      },
     ]
   },
   {