big refactor
This commit is contained in:
@@ -4,40 +4,53 @@ const providerId = route.params.provider_id as string
|
||||
const toast = useToast()
|
||||
const { $providers } = useNuxtApp()
|
||||
|
||||
const { emails, roles, label } = useProviderContactEmails(providerId)
|
||||
|
||||
const { data, pending, error, refresh } = useProviders(`/providers/${providerId}`)
|
||||
const provider = computed(() => data.value?.data)
|
||||
|
||||
const emails = ref<Record<string, string>>({
|
||||
quotes: '',
|
||||
claims: '',
|
||||
renewals: '',
|
||||
billing: '',
|
||||
support: ''
|
||||
})
|
||||
|
||||
const roles = ['quotes', 'claims', 'renewals', 'billing', 'support']
|
||||
|
||||
const label = computed(() => {
|
||||
if (!provider.value) return ''
|
||||
return provider.value.name || 'Unknown'
|
||||
})
|
||||
|
||||
// templates and default_templates come directly from provider
|
||||
const templates = computed(() => provider.value?.templates ?? {})
|
||||
const defaultTemplates = computed(() => provider.value?.default_templates ?? {})
|
||||
const templates = computed(() => provider.value?.templates ?? {})
|
||||
const defaultTemplates = computed(() => provider.value?.default_templates ?? {})
|
||||
|
||||
// ── Template upload ──────────────────────────────────────────────────────────
|
||||
const isUploadOpen = ref(false)
|
||||
const uploadFile = ref<File | null>(null)
|
||||
const isUploadOpen = ref(false)
|
||||
const uploadFile = ref<File | null>(null)
|
||||
const uploadPolicyType = ref('car')
|
||||
const uploadClientType = ref('natural')
|
||||
const uploading = ref(false)
|
||||
const uploading = ref(false)
|
||||
|
||||
async function handleUpload() {
|
||||
if (!uploadFile.value) return
|
||||
uploading.value = true
|
||||
try {
|
||||
const formData = new FormData()
|
||||
formData.append('file', uploadFile.value)
|
||||
formData.append('file', uploadFile.value)
|
||||
formData.append('policy_type', uploadPolicyType.value)
|
||||
formData.append('client_type', uploadClientType.value)
|
||||
|
||||
await $providers(`/providers/${providerId}/templates`, {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
body: formData
|
||||
})
|
||||
|
||||
toast.add({ title: 'Template uploaded', color: 'green' })
|
||||
isUploadOpen.value = false
|
||||
uploadFile.value = null
|
||||
await refresh() // single refresh — gets updated templates + defaults together
|
||||
uploadFile.value = null
|
||||
await refresh()
|
||||
} catch (e: any) {
|
||||
toast.add({ title: 'Upload failed', description: e?.data?.error ?? e.message, color: 'red' })
|
||||
} finally {
|
||||
@@ -54,7 +67,7 @@ async function setDefault(templateId: string, policyType: string, clientType: st
|
||||
try {
|
||||
await $providers(`/providers/${providerId}/templates/${templateId}/set-default`, {
|
||||
method: 'POST',
|
||||
body: { policy_type: policyType, client_type: clientType }
|
||||
body: { policy_type: policyType, client_type: clientType }
|
||||
})
|
||||
toast.add({ title: 'Default template updated', color: 'green' })
|
||||
await refresh()
|
||||
@@ -68,7 +81,7 @@ async function toggleTemplate(templateId: string, active: boolean, policyType: s
|
||||
try {
|
||||
await $providers(`/providers/${providerId}/templates/${templateId}/${path}`, {
|
||||
method: 'POST',
|
||||
body: { policy_type: policyType, client_type: clientType }
|
||||
body: { policy_type: policyType, client_type: client_type }
|
||||
})
|
||||
toast.add({ title: `Template ${active ? 'deactivated' : 'activated'}`, color: 'green' })
|
||||
await refresh()
|
||||
@@ -89,13 +102,13 @@ async function toggleProvider() {
|
||||
}
|
||||
|
||||
const policyTypeItems = [
|
||||
{ label: 'Car', value: 'car' },
|
||||
{ label: 'Car', value: 'car' },
|
||||
{ label: 'Life', value: 'life' },
|
||||
{ label: 'Fire', value: 'fire' }
|
||||
]
|
||||
|
||||
const clientTypeItems = [
|
||||
{ label: 'Natural', value: 'natural' },
|
||||
{ label: 'Natural', value: 'natural' },
|
||||
{ label: 'Jurídico', value: 'juridico' }
|
||||
]
|
||||
|
||||
@@ -119,7 +132,6 @@ const clientTypeColor = (ct: string) =>
|
||||
</div>
|
||||
|
||||
<template v-else-if="provider">
|
||||
<!-- Header -->
|
||||
<div class="flex justify-between items-start">
|
||||
<div class="space-y-1">
|
||||
<div class="flex items-center gap-2">
|
||||
@@ -143,7 +155,6 @@ const clientTypeColor = (ct: string) =>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Info -->
|
||||
<UCard>
|
||||
<template #header>
|
||||
<p class="font-semibold text-[var(--text-primary)] flex items-center gap-2">
|
||||
@@ -177,7 +188,6 @@ const clientTypeColor = (ct: string) =>
|
||||
</div>
|
||||
</UCard>
|
||||
|
||||
<!-- Templates — grouped by policy_type → client_type -->
|
||||
<UCard>
|
||||
<template #header>
|
||||
<div class="flex justify-between items-center">
|
||||
@@ -195,14 +205,12 @@ const clientTypeColor = (ct: string) =>
|
||||
<p class="text-sm">No templates yet. Upload a provider PDF form.</p>
|
||||
</div>
|
||||
|
||||
<!-- policy_type level -->
|
||||
<div v-else class="space-y-8">
|
||||
<div v-for="(clientMap, policyType) in templates" :key="policyType">
|
||||
<p class="text-xs font-bold text-gray-400 uppercase tracking-widest mb-4">
|
||||
{{ String(policyType) }}
|
||||
</p>
|
||||
|
||||
<!-- client_type level -->
|
||||
<div class="space-y-6 pl-2">
|
||||
<div v-for="(tmplList, clientType) in clientMap" :key="clientType">
|
||||
<div class="flex items-center gap-2 mb-3">
|
||||
@@ -260,7 +268,6 @@ const clientTypeColor = (ct: string) =>
|
||||
</UCard>
|
||||
</template>
|
||||
|
||||
<!-- Upload Slideover -->
|
||||
<USlideover v-model:open="isUploadOpen" side="right">
|
||||
<template #content>
|
||||
<div class="flex flex-col h-full">
|
||||
|
||||
Reference in New Issue
Block a user