1 line
14 KiB
JSON
1 line
14 KiB
JSON
{"file":"rejected-jHmJwXbQ.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0JA,UAAM,EAAE,WAAA,IAAe,aAAA;AAgBvB,UAAM,UAAU,IAAI,IAAI;AACxB,UAAM,QAAQ,IAAI,KAAK;AACvB,UAAM,YAAY,IAAwB,EAAE;AAC5C,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,gBAAgB,IAAmB,IAAI;AAC7C,UAAM,mBAAmB,IAAI,KAAK;AAClC,UAAM,oBAAoB,IAA6B,IAAI;AAC3D,UAAM,gBAAgB,IAAI,EAAE;AAC5B,UAAM,iBAAiB,IAAI,KAAK;;;;UAzKjBA,MAAA,OAAA,GAAO;;iBAUFA,MAAA,KAAA,GAAK;;;;AASIC,sBAAAD,MAAA,SAAA,IAAZ,aAAQ;wXAQgDE,eAAA,SAAS,IAAI,mQAIgBA,eAAA,SAAS,MAAM;AACzF,cAAA,SAAS,cAAY;AAC5B,kBAAA,+HAAAA,eAAA,SAAS,YAAY,CAAA,SAAA;AAAA;;;;AAKf,cAAA,SAAS,SAAO;AACmB,kBAAA,wGAAAA,eAAA,SAAS,OAAO,CAAA,QAAA;AAAA;;;AAEnD,cAAA,SAAS,MAAI;AACwB,kBAAA,0GAAAA,eAAA,SAAS,IAAI,CAAA,QAAA;AAAA;;;AAElD,cAAA,SAAS,UAAQ;AACwB,kBAAA,8GAAAA,eAAA,SAAS,QAAQ,CAAA,QAAA;AAAA;;;AAInB,gBAAA,oLAAAA,eAAA,SAAS,gBAAgB,CAAA,eAAA;AAEhE,cAAA,SAAS,YAAU;gJACuBF,MAAA,UAAA,EAAW,SAAS,UAAU,CAAA,CAAA,QAAA;AAAA;;;2HASxEA,MAAA,aAAA,MAAkB,SAAS,EAAE,IAAA,cAAA,EAAA,iLAAA;cAG7BA,MAAA,aAAA,MAAkB,SAAS,IAAE;;;;;;;YASvC,IAAE,cAAgB,SAAS,EAAE;AAAA,YAC9B,OAAM;AAAA,UAAA;6BAFR,CASW,GAAAG,QAAAC,UAAA,aAAA;;;;;gCALTC,YAGM,OAAA;AAAA,oBAHD,OAAM;AAAA,oBAAU,MAAK;AAAA,oBAAO,QAAO;AAAA,oBAAe,SAAQ;AAAA,kBAAA;oBAC7DC,YAA6G,QAAA;AAAA,sBAAvG,kBAAe;AAAA,sBAAQ,mBAAgB;AAAA,sBAAQ,gBAAa;AAAA,sBAAI,GAAE;AAAA,oBAAA;oBACxEA,YAAoM,QAAA;AAAA,sBAA9L,kBAAe;AAAA,sBAAQ,mBAAgB;AAAA,sBAAQ,gBAAa;AAAA,sBAAI,GAAE;AAAA,oBAAA;;kCACpE,aAER;AAAA,gBAAA;AAAA;;;;;;;AAMK,YAAAN,MAAA,SAAA,EAAU,WAAM,GAAA;;;;;;;UAWpBA,MAAA,gBAAA,GAAgB;gdAIqCE,eAAAF,MAAA,iBAAA,GAAmB,IAAI,qkBAQpEA,MAAA,aAAA,CAAa,6OASSA,MAAA,cAAA,CAAc,IAAA,cAAA;YAClCA,MAAA,cAAA,GAAc;;;;;;;;;UAWxBA,MAAA,KAAA,GAAK;kcAIXA,MAAA,KAAA,CAAK,CAAA,QAAA;AAAA;;;;;;;;;;;;;;","names":["_unref","_ssrRenderList","_ssrInterpolate","_push","_parent","_createBlock","_createVNode"],"sources":["../../../../pages/providers/rejected.vue"],"sourcesContent":["<template>\n <div>\n <!-- Page Header -->\n <div class=\"mb-8\">\n <h1 class=\"text-2xl font-bold text-white\">Elutasított szolgáltatók</h1>\n <p class=\"text-slate-400 mt-1\">Elutasított szolgáltatók visszaállítása az aktív kereshető szolgáltatók közé</p>\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"flex items-center justify-center py-20\">\n <div class=\"text-slate-400 flex items-center gap-3\">\n <svg class=\"w-5 h-5 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n <span>Elutasított szolgáltatók betöltése...</span>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8\">\n <p class=\"text-rose-400\">Hiba történt a szolgáltatók betöltése közben.</p>\n <button @click=\"fetchRejectedProviders\" class=\"mt-3 text-sm text-rose-300 hover:text-rose-200 underline\">Újrapróbálkozás</button>\n </div>\n\n <template v-else>\n <!-- Rejected Queue -->\n <div class=\"space-y-4\">\n <div\n v-for=\"provider in providers\"\n :key=\"provider.id\"\n class=\"bg-slate-800 rounded-xl border border-slate-700 p-6 hover:border-rose-500/30 transition\"\n >\n <div class=\"flex items-start justify-between gap-4\">\n <!-- Left: Provider Info -->\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-3 mb-2\">\n <h3 class=\"text-lg font-semibold text-white truncate\">{{ provider.name }}</h3>\n <span class=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-rose-500/10 text-rose-400\">\n Elutasított\n </span>\n <code class=\"text-xs font-mono text-slate-400 bg-slate-700/50 px-2 py-0.5 rounded\">{{ provider.source }}</code>\n <span v-if=\"provider.source_table\" class=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-mono bg-slate-700/50 text-slate-400\">\n {{ provider.source_table }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-2 gap-x-8 gap-y-2 text-sm\">\n <div v-if=\"provider.address\" class=\"text-slate-300\">\n <span class=\"text-slate-500\">Cím:</span> {{ provider.address }}\n </div>\n <div v-if=\"provider.city\" class=\"text-slate-300\">\n <span class=\"text-slate-500\">Város:</span> {{ provider.city }}\n </div>\n <div v-if=\"provider.category\" class=\"text-slate-300\">\n <span class=\"text-slate-500\">Kategória:</span> {{ provider.category }}\n </div>\n <div class=\"text-slate-300\">\n <span class=\"text-slate-500\">Validációs pontszám:</span>\n <span class=\"text-rose-400 font-medium ml-1\">{{ provider.validation_score }}</span>\n </div>\n <div v-if=\"provider.created_at\" class=\"text-slate-300\">\n <span class=\"text-slate-500\">Létrehozva:</span> {{ formatDate(provider.created_at) }}\n </div>\n </div>\n </div>\n\n <!-- Right: Actions -->\n <div class=\"flex flex-col gap-2 flex-shrink-0\">\n <button\n @click=\"openRestoreModal(provider)\"\n :disabled=\"actionLoading === provider.id\"\n class=\"px-4 py-2 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2\"\n >\n <svg v-if=\"actionLoading === provider.id\" class=\"w-4 h-4 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n <svg v-else 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=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n Visszaállítás\n </button>\n <NuxtLink\n :to=\"`/providers/${provider.id}`\"\n class=\"px-4 py-2 bg-slate-700 hover:bg-slate-600 text-slate-300 rounded-lg text-sm font-medium transition flex items-center gap-2 text-center\"\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 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\n </svg>\n Részletek\n </NuxtLink>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div v-if=\"providers.length === 0\" class=\"bg-slate-800 rounded-xl border border-slate-700 p-12 text-center\">\n <svg class=\"w-12 h-12 mx-auto text-slate-600 mb-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <h3 class=\"text-lg font-medium text-slate-400 mb-1\">Nincs elutasított szolgáltató</h3>\n <p class=\"text-sm text-slate-500\">Minden szolgáltató jóváhagyott státuszban van.</p>\n </div>\n </div>\n </template>\n\n <!-- Restore Modal -->\n <div v-if=\"showRestoreModal\" class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm\" @click.self=\"showRestoreModal = false\">\n <div class=\"bg-slate-800 rounded-xl border border-slate-700 p-6 w-full max-w-lg mx-4 shadow-2xl\">\n <h2 class=\"text-lg font-semibold text-white mb-2\">Szolgáltató visszaállítása</h2>\n <p class=\"text-sm text-slate-400 mb-6\">\n Biztosan visszaállítod a(z) <strong class=\"text-white\">{{ restoringProvider?.name }}</strong> szolgáltatót?\n A visszaállítás után a szolgáltató újra elérhető lesz a keresőben és a listákban.\n </p>\n\n <form @submit.prevent=\"restoreProvider\">\n <div class=\"mb-4\">\n <label class=\"block text-sm font-medium text-slate-300 mb-1\">Indoklás (opcionális)</label>\n <textarea\n v-model=\"restoreReason\"\n rows=\"3\"\n placeholder=\"Add meg a visszaállítás okát...\"\n class=\"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 focus:border-emerald-500 text-sm resize-none\"\n ></textarea>\n </div>\n\n <div class=\"flex justify-end gap-3\">\n <button type=\"button\" @click=\"showRestoreModal = false\" class=\"px-4 py-2 text-sm text-slate-400 hover:text-white transition\">Mégse</button>\n <button type=\"submit\" :disabled=\"restoreLoading\" class=\"px-4 py-2 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2\">\n <svg v-if=\"restoreLoading\" class=\"w-4 h-4 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n Visszaállítás\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Success Toast -->\n <div v-if=\"toast\" class=\"fixed bottom-6 right-6 z-50 bg-emerald-600 text-white px-4 py-3 rounded-lg shadow-lg text-sm flex items-center gap-2 animate-slide-up\">\n <svg class=\"w-4 h-4 flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n {{ toast }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefinePageMeta({\n middleware: 'auth',\n})\n\nconst { formatDate } = useFormatter()\n\ninterface ProviderListItem {\n id: number\n name: string\n address: string | null\n city: string | null\n category: string | null\n status: string\n source: string\n source_table?: string\n validation_score: number\n added_by_user_id: number | null\n created_at: string | null\n}\n\nconst loading = ref(true)\nconst error = ref(false)\nconst providers = ref<ProviderListItem[]>([])\nconst toast = ref('')\nconst actionLoading = ref<number | null>(null)\nconst showRestoreModal = ref(false)\nconst restoringProvider = ref<ProviderListItem | null>(null)\nconst restoreReason = ref('')\nconst restoreLoading = ref(false)\n\nfunction getHeaders(): Record<string, string> {\n const tokenCookie = useCookie('access_token')\n const token = tokenCookie.value\n return token ? { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' } : { 'Content-Type': 'application/json' }\n}\n\nfunction showToast(msg: string) {\n toast.value = msg\n setTimeout(() => { toast.value = '' }, 3000)\n}\n\nasync function fetchRejectedProviders() {\n loading.value = true\n error.value = false\n try {\n const data = await $fetch<ProviderListItem[]>('/api/v1/admin/providers?status=rejected&limit=100&sort_by=created_at&sort_order=desc', { headers: getHeaders() })\n providers.value = data\n } catch (e) {\n console.error('Failed to fetch rejected providers:', e)\n error.value = true\n } finally {\n loading.value = false\n }\n}\n\nfunction openRestoreModal(provider: ProviderListItem) {\n restoringProvider.value = provider\n restoreReason.value = ''\n showRestoreModal.value = true\n}\n\nasync function restoreProvider() {\n if (!restoringProvider.value) return\n restoreLoading.value = true\n try {\n await $fetch(`/api/v1/admin/providers/${restoringProvider.value.id}/restore`, {\n method: 'POST',\n headers: getHeaders(),\n body: { reason: restoreReason.value || 'Admin restored via rejected queue' },\n })\n showToast(`\"${restoringProvider.value.name}\" sikeresen visszaállítva`)\n providers.value = providers.value.filter(p => p.id !== restoringProvider.value!.id)\n showRestoreModal.value = false\n restoringProvider.value = null\n } catch (e: any) {\n const detail = e?.response?._data?.detail || e?.data?.detail || 'Ismeretlen hiba'\n showToast(`Hiba: ${detail}`)\n console.error('Failed to restore provider:', e)\n } finally {\n restoreLoading.value = false\n }\n}\n\nonMounted(() => {\n fetchRejectedProviders()\n})\n</script>\n\n<style scoped>\n.animate-slide-up {\n animation: slideUp 0.3s ease-out;\n}\n@keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(1rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>\n"],"version":3} |