Compare commits

...

3 Commits

Author SHA1 Message Date
philipp lang 579f35beb9 Fix member deletion button
continuous-integration/drone/push Build is passing Details
2023-07-15 17:37:07 +02:00
philipp lang aa9b782897 Mark joined_at field as required 2023-07-15 17:30:58 +02:00
philipp lang 8ba433c6b8 update page components 2023-07-15 17:28:19 +02:00
14 changed files with 61 additions and 48 deletions

View File

@ -42,6 +42,8 @@ class LoginController extends Controller
public function showLoginForm(): Response public function showLoginForm(): Response
{ {
session()->put('title', 'Anmelden');
return \Inertia::render('VLogin'); return \Inertia::render('VLogin');
} }

View File

@ -12,6 +12,8 @@ class InitializeFormAction
public function asController(): Response public function asController(): Response
{ {
session()->put('title', 'Einrichtung');
return Inertia::render('Initialize/VIndex'); return Inertia::render('Initialize/VIndex');
} }
} }

View File

@ -43,6 +43,7 @@ class MemberController extends Controller
'without_education_at' => null, 'without_education_at' => null,
'without_efz_at' => null, 'without_efz_at' => null,
'more_ps_at' => null, 'more_ps_at' => null,
'joined_at' => now()->format('Y-m-d'),
], ],
'mode' => 'create', 'mode' => 'create',
'meta' => MemberResource::meta(), 'meta' => MemberResource::meta(),

3
resources/js/app.js vendored
View File

@ -1,5 +1,5 @@
import {createApp, h, defineAsyncComponent} from 'vue'; import {createApp, h, defineAsyncComponent} from 'vue';
import {createInertiaApp, Link as ILink} from '@inertiajs/vue3'; import {Head, createInertiaApp, Link as ILink} from '@inertiajs/vue3';
import axios from 'axios'; import axios from 'axios';
import VueAxios from 'vue-axios'; import VueAxios from 'vue-axios';
import {Plugin as FloatingVue, options as FloatingVueOptions} from './lib/floatingVue.js'; import {Plugin as FloatingVue, options as FloatingVueOptions} from './lib/floatingVue.js';
@ -41,6 +41,7 @@ createInertiaApp({
.use(VueAxios, axios) .use(VueAxios, axios)
.use(PiniaVuePlugin) .use(PiniaVuePlugin)
.component('ILink', ILink) .component('ILink', ILink)
.component('Head', Head)
.mixin(hasModule) .mixin(hasModule)
.mixin(hasFlash); .mixin(hasFlash);

View File

@ -0,0 +1,10 @@
<template>
<div class="h-24 p-6 md:px-10 bg-primary-800 flex justify-between items-center w-full">
<span class="text-primary-500 text-xl"><slot></slot></span>
<img src="../../../img/dpsg.gif" class="w-24" />
</div>
</template>
<script>
export default {};
</script>

View File

@ -0,0 +1,19 @@
<template>
<div class="min-w-[16rem] sm:min-w-[18rem] md:min-w-[24rem] bg-gray-800 rounded-xl overflow-hidden shadow-lg" :class="{'p-6 md:p-10': banner === false}">
<slot name="heading"></slot>
<div :class="{'p-6 md:p-10': banner === true}">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
props: {
banner: {
type: Boolean,
default: () => false,
},
},
};
</script>

View File

@ -23,7 +23,6 @@
<script> <script>
import {menuStore} from '../../stores/menuStore.js'; import {menuStore} from '../../stores/menuStore.js';
import {Head} from '@inertiajs/vue3';
export default { export default {
inheritAttrs: false, inheritAttrs: false,
@ -39,8 +38,5 @@ export default {
menuStore: menuStore(), menuStore: menuStore(),
}; };
}, },
components: {
Head,
},
}; };
</script> </script>

View File

@ -1,18 +1,17 @@
<template> <template>
<Head :title="$page.props.title"></Head>
<v-notification class="fixed z-40 right-0 bottom-0 mb-3 mr-3"></v-notification> <v-notification class="fixed z-40 right-0 bottom-0 mb-3 mr-3"></v-notification>
<div class="flex justify-center items-center grow min-h-full"> <div class="flex justify-center items-center grow min-h-full px-6">
<div class="w-64 sm:w-72 md:w-96 bg-gray-800 rounded-xl overflow-hidden shadow-lg"> <slot></slot>
<slot></slot>
</div>
</div> </div>
</template> </template>
<script> <script>
import VNotification from '../components/VNotification.vue'; import {defineAsyncComponent} from 'vue';
export default { export default {
components: { components: {
VNotification, VNotification: defineAsyncComponent(() => import('../components/VNotification.vue')),
}, },
}; };
</script> </script>

View File

@ -1,18 +0,0 @@
<template>
<div id="app" class="bg-gray-900 font-sans flex flex-col grow items-center justify-center p-6">
<v-notification class="fixed z-40 right-0 bottom-0 mb-3 mr-3"></v-notification>
<div class="bg-gray-800 rounded-xl overflow-hidden shadow-lg p-6">
<slot></slot>
</div>
</div>
</template>
<script>
import {defineAsyncComponent} from 'vue';
export default {
components: {
VNotification: defineAsyncComponent(() => import('../components/VNotification.vue')),
},
};
</script>

View File

