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
+43
View File
@@ -100,6 +100,41 @@
<el-input v-model="formData.title" placeholder="如:主任医师、副主任医师" clearable />
</el-form-item>
<!-- 执业证书编号 -->
<el-form-item label="执业证书编号" prop="license_no">
<el-input v-model="formData.license_no" placeholder="请输入执业证书编号" clearable />
</el-form-item>
<!-- 图文问诊 -->
<el-form-item label="图文问诊">
<el-switch
v-model="formData.enable_image_consult"
:active-value="1"
:inactive-value="0"
/>
<span class="ml-2 text-gray-500">{{ formData.enable_image_consult === 1 ? '已开启' : '已关闭' }}</span>
</el-form-item>
<!-- 视频问诊 -->
<el-form-item label="视频问诊">
<el-switch
v-model="formData.enable_video_consult"
:active-value="1"
:inactive-value="0"
/>
<span class="ml-2 text-gray-500">{{ formData.enable_video_consult === 1 ? '已开启' : '已关闭' }}</span>
</el-form-item>
<!-- 是否开启收费 -->
<el-form-item label="是否开启收费">
<el-switch
v-model="formData.enable_charge"
:active-value="1"
:inactive-value="0"
/>
<span class="ml-2 text-gray-500">{{ formData.enable_charge === 1 ? '已开启' : '已关闭' }}</span>
</el-form-item>
<!-- 所属科室 -->
<el-form-item label="所属科室" prop="department">
<el-input v-model="formData.department" placeholder="如:中医科、内科" clearable />
@@ -228,6 +263,10 @@ const formData = reactive({
jobs_id: [],
avatar: '',
title: '', // 职称
license_no: '', // 执业证书编号
enable_image_consult: 1, // 是否开启图文问诊
enable_video_consult: 1, // 是否开启视频问诊
enable_charge: 0, // 是否开启收费
department: '', // 所属科室
specialty: '', // 擅长领域
education: '', // 教育背景
@@ -353,6 +392,10 @@ const open = (type = 'add') => {
jobs_id: [],
avatar: '',
title: '',
license_no: '',
enable_image_consult: 1,
enable_video_consult: 1,
enable_charge: 0,
department: '',
specialty: '',
education: '',
+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)