You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
721 lines
20 KiB
721 lines
20 KiB
<template>
|
|
<div class="box">
|
|
<switchingSlip @handleLeft="handleLeft" @handleRight="handleRight">
|
|
<!-- 现病史 -->
|
|
<div style="padding-bottom: 40px" v-if="bodyArray.length">
|
|
<div
|
|
style="
|
|
padding-bottom: 20px;
|
|
text-align: left;
|
|
font-size: 16px;
|
|
line-height: 40px;
|
|
"
|
|
:key="index"
|
|
v-for="(people, index) in bodyArray"
|
|
>
|
|
<div class="div-car">
|
|
<div class="title">就诊信息</div>
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>就诊类型</span>
|
|
<a-select class="w-full" v-model="people.visitType">
|
|
<a-select-option value="0"> 门诊 </a-select-option>
|
|
<a-select-option value="1"> 住院 </a-select-option>
|
|
</a-select>
|
|
<span class="required" style="color: red">*</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>就诊号</span>
|
|
<a-input v-model="people.outpatientNo" />
|
|
<span class="required" style="color: red">*</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>年龄</span>
|
|
<a-input v-model="people.age" type="number" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>就诊科室</span>
|
|
<a-input v-model="people.department" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>就诊/主治医生</span>
|
|
<a-input v-model="people.doctor" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>就诊/入院日期</span>
|
|
<el-date-picker
|
|
v-model="people.admissionDate"
|
|
type="date"
|
|
placeholder="仅住院填写"
|
|
>
|
|
</el-date-picker>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>住院次数</span>
|
|
<a-input v-model="people.admissionCount" type="number" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>入院途径</span>
|
|
<a-select
|
|
:class="{
|
|
'w-full1': people.admissionMethod,
|
|
'w-full': !people.admissionMethod,
|
|
}"
|
|
v-model="people.admissionMethod"
|
|
placeholder="仅住院填写"
|
|
>
|
|
<a-select-option
|
|
:key="index"
|
|
:value="status.id"
|
|
v-for="(status, index) in admissionMethods"
|
|
>
|
|
{{ status.name }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
<div
|
|
class="div-li"
|
|
style="text-align: left"
|
|
v-if="people.admissionMethod == 4"
|
|
>
|
|
<span>入院途径(其他)</span>
|
|
<a-input v-model="people.admissionMethodOther" />
|
|
</div>
|
|
|
|
<div class="div-li" style="text-align: left">
|
|
<span>床位号</span>
|
|
<a-input
|
|
v-model="people.bedNumber"
|
|
placeholder="仅住院填写"
|
|
type="number"
|
|
/>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>出院日期</span>
|
|
<el-date-picker
|
|
v-model="people.dischargeDate"
|
|
type="date"
|
|
placeholder="仅住院填写"
|
|
>
|
|
</el-date-picker>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>离院方式</span>
|
|
<a-select
|
|
:class="{
|
|
'w-full1': people.admissionMethod,
|
|
'w-full': !people.admissionMethod,
|
|
}"
|
|
v-model="people.dischargeMethod"
|
|
placeholder="仅住院填写"
|
|
>
|
|
<a-select-option
|
|
:key="index"
|
|
:value="status.id"
|
|
v-for="(status, index) in dischargeMethods"
|
|
>
|
|
{{ status.name }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 检查信息 -->
|
|
<div class="div-car">
|
|
<div class="title">检查信息</div>
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>身高</span>
|
|
<a-input
|
|
v-model="people.height"
|
|
type="number"
|
|
@blur="calcBmi(people)"
|
|
/>
|
|
<span>cm</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>体重</span>
|
|
<a-input
|
|
v-model="people.weight"
|
|
type="number"
|
|
@blur="calcBmi(people)"
|
|
/>
|
|
<span>kg</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>BMI</span>
|
|
<a-input v-model="people.bmi" :disabled="true" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>T值</span>
|
|
<a-input v-model="people.tz" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>体温</span>
|
|
<a-input v-model="people.temperature" type="number" />
|
|
<span>℃</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>收缩压</span>
|
|
<a-input v-model="people.systolicPressure" type="number" />
|
|
<span>mmHg</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>舒张压</span>
|
|
<a-input v-model="people.diastolicPressure" />
|
|
<span>mmHg</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>脉搏</span>
|
|
<a-input v-model="people.pulse" type="number" />
|
|
<span>次</span>
|
|
</div>
|
|
|
|
<div class="div-li" style="text-align: left">
|
|
<span>肌酐</span>
|
|
<a-input v-model="people.creatinine" type="number" />
|
|
<span>umol/L</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>血氧饱和度</span>
|
|
<a-input v-model="people.oxygenSaturation" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>白蛋白</span>
|
|
<a-input v-model="people.albumin" type="number" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>总蛋白</span>
|
|
<a-input v-model="people.totalProtein" type="number" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="div-ul">
|
|
<div class="div-li" style="text-align: left">
|
|
<span>维生素D3测定</span>
|
|
<a-input v-model="people.vitaminD3" />
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>凝血酶原时间</span>
|
|
<a-input v-model="people.hematocrit" type="number" />
|
|
<span>秒</span>
|
|
</div>
|
|
<div class="div-li" style="text-align: left">
|
|
<span>D-二聚体</span>
|
|
<a-input v-model="people.dimer" type="number" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="div-car">
|
|
<div class="title">诊断信息</div>
|
|
<Assist ref="Assist"> </Assist>
|
|
</div>
|
|
<div class="div-car">
|
|
<div class="title">用药信息</div>
|
|
<pastNowHistory ref="pastNowHistory"> </pastNowHistory>
|
|
</div>
|
|
<div class="div-car">
|
|
<div class="title">病史信息</div>
|
|
<personalHistory ref="personalHistory"> </personalHistory>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<p @click="handleEvaluation()" class="div-step">下一步</p>
|
|
</div>
|
|
</switchingSlip>
|
|
|
|
<el-dialog
|
|
title="选择评估版本"
|
|
:visible.sync="open"
|
|
width="80%"
|
|
append-to-body
|
|
class="popup"
|
|
:close-on-click-modal="false"
|
|
:show-close="false"
|
|
>
|
|
<div>
|
|
<a-radio-group class="w-full text-left" v-model="version">
|
|
<a-radio :value="item.id" v-for="item in dictList" :key="item.id">
|
|
<span>{{ item.version }}</span>
|
|
</a-radio>
|
|
</a-radio-group>
|
|
</div>
|
|
|
|
<div style="text-align: right; margin-top: 16px">
|
|
<el-button type="primary" @click="handleStep">下一步</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapState, mapMutations } from "vuex";
|
|
import personalHistory from "views/Patient/personalHistory";
|
|
import pastNowHistory from "views/Patient/pastNowHistory";
|
|
import Assist from "views/Patient/Assist";
|
|
import {
|
|
patientParentIllness,
|
|
body,
|
|
dischargeMethods,
|
|
admissionMethods,
|
|
} from "@/views/Patient/config";
|
|
import {
|
|
illnessHistory,
|
|
queryPatientIllnessHistory,
|
|
editPatientOtherMsg,
|
|
bindPatient,
|
|
dictList,
|
|
icdQuery,
|
|
} from "api/ams";
|
|
import switchingSlip from "components/switchingSlip";
|
|
export default {
|
|
name: "Family",
|
|
props: {
|
|
isEvaluation: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
base: {
|
|
type: Object,
|
|
default: () => body,
|
|
},
|
|
source: {
|
|
type: String,
|
|
default: "normal",
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
open: false,
|
|
collapse: true,
|
|
name: "PmsPatientBody",
|
|
dischargeMethods, // 离院方式
|
|
admissionMethods, // 入院途径
|
|
visible: false, // 弹框
|
|
flat: false,
|
|
dictList: [],
|
|
version: "0",
|
|
};
|
|
},
|
|
components: {
|
|
switchingSlip,
|
|
personalHistory,
|
|
pastNowHistory,
|
|
Assist,
|
|
},
|
|
computed: {
|
|
...mapState("user", ["route", "query", "userInfo"]),
|
|
...mapState("ht", [
|
|
"createId",
|
|
"patientData",
|
|
"doctorName",
|
|
"reportId",
|
|
"bodyArray",
|
|
"recordPatientData",
|
|
]),
|
|
},
|
|
|
|
created() {
|
|
this.getDictList();
|
|
|
|
if (!this.bodyArray.length) {
|
|
this.handleNewly();
|
|
} else {
|
|
this.bodyArray.forEach((item) => {
|
|
if (!item.department) {
|
|
item.department = this.userInfo.deptName || "";
|
|
}
|
|
});
|
|
}
|
|
this.setEvaluationPath({
|
|
name: "evaluation",
|
|
createId: this.createId,
|
|
code: "",
|
|
num: "",
|
|
patientData: this.patientData,
|
|
status: 1,
|
|
});
|
|
},
|
|
methods: {
|
|
...mapMutations("ht", ["addBodyArray", "setEvaluationPath"]),
|
|
// 左滑
|
|
handleLeft() {
|
|
this.$router.push({
|
|
path: "evaPatientInfo",
|
|
});
|
|
},
|
|
// 右滑
|
|
handleRight() {
|
|
this.handleRules(); // 校验表单
|
|
},
|
|
// 计算bmi
|
|
calcBmi(_people) {
|
|
if (_people.height && _people.weight) {
|
|
_people.bmi = (_people.weight / (_people.height / 100) ** 2).toFixed(2);
|
|
this.$forceUpdate();
|
|
}
|
|
},
|
|
|
|
// 查字典表数据
|
|
async getDictList() {
|
|
const res = await dictList({
|
|
pageNum: -1,
|
|
param: {},
|
|
});
|
|
const { code, msg, data } = res;
|
|
if (code === 200) {
|
|
this.dictList = data;
|
|
this.version = "1982749726432432128";
|
|
}
|
|
},
|
|
// 开始评估
|
|
async handleEvaluation() {
|
|
await this.handleRules(); // 校验表单
|
|
},
|
|
// 选择评估版本
|
|
async handleStep() {
|
|
const res = await bindPatient({
|
|
evaluationId: this.createId,
|
|
patientId: this.patientData.patientId,
|
|
version: this.version,
|
|
});
|
|
const { code, msg, data } = res;
|
|
if (code === 200) {
|
|
localStorage.setItem("version", this.version);
|
|
this.$router.push({
|
|
path: "chooseSetMeal",
|
|
query: {
|
|
patientId: this.patientData.patientId,
|
|
},
|
|
});
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
console.log("下一步");
|
|
},
|
|
handleNewly() {
|
|
this.addBodyArray({
|
|
id: "",
|
|
visitType: "0", // 就诊类型(0:就诊1:住院)
|
|
outpatientNo: "", // 门诊号
|
|
age: "", // 年龄
|
|
department: "", // 科室
|
|
doctor: "", // 医生
|
|
admissionDate: "", // 入院日期
|
|
admissionCount: "", // 入院次数
|
|
admissionMethod: "", // 入院途径
|
|
admissionMethodOther: "", // 入院途径其他
|
|
bedNumber: "", // 床位号
|
|
dischargeDate: "", // 出院日期
|
|
dischargeMethod: "", // 离院方式
|
|
|
|
height: "", // 身高
|
|
weight: "", // 体重
|
|
tz: "", // T值
|
|
temperature: "", // 体温
|
|
systolicPressure: "", // 收缩压
|
|
diastolicPressure: "", // 舒张压
|
|
pulse: "", // 脉搏
|
|
creatinine: "", // 肌酐(umol/L)
|
|
oxygenSaturation: "", // 血氧饱和度
|
|
albumin: "", // 白蛋白
|
|
totalProtein: "", // 总蛋白
|
|
vitaminD3: "", // 维生素D3测定
|
|
hematocrit: "", // 凝血酶原时间
|
|
dimer: "", // D-二聚体
|
|
});
|
|
},
|
|
// 必填校验
|
|
async handleRules() {
|
|
if (!this.recordPatientData?.patientId) {
|
|
this.$message.error("请先填写基本信息并提交");
|
|
return;
|
|
}
|
|
if (!this.bodyArray[0].visitType) {
|
|
this.$message.error("就诊类型不能为空");
|
|
return;
|
|
}
|
|
// 判断是否填写就诊号
|
|
if (!this.bodyArray[0].outpatientNo) {
|
|
this.$message.error("就诊号不能为空");
|
|
return;
|
|
}
|
|
let personalHistory = await this.$refs.personalHistory[0].handleSubmit(); // 病史信息
|
|
let pastNowHistory = await this.$refs.pastNowHistory[0].handleSubmit(); // 用药信息
|
|
let Assist = await this.$refs.Assist[0].handleSubmit(); // 诊断信息
|
|
let diagnosis = await this.handleSubmit(); // 就诊信息
|
|
// 全部提交完成后,选择评估版本
|
|
if (personalHistory && pastNowHistory && Assist && diagnosis) {
|
|
this.open = true;
|
|
}
|
|
},
|
|
|
|
async handleSubmit(_type) {
|
|
return new Promise(async (resolve, reject) => {
|
|
try {
|
|
let data = JSON.parse(JSON.stringify(this.bodyArray));
|
|
for (const item of data) {
|
|
if (!item.patientId) {
|
|
item.patientId = this.recordPatientData.patientId;
|
|
}
|
|
}
|
|
let params = {
|
|
param: {
|
|
editType: "PmsPatientBody",
|
|
model: data[0],
|
|
},
|
|
};
|
|
const res = await editPatientOtherMsg(params);
|
|
const { code, msg } = res;
|
|
if (code === 200) {
|
|
this.bodyArray.forEach((item, index) => {
|
|
item.patientId = this.recordPatientData.patientId;
|
|
});
|
|
} else {
|
|
this.$message.error(msg);
|
|
resolve(false);
|
|
return;
|
|
}
|
|
resolve(true);
|
|
} catch (err) {
|
|
reject(false);
|
|
}
|
|
});
|
|
},
|
|
},
|
|
beforeDestroy() {
|
|
this.body = Object.assign({}, body);
|
|
},
|
|
};
|
|
</script>
|
|
<style scoped>
|
|
.w-full,
|
|
.w-full1 {
|
|
width: 100%;
|
|
}
|
|
>>> .w-full .ant-select-selection__placeholder,
|
|
>>> .w-full .ant-select-search__field__placeholder {
|
|
display: block !important;
|
|
}
|
|
>>> .ant-select-selection {
|
|
border: none;
|
|
border-bottom: 1px solid #888888;
|
|
}
|
|
>>> .ant-select-disabled {
|
|
background-color: #ffffff !important;
|
|
}
|
|
>>> .ant-select-disabled .ant-select-selection {
|
|
border-bottom: 1px dashed #888888;
|
|
}
|
|
.ant-radio-group {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
}
|
|
>>> .ant-radio-wrapper {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 18px !important;
|
|
}
|
|
>>> .el-dialog__body {
|
|
padding: 20px 20px 20px 20px !important;
|
|
}
|
|
|
|
.popup-p-icon {
|
|
color: #e6a23c;
|
|
font-size: 24px;
|
|
margin-right: 10px;
|
|
}
|
|
>>> .el-button {
|
|
padding: 8px 11px !important;
|
|
}
|
|
.popup-p {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 14px;
|
|
margin-bottom: 0;
|
|
}
|
|
.div-step {
|
|
position: fixed;
|
|
left: 0;
|
|
right: 0;
|
|
margin: auto;
|
|
bottom: 20px;
|
|
z-index: 999;
|
|
font-size: 18px;
|
|
width: 300px;
|
|
line-height: 48px;
|
|
background: #5cc0be;
|
|
border-radius: 6px 6px 6px 6px;
|
|
text-align: center;
|
|
color: #fff;
|
|
}
|
|
.div-car {
|
|
padding: 16px 16px 0 16px;
|
|
background: #fff;
|
|
border-radius: 10px;
|
|
margin-bottom: 16px;
|
|
}
|
|
.lighten-5 {
|
|
border-bottom: 1px solid #d9d9d9;
|
|
padding-bottom: 20px;
|
|
margin-bottom: 20px;
|
|
}
|
|
.lighten-5:last-child {
|
|
border-bottom: none !important;
|
|
}
|
|
.title {
|
|
font-size: 16px;
|
|
border-bottom: 1px solid #d9d9d9;
|
|
margin-bottom: 16px;
|
|
line-height: 20px;
|
|
padding-bottom: 14px;
|
|
}
|
|
>>> .el-input__icon {
|
|
display: none;
|
|
}
|
|
>>> .el-date-editor.el-input {
|
|
height: 32px;
|
|
line-height: 32px;
|
|
width: 74%;
|
|
}
|
|
>>> .el-input--prefix .el-input__inner {
|
|
padding: 4px 11px;
|
|
}
|
|
>>> .el-input__inner {
|
|
font-size: 16px;
|
|
color: #222222;
|
|
height: 32px !important;
|
|
line-height: 32px !important;
|
|
border: none;
|
|
color: rgba(0, 0, 0, 0.65);
|
|
border-bottom: 1px solid #888888;
|
|
border-radius: 4px;
|
|
font-size: 14px;
|
|
}
|
|
>>> .el-input__inner::placeholder {
|
|
color: #bfbfbf;
|
|
font-weight: 500;
|
|
font-size: 14px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.div-title {
|
|
flex-shrink: 0;
|
|
}
|
|
.div-info {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
.userInfo {
|
|
display: flex;
|
|
}
|
|
/deep/.ant-btn-success {
|
|
color: #fff;
|
|
background-color: #00825a;
|
|
border-color: #00825a;
|
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
|
|
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
|
|
}
|
|
|
|
.btn {
|
|
width: 120px;
|
|
height: 42px;
|
|
font-size: 16px;
|
|
margin: 10px 0;
|
|
}
|
|
|
|
.box-width {
|
|
min-width: 84px;
|
|
width: 84px;
|
|
text-align: right;
|
|
line-height: 32px;
|
|
}
|
|
|
|
.add-new-box {
|
|
width: 100%;
|
|
position: relative;
|
|
height: 0px;
|
|
}
|
|
|
|
.add-new {
|
|
position: absolute;
|
|
right: 0;
|
|
top: -8px;
|
|
}
|
|
|
|
.red--text-box {
|
|
text-align: left;
|
|
margin-bottom: 4px;
|
|
font-size: 16px;
|
|
font-family: Source Han Sans CN, Source Han Sans CN-Regular;
|
|
}
|
|
|
|
.w-full,
|
|
.w-full1 {
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
<style lang="less" scoped>
|
|
/deep/.ant-input[disabled] {
|
|
background-color: #ffffff !important;
|
|
}
|
|
/deep/.w-full .ant-select-selection__placeholder,
|
|
/deep/ .w-full .ant-select-search__field__placeholder {
|
|
display: block !important;
|
|
}
|
|
/deep/.ant-select-selection {
|
|
border: none;
|
|
border-bottom: 1px solid #888888;
|
|
}
|
|
/deep/ .ant-card-body {
|
|
padding-bottom: 0 !important;
|
|
}
|
|
.div-ul {
|
|
width: 100%;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
.div-li {
|
|
font-size: 16px;
|
|
width: 32.33%;
|
|
display: flex;
|
|
align-items: center;
|
|
margin-right: 1%;
|
|
position: relative;
|
|
margin-bottom: 24px;
|
|
span {
|
|
line-height: 32px;
|
|
flex-shrink: 0;
|
|
}
|
|
.required {
|
|
color: red;
|
|
position: absolute;
|
|
top: -5px;
|
|
left: -5px;
|
|
}
|
|
}
|
|
.div-li:nth-child(3n) {
|
|
margin-right: 0;
|
|
}
|
|
}
|
|
|
|
/deep/.ant-input {
|
|
border: none;
|
|
border-bottom: 1px solid #888888;
|
|
}
|
|
/deep/.ant-input:focus {
|
|
box-shadow: none !important;
|
|
}
|
|
</style>
|
|
|