Browse Source

病案导出

‘chenzhilei’ 1 week ago
parent
commit
138e6640e5

+ 2 - 2
src/components/inpatient/frontsheet-printpage/HeadPage.vue

@@ -49,7 +49,7 @@
               display: inline-block;
               margin-right: 8px;
               width: 120px;
-              margin-left: 12px;、3++3
+              margin-left: 12px;
             "
             >住院次数: {{ patient.healthCardNo }}</span
           >
@@ -118,7 +118,7 @@
             {{patient.ageDays}}
           </span>天
         </div>
-        <div style="display: flex;align-items: end;margin-top: 4px; ">
+        <div style="display: flex;align-items: end;">
           新生儿出生体重 (一孩
           <span
               style="width: 40px;padding-left: 5px; border-bottom: 1px solid black"

+ 2 - 0
src/utils/moment-utils.ts

@@ -4,7 +4,9 @@ import RequestV2 from "./request-v2";
 
 export enum DATEFORMAT {
     DATE = 'YYYY-MM-DD',
+    DATE_TILT = 'YYYY/MM/DD',
     DATE_TIME = 'YYYY-MM-DD HH:mm:ss',
+    DATE_TIME_TILT = 'YYYY/MM/DD HH:mm:ss',
     TIME = 'HH:mm:ss'
 }
 

+ 109 - 0
src/utils/print.js

@@ -0,0 +1,109 @@
+import html2canvas from 'html2canvas';
+import { xcMessage } from "@/utils/xiaochan-element-plus";
+export function canvasPrint(dom,paperSize="a4",orientation="portrait") {
+    let previewImage=null;
+  html2canvas(dom, {
+      scale: 2, // 提高输出图片的缩放倍数,例如2倍,更清晰
+      useCORS: true, // 尝试加载跨域图片
+      allowTaint: true // 允许跨域图片,但可能会污染 canvas
+  }).then(canvas => {
+      // canvas 就是转换后的画布元素
+      // 你可以将其转换为图片数据 URL
+      previewImage =  canvas.toDataURL('image/png');
+      printImage(previewImage,paperSize,orientation)
+      // 接下来可以处理 dataUrl,比如打印
+    //   console.log(dataUrl);
+  }).catch(error => {
+      console.error('转换失败:', error);
+  });
+}
+
+const printImage = (previewImage,paperSize,orientation) => {
+  if (!previewImage) {
+    xcMessage.error("请先生成预览图片");
+      return;
+  }
+
+  // showStatus('准备打印中...', 'success');
+
+  // 创建打印窗口
+  const printWindow = window.open('', '_blank');
+  if (!printWindow) {
+    xcMessage.error("请允许弹出窗口以进行打印");
+      return;
+  }
+
+  // 构建打印内容
+  printWindow.document.write(`
+      <!DOCTYPE html>
+      <html>
+      <head>
+          <title>打印文档</title>
+          <style>
+              body {
+                  margin: 0;
+                  padding: 20px;
+                  display: flex;
+                  justify-content: center;
+                  align-items: center;
+                  min-height: 100vh;
+              }
+              img {
+                  max-width: 100%;
+                  height: auto;
+                  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+              }
+              @media print {
+                  body {
+                      padding: 0;
+                  }
+                  @page {
+                      size: ${paperSize} ${orientation};
+                      margin: 0;
+                  }
+              }
+          </style>
+      </head>
+      <body>
+          <img src="${previewImage}" />
+      </body>
+      </html>
+  `);
+  printWindow.document.close();
+
+  // 等待图片加载完成后打印
+  printWindow.onload = function() {
+      printWindow.focus();
+      printWindow.print();
+      xcMessage.success("准备打印");
+      
+      // 监听打印后的事件
+      if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
+        xcMessage.success("谷歌清理打印");
+          // Chrome浏览器
+          printWindow.onafterprint = function() {
+              cleanupPrint(printWindow,previewImage);
+          };
+      } else {
+          // 其他浏览器
+          xcMessage.success("其他浏览器清理打印");
+          setTimeout(function() {
+              cleanupPrint(printWindow,previewImage);
+          }, 500);
+      }
+  };
+}
+
+const cleanupPrint = (printWindow,previewImage) => {
+  try {
+      paresetPreviewge(previewImage);
+      printWindow.close();
+      xcMessage.success("打印完成,临时资源已清理");
+  } catch (e) {
+      console.log('清理打印窗口:', e);
+  }
+}
+
+const paresetPreviewge = (previewImage) => {
+  previewImage = null;
+}

+ 1 - 1
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue

@@ -279,7 +279,7 @@
               style="width: 50px"
             />天
           </div>
-          <div style="display: flex;align-items: end;margin-top: 4px">
+          <div style="display: flex;align-items: end;">
             新生儿出生体重 (一孩
             <input
                 id="newBornWeight1"

+ 32 - 4
src/views/hospitalization/case-front-sheet/FrontSheetExport.vue

@@ -188,6 +188,10 @@ import { ElMessage } from "element-plus";
 import { formatMonth } from "@/utils/date";
 import { fetchSheets } from "@/api/case-front-sheet";
 import { exportCSV,exportCharCSV } from "@/utils/ExportCVS";
+import {
+  DATEFORMAT,
+  formatDateToStr,
+} from "@/utils/moment-utils";
 import env from "@/utils/setting";
 
 const month = ref(null);
@@ -236,6 +240,8 @@ function deleteRow(index, row) {
 }
 
 const exportExcel = () => {
+  // console.log("export", formatDateToStr(sheets.value[0].dismissDate,DATEFORMAT.DATE_TIME))
+  // return
   if (sheets.value.length === 0) {
     ElMessage({
       message: "没有可以导出的数据!",
@@ -250,8 +256,15 @@ const exportExcel = () => {
       itm.certtype = itm.country === "中国" ? "1" : "9";
       // itm.unitinfo = itm.unitName + "/" + itm.unitPlace;
       itm.unitinfo = itm.unitPlace;
+      itm.admissDate = formatDateToStr(itm.admissDate,DATEFORMAT.DATE_TIME_TILT);
+      itm.dismissDate = formatDateToStr(itm.dismissDate,DATEFORMAT.DATE_TIME_TILT);
+      itm.birthDate = formatDateToStr(itm.birthDate,DATEFORMAT.DATE_TILT);
+      itm.qualityControlDate = formatDateToStr(itm.qualityControlDate,DATEFORMAT.DATE_TILT);
+      itm.surgeryDate0 = formatDateToStr(itm.surgeryDate0,DATEFORMAT.DATE_TILT);
       itm.daytimeSurgery = 0;
       itm.blank = "-";
+      // console.log("DATE_TILT",itm)
+
 
       const diagList = itm.disdiagList;
       itm.otherDisdiagSize = diagList.length - 1;
@@ -389,8 +402,16 @@ const exportExcel = () => {
       surgeryAst20: "C20x01",
       surgeryWjwCh0: "C21x01C",
       surgeryAnae0: "C22x01C",
-      // surgeryAnaeLevel0: "F15",
-      // surgeryAnaeName0: "C23x01"
+      surgeryAnaeLevel0: "F15",
+      surgeryAnaeName0: "C23x01",
+
+      
+      admissAgainInOneMonth:"B36C",
+      admissAgainPurpose:"B37",
+      zyDismissWay:"B34C",
+      dismissDestination:"B35",
+      totalCost:"D01",
+      selfPay:"D09",
     };
 
     const titleChar = {
@@ -488,8 +509,15 @@ const exportExcel = () => {
       surgeryAst20: "主要手术操作Ⅱ助",
       surgeryWjwCh0: "主要手术操作切口愈合等级",
       surgeryAnae0: "主要手术操作麻醉方式",
-      // surgeryAnaeLevel0: "F15",
-      // surgeryAnaeName0: "C23x01",
+      surgeryAnaeLevel0: "主要手术麻醉分级",
+      surgeryAnaeName0: "主要手术操作麻醉医师",
+
+      admissAgainInOneMonth:"是否有出院31天内再住院计划",
+      admissAgainPurpose:"出院31天内再住院计划目的",
+      zyDismissWay:"离院方式",
+      dismissDestination:"医嘱转院、转社区卫生服务机构/乡镇卫生院名称",
+      totalCost:"住院总费用",
+      selfPay:"住院总费用其中自费金额",
     };
 
     for (let i = 1; i < 41; i++) {