web/src/views/charge/index.vue

235 lines
6.2 KiB
Vue

<template>
<div class="container">
<div class="left">
<Panel title="收费队列">
<ChargeQueue @clickItem="clickItem" ref="chargeQueue"></ChargeQueue>
</Panel>
</div>
<div class="middle">
<Panel title="零售收费">
<template #tools>
<span>{{formData.totalPrice}}</span>
<el-button type="primary" @click="delDraft()" v-if="formData.id == -1" >删除</el-button>
<el-button type="primary" @click="saveAndCharge" >收费</el-button>
<el-button type="primary" >追溯码</el-button>
<el-button type="primary" >挂单</el-button>
</template>
<el-form :model="formData" inline label-width="0">
<el-form-item>
<el-input v-model="formData.patientInfo.name" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item>
<el-select v-model="formData.patientInfo.sex" style="width: 80px;">
<el-option :label="'男'" :value="'男'"></el-option>
<el-option :label="'女'" :value="'女'"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-input v-model="formData.patientInfo.age">
<template #suffix>
</template>
</el-input>
</el-form-item>
<el-form-item>
<el-input v-model="formData.patientInfo.phone" placeholder="手机号">
</el-input>
</el-form-item>
<el-form-item>
<el-button>卡</el-button>
<el-button>+</el-button>
</el-form-item>
<el-form-item>
<el-select v-model="formData.diagnosisMedicalRecord.dockerId" placeholder="医生" style="width: 100px">
<el-option v-for="item in dockerList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-form>
<DiagnosisSearchInput
v-model="diagnosisKeyword"
:request-api="diagnosisSearchApi"
:show-config="diagnosisShowConfig"
@selectedCallBack="diagnosisSelect"
ref="diagnosisSearchRef"
:show-header="false">
</DiagnosisSearchInput>
</Panel>
<Panel title="服务项目">
<ServiceDetail v-model="formData.itemDetail" @selectedCallBack =getOrderTotalPrice> </ServiceDetail>
</Panel>
<Panel title="药品耗材">
<GoodsDetail v-model="formData.goodsDetail" @totalPriceChange="getOrderTotalPrice"></GoodsDetail>
</Panel>
</div>
<div class="right">
<div class="top">
</div>
<div class="bottom">
</div>
</div>
</div>
<Settlement
:money="formData.totalPrice"
ref="settlementRef"
v-model="socialCard"
></Settlement>
</template>
<script setup lang="ts">
import Panel from "@/components/common/Panel.vue";
import ChargeQueue from "@/components/charge/ChargeQueue.vue";
import {nextTick, onMounted, ref} from "vue";
import {post} from "@/utils/request.ts";
import ServiceDetail from "@/components/charge/ServiceDetail.vue";
import GoodsDetail from "@/components/charge/GoodsDetail.vue";
import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue";
import Settlement from "@/components/charge/Settlement.vue";
const socialCard = ref<any>({payInfo:{}})
const formData = ref<any>({
patientInfo:{},
diagnosisMedicalRecord:{},
})
const diagnosisKeyword = ref("")
const chargeQueue = ref()
const delDraft = () => {
nextTick(() => {
chargeQueue.value?.delDraft()
})
}
const settlementRef = ref()
const saveAndCharge = () => {
post('charge/save', {data:formData.value}).then((res: any) => {
formData.value.code = res
nextTick(()=>{
settlementRef.value?.init(formData.value)
})
})
}
const diagnosisSearchRef = ref()
const diagnosisSearchApi = "social/diagnose/search"
const diagnosisShowConfig = [
{
label: "诊断名称",
prop: "name",
},
{
label: "诊断编码",
prop: "code",
}
]
const diagnosisSelect = (list: any) => {
const diagnosisNames = list.map((item: any) => item.name).join(',')
formData.value.diagnosisMedicalRecord.diagnosisDetail = JSON.stringify(list)
formData.value.diagnosisMedicalRecord.diagnosisSummary = diagnosisNames
}
const clickItem = (item: any) => {
formData.value = item
getOrderTotalPrice()
nextTick(() => {
let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail)
let nList = formData.value.diagnosisMedicalRecord.diagnosisSummary.split(',')
diagnosisSearchRef.value?.init(list,nList);
})
}
const dockerList = ref<any[]>([])
const getDockerList = () => {
post('organization/member/allDoctorList').then((res: any) => {
dockerList.value = res
})
}
onMounted(()=>{
getDockerList()
})
const getOrderTotalPrice = () => {
let totalPrice = 0
formData.value.itemDetail.forEach((item: any) => {
totalPrice += item.unitPrice * item.number
})
formData.value.goodsDetail.forEach((item: any) => {
totalPrice += item.selectedPrice * item.selectedNum
})
formData.value.preTotalPrice = totalPrice
formData.value.totalPrice = totalPrice
}
</script>
<style scoped lang="scss">
.container {
display: flex;
padding: 0 24px;
height: 100%;
.left {
width: 320px;
margin-right: 24px;
}
.middle {
flex: 1;
display: flex;
flex-direction: column;
.case {
background: #FFFFFF;
border-radius: 8px;
padding-bottom: 24px;
}
.service-items {
margin-top: 24px;
background: #FFFFFF;
border-radius: 8px;
}
.pharmaceutical-consumables {
margin-top: 24px;
background: #FFFFFF;
border-radius: 8px;
}
.bottom {
margin-top: 24px;
height: 86px;
border-radius: 8px;
}
.el-form-item {
margin-right: 0;
}
}
.right {
width: 364px;
display: flex;
margin-left: 24px;
flex-direction: column;
.top {
width: 100%;
height: 240px;
background: #FFFFFF;
border-radius: 8px;
}
.bottom {
flex: 1;
width: 100%;
background: #fff;
margin-top: 24px;
border-radius: 8px;
min-height: 0;
}
}
}
</style>