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

This commit is contained in:
LiJianZhao 2025-05-22 11:18:31 +08:00
commit f8bb163ba8
5 changed files with 107 additions and 43 deletions

View File

@ -1,7 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
const currentDate = new Date(); import { ref, computed } from 'vue';
const currentMonth = currentDate.getMonth(); import {ArrowLeft,ArrowRight} from '@element-plus/icons-vue'
const currentYear = currentDate.getFullYear(); const currentMonth = ref(new Date().getMonth());
const currentYear = ref(new Date().getFullYear());
const selectedDate = ref<{ day: number; isCurrentMonth: boolean } | null>(null);
// //
const getFirstDayOfMonth = (year: number, month: number): number => { const getFirstDayOfMonth = (year: number, month: number): number => {
@ -21,8 +23,11 @@ const generateCalendarData = (
const daysInMonth = getDaysInMonth(year, month); const daysInMonth = getDaysInMonth(year, month);
const firstDayIndex = getFirstDayOfMonth(year, month); const firstDayIndex = getFirstDayOfMonth(year, month);
// //
const currentDate = new Date();
const currentDay = currentDate.getDate(); const currentDay = currentDate.getDate();
const currentMonthValue = currentDate.getMonth();
const currentYearValue = currentDate.getFullYear();
// //
const prevMonth = month === 0 ? 11 : month - 1; const prevMonth = month === 0 ? 11 : month - 1;
@ -45,18 +50,18 @@ const generateCalendarData = (
// //
if ((isFirstWeek && day >= firstDayIndex) || (!isFirstWeek && dayCounter <= daysInMonth)) { if ((isFirstWeek && day >= firstDayIndex) || (!isFirstWeek && dayCounter <= daysInMonth)) {
const isToday = dayCounter === currentDay && month === currentMonth && year === currentYear; 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++;
} }
} }
@ -68,13 +73,42 @@ const generateCalendarData = (
}; };
// 使 // 使
const calendarData = generateCalendarData(currentYear, currentMonth); const calendarData = computed(() => generateCalendarData(currentYear.value, currentMonth.value));
//
const prevMonth = () => {
if (currentMonth.value === 0) {
currentMonth.value = 11;
currentYear.value -= 1;
} else {
currentMonth.value -= 1;
}
selectedDate.value = null;
};
const nextMonth = () => {
if (currentMonth.value === 11) {
currentMonth.value = 0;
currentYear.value += 1;
} else {
currentMonth.value += 1;
}
selectedDate.value = null;
};
const emit=defineEmits(['dateClick']);
const handleDateClick = (day: number) => {
selectedDate.value = { day, isCurrentMonth:true };
emit('dateClick',`${currentYear.value}-${currentMonth.value + 1}-${day}` )
};
</script> </script>
<template> <template>
<div class="calendar-wrapper"> <div class="calendar-wrapper">
<div class="header">
<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>
</div>
<div class="row"> <div class="row">
<div class="item"> <div class="item">
<span class="tip"></span> <span class="tip"></span>
@ -99,18 +133,48 @@ const calendarData = generateCalendarData(currentYear, currentMonth);
</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" @click="handleDateClick(subItem.day)">
<span :class="subItem.isCurrentDay ? 'currentDay' : subItem.isCurrentMonth ? '' : 'otherMonth'"> <span :class="[
subItem.isCurrentDay ? 'currentDay' : '',
subItem.isCurrentMonth ? '' : 'otherMonth',
selectedDate && selectedDate.day === subItem.day && selectedDate.isCurrentMonth === subItem.isCurrentMonth ? 'selectedDay' : ''
]">
{{ subItem.isCurrentDay ? "今" : subItem.day }} {{ subItem.isCurrentDay ? "今" : subItem.day }}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<style scoped lang="scss"> <style scoped lang="scss">
.calendar-wrapper { .calendar-wrapper {
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
.current{
font-weight: 500;
font-size: 18px;
color: #333333;
font-style: normal;
margin-bottom: 8px;
}
.btn {
padding: 5px 10px;
font-size: 14px;
color: #1677FE;
background-color: #FFF;
border-radius: 4px;
cursor: pointer;
&:hover {
background-color: #1677FE;
color: #FFF;
}
}
}
width: 100%; width: 100%;
height: 100%; height: 100%;
box-sizing: border-box; box-sizing: border-box;
@ -119,13 +183,7 @@ const calendarData = generateCalendarData(currentYear, currentMonth);
border-radius: 0 0 8px 8px; border-radius: 0 0 8px 8px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.current{
font-weight: 500;
font-size: 18px;
color: #333333;
font-style: normal;
margin-bottom: 8px;
}
.row { .row {
flex: 1; flex: 1;
width: 100%; width: 100%;
@ -164,6 +222,10 @@ const calendarData = generateCalendarData(currentYear, currentMonth);
.otherMonth{ .otherMonth{
color: #999; color: #999;
} }
.selectedDay {
background: #FFA500;
color: #fff;
}
} }
} }
} }

