Browse Source

住院结算单

zengfanwei 1 week ago
parent
commit
0475d6f042
1 changed files with 140 additions and 40 deletions
  1. 140 40
      src/components/medical-insurance/settle-detail-list/InpatientSetlList.vue

+ 140 - 40
src/components/medical-insurance/settle-detail-list/InpatientSetlList.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="si-content">
-    <!-- <table>
+    <table>
       <tr>
         <td colspan="2" style="width: 15%;">住院号</td>
-        <td colspan="2" style="width: 15%;"></td>
+        <td colspan="2" style="width: 15%;">{{ setlinfo.patNo }}</td>
         <td colspan="2" style="width: 15%;">医保号</td>
-        <td colspan="3" style="width: 25%;"></td>
+        <td colspan="3" style="width: 25%;">{{ }}</td>
         <td style="width: 10%;">医保就诊号</td>
-        <td colspan="2" style="width: 15%;"></td>
+        <td colspan="2" style="width: 15%;">{{ }}</td>
       </tr>
       <tr>
         <td colspan="2">姓名</td>
@@ -21,98 +21,98 @@
       </tr>
       <tr>
         <td colspan="2">报销类别</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.medTypeName }}</td>
         <td colspan="2">入院时间</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.begntime }}</td>
         <td colspan="2">出院日期</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.endtime }}</td>
       </tr>
       <tr>
         <td colspan="2">本次总费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.medfeeSumamt }}</td>
         <td colspan="2">全自费费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.fulamtOwnpayAmt }}</td>
         <td colspan="2">范围内费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.inscpScpAmt }}</td>
       </tr>
       <tr>
         <td colspan="2">基本保险基金</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.hifpPay }}</td>
         <td colspan="2">超限价自费</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.overlmtSelfpay }}</td>
         <td colspan="2">起付线</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
       </tr>
       <tr>
         <td colspan="2">公务员基金支付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.cvlservPay }}</td>
         <td colspan="2">先行自付费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.preselfpayAmt }}</td>
         <td colspan="2">基金支付比</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ calculatePercentage(setlinfo.cvlservPay, setlinfo.medfeeSumamt) }}</td>
       </tr>
       <tr>
         <td colspan="2">医疗救助基金</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.mafPay }}</td>
         <td colspan="4"></td>
         <td colspan="2">自理(旧版适用)</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
       </tr>
       <tr>
         <td colspan="2">居民大病保险</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.hifmiPay }}</td>
         <td colspan="4"></td>
         <td colspan="2">民政支付(旧版适用)</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
       </tr>
       <tr>
         <td colspan="2">大病补充保险</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
         <td colspan="8"></td>
       </tr>
       <tr>
         <td colspan="2">职工大额救助基金</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.hifobPay }}</td>
         <td colspan="2">生育基金</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
         <td colspan="4"></td>
       </tr>
       <tr>
         <td colspan="2">企业补充保险</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{}}</td>
         <td colspan="8"></td>
       </tr>
       <tr>
         <td colspan="2">保险公司直付赔付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
         <td colspan="8"></td>
       </tr>
       <tr>
         <td colspan="2">其他支付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.othPay }}</td>
         <td colspan="2">他人账户代付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ }}</td>
         <td colspan="2">报销费用占总费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ getReimbursementRatio(setlinfo) }}</td>
       </tr>
       <tr>
         <td colspan="2">低收入医院垫付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.hospPartAmt }}</td>
         <td colspan="2">个人现金支付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.psnCashPay }}</td>
         <td colspan="2">自负占比</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ calculatePercentage(add(setlinfo.acctPay, setlinfo.psnCashPay), setlinfo.medfeeSumamt) }}</td>
       </tr>
       <tr>
         <td colspan="2">个人自负费用</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ add(setlinfo.acctPay, setlinfo.psnCashPay) }}</td>
         <td colspan="2">个人账户支付</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.acctPay }}</td>
         <td colspan="2">个人账户余额</td>
-        <td colspan="2"></td>
+        <td colspan="2">{{ setlinfo.balc }}</td>
       </tr>
-    </table> -->
-    <div style="height: 8px"></div>
+    </table>
+    <!-- <div style="height: 8px"></div>
     <table>
       <tr>
         <td>姓名</td>
@@ -169,7 +169,7 @@
         <td colspan="2">{{ setlinfo.balc }}</td>
       </tr>
     </table>
