Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web

This commit is contained in:
LiJianZhao 2025-05-08 12:56:33 +08:00
commit 293a34114f
5 changed files with 167 additions and 138 deletions

View File

@ -1,116 +0,0 @@
<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="单价">
<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"
size="small"></el-input-number>
<el-dropdown>
<span style="line-height: 30px;margin-left: 10px">{{ scope.row.selectedUnit }}</span>
<template #dropdown>
<el-dropdown-menu v-if="scope.row.trdnFlag == 1">
<el-dropdown-item @click="selectUnit(scope.row,scope.row.packagingUnit)">{{ scope.row.packagingUnit }}
</el-dropdown-item>
<el-dropdown-item @click="selectUnit(scope.row,scope.row.minPackagingUnit)">
{{ scope.row.minPackagingUnit }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<div v-else>
<div>{{ scope.row.selectedNum }} {{ scope.row.selectedUnit }}</div>
</div>
</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>
<div class="bottom">
<SearchInput v-if="data.status == 0" :request-api="goodsSearchApi" :show-config="goodsShowConfig"
@selectedCallBack="goodsSelect"></SearchInput>
<span>合计{{ getTotalPrice() }}</span>
</div>
</template>
<script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue";
const props = defineProps({
disabled: {
type: Boolean,
default: false
}
})
const data = defineModel<any>();
const delGoods = (item: any) => {
data.value.goodsDetail = data.value.goodsDetail.filter((i: any) => i.id != item.id)
}
const goodsSearchApi = "goods/goods/search";
const goodsShowConfig = [
{
label: "项目名称",
prop: "name",
},
{
label: "项目类型",
prop: "type",
},
{
label: "售价",
prop: "unitPrice",
},
]
const goodsSelect = (row: any) => {
row.selectedNum = 1
row.selectedUnit = row.packagingUnit
row.selectedPrice = row.unitPrice
data.value.goodsDetail.push(row)
emit('totalPriceChange')
}
const selectUnit = (item: any, unit: any) => {
item.selectedUnit = unit;
if (unit == item.packagingUnit) {
item.selectedPrice = item.unitPrice
} else if (unit == item.minPackagingUnit) {
item.selectedPrice = item.disassemblyPrice
}
emit('totalPriceChange')
}
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;
}
.bottom {
text-align: right;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<panel title="药品耗材">
<el-table v-if="goodsDetail.length>0" :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="单价">
<template #default="scope">
{{ scope.row.selectedPrice }}
</template>
</el-table-column>
<el-table-column prop="number" label="数量">
<template #default="scope">
<div v-if="disabled||props.status==0">
<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>
<el-dropdown-menu v-if="scope.row.trdnFlag == 1">
<el-dropdown-item @click="selectUnit(scope.row,scope.row.packagingUnit)">{{ scope.row.packagingUnit }}
</el-dropdown-item>
<el-dropdown-item @click="selectUnit(scope.row,scope.row.minPackagingUnit)">
{{ scope.row.minPackagingUnit }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<div v-else>
<div>{{ scope.row.selectedNum }} {{ scope.row.selectedUnit }}</div>
</div>
</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="disabled||props.status==0">
<template #default="scope">
<el-button type="danger" link @click="delGoods(scope.row)">X</el-button>
</template>
</el-table-column>
</el-table>
<div class="bottom">
<div class="search">
<SearchInput
:disabled="!disabled"
:request-api="goodsSearchApi"
:show-config="goodsShowConfig"
:placeholder="'请输入药名或者拼音码'"
@selectedCallBack="goodsSelect"></SearchInput>
</div>
<span>合计{{ getTotalPrice() }}</span>
</div>
</panel>
</template>
<script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue";
import {ref, watchEffect} from "vue";
import Panel from "@/components/common/Panel.vue";
const props = defineProps({
status: {
type: Number,
default: 0
}
})
const goodsDetail = defineModel<any>();
const delGoods = (item: any) => {
goodsDetail.value = goodsDetail.value.filter((i: any) => i.id != item.id)
}
const goodsSearchApi = "goods/goods/search";
const goodsShowConfig = [
{
label: "项目名称",
prop: "name",
},
{
label: "项目类型",
prop: "type",
},
{
label: "售价",
prop: "unitPrice",
},
]
const goodsSelect = (row: any) => {
row.selectedNum = 1
row.selectedUnit = row.packagingUnit
row.selectedPrice = row.unitPrice
goodsDetail.value.push(row)
emit('totalPriceChange')
}
const selectUnit = (item: any, unit: any) => {
item.selectedUnit = unit;
if (unit == item.packagingUnit) {
item.selectedPrice = item.unitPrice
} else if (unit == item.minPackagingUnit) {
item.selectedPrice = item.disassemblyPrice
}
emit('totalPriceChange')
}
const emit = defineEmits(["totalPriceChange"])
const handleNumChange = () => {
emit('totalPriceChange')
}
const getTotalPrice = () => {
let totalPrice = 0;
if (goodsDetail.value) {
goodsDetail.value.forEach((item: any) => {
totalPrice += item.selectedNum * item.selectedPrice
})
}
return totalPrice;
}
const disabled = ref<any>(false)
watchEffect(() => {
if (props.status == 2 || props.status == 0) {
disabled.value = true
} else {
disabled.value = false
}
}
)
</script>
<style scoped lang="scss">
:deep(.el-table__cell) {
padding: 0 4px;
}
.bottom {
text-align: right;
border-top: 1px solid #EAEAEC;
display: flex;
.search {
flex: 1;
}
}
</style>

View File

@ -20,17 +20,21 @@
{{ scope.row.selectedNum * scope.row.selectedPrice }} {{ scope.row.selectedNum * scope.row.selectedPrice }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作" v-if="disabled||props.status==0">
<template #default="scope"> <template #default="scope">
<el-button type="danger" link @click="delService(scope.row)">X</el-button> <el-button type="danger" link @click="delService(scope.row)">X</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="bottom"> <div class="bottom">
<SearchInput :request-api="serviceSearchApi" <div class="search">
:show-config="serviceShowConfig" <SearchInput
:disabled="!disabled" :placeholder="'请输入药服务项目或拼音码'"
@selectedCallBack="serviceSelect"></SearchInput> :request-api="serviceSearchApi"
:show-config="serviceShowConfig"
:disabled="!disabled"
@selectedCallBack="serviceSelect"></SearchInput>
</div>
<span>合计{{ getTotalPrice() || 0 }}</span> <span>合计{{ getTotalPrice() || 0 }}</span>
</div> </div>
</Panel> </Panel>
@ -106,5 +110,10 @@ watchEffect(() => {
.bottom { .bottom {
text-align: right; text-align: right;
border-top: 1px solid #EAEAEC ;
display: flex;
.search{
flex: 1;
}
} }
</style> </style>

View File

@ -50,9 +50,7 @@
<ServiceDetail v-model="formData.itemDetail" :status="statusDisabled" @totalPriceChange="getOrderTotalPrice"></ServiceDetail> <ServiceDetail v-model="formData.itemDetail" :status="statusDisabled" @totalPriceChange="getOrderTotalPrice"></ServiceDetail>
</div> </div>
<div style="margin-top: 24px"> <div style="margin-top: 24px">
<Panel title="药品耗材"> <GoodsDetail v-model="formData.goodsDetail" :status="statusDisabled" @totalPriceChange="getOrderTotalPrice"></GoodsDetail>
<GoodsDetail v-model="formData" @totalPriceChange="getOrderTotalPrice"></GoodsDetail>
</Panel>
</div> </div>
<div class="bottom" > <div class="bottom" >
<TotalPrice v-model="formData.totalPrice" @edit="saveAndCharge" :status="formData.status" ></TotalPrice> <TotalPrice v-model="formData.totalPrice" @edit="saveAndCharge" :status="formData.status" ></TotalPrice>
@ -83,7 +81,7 @@ import ChargeQueue from "@/components/charge/ChargeQueue.vue";
import {nextTick, onMounted, ref} from "vue"; import {nextTick, onMounted, ref} from "vue";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import ServiceDetail from "@/components/common/service/ServiceDetail.vue"; import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
import GoodsDetail from "@/components/charge/GoodsDetail.vue"; import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue"; import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue";
import Settlement from "@/components/charge/Settlement.vue"; import Settlement from "@/components/charge/Settlement.vue";
import TotalPrice from "@/components/charge/TotalPrice.vue"; import TotalPrice from "@/components/charge/TotalPrice.vue";
@ -98,7 +96,7 @@ const socialCard = ref<any>({payInfo: {}})
const formData = ref<any>({ const formData = ref<any>({
patientInfo: {}, patientInfo: {},
diagnosisMedicalRecord: {}, diagnosisMedicalRecord: {},
goodsList: [], goodsDetail: [],
itemDetail: [], itemDetail: [],
}) })
const statusDisabled = ref(0) const statusDisabled = ref(0)
@ -138,8 +136,8 @@ const diagnosisSelect = (list: any) => {
const recordsConsumptionRef= ref<any>("") const recordsConsumptionRef= ref<any>("")
const patientCardRef = ref() const patientCardRef = ref()
const clickItem = async (item: any, status: any) => { const clickItem = async (item: any, status: any) => {
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
statusDisabled.value = status statusDisabled.value = status
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
getOrderTotalPrice() getOrderTotalPrice()
nextTick(() => { nextTick(() => {
let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail) let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail)

View File

@ -10,13 +10,10 @@
<Case ref="caseRef" v-else v-model="formData" :status="status" :isShowFrom="isShowFrom" @focus="focus"></Case> <Case ref="caseRef" v-else v-model="formData" :status="status" :isShowFrom="isShowFrom" @focus="focus"></Case>
</div> </div>
<div class="service-items"> <div class="service-items">
<!-- <ServiceItemsDetail v-if="patientRegistration.status==3" v-model="itemList"></ServiceItemsDetail>-->
<ServiceDetail v-model="formData.itemDetail" :status="status" @focus="focus" @totalPriceChange="getOrderTotalPrice"></ServiceDetail> <ServiceDetail v-model="formData.itemDetail" :status="status" @focus="focus" @totalPriceChange="getOrderTotalPrice"></ServiceDetail>
</div> </div>
<div class="pharmaceutical-consumables"> <div class="pharmaceutical-consumables">
<PharmaceuticalConsumablesDetail v-if="patientRegistration.status==3" <GoodsDetail v-model="formData.goodsDetail" :status="status" @focus="focus" @totalPriceChange="getOrderTotalPrice"></GoodsDetail>
v-model="goodsList" ></PharmaceuticalConsumablesDetail>
<PharmaceuticalConsumables v-else v-model="goodsList" :status="status" @focus="focus"></PharmaceuticalConsumables>
</div> </div>
</el-scrollbar> </el-scrollbar>
<div class="bottom"> <div class="bottom">
@ -24,7 +21,6 @@
@edit="edit"></Settlement> @edit="edit"></Settlement>
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<div class="top"> <div class="top">
@ -54,6 +50,7 @@ import CaseDetail from "@/components/outpatient/CaseDetail.vue";
import {apiConfig} from "@/assets/config/apiConfig.ts"; import {apiConfig} from "@/assets/config/apiConfig.ts";
import PatientCard from "@/components/charge/PatientCard.vue"; import PatientCard from "@/components/charge/PatientCard.vue";
import ServiceDetail from "@/components/common/service/ServiceDetail.vue"; import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
const registerId = ref() const registerId = ref()
const patientId = ref() const patientId = ref()
@ -126,8 +123,8 @@ const getId = (item: any) => {
regisId: item.id regisId: item.id
}).then((res: any) => { }).then((res: any) => {
formData.value = res.diagnosisMedicalRecord formData.value = res.diagnosisMedicalRecord
goodsList.value = res.goodsDetail formData.value.goodsDetail = res.goodsDetail
itemDetail.value = res.itemDetail formData.value.itemDetail = res.itemDetail
patientRegistration.value = res.patientRegistration patientRegistration.value = res.patientRegistration
}) })
@ -146,10 +143,8 @@ const deleteItem = () => {
} }
const getStatus = (e: any) => { const getStatus = (e: any) => {
status.value = e status.value = e
formData.value.itemDetail = [] formData.value.itemDetail = []
// goodsList.value = [] formData.value.goodsDetail = []
// itemDetail.value = []
patientRegistration.value = {} patientRegistration.value = {}
nextTick(() => { nextTick(() => {
medicalHistoryRef.value?.clearList(); medicalHistoryRef.value?.clearList();
@ -192,7 +187,6 @@ const copyForm=(item:any) => {
}) })
} }
const copyItemList=(item:any) => { const copyItemList=(item:any) => {
console.log(item)
itemDetail.value = item.itemDetail itemDetail.value = item.itemDetail
} }
const copyGoodsList=(item:any) => { const copyGoodsList=(item:any) => {