Files
service-finder/frontend_admin/.nuxt/dist/server/_nuxt/login-DOiXgKDi.js.map.json

1 line
5.1 KiB
JSON

{"file":"login-DOiXgKDi.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmGA,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,WAAW,IAAI,EAAE;AACR,cAAA;AAEf,UAAM,YAAY,aAAA;;;mBAtGXA,eAAAC,WAAA,EAAA,OAAM,kEAAA,GAAiE,MAAA,CAAA,6HAMlEC,cAAA,OAAA,UAAkB;AAiBd,UAAAC,MAAA,SAAA,EAAU,OAAK;AAGlB,cAAA,6FAAAC,eAAAD,MAAA,SAAA,EAAU,KAAK,CAAA,QAAA;AAAA;;;sLAWLA,MAAA,KAAA,CAAK,0aAgBLA,MAAA,QAAA,CAAQ,oTAYRE,sBAAAF,MAAA,SAAA,EAAU,SAAS,IAAA,cAAA;AAItB,UAAAA,MAAA,SAAA,EAAU,WAAS;;;;;AASlB,YAAA,SAAAC,eAAAD,MAAA,SAAA,EAAU,YAAS,kBAAA,SAAA,CAAA,uDAAA;;QAMpB,IAAG;AAAA,QAAI,OAAM;AAAA,MAAA;yBAAvB,CAEW,GAAAG,QAAAC,UAAA,aAAA;;;;;8BAFoE,2BAE/E;AAAA,YAAA;AAAA;;;;;;;;;;;;;;","names":["_ssrRenderAttrs","_mergeProps","_ssrRenderAttr","_unref","_ssrInterpolate","_ssrIncludeBooleanAttr","_push","_parent"],"sources":["../../../../pages/login.vue"],"sourcesContent":["<template>\n <div class=\"min-h-screen bg-slate-900 flex items-center justify-center px-4\">\n <div class=\"w-full max-w-md\">\n <!-- Logo / Branding -->\n <div class=\"text-center mb-8\">\n <div class=\"flex items-center justify-center gap-3 mb-4\">\n <img\n src=\"/sf_logo.png\"\n class=\"h-12 w-auto drop-shadow-md\"\n alt=\"ServiceFinder Logo\"\n />\n <span class=\"text-3xl font-extrabold tracking-wider\">\n <span class=\"text-white\">SERVICE</span>\n <span class=\"text-cyan-400\">FINDER</span>\n </span>\n </div>\n <h1 class=\"text-xl font-semibold text-slate-300\">Staff Portal</h1>\n <p class=\"text-sm text-slate-500 mt-1\">Authorised personnel only</p>\n </div>\n\n <!-- Login Card -->\n <div class=\"bg-slate-800 rounded-xl shadow-2xl border border-slate-700 p-8\">\n <!-- Error Alert -->\n <div\n v-if=\"authStore.error\"\n class=\"mb-6 p-3 rounded-lg bg-red-900/40 border border-red-700 text-red-300 text-sm\"\n >\n {{ authStore.error }}\n </div>\n\n <form @submit.prevent=\"handleLogin\" class=\"space-y-5\">\n <!-- Email -->\n <div>\n <label for=\"email\" class=\"block text-sm font-medium text-slate-300 mb-1.5\">\n Email Address\n </label>\n <input\n id=\"email\"\n v-model=\"email\"\n type=\"email\"\n autocomplete=\"email\"\n required\n placeholder=\"admin@example.com\"\n class=\"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition\"\n />\n </div>\n\n <!-- Password -->\n <div>\n <label for=\"password\" class=\"block text-sm font-medium text-slate-300 mb-1.5\">\n Password\n </label>\n <input\n id=\"password\"\n v-model=\"password\"\n type=\"password\"\n autocomplete=\"current-password\"\n required\n placeholder=\"••••••••\"\n class=\"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition\"\n />\n </div>\n\n <!-- Submit Button -->\n <button\n type=\"submit\"\n :disabled=\"authStore.isLoading\"\n class=\"w-full py-2.5 px-4 bg-cyan-600 hover:bg-cyan-500 disabled:bg-cyan-800 disabled:cursor-not-allowed text-white font-semibold rounded-lg transition duration-200 flex items-center justify-center gap-2\"\n >\n <svg\n v-if=\"authStore.isLoading\"\n class=\"animate-spin h-5 w-5 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\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 <span>{{ authStore.isLoading ? 'Signing in...' : 'Sign In' }}</span>\n </button>\n </form>\n\n <!-- Back to main site -->\n <div class=\"mt-6 text-center\">\n <NuxtLink to=\"/\" class=\"text-sm text-slate-500 hover:text-cyan-400 transition\">\n &larr; Back to ServiceFinder\n </NuxtLink>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefinePageMeta({\n layout: 'blank',\n})\n\nconst email = ref('')\nconst password = ref('')\nconst router = useRouter()\n\nconst authStore = useAuthStore()\n\nasync function handleLogin() {\n try {\n await authStore.login(email.value, password.value)\n // On success, redirect to admin dashboard\n router.push('/')\n } catch (err: any) {\n // Error is already stored in authStore.error\n console.error('Login failed:', err)\n }\n}\n</script>\n"],"version":3}