-    <!-- <div style="height: 8px"></div>
+    <div style="height: 8px"></div>
     <table>
       <tr>
         <td rowspan="3">既往费用</td>
@@ -317,7 +317,7 @@
         <td colspan="2">{{ setlinfo.polItemInfo.allFundAmt }}</td>
         <td colspan="3">{{ setlinfo.polItemInfo.allSum }}</td>
       </tr>
-    </table> -->
+    </table>
     <div style="height: 8px"></div>
     <table>
       <tr>
@@ -354,7 +354,7 @@
         <td colspan="2">医院负担金额</td>
         <td colspan="2">{{ setlinfo.hospPartAmt }}</td>
       </tr>
-    </table>
+    </table> -->
   </div>
 </template>
 
@@ -366,8 +366,108 @@ export default {
       default: {}
     }
   },
-  setup() { }
+  setup() {
+    const calculatePercentage = (numerator, denominator, decimalPlaces = 2) => {
+      // 统一处理输入:数字直接使用,字符串尝试转换为数字
+      const parseValue = (value) => {
+        if (typeof value === 'number') {
+          return value; // 数字类型直接返回
+        }
+        if (typeof value === 'string') {
+          // 字符串类型:去除首尾空格后转换
+          const trimmed = value.trim();
+          return trimmed ? parseFloat(trimmed) : NaN;
+        }
+        // 非数字/字符串类型视为无效
+        return NaN;
+      };
+
+      // 解析分子和分母
+      const num = parseValue(numerator);
+      const den = parseValue(denominator);
+
+      // 校验有效性
+      if (isNaN(num) || isNaN(den)) {
+        console.error('输入值无效(必须是数字或数字字符串)');
+        return '0.00%';
+      }
+      if (den === 0) {
+        console.error('分母不能为0');
+        return '0.00%';
+      }
+
+      // 计算百分比并格式化
+      const percentage = (num / den) * 100;
+      const rounded = percentage.toFixed(decimalPlaces); // 四舍五入保留小数
+
+      return `${rounded}%`;
+    }
+
+    const add = (a, b) => {
+      console.log(a, b)
+      if ((!a && a !== 0) || (!b && b !== 0)) return ""
+      // 1. 获取两个数的小数位数
+      const decimalLen = (num) => {
+        const str = num.toString();
+        const dotIndex = str.indexOf('.');
+        return dotIndex === -1 ? 0 : str.length - dotIndex - 1;
+      };
+      const lenA = decimalLen(a);
+      const lenB = decimalLen(b);
+
+      // 2. 计算放大倍数(10的最大小数位数次方)
+      const maxLen = Math.max(lenA, lenB);
+      const multiple = Math.pow(10, maxLen);
+
+      // 3. 放大为整数后相加,再缩小回原比例
+      return (a * multiple + b * multiple) / multiple;
+    }
+
+    const subtract = (minuend, subtrahend) => {
+      // 1. 解析参数:转换为数字,无效值视为0
+      const parseNumber = (value) => {
+        if (value === undefined || value === null) return 0;
+        const num = Number(value);
+        return isNaN(num) ? 0 : num;
+      };
+
+      const numA = parseNumber(minuend);
+      const numB = parseNumber(subtrahend);
+
+      // 2. 计算两个数的小数位数
+      const getDecimalLength = (num) => {
+        const str = num.toString();
+        const dotIndex = str.indexOf('.');
+        return dotIndex === -1 ? 0 : str.length - dotIndex - 1;
+      };
+
+      const lenA = getDecimalLength(numA);
+      const lenB = getDecimalLength(numB);
+
+      // 3. 确定放大倍数(10的最大小数位数次方)
+      const maxLen = Math.max(lenA, lenB);
+      const multiple = Math.pow(10, maxLen);
+
+      // 4. 放大为整数后相减,再缩小回原比例
+      return (numA * multiple - numB * multiple) / multiple;
+    }
+
+    const getReimbursementRatio = (setlinfo) => {
+      let reimbursement = subtract(setlinfo.medfeeSumamt,add(setlinfo.acctPay, setlinfo.psnCashPay))
+      console.log(1111,reimbursement)
+      return calculatePercentage(reimbursement, setlinfo.medfeeSumamt)
+    }
+
+    // 关键:必须返回方法,模板才能访问
+    return {
+      calculatePercentage,
+      add,
+      subtract,
+      getReimbursementRatio
+    };
+  },
 }
+
 </script>
 
 <style scoped>