Add: No toast notification system or success feedback + No corrections/supersession UI

This commit is contained in:
voltsrage
2026-06-27 16:36:35 +08:00
parent efd3974d1f
commit 2d36d1a5dd
15 changed files with 598 additions and 29 deletions
+38 -5
View File
@@ -64,6 +64,21 @@
<PatientSearch v-model="patientId" />
</div>
<!-- Supersession (correction) -->
<div v-if="supersedesBatchId" class="bg-blue-50 border border-blue-200 rounded-md p-4">
<p class="text-sm font-medium text-blue-800">Correction Batch</p>
<p class="text-sm text-blue-700 mt-1">
This upload will supersede batch
<span class="font-mono">{{ supersedesBatchId.substring(0, 8) }}...</span>
</p>
<button
@click="clearCorrection"
class="text-xs text-blue-600 hover:text-blue-800 mt-2"
>
Cancel correction (upload as new batch)
</button>
</div>
<div v-if="uploadError" class="text-clinical-danger text-sm">
{{ uploadError }}
</div>
@@ -104,18 +119,23 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import { useBatchStore } from '../stores/batches'
import { useToast } from '../composables/useToast'
import AppHeader from '../components/AppHeader.vue'
import PatientSearch from '../components/PatientSearch.vue'
import BatchList from '../components/BatchList.vue'
import AssignClerkDialog from '../components/AssignClerkDialog.vue'
const route = useRoute()
const batchStore = useBatchStore()
const toast = useToast()
const selectedFile = ref<File | null>(null)
const batchType = ref('')
const batchType = ref((route.query.batchType as string) || '')
const track = ref('BACKFILL')
const patientId = ref<string | undefined>(undefined)
const patientId = ref<string | undefined>((route.query.patientId as string) || undefined)
const supersedesBatchId = ref<string | undefined>((route.query.supersedesBatchId as string) || undefined)
const uploadError = ref('')
const assignError = ref('')
const assignDialogOpen = ref(false)
@@ -135,20 +155,30 @@ async function handleUpload() {
selectedFile.value,
batchType.value,
track.value,
patientId.value
patientId.value,
supersedesBatchId.value,
)
if (batch) {
const isCorrection = !!supersedesBatchId.value
selectedFile.value = null
batchType.value = ''
track.value = 'BACKFILL'
patientId.value = undefined
supersedesBatchId.value = undefined
toast.success(isCorrection ? 'Correction batch created' : 'Batch uploaded successfully')
await loadRecent()
}
} catch (e: unknown) {
uploadError.value = e instanceof Error ? e.message : 'Upload failed'
const msg = e instanceof Error ? e.message : 'Upload failed'
uploadError.value = msg
toast.error(msg)
}
}
function clearCorrection() {
supersedesBatchId.value = undefined
}
function openAssignDialog(batchId: string) {
assignError.value = ''
assignBatchId.value = batchId
@@ -165,9 +195,12 @@ async function handleAssign(batchId: string, clerkUserId: string) {
try {
await batchStore.assignBatch(batchId, clerkUserId)
closeAssignDialog()
toast.success('Batch assigned to entry clerk')
await loadRecent()
} catch (e: unknown) {
assignError.value = e instanceof Error ? e.message : 'Assignment failed'
const msg = e instanceof Error ? e.message : 'Assignment failed'
assignError.value = msg
toast.error(msg)
}
}