patches v1.0.2 #37
12 changed files with 26 additions and 9 deletions
|
@ -1,4 +1,5 @@
|
||||||
VITE_SERVER_ADDRESS = backend_url #ohne pfad
|
VITE_SERVER_ADDRESS = backend_url #ohne pfad
|
||||||
|
VITE_APP_NAME_OVERWRITE = Mitgliederverwaltung # overwrites FF Admin
|
||||||
VITE_IMPRINT_LINK = https://mywebsite-imprint-url
|
VITE_IMPRINT_LINK = https://mywebsite-imprint-url
|
||||||
VITE_PRIVACY_LINK = https://mywebsite-privacy-url
|
VITE_PRIVACY_LINK = https://mywebsite-privacy-url
|
||||||
VITE_CUSTOM_LOGIN_MESSAGE = betrieben von xy
|
VITE_CUSTOM_LOGIN_MESSAGE = betrieben von xy
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
VITE_SERVER_ADDRESS = __SERVERADDRESS__
|
VITE_SERVER_ADDRESS = __SERVERADDRESS__
|
||||||
|
VITE_APP_NAME_OVERWRITE = __APPNAMEOVERWRITE__
|
||||||
VITE_IMPRINT_LINK = __IMPRINTLINK__
|
VITE_IMPRINT_LINK = __IMPRINTLINK__
|
||||||
VITE_PRIVACY_LINK = __PRIVACYLINK__
|
VITE_PRIVACY_LINK = __PRIVACYLINK__
|
||||||
VITE_CUSTOM_LOGIN_MESSAGE = __CUSTOMLOGINMESSAGE__
|
VITE_CUSTOM_LOGIN_MESSAGE = __CUSTOMLOGINMESSAGE__
|
|
@ -32,6 +32,7 @@ services:
|
||||||
|
|
||||||
#environment:
|
#environment:
|
||||||
# - SERVERADDRESS=<backend_url (https://... | http://...)> # wichtig: ohne pfad
|
# - SERVERADDRESS=<backend_url (https://... | http://...)> # wichtig: ohne pfad
|
||||||
|
# - APPNAMEOVERWRITE=Mitgliederverwaltung # ersetzt den Namen FF-Admin auf der Login-Seite und sonstigen Positionen in der Oberfläche
|
||||||
# - IMPRINTLINK=https://mywebsite-imprint-url
|
# - IMPRINTLINK=https://mywebsite-imprint-url
|
||||||
# - PRIVACYLINK=https://mywebsite-privacy-url
|
# - PRIVACYLINK=https://mywebsite-privacy-url
|
||||||
# - CUSTOMLOGINMESSAGE=betrieben von xy
|
# - CUSTOMLOGINMESSAGE=betrieben von xy
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# FF Admin
|
# FF Admin
|
||||||
|
|
||||||
## FF Admin ist eine Verwaltungsoberfläche für die Feuerwehr:
|
## FF Admin ist eine Verwaltungsoberfläche für die Feuerwehr oder andere Vereine:
|
||||||
|
|
||||||
FF Admin bietet folgende Module:
|
FF Admin bietet folgende Module:
|
||||||
- Mitgliederverwaltung
|
- Mitgliederverwaltung
|
||||||
|
@ -23,3 +23,6 @@ FF Admin ist in Verein, Wehr, Einstellungen und Nutzerverwaltung getrennt.
|
||||||
Die den Modulen zugrunde liegenden Daten können in den Einstellungen gesetzt werden.
|
Die den Modulen zugrunde liegenden Daten können in den Einstellungen gesetzt werden.
|
||||||
|
|
||||||
Fast alle Daten lassen sich einstellen, damit es keine Einschränkungen in der Auswahl von Werten... gibt. Diese Modularität muss allerdings bei einigen Modulen gesondert eingestellt werden.
|
Fast alle Daten lassen sich einstellen, damit es keine Einschränkungen in der Auswahl von Werten... gibt. Diese Modularität muss allerdings bei einigen Modulen gesondert eingestellt werden.
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
Damit FF Admin auch für andere Vereine genutzt werden kann, muss keine erweiterte Konfiguration vorgenommen werden. Am besten ist es alle nicht benötigten Module in der Berechtigungsverwaltung zu deaktivieren. So wird normalerweise der Abschnitt Wehr nicht außerhalb der Feuerwehr benötigt. So müssen hier lediglich keine Berechtigungen vergeben werden und das Modul ist außer für Administratoren oder Owner nicht sichtbar.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
keys="SERVERADDRESS IMPRINTLINK PRIVACYLINK CUSTOMLOGINMESSAGE"
|
keys="SERVERADDRESS APPNAMEOVERWRITE IMPRINTLINK PRIVACYLINK CUSTOMLOGINMESSAGE"
|
||||||
|
|
||||||
# Replace env vars in files served by NGINX
|
# Replace env vars in files served by NGINX
|
||||||
for file in /usr/share/nginx/html/assets/config-*.js
|
for file in /usr/share/nginx/html/assets/config-*.js
|
||||||
|
|
|
@ -5,10 +5,16 @@
|
||||||
<a v-if="config.privacy_link" :href="config.privacy_link" target="_blank">Impressum</a>
|
<a v-if="config.privacy_link" :href="config.privacy_link" target="_blank">Impressum</a>
|
||||||
</div>
|
</div>
|
||||||
<p v-if="config.custom_login_message">{{ config.custom_login_message }}</p>
|
<p v-if="config.custom_login_message">{{ config.custom_login_message }}</p>
|
||||||
<a href="https://jk-effects.com" target="_blank"> © Admin-Portal by JK Effects </a>
|
<p>
|
||||||
|
©
|
||||||
|
<a href="https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin" target="_blank">Admin-Portal</a>
|
||||||
|
by
|
||||||
|
<a href="https://jk-effects.com" target="_blank">JK Effects</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { config } from '../config'
|
import { config } from '@/config'
|
||||||
</script>
|
</script>
|
|
@ -2,7 +2,7 @@
|
||||||
<header class="flex flex-row h-16 min-h-16 justify-between p-3 md:px-5 bg-white shadow-sm">
|
<header class="flex flex-row h-16 min-h-16 justify-between p-3 md:px-5 bg-white shadow-sm">
|
||||||
<RouterLink to="/" class="flex flex-row gap-2 align-bottom w-fit h-full">
|
<RouterLink to="/" class="flex flex-row gap-2 align-bottom w-fit h-full">
|
||||||
<img src="/Logo.png" alt="LOGO" class="h-full w-auto" />
|
<img src="/Logo.png" alt="LOGO" class="h-full w-auto" />
|
||||||
<h1 v-if="false" class="font-bold text-3xl w-fit whitespace-nowrap">FF Admin</h1>
|
<h1 v-if="false" class="font-bold text-3xl w-fit whitespace-nowrap">{{config.app_name_overwrite ?? "FF Admin"}}</h1>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
<div class="flex flex-row gap-2 items-center">
|
<div class="flex flex-row gap-2 items-center">
|
||||||
<div v-if="authCheck" class="hidden md:flex flex-row gap-2 h-full align-middle">
|
<div v-if="authCheck" class="hidden md:flex flex-row gap-2 h-full align-middle">
|
||||||
|
@ -30,6 +30,7 @@ import { useAuthStore } from "@/stores/auth";
|
||||||
import { useNavigationStore } from "@/stores/admin/navigation";
|
import { useNavigationStore } from "@/stores/admin/navigation";
|
||||||
import TopLevelLink from "./admin/TopLevelLink.vue";
|
import TopLevelLink from "./admin/TopLevelLink.vue";
|
||||||
import UserMenu from "./UserMenu.vue";
|
import UserMenu from "./UserMenu.vue";
|
||||||
|
import { config } from "@/config"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -166,7 +166,7 @@ export default defineComponent({
|
||||||
preferred: formData.preferred.checked,
|
preferred: formData.preferred.checked,
|
||||||
mobile: formData.mobile?.value,
|
mobile: formData.mobile?.value,
|
||||||
email: formData.email?.value,
|
email: formData.email?.value,
|
||||||
postalCode: formData.postalCode.value,
|
postalCode: formData.postalCode?.value,
|
||||||
city: formData.city?.value,
|
city: formData.city?.value,
|
||||||
street: formData.street?.value,
|
street: formData.street?.value,
|
||||||
streetNumber: formData.streetNumber?.value,
|
streetNumber: formData.streetNumber?.value,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
export interface Config {
|
export interface Config {
|
||||||
server_address: string;
|
server_address: string;
|
||||||
|
app_name_overwrite: string;
|
||||||
imprint_link: string;
|
imprint_link: string;
|
||||||
privacy_link: string;
|
privacy_link: string;
|
||||||
custom_login_message: string;
|
custom_login_message: string;
|
||||||
|
@ -7,6 +8,7 @@ export interface Config {
|
||||||
|
|
||||||
export const config: Config = {
|
export const config: Config = {
|
||||||
server_address: import.meta.env.VITE_SERVER_ADDRESS,
|
server_address: import.meta.env.VITE_SERVER_ADDRESS,
|
||||||
|
app_name_overwrite: import.meta.env.VITE_APP_NAME_OVERWRITE,
|
||||||
imprint_link: import.meta.env.VITE_IMPRINT_LINK,
|
imprint_link: import.meta.env.VITE_IMPRINT_LINK,
|
||||||
privacy_link: import.meta.env.VITE_PRIVACY_LINK,
|
privacy_link: import.meta.env.VITE_PRIVACY_LINK,
|
||||||
custom_login_message: import.meta.env.VITE_CUSTOM_LOGIN_MESSAGE,
|
custom_login_message: import.meta.env.VITE_CUSTOM_LOGIN_MESSAGE,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div class="max-w-md w-full space-y-8 pb-20">
|
<div class="max-w-md w-full space-y-8 pb-20">
|
||||||
<div class="flex flex-col items-center gap-4">
|
<div class="flex flex-col items-center gap-4">
|
||||||
<img src="/Logo.png" alt="LOGO" class="h-36" />
|
<img src="/Logo.png" alt="LOGO" class="h-36" />
|
||||||
<h2 class="text-center text-4xl font-extrabold text-gray-900">FF Admin</h2>
|
<h2 class="text-center text-4xl font-extrabold text-gray-900">{{config.app_name_overwrite ?? "FF Admin"}}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="flex flex-col gap-2" @submit.prevent="login">
|
<form class="flex flex-col gap-2" @submit.prevent="login">
|
||||||
|
@ -48,6 +48,7 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
|
||||||
import FailureXMark from "@/components/FailureXMark.vue";
|
import FailureXMark from "@/components/FailureXMark.vue";
|
||||||
import { resetAllPiniaStores } from "@/helpers/piniaReset";
|
import { resetAllPiniaStores } from "@/helpers/piniaReset";
|
||||||
import FormBottomBar from "@/components/FormBottomBar.vue";
|
import FormBottomBar from "@/components/FormBottomBar.vue";
|
||||||
|
import { config } from "@/config"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<SidebarLayout>
|
<SidebarLayout>
|
||||||
<template #sidebar>
|
<template #sidebar>
|
||||||
<SidebarTemplate mainTitle="Mein Account" topTitle="FF Admin" :showTopList="isOwner">
|
<SidebarTemplate mainTitle="Mein Account" :topTitle="config.app_name_overwrite ?? 'FF Admin'" :showTopList="isOwner">
|
||||||
<template v-if="isOwner" #topList>
|
<template v-if="isOwner" #topList>
|
||||||
<RoutingLink
|
<RoutingLink
|
||||||
title="Administration"
|
title="Administration"
|
||||||
|
@ -38,6 +38,7 @@ import SidebarTemplate from "@/templates/Sidebar.vue";
|
||||||
import RoutingLink from "@/components/admin/RoutingLink.vue";
|
import RoutingLink from "@/components/admin/RoutingLink.vue";
|
||||||
import { RouterView } from "vue-router";
|
import { RouterView } from "vue-router";
|
||||||
import { useAbilityStore } from "@/stores/ability";
|
import { useAbilityStore } from "@/stores/ability";
|
||||||
|
import { config } from "@/config"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<template #sidebar>
|
<template #sidebar>
|
||||||
<SidebarTemplate mainTitle="Dokumentation">
|
<SidebarTemplate mainTitle="Dokumentation">
|
||||||
<template #list>
|
<template #list>
|
||||||
<RoutingLink title="FF Admin" :link="{ name: 'docs-page', params: { page: 'ff-admin' } }" :active="page == 'ff-admin'" />
|
<RoutingLink title="Admin" :link="{ name: 'docs-page', params: { page: 'ff-admin' } }" :active="page == 'ff-admin'" />
|
||||||
<RoutingLink title="Mitgliederverwaltung" :link="{ name: 'docs-page', params: { page: 'member' } }" :active="page == 'member'" />
|
<RoutingLink title="Mitgliederverwaltung" :link="{ name: 'docs-page', params: { page: 'member' } }" :active="page == 'member'" />
|
||||||
<RoutingLink title="Kalendar" :link="{ name: 'docs-page', params: { page: 'calendar' } }" :active="page == 'calendar'" />
|
<RoutingLink title="Kalendar" :link="{ name: 'docs-page', params: { page: 'calendar' } }" :active="page == 'calendar'" />
|
||||||
<RoutingLink title="Newsletter-Versand" :link="{ name: 'docs-page', params: { page: 'newsletter' } }" :active="page == 'newsletter'" />
|
<RoutingLink title="Newsletter-Versand" :link="{ name: 'docs-page', params: { page: 'newsletter' } }" :active="page == 'newsletter'" />
|
||||||
|
|
Loading…
Reference in a new issue