Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web
# Conflicts: # src/views/charge/index.vue
This commit is contained in:
commit
a99c5e654b
|
|
@ -2,27 +2,26 @@
|
||||||
import Panel from '../common/Panel.vue';
|
import Panel from '../common/Panel.vue';
|
||||||
import {defineEmits, defineModel,defineProps} from 'vue'
|
import {defineEmits, defineModel,defineProps} from 'vue'
|
||||||
const {status}=defineProps(['status'])
|
const {status}=defineProps(['status'])
|
||||||
const emit = defineEmits(['save','deleteItem','edit','openCheckOut']);
|
const emit = defineEmits(['save','deleteItem','edit']);
|
||||||
const save = () => {
|
const save = () => {
|
||||||
emit('save');
|
emit('save');
|
||||||
};
|
};
|
||||||
const openCheckOut= () => {
|
|
||||||
emit('openCheckOut');
|
|
||||||
};
|
|
||||||
const deleteItem = () => {
|
const deleteItem = () => {
|
||||||
emit('deleteItem');
|
emit('deleteItem');
|
||||||
};
|
};
|
||||||
const totalAmount = defineModel<any>()
|
const totalAmount = defineModel<any>()
|
||||||
|
const editItem= () => {
|
||||||
|
emit('edit');
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Panel :showTools="false" :showHeader="false">
|
<Panel :showTools="false" :showHeader="false">
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<div>总金额:<span class="text icon">¥</span><span class="text">{{ totalAmount || '0' }}</span></div>
|
<div>总金额:<span class="text icon">¥</span><span class="text">{{ totalAmount || '0' }}</span></div>
|
||||||
<div class="btn-group" v-if="status == 0">
|
<div class="btn-group" v-if="status">
|
||||||
<el-button type="primary" @click="openCheckOut()">追溯码</el-button>
|
<el-button type="primary" disabled>追溯码</el-button>
|
||||||
<el-button type="primary" @click="save">收费</el-button>
|
<el-button type="primary" @click="editItem">收费</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
||||||
<template>
|
|
||||||
<Panel :title="'病历'">
|
|
||||||
<template #tools>
|
|
||||||
<div class="content">
|
|
||||||
<div class="model-selector">
|
|
||||||
<el-select v-model="modelType">
|
|
||||||
<el-option label="西医模板" :value="0"/>
|
|
||||||
<el-option label="中医模板" :value="1"/>
|
|
||||||
<el-option label="口腔模板" :value="2"/>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<div class="container">
|
|
||||||
<el-form :model="formDate" label-width="auto" ref="formRef">
|
|
||||||
<el-descriptions
|
|
||||||
:column="1"
|
|
||||||
label-width="100px"
|
|
||||||
border
|
|
||||||
>
|
|
||||||
<el-descriptions-item label="主诉">
|
|
||||||
<div>{{ formDate.mainAppeal}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="诊断">
|
|
||||||
<div>{{ formDate.diagnosisSummary}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="现病史">
|
|
||||||
<div>{{ formDate.nowMedicalHistory}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="既往史">
|
|
||||||
<div>{{ formDate.beforeMedicalHistory}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="过敏史">
|
|
||||||
<div>{{ formDate.allergyHistory}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="体格检查">
|
|
||||||
<div>{{ formDate.exam}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="望闻问切" v-if="modelType==1">
|
|
||||||
<div>{{ formDate.chinaAdjunctCheck}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="法制" v-if="modelType==1">
|
|
||||||
<div>{{ formDate.chinaDeal}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="口腔检查" v-if="modelType==2">
|
|
||||||
<div>{{ formDate.mouthCheck}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="辅助检查" v-if="modelType==2 || modelType ==0">
|
|
||||||
<div>{{ formDate.adjunctCheck}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="处置" v-if="modelType==0 || modelType ==2">
|
|
||||||
<div>{{ formDate.deal}}</div>
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</Panel>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import {ref} from "vue";
|
|
||||||
import Panel from "@/components/common/Panel.vue";
|
|
||||||
|
|
||||||
const formDate = defineModel<any>();
|
|
||||||
const modelType = ref(0)
|
|
||||||
|
|
||||||
interface ShowConfig {
|
|
||||||
label: string;
|
|
||||||
prop: string;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.model-selector {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -70,7 +70,6 @@ const clickTab = (item: any) => {
|
||||||
curStatus.value = item.status
|
curStatus.value = item.status
|
||||||
emit('changeTab')
|
emit('changeTab')
|
||||||
curItem.value = {}
|
curItem.value = {}
|
||||||
|
|
||||||
}
|
}
|
||||||
const setDate = function () {
|
const setDate = function () {
|
||||||
if (datePickerRef.value) {
|
if (datePickerRef.value) {
|
||||||
|
|
@ -99,7 +98,6 @@ const itemId = defineModel()
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
selectedDate.value = getCurrentDate()
|
selectedDate.value = getCurrentDate()
|
||||||
initStatusList()
|
initStatusList()
|
||||||
curItem.value = itemId
|
|
||||||
if (curStatus.value == 1) {
|
if (curStatus.value == 1) {
|
||||||
init()
|
init()
|
||||||
}
|
}
|
||||||
|
|
@ -117,8 +115,15 @@ const init = async () => {
|
||||||
endTime: getEndOfDay(new Date(selectedDate.value))
|
endTime: getEndOfDay(new Date(selectedDate.value))
|
||||||
}
|
}
|
||||||
}, {catch_error: true});
|
}, {catch_error: true});
|
||||||
|
|
||||||
list.value = data.list
|
list.value = data.list
|
||||||
|
if (itemId.value != null) {
|
||||||
|
list.value.forEach((item: any, index: any) => {
|
||||||
|
if (item.id == itemId.value) {
|
||||||
|
clickLi(item, false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -225,6 +230,7 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin: 16px 0;
|
margin: 16px 0;
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
|
|
||||||
.search-icon {
|
.search-icon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 32px;
|
left: 32px;
|
||||||
|
|
@ -234,6 +240,7 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
|
||||||
height: 16px; // 调整图标大小
|
height: 16px; // 调整图标大小
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 42px;
|
height: 42px;
|
||||||
|
|
@ -255,9 +262,11 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
|
||||||
display: flex;
|
display: flex;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
|
|
||||||
.list-item {
|
.list-item {
|
||||||
height: 48px;
|
height: 48px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -269,9 +278,11 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
|
||||||
color: rgba(34, 42, 57, 0.7);
|
color: rgba(34, 42, 57, 0.7);
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
width: 26px;
|
width: 26px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
|
|
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
<template>
|
|
||||||
<Panel :title="'药品耗材'">
|
|
||||||
<div class="content">
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
<li class="item" v-for="(item, index) in list" :key="index">
|
|
||||||
<div class="index">{{ index + 1 }}</div>
|
|
||||||
<div class="name">
|
|
||||||
<el-popover
|
|
||||||
placement="top-start"
|
|
||||||
trigger="hover"
|
|
||||||
width="500"
|
|
||||||
@show="getHilistInfo(item)"
|
|
||||||
@hide="colosInfo"
|
|
||||||
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
{{ item.name }}
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<div class="detail">
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div style="font-size: 18px;font-weight: 500;color: #000">{{ hilistInfo.name }}[{{ hilistInfo.json?.category||'-' }}]</div>
|
|
||||||
<div>¥{{ item.selectedPrice }}/{{ item.selectedUnit }}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div>规格:{{hilistInfo.json?.dosage_specifications||'-'}}</div>
|
|
||||||
<div>生产厂商:{{hilistInfo.json?.producer||'-'}}</div>
|
|
||||||
<div>限价:{{hilistInfo.json?.stock||'0'}}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div>批准文号:{{hilistInfo.json?.approval_number||'-'}}</div>
|
|
||||||
<div>本位码:{{hilistInfo.json?.standard_code ||'-'}}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div>限价:{{ hilistInfo.hilistPricUplmtAmt ? hilistInfo.hilistPricUplmtAmt : '无' }}</div>
|
|
||||||
<div>限价类型:{{ hilistInfo.hilistLmtpricType ? hilistInfo.hilistLmtpricType : '无' }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
<div class="price">¥{{ item.selectedPrice || '0' }}</div>
|
|
||||||
<div class="unit">
|
|
||||||
<div class="unit-content">
|
|
||||||
<el-input-number v-model="item.selectedNum" min="1" size="small"></el-input-number>
|
|
||||||
<el-dropdown>
|
|
||||||
<span style="line-height: 30px;margin-left: 10px">{{ item.selectedUnit }}</span>
|
|
||||||
<template #dropdown>
|
|
||||||
<el-dropdown-menu v-if="item.trdnFlag == 1">
|
|
||||||
<el-dropdown-item @click="selectUnit(item,item.packagingUnit)">{{ item.packagingUnit }}
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item @click="selectUnit(item,item.minPackagingUnit)">{{ item.minPackagingUnit }}
|
|
||||||
</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</template>
|
|
||||||
</el-dropdown>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sub-price">¥{{ item.unitPrice * item.selectedNum }}</div>
|
|
||||||
<div class="delete">
|
|
||||||
<div @click="deleteItem(item.id)" class="delete-btn">
|
|
||||||
<el-icon>
|
|
||||||
<Close/>
|
|
||||||
</el-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="search">
|
|
||||||
<div class="search-input">
|
|
||||||
<SearchInput
|
|
||||||
:request-api="itemSearchApi"
|
|
||||||
:show-config="itemShowConfig"
|
|
||||||
@selectedCallBack="itemSelect"
|
|
||||||
:placeholder="'请输入药材名称'"
|
|
||||||
:disabled="disabled"
|
|
||||||
@focus="focus"
|
|
||||||
>
|
|
||||||
</SearchInput>
|
|
||||||
</div>
|
|
||||||
<span style="margin-right: 24px">
|
|
||||||
¥{{ sumPrice }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Panel>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Panel from "@/components/common/Panel.vue";
|
|
||||||
import SearchInput from "@/components/SearchInput.vue";
|
|
||||||
import {CircleClose, Close} from "@element-plus/icons-vue";
|
|
||||||
import {watch, ref, computed} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
status: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const disabled = computed(() => {
|
|
||||||
if (props.status === 1) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const itemSearchApi = "goods/goods/search";
|
|
||||||
const itemShowConfig = [
|
|
||||||
{
|
|
||||||
label: "项目名称",
|
|
||||||
prop: "name",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "项目类型",
|
|
||||||
prop: "type",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "售价",
|
|
||||||
prop: "unitPrice",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
const itemSelect = (row: any) => {
|
|
||||||
row.selectedNum = 1
|
|
||||||
row.selectedUnit = row.packagingUnit
|
|
||||||
row.selectedPrice = row.unitPrice
|
|
||||||
list.value.push(row)
|
|
||||||
}
|
|
||||||
const deleteItem = (id: any) => {
|
|
||||||
list.value = list.value.filter((item) => item.id !== id);
|
|
||||||
};
|
|
||||||
const list = defineModel<any[]>({default: () => []});
|
|
||||||
|
|
||||||
|
|
||||||
const selectUnit = (item: any, unit: any) => {
|
|
||||||
item.selectedUnit = unit;
|
|
||||||
if (unit == item.packagingUnit) {
|
|
||||||
item.selectedPrice = item.unitPrice
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (unit == item.minPackagingUnit) {
|
|
||||||
item.selectedPrice = item.disassemblyPrice
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const sumPrice = ref(0)
|
|
||||||
const emit = defineEmits(['focus'])
|
|
||||||
const focus = (e: any) => {
|
|
||||||
emit('focus', e)
|
|
||||||
}
|
|
||||||
const hilistInfo = ref<any>({})
|
|
||||||
const getHilistInfo = (item: any) => {
|
|
||||||
if (item.hilistCode) {
|
|
||||||
post("social/directory/getByCode", {code: item.hilistCode}).then((res: any) => {
|
|
||||||
hilistInfo.value = res
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const colosInfo = () => {
|
|
||||||
hilistInfo.value = {}
|
|
||||||
}
|
|
||||||
watch(() => list.value, (newList) => {
|
|
||||||
sumPrice.value = newList.reduce((total, item) => {
|
|
||||||
return total + (item.selectedNum || 0) * (item.selectedPrice || 0);
|
|
||||||
}, 0);
|
|
||||||
}, {deep: true})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@use "@/assets/scss/base";
|
|
||||||
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.list {
|
|
||||||
flex: 1;
|
|
||||||
min-height: 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
height: 30px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.index {
|
|
||||||
height: 100%;
|
|
||||||
width: 50px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.code {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price {
|
|
||||||
height: 100%;
|
|
||||||
width: 100px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.unit {
|
|
||||||
height: 100%;
|
|
||||||
width: 180px;
|
|
||||||
margin-left: 10px;
|
|
||||||
line-height: 30px;
|
|
||||||
|
|
||||||
.unit-content {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.sub-price {
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.delete {
|
|
||||||
height: 100%;
|
|
||||||
width: 100px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
|
|
||||||
.delete-btn {
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: base.$primary-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
height: 64px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.search-input {
|
|
||||||
height: 100%;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,96 +0,0 @@
|
||||||
<template>
|
|
||||||
<Panel :title="'药品耗材'">
|
|
||||||
<div class="content">
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
<li class="item" v-for="(item, index) in list" :key="index">
|
|
||||||
<span class="index">{{ index + 1 }}</span>
|
|
||||||
<span class="name">{{ item.name }}</span>
|
|
||||||
<span class="unit">{{ item.selectedNum || 0 }}{{ item.selectedUnit }}</span>
|
|
||||||
<span class="price">¥{{ item.selectedPrice || '0' }}元</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="search">
|
|
||||||
<span style="margin-left: 24px">合计</span>
|
|
||||||
<span style="margin-right: 24px">¥{{ list.reduce((acc, cur) => acc + cur.selectedNum*cur.selectedPrice, 0) }}元</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Panel>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Panel from "@/components/common/Panel.vue";
|
|
||||||
|
|
||||||
const list = defineModel<any[]>({default: () => []});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.list {
|
|
||||||
flex: 1;
|
|
||||||
min-height: 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
height: 30px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
.index {
|
|
||||||
height: 100%;
|
|
||||||
width: 50px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.type {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.unit {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price {
|
|
||||||
height: 100%;
|
|
||||||
width: 200px;
|
|
||||||
line-height: 30px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
height: 64px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,218 +0,0 @@
|
||||||
<template>
|
|
||||||
<Panel :title="'服务项目'">
|
|
||||||
<div class="content">
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
<li class="item" v-for="(item, index) in list" :key="index">
|
|
||||||
<div class="index">{{ index + 1 }}</div>
|
|
||||||
<div class="name">
|
|
||||||
<el-popover
|
|
||||||
width="485"
|
|
||||||
@show="show(item)"
|
|
||||||
@hide="hide"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
{{ item.itemName }}
|
|
||||||
</template>
|
|
||||||
<div class="detail">
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div style="font-size: 18px;font-weight: 500;color: #000">{{
|
|
||||||
itemInfo.name
|
|
||||||
}}[{{ chrgitm_lv[itemInfo.chrgitmLv as keyof typeof chrgitm_lv || '-'] || '-' }}]
|
|
||||||
</div>
|
|
||||||
<div>¥{{ item.unitPrice }}/{{ item.unit }}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div>限制条件:{{ itemInfo.lmtUsedFlag == 0 ? '否' : itemInfo.lmtUsedFlag == 1 ? '是' : '-' }}</div>
|
|
||||||
<div> 医保码:{{ item.itemSocialCode || '-' }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
<div class="price">¥{{ item.unitPrice }}</div>
|
|
||||||
<div class="unit">
|
|
||||||
<div style="display: flex; align-items: center;">
|
|
||||||
<el-input-number v-model="item.selectedNum" min="1" size="small"></el-input-number>
|
|
||||||
<span style="margin-left: 10px; line-height: 30px;">{{ item.unit }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sub-price">¥{{ item.unitPrice * item.selectedNum }}</div>
|
|
||||||
<div class="delete">
|
|
||||||
<div @click="deleteItem(item.id)" class="delete-btn">
|
|
||||||
<el-icon>
|
|
||||||
<Close/>
|
|
||||||
</el-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="search">
|
|
||||||
<div class="search-input">
|
|
||||||
<SearchInput
|
|
||||||
:request-api="serviceSearchApi"
|
|
||||||
:show-config="serviceShowConfig"
|
|
||||||
@selectedCallBack="serviceSelect"
|
|
||||||
:placeholder="'请输入项目名称'"
|
|
||||||
:disabled="disabled"
|
|
||||||
@focus="focus"
|
|
||||||
>
|
|
||||||
</SearchInput>
|
|
||||||
</div>
|
|
||||||
<span style="margin-right: 24px">¥{{
|
|
||||||
list.reduce((acc, cur) => acc + cur.unitPrice * cur.selectedNum, 0)
|
|
||||||
}}</span></div>
|
|
||||||
</div>
|
|
||||||
</Panel>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import {defineModel, computed, defineEmits, ref} from "vue";
|
|
||||||
import Panel from "@/components/common/Panel.vue";
|
|
||||||
import {Close} from '@element-plus/icons-vue'
|
|
||||||
import SearchInput from "@/components/SearchInput.vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import chrgitm_lv from "@/assets/config/directory/chrgitmLv.json"
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
status: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const disabled = computed(() => {
|
|
||||||
if (props.status === 1) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const serviceSearchApi = "item/search";
|
|
||||||
const serviceShowConfig = [
|
|
||||||
{
|
|
||||||
label: "服务名称",
|
|
||||||
prop: "itemName",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "单价",
|
|
||||||
prop: "unitPrice",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "单位",
|
|
||||||
prop: "unit",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
const serviceSelect = (row: any) => {
|
|
||||||
row.selectedNum = 1
|
|
||||||
list.value.push(row)
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = defineModel<any[]>({default: () => []});
|
|
||||||
const deleteItem = (id: any) => {
|
|
||||||
list.value = list.value.filter((item) => item.id !== id);
|
|
||||||
};
|
|
||||||
const emit = defineEmits(['focus'])
|
|
||||||
const focus = (e: any) => {
|
|
||||||
emit('focus', e)
|
|
||||||
}
|
|
||||||
const itemInfo = ref<any>({});
|
|
||||||
const show = (item: any) => {
|
|
||||||
post('social/directory/getItemByCode', {code: item.itemSocialCode}).then((res: any) => {
|
|
||||||
itemInfo.value = res
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const hide = () => {
|
|
||||||
itemInfo.value = {}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@use "@/assets/scss/base";
|
|
||||||
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.list {
|
|
||||||
flex: 1;
|
|
||||||
min-height: 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
height: 30px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.index {
|
|
||||||
height: 100%;
|
|
||||||
width: 50px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
white-space: nowrap; /* 防止文本换行 */
|
|
||||||
overflow: hidden; /* 隐藏溢出的文本 */
|
|
||||||
text-overflow: ellipsis; /* 显示省略号 */
|
|
||||||
}
|
|
||||||
|
|
||||||
.code {
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price {
|
|
||||||
height: 100%;
|
|
||||||
width: 100px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.unit {
|
|
||||||
height: 100%;
|
|
||||||
width: 180px;
|
|
||||||
margin-left: 10px;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sub-price {
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.delete {
|
|
||||||
height: 100%;
|
|
||||||
width: 100px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
|
|
||||||
.delete-btn {
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: base.$primary-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
width: 100%;
|
|
||||||
height: 64px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.search-input {
|
|
||||||
height: 100%;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
<template>
|
|
||||||
<Panel :title="'服务项目'">
|
|
||||||
<div class="content">
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
<li class="item" v-for="(item, index) in list" :key="index">
|
|
||||||
<span class="index">{{ index + 1 }}</span>
|
|
||||||
<span class="name"> <el-popover
|
|
||||||
width="485"
|
|
||||||
@show="show(item)"
|
|
||||||
@hide="hide"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
{{ item.itemName }}
|
|
||||||
</template>
|
|
||||||
<div class="detail">
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div style="font-size: 18px;font-weight: 500;color: #000">{{ itemInfo.name }}[{{ chrgitm_lv[itemInfo.chrgitmLv as keyof typeof chrgitm_lv || '-'] || '-' }}]</div>
|
|
||||||
<div>¥{{ item.unitPrice }}/{{item.unit }}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex;justify-content: space-between">
|
|
||||||
<div>限制条件:{{ itemInfo.lmtUsedFlag == 0 ? '否' : itemInfo.lmtUsedFlag == 1 ? '是' : '-'}}</div>
|
|
||||||
<div> 医保码:{{item.itemSocialCode||'-'}}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
</span>
|
|
||||||
<span class="unit">{{item.selectedNum}}{{ item.selectedUnit }}</span>
|
|
||||||
<span class="price">¥{{ item.selectedPrice }}元</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="search">
|
|
||||||
<span style="margin-left: 24px">合计</span>
|
|
||||||
<span style="margin-right: 24px">¥{{ list.reduce((acc, cur) => acc + cur.selectedNum*cur.selectedPrice, 0) }}元</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Panel>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Panel from "@/components/common/Panel.vue";
|
|
||||||
import {ref} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import chrgitm_lv from "@/assets/config/directory/chrgitmLv.json"
|
|
||||||
|
|
||||||
const list = defineModel<any[]>({default: () => []});
|
|
||||||
const itemInfo = ref<any>({});
|
|
||||||
const show = (item:any) => {
|
|
||||||
post('social/directory/getItemByCode',{code:item.itemSocialCode}).then((res:any)=>{
|
|
||||||
itemInfo.value = res
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const hide = () => {
|
|
||||||
itemInfo.value = {}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.list {
|
|
||||||
flex: 1;
|
|
||||||
min-height: 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
height: 30px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
.index{
|
|
||||||
height: 100%;
|
|
||||||
width: 50px;
|
|
||||||
text-align: center;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
.name{
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
.code{
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
.unit{
|
|
||||||
width: 60px;
|
|
||||||
margin-left: 10px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 30px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.price{
|
|
||||||
height: 100%;
|
|
||||||
width: 200px;
|
|
||||||
line-height: 30px;
|
|
||||||
border-right: 1px solid #EAEAEC;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
height: 64px;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -110,6 +110,14 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="费用类型">
|
||||||
|
<el-form-item prop="type">
|
||||||
|
<el-select v-model="edit_data.type">
|
||||||
|
<el-option label="普通" :value="1"></el-option>
|
||||||
|
<el-option label="医保" :value="2"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
<el-descriptions-item
|
<el-descriptions-item
|
||||||
label="备注">
|
label="备注">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
<div class="middle">
|
<div class="middle">
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
<div class="case">
|
<div class="case">
|
||||||
<!-- <CaseDetail v-if="patientRegistration.status==3" v-model="formData"></CaseDetail>-->
|
|
||||||
<Case ref="caseRef" v-model="formData" :disabled="curRegister?.status !=2" :isShowFrom="isShowFrom"
|
<Case ref="caseRef" v-model="formData" :disabled="curRegister?.status !=2" :isShowFrom="isShowFrom"
|
||||||
@focus="focus"></Case>
|
@focus="focus"></Case>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -40,17 +39,10 @@
|
||||||
import MedicalQueue from "@/components/outpatient/MedicalQueue.vue";
|
import MedicalQueue from "@/components/outpatient/MedicalQueue.vue";
|
||||||
import MedicalHistory from "@/components/outpatient/MedicalHistory.vue";
|
import MedicalHistory from "@/components/outpatient/MedicalHistory.vue";
|
||||||
import Case from "@/components/outpatient/Case.vue";
|
import Case from "@/components/outpatient/Case.vue";
|
||||||
|
|
||||||
|
|
||||||
import ServiceItems from "@/components/outpatient/ServiceItems.vue";
|
|
||||||
import PharmaceuticalConsumables from "@/components/outpatient/PharmaceuticalConsumables.vue";
|
|
||||||
import {ref, watch, nextTick, onMounted} from "vue";
|
import {ref, watch, nextTick, onMounted} from "vue";
|
||||||
import Settlement from "@/components/outpatient/Settlement.vue";
|
import Settlement from "@/components/outpatient/Settlement.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {type Action, ElMessage, ElMessageBox} from "element-plus";
|
import {type Action, ElMessage, ElMessageBox} from "element-plus";
|
||||||
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 {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";
|
||||||
|
|
@ -122,7 +114,6 @@ const clickItem = (item: any) => {
|
||||||
registerId.value = item.id
|
registerId.value = item.id
|
||||||
itemId.value = item.id
|
itemId.value = item.id
|
||||||
patientId.value = item.patientInfoId
|
patientId.value = item.patientInfoId
|
||||||
|
|
||||||
if (item.status == 2) {
|
if (item.status == 2) {
|
||||||
initFormData()
|
initFormData()
|
||||||
}
|
}
|
||||||
|
|
@ -140,7 +131,7 @@ const clickItem = (item: any) => {
|
||||||
}
|
}
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
medicalHistoryRef.value?.init(patientId.value);
|
medicalHistoryRef.value?.init(patientId.value);
|
||||||
patientCardRef.value?.init(curRegister.value.id)
|
patientCardRef.value?.init(curRegister.value?.id)
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -153,6 +144,7 @@ const cancelReception = () => {
|
||||||
const changeTab = (e: any) => {
|
const changeTab = (e: any) => {
|
||||||
initFormData()
|
initFormData()
|
||||||
patientRegistration.value = {}
|
patientRegistration.value = {}
|
||||||
|
itemId.value = null
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
medicalHistoryRef.value?.clearList();
|
medicalHistoryRef.value?.clearList();
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue