Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web
This commit is contained in:
commit
a601da3426
|
|
@ -1,11 +1,15 @@
|
|||
<template>
|
||||
<el-table :data="data.goodsDetail" max-height="150" style="width: 100%">
|
||||
<el-table-column prop="name" label="名称" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="selectedPrice" label="单价" ></el-table-column>
|
||||
<el-table-column prop="selectedPrice" label="单价" >
|
||||
<template #default="scope">
|
||||
¥{{scope.row.selectedPrice}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="number" label="数量" >
|
||||
<template #default="scope">
|
||||
<div v-if="data.status == 0">
|
||||
<el-input-number v-model="scope.row.selectedNum" min="0" @change="handleNumChange"></el-input-number>
|
||||
<el-input-number v-model="scope.row.selectedNum" min="0" @change="handleNumChange" size="small"></el-input-number>
|
||||
<el-dropdown>
|
||||
<span style="line-height: 30px;margin-left: 10px">{{ scope.row.selectedUnit }}</span>
|
||||
<template #dropdown>
|
||||
|
|
@ -24,13 +28,19 @@
|
|||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="小计" >
|
||||
<template #default="scope">
|
||||
¥{{ scope.row.selectedNum*scope.row.selectedPrice }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" v-if="data.status == 0" >
|
||||
<template #default="scope">
|
||||
<el-button type="danger" link @click="delGoods(scope.row)">X</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<SearchInput :disabled="data.status == 1" :request-api="goodsSearchApi" :show-config="goodsShowConfig" @selectedCallBack="goodsSelect"></SearchInput>
|
||||
<SearchInput v-if="data.status == 0" :request-api="goodsSearchApi" :show-config="goodsShowConfig" @selectedCallBack="goodsSelect"></SearchInput>
|
||||
<span>合计:¥{{getTotalPrice()}}</span>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import SearchInput from "@/components/SearchInput.vue";
|
||||
|
|
@ -82,7 +92,16 @@ const emit = defineEmits(["totalPriceChange"])
|
|||
const handleNumChange = ()=>{
|
||||
emit('totalPriceChange')
|
||||
}
|
||||
const getTotalPrice =()=>{
|
||||
let totalPrice = 0;
|
||||
data.value.goodsDetail?.forEach((item:any)=>{
|
||||
totalPrice += item.selectedNum*item.selectedPrice
|
||||
})
|
||||
return totalPrice;
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
|
||||
:deep(.el-table__cell){
|
||||
padding: 0 4px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -2,45 +2,150 @@
|
|||
|
||||
<template>
|
||||
<Panel title="患者信息">
|
||||
<div style="height: 100%;">
|
||||
<el-descriptions
|
||||
border
|
||||
:column="2"
|
||||
style="padding: 0 10px;height: 100%"
|
||||
>
|
||||
<el-descriptions-item label="姓名">
|
||||
{{patientInfo.name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
{{ patientInfo.sex == 1 ? '男' : '女'}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="年龄">
|
||||
{{patientInfo.age}}岁
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
{{getKey(antys,patientInfo.nation)}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="手机号">
|
||||
{{patientInfo.phone }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="证件类型">
|
||||
{{getKey(psnCertTypes,patientInfo.certType)}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="证件号码">
|
||||
{{ patientInfo.certNo}}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div v-if="!seeDockerInfo?.patientInfo" style="display: flex;align-items: center;justify-content: center;height: 120px">请选择患者......</div>
|
||||
<div v-else style="padding: 0 24px">
|
||||
<div class="avatar">
|
||||
<img class="avatar-image"
|
||||
:src="seeDockerInfo?.patientInfo?.sex == 1 ?'/static/images/outpatient/man.png':seeDockerInfo?.patientInfo?.sex == 2 ?'/static/images/outpatient/women.png':'-'"
|
||||
alt=""/>
|
||||
<div class="avatar-info-wrapper">
|
||||
<div class="avatar-info">
|
||||
<span class="avatar-info-name">{{ seeDockerInfo?.patientInfo?.name }}</span>
|
||||
<span class="avatar-info-age">{{ seeDockerInfo?.patientInfo?.age}}</span>
|
||||
</div>
|
||||
<div class="avatar-info-phone-num">
|
||||
<span class="avatar-info-phone">{{ seeDockerInfo?.patientInfo?.phone }}</span>
|
||||
<span class="avatar-info-num">就诊次数:<i class="caret-num">{{
|
||||
seeDockerInfo?.seeDoctorCount || 0
|
||||
}}次</i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div>挂号医生: <span
|
||||
class="detail-doctor">{{ seeDockerInfo?.dockerName }}-{{ seeDockerInfo?.sectionName }}</span>
|
||||
</div>
|
||||
<div class="detail-middle">
|
||||
<div>费用类别: <span class="detail-doctor">医保</span></div>
|
||||
<div>医保卡剩余金额: <span class="detail-balance">{{ seeDockerInfo?.socialBalance }}元</span></div>
|
||||
</div>
|
||||
<div>上次就诊时间: <span class="detail-doctor">{{
|
||||
formatDate(seeDockerInfo?.lastSeeDoctorTime)
|
||||
}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</Panel>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.avatar {
|
||||
height: 60px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.avatar-image {
|
||||
width: 60px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.avatar-info-wrapper {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
font-style: normal;
|
||||
|
||||
.avatar-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.avatar-info-name {
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
color: #333333;
|
||||
font-style: normal;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.avatar-info-age {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.avatar-info-phone-num {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.avatar-info-num {
|
||||
margin-left: 28px;
|
||||
|
||||
.avatar-info-phone {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.caret-num {
|
||||
color: #4D6DE4;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.detail {
|
||||
margin-top: 16px;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: rgba(23, 26, 29, 0.7);
|
||||
font-style: normal;
|
||||
height: 80px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.detail-doctor {
|
||||
font-weight: 500;
|
||||
color: rgba(23, 26, 29, 1);
|
||||
}
|
||||
|
||||
.detail-middle {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.detail-balance {
|
||||
font-weight: 500;
|
||||
color: rgba(#FF4D4F, 1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script setup lang="ts">
|
||||
|
||||
import {getKey} from "@/utils/discrotyUtil.ts";
|
||||
import antys from "@/assets/config/directory/antys.json";
|
||||
import psnCertTypes from "@/assets/config/directory/psnCertTypes.json";
|
||||
import {formatDate} from "@/utils/dateUtils.ts"
|
||||
import Panel from "@/components/common/Panel.vue";
|
||||
const patientInfo:any = defineModel();
|
||||
import {onMounted, ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
const seeDockerInfo = ref<any>();
|
||||
const getSeeDockerInfo = (newValue:any) => {
|
||||
debugger
|
||||
if (!newValue)return;
|
||||
post('medical/record/getSeeDockerInfo', {regisId: newValue}).then((res: any) => {
|
||||
seeDockerInfo.value = res
|
||||
debugger
|
||||
})
|
||||
}
|
||||
const init =(regisId:any)=>{
|
||||
getSeeDockerInfo(regisId)
|
||||
}
|
||||
defineExpose({ init})
|
||||
|
||||
</script>
|
||||
|
|
@ -1,12 +1,22 @@
|
|||
<template>
|
||||
<el-table :data="data.itemDetail" max-height="150">
|
||||
<el-table-column prop="itemName" label="名称" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="selectedUnit" label="单位"></el-table-column>
|
||||
<el-table-column prop="selectedPrice" label="单价"></el-table-column>
|
||||
<el-table-column prop="itemName" label="项目名称" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="单价">
|
||||
<template #default="scope">
|
||||
¥{{scope.row.selectedPrice}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数量">
|
||||
<template #default="scope">
|
||||
<el-input-number v-model="scope.row.selectedNum" min="0"
|
||||
@change="handleNumChange"></el-input-number>
|
||||
@change="handleNumChange" v-if="data.status == 0" size="small"></el-input-number>
|
||||
<span v-else>{{scope.row.selectedNum}}</span>
|
||||
{{scope.row.selectedUnit}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="小计">
|
||||
<template #default="scope">
|
||||
¥{{scope.row.selectedNum*scope.row.selectedPrice}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" v-if="data.status ==0">
|
||||
|
|
@ -15,8 +25,9 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<SearchInput :disabled="data.status == 1" :request-api="serviceSearchApi" :show-config="serviceShowConfig"
|
||||
<SearchInput v-if="data.status == 0" :request-api="serviceSearchApi" :show-config="serviceShowConfig"
|
||||
@selectedCallBack="serviceSelect"></SearchInput>
|
||||
<span>合计:¥{{getTotalPrice()}}</span>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import SearchInput from "@/components/SearchInput.vue";
|
||||
|
|
@ -52,8 +63,16 @@ const handleNumChange = () => {
|
|||
emit('totalPriceChange')
|
||||
}
|
||||
|
||||
|
||||
const getTotalPrice =()=>{
|
||||
let totalPrice = 0;
|
||||
data.value.itemDetail?.forEach((item:any)=>{
|
||||
totalPrice += item.selectedNum*item.selectedPrice
|
||||
})
|
||||
return totalPrice;
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
|
||||
:deep(.el-table__cell){
|
||||
padding: 0 4px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
<template>
|
||||
<Panel :title="'就诊信息'">
|
||||
<div v-if="!patientRegistration?.patientInfo" style="display: flex;align-items: center;justify-content: center;height: 120px">请选择患者......</div>
|
||||
<div v-else style="padding: 0 24px">
|
||||
<div class="avatar">
|
||||
<img class="avatar-image"
|
||||
:src="patientRegistration?.patientInfo?.sex == 1 ?'/static/images/outpatient/man.png':patientRegistration?.patientInfo?.sex == 2 ?'/static/images/outpatient/women.png':'-'"
|
||||
alt=""/>
|
||||
<div class="avatar-info-wrapper">
|
||||
<div class="avatar-info">
|
||||
<span class="avatar-info-name">{{ patientRegistration?.patientInfo?.name }}</span>
|
||||
<span class="avatar-info-age">{{ patientRegistration?.patientInfo?.age}}</span>
|
||||
</div>
|
||||
<div class="avatar-info-phone-num">
|
||||
<span class="avatar-info-phone">{{ patientRegistration?.patientInfo?.phone }}</span>
|
||||
<span class="avatar-info-num">就诊次数:<i class="caret-num">{{
|
||||
patientRegistration?.seeDoctorCount || 0
|
||||
}}次</i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div>挂号医生: <span
|
||||
class="detail-doctor">{{ patientRegistration?.dockerName }}-{{ patientRegistration?.sectionName }}</span>
|
||||
</div>
|
||||
<div class="detail-middle">
|
||||
<div>费用类别: <span class="detail-doctor">医保</span></div>
|
||||
<div>医保卡剩余金额: <span class="detail-balance">{{ patientRegistration?.socialBalance }}元</span></div>
|
||||
</div>
|
||||
<div>上次就诊时间: <span class="detail-doctor">{{
|
||||
formatDate(patientRegistration?.lastSeeDoctorTime)
|
||||
}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</Panel>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import Panel from "@/components/common/Panel.vue";
|
||||
import {formatDate} from "@/utils/dateUtils.ts"
|
||||
|
||||
const patientRegistration = defineModel<any>()
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.avatar {
|
||||
height: 60px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.avatar-image {
|
||||
width: 60px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.avatar-info-wrapper {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
font-style: normal;
|
||||
|
||||
.avatar-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.avatar-info-name {
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
color: #333333;
|
||||
font-style: normal;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.avatar-info-age {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.avatar-info-phone-num {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.avatar-info-num {
|
||||
margin-left: 28px;
|
||||
|
||||
.avatar-info-phone {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.caret-num {
|
||||
color: #4D6DE4;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.detail {
|
||||
margin-top: 16px;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: rgba(23, 26, 29, 0.7);
|
||||
font-style: normal;
|
||||
height: 80px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.detail-doctor {
|
||||
font-weight: 500;
|
||||
color: rgba(23, 26, 29, 1);
|
||||
}
|
||||
|
||||
.detail-middle {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.detail-balance {
|
||||
font-weight: 500;
|
||||
color: rgba(#FF4D4F, 1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -50,7 +50,7 @@
|
|||
</div>
|
||||
<div class="right">
|
||||
<div class="top">
|
||||
<PatientCard v-model="formData.patientInfo"></PatientCard>
|
||||
<PatientCard ref="patientCardRef"></PatientCard>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<RecordsLog ref="recordsConsumptionRef"></RecordsLog>
|
||||
|
|
@ -121,8 +121,8 @@ const diagnosisSelect = (list: any) => {
|
|||
formData.value.diagnosisMedicalRecord.diagnosisSummary = diagnosisNames
|
||||
}
|
||||
const recordsConsumptionRef= ref<any>("")
|
||||
const patientCardRef = ref()
|
||||
const clickItem = async (item: any, status: any) => {
|
||||
|
||||
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
|
||||
statusDisabled.value = status
|
||||
getOrderTotalPrice()
|
||||
|
|
@ -131,6 +131,7 @@ const clickItem = async (item: any, status: any) => {
|
|||
let nList = formData.value.diagnosisMedicalRecord.diagnosisSummary.split(',')
|
||||
diagnosisSearchRef.value?.init(list, nList);
|
||||
recordsConsumptionRef.value?.init(formData.value.patientInfo.id);
|
||||
patientCardRef.value?.init(formData.value.registrationId);
|
||||
})
|
||||
}
|
||||
const dockerList = ref<any[]>([])
|
||||
|
|
@ -271,7 +272,7 @@ const generateOptions = () => {
|
|||
flex-direction: column;
|
||||
|
||||
.top {
|
||||
height: 312px;
|
||||
height: 240px;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,11 @@
|
|||
@edit="edit"></Settlement>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="top">
|
||||
<MedicalInformation v-model="seeDockerInfo" ref="medicalInformationRef"></MedicalInformation>
|
||||
<PatientCard ref="patientCardRef"></PatientCard>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<MedicalHistory ref="medicalHistoryRef" @copy="copyForm" @copyItem="copyItemList" @copyGoods="copyGoodsList" ></MedicalHistory>
|
||||
|
|
@ -37,7 +38,6 @@
|
|||
</template>
|
||||
<script setup lang="ts">
|
||||
import MedicalQueue from "@/components/outpatient/MedicalQueue.vue";
|
||||
import MedicalInformation from "@/components/outpatient/MedicalInformation.vue";
|
||||
import MedicalHistory from "@/components/outpatient/MedicalHistory.vue";
|
||||
import Case from "@/components/outpatient/Case.vue";
|
||||
|
||||
|
|
@ -52,6 +52,7 @@ import ServiceItemsDetail from "@/components/outpatient/ServiceItemsDetail.vue";
|
|||
import PharmaceuticalConsumablesDetail from "@/components/outpatient/PharmaceuticalConsumablesDetail.vue";
|
||||
import CaseDetail from "@/components/outpatient/CaseDetail.vue";
|
||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import PatientCard from "@/components/charge/PatientCard.vue";
|
||||
|
||||
const registerId = ref()
|
||||
const patientId = ref()
|
||||
|
|
@ -94,15 +95,14 @@ const save = () => {
|
|||
const totalAmount = ref(0)
|
||||
const medicalInformationRef = ref()
|
||||
const medicalHistoryRef = ref()
|
||||
const patientCardRef = ref()
|
||||
const patientRegistration = ref<any>({})
|
||||
const getId = (item: any) => {
|
||||
registerId.value = item.id
|
||||
itemId.value = item.id
|
||||
patientId.value = item.patientInfoId
|
||||
status.value = item.status
|
||||
nextTick(() => {
|
||||
medicalHistoryRef.value?.init(patientId.value);
|
||||
})
|
||||
|
||||
if (item.status == 1) {
|
||||
ElMessageBox.confirm(`您将要接诊${item.name}`, "提示", {
|
||||
confirmButtonText: '确定',
|
||||
|
|
@ -127,6 +127,11 @@ const getId = (item: any) => {
|
|||
})
|
||||
|
||||
}
|
||||
nextTick(() => {
|
||||
medicalHistoryRef.value?.init(patientId.value);
|
||||
patientCardRef.value?.init(registerId.value)
|
||||
})
|
||||
|
||||
}
|
||||
const status = ref<any>(1)
|
||||
const deleteItem = () => {
|
||||
|
|
@ -176,6 +181,8 @@ const copyItemList=(item:any) => {
|
|||
const copyGoodsList=(item:any) => {
|
||||
goodsList.value = item.goodsDetail
|
||||
}
|
||||
|
||||
|
||||
const seeDockerInfo = ref<any>()
|
||||
const getSeeDockerInfo = (newValue:any) => {
|
||||
if (!registerId.value)return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue