This commit is contained in:
Your Name
2026-03-16 15:08:28 +08:00
parent 294fee4d88
commit cda63b5ae2
26 changed files with 1695 additions and 492 deletions
+67 -3
View File
@@ -37,6 +37,15 @@
/>
</el-form-item>
<el-form-item label="快捷日期">
<el-radio-group v-model="formData.date_preset" @change="handleDatePresetChange" size="default">
<el-radio-button label="">不限</el-radio-button>
<el-radio-button label="today">今天</el-radio-button>
<el-radio-button label="tomorrow">明天</el-radio-button>
<el-radio-button label="day_after">后天</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button @click="handleReset">重置</el-button>
@@ -51,7 +60,7 @@
<el-tab-pane label="全部" name="all" />
<el-tab-pane name="1">
<template #label>
<span>已预约</span>
<span>未就诊</span>
<el-badge v-if="statusCount[1]" :value="statusCount[1]" class="ml-2" type="success" />
</template>
</el-tab-pane>
@@ -303,6 +312,7 @@
<script setup lang="ts">
import { usePaging } from '@/hooks/usePaging'
import { watch } from 'vue'
import { appointmentLists, cancelAppointment, completeAppointment, appointmentDetail } from '@/api/doctor'
import { getCallSignature, generateMiniProgramQrcode } from '@/api/tcm'
import feedback from '@/utils/feedback'
@@ -332,7 +342,8 @@ const formData = reactive({
doctor_name: '',
status: '' as string | number,
start_date: '',
end_date: ''
end_date: '',
date_preset: '' as '' | 'today' | 'tomorrow' | 'day_after'
})
const activeTab = ref('all')
@@ -348,6 +359,28 @@ const { pager, getLists, resetPage, resetParams } = usePaging({
params: formData
})
// 手动修改日期范围时清除快捷日期
watch(
() => [formData.start_date, formData.end_date],
([start, end]) => {
if (!formData.date_preset) return
const today = new Date()
const pad = (n: number) => String(n).padStart(2, '0')
const todayStr = `${today.getFullYear()}-${pad(today.getMonth() + 1)}-${pad(today.getDate())}`
const tomorrow = new Date(today)
tomorrow.setDate(tomorrow.getDate() + 1)
const tomorrowStr = `${tomorrow.getFullYear()}-${pad(tomorrow.getMonth() + 1)}-${pad(tomorrow.getDate())}`
const dayAfter = new Date(today)
dayAfter.setDate(dayAfter.getDate() + 2)
const dayAfterStr = `${dayAfter.getFullYear()}-${pad(dayAfter.getMonth() + 1)}-${pad(dayAfter.getDate())}`
const expected = formData.date_preset === 'today' ? todayStr : formData.date_preset === 'tomorrow' ? tomorrowStr : dayAfterStr
const startStr = (start || '').split(' ')[0]
if (startStr !== expected) {
formData.date_preset = ''
}
}
)
// 获取各状态数量
const getStatusCount = async () => {
try {
@@ -387,15 +420,46 @@ const loadData = async () => {
await getStatusCount()
}
// 快捷日期变更
const handleDatePresetChange = (val: string | number | boolean | undefined) => {
const v = String(val || '')
if (!v) {
formData.start_date = ''
formData.end_date = ''
loadData()
return
}
const today = new Date()
const pad = (n: number) => String(n).padStart(2, '0')
let target: Date
if (v === 'today') {
target = today
} else if (v === 'tomorrow') {
target = new Date(today)
target.setDate(target.getDate() + 1)
} else {
target = new Date(today)
target.setDate(target.getDate() + 2)
}
const dateStr = `${target.getFullYear()}-${pad(target.getMonth() + 1)}-${pad(target.getDate())}`
formData.start_date = dateStr
formData.end_date = dateStr
pager.page = 1
loadData()
}
// 搜索
const handleSearch = () => {
resetPage()
pager.page = 1
loadData()
}
// 重置
const handleReset = () => {
activeTab.value = 'all'
formData.date_preset = ''
resetParams()
getStatusCount()
}
const detailVisible = ref(false)