Merge remote-tracking branch 'origin/main'
|
After Width: | Height: | Size: 755 B |
|
After Width: | Height: | Size: 974 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 945 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 660 B |
|
|
@ -18,7 +18,7 @@ $border-color-extra-light: #F2F6FC;
|
||||||
|
|
||||||
// 背景颜色
|
// 背景颜色
|
||||||
$background-color-base: #eee;
|
$background-color-base: #eee;
|
||||||
$background-color-main: #5078c8;
|
$background-color-main: #4D6DE4;
|
||||||
|
|
||||||
// 边框圆角
|
// 边框圆角
|
||||||
$border-radius-base: 4px;
|
$border-radius-base: 4px;
|
||||||
|
|
|
||||||
|
|
@ -90,3 +90,8 @@ body {
|
||||||
.clear-margin {
|
.clear-margin {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
.el-popper.is-light.type-popper, .el-popper.is-light>.el-popper__arrow:before{
|
||||||
|
background:#F5FAFF !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border: 1px solid #4D6DE4 !important;
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
|
|
||||||
<el-popover placement="bottom-start" :visible="isVisible" :width="props.width" ref="popoverRef"
|
<el-popover placement="bottom-start" :visible="isVisible" :width="props.width" ref="popoverRef"
|
||||||
:trigger-keys="[]">
|
:trigger-keys="[]" style="height: 500px" popper-class="type-popper">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-input
|
<el-input
|
||||||
ref="inputRef"
|
ref="inputRef"
|
||||||
|
|
@ -19,19 +19,40 @@
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<el-table
|
<el-scrollbar>
|
||||||
:data="searchList" style="width: 100%"
|
<table class="table" style="width: 100%; border-collapse: collapse;max-height: 50px">
|
||||||
@row-click="clickRow"
|
<!-- 表头 -->
|
||||||
:show-header="props.showHeader"
|
<thead>
|
||||||
max-height="200px"
|
<tr class="table-title">
|
||||||
>
|
<th
|
||||||
<el-table-column
|
|
||||||
v-for="item in showConfig"
|
v-for="item in showConfig"
|
||||||
:prop="item.prop"
|
:key="item.prop"
|
||||||
:label="item.label||'-'"
|
style="background-color: #f5f7fa; padding: 8px;"
|
||||||
show-overflow-tooltip
|
>
|
||||||
></el-table-column>
|
{{ item.label }}
|
||||||
</el-table>
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<!-- 表体 -->
|
||||||
|
<tbody>
|
||||||
|
<tr class="table-body"
|
||||||
|
v-for="(item, index) in searchList"
|
||||||
|
:key="index"
|
||||||
|
@click="clickRow(item)"
|
||||||
|
style="cursor: pointer; transition: background-color 0.2s;"
|
||||||
|
>
|
||||||
|
<td
|
||||||
|
v-for="showItem in showConfig"
|
||||||
|
:key="showItem.prop"
|
||||||
|
style="vertical-align: middle; padding: 8px;"
|
||||||
|
>
|
||||||
|
{{ item[showItem.prop] }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
|
|
||||||
|
|
@ -107,7 +128,7 @@ const beforeShow = () => {
|
||||||
const isVisible = ref(false)
|
const isVisible = ref(false)
|
||||||
const focus = () => {
|
const focus = () => {
|
||||||
isVisible.value = true
|
isVisible.value = true
|
||||||
console.log("focus输入框")
|
changeInput("")
|
||||||
emit('focus', true)
|
emit('focus', true)
|
||||||
}
|
}
|
||||||
const handlerBlur = () => {
|
const handlerBlur = () => {
|
||||||
|
|
@ -131,4 +152,57 @@ const handlerBlur = () => {
|
||||||
border: 1px solid #409eff !important;
|
border: 1px solid #409eff !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
th {
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-title {
|
||||||
|
height: 52px;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: 200px;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
padding-left: 24px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-body {
|
||||||
|
height: 52px;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666666;
|
||||||
|
font-style: normal;
|
||||||
|
td {
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: 200px;
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 30px !important;
|
||||||
|
white-space: nowrap; /* 防止文本换行 */
|
||||||
|
overflow: hidden; /* 隐藏溢出的文本 */
|
||||||
|
text-overflow: ellipsis; /* 显示省略号 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-radius: 0 0 8px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #4D6DE4;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -0,0 +1,152 @@
|
||||||
|
<template>
|
||||||
|
<Mask :height="600" :width="700" :is-show="show">
|
||||||
|
<CloseBtn @click="show = false"></CloseBtn>
|
||||||
|
<el-card>
|
||||||
|
<div class="panel">
|
||||||
|
<div class="header">
|
||||||
|
请勾选该追溯码关联的发药项目商品
|
||||||
|
</div>
|
||||||
|
<div class="code">
|
||||||
|
<div class="before-code">
|
||||||
|
{{ traceabilityCode.slice(0, 7) }}
|
||||||
|
</div>
|
||||||
|
<div class="after-code">
|
||||||
|
{{ traceabilityCode.slice(7, traceabilityCode.length) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="table">
|
||||||
|
<table class="simple-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>选择</th>
|
||||||
|
<th>发药项目</th>
|
||||||
|
<th>产品标识码</th>
|
||||||
|
<th>系统处理</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(item,index) in tableData">
|
||||||
|
<td><input class="blue-radio" type="radio" :value="item.id" v-model="selected"/></td>
|
||||||
|
<td>{{ item.name }}</td>
|
||||||
|
<td>
|
||||||
|
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode && item.idCode.length > 0"/>
|
||||||
|
<div v-else>未关联</div>
|
||||||
|
</td>
|
||||||
|
<td style="width: 300px;">
|
||||||
|
<template v-if="selected === item.id">
|
||||||
|
关联产品标识码,采集追溯码自动识别商品
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="addIdCode" type="primary">确定</el-button>
|
||||||
|
<el-button @click="show = false" type="primary">关闭</el-button>
|
||||||
|
</template>
|
||||||
|
</el-card>
|
||||||
|
</Mask>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
import Mask from "@/components/Mask.vue";
|
||||||
|
import {ref} from "vue"
|
||||||
|
import IdCodeListShow from "@/components/retail/IdCodeListShow.vue";
|
||||||
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
|
interface TableItem {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
idCode?: string[] | undefined; // 可选属性,默认为 undefined
|
||||||
|
gatherNumber?: number;
|
||||||
|
retailNumber?: number;
|
||||||
|
packagingUnit?: string;
|
||||||
|
minPackagingUnit?: string;
|
||||||
|
selectedUnit?: string;
|
||||||
|
minPackagingNumber?: number;
|
||||||
|
traceAbilityCodeList?: { code: string; number: number }[];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const show = ref(false);
|
||||||
|
const traceabilityCode = ref("");
|
||||||
|
const tableData = ref<TableItem[]>([]);
|
||||||
|
const init = (newIdCode: any, newTableDate: any) => {
|
||||||
|
traceabilityCode.value = newIdCode;
|
||||||
|
tableData.value = newTableDate;
|
||||||
|
show.value = true;
|
||||||
|
}
|
||||||
|
const selected = ref()
|
||||||
|
defineExpose({init})
|
||||||
|
const addIdCode = ()=>{
|
||||||
|
if (traceabilityCode.value ==""){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let idCode = traceabilityCode.value.slice(0, 7);
|
||||||
|
post("goods/goods/addIdCode",{goodsId:selected.value,idCode:idCode}).then((res:any)=>{
|
||||||
|
show.value = false;
|
||||||
|
for (let subItem of tableData.value){
|
||||||
|
if (subItem.id === selected.value){
|
||||||
|
subItem.idCode?.push(idCode);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const selectedItem = tableData.value.find((item: any) => item.id === selected.value);
|
||||||
|
if(!selectedItem){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
addTraceabilityCodeDo(selectedItem)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const emit = defineEmits(["addIdCode","addTraceabilityCode"])
|
||||||
|
const addTraceabilityCodeDo = (item: any) => {
|
||||||
|
emit("addTraceabilityCode",item,traceabilityCode.value)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.panel {
|
||||||
|
height: 400px;
|
||||||
|
.header {
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code {
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
font-size: 24px;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.before-code {
|
||||||
|
color: #7a8794;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.after-code {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
.simple-table {
|
||||||
|
.blue-radio {
|
||||||
|
accent-color: #28addd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -9,9 +9,9 @@ import {useWsStore} from "@/stores/wsStore.ts";
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
const wsStore = useWsStore();
|
||||||
const isReading = ref(false)
|
const isReading = ref(false)
|
||||||
const socialCard:any = defineModel();
|
const socialCard: any = defineModel();
|
||||||
const ReadSocialCard = async (readType: string) => {
|
const ReadSocialCard = async (readType: string) => {
|
||||||
socialCard.value.lastUse="cardPay"
|
socialCard.value.lastUse = "cardPay"
|
||||||
isReading.value = true;
|
isReading.value = true;
|
||||||
let config_db: any = await post('common/config/getall');
|
let config_db: any = await post('common/config/getall');
|
||||||
let config: any = {}
|
let config: any = {}
|
||||||
|
|
@ -35,7 +35,7 @@ const ReadSocialCard = async (readType: string) => {
|
||||||
wsStore.sendMessage(request);
|
wsStore.sendMessage(request);
|
||||||
};
|
};
|
||||||
const reciceMessage = (response: Response) => {
|
const reciceMessage = (response: Response) => {
|
||||||
if(socialCard.value.lastUse!="cardPay"){
|
if (socialCard.value.lastUse != "cardPay") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (response.Code == 301) {
|
if (response.Code == 301) {
|
||||||
|
|
@ -75,27 +75,29 @@ const getInfoFor1101 = (params: any) => {
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
wsStore.setMessageCallback(reciceMessage)
|
wsStore.setMessageCallback(reciceMessage)
|
||||||
});
|
});
|
||||||
onUnmounted(()=>{
|
onUnmounted(() => {
|
||||||
wsStore.removeAllMessageCallback()
|
wsStore.removeAllMessageCallback()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="card-pay">
|
<div class="card-pay">
|
||||||
<div class="left">医保<br/>信息</div>
|
<div class="title">
|
||||||
|
<div class="left">医保信息</div>
|
||||||
|
<el-button type="primary" @click="socialCard.data=null">退出</el-button>
|
||||||
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<div class="insuinfo" v-if="socialCard.data">
|
<div class="insuinfo" v-if="socialCard.data">
|
||||||
<div class="line">
|
<div class="line">
|
||||||
<div class="label">姓名</div>
|
<div class="label">姓名:</div>
|
||||||
<div class="info">{{ socialCard.data.baseinfo.psn_name }}</div>
|
<div class="info">{{ socialCard.data.baseinfo.psn_name }}</div>
|
||||||
<div class="btn" @click="socialCard.data=null">退出</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="line">
|
<div class="line">
|
||||||
<div class="label">险种</div>
|
<div class="label">险种:</div>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<el-select v-model="socialCard.payInfo.selfpay_prop_type" placeholder="请选择" style="width: 100%">
|
<el-select style="width: 340px" v-model="socialCard.payInfo.selfpay_prop_type" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="(item,index) in socialCard.data.insuinfo"
|
v-for="(item) in socialCard.data.insuinfo"
|
||||||
:key="item.insutype"
|
:key="item.insutype"
|
||||||
:label="'账户余额'+getKey(insutypes, item.insutype)+'('+item.balc.toFixed(2)+')'"
|
:label="'账户余额'+getKey(insutypes, item.insutype)+'('+item.balc.toFixed(2)+')'"
|
||||||
:value="item.insutype"
|
:value="item.insutype"
|
||||||
|
|
@ -104,48 +106,48 @@ onUnmounted(()=>{
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-empty" v-else>
|
<div class="card-empty" v-else>
|
||||||
<div class="tip" v-loading="isReading">暂无医保信息</div>
|
<div class="tip" v-loading="isReading">暂无医保信息</div>
|
||||||
<div class="btn-wrapper"> <div class="btn" @click="ReadSocialCard('03')" tabindex="-1">医保卡</div>
|
<div class="btn-wrapper">
|
||||||
|
<div class="btn" @click="ReadSocialCard('03')" tabindex="-1">医保卡</div>
|
||||||
<div class="btn" @click="ReadSocialCard('01')" tabindex="-1">电子码</div>
|
<div class="btn" @click="ReadSocialCard('01')" tabindex="-1">电子码</div>
|
||||||
<div class="btn" @click="ReadSocialCard('02')" tabindex="-1">身份证</div>
|
<div class="btn" @click="ReadSocialCard('02')" tabindex="-1">身份证</div>
|
||||||
<div class="btn" @click="ReadSocialCard('04')" tabindex="-1">人脸识别</div></div>
|
<div class="btn" @click="ReadSocialCard('04')" tabindex="-1">人脸识别</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.card-pay {
|
.card-pay {
|
||||||
position: relative;
|
width: 436px;
|
||||||
|
background: #f9fafc;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.title{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
width: 100px;
|
font-weight: 800;
|
||||||
height: 100px;
|
font-size: 18px;
|
||||||
background: #DDD;
|
color: #333333;
|
||||||
text-align: center;
|
font-style: normal;
|
||||||
line-height: 30px;
|
|
||||||
font-size: 24px;
|
|
||||||
color: #666;
|
|
||||||
padding: 20px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
border-radius: 10px 0 0 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
position: relative;
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: #EEE;
|
display: flex;
|
||||||
box-sizing: border-box;
|
font-weight: 500;
|
||||||
padding: 10px;
|
font-size: 16px;
|
||||||
border-radius: 0 10px 10px 0;
|
color: #999999;
|
||||||
.line{
|
font-style: normal;
|
||||||
|
.line {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
|
@ -153,37 +155,56 @@ onUnmounted(()=>{
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
.label{
|
.label {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 40px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
.info{
|
|
||||||
|
.info {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.card-empty{
|
|
||||||
|
.card-empty {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
.tip{
|
|
||||||
|
.tip {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
}
|
}
|
||||||
.btn-wrapper{
|
|
||||||
position: relative;
|
.btn-wrapper {
|
||||||
height: 30px;
|
height: 38px;
|
||||||
display: flex;
|
display: flex;
|
||||||
.btn{
|
justify-content: space-between;
|
||||||
flex: 1;
|
|
||||||
margin-left: 5px;
|
.btn {
|
||||||
margin-right: 5px;
|
width: 91px;
|
||||||
|
height: 38px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #4d6de4;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #4d6de4;
|
||||||
|
font-style: normal;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 38px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #4d6de4;
|
||||||
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.btn{
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
|
@ -193,4 +214,56 @@ onUnmounted(()=>{
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pay-right {
|
||||||
|
width: 436px;
|
||||||
|
background: #f9fafc;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #999999;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-btns {
|
||||||
|
height: 38px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
&-btn {
|
||||||
|
width: 91px;
|
||||||
|
height: 38px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #4d6de4;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #4d6de4;
|
||||||
|
font-style: normal;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 38px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #4d6de4;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -70,7 +70,7 @@ import {CaretBottom} from "@element-plus/icons-vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
|
||||||
const curItem = ref<any>({});
|
const curItem = ref<any>({});
|
||||||
const emit = defineEmits(['clickItem'])
|
const emit = defineEmits(['clickItem','getStatus'])
|
||||||
const clickItem = (item: any) => {
|
const clickItem = (item: any) => {
|
||||||
curItem.value = item
|
curItem.value = item
|
||||||
emit('clickItem', item, query.value.status);
|
emit('clickItem', item, query.value.status);
|
||||||
|
|
@ -141,6 +141,8 @@ const statusList = ref([
|
||||||
])
|
])
|
||||||
const tab = (item: any) => {
|
const tab = (item: any) => {
|
||||||
query.value.status = item.value
|
query.value.status = item.value
|
||||||
|
curItem.value={}
|
||||||
|
emit('getStatus', item.value)
|
||||||
init()
|
init()
|
||||||
}
|
}
|
||||||
const getTipCount = () => {
|
const getTipCount = () => {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,180 @@
|
||||||
|
<template>
|
||||||
|
<Mask :top="50" :height="650" :width="900" :is-show="show">
|
||||||
|
<CloseBtn @click="show = false"></CloseBtn>
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
<div class="header">追溯码采集</div>
|
||||||
|
</template>
|
||||||
|
<div class="detail">
|
||||||
|
<el-input placeholder="请输入追溯码" v-model="inputIdCode" clearable @keydown.enter="openAssociationIdCode()">
|
||||||
|
<template #prefix>
|
||||||
|
<el-icon>
|
||||||
|
<Monitor/>
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
<div class="list">
|
||||||
|
<table class="simple-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>发药项目</th>
|
||||||
|
<th>产品标识码</th>
|
||||||
|
<th>发药数量</th>
|
||||||
|
<th>已采/应采</th>
|
||||||
|
<th>追溯码</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(item,index) in list" :key="index">
|
||||||
|
<td>{{ item.name }}</td>
|
||||||
|
<td>
|
||||||
|
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode&&item.idCode.length>0"
|
||||||
|
@addTraceabilityCode="addTraceAbilityCodeHandler"/>
|
||||||
|
<div v-else>未关联</div>
|
||||||
|
</td>
|
||||||
|
<td>{{ item.selectedNum }}{{ item.selectedUnit }}</td>
|
||||||
|
<td>{{ item.traceAbilityCodeList ? item.traceAbilityCodeList.length : 0 }}/{{ item.shouldNumber }}</td>
|
||||||
|
<td>
|
||||||
|
<TraceabilityCodeAdd :item="item" @addTraceabilityCode="addTraceAbilityCodeHandler"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="bottom-btn">
|
||||||
|
<el-button @click="saveRetail()" type="primary">确定</el-button>
|
||||||
|
<el-button @click="show = false">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-card>
|
||||||
|
<AssociationIdCode
|
||||||
|
ref="associationIdCodeRef"
|
||||||
|
@addIdCode="cleanInputIdCode"
|
||||||
|
@addTraceabilityCode="addTraceAbilityCodeHandler"></AssociationIdCode>
|
||||||
|
</Mask>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Mask from "@/components/Mask.vue";
|
||||||
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
|
import {nextTick, ref} from "vue";
|
||||||
|
import IdCodeListShow from "@/components/charge/IdCodeListShow.vue";
|
||||||
|
import AssociationIdCode from "@/components/charge/AssociationIdCode.vue";
|
||||||
|
import TraceabilityCodeAdd from "@/components/charge/TraceabilityCodeAdd.vue";
|
||||||
|
import {ElMessage, ElMessageBox} from "element-plus";
|
||||||
|
import {Monitor} from '@element-plus/icons-vue'
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
|
||||||
|
|
||||||
|
const show = ref(false)
|
||||||
|
const list = ref()
|
||||||
|
const orderInfo = ref()
|
||||||
|
const init = (data: any) => {
|
||||||
|
list.value = data
|
||||||
|
console.log(list)
|
||||||
|
show.value = true
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
show.value = false
|
||||||
|
}
|
||||||
|
defineExpose({init, close})
|
||||||
|
const emit = defineEmits(['confirm'])
|
||||||
|
const saveRetail = () => {
|
||||||
|
if (!checkTraceCode()) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
`追溯码采集未完成是否继续?`,
|
||||||
|
'Warning',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}).then(() => {
|
||||||
|
emit('confirm')
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
emit('confirm')
|
||||||
|
}
|
||||||
|
const checkTraceCode = () => {
|
||||||
|
for (let i = 0; i < list.value.length; i++) {
|
||||||
|
const item = list.value[i];
|
||||||
|
if (!item.traceAbilityCodeList || item.shouldNumber !== item.traceAbilityCodeList.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
const inputIdCode = ref()
|
||||||
|
const associationIdCodeRef = ref()
|
||||||
|
const openAssociationIdCode = () => {
|
||||||
|
if (addTraceAbilityCode()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nextTick(() => {
|
||||||
|
associationIdCodeRef.value.init(inputIdCode.value, list.value)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const addTraceAbilityCode = () => {
|
||||||
|
for (let i = 0; i < list.value.length; i++) {
|
||||||
|
let item = list.value[i];
|
||||||
|
let idCode = inputIdCode.value.slice(0, 7);
|
||||||
|
if (!item.idCode) break
|
||||||
|
if (item.idCode.includes(idCode)) {
|
||||||
|
addTraceabilityCodeDo(item, inputIdCode.value);
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const addTraceabilityCodeDo = (item: any, inputStr: any) => {
|
||||||
|
if (!item.traceAbilityCodeList) {
|
||||||
|
item.traceAbilityCodeList = []
|
||||||
|
}
|
||||||
|
let traceAbilityCodeListList = item.traceAbilityCodeList.length
|
||||||
|
|
||||||
|
if (traceAbilityCodeListList == item.shouldNumber) {
|
||||||
|
ElMessage({
|
||||||
|
message: '采集数量已满',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const index = item.traceAbilityCodeList.findIndex((codeObj: any) => codeObj.code === inputStr);
|
||||||
|
if (index != -1) {
|
||||||
|
ElMessage({
|
||||||
|
message: '该追溯码已采集',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
item.traceAbilityCodeList.push(inputStr)
|
||||||
|
cleanInputIdCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const cleanInputIdCode = () => {
|
||||||
|
inputIdCode.value = ''
|
||||||
|
}
|
||||||
|
const addTraceAbilityCodeHandler = (item: any, code: any) => {
|
||||||
|
addTraceabilityCodeDo(item, code)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.header {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail {
|
||||||
|
.list {
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const props = defineProps({
|
||||||
|
idCodeList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-popover
|
||||||
|
title="已关联的追溯码产品标识码:"
|
||||||
|
placement="bottom-start"
|
||||||
|
trigger="hover"
|
||||||
|
width="250px"
|
||||||
|
>
|
||||||
|
<template #reference>
|
||||||
|
<div class="id-code-panel">
|
||||||
|
<div class="code" v-if="props.idCodeList.length >0">{{props.idCodeList[0]}}</div>
|
||||||
|
<div class="number" v-if="props.idCodeList.length >1">
|
||||||
|
+{{props.idCodeList.length-1}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<div class="id-code-detail">
|
||||||
|
<div class="item" v-for="(item,index) in props.idCodeList" :key="index">
|
||||||
|
{{index+1}}.{{item}}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.id-code-panel{
|
||||||
|
display: flex;
|
||||||
|
.number{
|
||||||
|
margin-left: 10px;
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<div class="avatar-info-wrapper">
|
<div class="avatar-info-wrapper">
|
||||||
<div class="avatar-info">
|
<div class="avatar-info">
|
||||||
<span class="avatar-info-name">{{ seeDockerInfo?.patientInfo?.name }}</span>
|
<span class="avatar-info-name">{{ seeDockerInfo?.patientInfo?.name }}</span>
|
||||||
<span class="avatar-info-age">{{ seeDockerInfo?.patientInfo?.age}}</span>
|
<span class="avatar-info-age">{{ seeDockerInfo?.patientInfo?.age||0}}岁</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="avatar-info-phone-num">
|
<div class="avatar-info-phone-num">
|
||||||
<span class="avatar-info-phone">{{ seeDockerInfo?.patientInfo?.phone }}</span>
|
<span class="avatar-info-phone">{{ seeDockerInfo?.patientInfo?.phone }}</span>
|
||||||
|
|
@ -26,11 +26,11 @@
|
||||||
class="detail-doctor">{{ seeDockerInfo?.dockerName }}-{{ seeDockerInfo?.sectionName }}</span>
|
class="detail-doctor">{{ seeDockerInfo?.dockerName }}-{{ seeDockerInfo?.sectionName }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-middle">
|
<div class="detail-middle">
|
||||||
<div>费用类别: <span class="detail-doctor">医保</span></div>
|
<div>费用类别: <span class="detail-doctor">{{seeDockerInfo?.feeTypeName||'-'}}</span></div>
|
||||||
<div>医保卡剩余金额: <span class="detail-balance">{{ seeDockerInfo?.socialBalance }}元</span></div>
|
<div>医保卡剩余金额: <span class="detail-balance">{{ seeDockerInfo?.socialBalance }}元</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div>上次就诊时间: <span class="detail-doctor">{{
|
<div>上次就诊时间: <span class="detail-doctor">{{
|
||||||
formatDate(seeDockerInfo?.lastSeeDoctorTime)
|
formatDate(seeDockerInfo?.lastSeeDoctorTime)||'-'
|
||||||
}}</span></div>
|
}}</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,9 @@
|
||||||
<el-collapse-item :name="index" v-for="(item, index) in list" :key="index">
|
<el-collapse-item :name="index" v-for="(item, index) in list" :key="index">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="list-item-content">
|
<div class="list-item-content">
|
||||||
<el-tooltip
|
|
||||||
class="box-item"
|
|
||||||
effect="dark"
|
|
||||||
:content="item.diagnosisMedicalRecord?.diagnosisSummary"
|
|
||||||
placement="bottom-start"
|
|
||||||
>
|
|
||||||
<span class="disease-name">{{ item.diagnosisMedicalRecord?.diagnosisSummary }}</span>
|
<span class="disease-name">{{ item.diagnosisMedicalRecord?.diagnosisSummary }}</span>
|
||||||
</el-tooltip>
|
<span class="doctor">{{ item.doctorName }}</span>
|
||||||
<!-- <span class="doctor">{{ item.patientId }}</span>-->
|
<span class="time">{{ formatListTime(item.createTime) }}</span>
|
||||||
<!-- <span class="time">{{ item.createDatetime }}</span>-->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -32,9 +25,9 @@ import Panel from '@/components/common/Panel.vue';
|
||||||
import Detail from './RecordsLog/Detail.vue';
|
import Detail from './RecordsLog/Detail.vue';
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
|
import {formatListTime} from "@/utils/dateUtils.ts";
|
||||||
|
|
||||||
const list = ref<any>([])
|
const list = ref<any>([])
|
||||||
|
|
||||||
|
|
||||||
const init = (patientId: any) => {
|
const init = (patientId: any) => {
|
||||||
const query = {
|
const query = {
|
||||||
patientId: patientId,
|
patientId: patientId,
|
||||||
|
|
@ -42,6 +35,7 @@ const init = (patientId: any) => {
|
||||||
}
|
}
|
||||||
post('charge/listDetail', {query}).then((res: any) => {
|
post('charge/listDetail', {query}).then((res: any) => {
|
||||||
list.value = res.list
|
list.value = res.list
|
||||||
|
console.log(list,'list')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const clearList = () => {
|
const clearList = () => {
|
||||||
|
|
@ -61,14 +55,19 @@ defineExpose({init,clearList})
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.disease-name {
|
.disease-name {
|
||||||
width: 135px;
|
width: 90px;
|
||||||
overflow: hidden; /* 隐藏溢出的内容 */
|
overflow: hidden; /* 隐藏溢出的内容 */
|
||||||
white-space: nowrap; /* 防止文本换行 */
|
white-space: nowrap; /* 防止文本换行 */
|
||||||
text-overflow: ellipsis; /* 显示省略号 */
|
text-overflow: ellipsis; /* 显示省略号 */
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.doctor {
|
.doctor {
|
||||||
width: 85px;
|
width: 80px;
|
||||||
|
}
|
||||||
|
.time{
|
||||||
|
display: inline-block;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,10 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="content-middle">
|
<div class="content-middle">
|
||||||
<div class="item">
|
<div class="item" style="margin-top: 8px">
|
||||||
<div class="name">合计</div>
|
<div class="name">合计</div>
|
||||||
<div class="price">
|
<div class="price">
|
||||||
<div class="price-right">¥{{ sumPrice }}</div>
|
<div class="price-right sumPrice">¥{{ sumPrice }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -143,6 +143,12 @@ onMounted(() => {
|
||||||
.price-left {
|
.price-left {
|
||||||
margin-right: 38px;
|
margin-right: 38px;
|
||||||
}
|
}
|
||||||
|
.sumPrice{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #FF0000;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,50 @@
|
||||||
<template>
|
<template>
|
||||||
<Mask :width="800" :height="438" :is-show="show">
|
<Mask :width="696" :height="409" title="收费" :is-show="show" @close="show = false" :show-footer="true">
|
||||||
<!-- <el-card>-->
|
<template #default>
|
||||||
<!-- <template #header>-->
|
<div class="content">
|
||||||
<div class="header">
|
<div class="btns">
|
||||||
<span>收费</span>
|
<div
|
||||||
<CloseBtn @click="show = false" style="margin-top: 12px"></CloseBtn>
|
class="btn"
|
||||||
|
:style="{
|
||||||
|
backgroundColor:
|
||||||
|
selectedIndex == index
|
||||||
|
? item.activeBackgroundColor
|
||||||
|
: hoverIndex == index
|
||||||
|
? item.activeBackgroundColor
|
||||||
|
: item.backgrountColor,
|
||||||
|
}"
|
||||||
|
v-for="(item, index) in btnsList"
|
||||||
|
:key="index"
|
||||||
|
@click="changePriceType(item.type,index)"
|
||||||
|
@mouseover="hoverIndex = index"
|
||||||
|
@mouseleave="hoverIndex = null"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="img"
|
||||||
|
:src="selectedIndex == index || hoverIndex == index ? item.imgActive : item.img"
|
||||||
|
alt=""
|
||||||
|
srcset=""
|
||||||
|
/>
|
||||||
|
<span class="pay-left-text" :style="{color: selectedIndex==index?'#fff':''}">{{ item.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- </template>-->
|
</div>
|
||||||
<div class="panel">
|
<div class="pay">
|
||||||
<div class="price">¥{{ retailOrder.totalPrice }}</div>
|
<div class="pay-left">
|
||||||
<div class="social" >
|
<span class="pay-left-title">应收金额</span>
|
||||||
|
<span class="pay-left-money">¥{{ retailOrder.totalPrice }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="social">
|
||||||
<CardPay v-model="socialCard"/>
|
<CardPay v-model="socialCard"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="price-type">
|
|
||||||
<div
|
|
||||||
class="price-type-item"
|
|
||||||
:class="['btn',payType==item.type?'active':'']"
|
|
||||||
v-for="(item,index) in priceBtnList"
|
|
||||||
@click="changePriceType(item.type)"
|
|
||||||
>
|
|
||||||
<div class="image" :style="{'background-color':item.color}">
|
|
||||||
<img style="width: 16px;height: 16px;" :src="item.img" alt=""/>
|
|
||||||
</div>
|
|
||||||
<span>{{item.name}}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
<!-- <template #footer>-->
|
<template #footer>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
|
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
|
||||||
<el-button @click="completeSettlement()" type="primary">完成收费</el-button>
|
<el-button @click="completeSettlement()" type="primary">完成收费</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- </template>-->
|
</template>
|
||||||
<!-- </el-card>-->
|
|
||||||
</Mask>
|
</Mask>
|
||||||
<PersonalPayment ref="psnPaymentRef" @orderCompleted="orderCompleted" @orderCancel="orderCanceled"></PersonalPayment>
|
<PersonalPayment ref="psnPaymentRef" @orderCompleted="orderCompleted" @orderCancel="orderCanceled"></PersonalPayment>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -42,45 +54,46 @@
|
||||||
import {nextTick, onMounted, onUnmounted, ref} from "vue";
|
import {nextTick, onMounted, onUnmounted, ref} from "vue";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import Mask from "@/components/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import CardPay from "@/components/charge/CardPay.vue";
|
import CardPay from "@/components/charge/CardPay.vue";
|
||||||
import {medTypeJson, priceBtnList} from "@/assets/config/constants.ts"
|
import {medTypeJson, priceBtnList} from "@/assets/config/constants.ts"
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
import {useWsStore} from "@/stores/wsStore.ts";
|
||||||
import PersonalPayment from "@/components/charge/PersonalPayment.vue";
|
import PersonalPayment from "@/components/charge/PersonalPayment.vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
const wsStore = useWsStore();
|
||||||
const socialCard =defineModel<any>();
|
const socialCard = defineModel<any>();
|
||||||
|
|
||||||
const show = ref(false)
|
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 = (code: any) => {
|
const init = (code: any) => {
|
||||||
post ('charge/getByCode',{code:code}).then((res:any)=>{
|
post('charge/getByCode', {code: code}).then((res: any) => {
|
||||||
retailOrder.value = res;
|
retailOrder.value = res;
|
||||||
show.value = true;
|
show.value = true;
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
defineExpose({init})
|
defineExpose({init})
|
||||||
const changePriceType = (type: any) => {
|
const changePriceType = (type: any, index: any) => {
|
||||||
payType.value = type;
|
payType.value = type;
|
||||||
|
selectedIndex.value = index
|
||||||
}
|
}
|
||||||
const emit = defineEmits(['orderComplete','orderCanceled'])
|
const emit = defineEmits(['orderComplete', 'orderCanceled'])
|
||||||
const completeSettlement = ()=>{
|
const completeSettlement = () => {
|
||||||
if (!retailOrder.value){
|
if (!retailOrder.value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (payType.value == null){
|
if (payType.value == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if(payType.value == 1){
|
if (payType.value == 1) {
|
||||||
//医保结算
|
//医保结算
|
||||||
console.log('医保结算',socialCard.value)
|
|
||||||
socialSettlement();
|
socialSettlement();
|
||||||
}else {
|
} else {
|
||||||
//其他结算
|
//其他结算
|
||||||
post('charge/completeOrder',{id:retailOrder.value.id,payType:payType.value}).then((res:any)=>{
|
post('charge/completeOrder', {id: retailOrder.value.id, payType: payType.value}).then((res: any) => {
|
||||||
orderCompleted()
|
orderCompleted()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -88,18 +101,18 @@ const completeSettlement = ()=>{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const orderCompleted = ()=>{
|
const orderCompleted = () => {
|
||||||
show.value = false;
|
show.value = false;
|
||||||
ElMessage.success("保存成功")
|
ElMessage.success("保存成功")
|
||||||
emit('orderComplete',printReceipt.value)
|
emit('orderComplete', printReceipt.value)
|
||||||
}
|
}
|
||||||
const orderCanceled = ()=>{
|
const orderCanceled = () => {
|
||||||
show.value = false;
|
show.value = false;
|
||||||
emit('orderCanceled')
|
emit('orderCanceled')
|
||||||
}
|
}
|
||||||
|
|
||||||
const getBalcByInsutype = (type:any) =>{
|
const getBalcByInsutype = (type: any) => {
|
||||||
let balc =0;
|
let balc = 0;
|
||||||
for (const item of socialCard.value.data.insuinfo) {
|
for (const item of socialCard.value.data.insuinfo) {
|
||||||
if (item.insutype == type) {
|
if (item.insutype == type) {
|
||||||
balc = item.balc;
|
balc = item.balc;
|
||||||
|
|
@ -109,50 +122,94 @@ const getBalcByInsutype = (type:any) =>{
|
||||||
return balc
|
return balc
|
||||||
}
|
}
|
||||||
|
|
||||||
const socialSettlement = ()=>{
|
const socialSettlement = () => {
|
||||||
const params = {
|
const params = {
|
||||||
mdtrtCertType: socialCard.value.mdtrtCertType,
|
mdtrtCertType: socialCard.value.mdtrtCertType,
|
||||||
mdtrtCertNo: socialCard.value.mdtrtCertNo,
|
mdtrtCertNo: socialCard.value.mdtrtCertNo,
|
||||||
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
||||||
changeOrderCode:retailOrder.value.code,
|
changeOrderCode: retailOrder.value.code,
|
||||||
}
|
}
|
||||||
post("charge/uploadCostDetails",{changeOrderCode:retailOrder.value.code}).then((res:any)=>{
|
post("charge/uploadCostDetails", {changeOrderCode: retailOrder.value.code}).then((res: any) => {
|
||||||
//预结算
|
//预结算
|
||||||
post("charge/socialPrePay",{...params}).then((res:any)=>{
|
post("charge/socialPrePay", {...params}).then((res: any) => {
|
||||||
openPsnPayment(res,params)
|
openPsnPayment(res, params)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
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);
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
const selectedIndex = ref<number | null>(null)
|
||||||
|
const hoverIndex = ref<number | null>(null)
|
||||||
|
const isShow = ref<boolean>(false)
|
||||||
|
const btnsList = [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: '医保支付',
|
||||||
|
backgrountColor: '#F0F4FD ',
|
||||||
|
activeBackgroundColor: '#4d6de4',
|
||||||
|
img: '/static/images/slices/1.png',
|
||||||
|
imgActive: '/static/images/slices/1-active.png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 2,
|
||||||
|
name: '微信支付',
|
||||||
|
backgrountColor: '#ecf8fe',
|
||||||
|
activeBackgroundColor: '#80cfdb',
|
||||||
|
img: '/static/images/slices/2.png',
|
||||||
|
imgActive: '/static/images/slices/2-active.png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: '支付宝',
|
||||||
|
backgrountColor: '#fff5ec',
|
||||||
|
activeBackgroundColor: '#fdb376',
|
||||||
|
img: '/static/images/slices/3.png',
|
||||||
|
imgActive: '/static/images/slices/3-active.png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: '现金支付',
|
||||||
|
backgrountColor: '#ffeeee',
|
||||||
|
activeBackgroundColor: '#ff8686',
|
||||||
|
img: '/static/images/slices/4.png',
|
||||||
|
imgActive: '/static/images/slices/4-active.png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 5,
|
||||||
|
name: '其他支付',
|
||||||
|
backgrountColor: '#e5f9ff',
|
||||||
|
activeBackgroundColor: '#30e3ca',
|
||||||
|
img: '/static/images/slices/5.png',
|
||||||
|
imgActive: '/static/images/slices/5-active.png',
|
||||||
|
},
|
||||||
|
]
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.panel {
|
.panel {
|
||||||
.price{
|
.price {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 25px;
|
font-size: 25px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: rgba(237, 120, 23, 0.8);
|
color: rgba(237, 120, 23, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-type {
|
.price-type {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 95px;
|
width: 95px;
|
||||||
|
|
@ -165,7 +222,8 @@ const openPsnPayment = (payInfo:any,orderInfo:any)=>{
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
.image{
|
|
||||||
|
.image {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
|
|
@ -184,14 +242,133 @@ const openPsnPayment = (payInfo:any,orderInfo:any)=>{
|
||||||
}
|
}
|
||||||
|
|
||||||
.active {
|
.active {
|
||||||
color: #fff;
|
color: #fff !important;
|
||||||
background-color: #409EFF;
|
background-color: #409EFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.footer{
|
|
||||||
|
.content {
|
||||||
|
flex: 1;
|
||||||
|
padding: 0 24px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.btns {
|
||||||
|
height: 86px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 120px;
|
||||||
|
height: 46px;
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.pay-left {
|
||||||
|
padding-top: 24px;
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
display: block;
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
margin-bottom: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-money {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 42px;
|
||||||
|
color: #ff0000;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-right {
|
||||||
|
width: 436px;
|
||||||
|
background: #f9fafc;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #999999;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-btns {
|
||||||
|
height: 38px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
&-btn {
|
||||||
|
width: 91px;
|
||||||
|
height: 38px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #4d6de4;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #4d6de4;
|
||||||
|
font-style: normal;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 38px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #4d6de4;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0 24px;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -2,17 +2,18 @@
|
||||||
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']);
|
const emit = defineEmits(['save','deleteItem','edit','openCheckOut']);
|
||||||
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>
|
||||||
|
|
@ -20,8 +21,8 @@ const editItem= () => {
|
||||||
<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 == 0">
|
||||||
<el-button type="primary" disabled>追溯码</el-button>
|
<el-button type="primary" @click="openCheckOut()">追溯码</el-button>
|
||||||
<el-button type="primary" @click="editItem">收费</el-button>
|
<el-button type="primary" @click="save">收费</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
<template>
|
||||||
|
<el-popover
|
||||||
|
title="追溯码:"
|
||||||
|
placement="bottom-start"
|
||||||
|
trigger="click"
|
||||||
|
width="300px"
|
||||||
|
>
|
||||||
|
<template #reference>
|
||||||
|
<el-input
|
||||||
|
placeholder="追溯码"
|
||||||
|
clearable
|
||||||
|
v-model="inputTraceabilityCode"
|
||||||
|
style="width: 300px;"
|
||||||
|
@keydown.enter="addTraceabilityCodeDo(props.item)"
|
||||||
|
></el-input>
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<div v-for="(subItem,index) in item.traceAbilityCodeList" class="list">
|
||||||
|
<div class="code"> {{ subItem }}</div>
|
||||||
|
<div class="remove" @click="removeTraceAbility(subItem)">
|
||||||
|
<el-icon>
|
||||||
|
<CloseBold/>
|
||||||
|
</el-icon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {ref,watch} from "vue";
|
||||||
|
import {ElMessage, ElMessageBox} from "element-plus";
|
||||||
|
import {CloseBold} from "@element-plus/icons-vue";
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
interface TraceAbilityCode {
|
||||||
|
code: string;
|
||||||
|
number: number;
|
||||||
|
showNumberInput?: boolean;
|
||||||
|
}
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object as () => {
|
||||||
|
id?: number|undefined;
|
||||||
|
traceAbilityCodeList: TraceAbilityCode[];
|
||||||
|
retailNumber: number;
|
||||||
|
gatherNumber: number;
|
||||||
|
selectedUnit: string;
|
||||||
|
idCode: string[];
|
||||||
|
packagingUnit: string;
|
||||||
|
minPackagingUnit: string;
|
||||||
|
minPackagingNumber: number;
|
||||||
|
},
|
||||||
|
default: () => ({
|
||||||
|
traceAbilityCodeList: [],
|
||||||
|
retailNumber: 0,
|
||||||
|
gatherNumber: 0,
|
||||||
|
selectedUnit: "",
|
||||||
|
idCode:[],
|
||||||
|
packagingUnit: "",
|
||||||
|
minPackagingUnit: "",
|
||||||
|
minPackagingNumber: 0,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const inputTraceabilityCode = ref("");
|
||||||
|
const emit = defineEmits(["addTraceabilityCode"]);
|
||||||
|
const addTraceabilityCodeDo = (item: any) => {
|
||||||
|
emit("addTraceabilityCode",item,inputTraceabilityCode.value)
|
||||||
|
inputTraceabilityCode.value = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
const removeTraceAbility = (code: any) => {
|
||||||
|
const index = props.item.traceAbilityCodeList.findIndex(
|
||||||
|
(codeObj: any) => codeObj === code
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
props.item.traceAbilityCodeList.splice(index, 1); // 删除对应项
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.list {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.code {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.number {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.remove {
|
||||||
|
font-size: 16px;
|
||||||
|
width: 50px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -75,6 +75,7 @@ console.log(calendarData);
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="calendar-wrapper">
|
<div class="calendar-wrapper">
|
||||||
|
<span class="current">{{ currentYear }}年{{ currentMonth + 1 }}月</span>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<span class="tip">日</span>
|
<span class="tip">日</span>
|
||||||
|
|
@ -97,15 +98,13 @@ console.log(calendarData);
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<span class="tip">六</span>
|
<span class="tip">六</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div v-for="item in calendarData" class="row">
|
<div v-for="item in calendarData" class="row">
|
||||||
<div class="item" v-for="subItem in item">
|
<div class="item" v-for="subItem in item">
|
||||||
<span :class="subItem.isCurrentDay ? 'currentDay' : subItem.isCurrentMonth ? '' : 'otherMonth'">
|
<span :class="subItem.isCurrentDay ? 'currentDay' : subItem.isCurrentMonth ? '' : 'otherMonth'">
|
||||||
{{ subItem.day }}
|
{{ subItem.isCurrentDay ? "今" : subItem.day }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -114,31 +113,51 @@ console.log(calendarData);
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.calendar-wrapper {
|
.calendar-wrapper {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 320px;
|
height: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 20px;
|
padding:0 20px 20px;
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
|
border-radius: 0 0 8px 8px;
|
||||||
.row {
|
display: flex;
|
||||||
width: 100%;
|
flex-direction: column;
|
||||||
height: 45px;
|
.current{
|
||||||
|
font-weight: 500;
|
||||||
.item {
|
font-size: 18px;
|
||||||
|
color: #333333;
|
||||||
float: left;
|
font-style: normal;
|
||||||
width: 14.2%;
|
margin-bottom: 8px;
|
||||||
height: 45px;
|
}
|
||||||
|
.row {
|
||||||
span {
|
flex: 1;
|
||||||
display: block;
|
width: 100%;
|
||||||
margin: auto;
|
background: #F9FAFC ;
|
||||||
width: 30px;
|
padding: 0 20px;
|
||||||
height: 30px;
|
display: flex;
|
||||||
text-align: center;
|
justify-content: space-between;
|
||||||
line-height: 30px;
|
align-items: center;
|
||||||
border-radius: 15px;
|
font-weight: 500;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #999999;
|
||||||
|
font-style: normal;
|
||||||
|
.item {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
span {
|
||||||
|
margin: auto;
|
||||||
|
height: 34px;
|
||||||
|
width: 34px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #666666;
|
||||||
|
font-style: normal;
|
||||||
|
border-radius:17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.currentDay {
|
.currentDay {
|
||||||
background: #1677FE;
|
background: #1677FE;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<header>
|
<header>
|
||||||
<div class="center-wrapper">
|
<div class="center-wrapper">
|
||||||
|
<div class="logo">
|
||||||
|
<img style="width: 62px;height: 46px;" src="/favicon.ico" alt=""/>
|
||||||
|
<span>药慧精灵</span>
|
||||||
|
</div>
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
<router-link to="/home" class="menu-item" active-class="active active1">首页</router-link>
|
<router-link to="/home" class="menu-item" active-class="active active1">首页</router-link>
|
||||||
<router-link to="/registration" class="menu-item" active-class="active active2">挂号</router-link>
|
<router-link to="/registration" class="menu-item" active-class="active active2">挂号</router-link>
|
||||||
|
|
@ -11,25 +15,28 @@
|
||||||
<router-link to="/social" class="menu-item" active-class="active active7">医保</router-link>
|
<router-link to="/social" class="menu-item" active-class="active active7">医保</router-link>
|
||||||
<router-link to="/statistics" class="menu-item" active-class="active active8">统计</router-link>
|
<router-link to="/statistics" class="menu-item" active-class="active active8">统计</router-link>
|
||||||
<router-link to="/settings" class="menu-item" active-class="active active9">设置</router-link>
|
<router-link to="/settings" class="menu-item" active-class="active active9">设置</router-link>
|
||||||
|
</div>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<span class="username">{{username}}</span>
|
<span class="username">{{ username }}</span>
|
||||||
<el-button class="hover" :icon="Right" style="color: #fff" @click="logout" text>退出登录</el-button>
|
<el-button class="hover" :icon="Right" style="color: #fff" @click="logout" text>退出登录</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
</header>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@use "@/assets/scss/base";
|
@use "@/assets/scss/base";
|
||||||
|
.center-wrapper{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.menu {
|
.menu {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 50px;
|
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
|
|
@ -142,7 +149,6 @@ header {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
|
|
||||||
background-color: base.$background-color-main;
|
background-color: base.$background-color-main;
|
||||||
padding: 15px 0;
|
padding: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
@ -153,19 +159,37 @@ header {
|
||||||
float: right;
|
float: right;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center; // 垂直居中
|
align-items: center; // 垂直居中
|
||||||
.username{
|
.username {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
}
|
}
|
||||||
.hover{
|
|
||||||
|
.hover {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
&:hover{
|
|
||||||
|
&:hover {
|
||||||
color: #4d6de4 !important;
|
color: #4d6de4 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.logo{
|
||||||
|
margin-left: 30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 28px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 1630px) {
|
||||||
|
.logo span {
|
||||||
|
display: none; // 隐藏文字
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {useRouter} from 'vue-router'
|
import {useRouter} from 'vue-router'
|
||||||
|
|
@ -173,7 +197,7 @@ import {type Action, ElMessage, ElMessageBox} from 'element-plus'
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {post} from "@/utils/request";
|
import {post} from "@/utils/request";
|
||||||
import {Right} from "@element-plus/icons-vue";
|
import {Right} from "@element-plus/icons-vue";
|
||||||
import {onMounted,ref} from "vue";
|
import {onMounted, ref} from "vue";
|
||||||
|
|
||||||
|
|
||||||
let logout = function () {
|
let logout = function () {
|
||||||
|
|
@ -200,13 +224,13 @@ let logout = function () {
|
||||||
useRouter().push("/")
|
useRouter().push("/")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
getInfo()
|
getInfo()
|
||||||
})
|
})
|
||||||
const username=ref<any>('')
|
const username = ref<any>('')
|
||||||
const getInfo=()=>{
|
const getInfo = () => {
|
||||||
post(apiConfig.managerUserVerify).then((res: any) => {
|
post(apiConfig.managerUserVerify).then((res: any) => {
|
||||||
username.value=res.username
|
username.value = res.username
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
<template #reference>
|
<template #reference>
|
||||||
{{ scope.row.name }}
|
{{ scope.row.name }}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<div style="display: flex;justify-content: space-between">
|
<div style="display: flex;justify-content: space-between">
|
||||||
<div style="font-size: 18px;font-weight: 500;color: #000">{{
|
<div style="font-size: 18px;font-weight: 500;color: #000">{{
|
||||||
|
|
@ -48,7 +47,7 @@
|
||||||
<el-table-column prop="number" label="数量">
|
<el-table-column prop="number" label="数量">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div v-if="props.status">
|
<div v-if="props.status">
|
||||||
<el-input-number v-model="scope.row.selectedNum" :min="0" @change="handleNumChange"
|
<el-input-number v-model="scope.row.selectedNum" :min="0" @change="handleNumChange(scope.row)"
|
||||||
size="small"></el-input-number>
|
size="small"></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>
|
||||||
|
|
@ -79,7 +78,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="bottom">
|
<div class="bottom" v-if="!statusDisabled">
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<SearchInput
|
<SearchInput
|
||||||
style="height: 100%"
|
style="height: 100%"
|
||||||
|
|
@ -89,6 +88,7 @@
|
||||||
@selectedCallBack="goodsSelect"
|
@selectedCallBack="goodsSelect"
|
||||||
:disabled="!props.status"
|
:disabled="!props.status"
|
||||||
@focus="focus"
|
@focus="focus"
|
||||||
|
:width="1000"
|
||||||
></SearchInput>
|
></SearchInput>
|
||||||
</div>
|
</div>
|
||||||
<span v-if="status">合计:¥{{ getTotalPrice() }}</span>
|
<span v-if="status">合计:¥{{ getTotalPrice() }}</span>
|
||||||
|
|
@ -106,6 +106,10 @@ const props = defineProps({
|
||||||
status: {
|
status: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: 0
|
default: 0
|
||||||
|
},
|
||||||
|
statusDisabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const goodsDetail = defineModel<any>();
|
const goodsDetail = defineModel<any>();
|
||||||
|
|
@ -152,6 +156,10 @@ 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
|
||||||
|
row.shouldNumber = 1;
|
||||||
|
row.idCode = row.idCode.split(",")
|
||||||
|
|
||||||
|
|
||||||
if (goodsDetail.value.find((i: any) => i.id == row.id)) {
|
if (goodsDetail.value.find((i: any) => i.id == row.id)) {
|
||||||
ElMessage.warning("数据已存在,只能加数量")
|
ElMessage.warning("数据已存在,只能加数量")
|
||||||
goodsDetail.value.find((i: any) => i.id == row.id).selectedNum += 1
|
goodsDetail.value.find((i: any) => i.id == row.id).selectedNum += 1
|
||||||
|
|
@ -174,7 +182,16 @@ const selectUnit = (item: any, unit: any) => {
|
||||||
|
|
||||||
}
|
}
|
||||||
const emit = defineEmits(["totalPriceChange", 'focus'])
|
const emit = defineEmits(["totalPriceChange", 'focus'])
|
||||||
const handleNumChange = () => {
|
const handleNumChange = (row:any) => {
|
||||||
|
//应采数量
|
||||||
|
let shouldNumber = 0;
|
||||||
|
if (row.selectedUnit == row.packagingUnit) {
|
||||||
|
shouldNumber = row.selectedNum
|
||||||
|
} else {
|
||||||
|
shouldNumber = Math.ceil(row.selectedNum / row.minPackagingNumber)
|
||||||
|
}
|
||||||
|
row.shouldNumber = shouldNumber
|
||||||
|
|
||||||
emit('totalPriceChange')
|
emit('totalPriceChange')
|
||||||
}
|
}
|
||||||
const getTotalPrice = () => {
|
const getTotalPrice = () => {
|
||||||
|
|
@ -213,6 +230,7 @@ const colosInfo = () => {
|
||||||
display: flex;
|
display: flex;
|
||||||
height: 58px;
|
height: 58px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.search {
|
.search {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<Panel title="服务项目">
|
<Panel title="服务项目">
|
||||||
<el-table v-if="itemDetail.length>0" :data="itemDetail" max-height="150">
|
<el-table v-if="itemDetail.length>0" :data="itemDetail">
|
||||||
<el-table-column prop="itemName" label="项目名称" show-overflow-tooltip width="200">
|
<el-table-column prop="itemName" label="项目名称" show-overflow-tooltip width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-popover
|
<el-popover
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="bottom">
|
<div class="bottom" v-if="!statusDisabled">
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<SearchInput
|
<SearchInput
|
||||||
style="height: 100%"
|
style="height: 100%"
|
||||||
|
|
@ -77,6 +77,10 @@ const props = defineProps({
|
||||||
status: {
|
status: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: 0
|
default: 0
|
||||||
|
},
|
||||||
|
statusDisabled:{
|
||||||
|
type: Boolean,
|
||||||
|
default: 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const itemDetail = defineModel<any>();
|
const itemDetail = defineModel<any>();
|
||||||
|
|
@ -112,6 +116,7 @@ const emit = defineEmits(['totalPriceChange', 'focus'])
|
||||||
const serviceSelect = (row: any) => {
|
const serviceSelect = (row: any) => {
|
||||||
row.selectedNum = 1
|
row.selectedNum = 1
|
||||||
row.selectedUnit = row.unit
|
row.selectedUnit = row.unit
|
||||||
|
|
||||||
row.selectedPrice = row.unitPrice
|
row.selectedPrice = row.unitPrice
|
||||||
if (itemDetail.value.find((i: any) => i.id == row.id)) {
|
if (itemDetail.value.find((i: any) => i.id == row.id)) {
|
||||||
ElMessage.warning("数据已存在,只能加数量")
|
ElMessage.warning("数据已存在,只能加数量")
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@
|
||||||
<PopoverInput :disabled="props.disabled" v-model="formDate.nowMedicalHistory" :list="nowMedicalHistoryList"/>
|
<PopoverInput :disabled="props.disabled" v-model="formDate.nowMedicalHistory" :list="nowMedicalHistoryList"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="既往史:" v-if="!props.isShowFrom">
|
<el-form-item label="既往史:" v-if="!props.isShowFrom">
|
||||||
<PopoverInput :disabled="props.disabled" v-model="formDate.beforeMedicalHistory" :list="beforeMedicalHistoryList"/>
|
<PopoverInput :disabled="props.disabled" v-model="formDate.beforeMedicalHistory"
|
||||||
|
:list="beforeMedicalHistoryList"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="过敏史:" v-if="!props.isShowFrom">
|
<el-form-item label="过敏史:" v-if="!props.isShowFrom">
|
||||||
<PopoverInput :disabled="props.disabled" v-model="formDate.allergyHistory" :list="allergyHistoryList"/>
|
<PopoverInput :disabled="props.disabled" v-model="formDate.allergyHistory" :list="allergyHistoryList"/>
|
||||||
|
|
@ -50,7 +51,8 @@
|
||||||
<el-input :disabled="props.disabled" v-model="formDate.mouthCheck"></el-input>
|
<el-input :disabled="props.disabled" v-model="formDate.mouthCheck"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="辅助检查:" v-if="(modelType==2 || modelType ==0)&&!props.isShowFrom">
|
<el-form-item label="辅助检查:" v-if="(modelType==2 || modelType ==0)&&!props.isShowFrom">
|
||||||
<el-input style="height: 100%;width: 100%" :disabled="props.disabled" v-model="formDate.adjunctCheck"></el-input>
|
<el-input style="height: 100%;width: 100%" :disabled="props.disabled"
|
||||||
|
v-model="formDate.adjunctCheck"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="处置:" v-if="(modelType==0 || modelType ==2)&&!props.isShowFrom">
|
<el-form-item label="处置:" v-if="(modelType==0 || modelType ==2)&&!props.isShowFrom">
|
||||||
<el-input style="height: 100%;width: 100%" :disabled="props.disabled" v-model="formDate.deal"></el-input>
|
<el-input style="height: 100%;width: 100%" :disabled="props.disabled" v-model="formDate.deal"></el-input>
|
||||||
|
|
@ -61,7 +63,7 @@
|
||||||
</Panel>
|
</Panel>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {computed, nextTick, ref,defineEmits} from "vue";
|
import {computed, nextTick, ref, defineEmits} from "vue";
|
||||||
import {
|
import {
|
||||||
mainAppealList,
|
mainAppealList,
|
||||||
nowMedicalHistoryList,
|
nowMedicalHistoryList,
|
||||||
|
|
@ -79,7 +81,7 @@ const props = defineProps({
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: 0
|
default: 0
|
||||||
},
|
},
|
||||||
isShowFrom:{
|
isShowFrom: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
|
|
@ -108,49 +110,53 @@ const diagnosisSelect = (list: any) => {
|
||||||
formDate.value.diagnosisDetail = JSON.stringify(list)
|
formDate.value.diagnosisDetail = JSON.stringify(list)
|
||||||
formDate.value.diagnosisSummary = diagnosisNames
|
formDate.value.diagnosisSummary = diagnosisNames
|
||||||
}
|
}
|
||||||
const diagnosisSearchRef= ref()
|
const diagnosisSearchRef = ref()
|
||||||
const initDiagnosisSearch = (list:any,nList:any)=>{
|
const initDiagnosisSearch = (list: any, nList: any) => {
|
||||||
nextTick(()=>{
|
nextTick(() => {
|
||||||
diagnosisSearchRef.value?.init(list,nList);
|
diagnosisSearchRef.value?.init(list, nList);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const emit = defineEmits(['focus'])
|
const emit = defineEmits(['focus'])
|
||||||
const focus = (e:any)=>{
|
const focus = (e: any) => {
|
||||||
emit('focus',e)
|
emit('focus', e)
|
||||||
}
|
}
|
||||||
const clearDiagnosis = ()=>{
|
const clearDiagnosis = () => {
|
||||||
diagnosisSearchRef.value?.clear()
|
diagnosisSearchRef.value?.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({initDiagnosisSearch,clearDiagnosis})
|
defineExpose({initDiagnosisSearch, clearDiagnosis})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.model-selector {
|
.model-selector {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
margin:0 24px;
|
margin: 0 24px;
|
||||||
}
|
}
|
||||||
:deep(.el-form-item){
|
|
||||||
|
:deep(.el-form-item) {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
:deep(.el-form-item__label){
|
|
||||||
|
:deep(.el-form-item__label) {
|
||||||
height: 42px;
|
height: 42px;
|
||||||
line-height: 42px;
|
line-height: 42px;
|
||||||
}
|
}
|
||||||
:deep(.el-input__wrapper){
|
|
||||||
|
:deep(.el-input__wrapper) {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
height: 42px;
|
height: 42px;
|
||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
&:nth-child(2n){
|
border: 1px solid #EAEAEC;
|
||||||
border-top: none;
|
box-shadow: 0 0 0 0 var(--el-input-border-color, var(--el-border-color)) inset;
|
||||||
border-bottom: none;
|
}
|
||||||
}
|
:deep(.is-disabled .el-input__wrapper){
|
||||||
|
box-shadow: 0 0 0 0 var(--el-input-border-color, var(--el-border-color)) inset;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -25,7 +25,7 @@ import Panel from '@/components/common/Panel.vue';
|
||||||
import DiseaseDetails from './DiseaseDetails.vue';
|
import DiseaseDetails from './DiseaseDetails.vue';
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {formatListTime} from "../../utils/dateUtils.ts";
|
import {formatListTime} from "@/utils/dateUtils.ts";
|
||||||
const list = ref<any>([])
|
const list = ref<any>([])
|
||||||
const init = (patientId: any) => {
|
const init = (patientId: any) => {
|
||||||
post("medical/record/listByPatient",{patientId:patientId}).then((res: any) => {
|
post("medical/record/listByPatient",{patientId:patientId}).then((res: any) => {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<div class="panel-content" style="display: flex;flex-direction: column;height: 100%">
|
<div class="panel-content" style="display: flex;flex-direction: column;height: 100%">
|
||||||
<div class="tabs">
|
<div class="tabs">
|
||||||
<span v-for="(item,index) in statusList" :class="curStatus == item.status ? 'tabs-item' : ''"
|
<span v-for="(item,index) in statusList" :class="curStatus == item.status ? 'tabs-item' : ''"
|
||||||
@click="clickTab(item)">{{ item.label }} {{ item.num }}</span>
|
@click="clickTab(item)">{{ item.label }} ({{ item.num }})</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<img src="/static/images/outpatient/search.png" class="search-icon" alt="搜索图标">
|
<img src="/static/images/outpatient/search.png" class="search-icon" alt="搜索图标">
|
||||||
|
|
|
||||||
|
|
@ -108,75 +108,10 @@ const addIdCode = ()=>{
|
||||||
addTraceabilityCode(selectedItem)
|
addTraceabilityCode(selectedItem)
|
||||||
|
|
||||||
}
|
}
|
||||||
const getGatherNumber=(item:any)=>{
|
|
||||||
let gatherNumber = 0;
|
const emit = defineEmits(["addIdCode","addTraceabilityCode"])
|
||||||
for (let subItem of item.traceAbilityCodeList){
|
|
||||||
gatherNumber+=subItem.number;
|
|
||||||
}
|
|
||||||
item.gatherNumber = gatherNumber;
|
|
||||||
}
|
|
||||||
const emit = defineEmits(["addIdCode"])
|
|
||||||
const addTraceabilityCode = (item: any) => {
|
const addTraceabilityCode = (item: any) => {
|
||||||
if (!item.traceAbilityCodeList) {
|
emit("addTraceabilityCode",traceabilityCode)
|
||||||
item.traceAbilityCodeList = []
|
|
||||||
}
|
|
||||||
if (item.retailNumber == item.gatherNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '采集数量已满',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const index = item.traceAbilityCodeList.findIndex((codeObj: any) => codeObj.code === traceabilityCode.value);
|
|
||||||
if (index == -1 && item.selectedUnit == item.packagingUnit){
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: traceabilityCode.value,
|
|
||||||
number: 1
|
|
||||||
})
|
|
||||||
traceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
emit("addIdCode")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (index == -1&& item.selectedUnit == item.minPackagingUnit){
|
|
||||||
let needCodeCount = item.retailNumber - item.gatherNumber;
|
|
||||||
let number = 1;
|
|
||||||
if (needCodeCount >= item.minPackagingNumber){
|
|
||||||
number = item.minPackagingNumber;
|
|
||||||
}
|
|
||||||
if (needCodeCount < item.minPackagingNumber){
|
|
||||||
number = needCodeCount;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: traceabilityCode.value,
|
|
||||||
number: number
|
|
||||||
})
|
|
||||||
traceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
emit("addIdCode")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(item.selectedUnit == item.packagingUnit){
|
|
||||||
//没拆零 追溯码只能用一次
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}else {
|
|
||||||
//拆零每一个追溯码最多使用minPackagingNumber次
|
|
||||||
if (item.traceAbilityCodeList[index].number == item.minPackagingNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList[index].number += 1;
|
|
||||||
}
|
|
||||||
traceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
emit("addIdCode")
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,9 @@ export const formatListTime = (date: any) => {
|
||||||
} else if (typeof date === 'string') {
|
} else if (typeof date === 'string') {
|
||||||
dateDetail = new Date(date);
|
dateDetail = new Date(date);
|
||||||
if (isNaN(dateDetail.getTime())) {
|
if (isNaN(dateDetail.getTime())) {
|
||||||
console.error(`Invalid date string: ${date}`);
|
|
||||||
return '-';
|
return '-';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.error(`Invalid date type: ${typeof date}`);
|
|
||||||
return '-';
|
return '-';
|
||||||
}
|
}
|
||||||
const year = dateDetail.getFullYear();
|
const year = dateDetail.getFullYear();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template xmlns="http://www.w3.org/1999/html">
|
<template xmlns="http://www.w3.org/1999/html">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<chargeQueue @clickItem="clickItem" ref="chargeQueueRef"></ChargeQueue>
|
<chargeQueue @clickItem="clickItem" @getStatus="getStatus" ref="chargeQueueRef"></ChargeQueue>
|
||||||
</div>
|
</div>
|
||||||
<div class="middle">
|
<div class="middle">
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
@selectedCallBack="diagnosisSelect"
|
@selectedCallBack="diagnosisSelect"
|
||||||
ref="diagnosisSearchRef"
|
ref="diagnosisSearchRef"
|
||||||
:show-header="false"
|
:show-header="false"
|
||||||
:disabled="statusDisabled==1"
|
:disabled="statusDisabled==1||formData.status==1"
|
||||||
|
|
||||||
>
|
>
|
||||||
</DiagnosisSearchInput>
|
</DiagnosisSearchInput>
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
@change="handleChange"
|
@change="handleChange"
|
||||||
clearable
|
clearable
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
:disabled="statusDisabled==1||formData.status==1"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in doctorList"
|
v-for="item in doctorList"
|
||||||
|
|
@ -46,14 +47,14 @@
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-top: 24px">
|
<div style="margin-top: 24px">
|
||||||
<ServiceDetail v-model="formData.itemDetail" :status="formData.status == 0"
|
<ServiceDetail v-model="formData.itemDetail" :status="formData.status == 0"
|
||||||
@totalPriceChange="getOrderTotalPrice"></ServiceDetail>
|
@totalPriceChange="getOrderTotalPrice" :statusDisabled="statusDisabled==1"></ServiceDetail>
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-top: 24px">
|
<div style="margin-top: 24px">
|
||||||
<GoodsDetail v-model="formData.goodsDetail" :status="formData.status == 0"
|
<GoodsDetail v-model="formData.goodsDetail" :status="formData.status == 0"
|
||||||
@totalPriceChange="getOrderTotalPrice"></GoodsDetail>
|
@totalPriceChange="getOrderTotalPrice" :statusDisabled="statusDisabled==1"></GoodsDetail>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<TotalPrice v-model="formData.totalPrice" @edit="saveAndCharge" :status="formData.status"></TotalPrice>
|
<TotalPrice v-model="formData.totalPrice" @save="charge" :status="formData.status" @openCheckOut ="openCheckoutDetail(formData.goodsDetail)"></TotalPrice>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -66,6 +67,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<CheckoutDetail ref="checkoutDetailRef" @confirm ="saveAndCharge"></CheckoutDetail>
|
||||||
<Settlement
|
<Settlement
|
||||||
ref="settlementRef"
|
ref="settlementRef"
|
||||||
v-model="socialCard"
|
v-model="socialCard"
|
||||||
|
|
@ -86,11 +88,11 @@ import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.v
|
||||||
import Settlement from "@/components/charge/Settlement.vue";
|
import Settlement from "@/components/charge/Settlement.vue";
|
||||||
import TotalPrice from "@/components/charge/TotalPrice.vue";
|
import TotalPrice from "@/components/charge/TotalPrice.vue";
|
||||||
import psnCertTypes from "@/assets/config/directory/psnCertTypes.json"
|
import psnCertTypes from "@/assets/config/directory/psnCertTypes.json"
|
||||||
import {getKey} from "@/utils/discrotyUtil.ts";
|
|
||||||
import antys from "@/assets/config/directory/antys.json"
|
|
||||||
import RecordsLog from "@/components/charge/RecordsLog.vue";
|
import RecordsLog from "@/components/charge/RecordsLog.vue";
|
||||||
import PatientCard from "@/components/charge/PatientCard.vue";
|
import PatientCard from "@/components/charge/PatientCard.vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
import CheckoutDetail from "@/components/charge/CheckoutDetail.vue";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
const socialCard = ref<any>({payInfo: {}})
|
const socialCard = ref<any>({payInfo: {}})
|
||||||
const formData = ref<any>({
|
const formData = ref<any>({
|
||||||
|
|
@ -98,6 +100,7 @@ const formData = ref<any>({
|
||||||
diagnosisMedicalRecord: {},
|
diagnosisMedicalRecord: {},
|
||||||
goodsDetail: [],
|
goodsDetail: [],
|
||||||
itemDetail: [],
|
itemDetail: [],
|
||||||
|
patientRegistration: {}
|
||||||
})
|
})
|
||||||
const statusDisabled = ref(0)
|
const statusDisabled = ref(0)
|
||||||
const diagnosisKeyword = ref("")
|
const diagnosisKeyword = ref("")
|
||||||
|
|
@ -108,6 +111,116 @@ const delDraft = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const settlementRef = ref()
|
const settlementRef = ref()
|
||||||
|
const charge = () => {
|
||||||
|
|
||||||
|
if (checkTraceCode(formData.value.goodsDetail)) {
|
||||||
|
//保存订单
|
||||||
|
saveAndCharge()
|
||||||
|
} else {
|
||||||
|
//打开追溯码详情页
|
||||||
|
openCheckoutDetail(formData.value.goodsDetail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const checkTraceCode = (goodsList: any[]) => {
|
||||||
|
|
||||||
|
for (let i = 0; i < goodsList.length; i++) {
|
||||||
|
const item = goodsList[i];
|
||||||
|
if (!item.traceAbilityCodeList || item.shouldNumber != item.traceAbilityCodeList.length) {
|
||||||
|
ElMessage({
|
||||||
|
message: `${item.name}的追溯码采集未完成`,
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
const checkoutDetailRef = ref()
|
||||||
|
const openCheckoutDetail = (goodsList: any[]) => {
|
||||||
|
if (!goodsList || goodsList.length == 0) {
|
||||||
|
ElMessage({
|
||||||
|
message: '没有商品信息,请先选择需要售卖的商品',
|
||||||
|
type: 'info',
|
||||||
|
plain: true,
|
||||||
|
});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nextTick(() => {
|
||||||
|
checkoutDetailRef.value.init(goodsList);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveAndCharge = () => {
|
||||||
|
post('charge/save', {data: {...formData.value, doctorId: doctorId.value}}).then((res: any) => {
|
||||||
|
formData.value.code = res
|
||||||
|
nextTick(() => {
|
||||||
|
settlementRef.value?.init(res)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const diagnosisSearchRef = ref()
|
||||||
|
const diagnosisSearchApi = "social/diagnose/search"
|
||||||
|
const diagnosisShowConfig = [
|
||||||
|
{
|
||||||
|
label: "诊断名称",
|
||||||
|
prop: "name",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "诊断编码",
|
||||||
|
prop: "code",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const diagnosisSelect = (list: any) => {
|
||||||
|
const diagnosisNames = list.map((item: any) => item.name).join(',')
|
||||||
|
formData.value.diagnosisMedicalRecord.diagnosisDetail = JSON.stringify(list)
|
||||||
|
formData.value.diagnosisMedicalRecord.diagnosisSummary = diagnosisNames
|
||||||
|
}
|
||||||
|
const recordsConsumptionRef = ref<any>("")
|
||||||
|
const patientCardRef = ref()
|
||||||
|
const clickItem = async (item: any, status: any) => {
|
||||||
|
statusDisabled.value = status
|
||||||
|
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
|
||||||
|
//添加追溯码应采字段
|
||||||
|
for (let i =0;i<formData.value.goodsDetail.length;i++){
|
||||||
|
let goodsItem =formData.value.goodsDetail[i]
|
||||||
|
if (goodsItem.packagingUnit == goodsItem.selectedUnit){
|
||||||
|
goodsItem.shouldNumber = goodsItem.selectedNum;
|
||||||
|
}else {
|
||||||
|
goodsItem.shouldNumber = Math.ceil(goodsItem.selectedNum / goodsItem.minPackagingNumber);
|
||||||
|
}
|
||||||
|
goodsItem.idCode = goodsItem.idCode?.split(",")
|
||||||
|
}
|
||||||
|
|
||||||
|
getOrderTotalPrice()
|
||||||
|
nextTick(() => {
|
||||||
|
let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail)
|
||||||
|
let nList = formData.value.diagnosisMedicalRecord.diagnosisSummary.split(',')
|
||||||
|
diagnosisSearchRef.value?.init(list, nList);
|
||||||
|
recordsConsumptionRef.value?.init(formData.value.patientInfo.id);
|
||||||
|
patientCardRef.value?.init(formData.value.registrationId);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const dockerList = ref<any[]>([])
|
||||||
|
const getDockerList = () => {
|
||||||
|
let query = {
|
||||||
|
role: 1
|
||||||
|
}
|
||||||
|
post('organization/member/search', {query: query}).then((res: any) => {
|
||||||
|
dockerList.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const orderCompleted = () => {
|
||||||
|
nextTick(() => {
|
||||||
|
chargeQueueRef.value?.getOrderList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const orderCanceled = () => {
|
||||||
|
nextTick(() => {
|
||||||
|
chargeQueueRef.value?.getOrderList()
|
||||||
|
})
|
||||||
const saveAndCharge = () => {
|
const saveAndCharge = () => {
|
||||||
post('charge/save', {data: {...formData.value, doctorId: doctorId.value}}).then((res: any) => {
|
post('charge/save', {data: {...formData.value, doctorId: doctorId.value}}).then((res: any) => {
|
||||||
formData.value.code = res
|
formData.value.code = res
|
||||||
|
|
@ -138,6 +251,7 @@ const patientCardRef = ref()
|
||||||
const clickItem = async (item: any, status: any) => {
|
const clickItem = async (item: any, status: any) => {
|
||||||
statusDisabled.value = status
|
statusDisabled.value = status
|
||||||
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
|
formData.value = await post('medical/record/getByDiagnosisCode', {diagnosisCode: item.code})
|
||||||
|
formData.value.doctorId = formData.value.patientRegistration.organizationDoctorId
|
||||||
getOrderTotalPrice()
|
getOrderTotalPrice()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail)
|
let list = JSON.parse(formData.value.diagnosisMedicalRecord.diagnosisDetail)
|
||||||
|
|
@ -157,6 +271,8 @@ const getDockerList = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const orderCompleted = () => {
|
const orderCompleted = () => {
|
||||||
|
getDockerList()
|
||||||
|
list()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
chargeQueueRef.value?.getOrderList()
|
chargeQueueRef.value?.getOrderList()
|
||||||
})
|
})
|
||||||
|
|
@ -166,42 +282,53 @@ const orderCanceled = () => {
|
||||||
chargeQueueRef.value?.getOrderList()
|
chargeQueueRef.value?.getOrderList()
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getDockerList()
|
getDockerList()
|
||||||
list()
|
list()
|
||||||
})
|
})
|
||||||
const getOrderTotalPrice = () => {
|
const getOrderTotalPrice = () => {
|
||||||
let totalPrice = 0
|
let totalPrice = 0
|
||||||
formData.value.itemDetail?.forEach((item: any) => {
|
formData.value.itemDetail?.forEach((item: any) => {
|
||||||
totalPrice += item.selectedPrice * item.selectedNum
|
totalPrice += (item.selectedPrice*100 * item.selectedNum*100)/10000
|
||||||
})
|
})
|
||||||
formData.value.goodsDetail.forEach((item: any) => {
|
formData.value.goodsDetail.forEach((item: any) => {
|
||||||
totalPrice += item.selectedPrice * item.selectedNum
|
totalPrice += (item.selectedPrice*100 * item.selectedNum*100)/10000
|
||||||
})
|
})
|
||||||
formData.value.preTotalPrice = totalPrice
|
formData.value.preTotalPrice = totalPrice
|
||||||
formData.value.totalPrice = totalPrice
|
formData.value.totalPrice = totalPrice
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const props = {
|
const props = {
|
||||||
expandTrigger: 'hover' as const,
|
expandTrigger: 'hover' as const,
|
||||||
}
|
}
|
||||||
|
|
||||||
const doctorId = ref<any>('')
|
const doctorId = ref<any>('')
|
||||||
const handleChange = (value: any) => {
|
const handleChange = (value: any) => {
|
||||||
doctorId.value = value[value.length - 1]
|
doctorId.value = value[value.length - 1]
|
||||||
}
|
}
|
||||||
|
|
||||||
const cardTypeList = ref<any>(Object.entries(psnCertTypes).map(([id, name]) => ({id, name})))
|
const cardTypeList = ref<any>(Object.entries(psnCertTypes).map(([id, name]) => ({id, name})))
|
||||||
const doctorList = ref<any>([])
|
const doctorList = ref<any>([])
|
||||||
const sectionDoctorOption = ref<any>('')
|
const sectionDoctorOption = ref<any>('')
|
||||||
const list = () => {
|
const list = () => {
|
||||||
post(apiConfig.OrganizationMemberSearch, {query: {role: 1}}).then((res: any) => {
|
post(apiConfig.OrganizationMemberSearch, {query: {role: 1}}).then((res: any) => {
|
||||||
doctorList.value = res
|
doctorList.value = res
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getStatus=(status:any)=>{
|
||||||
|
statusDisabled.value = status
|
||||||
|
formData.value = {
|
||||||
|
patientInfo: {},
|
||||||
|
diagnosisMedicalRecord: {},
|
||||||
|
goodsDetail: [],
|
||||||
|
itemDetail: [],
|
||||||
|
patientRegistration: {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -235,6 +362,7 @@ const list = () => {
|
||||||
margin-right: 24px;
|
margin-right: 24px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.doctor {
|
.doctor {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
||||||
import Calendar from "@/components/common/Calendar.vue";
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Calendar />
|
<input type="date">
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
<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>
|
<!-- <CaseDetail v-if="patientRegistration.status==3" v-model="formData"></CaseDetail>-->
|
||||||
<Case ref="caseRef" v-else 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>
|
||||||
<div class="service-items">
|
<div class="service-items">
|
||||||
|
|
@ -133,6 +133,7 @@ const clickItem = (item: any) => {
|
||||||
formData.value = res.diagnosisMedicalRecord
|
formData.value = res.diagnosisMedicalRecord
|
||||||
formData.value.goodsDetail = res.goodsDetail
|
formData.value.goodsDetail = res.goodsDetail
|
||||||
formData.value.itemDetail = res.itemDetail
|
formData.value.itemDetail = res.itemDetail
|
||||||
|
formData.value.diagType = Number(formData.value.diagType)
|
||||||
patientRegistration.value = res.patientRegistration
|
patientRegistration.value = res.patientRegistration
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,18 +9,24 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="left-bottom">
|
<div class="left-bottom">
|
||||||
<Panel title="医生列表">
|
<Panel title="医生列表">
|
||||||
<div class="search" style="padding: 0 24px">
|
<div class="search" style="padding: 0 24px ;height: 42px">
|
||||||
<el-input v-model="keyword" placeholder="搜索医生"
|
<el-input style="height: 100%" v-model="keyword" placeholder="搜索医生姓名"
|
||||||
@keydown.enter="initDoctor"></el-input>
|
@keydown.enter="initDoctor" :prefix-icon="Search"></el-input>
|
||||||
</div>
|
</div>
|
||||||
<div class="content_list" style="padding: 0 24px">
|
<div class="content_list" style="padding: 0 24px">
|
||||||
<div class="role_list">
|
<div class="role_list">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(item, index) in roleList" :key="index"
|
<li v-for="(item, index) in roleList" :key="index"
|
||||||
@click="openDialog(item,index)" :class="{active:isShowNum==index}" >
|
:class="{active:isShowNum==index}">
|
||||||
<span class="name">{{ item.name }}</span>
|
<span class="name">{{ item.name }}</span>
|
||||||
<span class="section_name">{{ item.sectionNames }}</span>
|
<span class="section_name">{{ item.sectionNames }}</span>
|
||||||
<span class="btn">挂号</span>
|
<span class="btn" @click="openDialog(item,index)"
|
||||||
|
@mouseover="isShowNum = index"
|
||||||
|
@mouseleave="isShowNum = -1">
|
||||||
|
<img v-if="isShowNum==index" src="/static/images/registration/3-active.png" style="width: 15px;height: 14px;margin-right: 8px" alt="">
|
||||||
|
<img v-else src="/static/images/registration/3.png" alt="" style="width: 15px;height: 14px;margin-right: 8px">
|
||||||
|
挂号
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -43,6 +49,10 @@
|
||||||
end-placeholder="结束时间"
|
end-placeholder="结束时间"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="btn">
|
||||||
|
<el-button @click="reset">重置</el-button>
|
||||||
|
<el-button type="primary" @click="getPatientList">搜索</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="middle">
|
<div class="middle">
|
||||||
<List :patientList="patientList" @rowClick="rowClick"></List>
|
<List :patientList="patientList" @rowClick="rowClick"></List>
|
||||||
|
|
@ -77,6 +87,7 @@ import {getEndOfDay, getToday, formatDateArray} from "@/utils/dateUtils.ts";
|
||||||
import Calendar from "@/components/common/Calendar.vue";
|
import Calendar from "@/components/common/Calendar.vue";
|
||||||
import Panel from "@/components/common/Panel.vue";
|
import Panel from "@/components/common/Panel.vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
import {Search} from "@element-plus/icons-vue";
|
||||||
|
|
||||||
const isShowNum = ref(-1)
|
const isShowNum = ref(-1)
|
||||||
const roleList = ref<any>([])
|
const roleList = ref<any>([])
|
||||||
|
|
@ -97,16 +108,18 @@ const initDoctor = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const patientList = ref<any>([])
|
const patientList = ref<any>([])
|
||||||
const selectedDate = ref<any>([getToday().start, getToday().end])
|
const selectedDate = ref<any>([])
|
||||||
const handleDateChange = (date: any[]) => {
|
const handleDateChange = (date: any[]) => {
|
||||||
selectedDate.value = formatDateArray(date)
|
selectedDate.value = formatDateArray(date)
|
||||||
if(selectedDate.value[0]==selectedDate.value[1]){
|
if (selectedDate.value[0] == selectedDate.value[1]) {
|
||||||
selectedDate.value[1] =getEndOfDay(selectedDate.value[1]); // 输出今天 23:59
|
selectedDate.value[1] = getEndOfDay(selectedDate.value[1]); // 输出今天 23:59
|
||||||
}
|
}
|
||||||
getPatientList()
|
getPatientList()
|
||||||
}
|
}
|
||||||
const getPatientList = () => {
|
const getPatientList = () => {
|
||||||
|
isShowNum.value = -1
|
||||||
id.value = null
|
id.value = null
|
||||||
|
selectedDate.value = [getToday().start, getToday().end]
|
||||||
post('registration/list', {
|
post('registration/list', {
|
||||||
page: page.value,
|
page: page.value,
|
||||||
size: size.value,
|
size: size.value,
|
||||||
|
|
@ -128,20 +141,24 @@ const id = ref<any>('')
|
||||||
const rowClick = (row: any) => {
|
const rowClick = (row: any) => {
|
||||||
id.value = row.id
|
id.value = row.id
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
editRef.value?.init(row.organizationDoctorId,row.id)
|
editRef.value?.init(row.organizationDoctorId, row.id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const editRef = ref<any>('')
|
const editRef = ref<any>('')
|
||||||
const openDialog = (item: any,index: any) => {
|
const openDialog = (item: any, index: any) => {
|
||||||
isShowNum.value=index
|
isShowNum.value = index
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
editRef.value?.init(item.id,null)
|
editRef.value?.init(item.id, null)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const close = () => {
|
const close = () => {
|
||||||
id.value = null
|
id.value = null
|
||||||
getPatientList()
|
getPatientList()
|
||||||
}
|
}
|
||||||
|
const reset=() =>{
|
||||||
|
keyword.value=''
|
||||||
|
getPatientList()
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.container-wrapper {
|
.container-wrapper {
|
||||||
|
|
@ -156,12 +173,14 @@ const close = () => {
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 319px;
|
width: 382px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.left-top {
|
.left-top {
|
||||||
height: 380px;
|
height: 399px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-bottom {
|
.left-bottom {
|
||||||
|
|
@ -177,22 +196,9 @@ const close = () => {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: #4D6DE4;
|
background: rgba(#4D6DE4, 0.3);
|
||||||
|
|
||||||
.name {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section_name {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.name {
|
.name {
|
||||||
|
|
@ -206,10 +212,24 @@ const close = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
width: 50px;
|
cursor: pointer;
|
||||||
color: #b9b9ba;
|
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
border-radius: 3px;
|
width: 78px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border: 1px solid #4D6DE4;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #4D6DE4;
|
||||||
|
font-style: normal;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
&:hover {
|
||||||
|
background: #4D6DE4;
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -245,6 +265,7 @@ const close = () => {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|
||||||
.right-content {
|
.right-content {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -252,7 +273,10 @@ const close = () => {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.top {
|
.top {
|
||||||
|
padding-right: 24px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.middle {
|
.middle {
|
||||||
|
|
|
||||||