@ -1,5 +1,5 @@
<template> <template>
<div> <page-full-layout>
<div v-if="step === 0"> <div v-if="step === 0">
<page-full-heading>Willkommen im Adrema-Setup.<br /></page-full-heading> <page-full-heading>Willkommen im Adrema-Setup.<br /></page-full-heading>
<div class="prose prose-invert"> <div class="prose prose-invert">
@ -132,16 +132,16 @@
</div> </div>
<a href="/" class="mt-5 inline-block btn btn-primary">Abschließen</a> <a href="/" class="mt-5 inline-block btn btn-primary">Abschließen</a>
</div> </div>
</div> </page-full-layout>
</template> </template>
<script> <script>
import InstallLayout from '../../layouts/InstallLayout.vue'; import FullLayout from '../../layouts/FullLayout.vue';
import hasFlash from '../../mixins/hasFlash.js'; import hasFlash from '../../mixins/hasFlash.js';
import debounce from 'lodash/debounce'; import debounce from 'lodash/debounce';
export default { export default {
layout: InstallLayout, layout: FullLayout,
mixins: [hasFlash], mixins: [hasFlash],

View File

@ -1,15 +1,16 @@
<template> <template>
<form @submit.prevent="submit"> <page-full-layout banner>
<div class="h-24 p-6 md:px-10 bg-primary-800 flex justify-between items-center w-full"> <template #heading>
<span class="text-primary-500 text-xl">Login</span> <page-full-heading-banner>Login</page-full-heading-banner>
<img src="../../img/dpsg.gif" class="w-24" /> </template>
</div> <form @submit.prevent="submit">
<div class="p-6 md:p-10 grid gap-5"> <div class="grid gap-5">
<f-text id="email" name="email" label="E-Mail-Adresse" v-model="values.email"></f-text> <f-text id="email" name="email" label="E-Mail-Adresse" v-model="values.email"></f-text>
<f-text id="password" name="password" type="password" label="Passwort" v-model="values.password"></f-text> <f-text id="password" name="password" type="password" label="Passwort" v-model="values.password"></f-text>
<button type="submit" class="btn btn-primary">Login</button> <button type="submit" class="btn btn-primary">Login</button>
</div> </div>
</form> </form>
</page-full-layout>
</template> </template>
<script> <script>

View File

@ -58,7 +58,7 @@
<f-select :options="meta.subscriptions" id="subscription_id" v-model="inner.subscription_id" label="Beitrag" name="subscription_id" size="sm"></f-select> <f-select :options="meta.subscriptions" id="subscription_id" v-model="inner.subscription_id" label="Beitrag" name="subscription_id" size="sm"></f-select>
<f-switch id="has_nami" size="sm" v-model="inner.has_nami" label="In Nami eintragen"></f-switch> <f-switch id="has_nami" size="sm" v-model="inner.has_nami" label="In Nami eintragen"></f-switch>
<f-switch id="send_newspaper" v-model="inner.send_newspaper" label="Mittendrin versenden" size="sm"></f-switch> <f-switch id="send_newspaper" v-model="inner.send_newspaper" label="Mittendrin versenden" size="sm"></f-switch>
<f-text class="sm:col-span-2" type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum" size="sm"></f-text> <f-text class="sm:col-span-2" type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum" size="sm" required></f-text>
<f-textarea rows="3" id="comment" class="col-span-2" v-model="inner.comment" label="Kommentar" size="sm"></f-textarea> <f-textarea rows="3" id="comment" class="col-span-2" v-model="inner.comment" label="Kommentar" size="sm"></f-textarea>
<div class="contents" v-if="mode === 'create'"> <div class="contents" v-if="mode === 'create'">
<f-select <f-select

View File

@ -14,8 +14,8 @@
Dieses Mitglied ist in NaMi vorhanden und wird daher in NaMi abgemeldet werden. Sofern "Datenweiterverwendung" eingeschaltet ist, wird das Mitglied auf inaktiv gesetzt. Dieses Mitglied ist in NaMi vorhanden und wird daher in NaMi abgemeldet werden. Sofern "Datenweiterverwendung" eingeschaltet ist, wird das Mitglied auf inaktiv gesetzt.
</ui-note> </ui-note>
<div class="grid grid-cols-2 gap-3 mt-6"> <div class="grid grid-cols-2 gap-3 mt-6">
<a href="#" @click.prevent="deleting.resolve()" class="text-center btn btn-danger">Mitglied loschen</a> <a href="#" @click.prevent="deleting.resolve" class="text-center btn btn-danger">Mitglied loschen</a>
<a href="#" @click.prevent="deleting.reject()" class="text-center btn btn-primary">Abbrechen</a> <a href="#" @click.prevent="deleting.reject" class="text-center btn btn-primary">Abbrechen</a>
</div> </div>
</div> </div>
</ui-popup> </ui-popup>

View File

@ -10,7 +10,7 @@
></a> ></a>
<a href="#" v-tooltip="`Mitgliedschaften`" @click.prevent="$emit('sidebar', 'membership.index')" class="inline-flex btn btn-info btn-sm"><ui-sprite src="user"></ui-sprite></a> <a href="#" v-tooltip="`Mitgliedschaften`" @click.prevent="$emit('sidebar', 'membership.index')" class="inline-flex btn btn-info btn-sm"><ui-sprite src="user"></ui-sprite></a>
<a :href="member.efz_link" v-show="member.efz_link" class="inline-flex btn btn-info btn-sm" v-tooltip="`EFZ Formular`"><ui-sprite src="report"></ui-sprite></a> <a :href="member.efz_link" v-show="member.efz_link" class="inline-flex btn btn-info btn-sm" v-tooltip="`EFZ Formular`"><ui-sprite src="report"></ui-sprite></a>
<i-link href="#" @click.prevent="$emit('remove')" class="inline-flex btn btn-danger btn-sm" v-tooltip="`Entfernen`"><ui-sprite src="trash"></ui-sprite></i-link> <a href="#" @click.prevent="$emit('remove')" class="inline-flex btn btn-danger btn-sm" v-tooltip="`Entfernen`"><ui-sprite src="trash"></ui-sprite></a>
</div> </div>
</template> </template>