Compare commits

...

4 Commits

Author SHA1 Message Date
LiJianZhao b774eb806b Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/components/common/Header.vue
#	src/components/common/Mask.vue
#	src/components/inventory/goods/Edit.vue
#	src/components/inventory/goods/Search.vue
#	src/components/outpatient/PharmaceuticalConsumables.vue
#	src/components/outpatient/ServiceItems.vue
#	src/components/settings/ItemEdit.vue
#	src/components/settings/Search.vue
#	src/components/settings/SectionEdit.vue
#	src/views/inventory/apply.vue
#	src/views/inventory/check.vue
#	src/views/inventory/goods.vue
#	src/views/inventory/supplier.vue
2025-04-28 17:07:48 +08:00
LiJianZhao 212f4991ce dev 2025-04-28 17:06:06 +08:00
LiJianZhao 2e844dd98e Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/components/inventory/purchase/AddOrder.vue
2025-04-28 11:42:17 +08:00
LiJianZhao bbba5a165d dev 2025-04-28 11:41:53 +08:00
25 changed files with 538 additions and 99 deletions

View File

@ -20,7 +20,7 @@ export const reconciliationResult =
"102": "医药机构多", "102": "医药机构多",
"103": "数据不一致" "103": "数据不一致"
} }
export const medTypeJson ={ export const medTypeJson = {
"41": "定点药店购药", "41": "定点药店购药",
"11": "普通门诊", "11": "普通门诊",
"140201": "门诊特病", "140201": "门诊特病",
@ -53,7 +53,7 @@ export const medTypeJson ={
"510102": "产前检查", "510102": "产前检查",
"108": "辅助生殖门诊" "108": "辅助生殖门诊"
} }
export const tempList = [ export const mainAppealList = [
["咳嗽", "干咳", "咳痰", "夜咳", "晨咳", "咽干", "咽痒", "咽痛", "痰中带血", "声音嘶哑", "咽部异物感", "反复感冒", "发热", "喷嚏", "流涕", "鼻塞", "头痛", "头晕", "耳鸣", "汗多", "盗汗", "自汗", "出汗", "易汗出"], ["咳嗽", "干咳", "咳痰", "夜咳", "晨咳", "咽干", "咽痒", "咽痛", "痰中带血", "声音嘶哑", "咽部异物感", "反复感冒", "发热", "喷嚏", "流涕", "鼻塞", "头痛", "头晕", "耳鸣", "汗多", "盗汗", "自汗", "出汗", "易汗出"],
["胃胀", "胃痛", "胃不适", "腹胀", "腹痛", "腹泻", "恶心", "呕吐", "反酸", "嗳气", "烧心", "纳差", "便秘", "便溏", "便血", "黑便", "大便干", "大便黏", "五更泻", "腹痛欲便", "里急后重", "排便不爽", "溏结不调"], ["胃胀", "胃痛", "胃不适", "腹胀", "腹痛", "腹泻", "恶心", "呕吐", "反酸", "嗳气", "烧心", "纳差", "便秘", "便溏", "便血", "黑便", "大便干", "大便黏", "五更泻", "腹痛欲便", "里急后重", "排便不爽", "溏结不调"],
["胸闷", "胸痛", "心悸", "气短", "气喘", "气促", "眠差", "眠浅", "多梦", "易醒", "早醒", "入睡困难", "嗜睡", "尿频", "尿急", "尿痛", "尿不尽", "尿灼热", "尿分叉", "夜尿多", "尿浊", "尿血", "水肿", "阳痿", "早泄"], ["胸闷", "胸痛", "心悸", "气短", "气喘", "气促", "眠差", "眠浅", "多梦", "易醒", "早醒", "入睡困难", "嗜睡", "尿频", "尿急", "尿痛", "尿不尽", "尿灼热", "尿分叉", "夜尿多", "尿浊", "尿血", "水肿", "阳痿", "早泄"],
@ -62,3 +62,124 @@ export const tempList = [
["偶尔1天", "2天", "3天", "4天", "5天", "1个月", "2个月", "3个月", "半年", "1年", "1周", "2周", "3周"] ["偶尔1天", "2天", "3天", "4天", "5天", "1个月", "2个月", "3个月", "半年", "1年", "1周", "2周", "3周"]
] ]
export const nowMedicalHistoryList = [
["恶风", "恶寒", "怕冷", "发热", "潮热", "低热", "手心热", "脚心热", "夜间发热", "寒热往来"],
["自汗", "盗汗", "汗多", "汗黏", "冷汗", "头汗", "背汗", "手汗", "脚汗"],
["眠可", "眠差", "眠浅", "多梦", "易醒", "早醒", "入睡困难", "啫睡", "情绪正常", "压力大", "眠浅", "易怒", "易躁", "焦虑", "抑郁", "心烦"],
["纳可", "纳差", "厌食", "易饿", "饥不欲食", "口干", "口苦", "口淡", "口黏", "口干欲饮", "渴不欲饮", "喜冷饮", "喜热饮"],
["小便正常", "小便黄", "小便清长", "尿频", "尿急", "尿痛", "大便正常", "便溏", "大便黏", "大便干", "完谷不化", "溏结不调"]
]
export const beforeMedicalHistoryList = [
["既往体健", "未见明显异常", "无呛咳史", "否认药物过敏史", "否认慢性病史", "否认传染病史", "否认遗传病史", "否认备孕", "否认怀孕"],
["高血压", "高血脂", "心脏病", "糖尿病", "痛风", "精神疾病", "脑梗史", "肝炎", "胃炎", "肺结核", "哮喘", "鼻炎", "甲亢", "血液病"],
["吸烟", "偶尔吸烟", "长期吸烟", "不饮酒", "偶尔饮酒", "长期饮酒", "未婚", "已婚", "未孕", "备孕", "怀孕", "闭经", "有早产史", "有流产史", "有痛经史"]
]
export const chinaAdjunctCheckList = [
["面色淡白", "面色姜黄", "面色晦暗", "面色少华", "面色黑", "面色青", "面色红", "目光乏神", "精神不振",],
["舌淡红", "舌淡白", "舌色暗", "香红", "舌尖红", "舌边红", "舌青紫", "舌淡紫", "舌绛",],
["舌有齿痕", "舌有裂纹", "舌体胖大", "舌体瘦小", "舌有点刺", "舌尖点刺", "舌边点刺", "舌老", "舌嫩",],
["络脉短", "络脉细", "络脉粗", "络脉曲张", "络脉暗红", "络脉青紫", "络脉分叉",],
["苔薄", "苔厚", "苔滑", "苔润", "苔燥", "苔腻", "苔腐", "苔剥落", "少苔", "无苔",],
["苔白", "苔黑", "苔黄", "苔灰",],
["脉浮", "脉沉", "脉弦", "脉細", "脉数", "脉滑", "脉迟", "脉涩", "脉弱", "脉虚", "脉濡", "脉缓", "脉紧",],
["脉沉細", "脉沉迟", "脉沉弱", "脉細", "脈細弱", "脉弦", "脉弦細", "脉弦数", "脉数", "脉浮数"],
];
export const allergyHistoryList = [
["否认药物过敏史", "否认食物过敏史"],
["过敏史", "青霉素", "链霉素", "卡那霉素", "林可霉素", "左氧氟沙星", "溴芬酸钠", "阿托品", "头孢类", "磺胺类", "酒精", "碘伏", "去痛片", "扑热息痛", "安痛定",
"安定", "鲁米那", "阿司匹林", "普鲁卡因", "毛发皮屑", "牛奶", "鸡蛋", "大豆", "小麦", "花生", "鱼虾", "坚果", "花粉", "毒菌", "尘螨"],
];
export const physiqueExamList = [
{
name: "体征",
array: ['生命体征平稳', "神志清除", "精神反应尚可", "未见皮疹", "浅表淋巴结未扪及肿大", "双肺呼吸音清晰", "双肺叩诊呈清音",
"未闻及异常呼吸音及干湿啰音", "心前区无异常搏动", "心音有力心律齐", "各瓣膜区未闻及明显杂音",
"未闻及心包摩擦音", "腹部柔软", "无腹肌紧张", "全腹部无压痛", "肠鸣音活跃", "双肾区无叩痛"],
},
{
prefix: "体温",
name: "体温",
array: [
"36.0", "36.5", "37.0", "37.3", "37.4", "37.5", "37.6", "37.7", "37.8", "37.9",
"38.0", "38.1", "38.2", "38.3", "38.4", "38.5", "38.6", "38.7", "38.8", "38.9",
"39.0", "39.1", "39.2", "39.3", "39.4", "39.5", "39.6", "39.7", "39.8", "39.9",
"40.0", "40.1", "40.2", "40.3", "40.4", "40.5", "40.6", "40.7", "40.8", "40.9",
"41.0", "41.1", "41.2", "41.3", "41.4", "41.5", "41.6", "41.7", "41.8", "41.9"
],
suffix: "℃"
},
{
prefix: "脉搏",
name: "脉搏",
array: ['30', '35', '40', '45', '50', '55', '60', '65', "70",
"75", "80", "85", "90", "95", "100", "105", "110", "115", "120",
"125", "130", "135", "140", "145", "150", "155", "160", "165", "170", "175", "180"],
suffix: "bpm"
},
{
prefix: "呼吸",
name: "呼吸",
array: ['10', '11', '12', '13', '14', '15', '16', '17', "18",
"19", "20", "21", "22", "23", "24", "25", "26", "27", "28",
"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40"],
suffix: "分/每次"
},
{
prefix: "收缩压",
name: "收缩压",
array: ['52', '54', '56', '58', '60', '62', '64', '66', "68",
"70", "72", "74", "76", "78", "80", "82", "84", "86", "88",
"90", "92", "94", "96", "98", "100", "102", "104", "106", "108", "110", "112"],
suffix: "mmHg"
},
{
prefix: "舒张压",
name: "舒张压",
array: ['82', '84', '86', '88', '90', '92', '94', '96', "98",
"100", "102", "104", "106", "108", "110", "112", "114", "116", "118",
"120", "122", "124", "126", "128", "130", "132", "134", "136", "138", "140", "142"],
suffix: "mmHg"
},
{
prefix: "体重",
name: "体重",
array: ['2.0', '2.5', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', "6.0",
"6.5", "7.0", "7.5", "8.0", "8.5", "9.0", "9.5", "10.0", "10.5", "11.0",
"11.5", "12.0", "12.5", "13.0", "13.5", "14.0", "14.5", "15.0", "15.5", "16.0", "16.5", "17.0"],
suffix: "kg"
},
{ prefix: "身高",
name: "身高",
array: ['45', '46', '47', '48', '49', '50', '51', '52', "53",
"54", "55", "56", "57", "58", "59", "60", "61", "62", "63",
"64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75"],
suffix: "cm"
},
{
prefix: "血氧",
name: "血氧",
array: ['70', '71', '72', '73', '74', '75', '76', '77', "78",
"79", "80", "81", "82", "83", "84", "85", "86", "87", "88",
"89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99"],
suffix: "%"
},
{
prefix: "血糖",
name: "血糖",
array: ['4.0', '4.1', '4.2', '4.3', '4.4', '4.5', '4.6', '4.7', "4.8",
"4.9", "5.0", "5.1", "5.2", "5.3", "5.4", "5.5", "5.6", "5.7", "5.8",
"5.9", "6.0", "6.1", "6.2", "6.3", "6.4", "6.5", "6.6", "6.7", "6.8", "6.9",
"7.0", "7.1", "7.2", "7.3", "7.4", "7.5", "7.6", "7.7", "7.8", "7.9", "8.0",
"8.1", "8.2", "8.3", "8.4", "8.5", "8.6", "8.7", "8.8", "8.9", "9.0",
"9.1", "9.2", "9.3", "9.4", "9.5", "9.6", "9.7",
],
suffix: "mmol/L"
}
]

View File

@ -42,9 +42,9 @@ const inputStr = (str: string) => {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: 5px 0; padding: 5px 0;
border-bottom: 1px solid #fffeee; border-bottom: 1px solid #DDDDDD;
.code-item-name{ .code-item-name{
flex: 0 0 calc(100% / 12); float: left;
font-size: 16px; font-size: 16px;
box-sizing: border-box; box-sizing: border-box;
padding: 5px; padding: 5px;
@ -53,6 +53,9 @@ const inputStr = (str: string) => {
&:hover{ &:hover{
color: #000; color: #000;
} }
&:after{
clear: both;
}
} }
} }
} }