View File

@ -104,7 +104,7 @@ onMounted(() => {
// //
refreshInterval = setInterval(() => { refreshInterval = setInterval(() => {
initList() initList()
}, 1000); // 10001 }, 60*1000); // 10001
}) })
onUnmounted(() => { onUnmounted(() => {
// //

View File

@ -45,12 +45,12 @@
alt=""> alt="">
<div class="detail-top-left-text"> <div class="detail-top-left-text">
<div class="detail-top-left-text-name"> <div class="detail-top-left-text-name">
<span class="name" style="margin-right: 16px">{{ listItem.name || '-' }}</span> <span class="name" style="margin-right: 16px">{{ listItem.name}}</span>
<el-tag type="success">{{ listItem.levelName || '-' }}</el-tag> <el-tag type="success">{{ listItem.levelName }}</el-tag>
</div> </div>
<div class="detail-top-left-text-phone"> <div class="detail-top-left-text-phone">
<span class="age">{{ listItem.age ? listItem.age + '岁' : '-' }}</span> <span class="age">{{ listItem.age ? listItem.age + '岁' : '' }}</span>
<span>{{ listItem.phone || '-' }}</span> <span>{{ listItem.phone }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -68,27 +68,27 @@
:column="3" :column="3"
border border
> >
<el-descriptions-item label="生日">{{ listItem.birthday || "-" }}</el-descriptions-item> <el-descriptions-item label="生日">{{ listItem.birthday}}</el-descriptions-item>
<el-descriptions-item label="民族"> <el-descriptions-item label="民族">
{{ antysList.find((item: any) => item.id == listItem.nation)?.name || "-" }} {{ antysList.find((item: any) => item.id == listItem.nation)?.name}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="就诊时间">{{ <el-descriptions-item label="就诊时间">{{
formatListTime(listItem.lastVisitTime) || "-" formatListTime(listItem.lastVisitTime)
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="证件类型"> <el-descriptions-item label="证件类型">
{{ certTypeList.find((item: any) => item.id == Number(listItem.certType))?.name }} {{ certTypeList.find((item: any) => item.id == Number(listItem.certType))?.name }}
</el-descriptions-item> </el-descriptions-item>
> >
<el-descriptions-item label="证件号码">{{ listItem.certNo || "-" }}</el-descriptions-item> <el-descriptions-item label="证件号码">{{ listItem.certNo}}</el-descriptions-item>
<el-descriptions-item label="积分"><span>{{ listItem.integralBalance }}</span> <el-descriptions-item label="积分"><span>{{ listItem.integralBalance }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="地址"> <el-descriptions-item label="地址">
{{ areaName }}{{ areaName ? '/' + listItem.address : listItem.address || "-" }} {{ areaName }}{{ areaName ? '/' + listItem.address : listItem.address}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="既往史">{{ listItem.beforeMedicalHistory || "-" }}</el-descriptions-item> <el-descriptions-item label="既往史">{{ listItem.beforeMedicalHistory}}</el-descriptions-item>
<el-descriptions-item label="过敏史">{{ listItem.allergyHistory || "-" }}</el-descriptions-item> <el-descriptions-item label="过敏史">{{ listItem.allergyHistory}}</el-descriptions-item>
<el-descriptions-item label="备注">{{ listItem.remark || "-" }}</el-descriptions-item> <el-descriptions-item label="备注">{{ listItem.remark }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>

View File

@ -4,7 +4,7 @@
<div class="left"> <div class="left">
<div class="left-top"> <div class="left-top">
<Panel title="日历"> <Panel title="日历">
<Calendar></Calendar> <Calendar @date-click="selectDate"></Calendar>
</Panel> </Panel>
</div> </div>
<div class="left-bottom"> <div class="left-bottom">
@ -87,7 +87,9 @@ 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";
const selectDate = (date: any)=>{
console.log(date)
}
const isShowNum = ref(-1) const isShowNum = ref(-1)
const roleList = ref<any>([]) const roleList = ref<any>([])

View File

@ -52,7 +52,7 @@
v-model:current-page="current_page" @current-change="change_page"/> v-model:current-page="current_page" @current-change="change_page"/>
</div> </div>
</div> </div>
<Mask :is-show="UpdateDirectoryLoading" :width="540" :height="160+24+24+60" title="更新版本" @close="close"> <Mask :is-show="UpdateDirectoryLoading" :width="540" :height="268" title="更新版本" @close="close">
<div style="height:100%;padding: 24px"> <div style="height:100%;padding: 24px">
<div class="updateDirectory"> <div class="updateDirectory">
<div class="updateDirectory-message">{{ tip_message }}</div> <div class="updateDirectory-message">{{ tip_message }}</div>
@ -146,7 +146,7 @@
</div> </div>
</div> </div>
</Mask> </Mask>
<Mask :is-show="isSynchronizedCacheBox" :width="540" :height="347" title="同步缓存" @close="close"> <Mask :is-show="isSynchronizedCacheBox" :width="540" :height="268+24" title="同步缓存" @close="close">
<div style="height:100%;padding: 24px"> <div style="height:100%;padding: 24px">
<div class="updateDirectory"> <div class="updateDirectory">
<div class="updateDirectory-message">{{ tip_message }}</div> <div class="updateDirectory-message">{{ tip_message }}</div>
@ -386,15 +386,15 @@ const syncCacheTotalPage = ref<any>(0)
const isSynchronizedCacheBox = ref(false) const isSynchronizedCacheBox = ref(false)
const syncCache = () => { const syncCache = () => {
if (syncCachePage.value == 1) { if (syncCachePage.value == 1) {
tip_message.value = "开始同步第页"; tip_message.value = "开始同步第1页";
} }
post("social/directory/syncToMongo", {page: syncCachePage.value}).then((res: any) => { post("social/directory/syncToMongo", {page: syncCachePage.value}).then((res: any) => {
if (res.total_page) { if (res.total_page) {
syncCacheTotalPage.value = res.total_page syncCacheTotalPage.value = res.total_page
} }
if (syncCachePage.value <= syncCacheTotalPage.value) { if (syncCachePage.value < syncCacheTotalPage.value) {
syncCachePage.value++ syncCachePage.value++
tip_message.value = "正在同步目录,以同步" + syncCachePage.value + "/" + syncCacheTotalPage.value + "页,请不要强制关闭程序,否则数据不完整"; tip_message.value = "正在同步目录,以同步" + syncCachePage.value + "/" + syncCacheTotalPage.value + "页请不要强制关闭程序,否则数据不完整";
percent.value = Math.floor((syncCachePage.value / syncCacheTotalPage.value) * 100) percent.value = Math.floor((syncCachePage.value / syncCacheTotalPage.value) * 100)
syncCache() syncCache()
} else { } else {