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

This commit is contained in:
ChenQiuYu 2025-05-07 15:31:31 +08:00
commit a6c6f3fb64
12 changed files with 194 additions and 148 deletions

View File

@ -1,6 +1,8 @@
<template>
<el-input v-model="input" style="width:100%;height: 100%" clearable :disabled="disabled" ref="inputRef" @click="showPopo" @focus="focus"></el-input>
<el-popover placement="bottom-start" trigger="click" :width="props.width" :virtual-ref="inputRef" ref="popoverRef">
<el-popover placement="bottom-start" :visible="isVisible" :width="props.width" ref="popoverRef">
<template #reference>
<el-input v-model="input" style="width:100%;height: 100%" clearable :disabled="disabled" ref="inputRef" @click="showPopo" @focus="focus" @blur="handlerBlur"></el-input>
</template>
<div class="code-popo" v-if="props.list.length > 0">
<div class="code-item" v-for="item in props.list">
<div class="code-item-header" v-if="item.header">
@ -15,6 +17,8 @@
</template>
<script setup lang="ts">
import {ref, unref} from "vue";
const isVisible = ref(false)
interface ListItem {
header?: string;
value: string[];
@ -52,8 +56,12 @@ const inputStr = (str: string,item:ListItem) => {
const inputRef = ref();
const emit=defineEmits(["focus"])
const focus = () => {
isVisible.value = true
emit("focus", false)
}
const handlerBlur = () => {
isVisible.value = false
}
</script>
<style scoped lang="scss">
.code-popo {

View File

@ -1,24 +1,23 @@
<template>
<el-popover placement="bottom-start" :visible="isVisible" :width="props.width" ref="popoverRef"
:trigger-keys="[]">
<template #reference>
<el-input
ref="inputRef"
style="width: 100%;height: 100%"
v-model="keyword"
:prefix-icon="Plus"
:placeholder="props.placeholder"
:style="{'width': props.width+'px'}"
:style="{ width: props.width + 'px' }"
clearable
@input="changeInput"
class="no-border-input"
:disabled="disabled"
@focus="focus"
@blur="handlerBlur"
@click="changeInput"
>
>
</el-input>
<el-popover placement="bottom-start" trigger="click" :width="props.width" ref="popoverRef" :virtual-ref="inputRef"
:trigger-keys="[]">
/>
</template>
<div class="container">
<el-table
:data="searchList" style="width: 100%"
@ -35,16 +34,18 @@
</el-table>
</div>
</el-popover>
</template>
<script setup lang="ts">import {ref, unref} from "vue";
<script setup lang="ts">
import {ref, unref} from "vue";
import {post} from "@/utils/request.ts";
import {Plus} from "@element-plus/icons-vue";
const keyword = ref("");
const popoverRef = ref();
const inputRef = ref();
const isVisible = ref(false);
interface showConfig {
prop: string;
label: string;
@ -101,8 +102,13 @@ const beforeShow = () => {
};
const focus=()=>{
isVisible.value=true
console.log( "focus输入框")
emit('focus',true)
}
const handlerBlur = () => {
isVisible.value = false
}
</script>
<style scoped lang="scss">

View File

@ -9,14 +9,16 @@
<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-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 @click="selectUnit(scope.row,scope.row.minPackagingUnit)">
{{ scope.row.minPackagingUnit }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
@ -39,8 +41,11 @@
</template>
</el-table-column>
</el-table>
<SearchInput v-if="data.status == 0" :request-api="goodsSearchApi" :show-config="goodsShowConfig" @selectedCallBack="goodsSelect"></SearchInput>
<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";
@ -104,4 +109,8 @@ const getTotalPrice =()=>{
:deep(.el-table__cell) {
padding: 0 4px;
}
.bottom {
text-align: right;
}
</style>

View File

@ -136,11 +136,9 @@ 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)=>{

View File

@ -75,7 +75,6 @@ const completeSettlement = ()=>{
insutype: orderInfo.value.insutype,
changeOrderCode:orderInfo.value.changeOrderCode,
}
debugger
post("charge/socialRealPay",{...params}).then((res:any)=>{
show.value = false;

View File

@ -25,9 +25,12 @@
</template>
</el-table-column>
</el-table>
<div class="bottom">
<SearchInput v-if="data.status == 0" :request-api="serviceSearchApi" :show-config="serviceShowConfig"
@selectedCallBack="serviceSelect"></SearchInput>
<span>合计{{getTotalPrice()}}</span>
</div>
</template>
<script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue";
@ -75,4 +78,7 @@ const getTotalPrice =()=>{
:deep(.el-table__cell){
padding: 0 4px;
}
.bottom{
text-align: right;
}
</style>

View File

@ -26,8 +26,7 @@
@selectedCallBack="diagnosisSelect"
:show-header="false"
@focus="focus"
>
</DiagnosisSearchInput>
/>
</el-form-item>
<el-form-item label="现病史" v-if="!props.isShowFrom">
<PopoverInput :disabled="disabled" v-model="formDate.nowMedicalHistory" :list="nowMedicalHistoryList"/>

View File

@ -1,9 +1,11 @@
<template>
<el-input v-model="keyword" style="width:100%;height: 100%" @input="changeInput" :disabled="disabled" @click="changeInput"
placeholder="诊断选择" ref="inputRef" @focus="focus"></el-input>
<el-popover placement="bottom-start" trigger="click" :width="props.width" ref="popoverRef" @before-enter="beforeShow" :virtual-ref="inputRef" @hide ="afterShow">
<el-popover placement="bottom-start" :visible="isVisible" :width="props.width" ref="popoverRef" @before-enter="beforeShow" @hide ="afterShow">
<template #reference>
<el-input v-model="keyword" :style="{width:props.width+'px',height: 100+'%'}" @input="changeInput" :disabled="disabled" @click="changeInput"
placeholder="诊断选择" ref="inputRef" @focus="focus" @blur="handleBlur"></el-input>
</template>
<div class="container">
<el-table :data="searchList" style="width: 100%" @row-click="clickRow" :show-header="props.showHeader" size="small"
max-height="250px">
@ -112,10 +114,14 @@ const init = (list: any, nList: any) => {
nameList.value = nList;
keyword.value = nameList.value.join(",") + ","
}
const isVisible = ref(false);
const focus = ()=>{
isVisible.value=true
emit("focus",false)
}
const handleBlur =()=> {
isVisible.value=false
}
defineExpose({init})
</script>
<style scoped lang="scss">

View File

@ -18,9 +18,9 @@
alt="头像"/>
<img v-if="item.gender==2" class="avatar" src="/static/images/outpatient/women.png"
alt="头像"/>
{{ item.name }}
</span>
<span class="item_name">{{ item.name }}</span>
<span>{{ item.gender }}</span>
<span class="item_time">
{{ formatListTime(item.createDatetime) || '-' }}
</span>
@ -31,7 +31,7 @@
</Panel>
</template>
<script setup lang="ts">
import {onMounted, ref, watch} from "vue";
import {nextTick, onMounted, ref, watch} from "vue";
import Panel from "@/components/common/Panel.vue";
import {post} from "@/utils/request.ts";
import {formatListTime} from "@/utils/dateUtils.ts";
@ -48,6 +48,7 @@ const search = ref('')
const curItem = ref<any>('')
const emit = defineEmits(['getId', 'changeDetail', 'getStatus'])
const tab = (item: any) => {
nextTick(()=>{
emit('getStatus', item.value)
init()
if (item.value == 3) {
@ -55,6 +56,7 @@ const tab = (item: any) => {
} else {
emit('changeDetail', false)
}
})
}
const list = ref<any>([])

View File

@ -1,72 +1,72 @@
<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"
<!-- <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>
<!-- >-->
<!-- <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="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

View File

@ -51,7 +51,6 @@
@selectedCallBack="serviceSelect"
:placeholder="'请输入项目名称'"
:disabled="disabled"
style="height: 100%"
@focus="focus"
>
</SearchInput>

View File

@ -7,21 +7,15 @@
<el-scrollbar>
<div>
<Panel title="医疗诊断">
<template #tools>
<el-cascader
v-model="formData.doctorId"
:options="sectionDoctorOption"
:props="props"
@change="handleChange"
clearable
/>
</template>
<template #default>
<div style="height:64px;padding:0 24px 24px">
<div class="diagnosis-content">
<div class="diagnosis">
诊断
<DiagnosisSearchInput
v-model="diagnosisKeyword"
:request-api="diagnosisSearchApi"
:show-config="diagnosisShowConfig"
:width="600"
@selectedCallBack="diagnosisSelect"
ref="diagnosisSearchRef"
:show-header="false"
@ -30,6 +24,20 @@
>
</DiagnosisSearchInput>
</div>
<div class="doctor">
医生
<el-cascader
v-model="formData.doctorId"
:options="sectionDoctorOption"
:props="props"
@change="handleChange"
clearable
size="large"
/>
</div>
</div>
</template>
</Panel>
</div>
@ -235,6 +243,12 @@ const generateOptions = () => {
display: flex;
flex-direction: column;
overflow: hidden;
.diagnosis-content{
height:64px;
padding:0 24px 24px;
display: flex;
justify-content: left;
}
.case {
background: #FFFFFF;