View File

@ -10,23 +10,23 @@
<li class="list-item" :class="curItem.id == item.id ? 'active' : ''" v-for="(item, index) in orderList" <li class="list-item" :class="curItem.id == item.id ? 'active' : ''" v-for="(item, index) in orderList"
:key="index" @click="clickItem(item)"> :key="index" @click="clickItem(item)">
<span> <span>
<img v-if="item.patinetGender==''" class="avatar" src="/static/images/outpatient/man.png" <img v-if="item.patientRegistration.gender==''" class="avatar" src="/static/images/outpatient/man.png"
alt="头像"/> alt="头像"/>
<img v-if="item.patinetGender==''" class="avatar" src="/static/images/outpatient/women.png" <img v-if="item.patientRegistration.gender==''" class="avatar" src="/static/images/outpatient/women.png"
alt="头像"/> alt="头像"/>
</span> </span>
<span class="item_name">{{ item.patientName }}</span> <span class="item_name">{{ item.patientInfo.name }}</span>
<el-tooltip <el-tooltip
class="box-item" class="box-item"
effect="dark" effect="dark"
:content="formatTime(item.createDatetime)||'-'" :content="formatTime(item.patientRegistration.createDatetime)||'-'"
placement="bottom-start" placement="bottom-start"
> >
<span class="item_time"> <span class="item_time">
{{ formatTime(item.createDatetime) || '-' }} {{ formatTime(item.patientRegistration.createDatetime) || '-' }}
</span> </span>
</el-tooltip> </el-tooltip>
<span>01-01</span> <span :class="[item.status == 0 ?'status-active':'']">{{item.status == 0 ? '未收' : '已收'}}</span>
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
@ -81,7 +81,7 @@ const delDraft = () =>{
orderList.value.shift(); orderList.value.shift();
clickFirst() clickFirst()
} }
defineExpose({delDraft}) defineExpose({delDraft,getOrderList})
onMounted(()=>{ onMounted(()=>{
getOrderList() getOrderList()
}) })
@ -151,6 +151,7 @@ onMounted(()=>{
} }
} }
&:hover { &:hover {
background: rgba(#4D6DE4, 0.1); background: rgba(#4D6DE4, 0.1);
} }
@ -169,8 +170,12 @@ onMounted(()=>{
text-overflow: ellipsis; // text-overflow: ellipsis; //
} }
}
}
.status-active{
font-weight: bold;
color: #409EFF;
}
.active { .active {
color: #fff; color: #fff;
background: #4D6DE4; background: #4D6DE4;

View File

@ -1,9 +1,10 @@
<template> <template>
<el-table :data="list" max-height="150"> <el-table :data="data.goodsDetail" max-height="150">
<el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="selectedPrice" label="单价"></el-table-column> <el-table-column prop="selectedPrice" label="单价"></el-table-column>
<el-table-column prop="number" label="数量"> <el-table-column prop="number" label="数量">
<template #default="scope"> <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"></el-input-number>
<el-dropdown> <el-dropdown>
<span style="line-height: 30px;margin-left: 10px">{{ scope.row.selectedUnit }}</span> <span style="line-height: 30px;margin-left: 10px">{{ scope.row.selectedUnit }}</span>
@ -16,9 +17,14 @@
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
</div>
<div v-else>
<div>{{ scope.row.selectedNum }} {{ scope.row.selectedUnit }}</div>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作" v-if="data.status == 0">
<template #default="scope"> <template #default="scope">
<el-button type="danger" link @click="delGoods(scope.row)">X</el-button> <el-button type="danger" link @click="delGoods(scope.row)">X</el-button>
</template> </template>
@ -29,9 +35,9 @@
<script setup lang="ts"> <script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue"; import SearchInput from "@/components/SearchInput.vue";
const list = defineModel<any>(); const data = defineModel<any>();
const delGoods = (item: any) => { const delGoods = (item: any) => {
list.value = list.value.filter((i: any) => i.id != item.id) data.value.goodsDetail = data.value.filter((i: any) => i.id != item.id)
} }
const goodsSearchApi = "goods/goods/search"; const goodsSearchApi = "goods/goods/search";
@ -50,11 +56,10 @@ const goodsShowConfig = [
}, },
] ]
const goodsSelect = (row: any) => { const goodsSelect = (row: any) => {
row.selectedNum = 1 row.selectedNum = 1
row.selectedUnit = row.packagingUnit row.selectedUnit = row.packagingUnit
row.selectedPrice = row.unitPrice row.selectedPrice = row.unitPrice
list.value.push(row) data.value.goodsDetail.push(row)
emit('totalPriceChange') emit('totalPriceChange')
} }
const selectUnit = (item: any, unit: any) => { const selectUnit = (item: any, unit: any) => {

View File

@ -69,13 +69,13 @@ const completeSettlement = ()=>{
}) })
return return
} }
debugger
const params = { const params = {
mdtrtCertType: socialPayInfo.value.mdtrtCertType, mdtrtCertType: orderInfo.value.mdtrtCertType,
mdtrtCertNo: socialPayInfo.value.mdtrtCertNo, mdtrtCertNo: orderInfo.value.mdtrtCertNo,
insutype: orderInfo.value.insutype, insutype: orderInfo.value.insutype,
changeOrderCode:orderInfo.value.code, changeOrderCode:orderInfo.value.changeOrderCode,
} }
debugger
post("charge/socialRealPay",{...params}).then((res:any)=>{ post("charge/socialRealPay",{...params}).then((res:any)=>{
show.value = false; show.value = false;

View File

@ -1,10 +1,19 @@
<template> <template>
<el-table :data="list" max-height="150"> <el-table :data="data.itemDetail" max-height="150">
<el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="itemName" label="名称"></el-table-column>
<el-table-column prop="unit" label="单位"></el-table-column> <el-table-column prop="selectedUnit" label="单位"></el-table-column>
<el-table-column prop="unitPrice" label="单价"></el-table-column> <el-table-column prop="selectedPrice" label="单价"></el-table-column>
<el-table-column prop="number" label="数量"></el-table-column> <el-table-column label="数量">
<el-table-column 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>
</div>
<div v-else>
{{ scope.row.selectedNum }}
</div>
</template>
</el-table-column>
<el-table-column label="操作" v-if="data.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>
@ -15,9 +24,9 @@
<script setup lang="ts"> <script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue"; import SearchInput from "@/components/SearchInput.vue";
const list =defineModel<any>(); const data =defineModel<any>();
const delService = (item: any) => { const delService = (item: any) => {
list.value = list.value.filter((i: any) => i.id != item.id) data.value.itemDetail = data.value.filter((i: any) => i.id != item.id)
} }
const serviceSearchApi = "item/search"; const serviceSearchApi = "item/search";
@ -35,12 +44,16 @@ const serviceShowConfig = [
prop: "unitPrice", prop: "unitPrice",
}, },
] ]
const emit = defineEmits(['selectedCallBack']) const emit = defineEmits(['totalPriceChange'])
const serviceSelect = (row: any) => { const serviceSelect = (row: any) => {
row.name = row.itemName row.selectedNum = 1
row.number = 1 row.selectedUnit = row.unit
list.value.push(row) row.selectedPrice = row.unitPrice
emit('selectedCallBack',row) data.value.itemDetail.push(row)
emit('totalPriceChange',row)
}
const handleNumChange = ()=>{
emit('totalPriceChange')
} }

View File

@ -60,9 +60,10 @@ const show = ref(false)
const printReceipt = ref(false); const printReceipt = ref(false);
const payType = ref(null); const payType = ref(null);
const retailOrder = ref<any>(null); const retailOrder = ref<any>(null);
const init = (order: any) => { const init = (code: any) => {
retailOrder.value = order; post ('charge/getByCode',{code:code}).then((res:any)=>{
console.log(order) retailOrder.value = res;
})
show.value = true; show.value = true;
} }
defineExpose({init}) defineExpose({init})
@ -131,7 +132,7 @@ const socialSettlement = ()=>{
const psnPaymentRef = ref(); const psnPaymentRef = ref();
const openPsnPayment = (payInfo:any,orderInfo:any)=>{ const openPsnPayment = (payInfo:any,orderInfo:any)=>{
nextTick(()=>{ nextTick(()=>{
psnPaymentRef.value.open(payInfo,orderInfo); psnPaymentRef.value?.open(payInfo,orderInfo);
}) })
} }

View File

@ -1,5 +1,5 @@
<template xmlns="http://www.w3.org/1999/html"> <template xmlns="http://www.w3.org/1999/html">
<Mask :width="1100" :height="600" :is-show="show" :top="100" title="过期商品详情" @close="show=false"> <Mask :width="1100" :height="600" :is-show="show" title="过期商品详情" @close="show=false">
<el-table :data="tableData" style="width: 100%" class="table" max-height="1000px"> <el-table :data="tableData" style="width: 100%" class="table" max-height="1000px">
<el-table-column label="名称" prop="name"></el-table-column> <el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="剩余天数"> <el-table-column label="剩余天数">

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :width="1100" :height="600" :is-show="show" :top="100" title="库存预警详情" @close="close"> <Mask :width="1100" :height="600" :is-show="show" title="库存预警详情" @close="close">
<el-table :data="tableData" style="width: 100%" class="table" max-height="1000px"> <el-table :data="tableData" style="width: 100%" class="table" max-height="1000px">
<el-table-column label="名称" prop="name"></el-table-column> <el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="剩余库存"> <el-table-column label="剩余库存">

View File

@ -117,10 +117,10 @@
<el-button @click="save" type="primary">保存</el-button> <el-button @click="save" type="primary">保存</el-button>
<el-button @click="exit" type="primary">关闭</el-button> <el-button @click="exit" type="primary">关闭</el-button>
</div> </div>
<Mask :width="800" :height="600" :is-show="show_search" :top="100" > <Mask :width="800" :height="600" :is-show="show_search" >
<Search ref="searchRef" v-model="edit_data" @close="show_search = false"/> <Search ref="searchRef" v-model="edit_data" @close="show_search = false"/>
</Mask> </Mask>
<Mask :width="400" :height="600" :top="100" :is-show="show_cate"> <Mask :width="400" :height="600" :is-show="show_cate">
<Cate :type="_type" @close="cateCloseCallBack"/> <Cate :type="_type" @close="cateCloseCallBack"/>
</Mask> </Mask>

View File

@ -193,7 +193,7 @@
</Mask> </Mask>
<Mask :is-show="is_add" :top="100"> <Mask :is-show="is_add" >
<Edit ref="editRef" @close="is_add = false;"/> <Edit ref="editRef" @close="is_add = false;"/>
</Mask> </Mask>

View File

@ -3,7 +3,7 @@
<template #tools> <template #tools>
<div class="content"> <div class="content">
<div class="model-selector"> <div class="model-selector">
<el-select v-model="modelType"> <el-select v-model="formDate.diagType">
<el-option label="西医模板" :value="0"/> <el-option label="西医模板" :value="0"/>
<el-option label="中医模板" :value="1"/> <el-option label="中医模板" :value="1"/>
<el-option label="口腔模板" :value="2"/> <el-option label="口腔模板" :value="2"/>
@ -15,7 +15,7 @@
<div class="container"> <div class="container">
<el-form :model="formDate" label-width="auto" ref="formRef"> <el-form :model="formDate" label-width="auto" ref="formRef">
<el-form-item label="主诉"> <el-form-item label="主诉">
<PopoverInput v-model="formDate.mainAppeal" :list="tempList"/> <PopoverInput v-model="formDate.mainAppeal" :list="mainAppealList"/>
</el-form-item> </el-form-item>
<el-form-item label="诊断"> <el-form-item label="诊断">
<DiagnosisSearchInput <DiagnosisSearchInput
@ -26,31 +26,31 @@
</DiagnosisSearchInput> </DiagnosisSearchInput>
</el-form-item> </el-form-item>
<el-form-item label="现病史"> <el-form-item label="现病史">
<PopoverInput v-model="formDate.nowMedicalHistory" :list="tempList"/> <PopoverInput v-model="formDate.nowMedicalHistory" :list="nowMedicalHistoryList"/>
</el-form-item> </el-form-item>
<el-form-item label="既往史"> <el-form-item label="既往史">
<PopoverInput v-model="formDate.beforeMedicalHistory" :list="tempList"/> <PopoverInput v-model="formDate.beforeMedicalHistory" :list="beforeMedicalHistoryList"/>
</el-form-item> </el-form-item>
<el-form-item label="过敏史"> <el-form-item label="过敏史">
<PopoverInput v-model="formDate.allergyHistory" :list="tempList"/> <PopoverInput v-model="formDate.allergyHistory" :list="allergyHistoryList"/>
</el-form-item> </el-form-item>
<el-form-item label="体格检查"> <el-form-item label="体格检查">
<PopoverInput v-model="formDate.exam" :list="tempList"/> <PhysiqueExamInuput v-model="formDate.exam" :list="physiqueExamList"/>
</el-form-item> </el-form-item>
<el-form-item label="望闻问切" v-if="modelType==1"> <el-form-item label="望闻问切" v-if="modelType==1">
<PopoverInput v-model="formDate.chinaAdjunctCheck" :list="tempList"/> <PopoverInput v-model="formDate.chinaAdjunctCheck" :list="chinaAdjunctCheckList"/>
</el-form-item> </el-form-item>
<el-form-item label="" v-if="modelType==1"> <el-form-item label="法" v-if="modelType==1">
<PopoverInput v-model="formDate.chinaDeal" :list="tempList"/> <el-input v-model="formDate.chinaDeal"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="口腔检查" v-if="modelType==2"> <el-form-item label="口腔检查" v-if="modelType==2">
<el-input v-model="formDate.mouthCheck"></el-input> <el-input v-model="formDate.mouthCheck"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="辅助检查" v-if="modelType==2 || modelType ==0"> <el-form-item label="辅助检查" v-if="modelType==2 || modelType ==0">
<PopoverInput v-model="formDate.adjunctCheck" :list="tempList"/> <el-input v-model="formDate.adjunctCheck"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="处置" v-if="modelType==0 || modelType ==2"> <el-form-item label="处置" v-if="modelType==0 || modelType ==2">
<PopoverInput v-model="formDate.deal" :list="tempList"/> <el-input v-model="formDate.deal"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -59,10 +59,17 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {ref} from "vue"; import {ref} from "vue";
import {tempList} from "@/assets/config/constants.ts"; import {
mainAppealList,
nowMedicalHistoryList,
beforeMedicalHistoryList,
chinaAdjunctCheckList,
allergyHistoryList, physiqueExamList
} from "@/assets/config/constants.ts";
import Panel from "@/components/common/Panel.vue"; import Panel from "@/components/common/Panel.vue";
import PopoverInput from "@/components/PopoverInput.vue"; import PopoverInput from "@/components/PopoverInput.vue";
import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue"; import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue";
import PhysiqueExamInuput from "@/components/outpatient/PhysiqueExamInuput.vue";
const formDate = defineModel<any>(); const formDate = defineModel<any>();
const modelType = ref(0) const modelType = ref(0)

View File

@ -8,7 +8,7 @@
<span class="name">{{ item.name }}</span> <span class="name">{{ item.name }}</span>
<span class="type">{{ item.type }}</span> <span class="type">{{ item.type }}</span>
<span class="unit"> <span class="unit">
<el-input-number v-model="item.selectedNum" min="0"></el-input-number> <el-input-number v-model="item.selectedNum" min="1"></el-input-number>
<el-dropdown> <el-dropdown>
<span style="line-height: 30px;margin-left: 10px">{{ item.selectedUnit }}</span> <span style="line-height: 30px;margin-left: 10px">{{ item.selectedUnit }}</span>
<template #dropdown> <template #dropdown>
@ -23,7 +23,7 @@
</span> </span>
<span class="price">{{item.selectedPrice || '0' }}</span> <span class="price">{{item.selectedPrice || '0' }}</span>
<span class="delete"> <span class="delete">
<el-button text @click="deleteItem(item.id)"> <el-button @click="deleteItem(item.id)">
<el-icon><CircleClose/></el-icon> <el-icon><CircleClose/></el-icon>
</el-button> </el-button>
</span> </span>

View File

@ -0,0 +1,96 @@
<template>
<el-popover placement="bottom-start" trigger="click" :width="props.width">
<template #reference>
<el-input v-model="input" :style="{'width': props.width+'px'}" clearable></el-input>
</template>
<el-tabs v-model="tabName" class="demo-tabs">
<el-tab-pane v-for="item in props.list" :label="item.name" :name="item.name">
<div class="list">
<div class="code-item">
<div class="code-item-name" v-for="subItem in item.array" @click="inputStr(item,subItem)">
{{subItem}}
</div>
</div>
<div class="suffix">
{{item.suffix}}
</div>
</div>
</el-tab-pane>
</el-tabs>
</el-popover>
</template>
<script setup lang="ts">
import {onMounted, ref} from "vue";
const input = defineModel<string | null>();
interface listItem {
prefix?:string;
name: string;
array: Array<string>;
suffix?: string;
}
const props = defineProps({
list: {
type: Array<listItem>,
default: []
},
width: {
type: Number,
default: 1000
}
})
const inputStr = (item:listItem,str: string) => {
let strList = input.value ? input.value.split(",") : [];
let prefix = item.prefix ? item.prefix : '';
let suffix = item.suffix ? item.suffix : '';
strList.push(prefix+str+suffix);
input.value = strList.join(",");
}
const tabName = ref()
onMounted(()=>{
tabName.value = props.list[0].name
})
</script>
<style scoped lang="scss">
.list{
display: flex;
.code-item {
width: 50%;
display: flex;
flex-wrap: wrap;
padding: 5px 0;
border-bottom: 1px solid #fffeee;
.code-item-name {
float: left;
font-size: 16px;
box-sizing: border-box;
padding: 5px;
text-align: center;
cursor: pointer;
&:hover {
color: #000;
}
&:after{
clear: both;
}
}
}
.suffix{
width: 50%;
display: flex;
justify-content: center;
line-height: 45px;
font-size: 45px;
align-items: center;
}
}
</style>

View File

@ -5,16 +5,16 @@
<ul> <ul>
<li class="item" v-for="(item, index) in list" :key="index"> <li class="item" v-for="(item, index) in list" :key="index">
<span class="index">{{ index + 1 }}</span> <span class="index">{{ index + 1 }}</span>
<span class="name">{{ item.name }}</span> <span class="name">{{ item.itemName }}</span>
<span class="code">{{ item.socialCode }}</span> <span class="code">{{ item.itemSocialCode }}</span>
<span class="unit">{{ item.unit }}</span> <span class="unit">{{item.selectedNum}}{{ item.selectedUnit }}</span>
<span class="price">{{ item.unitPrice }}</span> <span class="price">{{ item.selectedPrice }}</span>
</li> </li>
</ul> </ul>
</div> </div>
<div class="search"> <div class="search">
<span style="margin-left: 24px">合计</span> <span style="margin-left: 24px">合计</span>
<span style="margin-right: 24px">{{ list.reduce((acc, cur) => acc + cur.unitPrice, 0) }}</span> <span style="margin-right: 24px">{{ list.reduce((acc, cur) => acc + cur.selectedPrice, 0) }}</span>
</div> </div>
</div> </div>
</Panel> </Panel>

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :top="50" :height="600" :width="700" :is-show="show"> <Mask :height="600" :width="700" :is-show="show">
<CloseBtn @click="show = false"></CloseBtn> <CloseBtn @click="show = false"></CloseBtn>
<el-card> <el-card>
<div class="panel"> <div class="panel">

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :top="50" :height="600" :width="900" :is-show="show"> <Mask :height="600" :width="900" :is-show="show">
<CloseBtn @click="show = false"></CloseBtn> <CloseBtn @click="show = false"></CloseBtn>
<el-card> <el-card>
<template #header> <template #header>

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :top="50" :height="650" :width="900" :is-show="show"> <Mask :height="650" :width="900" :is-show="show">
<CloseBtn @click="show = false"></CloseBtn> <CloseBtn @click="show = false"></CloseBtn>
<el-card> <el-card>
<template #header> <template #header>

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :is-show="show" :width=800 :height="800" :top="100"> <Mask :is-show="show" :width=800 :height="800" >
<div class="container-wrapper"> <div class="container-wrapper">
<CloseBtn @click="close"></CloseBtn> <CloseBtn @click="close"></CloseBtn>
<el-table :data="tableData" style="width: 100%" class="list" highlight-current-row @current-change="handleCurrentChange"> <el-table :data="tableData" style="width: 100%" class="list" highlight-current-row @current-change="handleCurrentChange">

View File

@ -1,6 +1,6 @@
<template> <template>
<Mask :width="400" :height="400" :top="100" :is-show="show"> <Mask :width="400" :height="400" :is-show="show">
<CloseBtn @click="show = false"></CloseBtn> <CloseBtn @click="show = false"></CloseBtn>
<el-card style="width: 360px;height: 360px"> <el-card style="width: 360px;height: 360px">
<template #header> <template #header>

View File

@ -0,0 +1,169 @@
<template>
<Mask :width="800" :height="600" :is-show="show" >
<div class="search_content_wrapper">
<div class="search_wrapper">
<span>项目名称:</span>
<el-input
class="input"
v-model="keyword"
placeholder="请输入药品名称或者编号"
@keydown.enter="searchSocialItem"
clearable/>
<button @click="searchSocialItem">搜索</button>
</div>
<div class="search_result">
<div class="result_table" style="width: 100%; height: 100%;overflow: hidden">
<el-table v-loading="isloading" :data="searchResult.list" style="width: 100%;height: 350px"
highlight-current-row
@row-click = "changeCurRow"
:row-class-name="tableRowClassName">
<el-table-column prop="name" label="名称" fixed width="180" show-overflow-tooltip/>
<el-table-column prop="code" fixed label="医疗目录编码" width="180" show-overflow-tooltip/>
<el-table-column prop="unit" label="计价单位" width="180" show-overflow-tooltip/>
</el-table>
<div class="page_btn_list">
<el-pagination background layout="prev, pager, next" :page-count="searchResult.totalPage"
v-model:current-page="searchResult.pageNum" @current-change="changePage"/>
</div>
</div>
</div>
<div class="search_bottom">
<el-button type="primary" @click="confirm">确认</el-button>
<el-button type="primary" @click="close">关闭</el-button>
</div>
</div>
</Mask>
</template>
<script setup lang="ts">
import {onMounted, ref, defineProps} from "vue";
import {post} from '@/utils/request.ts'
import Mask from "@/components/common/Mask.vue";
let curItem: any = null;
let keyword = ref('');
const show = ref(false);
const emit = defineEmits(["confirm"])
let searchResult = ref({
totalPage: 0,
list: [],
pageNum: 1,
});
let tableRowClassName = (res: any) => {
if (curItem != null && curItem.id == res.row.id) {
return 'invalid';
}
return 'valid'
}
let changePage = (page: number) => {
searchSocialItem()
}
const changeCurRow = (row: any) => {
curItem = row;
}
const init = (_name: string) => {
keyword.value = _name;
show.value = true;
initSearchData()
if (keyword.value&&keyword.value!=""){
searchSocialItem()
}
};
defineExpose({init});
function initSearchData() {
isloading.value = false;
curItem = null;
}
let confirm = () => {
emit('confirm', curItem)
close()
}
let isloading = ref(false);
let searchSocialItem = () => {
isloading.value = true;
post("social/directory/itemSearch", {
keyword: keyword.value,pageSize:20,pageNum:searchResult.value.pageNum
}, {catch_error: true}).then((res: any) => {
searchResult.value.totalPage = res.total_page;
searchResult.value.list = res.list;
initSearchData()
}).catch(() => {
isloading.value = false;
})
}
const close = () => {
show.value = false;
}
</script>
<style scoped lang="scss">
.search_bottom {
display: block;
margin-top: 10px;
}
.search_content_wrapper {
background-color: #FFF;
width: 100%;
height: 100%;
overflow: hidden;
margin: auto;
margin-top: 20px;
border-radius: 10px;
box-sizing: border-box;
padding: 10px;
}
.search_wrapper {
position: relative;
width: 100%;
display: flex;
margin: 0 auto;
height: 60px;
span {
position: relative;
display: block;
width: 100px;
text-align: right;
line-height: 40px;
}
.input {
display: block;
flex: 1;
}
button {
width: 80px;
line-height: 40px;
color: #FFF;
margin-left: 10px;
height: 40px;
background-color: #409EFF;
border: none;
}
}
:deep(.invalid) {
color: #409EFF;
}
.search_result {
width: 100%;
height: 400px;
}
</style>

View File

@ -1,5 +1,5 @@
<template> <template>
<Mask :width="800" :height="600" :is-show="show" :top="100" @close="show=false" title="项目列表"> <Mask :width="800" :height="600" :is-show="show" @close="show=false" title="项目列表">
<div class="search_content_wrapper"> <div class="search_content_wrapper">
<div class="search_wrapper"> <div class="search_wrapper">
<span>药品名称:</span> <span>药品名称:</span>
@ -55,9 +55,9 @@ const show = ref(false);
const emit = defineEmits(["confirm"]) const emit = defineEmits(["confirm"])
let search_result = ref({ let search_result = ref({
total_page: 0, totalPage: 0,
list: [], list: [],
page: 1, pageNum: 1,
}); });
const init = () => { const init = () => {
@ -79,9 +79,9 @@ function init_search_data() {
isloading.value = false; isloading.value = false;
current_search_data = null; current_search_data = null;
search_result.value = { search_result.value = {
total_page: 0, totalPage: 0,
list: [], list: [],
page: 1, pageNum: 1,
} }
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<Mask :is-show="show" :top="100" :height="600" :width="1200"> <Mask :is-show="show" :height="600" :width="1200">
<CloseBtn @click="close"></CloseBtn> <CloseBtn @click="close"></CloseBtn>
<div class="container-wrapper"> <div class="container-wrapper">
<div class="table"> <div class="table">

View File

@ -2,17 +2,20 @@
<div class="container"> <div class="container">
<div class="left"> <div class="left">
<Panel title="收费队列"> <Panel title="收费队列">
<ChargeQueue @clickItem="clickItem" ref="chargeQueue"></ChargeQueue> <chargeQueue @clickItem="clickItem" ref="chargeQueueRef"></ChargeQueue>
</Panel> </Panel>
</div> </div>
<div class="middle"> <div class="middle">
<Panel title="零售收费"> <Panel title="零售收费">
<template #tools> <template #tools>
<span>{{formData.totalPrice}}</span> <span>{{formData.totalPrice}}</span>
<div v-if="formData.status == 0 ">
<el-button type="primary" @click="delDraft()" v-if="formData.id == -1" >删除</el-button> <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" @click="saveAndCharge" >收费</el-button>
<el-button type="primary" >追溯码</el-button> <el-button type="primary" >追溯码</el-button>
<el-button type="primary" >挂单</el-button> <el-button type="primary" >挂单</el-button>
</div>
</template> </template>
<el-form :model="formData" inline label-width="0"> <el-form :model="formData" inline label-width="0">
<el-form-item> <el-form-item>
@ -56,11 +59,11 @@
</Panel> </Panel>
<Panel title="服务项目"> <Panel title="服务项目">
<ServiceDetail v-model="formData.itemDetail" @selectedCallBack =getOrderTotalPrice> </ServiceDetail> <ServiceDetail v-model="formData" @totalPriceChange="getOrderTotalPrice"> </ServiceDetail>
</Panel> </Panel>
<Panel title="药品耗材"> <Panel title="药品耗材">
<GoodsDetail v-model="formData.goodsDetail" @totalPriceChange="getOrderTotalPrice"></GoodsDetail> <GoodsDetail v-model="formData" @totalPriceChange="getOrderTotalPrice" ></GoodsDetail>
</Panel> </Panel>
</div> </div>
<div class="right"> <div class="right">
@ -74,6 +77,8 @@
:money="formData.totalPrice" :money="formData.totalPrice"
ref="settlementRef" ref="settlementRef"
v-model="socialCard" v-model="socialCard"
@orderCompleted="orderCompleted"
@orderCanceled="orderCanceled"
></Settlement> ></Settlement>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -93,10 +98,10 @@ const formData = ref<any>({
diagnosisMedicalRecord:{}, diagnosisMedicalRecord:{},
}) })
const diagnosisKeyword = ref("") const diagnosisKeyword = ref("")
const chargeQueue = ref() const chargeQueueRef = ref()
const delDraft = () => { const delDraft = () => {
nextTick(() => { nextTick(() => {
chargeQueue.value?.delDraft() chargeQueueRef.value?.delDraft()
}) })
} }
const settlementRef = ref() const settlementRef = ref()
@ -104,7 +109,7 @@ const saveAndCharge = () => {
post('charge/save', {data:formData.value}).then((res: any) => { post('charge/save', {data:formData.value}).then((res: any) => {
formData.value.code = res formData.value.code = res
nextTick(()=>{ nextTick(()=>{
settlementRef.value?.init(formData.value) settlementRef.value?.init(res)
}) })
}) })
} }
@ -141,13 +146,26 @@ const getDockerList = () => {
dockerList.value = res dockerList.value = res
}) })
} }
const orderCompleted = () => {
nextTick(()=>{
chargeQueueRef.value?.getOrderList()
})
}
const orderCanceled = () => {
nextTick(()=>{
chargeQueueRef.value?.getOrderList()
})
}
onMounted(()=>{ onMounted(()=>{
getDockerList() getDockerList()
}) })
const getOrderTotalPrice = () => { const getOrderTotalPrice = () => {
let totalPrice = 0 let totalPrice = 0
formData.value.itemDetail.forEach((item: any) => { formData.value.itemDetail.forEach((item: any) => {
totalPrice += item.unitPrice * item.number totalPrice += item.selectedPrice * item.selectedNum
}) })
formData.value.goodsDetail.forEach((item: any) => { formData.value.goodsDetail.forEach((item: any) => {
totalPrice += item.selectedPrice * item.selectedNum totalPrice += item.selectedPrice * item.selectedNum

View File

@ -56,7 +56,7 @@ const registerId = ref()
const patientId = ref() const patientId = ref()
const itemList = ref([]) const itemList = ref([])
const goodsList = ref([]) const goodsList = ref([])
const formData = ref<any>({}) const formData = ref<any>({diagType:1})
const save = () => { const save = () => {
let json = { let json = {
chinaAdjunctCheck: formData.value.chinaAdjunctCheck, chinaAdjunctCheck: formData.value.chinaAdjunctCheck,
@ -74,6 +74,7 @@ const save = () => {
exam: formData.value.exam, exam: formData.value.exam,
diagnosisDetail: formData.value.diagnosisDetail, diagnosisDetail: formData.value.diagnosisDetail,
diagnosisSummary: formData.value.diagnosisSummary, diagnosisSummary: formData.value.diagnosisSummary,
diagType:formData.value.diagType
} }
const data = { const data = {
registrationId: registerId.value, registrationId: registerId.value,
@ -138,7 +139,7 @@ const edit = () => {
// 使 watch goodsList itemList // 使 watch goodsList itemList
watch([() => goodsList.value, itemList], ([newGoodsList, newItemList]) => { watch([() => goodsList.value, itemList], ([newGoodsList, newItemList]) => {
const pharmaceuticalTotalAmount = newItemList.reduce((pre: any, cur: any) => { const pharmaceuticalTotalAmount = newItemList.reduce((pre: any, cur: any) => {
return pre + cur.unitPrice return pre + cur.unitPrice*cur.selectedNum
}, 0); }, 0);
const serviceTotalAmount = newGoodsList.reduce((pre: any, cur: any) => { const serviceTotalAmount = newGoodsList.reduce((pre: any, cur: any) => {
return pre + cur.selectedNum * cur.selectedPrice return pre + cur.selectedNum * cur.selectedPrice