浏览代码

艾迪康报告查询

lighter 1 年之前
父节点
当前提交
d2cb66e386
共有 2 个文件被更改,包括 172 次插入0 次删除
  1. 36 0
      src/api/inspections/index.js
  2. 136 0
      src/views/examination/AdiconQuery.vue

+ 36 - 0
src/api/inspections/index.js

@@ -16,8 +16,44 @@ export function checkExamDetail(data) {
   })
 }
 
+export function adiconLogin() {
+  return request({
+    url: '/adicon/login',
+    method: 'get',
+  })
+}
 
+export function getReportList(data) {
+  return request({
+    url: '/adicon/getReportList',
+    method: 'post',
+    data
+  })
+}
 
+export function getReportItems(data) {
+  return request({
+    url: '/adicon/getReportItems',
+    method: 'post',
+    data
+  })
+}
+
+export function setSampleDown(data) {
+  return request({
+    url: '/adicon/setSampleDown',
+    method: 'post',
+    data
+  })
+}
+
+export function getByteReport(data) {
+  return request({
+    url: '/adicon/getByteReport',
+    method: 'post',
+    data
+  })
+}
 
 export function fetchCovidExamData(data) {
   return request({

+ 136 - 0
src/views/examination/AdiconQuery.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="layout_container">
+    <header class="round-header">
+      <el-select v-model="inquiry.reportType" style="width: 100px">
+        <el-option
+          v-for="item in reportTypes"
+          :key="item.value"
+          :label="item.value"
+          :value="item.value"
+        ></el-option>
+      </el-select>
+      <CyDateRange />
+      <el-divider direction="vertical" />
+      <el-button icon="Search" type="primary" @click="queryList">查询</el-button>
+    </header>
+    <div class="layout_main layout_container layout-horizontal">
+      <aside class="layout_el-table">
+        <el-table
+          :data="tableList"
+          stripe
+          highlight-current-row
+          @row-click="handleClickRow"
+        >
+          <el-table-column prop="patientName" label="患者姓名" width="70"></el-table-column>
+          <el-table-column prop="instrument" label="送检项目" width="120"></el-table-column>
+          <el-table-column prop="reportType" label="报告类别" width="70"></el-table-column>
+          <el-table-column label="报告时间" width="130">
+            <template #default="{row}">
+              {{ filterReportTime(row.bgrq) }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </aside>
+      <div class="layout_main">
+        <iframe style="width: 99%; height: 99%" :src="pdfSrc" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import useDateRange from "@/utils/cy-use/useDateRange";
+import {getByteReport, getReportList} from "@/api/inspections";
+
+const {CyDateRange, dateRange} = useDateRange({aFewDaysAgo: 3, clearable: false})
+
+const reportTypes = [
+  { value: '全部' },
+  { value: '常规报告' },
+  { value: '病理' },
+  { value: 'TCT' },
+  { value: 'TS' },
+  { value: '微生物' },
+]
+
+const jyKey = ref('')
+const blKey = ref('')
+
+const inquiry = reactive({
+  key: '',
+  id: '',
+  begin: '',
+  end: '',
+  barcode: '',
+  reportType: '全部'
+})
+
+const key = computed(() => {
+  return inquiry.reportType === '病理' ? blKey.value : jyKey.value
+})
+
+const tableList = ref([])
+function queryList() {
+  inquiry.begin = dateRange.value.start
+  inquiry.end = dateRange.value.end
+  inquiry.key = key.value
+  getReportList(inquiry).then(res => {
+    tableList.value = res
+  })
+}
+
+const pdfSrc = ref('')
+function handleClickRow(row) {
+  // let barcode = row.customerBarcode
+  // if (!barcode || barcode.length < 5) {
+  //   barcode = row.adiconBarcode
+  // }
+  // inquiry.barcode = barcode
+  // inquiry.reportType = row.reportType
+  // inquiry.key = key.value
+  // getReportItems(inquiry).then(res => {
+  //   reportItems.value = res
+  // })
+
+  inquiry.key = key.value
+  inquiry.id = row.id
+  getByteReport(inquiry).then(res => {
+    showPDF('data:application/pdf;base64,' + res)
+  })
+}
+
+function showPDF(base64) {
+  const blob = base64ToBlob(base64);
+  pdfSrc.value = URL.createObjectURL(blob)
+  // 创建一个iframe来显示PDF
+  // const iframe = document.createElement('iframe');
+  // iframe.style = 'width: 100%; height: 100vh;';
+  // iframe.src = url;
+  // document.body.appendChild(iframe);
+}
+
+function base64ToBlob(base64) {
+  const parts = base64.split(';base64,');
+  const contentType = parts[0].split(':')[1];
+  const raw = window.atob(parts[1]);
+  const rawLength = raw.length;
+  const uInt8Array = new Uint8Array(rawLength);
+  for (let i = 0; i < rawLength; ++i) {
+    uInt8Array[i] = raw.charCodeAt(i);
+  }
+  return new Blob([uInt8Array], {type: contentType});
+}
+
+function filterReportTime(time) {
+  return time.split('.')[0].replace('T', ' ')
+}
+
+onMounted(() => {
+  // adiconLogin().then(res => {
+  //   jyKey.value = res.jyKey
+  //   blKey.value = res.blKey
+  // })
+  jyKey.value = "GTQJ3ZUVQ6FykidteTgUyni2fdhNYe+0jXtlhKt7Ik0srls1M7/uXg=="
+  blKey.value = "8bAMqh3jI/SSVQC7k1YlI3patI69vAIQjXtlhKt7Ik0srls1M7/uXg=="
+})
+</script>