Added timezones

This commit is contained in:
2026-04-04 22:19:58 +10:00
parent 7f62c31456
commit 509efbe821
11 changed files with 516 additions and 424 deletions
@@ -17,7 +17,7 @@ class PopulateAirportTimezones extends Command
*/ */
public function handle() public function handle()
{ {
Airport::whereNull('timezone')->chunk(100, function ($airports) { Airport::whereNull('timezone')->chunkById(100, function ($airports) {
foreach ($airports as $airport) { foreach ($airports as $airport) {
$zoneName = null; $zoneName = null;
$attempts = 0; $attempts = 0;
@@ -1,9 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
defineProps<{
title?: string;
blurb?: string;
}>();
</script> </script>
<template> <template>
<div class="glass-box glass glass-border"> <div class="glass-box glass glass-border">
<h2 v-if="title">{{ title }}</h2>
<p v-if="blurb">{{ blurb }}</p>
<slot /> <slot />
</div> </div>
</template> </template>
@@ -12,8 +17,19 @@
.glass-box { .glass-box {
width: 50%; width: 50%;
min-height: 50dvh; min-height: 50dvh;
gap:1em; gap: 1em;
padding: 2em; padding: 2em;
} }
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style> </style>
+21 -5
View File
@@ -3,15 +3,20 @@ import {Link} from "@inertiajs/vue3";
import MainHeader from "@/Components/FlightsGoneBy/MainHeader.vue"; import MainHeader from "@/Components/FlightsGoneBy/MainHeader.vue";
import MainFooter from "@/Components/FlightsGoneBy/MainFooter.vue"; import MainFooter from "@/Components/FlightsGoneBy/MainFooter.vue";
import Radar from "@/Components/FlightsGoneBy/Radar.vue"; import Radar from "@/Components/FlightsGoneBy/Radar.vue";
import { usePage } from "@inertiajs/vue3";
const page = usePage();
</script> </script>
<template> <template>
<Radar> <Radar>
<div class="layoutContainer"> <div class="layoutContainer">
<MainHeader /> <MainHeader />
<main id="pageContainer"> <Transition name="fade" mode="out-in">
<slot /> <main id="pageContainer" :key="page.url" >
</main> <slot />
</main>
</Transition>
<MainFooter /> <MainFooter />
</div> </div>
</Radar> </Radar>
@@ -27,10 +32,10 @@ import Radar from "@/Components/FlightsGoneBy/Radar.vue";
} }
main { main {
flex: 1 0 90dvh; /* THIS is the key */ flex: 1 0 90dvh;
min-height: 0; min-height: 0;
padding: 1rem; padding: 1rem;
background: var(--surface-alt); background:transparent;
display:flex; display:flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
@@ -38,4 +43,15 @@ main {
} }
.fade-enter-from,
.fade-leave-to {
opacity: 0;
transform: translateY(10px);
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
</style> </style>
+53 -39
View File
@@ -1,10 +1,9 @@
<script setup> <script setup lang="ts">
import GuestLayout from '@/Layouts/GuestLayout.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import InputError from '@/Components/InputError.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import InputLabel from '@/Components/InputLabel.vue'; import { Head, useForm } from "@inertiajs/vue3";
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue'; defineOptions({ layout: MainLayout });
import { Head, useForm } from '@inertiajs/vue3';
const form = useForm({ const form = useForm({
password: '', password: '',
@@ -18,38 +17,53 @@ const submit = () => {
</script> </script>
<template> <template>
<GuestLayout> <Head title="Confirm Password" />
<Head title="Confirm Password" /> <GlassBox>
<h2>Confirm Password</h2>
<p>This is a secure area. Please confirm your password before continuing.</p>
<div class="mb-4 text-sm text-gray-600"> <v-form style="width: 100%" @submit.prevent="submit">
This is a secure area of the application. Please confirm your <v-container>
password before continuing. <v-row>
</div> <v-col cols="12">
<v-text-field
v-model="form.password"
label="Password"
type="password"
autocomplete="current-password"
autofocus
:error-messages="form.errors.password"
/>
</v-col>
</v-row>
<form @submit.prevent="submit"> <v-row>
<div> <v-col cols="12" class="d-flex justify-end">
<InputLabel for="password" value="Password" /> <v-btn
<TextInput size="large"
id="password" type="submit"
type="password" :loading="form.processing"
class="mt-1 block w-full" :disabled="form.processing"
v-model="form.password" >
required Confirm
autocomplete="current-password" </v-btn>
autofocus </v-col>
/> </v-row>
<InputError class="mt-2" :message="form.errors.password" /> </v-container>
</div> </v-form>
</GlassBox>
<div class="mt-4 flex justify-end">
<PrimaryButton
class="ms-4"
:class="{ 'opacity-25': form.processing }"
:disabled="form.processing"
>
Confirm
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+57 -53
View File
@@ -1,16 +1,13 @@
<script setup> <script setup lang="ts">
import GuestLayout from '@/Layouts/GuestLayout.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import InputError from '@/Components/InputError.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import InputLabel from '@/Components/InputLabel.vue'; import { Head, useForm } from "@inertiajs/vue3";
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, useForm } from '@inertiajs/vue3';
defineProps({ defineOptions({ layout: MainLayout });
status: {
type: String, defineProps<{
}, status?: string;
}); }>();
const form = useForm({ const form = useForm({
email: '', email: '',
@@ -22,47 +19,54 @@ const submit = () => {
</script> </script>
<template> <template>
<GuestLayout> <Head title="Forgot Password" />
<Head title="Forgot Password" /> <GlassBox title="Forgot Your Password?" blurb="No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.">
<v-alert v-if="status" type="success" class="mb-2">{{ status }}</v-alert>
<div class="mb-4 text-sm text-gray-600"> <v-form style="width: 100%" @submit.prevent="submit">
Forgot your password? No problem. Just let us know your email <v-container>
address and we will email you a password reset link that will allow <v-row>
you to choose a new one. <v-col cols="12">
</div> <v-text-field
v-model="form.email"
label="Email"
type="email"
autocomplete="username"
autofocus
:error-messages="form.errors.email"
/>
</v-col>
</v-row>
<div <v-row>
v-if="status" <v-col cols="12" class="d-flex justify-end">
class="mb-4 text-sm font-medium text-green-600" <v-btn
> variant="elevated"
{{ status }} size="large"
</div> block
type="submit"
<form @submit.prevent="submit"> :loading="form.processing"
<div> :disabled="form.processing"
<InputLabel for="email" value="Email" /> >
Email Password Reset Link
<TextInput </v-btn>
id="email" </v-col>
type="email" </v-row>
class="mt-1 block w-full" </v-container>
v-model="form.email" </v-form>
required </GlassBox>
autofocus
autocomplete="username"
/>
<InputError class="mt-2" :message="form.errors.email" />
</div>
<div class="mt-4 flex items-center justify-end">
<PrimaryButton
:class="{ 'opacity-25': form.processing }"
:disabled="form.processing"
>
Email Password Reset Link
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+89 -78
View File
@@ -1,20 +1,14 @@
<script setup> <script setup lang="ts">
import Checkbox from '@/Components/Checkbox.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import GuestLayout from '@/Layouts/GuestLayout.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import InputError from '@/Components/InputError.vue'; import { Head, Link, useForm } from "@inertiajs/vue3";
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, Link, useForm } from '@inertiajs/vue3';
defineProps({ defineOptions({ layout: MainLayout });
canResetPassword: {
type: Boolean, defineProps<{
}, canResetPassword: boolean;
status: { status?: string;
type: String, }>();
},
});
const form = useForm({ const form = useForm({
email: '', email: '',
@@ -30,71 +24,88 @@ const submit = () => {
</script> </script>
<template> <template>
<GuestLayout> <Head title="Log in" />
<Head title="Log in" /> <GlassBox title="Welcome Back" blurb="Log in to continue logging your flights.">
<div v-if="status" class="mb-4 text-sm font-medium text-green-600"> <v-alert v-if="status" type="success" class="mb-2">{{ status }}</v-alert>
{{ status }}
</div>
<form @submit.prevent="submit"> <v-form style="width: 100%" @submit.prevent="submit">
<div> <v-container>
<InputLabel for="email" value="Email" /> <v-row>
<v-col cols="12">
<v-text-field
v-model="form.email"
label="Email"
type="email"
autocomplete="username"
autofocus
:error-messages="form.errors.email"
/>
</v-col>
</v-row>
<TextInput <v-row>
id="email" <v-col cols="12">
type="email" <v-text-field
class="mt-1 block w-full" v-model="form.password"
v-model="form.email" label="Password"
required type="password"
autofocus autocomplete="current-password"
autocomplete="username" :error-messages="form.errors.password"
/> />
</v-col>
</v-row>
<InputError class="mt-2" :message="form.errors.email" /> <v-row>
</div> <v-col cols="12">
<v-checkbox
v-model="form.remember"
label="Remember me"
hide-details
/>
</v-col>
</v-row>
<div class="mt-4"> <v-row>
<InputLabel for="password" value="Password" /> <v-col cols="12" class="d-flex align-center justify-end" style="gap: 1rem">
<v-btn
<TextInput block
id="password" variant="elevated"
type="password" size="large"
class="mt-1 block w-full" type="submit"
v-model="form.password" :loading="form.processing"
required :disabled="form.processing"
autocomplete="current-password" >
/> Log in
</v-btn>
<InputError class="mt-2" :message="form.errors.password" /> </v-col>
</div> </v-row>
<v-row>
<div class="mt-4 block"> <v-col cols="12" class="d-flex align-center justify-end" style="gap: 1rem">
<label class="flex items-center"> <Link
<Checkbox name="remember" v-model:checked="form.remember" /> v-if="canResetPassword"
<span class="ms-2 text-sm text-gray-600" :href="route('password.request')"
>Remember me</span style="opacity: 0.7; font-size: 0.9rem"
> >
</label> Forgot your password?
</div> </Link>
</v-col>
<div class="mt-4 flex items-center justify-end"> </v-row>
<Link </v-container>
v-if="canResetPassword" </v-form>
:href="route('password.request')" </GlassBox>
class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
>
Forgot your password?
</Link>
<PrimaryButton
class="ms-4"
:class="{ 'opacity-25': form.processing }"
:disabled="form.processing"
>
Log in
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+92 -92
View File
@@ -1,10 +1,9 @@
<script setup> <script setup lang="ts">
import GuestLayout from '@/Layouts/GuestLayout.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import InputError from '@/Components/InputError.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import InputLabel from '@/Components/InputLabel.vue'; import { Head, Link, useForm } from "@inertiajs/vue3";
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue'; defineOptions({ layout: MainLayout });
import { Head, Link, useForm } from '@inertiajs/vue3';
const form = useForm({ const form = useForm({
name: '', name: '',
@@ -21,93 +20,94 @@ const submit = () => {
</script> </script>
<template> <template>
<GuestLayout> <Head title="Register" />
<Head title="Register" /> <GlassBox title="Create Account" blurb="Start logging your flights today.">
<v-form style="width: 100%" @submit.prevent="submit">
<v-container>
<v-row>
<v-col cols="12">
<v-text-field
v-model="form.name"
label="Name"
autocomplete="name"
autofocus
:error-messages="form.errors.name"
/>
</v-col>
</v-row>
<form @submit.prevent="submit"> <v-row>
<div> <v-col cols="12">
<InputLabel for="name" value="Name" /> <v-text-field
v-model="form.email"
label="Email"
type="email"
autocomplete="username"
:error-messages="form.errors.email"
/>
</v-col>
</v-row>
<TextInput <v-row>
id="name" <v-col cols="12">
type="text" <v-text-field
class="mt-1 block w-full" v-model="form.password"
v-model="form.name" label="Password"
required type="password"
autofocus autocomplete="new-password"
autocomplete="name" :error-messages="form.errors.password"
/> />
</v-col>
</v-row>
<InputError class="mt-2" :message="form.errors.name" /> <v-row>
</div> <v-col cols="12">
<v-text-field
v-model="form.password_confirmation"
label="Confirm Password"
type="password"
autocomplete="new-password"
:error-messages="form.errors.password_confirmation"
/>
</v-col>
</v-row>
<div class="mt-4"> <v-row>
<InputLabel for="email" value="Email" /> <v-col cols="12" class="d-flex align-center justify-end" style="gap: 1rem">
<v-btn
<TextInput variant="elevated"
id="email" size="large"
type="email" block
class="mt-1 block w-full" type="submit"
v-model="form.email" :loading="form.processing"
required :disabled="form.processing"
autocomplete="username" >
/> Register
</v-btn>
<InputError class="mt-2" :message="form.errors.email" /> </v-col>
</div> </v-row>
<v-row>
<div class="mt-4"> <v-col cols="12" class="d-flex align-center justify-end" style="gap: 1rem">
<InputLabel for="password" value="Password" /> <Link :href="route('login')" style="opacity: 0.7; font-size: 0.9rem">
Already registered?
<TextInput </Link>
id="password" </v-col>
type="password" </v-row>
class="mt-1 block w-full" </v-container>
v-model="form.password" </v-form>
required </GlassBox>
autocomplete="new-password"
/>
<InputError class="mt-2" :message="form.errors.password" />
</div>
<div class="mt-4">
<InputLabel
for="password_confirmation"
value="Confirm Password"
/>
<TextInput
id="password_confirmation"
type="password"
class="mt-1 block w-full"
v-model="form.password_confirmation"
required
autocomplete="new-password"
/>
<InputError
class="mt-2"
:message="form.errors.password_confirmation"
/>
</div>
<div class="mt-4 flex items-center justify-end">
<Link
:href="route('login')"
class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
>
Already registered?
</Link>
<PrimaryButton
class="ms-4"
:class="{ 'opacity-25': form.processing }"
:disabled="form.processing"
>
Register
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+79 -79
View File
@@ -1,21 +1,14 @@
<script setup> <script setup lang="ts">
import GuestLayout from '@/Layouts/GuestLayout.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import InputError from '@/Components/InputError.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import InputLabel from '@/Components/InputLabel.vue'; import { Head, useForm } from "@inertiajs/vue3";
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, useForm } from '@inertiajs/vue3';
const props = defineProps({ defineOptions({ layout: MainLayout });
email: {
type: String, const props = defineProps<{
required: true, email: string;
}, token: string;
token: { }>();
type: String,
required: true,
},
});
const form = useForm({ const form = useForm({
token: props.token, token: props.token,
@@ -32,70 +25,77 @@ const submit = () => {
</script> </script>
<template> <template>
<GuestLayout> <Head title="Reset Password" />
<Head title="Reset Password" /> <GlassBox>
<h2>Reset Password</h2>
<p>Choose a new password for your account.</p>
<form @submit.prevent="submit"> <v-form style="width: 100%" @submit.prevent="submit">
<div> <v-container>
<InputLabel for="email" value="Email" /> <v-row>
<v-col cols="12">
<v-text-field
v-model="form.email"
label="Email"
type="email"
autocomplete="username"
autofocus
:error-messages="form.errors.email"
/>
</v-col>
</v-row>
<TextInput <v-row>
id="email" <v-col cols="12">
type="email" <v-text-field
class="mt-1 block w-full" v-model="form.password"
v-model="form.email" label="Password"
required type="password"
autofocus autocomplete="new-password"
autocomplete="username" :error-messages="form.errors.password"
/> />
</v-col>
</v-row>
<InputError class="mt-2" :message="form.errors.email" /> <v-row>
</div> <v-col cols="12">
<v-text-field
v-model="form.password_confirmation"
label="Confirm Password"
type="password"
autocomplete="new-password"
:error-messages="form.errors.password_confirmation"
/>
</v-col>
</v-row>
<div class="mt-4"> <v-row>
<InputLabel for="password" value="Password" /> <v-col cols="12" class="d-flex justify-end">
<v-btn
<TextInput size="large"
id="password" type="submit"
type="password" :loading="form.processing"
class="mt-1 block w-full" :disabled="form.processing"
v-model="form.password" >
required Reset Password
autocomplete="new-password" </v-btn>
/> </v-col>
</v-row>
<InputError class="mt-2" :message="form.errors.password" /> </v-container>
</div> </v-form>
</GlassBox>
<div class="mt-4">
<InputLabel
for="password_confirmation"
value="Confirm Password"
/>
<TextInput
id="password_confirmation"
type="password"
class="mt-1 block w-full"
v-model="form.password_confirmation"
required
autocomplete="new-password"
/>
<InputError
class="mt-2"
:message="form.errors.password_confirmation"
/>
</div>
<div class="mt-4 flex items-center justify-end">
<PrimaryButton
:class="{ 'opacity-25': form.processing }"
:disabled="form.processing"
>
Reset Password
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+57 -46
View File
@@ -1,14 +1,14 @@
<script setup> <script setup lang="ts">
import { computed } from 'vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import GuestLayout from '@/Layouts/GuestLayout.vue'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import PrimaryButton from '@/Components/PrimaryButton.vue'; import { Head, Link, useForm } from "@inertiajs/vue3";
import { Head, Link, useForm } from '@inertiajs/vue3'; import { computed } from "vue";
const props = defineProps({ defineOptions({ layout: MainLayout });
status: {
type: String, const props = defineProps<{
}, status?: string;
}); }>();
const form = useForm({}); const form = useForm({});
@@ -16,46 +16,57 @@ const submit = () => {
form.post(route('verification.send')); form.post(route('verification.send'));
}; };
const verificationLinkSent = computed( const verificationLinkSent = computed(() => props.status === 'verification-link-sent');
() => props.status === 'verification-link-sent',
);
</script> </script>
<template> <template>
<GuestLayout> <Head title="Email Verification" />
<Head title="Email Verification" /> <GlassBox>
<h2>Verify Your Email</h2>
<p>Thanks for signing up! Please verify your email address by clicking the link we sent you. If you didn't receive it, we can send another.</p>
<div class="mb-4 text-sm text-gray-600"> <v-alert v-if="verificationLinkSent" type="success" class="mb-2">
Thanks for signing up! Before getting started, could you verify your A new verification link has been sent to your email address.
email address by clicking on the link we just emailed to you? If you </v-alert>
didn't receive the email, we will gladly send you another.
</div>
<div <v-form style="width: 100%" @submit.prevent="submit">
class="mb-4 text-sm font-medium text-green-600" <v-container>
v-if="verificationLinkSent" <v-row>
> <v-col cols="12" class="d-flex align-center justify-space-between">
A new verification link has been sent to the email address you <v-btn
provided during registration. size="large"
</div> type="submit"
:loading="form.processing"
:disabled="form.processing"
>
Resend Verification Email
</v-btn>
<form @submit.prevent="submit"> <Link
<div class="mt-4 flex items-center justify-between"> :href="route('logout')"
<PrimaryButton method="post"
:class="{ 'opacity-25': form.processing }" as="button"
:disabled="form.processing" style="opacity: 0.7; font-size: 0.9rem"
> >
Resend Verification Email Log Out
</PrimaryButton> </Link>
</v-col>
<Link </v-row>
:href="route('logout')" </v-container>
method="post" </v-form>
as="button" </GlassBox>
class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
>Log Out</Link
>
</div>
</form>
</GuestLayout>
</template> </template>
<style scoped>
h2 {
font-size: 2rem;
text-align: center;
}
p {
text-align: center;
width: 100%;
opacity: 0.7;
margin-bottom: 1rem;
}
</style>
+44 -25
View File
@@ -1,30 +1,49 @@
<script setup> <script setup lang="ts">
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout.vue'; import MainLayout from "@/Layouts/MainLayout.vue";
import { Head } from '@inertiajs/vue3'; import GlassBox from "@/Components/FlightsGoneBy/GlassBox.vue";
import { Head, Link } from "@inertiajs/vue3";
import { usePage } from "@inertiajs/vue3";
import { computed } from "vue";
import {SharedProps} from "@/Types/types";
import { router } from "@inertiajs/vue3";
defineOptions({ layout: MainLayout });
const page = usePage<SharedProps>();
const name = computed(() => page?.props?.auth?.user?.name || 'there');
</script> </script>
<template> <template>
<Head title="Dashboard" /> <Head title="Dashboard" />
<GlassBox :title="`Hey there ${name} 👋`" blurb="What would you like to do?">
<AuthenticatedLayout> <v-container>
<template #header> <v-row>
<h2 <v-col cols="12" md="6">
class="text-xl font-semibold leading-tight text-gray-800" <v-btn size="large" block href="#">
> Add a Flight
Dashboard </v-btn>
</h2> </v-col>
</template> <v-col cols="12" md="6">
<v-btn size="large" block href="#">
<div class="py-12"> Edit Flights
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8"> </v-btn>
<div </v-col>
class="overflow-hidden bg-white shadow-sm sm:rounded-lg" <v-col cols="12" md="6">
> <v-btn size="large" block :href="route('import.fr24')">
<div class="p-6 text-gray-900"> Import from FR24
You're logged in! </v-btn>
</div> </v-col>
</div> <v-col cols="12" md="6">
</div> <v-btn size="large" block href="#">
</div> View Profile
</AuthenticatedLayout> </v-btn>
</v-col>
<v-col cols="12">
<v-btn size="large" block @click="router.post(route('logout'))">
Log Out
</v-btn>
</v-col>
</v-row>
</v-container>
</GlassBox>
</template> </template>
+5 -4
View File
@@ -94,9 +94,10 @@ function submit() {
<template> <template>
<Head title="Reconcile"></Head> <Head title="Reconcile"></Head>
<GlassBox> <GlassBox
<h2>Reconcile {{flight.flight_number.length > 1 ? 'Flight ' + flight.flight_number: 'This Flight'}}</h2> :title="flight.flight_number.length > 1 ? 'Reconcile ' + flight.flight_number : 'Reconcile This Flight'"
<p>Review and correct your imported flight details before they're saved.</p> blurb="Review and correct your imported flight details before they're saved."
>
<v-form style="width: 100%"> <v-form style="width: 100%">
<v-container> <v-container>
@@ -193,7 +194,7 @@ function submit() {
<!-- Submit --> <!-- Submit -->
<v-row> <v-row>
<v-col cols="12" class="d-flex justify-end"> <v-col cols="12" class="d-flex justify-end">
<v-btn size="large" :loading="form.processing" :disabled="form.processing" @click="submit"> <v-btn block size="large" :loading="form.processing" :disabled="form.processing" @click="submit">
Save Flight Save Flight
</v-btn> </v-btn>
</v-col> </v-col>