fix: distinguish appointment deletion errors

This commit is contained in:
2026-10-09 11:59:29 +08:00
parent 9c4512db6a
commit 8bf0e2260e
@@ -24,6 +24,7 @@ const arrivals = ref<ArrivalCalendarEntry[]>([])
const range = ref(calendarRange(dateKey(new Date()), 'month'))
const loading = ref(false)
const loadError = ref<ApiErrorDetails | null>(null)
const errorTitle = ref('预约日历加载失败')
const dialogError = ref<ApiErrorDetails | null>(null)
const dialogOpen = ref(false)
const saving = ref(false)
@@ -89,6 +90,7 @@ async function load(nextRange = range.value) {
calendarController = new AbortController()
loading.value = true
loadError.value = null
errorTitle.value = '预约日历加载失败'
appointments.value = []
arrivals.value = []
try {
@@ -205,6 +207,7 @@ async function remove(event: CalendarEvent) {
ElMessage.success('预约已删除')
await load()
} catch (error) {
errorTitle.value = '预约删除失败'
loadError.value = getApiErrorDetails(error, '预约删除失败')
} finally { loading.value = false }
}
@@ -215,7 +218,7 @@ onBeforeUnmount(() => { ++calendarRequest; ++candidateRequest; ++detailRequest;
<template>
<AdminPage class="admin-density">
<LoadErrorState v-if="loadError" title="预约日历加载失败" :message="loadError.message" :loading="loading" @retry="load()"><template #details><ApiErrorMeta :details="loadError" /></template></LoadErrorState>
<LoadErrorState v-if="loadError" :title="errorTitle" :message="loadError.message" :loading="loading" @retry="load()"><template #details><ApiErrorMeta :details="loadError" /></template></LoadErrorState>
<AppointmentCalendarPanel :events="events" :loading="loading" :can-create="access.can(permission.inboundOrderAppointment)" @range="load" @create="openCreate" @edit="openEdit" @delete="remove" />
<AppDialog v-model="dialogOpen" class="admin-density-dialog" :title="editing ? '编辑预约' : '新增预约'" width="min(1080px, calc(100vw - 48px))" confirm-text="保存" :confirm-loading="saving" :confirm-disabled="detailLoading" @confirm="save">
<LoadErrorState v-if="dialogError" title="预约操作失败" :message="dialogError.message" :show-retry="false"><template #details><ApiErrorMeta :details="dialogError" /></template></LoadErrorState>