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

This commit is contained in:
LiJianZhao 2025-05-19 13:50:12 +08:00
commit eb2454f5c4
15 changed files with 202 additions and 184 deletions

View File

@ -1,8 +1,8 @@
<template>
<Panel title="患者信息">
<div v-if="!seeDockerInfo?.patientInfo" style="display: flex;align-items: center;justify-content: center;height: 120px">请选择患者......</div>
<div v-if="!seeDockerInfo?.patientInfo"
style="display: flex;align-items: center;justify-content: center;height: 120px">请选择患者......
</div>
<div v-else style="padding: 0 24px">
<div class="avatar">
<img class="avatar-image"
@ -26,8 +26,11 @@
class="detail-doctor">{{ seeDockerInfo.dockerName }}-{{ seeDockerInfo?.sectionName }}</span>
</div>
<div class="detail-middle">
<div>费用类别:&nbsp;<span class="detail-doctor">{{seeDockerInfo.registerType==2?'医保':'自费'}}</span></div>
<div>医保卡剩余金额:&nbsp;<span class="detail-balance">{{ seeDockerInfo.patientInfo.socialBalance?seeDockerInfo.patientInfo.socialBalance+"元":"-" }}</span></div>
<div>费用类别:&nbsp;<span class="detail-doctor">{{ seeDockerInfo.registerType == 2 ? '医保' : '自费' }}</span>
</div>
<div>医保卡剩余金额:&nbsp;<span class="detail-balance">{{
seeDockerInfo.patientInfo.socialBalance ? seeDockerInfo.patientInfo.socialBalance + "元" : "-"
}}</span></div>
</div>
<div>上次就诊时间:&nbsp;<span class="detail-doctor">{{
formatDate(seeDockerInfo?.lastSeeDoctorTime) || '-'
@ -42,6 +45,7 @@ import {formatDate} from "@/utils/dateUtils.ts"
import Panel from "@/components/common/Panel.vue";
import {onMounted, ref} from "vue";
import {post} from "@/utils/request.ts";
const seeDockerInfo = ref<any>();
const getSeeDockerInfo = (newValue: any) => {
if (!newValue) return;
@ -71,7 +75,8 @@ defineExpose({ init,clear})
}
.avatar-info-wrapper {
width: 100%;
flex: 1;
min-width: 0;
height: 60px;
padding: 6px 0;
display: flex;
@ -84,14 +89,19 @@ defineExpose({ init,clear})
.avatar-info {
display: flex;
align-items: center;
span {
display: block;
}
.avatar-info-name {
flex: 1;
min-width: 0;
font-weight: 500;
font-size: 18px;
color: #333333;
font-style: normal;
margin-right: 10px;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的文本 */
text-overflow: ellipsis; /* 显示省略号 */
}
.avatar-info-age {
@ -103,23 +113,20 @@ defineExpose({ init,clear})
.avatar-info-phone-num {
width: 100%;
display: flex;
justify-content: space-between;
.avatar-info-num {
margin-left: 28px;
.avatar-info-phone {
flex: 1;
min-width: 0;
height: 20px;
line-height: 20px;
}
.avatar-info-num {
margin-left: 28px;
.caret-num {
color: #4D6DE4;
font-style: normal;
}
}
}
}
}

View File

@ -32,13 +32,7 @@ const imageUrl = ref<any>()
<div class="info-content">
<img class="image" :src="imageUrl? imageUrl:userMessage.logo" alt="app">
<div class="app_info-content-text">
<el-tooltip
effect="dark"
:content="userMessage.name"
placement="bottom-start"
>
<div class="app_info-title">{{ userMessage.name }}</div>
</el-tooltip>
<div>软件版本{{ userMessage.version }}</div>
<div style="margin: 10px 0">授权到期{{ formatDate(decryptedText.expiryDate) }}</div>
<div>版本类型{{ decryptedText.rule == 1 ? "禁用医保" : decryptedText.rule == 2 ? "全部开放" : "暂无" }}</div>

View File

@ -2,7 +2,7 @@
<Mask :width="1100" :height="600" :is-show="show" title="过期商品详情" @close="close" :show-footer="true">
<template #default>
<div style="height: 100%;padding: 24px">
<el-table :data="tableData" style="width: 100%" class="table">
<el-table border :data="tableData" style="width: 100%;height: 100%" class="table" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column label="名称" prop="name" show-overflow-tooltip></el-table-column>
<el-table-column label="剩余天数" show-overflow-tooltip>
<template #default="scope">
@ -33,10 +33,10 @@
<el-pagination
background
layout="prev, pager, next"
:page-count="pageNum"
:current-page="pageNum"
:page-size="pageSize"
:total="total"
@current-change="changePage"
@change="changePage"
/>
</div>
</template>
@ -66,6 +66,7 @@ const pageSize = ref(20);
const total = ref(0);
const changePage = (pageNum: any) => {
pageNum.value = pageNum
console.log(pageNum.value)
init()
}
</script>

View File

@ -2,7 +2,7 @@
<Mask :width="1100" :height="600" :is-show="show" title="库存预警详情" @close="close" :show-footer="true">
<template #default>
<div style="height: 100%;padding: 24px">
<el-table border :data="tableData" style="width: 100%;height: 100%" class="table">
<el-table border :data="tableData" style="width: 100%;height: 100%" class="table" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column label="名称" prop="name" show-overflow-tooltip></el-table-column>
<el-table-column label="剩余库存">
<template #default="scope">
@ -37,10 +37,10 @@
<el-pagination
background
layout="prev, pager, next"
:page-count="pageNum"
:current-page="pageNum"
:page-size="pageSize"
:total="total"
@current-change="changePage"
@change="changePage"
/>
</div>
</template>
@ -67,7 +67,7 @@ const close = () => {
tableData.value = []
};
const pageNum = ref(1);
const pageSize = ref(20);
const pageSize = ref(1);
const total = ref(0);
const changePage = (pageNum: any) => {
pageNum.value = pageNum

View File

@ -33,16 +33,11 @@ const isZeroInventory = (item: any) => {
</template>
<div style="padding: 0 24px 24px">
<div class="box">
<div class="item" style="margin-right: 8px" v-for="item in inventoryWarnList" :class="isZeroInventory(item) ? 'item__danger' : 'item__warn'">
<div class="item" style="margin-right: 8px" v-for="item in inventoryWarnList"
:class="isZeroInventory(item) ? 'item__danger' : 'item__warn'">
<div class="image"/>
<div class="item-content">
<el-tooltip
effect="dark"
:content="item.name"
placement="bottom-start"
>
<div class="item-name">{{ item.name }}</div>
</el-tooltip>
<div class="item-name-font">剩余库存值</div>
</div>
<div class="item-right">
@ -77,21 +72,25 @@ const isZeroInventory = (item: any) => {
background-image: url("/static/images/home/1-danger.png");
}
.item-right {
color: #FF282E;
}
}
.item__warn {
.image {
background-image: url("/static/images/home/1-warn.png");
}
.item-right {
color: #F69C51;
}
}
.item {
float: left;
width: 48%;

View File

@ -115,6 +115,13 @@ const reduceIntegral = () => {
align-items: center;
margin-bottom: 16px;
.right {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.name {
font-weight: bold;
font-size: 24px;
@ -122,14 +129,11 @@ const reduceIntegral = () => {
line-height: 33px;
text-align: left;
font-style: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.right {
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.text {
margin-top: 4px;
display: flex;

View File

@ -23,7 +23,8 @@
</div>
</div>
</div>
<el-table class="body_list" :data="tableData" style="width: 100%;height: 100%"
<div class="body_list">
<el-table :data="tableData" style="height: 100%"
:header-cell-style="{ backgroundColor: '#F1F5FB'}">
<el-table-column prop="createTime" label="创建时间" show-overflow-tooltip>
<template #default="scope">
@ -36,6 +37,7 @@
<el-table-column prop="remark" label="备注" show-overflow-tooltip/>
</el-table>
</div>
</div>
</template>
<template #footer>
<div class="bottom">
@ -104,7 +106,6 @@ defineExpose({init})
</script>
<style scoped lang="scss">
.content-flowing {
width: 100%;
padding-top: 24px;
height: 100%;
display: flex;
@ -118,6 +119,13 @@ defineExpose({init})
margin-bottom: 16px;
padding: 0 24px;
.right {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.name {
font-weight: bold;
font-size: 24px;
@ -125,14 +133,10 @@ defineExpose({init})
line-height: 33px;
text-align: left;
font-style: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.right {
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.text {
margin-top: 4px;
display: flex;
@ -159,8 +163,9 @@ defineExpose({init})
}
.body_list {
width: 100%;
flex: 1;
width: 100%;
min-height: 0;
background: #F9FAFC;
padding: 24px 24px 0;
}

View File

@ -105,6 +105,13 @@ const grant = async () => {
align-items: center;
margin-bottom: 16px;
.right {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.name {
font-weight: bold;
font-size: 24px;
@ -112,14 +119,11 @@ const grant = async () => {
line-height: 33px;
text-align: left;
font-style: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.right {
display: flex;
flex-direction: column;
justify-content: center;
margin-left: 16px;
.text {
margin-top: 4px;
display: flex;

View File

@ -17,6 +17,7 @@
v-model="ruleForm.exp"
placeholder="等级"
size="default"
:disabled="ruleForm.id"
style="width: 100%"
>
<el-option

View File

@ -43,6 +43,7 @@ const copyItem = (item: any) => {
emit('copyItem', item)
}
const copyGoods = (item: any) => {
console.log(item,'item')
emit('copyGoods', item)
}
defineExpose({init,clearList})

View File

@ -111,7 +111,7 @@
</el-descriptions-item>
<el-descriptions-item label="费用类型">
<el-form-item prop="type">
<el-select v-model="edit_data.type">
<el-select v-model="edit_data.type" :disabled="edit_data.status==0">
<el-option label="普通" :value="1"></el-option>
<el-option label="医保" :value="2"></el-option>
</el-select>

View File

@ -46,7 +46,7 @@
</el-descriptions-item>
<el-descriptions-item label="售价">
<el-form-item prop="unitPrice">
<el-input v-model.number="form.unitPrice">
<el-input v-model="form.unitPrice">
<template #prefix></template>
</el-input>
</el-form-item>
@ -190,7 +190,16 @@ const formRules = {
],
unitPrice: [
{required: true, message: '请输入售价', trigger: 'blur'},
{type: 'number', message: '单位必须为数字值'}
{
validator: (rule: any, value: number, callback: any) => {
if (!/^\d+(\.\d{1,2})?$/.test(value.toString())) {
callback(new Error('售价最多保留两位小数'));
} else {
callback();
}
},
trigger: 'blur'
}
]
}

View File

@ -19,13 +19,16 @@
<div class="total">{{ totalCount || 0 }}</div>
<ul class="content">
<el-scrollbar style="height: 100%">
<li v-for="(item,i) in list" :key="item.id" :class="index==i?'active':''" @click="btn(item,i)">
<li class="list-item" v-for="(item,i) in list" :key="item.id" :class="index==i?'active':''"
@click="btn(item,i)">
<span class="item-avatar">
<img class="image"
:src="'/static/images/member/' + (item.sex === 1 ? 'man' : 'women') + '.png'"
alt=""/>
<div class="name">{{ item.name || '-' }}</div>
<span class="level">{{ item.levelName || "-" }}</span>
<span class="time">{{ formatListTime(item.lastVisitTime) }}</span>
</span>
<span class="item-name">{{ item.name || '-' }}</span>
<span class="item-level">{{ item.levelName || "-" }}</span>
<span class="item-time">{{ formatListTime(item.lastVisitTime) }}</span>
</li>
</el-scrollbar>
</ul>
@ -42,7 +45,7 @@
alt="">
<div class="detail-top-left-text">
<div class="detail-top-left-text-name">
<span style="margin-right: 16px">{{ listItem.name || '-' }}</span>
<span class="name" style="margin-right: 16px">{{ listItem.name || '-' }}</span>
<el-tag type="success">{{ listItem.levelName || '-' }}</el-tag>
</div>
<div class="detail-top-left-text-phone">
@ -100,7 +103,7 @@
@cell-click="openDetail">
<el-table-column label="单号" prop="code" show-overflow-tooltip>
</el-table-column>
<el-table-column label="创建时间" prop="createDatetime">
<el-table-column label="创建时间" prop="createDatetime" show-overflow-tooltip>
<template #default="scope">
{{ formatDate(scope.row.createDatetime) }}
</template>
@ -110,17 +113,17 @@
<!-- {{ scope.row.preTotalPrice }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="实收" prop="totalPrice" width="80">
<el-table-column label="实收" prop="totalPrice" width="100" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.totalPrice }}
</template>
</el-table-column>
<el-table-column label="支付方式" width="100">
<el-table-column label="支付方式" width="100" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.payType ? getPayTypeStr(scope.row.payType) : "" }}
</template>
</el-table-column>
<el-table-column label="状态" width="100">
<el-table-column label="状态" width="100" show-overflow-tooltip>
<template #default="scope">
<el-tag v-if="scope.row.status==0 || scope.row.status==2 " type="info">
{{ getStatusStr(scope.row.status) }}
@ -129,7 +132,7 @@
<el-tag v-if="scope.row.status==3" type="danger">{{ getStatusStr(scope.row.status) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="支付时间" prop="payTime">
<el-table-column label="支付时间" prop="payTime" show-overflow-tooltip>
<template #default="scope">
{{ formatDate(scope.row.payTime) }}
</template>
@ -338,6 +341,7 @@ type StatusKey = 0 | 1 | 2 | 3;
type PayTypeKey = 1 | 2 | 3 | 4 | 5;
//
const formatDate = (isoStr: any) => {
if(!isoStr)return ''
const date = new Date(isoStr);
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
}
@ -449,56 +453,48 @@ const openFlowingWater=()=>{
border-radius: 8px;
border: 1px solid #EAEAEC;
li {
.list-item {
display: flex;
align-items: center;
height: 50px;
line-height: 50px;
padding: 0 24px;
color: #000000;
cursor: pointer;
&:first-child {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
span {
text-align: center;
height: 100%;
display: block;
}
&:last-child {
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
.item-avatar {
width: 20px;
height: 100%;
margin-right: 10px;
.image {
margin-top: 15px;
width: 20px;
height: 20px;
}
}
.item-name{
flex: 1;
min-width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
}
.item-level{
width: 50px;
}
.item-time{
width: 50px;
font-size: 12px;
color: #7a8794;
}
&:hover {
background: rgba(#4D6DE4, 0.5);
}
.image {
width: 20px;
height: 20px;
margin-right: 5px
}
.name {
flex: 2;
}
.level {
flex: 2;
margin-right: 20px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.time {
flex: 2;
font-size: 12px;
color: #7a8794;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.active {
@ -535,10 +531,11 @@ const openFlowingWater=()=>{
.detail-top {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
.detail-top-left {
flex: 1;
min-width: 0;
display: flex;
.image {
@ -548,15 +545,25 @@ const openFlowingWater=()=>{
}
.detail-top-left-text {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
margin-right: 24px;
.detail-top-left-text-name {
flex: 1;
min-width: 0;
font-weight: bold;
font-size: 24px;
color: #333333;
font-style: normal;
display: flex;
.name{
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的文本 */
text-overflow: ellipsis; /* 显示省略号 */
}
}
.detail-top-left-text-phone {
@ -566,34 +573,16 @@ const openFlowingWater=()=>{
color: rgba(34, 42, 57, 0.8);
.age {
margin: 0 10px;
margin-right: 10px;
}
}
}
}
.detail-top-right {
width: 552px;
display: flex;
height: 42px;
.btn {
flex: 1;
background: #FFFFFF;
border-radius: 6px;
border: 1px solid #4D6DE4;
padding: 10px 12px;
font-weight: 500;
font-size: 16px;
color: #4D6DE4;
font-style: normal;
margin-left: 24px;
cursor: pointer;
&:hover {
color: #FFFFFF;
background: #4D6DE4;
}
}
}
}

View File

@ -146,6 +146,7 @@ const changeTab = (e: any) => {
patientRegistration.value = {}
itemId.value = null
isShowFrom.value = false
curRegister.value.status = e
nextTick(() => {
medicalHistoryRef.value?.clearList();
})
@ -161,11 +162,14 @@ const getOrderTotalPrice = () => {
formData.value.itemDetail?.forEach((item: any) => {
totalPrice += item.selectedPrice * item.selectedNum
})
console.log(totalPrice, 'totalPrice')
formData.value.goodsDetail?.forEach((item: any) => {
totalPrice += item.selectedPrice * item.selectedNum
})
console.log(totalPrice, 'totalPrice')
formData.value.preTotalPrice = Math.round((totalPrice * 100) / 100)
formData.value.totalPrice = Math.round((totalPrice * 100) / 100)
formData.value.totalPrice = totalPrice
console.log(formData.value.totalPrice, 'formData.value.totalPrice')
}
const caseRef = ref<any>("")
const copyForm = (item: any) => {