This commit is contained in:
ChenQiuYu 2025-05-26 09:30:19 +08:00
parent 19d901e457
commit 6d84346af9
4 changed files with 64 additions and 43 deletions

View File

@ -6,6 +6,10 @@ export enum apiConfig{
"signIn"="sign/in",//签到 "signIn"="sign/in",//签到
"signOut"="sign/out",//签退 "signOut"="sign/out",//签退
"managerUserVerify"="manager/user/verify",//获取用户信息 "managerUserVerify"="manager/user/verify",//获取用户信息
/**
*
*/
"registrationList"="registration/list",//挂号列表
/** /**
* *
*/ */

View File

@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue'; import {ref, computed} from 'vue';
import {ArrowLeft,ArrowRight} from '@element-plus/icons-vue' import {ArrowLeft, ArrowRight} from '@element-plus/icons-vue'
const currentMonth = ref(new Date().getMonth()); const currentMonth = ref(new Date().getMonth());
const currentYear = ref(new Date().getFullYear()); const currentYear = ref(new Date().getFullYear());
const selectedDate = ref<{ day: number; isCurrentMonth: boolean } | null>(null); const selectedDate = ref<{ day: number; isCurrentMonth: boolean } | null>(null);
@ -51,17 +52,17 @@ const generateCalendarData = (
// //
if ((isFirstWeek && day >= firstDayIndex) || (!isFirstWeek && dayCounter <= daysInMonth)) { if ((isFirstWeek && day >= firstDayIndex) || (!isFirstWeek && dayCounter <= daysInMonth)) {
const isToday = dayCounter === currentDay && month === currentMonthValue && year === currentYearValue; const isToday = dayCounter === currentDay && month === currentMonthValue && year === currentYearValue;
weekDays.push({ day: dayCounter, isCurrentMonth: true, isCurrentDay: isToday }); weekDays.push({day: dayCounter, isCurrentMonth: true, isCurrentDay: isToday});
dayCounter++; dayCounter++;
} }
// //
else if (isFirstWeek) { else if (isFirstWeek) {
const prevDay = daysInPrevMonth - firstDayIndex + day + 1; const prevDay = daysInPrevMonth - firstDayIndex + day + 1;
weekDays.push({ day: prevDay, isCurrentMonth: false, isCurrentDay: false }); weekDays.push({day: prevDay, isCurrentMonth: false, isCurrentDay: false});
} }
// //
else { else {
weekDays.push({ day: nextMonthDayCounter, isCurrentMonth: false, isCurrentDay: false }); weekDays.push({day: nextMonthDayCounter, isCurrentMonth: false, isCurrentDay: false});
nextMonthDayCounter++; nextMonthDayCounter++;
} }
} }
@ -95,19 +96,19 @@ const nextMonth = () => {
} }
selectedDate.value = null; selectedDate.value = null;
}; };
const emit=defineEmits(['dateClick']); const emit = defineEmits(['dateClick']);
const handleDateClick = (day: number) => { const handleDateClick = (day: number) => {
selectedDate.value = { day, isCurrentMonth:true }; selectedDate.value = {day, isCurrentMonth: true};
emit('dateClick',`${currentYear.value}-${currentMonth.value + 1}-${day}` ) emit('dateClick', `${currentYear.value}-${currentMonth.value + 1}-${day}`)
}; };
</script> </script>
<template> <template>
<div class="calendar-wrapper"> <div class="calendar-wrapper">
<div class="header"> <div class="calendar-wrapper-header">
<span class="btn" @click="prevMonth"><el-icon><ArrowLeft /></el-icon></span> <span class="btn" @click="prevMonth"><el-icon><ArrowLeft/></el-icon></span>
<span class="current">{{ currentYear }}{{ currentMonth + 1 }}</span> <span class="current">{{ currentYear }}{{ currentMonth + 1 }}</span>
<span class="btn" @click="nextMonth"><el-icon><ArrowRight /></el-icon></span> <span class="btn" @click="nextMonth"><el-icon><ArrowRight/></el-icon></span>
</div> </div>
<div class="row"> <div class="row">
<div class="item"> <div class="item">
@ -148,25 +149,24 @@ const handleDateClick = (day: number) => {
<style scoped lang="scss"> <style scoped lang="scss">
.calendar-wrapper { .calendar-wrapper {
.header { &-header {
margin-bottom: 8px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 8px;
.current{ .current {
font-weight: 500; font-weight: 500;
font-size: 18px; font-size: 18px;
color: #333333; color: #333333;
font-style: normal; font-style: normal;
margin-bottom: 8px;
} }
.btn { .btn {
padding: 5px 10px;
font-size: 14px; font-size: 14px;
color: #1677FE; color: #1677FE;
background-color: #FFF; background-color: #FFF;
border-radius: 4px; border-radius: 6px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
@ -175,10 +175,11 @@ const handleDateClick = (day: number) => {
} }
} }
} }
width: 100%; width: 100%;
height: 100%; height: 100%;
box-sizing: border-box; box-sizing: border-box;
padding:0 20px 20px; padding: 0 20px 20px;
background-color: #FFF; background-color: #FFF;
border-radius: 0 0 8px 8px; border-radius: 0 0 8px 8px;
display: flex; display: flex;
@ -187,41 +188,46 @@ const handleDateClick = (day: number) => {
.row { .row {
flex: 1; flex: 1;
width: 100%; width: 100%;
background: #F9FAFC ; background: #F9FAFC;
padding: 0 20px; padding: 0 20px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 12px;
color: #999999; color: #999999;
font-style: normal; font-style: normal;
.item { .item {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
span { span {
margin: auto; margin: auto;
height: 34px; height: 25px;
width: 34px; width: 25px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-weight: bold; font-weight: bold;
font-size: 16px; font-size: 14px;
color: #666666; color: #666666;
font-style: normal; font-style: normal;
border-radius:17px; border-radius: 25px;
} }
.currentDay { .currentDay {
background: #1677FE; background: #1677FE;
color: #fff; color: #fff;
} }
.otherMonth{
.otherMonth {
color: #999; color: #999;
} }
.selectedDay { .selectedDay {
background: #FFA500; background: #FFA500;
color: #fff; color: #fff;

View File

@ -35,7 +35,7 @@
alt="头像"/> alt="头像"/>
<img v-if="item.gender==2" class="avatar" src="/static/images/outpatient/women.png" <img v-if="item.gender==2" class="avatar" src="/static/images/outpatient/women.png"
alt="头像"/> alt="头像"/>
<span v-if="item.isAppointment" class="iconfont icon-yuyue yuyueIcon" ></span> <span v-if="item.isAppointment" class="iconfont icon-yuyue yuYueIcon" ></span>
</span> </span>
<span class="item-name">{{ item.name }}</span> <span class="item-name">{{ item.name }}</span>
<span class="item-time"> <span class="item-time">
@ -404,7 +404,7 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
right: 0; right: 0;
top: 50px; top: 50px;
} }
.yuyueIcon{ .yuYueIcon{
width: 13px; width: 13px;
height: 13px; height: 13px;
position: absolute; position: absolute;

View File

@ -67,7 +67,7 @@
/> />
</div> </div>
</div> </div>
<div class="middle"> <div class="middle" v-loading="listLoading">
<List :patientList="patientList" @rowClick="rowClick"></List> <List :patientList="patientList" @rowClick="rowClick"></List>
</div> </div>
<div class="bottom"> <div class="bottom">
@ -101,6 +101,7 @@ 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"; import {Search} from "@element-plus/icons-vue";
import {ElMessage} from "element-plus";
const dateName = ref<any>('挂号') const dateName = ref<any>('挂号')
const selectDate = (date: any) => { const selectDate = (date: any) => {
@ -155,18 +156,26 @@ const handleDateChange = (date: any[]) => {
} }
getPatientList() getPatientList()
} }
const getPatientList = () => { const listLoading = ref(false)
const getPatientList = async () => {
listLoading.value = true
id.value = null id.value = null
post('registration/list', { try {
page: page.value, const data: any = await post(apiConfig.registrationList, {
size: size.value, page: page.value,
startDate: selectedDate.value[0], size: size.value,
endDate: selectedDate.value[1], startDate: selectedDate.value[0],
doctorId: doctorId.value, endDate: selectedDate.value[1],
}).then((res: any) => { doctorId: doctorId.value,
patientList.value = res.list }, {catch_error:true})
total.value = res.total_count patientList.value = data.list
}) total.value = data.total_count
}
catch (e:any) {
}
finally {
listLoading.value = false
}
} }
const total = ref(0) const total = ref(0)
const size = ref(20) const size = ref(20)
@ -208,9 +217,9 @@ const reset = () => {
const doctorId = ref(null) const doctorId = ref(null)
const changeRole = (item: any, index: any) => { const changeRole = (item: any, index: any) => {
isShowNum.value = index isShowNum.value = index
if(index==-1){ if (index == -1) {
allList() allList()
}else{ } else {
doctorId.value = item.id doctorId.value = item.id
getPatientList() getPatientList()
} }
@ -235,12 +244,12 @@ const allList = () => {
.left { .left {
height: 100%; height: 100%;
width: 382px; width: 320px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.left-top { .left-top {
height: 399px; height: 299px;
background: #FFFFFF; background: #FFFFFF;
border-radius: 8px; border-radius: 8px;
} }
@ -288,6 +297,7 @@ const allList = () => {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
margin-right: 5px;
} }
.section_name { .section_name {
@ -297,6 +307,7 @@ const allList = () => {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
margin-right: 5px;
} }
.btn { .btn {