Files
service-finder/frontend_admin/.nuxt/dist/server/_nuxt/index-JpXwtL-Z.js.map.json

1 line
24 KiB
JSON

{"file":"index-JpXwtL-Z.js","mappings":"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","names":["$t","_ssrInterpolate","_ssrRenderList","_ssrRenderClass"],"sources":["../../../../pages/garages/[id]/index.vue"],"sourcesContent":["<template>\n <div>\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"flex items-center justify-center py-20\">\n <div class=\"flex flex-col items-center gap-3\">\n <svg class=\"w-8 h-8 text-indigo-400 animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n <p class=\"text-slate-400 text-sm\">{{ $t('garages.details.loading') }}</p>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"flex flex-col items-center justify-center py-20 text-center\">\n <svg class=\"w-12 h-12 text-red-500 mb-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n <p class=\"text-red-400 text-sm mb-2\">{{ error }}</p>\n <button @click=\"fetchDetails\" class=\"px-4 py-2 text-sm bg-indigo-600/20 text-indigo-300 hover:bg-indigo-600/30 rounded-lg transition\">\n {{ $t('garages.details.retry') }}\n </button>\n </div>\n\n <!-- Content -->\n <template v-else-if=\"garage\">\n <!-- Header -->\n <div class=\"mb-8\">\n <!-- Back Button -->\n <button\n @click=\"goBack\"\n class=\"inline-flex items-center gap-1.5 text-sm text-slate-400 hover:text-white transition mb-4\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n {{ $t('garages.details.back') }}\n </button>\n\n <!-- Garage Name + Status -->\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-4\">\n <div\n class=\"w-12 h-12 rounded-xl flex items-center justify-center text-lg font-bold text-white\"\n :class=\"getInitialsColor(garageDisplayName(garage))\"\n >\n {{ getInitials(garageDisplayName(garage)) }}\n </div>\n <div>\n <h1 class=\"text-2xl font-bold text-white\">{{ garageDisplayName(garage) }}</h1>\n <p class=\"text-sm text-slate-400 mt-0.5\">\n {{ garage.full_name }}\n <span v-if=\"garage.tax_number\" class=\"ml-2 text-slate-500\">· {{ $t('garages.details.tax_number') }}: {{ garage.tax_number }}</span>\n </p>\n </div>\n </div>\n <span\n class=\"inline-flex items-center px-3 py-1 rounded-full text-xs font-medium\"\n :class=\"statusBadgeClass(garage.status)\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full mr-1.5\" :class=\"statusDotClass(garage.status)\"></span>\n {{ statusLabel(garage.status) }}\n </span>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"border-b border-slate-700 mb-6\">\n <nav class=\"flex gap-6\">\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.key\"\n @click=\"activeTab = tab.key\"\n class=\"pb-3 text-sm font-medium transition border-b-2 -mb-px\"\n :class=\"activeTab === tab.key\n ? 'text-indigo-400 border-indigo-400'\n : 'text-slate-400 border-transparent hover:text-slate-300'\"\n >\n {{ tab.label }}\n </button>\n </nav>\n </div>\n\n <!-- General Tab Content -->\n <div v-if=\"activeTab === 'general'\" class=\"space-y-6\">\n <!-- Info Card 1: Cég adatok (Company Data) -->\n <div class=\"bg-slate-800/50 border border-slate-700 rounded-xl overflow-hidden\">\n <div class=\"px-6 py-4 border-b border-slate-700 flex items-center gap-3\">\n <div class=\"p-2 rounded-lg bg-indigo-500/10 text-indigo-400\">\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" />\n </svg>\n </div>\n <h3 class=\"text-base font-semibold text-white\">{{ $t('garages.details.company_info') }}</h3>\n </div>\n <div class=\"px-6 py-5\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.company_name') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.full_name }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.display_name') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.display_name || '—' }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.org_type') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ orgTypeLabel(garage.org_type) }}</p>\n </div>\n </div>\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.tax_number') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.tax_number || '—' }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.reg_number') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.reg_number || '—' }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.created_at') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ formatDate(garage.created_at) }}</p>\n </div>\n </div>\n </div>\n <!-- Address -->\n <div class=\"mt-6 pt-6 border-t border-slate-700/50\">\n <p class=\"text-xs text-slate-500 uppercase tracking-wider mb-3\">{{ $t('garages.details.address') }}</p>\n <p class=\"text-sm text-white\">\n {{ formattedAddress }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Info Card 2: Előfizetés státusza (Subscription Status) -->\n <div class=\"bg-slate-800/50 border border-slate-700 rounded-xl overflow-hidden\">\n <div class=\"px-6 py-4 border-b border-slate-700 flex items-center gap-3\">\n <div class=\"p-2 rounded-lg bg-amber-500/10 text-amber-400\">\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\" />\n </svg>\n </div>\n <h3 class=\"text-base font-semibold text-white\">{{ $t('garages.details.subscription_info') }}</h3>\n </div>\n <div class=\"px-6 py-5\">\n <div v-if=\"garage.subscription\" class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.tier_name') }}</p>\n <span\n class=\"inline-flex mt-1 px-2.5 py-0.5 rounded-full text-xs font-medium\"\n :class=\"tierBadgeClass(garage.subscription.tier_name)\"\n >\n {{ garage.subscription.tier_name }}\n </span>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.tier_level') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ $t('garages.details.level_n', { n: garage.subscription.tier_level }) }}</p>\n </div>\n </div>\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.expires_at') }}</p>\n <p v-if=\"garage.subscription.expires_at\" class=\"text-sm text-white mt-1\">{{ formatDate(garage.subscription.expires_at) }}</p>\n <p v-else class=\"text-sm text-slate-400 mt-1 italic\">{{ $t('garages.indefinite') }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.asset_limit') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.subscription.asset_limit }} {{ $t('garages.details.vehicles') }}</p>\n </div>\n </div>\n </div>\n <div v-else class=\"text-center py-4\">\n <p class=\"text-sm text-slate-400\">{{ $t('garages.details.no_subscription') }}</p>\n </div>\n </div>\n </div>\n\n <!-- Info Card 3: Elérhetőség (Contact Info) -->\n <div class=\"bg-slate-800/50 border border-slate-700 rounded-xl overflow-hidden\">\n <div class=\"px-6 py-4 border-b border-slate-700 flex items-center gap-3\">\n <div class=\"p-2 rounded-lg bg-emerald-500/10 text-emerald-400\">\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n </div>\n <h3 class=\"text-base font-semibold text-white\">{{ $t('garages.details.contact_info') }}</h3>\n </div>\n <div class=\"px-6 py-5\">\n <div v-if=\"garage.primary_contact\" class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.contact_name') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.primary_contact.full_name }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.contact_role') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.primary_contact.role }}</p>\n </div>\n </div>\n <div class=\"space-y-4\">\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.contact_department') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.primary_contact.department || '—' }}</p>\n </div>\n <div>\n <p class=\"text-xs text-slate-500 uppercase tracking-wider\">{{ $t('garages.details.contact_phone') }}</p>\n <p class=\"text-sm text-white mt-1\">{{ garage.primary_contact.phone || '—' }}</p>\n </div>\n </div>\n </div>\n <div v-else class=\"text-center py-4\">\n <p class=\"text-sm text-slate-400\">{{ $t('garages.details.no_contact') }}</p>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Placeholder for other tabs -->\n <div v-if=\"activeTab !== 'general'\" class=\"flex items-center justify-center py-20\">\n <p class=\"text-slate-500 text-sm\">{{ $t('garages.details.coming_soon') }}</p>\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\ndefinePageMeta({\n middleware: 'auth',\n})\n\nconst route = useRoute()\nconst router = useRouter()\n\n// ── Types ──────────────────────────────────────────────────────────\n\ninterface ContactPersonInfo {\n id: number\n full_name: string\n role: string\n department: string | null\n phone: string | null\n email: string | null\n is_primary: boolean\n}\n\ninterface SubscriptionSummary {\n tier_name: string\n tier_level: number\n valid_from: string | null\n expires_at: string | null\n is_active: boolean\n asset_count: number\n asset_limit: number\n}\n\ninterface GarageDetails {\n id: number\n name: string\n full_name: string\n display_name: string | null\n status: string\n is_active: boolean\n is_verified: boolean\n org_type: string\n address_city: string | null\n address_zip: string | null\n address_street_name: string | null\n address_street_type: string | null\n address_house_number: string | null\n tax_number: string | null\n reg_number: string | null\n subscription: SubscriptionSummary | null\n primary_contact: ContactPersonInfo | null\n created_at: string | null\n member_count: number\n}\n\n// ── State ──────────────────────────────────────────────────────────\n\nconst loading = ref(true)\nconst error = ref<string | null>(null)\nconst garage = ref<GarageDetails | null>(null)\nconst activeTab = ref('general')\n\nconst tabs = [\n { key: 'general', label: 'Általános' },\n { key: 'employees', label: 'Dolgozók' },\n { key: 'fleet', label: 'Flotta' },\n { key: 'analytics', label: 'Analitika' },\n]\n\n// ── Computed ───────────────────────────────────────────────────────\n\nconst formattedAddress = computed(() => {\n if (!garage.value) return '—'\n const parts: string[] = []\n if (garage.value.address_zip) parts.push(garage.value.address_zip)\n if (garage.value.address_city) parts.push(garage.value.address_city)\n const streetParts: string[] = []\n if (garage.value.address_street_name) streetParts.push(garage.value.address_street_name)\n if (garage.value.address_street_type) streetParts.push(garage.value.address_street_type)\n if (garage.value.address_house_number) streetParts.push(garage.value.address_house_number)\n if (streetParts.length > 0) parts.push(streetParts.join(' '))\n return parts.length > 0 ? parts.join(', ') : '—'\n})\n\n// ── Auth Helper ────────────────────────────────────────────────────\n\nfunction getAuthHeaders() {\n const tokenCookie = useCookie('access_token')\n const token = tokenCookie.value\n return token ? { Authorization: `Bearer ${token}` } : {}\n}\n\n// ── Data Fetching ──────────────────────────────────────────────────\n\nasync function fetchDetails() {\n const orgId = route.params.id\n if (!orgId) {\n error.value = 'Invalid garage ID'\n loading.value = false\n return\n }\n\n loading.value = true\n error.value = null\n try {\n const response = await $fetch<GarageDetails>(`/api/v1/admin/organizations/${orgId}/details`, {\n headers: getAuthHeaders(),\n })\n garage.value = response\n } catch (err: any) {\n console.error('[GarageDetails] Failed to fetch:', err)\n error.value = err?.data?.detail || err?.message || 'Failed to load garage details'\n } finally {\n loading.value = false\n }\n}\n\n// ── Navigation ─────────────────────────────────────────────────────\n\nfunction goBack() {\n router.push('/garages')\n}\n\n// ── Helpers ────────────────────────────────────────────────────────\n\nfunction garageDisplayName(g: GarageDetails): string {\n return g.display_name || g.name || g.full_name\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map(w => w.charAt(0))\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\nfunction getInitialsColor(name: string): string {\n const colors = [\n 'bg-amber-600', 'bg-purple-600', 'bg-slate-600',\n 'bg-indigo-600', 'bg-emerald-600', 'bg-rose-600',\n 'bg-cyan-600', 'bg-orange-600', 'bg-teal-600',\n ]\n let hash = 0\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash)\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nfunction statusBadgeClass(status: string): string {\n if (status === 'active') return 'bg-emerald-500/10 text-emerald-400'\n if (status === 'suspended') return 'bg-red-500/10 text-red-400'\n if (status === 'pending_verification') return 'bg-amber-500/10 text-amber-400'\n return 'bg-slate-500/10 text-slate-400'\n}\n\nfunction statusDotClass(status: string): string {\n if (status === 'active') return 'bg-emerald-400'\n if (status === 'suspended') return 'bg-red-400'\n if (status === 'pending_verification') return 'bg-amber-400'\n return 'bg-slate-400'\n}\n\nfunction statusLabel(status: string): string {\n if (status === 'active') return 'Aktív'\n if (status === 'suspended') return 'Felfüggesztve'\n if (status === 'pending_verification') return 'Függőben'\n return 'Inaktív'\n}\n\nfunction tierBadgeClass(tierName: string): string {\n const name = tierName.toLowerCase()\n if (name.includes('enterprise') || name.includes('vip') || name.includes('corp')) return 'bg-purple-500/20 text-purple-300'\n if (name.includes('premium') || name.includes('pro')) return 'bg-amber-500/20 text-amber-300'\n return 'bg-slate-500/20 text-slate-300'\n}\n\nfunction orgTypeLabel(type: string): string {\n const labels: Record<string, string> = {\n individual: 'Magánszemély',\n service: 'Szerviz',\n service_provider: 'Szolgáltató',\n fleet_owner: 'Flottatulajdonos',\n club: 'Klub',\n business: 'Vállalkozás',\n }\n return labels[type] || type\n}\n\nfunction formatDate(dateStr: string | null): string {\n if (!dateStr) return '—'\n try {\n const d = new Date(dateStr)\n return d.toLocaleDateString('hu-HU', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\n// ── Lifecycle ──────────────────────────────────────────────────────\n\nonMounted(() => {\n fetchDetails()\n})\n</script>\n"],"version":3}