소스 검색

传染病上报

DESKTOP-0GD05B0\Administrator 2 년 전
부모
커밋
3cb9218bc5

+ 26 - 0
src/api/zhu-yuan-yi-sheng/infectious-diseases.js

@@ -0,0 +1,26 @@
+import request from "@/utils/request";
+
+export function getContagiousDiseaseByPatNo(patNo) {
+    return request({
+        url: '/contagiousDisease/getContagiousDiseaseByPatNo',
+        method: 'get',
+        params: {patNo}
+    })
+}
+
+export function confirmCrb(data) {
+    return request({
+        url: '/contagiousDisease/confirmCrb',
+        method: 'post',
+        data
+    })
+}
+
+
+export function updateCrb(data) {
+    return request({
+        url: '/contagiousDisease/updateCrb',
+        method: 'post',
+        data
+    })
+}

+ 667 - 0
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/report-of-infectious-diseases/DialogDiseases.vue

@@ -1,8 +1,675 @@
 <template>
+  <span style="color:red;">患者数据来源病案首页</span>
+  <el-button @click="newlyAddedClick" type="success" icon="Plus">新增</el-button>
+  <div style="display: flex">
+    <div style="width: 400px">
+      <xc-table-v3 :data="infectiousDiseasesList" :height="getWindowSize.h / 1.2"
+                   @row-click="rowClick">
+        <el-table-column label="传染病名称" prop="contagion">
+          <template #default="{row}">
+            {{ getClassName(row)?.name }}
+          </template>
+        </el-table-column>
+        <el-table-column label="填报日期" prop="reportDate">
+        </el-table-column>
+      </xc-table-v3>
+    </div>
+    <div style="flex: 1;min-width: 800px">
+      <el-scrollbar :height="getWindowSize.h / 1.2">
+        <el-form ref="formRef" :model="sheetData"
+                 :rules="rules"
+                 label-width="100px" inline>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="报卡类别:" prop="cardNo">
+                {{ sheetData.cardNo }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="报卡类别:" prop="illType">
+                <el-select v-model="sheetData.illType">
+                  <el-option v-for="item in cardReportingType"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="姓名:">
+                {{ sheetData.name }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="家长姓名:">
+                <el-input v-model="sheetData.genearch"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="孕妇:">
+                <el-input v-model="sheetData.yunDays">
+                  <template #prepend>孕</template>
+                  <template #append>
+                    周
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号:">
+                <el-input v-model="sheetData.socialNo"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="性别:" prop="sex">
+                <el-select v-model="sheetData.sex">
+                  <el-option v-for="item in sexes"
+                             :label="item.name"
+                             :value="item.code.toString()"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="出生日期:">
+                <el-date-picker
+                    v-model="sheetData.birthDate"
+                    format="YYYY-MM-DD"
+                    value-format="YYYY-MM-DD"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="年龄:">
+                {{ sheetData.age }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="工作单位:">
+                <el-input v-model="sheetData.corporation"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="联系电话:" prop="relationTel">
+                <el-input v-model="sheetData.relationTel"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="病人属于:" prop="scopeFlag">
+                <el-select v-model="sheetData.scopeFlag">
+                  <el-option v-for="item in thePatientBelongsTo"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="职业:" prop="occupationCode">
+                <el-select v-model="sheetData.occupationCode">
+                  <el-option v-for="item in occupation"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="现住址:">
+                <el-input v-model="sheetData.currentDistrict"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="现街道:" prop="currentStreet">
+                <el-input v-model="sheetData.currentStreet"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="病历分类(乙型肝类、血吸虫病填写)"
+                        show-icon
+                        type="warning"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="分类(1):" prop="vaccinate">
+                <el-select v-model="sheetData.vaccinate">
+                  <el-option v-for="item in medicalRecordClassification1"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="分类(2):" prop="vaccinate2">
+                <el-select v-model="sheetData.vaccinate2">
+                  <el-option v-for="item in medicalRecordClassification2"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="发病日期:" prop="illStartDate">
+                <el-date-picker
+                    type="datetime"
+                    v-model="sheetData.illStartDate"
+                    format="YYYY-MM-DD HH:mm:ss"
+                    value-format="YYYY-MM-DD HH:mm:ss"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="诊断日期:" prop="illFirstDate">
+                <el-date-picker
+                    type="datetime"
+                    v-model="sheetData.illFirstDate"
+                    format="YYYY-MM-DD HH:mm:ss"
+                    value-format="YYYY-MM-DD HH:mm:ss"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="死亡日期:">
+                <el-date-picker
+                    type="datetime"
+                    v-model="sheetData.deathDate"
+                    format="YYYY-MM-DD HH:mm:ss"
+                    value-format="YYYY-MM-DD HH:mm:ss"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="传染病"
+                        show-icon
+                        type="warning"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="甲类:" prop="contagion">
+                <el-select v-model="sheetData.contagion"
+                           @change="changesInInfectiousDiseases('contagion')">
+                  <el-option v-for="item in classA"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
 
+            <el-col :span="8">
+              <el-form-item label="乙类:" prop="contagion2">
+                <el-select v-model="sheetData.contagion2"
+                           @change="changesInInfectiousDiseases('contagion2')">
+                  <el-option v-for="item in classB"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item label="丙类:" prop="contagion3">
+                <el-select v-model="sheetData.contagion3"
+                           @change="changesInInfectiousDiseases('contagion3')">
+                  <el-option v-for="item in classC"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="其他法定管理以及重点临测传染病"
+                        show-icon
+                        type="warning"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="其他" prop="contagionQt">
+                <el-select v-model="sheetData.contagionQt"
+                           @change="changesInInfectiousDiseases('contagionQt')">
+                  <el-option v-for="item in otherInfections"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="梅毒检测结果"
+                        show-icon
+                        type="warning"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="成人/患儿生母填写"
+                        show-icon
+                        type="info"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="TRUST/RPR:">
+                <el-select v-model="sheetData.mtrust">
+                  <el-option v-for="item in testing"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="滴度::">
+                <el-select v-model="sheetData.mrpr">
+                  <el-option v-for="item in other"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="TPPA/TPHA:">
+                <el-select v-model="sheetData.mtppa">
+                  <el-option v-for="item in testing"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="其他:">
+                <el-select v-model="sheetData.mother">
+                  <el-option v-for="item in testOther"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="患儿填写"
+                        show-icon
+                        type="info"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="TRUST/RPR:">
+                <el-select v-model="sheetData.ctrust">
+                  <el-option v-for="item in testing"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="滴度::">
+                <el-select v-model="sheetData.crpr">
+                  <el-option v-for="item in other"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="TPPA/TPHA:">
+                <el-select v-model="sheetData.ctppa">
+                  <el-option v-for="item in testing"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="19S-IgM-TPHA:">
+                <el-select v-model="sheetData.ctpha">
+                  <el-option v-for="item in testing"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="订正病名:" prop="contagionText">
+                <el-input v-model="sheetData.contagionText"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="诊断依据:" prop="disDiagType">
+                <el-select v-model="sheetData.disDiagType">
+                  <el-option v-for="item in diagnosticBasis"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="报告单位:">
+                长沙泰和医院
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="退卡原因:" prop="cardRet">
+                <el-input v-model="sheetData.cardRet"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="报告医生:">
+                {{ userData.name }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="联系电话:" prop="reportTel">
+                <el-input v-model="sheetData.reportTel"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="报告日期:" prop="reportDate">
+                {{ sheetData.reportDate }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="填卡日期:" prop="inputDt">
+                {{ sheetData.inputDt }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="备注:" prop="remark" style="width: 80%">
+                <el-input v-model="sheetData.remark"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="既往史:" prop="anamnesis">
+                <el-select v-model="sheetData.anamnesis">
+                  <el-option v-for="item in pastHistory"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="本次就诊:" prop="visitType">
+                <el-select v-model="sheetData.visitType">
+                  <el-option v-for="item in visitType"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-alert title="病毒性肝炎专报"
+                        show-icon
+                        type="warning"
+                        :closable="false"/>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="临床分型:" prop="gyLcfx">
+                <el-select v-model="sheetData.gyLcfx">
+                  <el-option v-for="item in gyLcfx"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="病原分型:" prop="gyByfx">
+                <el-select v-model="sheetData.gyByfx">
+                  <el-option v-for="item in gyByfx"
+                             :label="item.name"
+                             :value="item.code"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <!--     第一行       -->
+            <el-col :span="6">
+              <el-form-item label="ALT:" prop="valt">
+                <el-input v-model="sheetData.valt"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="总胆红质:" prop="vzdhz">
+                <el-input v-model="sheetData.vzdhz"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HAVIgM:" prop="vkhavigm">
+                <el-input v-model="sheetData.vkhavigm"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="HAV-RNA:" prop="vhavRna">
+                <el-input v-model="sheetData.vhavRna"/>
+              </el-form-item>
+            </el-col>
+            <!--     第2行       -->
+            <el-col :span="6">
+              <el-form-item label="HbsAg:" prop="vhbsag">
+                <el-input v-model="sheetData.vhbsag"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HBs:" prop="vkhbs">
+                <el-input v-model="sheetData.vkhbs"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="HBeAg:" prop="vhbeag">
+                <el-input v-model="sheetData.vhbeag"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HBe:" prop="vkhbe">
+                <el-input v-model="sheetData.vkhbe"/>
+              </el-form-item>
+            </el-col>
+            <!--     第3行       -->
+            <el-col :span="6">
+              <el-form-item label="抗-HBc:" prop="vkhbc">
+                <el-input v-model="sheetData.vkhbc"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HBcIgM:" prop="vkhbcigm">
+                <el-input v-model="sheetData.vkhbcigm"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="HBV-DNA:" prop="vhbvDna">
+                <el-input v-model="sheetData.vhbvDna"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HCV:" prop="vkhcv">
+                <el-input v-model="sheetData.vkhcv"/>
+              </el-form-item>
+            </el-col>
+            <!--     第4行       -->
+            <el-col :span="6">
+              <el-form-item label="HCV-RNA:" prop="vhcvrna">
+                <el-input v-model="sheetData.vhcvrna"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗-HDVIgM:" prop="vkhdvigm">
+                <el-input v-model="sheetData.vkhdvigm"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗HDV:" prop="vkhdv">
+                <el-input v-model="sheetData.vkhdv"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="HDV-RNA:" prop="vhdvRna">
+                <el-input v-model="sheetData.vhdvRna"/>
+              </el-form-item>
+            </el-col>
+            <!--     第5行       -->
+            <el-col :span="6">
+              <el-form-item label="抗-HEVIgM:" prop="vkhevigm">
+                <el-input v-model="sheetData.vkhevigm"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="抗HEV:" prop="vkhev">
+                <el-input v-model="sheetData.vkhev"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="HEV-RNA:" prop="vhevrna">
+                <el-input v-model="sheetData.vhevrna"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="订正病名:" prop="gyDzbm">
+                <el-input v-model="sheetData.gyDzbm"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-scrollbar>
+    </div>
+  </div>
 </template>
 
 <script setup name='DialogDiseases'>
+import {getAllDictionary, getSheetInfo} from "@/api/case-front-sheet";
+import {operations, sexes} from "@/data";
+import {autopsies, haveOrNot, yesOrNo} from "@/views/hospitalization/case-front-sheet/common";
+import {
+  cardReportingType, classA, classB, classC, diagnosticBasis, getClassName, gyByfx, gyLcfx,
+  medicalRecordClassification1, medicalRecordClassification2,
+  occupation, other, otherInfections, pastHistory, testing, testOther,
+  thePatientBelongsTo, visitType
+} from "@/data/infectious-diseases-data";
+import {getWindowSize} from "@/utils/window-size";
+import store from "@/store";
+import {getServerDateApi} from "@/api/public-api";
+import {stringIsBlank} from "@/utils/blank-utils";
+import {confirmCrb, getContagiousDiseaseByPatNo, updateCrb} from "@/api/zhu-yuan-yi-sheng/infectious-diseases";
+import XcTableV3 from "@/components/xiao-chan/xc-table-v3/XcTableV3.vue";
+
+const props = defineProps({
+  patNo: {
+    type: String,
+    default: '0406942'
+  },
+  times: {
+    type: Number,
+    default: 1
+  },
+  ward: {
+    type: String,
+    default: '8000001'
+  }
+})
+
+const emits = defineEmits(['confirm'])
+
+let userData = store.state.user.info
+let sheetData = $ref({})
+let dics = $ref({})
+let patInfo = $ref({})
+let infectiousDiseasesList = $ref([])
+
+const setDefault = async () => {
+  let date = await getServerDateApi()
+  sheetData.name = patInfo.name
+  sheetData.socialNo = patInfo.socialNo
+  sheetData.sex = patInfo.sex
+  sheetData.birthDate = patInfo.birthDate
+  sheetData.age = patInfo.age
+  sheetData.corporation = patInfo.unitName
+  sheetData.relationTel = patInfo.phone
+  sheetData.occupationCode = patInfo.occupation
+  sheetData.currentDistrict = patInfo.livePlaceCombo
+  sheetData.reportDate = date
+  sheetData.inputDt = date
+  sheetData.patientId = props.patNo
+  sheetData.times = props.times
+  sheetData.ageUnit = '岁'
+  sheetData.reportDept = props.ward
+  sheetData.reportHospital = '长沙泰和医院'
+}
+
+const changesInInfectiousDiseases = (val) => {
+  let temp = ['contagion', 'contagion2', 'contagion3', 'contagionQt']
+  temp.forEach(item => {
+    if (item !== val) {
+      sheetData[item] = null
+    }
+  })
+}
+
+const contagionFunc = (rule, value, callback) => {
+  if (stringIsBlank(sheetData.contagion)
+      && stringIsBlank(sheetData.contagion2)
+      && stringIsBlank(sheetData.contagion3)
+      && stringIsBlank(sheetData.contagionQt)) {
+    callback(new Error('至少选择一项'));
+  } else {
+    callback()
+  }
+}
+
+const vaccinateFunc = (rule, value, callback) => {
+  if (stringIsBlank(sheetData.vaccinate) && stringIsBlank(sheetData.vaccinate2)) {
+    callback(new Error('至少选择一项'));
+  } else {
+    callback()
+  }
+}
+
+const rules = reactive({
+  name: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  illType: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  sex: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  birthDate: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  relationTel: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  scopeFlag: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  occupationCode: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  currentStreet: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  vaccinate: [{validator: vaccinateFunc, message: '该项不能为空', trigger: 'blur'}],
+  vaccinate2: [{validator: vaccinateFunc, message: '该项不能为空', trigger: 'blur'}],
+  illStartDate: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  illFirstDate: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  contagion: [{message: '至少选择一项', validator: contagionFunc, trigger: 'blur'}],
+  contagion2: [{message: '至少选择一项', validator: contagionFunc, trigger: 'blur'}],
+  contagion3: [{message: '至少选择一项', validator: contagionFunc, trigger: 'blur'}],
+  contagionQt: [{message: '至少选择一项', validator: contagionFunc, trigger: 'blur'}],
+})
+
+const rowClick = (val) => {
+  sheetData = val
+}
+
+const newlyAddedClick = async () => {
+  sheetData = {}
+  await setDefault()
+}
+
+const query = async () => {
+  infectiousDiseasesList = await getContagiousDiseaseByPatNo(props.patNo)
+}
+
+onMounted(async () => {
+  await query()
+  patInfo = await getSheetInfo({
+    bah: props.patNo,
+    times: props.times,
+    inOutFlag: 1
+  })
+  await setDefault()
+  dics = await getAllDictionary()
+  dics.getOperations = operations
+  dics.getYesOrNo = yesOrNo
+  dics.getHaveOrNot = haveOrNot
+  dics.getAutopsies = autopsies
+})
+
+const formRef = ref(null)
+
+const confirm = () => {
+  formRef.value.validate(async (valid) => {
+    if (valid) {
+      if (stringIsBlank(sheetData.cardNo)) {
+        await confirmCrb(sheetData)
+      } else {
+        await updateCrb(sheetData)
+      }
+      await query()
+    }
+  })
+}
+
+defineExpose({
+  confirm
+})
 
 </script>
 

+ 27 - 5
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/report-of-infectious-diseases/ReportOfInfectiousDiseases.vue

@@ -1,18 +1,40 @@
 <template>
-  <button>传染病上报</button>
-  <dialog-diseases/>
+  <button @click="dialog = true">传染病上报</button>
+  <xc-dialog-v2 v-model="dialog" title="传染病上报" maximize show-button destroy-on-close
+                @confirm="confirm">
+    <dialog-diseases :pat-no="props.patNo"
+                     :times="props.times"
+                     :ward="props.ward"
+                     ref="dialogRef"/>
+  </xc-dialog-v2>
 </template>
 
 <script setup name='ReportOfInfectiousDiseases'>
 import DialogDiseases from "./DialogDiseases.vue";
+import {isDev} from "@/utils/public";
+import XcDialogV2 from "@/components/xiao-chan/dialog/XcDialogV2.vue";
 
 const props = defineProps({
-  patInfo: {
-    type: Object,
-    default: {}
+  patNo: {
+    type: String,
+    default: '0406942'
+  },
+  times: {
+    type: Number,
+    default: 1
+  },
+  ward: {
+    type: String,
+    default: '8000001'
   }
 })
 
+let dialog = $ref(false)
+const dialogRef = ref(null)
+
+const confirm = () => {
+  dialogRef.value.confirm()
+}
 
 </script>
 

+ 210 - 0
src/data/infectious-diseases-data.js

@@ -0,0 +1,210 @@
+import {stringNotBlank} from "@/utils/blank-utils";
+
+export const cardReportingType = [
+    {code: '01', name: '初次报告'},
+    {code: '02', name: '订正报告'},
+    {code: '03', name: '死亡'}
+]
+
+export const thePatientBelongsTo = [
+    {code: '01', name: '外省'},
+    {code: '02', name: '本县区'},
+    {code: '03', name: '本市其他县区'},
+    {code: '04', name: '本省其他城市'},
+    {code: '05', name: '港奥台'},
+    {code: '06', name: '外藉'}
+]
+
+export const occupation = [
+    {code: '11', name: '国家公务员'},
+    {code: '13', name: '专业技术人员'},
+    {code: '17', name: '职员'},
+    {code: '21', name: '企业管理人员'},
+    {code: '24', name: '工人'},
+    {code: '27', name: '农民'},
+    {code: '31', name: '学生'},
+    {code: '37', name: '现役军人'},
+    {code: '51', name: '自由职业者'},
+    {code: '54', name: '个体经营者'},
+    {code: '70', name: '无业人员'},
+    {code: '80', name: '退(离)休人员'},
+    {code: '90', name: '其他'},
+]
+
+export const medicalRecordClassification1 = [
+    {code: '1', name: '临床诊断'},
+    {code: '2', name: '实验室确诊'},
+    {code: '3', name: '疑似'},
+    {code: '4', name: '病原携带者'}
+]
+
+export const medicalRecordClassification2 = [
+    {code: '1', name: '急性'},
+    {code: '2', name: '慢性'}
+]
+
+export const classA = [
+    {code: '0100', name: '鼠疫'},
+    {code: '0200', name: '霍乱'}
+]
+
+export const classB = [
+    {code: '2002', name: '副伤寒'},
+    {code: '2001', name: '伤寒'},
+    {code: '0305', name: '肝炎(未分型)'},
+    {code: '0401', name: '细菌性痢疾'},
+    {code: '0402', name: '阿米巴性痢疾'},
+    {code: '0501', name: '伤寒'},
+    {code: '0502', name: '副伤寒'},
+    {code: '0600', name: '艾滋病'},
+    {code: '0700', name: '淋病'},
+    {code: '0801', name: '梅毒Ⅰ期'},
+    {code: '0802', name: '梅毒Ⅱ期'},
+    {code: '0803', name: '梅毒Ⅲ期'},
+    {code: '0804', name: '梅毒胎传'},
+    {code: '0805', name: '梅毒隐性'},
+    {code: '0900', name: '脊髓灰质炎'},
+    {code: '1000', name: '麻疹'},
+    {code: '1100', name: '百日咳'},
+    {code: '1200', name: '白喉'},
+    {code: '1400', name: '猩红热'},
+    {code: '1500', name: '流行性出血热'},
+    {code: '1600', name: '狂犬病'},
+    {code: '1700', name: '钩端螺旋体病'},
+    {code: '1800', name: '布鲁氏菌病'},
+    {code: '2100', name: '流行性乙型脑炎'},
+    {code: '2301', name: '间日疟'},
+    {code: '2302', name: '恶性疟'},
+    {code: '2303', name: '疟疾未分型'},
+    {code: '2400', name: '登革热'},
+    {code: '2500', name: '新生儿破伤风'},
+    {code: '2603', name: '肺结核未痰检'},
+    {code: '2604', name: '肺结核仅培阳'},
+    {code: '3100', name: '血吸虫病'},
+    {code: '5100', name: '不明原因肺炎'},
+    {code: '2702', name: '传染性非典型肺炎'},
+    {code: '0306', name: '甲型肝炎'},
+    {code: '0307', name: '乙型肝炎'},
+    {code: '0308', name: '丙型肝炎'},
+    {code: '0309', name: '戊型肝炎'},
+    {code: '5500', name: '人感染高致病性禽流感'},
+    {code: '1901', name: '肺炭疽'},
+    {code: '1902', name: '皮肤炭疽'},
+    {code: '1903', name: '未分型炭疽'},
+    {code: '2606', name: '肺结核涂阳'},
+    {code: '2607', name: '肺结核菌阴'},
+    {code: '5600', name: '流行性脑脊髓膜炎'},
+    {code: '5800', name: '甲型H1N1流感'},
+]
+
+export const classC = [
+    {code: '2200', name: '黑热病'},
+    {code: '3200', name: '丝虫病'},
+    {code: '3300', name: '包虫病'},
+    {code: '3400', name: '麻风病'},
+    {code: '3500', name: '流行性感冒'},
+    {code: '3600', name: '流行性腮腺炎'},
+    {code: '3700', name: '风疹'},
+    {code: '3800', name: '急性出血性结膜炎'},
+    {code: '3900', name: '其他感染性腹泻'},
+    {code: '5700', name: '流行性和地方性斑疹伤寒'},
+    {code: '5900', name: '手足口病'}
+]
+
+export const otherInfections = [
+    {code: '4100', name: '非淋菌性尿道炎(衣原体)'},
+    {code: '4200', name: '尖锐湿疣'},
+    {code: '4300', name: '生殖器疱疹'},
+    {code: '5200', name: '水痘'},
+    {code: '5400', name: '肝吸虫病'},
+    {code: '4000', name: '生殖道沙眼衣原体感染'},
+    {code: '6000', name: '恙虫病'},
+    {code: '6100', name: '森林脑炎'},
+    {code: '6200', name: '结核性胸膜炎'},
+    {code: '6300', name: '人感染猪链球菌'},
+    {code: '6400', name: '人粒细胞无形体病'},
+]
+
+export const testing = [
+    {code: '0', name: '没检测'},
+    {code: '1', name: '阴性'},
+    {code: '2', name: '阳性'}
+]
+
+export const other = [
+    {code: '0', name: '1:1'},
+    {code: '1', name: '1:2'},
+    {code: '2', name: '1:4'},
+    {code: '3', name: '1:8'},
+    {code: '4', name: '1:16'},
+    {code: '5', name: '1:32'},
+    {code: '6', name: '1:61己以上'},
+    {code: '7', name: '无'},
+]
+
+export const testOther = [
+    {code: '0', name: '暗视野显微镜检查阳性'},
+    {code: '1', name: 'ELISA阳性'},
+    {code: '2', name: 'VDRL阳性'},
+    {code: '3', name: 'FTA-ABS阳性'},
+]
+
+export const diagnosticBasis = [
+    {code: '1', name: '临床'},
+    {code: '2', name: '流行病学'},
+    {code: '3', name: '特异性诊断'},
+]
+
+export const pastHistory = [
+    {code: '1', name: '有'},
+    {code: '0', name: '无'}
+]
+
+export const visitType = [
+    {code: '初诊', name: '初诊'},
+    {code: '复诊', name: '复诊'},
+    {code: '急性发作', name: '急性发作'},
+]
+
+export const gyLcfx = [
+    {code: '急黄肝', name: '急黄肝'},
+    {code: '隐无黄肝', name: '隐无黄肝'},
+    {code: '慢迁肝', name: '慢迁肝'},
+    {code: '慢活肝', name: '慢活肝'},
+    {code: '重肝', name: '重肝'},
+    {code: '瘀胆肝', name: '瘀胆肝'},
+    {code: '肝硬化', name: '肝硬化'},
+]
+
+export const gyByfx = [
+    {code: '甲型', name: '甲型'},
+    {code: '乙型', name: '乙型'},
+    {code: '丙型', name: '丙型'},
+    {code: '戊型', name: '戊型'},
+    {code: '未分型', name: '未分型'},
+    {code: '病原携带者', name: '病原携带者'}
+]
+
+export const getClassName = (data) => {
+    if (stringNotBlank(data.contagion)) {
+        return classA.filter(item => {
+            return item.code === data.contagion
+        })[0]
+    }
+
+    if (stringNotBlank(data.contagion2)) {
+        return classB.filter(item => {
+            return item.code === data.contagion2
+        })[0]
+    }
+    if (stringNotBlank(data.contagion3)) {
+        return classC.filter(item => {
+            return item.code === data.contagion3
+        })[0]
+    }
+    if (stringNotBlank(data.contagionQt)) {
+        return otherInfections.filter(item => {
+            return item.code === data.contagionQt
+        })[0]
+    }
+}

+ 3 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/YiZhuLuRu.vue

@@ -23,7 +23,9 @@
       <button @click="confirmAssociationClick" title="关联医嘱">关联</button>
       <button @click="openRationalDrugUse" title="进入到合理用药的页面">合理用药</button>
       <button @click="allergen.open()" title="患者过敏源信息维护">患者过敏源信息维护</button>
-      <report-of-infectious-diseases/>
+      <report-of-infectious-diseases :pat-no="huanZheXinXi.inpatientNo"
+                                     :times="huanZheXinXi.admissTimes"
+                                     :ward="huanZheXinXi.admissWard"/>
     </div>
     <div style="height: 5px"/>
     <yz-editor :patient-info="huanZheXinXi"