5 Commits

Author SHA1 Message Date
Adrian Zürcher
39e5479947 fix wrong filter parameter 2025-11-16 08:42:54 +01:00
Adrian Zürcher
5c15fb5599 change padding to userfriendlier size on phone close #23 2025-11-16 08:42:28 +01:00
Adrian Zürcher
dce451bfc2 add new page header and decrease marging 2025-11-16 08:40:42 +01:00
Adrian Zürcher
bba4486136 fix translation 2025-11-16 08:39:31 +01:00
Adrian Zürcher
a18b01450d fix wrong input field to select clos #25 2025-11-16 08:39:17 +01:00
19 changed files with 370 additions and 326 deletions

View File

@@ -86,9 +86,9 @@ members: Mitglider
attendanceTable: Anweseheits Tabelle
excursionTable: Usflugs Tabelle
updated: aktualisiert
events: Veranstalige
eventNameIsRequired: Verastatigsname isch erforderlich
eventName: Verastatigsname
events: Verastautige
eventNameIsRequired: Verastautigssname isch erforderlich
eventName: Verastautigssname
attendees: Teilnähmer
now: Jetzt
addToEvent: Füge zu Veranstautig

View File

@@ -60,12 +60,17 @@
filled
v-model="localMember.email"
></q-input>
<q-input
<q-select
class="q-ml-md col-5"
:label="$t('group')"
:options="props.group"
filled
emit-value
map-options
option-value="name"
option-label="name"
v-model="localMember.group"
></q-input>
></q-select>
<q-select
class="q-ml-md col-5"
:label="$t('responsible')"
@@ -118,6 +123,9 @@ const props = defineProps({
responsibles: {
type: Object as PropType<Members>,
},
group: {
type: Array,
},
});
const emit = defineEmits(['update']);

View File

@@ -1,11 +1,11 @@
<template>
<q-page>
<h4 class="text-primary text-bold text-center">{{ $t('events') }}</h4>
<SiteTitle :title="$t('events')" />
<EventsTable />
</q-page>
</template>
<script setup lang="ts">
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
import EventsTable from 'src/vueLib/tables/events/EventsTable.vue';
</script>

View File

@@ -1,10 +1,11 @@
<template>
<q-page>
<h4 class="text-primary text-bold text-center">{{ $t('groups') }}</h4>
<SiteTitle :title="$t('groups')" />
<GroupTable />
</q-page>
</template>
<script setup lang="ts">
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
import GroupTable from 'src/vueLib/tables/group/GroupTable.vue';
</script>

View File

@@ -1,10 +1,13 @@
<template>
<q-page>
<h4 class="text-primary text-bold text-center">{{ $t('members') }}</h4>
<SiteTitle :title="$t('members')" />
<div class="q-pa-md">
<MembersTable />
</div>
</q-page>
</template>
<script setup lang="ts">
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
import MembersTable from 'src/vueLib/tables/members/MembersTable.vue';
</script>

View File

@@ -1,11 +1,11 @@
<template>
<q-page>
<h4 class="text-primary text-bold text-center">{{ $t('responsibles') }}</h4>
<SiteTitle :title="$t('responsibles')" />
<ResponsibleTable />
</q-page>
</template>
<script setup lang="ts">
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
import ResponsibleTable from 'src/vueLib/tables/responsible/ResponsibleTable.vue';
</script>

View File

@@ -1,6 +1,5 @@
<template>
<h4 class="text-primary text-bold text-center">{{ $t('userSettings') }}</h4>
<SiteTitle :title="$t('userSettings')" />
<div class="text-h2 flex flex-center">
<q-card class="q-gutter-md">
<div>
@@ -152,6 +151,7 @@ import { useNotify } from 'src/vueLib/general/useNotify';
import { type Settings } from 'src/vueLib/models/settings';
import { useUserStore } from 'src/vueLib/login/userStore';
import { setLocalSettings } from 'src/localstorage/localStorage';
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
const { NotifyResponse } = useNotify();
const colorGroup = ref(false);

View File

@@ -1,6 +1,5 @@
<template>
<h4 class="text-primary text-bold text-center">{{ $t('userSettings') }}</h4>
<SiteTitle :title="$t('userSettings')" />
<div class="q-pa-md">
<div class="q-gutter-y-md">
<q-card>
@@ -35,6 +34,7 @@
import { ref } from 'vue';
import UserTable from 'src/vueLib/tables/users/UserTable.vue';
import RoleTable from 'src/vueLib/tables/roles/RoleTable.vue';
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
const tab = ref('users');
</script>

View File

@@ -25,12 +25,12 @@ const routes: RouteRecordRaw[] = [
},
{
path: 'responsible',
component: () => import('pages/ResponsibleTable.vue'),
component: () => import('src/pages/ResponsibleTable.vue'),
meta: { requiresAuth: true, requiresAdmin: true },
},
{
path: 'group',
component: () => import('pages/GroupTable.vue'),
component: () => import('src/pages/GroupTable.vue'),
meta: { requiresAuth: true, requiresAdmin: true },
},
{

View File

@@ -25,7 +25,7 @@
<q-separator color="black" />
<!-- Content Slot -->
<div class="scrollArea">
<div class="scrollArea" :style="'padding: ' + props.innerPadding + 'px'">
<slot />
</div>
@@ -48,6 +48,7 @@ const props = defineProps({
headerTitle: { type: String, default: '' },
width: { type: Number, default: 400 },
height: { type: Number, default: 250 },
innerPadding: { type: Number, default: 16 },
});
// Fullscreen toggle
@@ -153,7 +154,6 @@ const cardStyle = computed(() => {
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
padding: 16px;
}
/* Resize handle in bottom right */

View File

@@ -0,0 +1,12 @@
<template>
<h4 class="text-primary text-bold text-center" :style="{ margin: props.marging + 'px' }">
{{ props.title }}
</h4>
</template>
<script setup lang="ts">
const props = defineProps({
title: { type: String },
marging: { type: Number, default: 28 },
});
</script>

View File

@@ -1,5 +1,4 @@
<template>
<div class="q-pa-md">
<q-table
flat
bordered
@@ -19,6 +18,7 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<template v-slot:top-left>
@@ -91,7 +91,6 @@
</q-td>
</template>
</q-table>
</div>
<DialogFrame ref="memberTableDialog" :header-title="$t('members')" :width="700" :height="500">
<MembersTable
add-attendees

View File

@@ -1,5 +1,11 @@
<template>
<DialogFrame ref="dialog" :header-title="$t('attendees')" :width="700" :height="600">
<DialogFrame
ref="dialog"
:header-title="$t('attendees')"
:width="700"
:height="600"
:inner-padding="0"
>
<q-card>
<q-tabs
v-model="tab"
@@ -17,10 +23,10 @@
<q-separator />
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="attendance">
<q-tab-panel name="attendance" style="padding: 0px">
<AttendeesTable :event="localEvent!" v-on:update="updateTable" />
</q-tab-panel>
<q-tab-panel name="noneAttendees">
<q-tab-panel name="noneAttendees" style="padding: 0px">
<MembersTable
add-attendees
:compare-members="attendees"

View File

@@ -19,6 +19,7 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<template v-slot:top-left>

View File

@@ -19,6 +19,7 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<template v-slot:top-left>

View File

@@ -241,8 +241,9 @@ export function useMemberTable() {
.finally(() => {
loading.value = false;
//filter same members out so list is shorter
filteredMembers.value = allMembers.value;
if (filter) {
filteredMembers.value = allMembers.value.filter(
filteredMembers.value = filteredMembers.value.filter(
(m1) =>
!filter.some((m2) => {
if (filterbyName) {
@@ -256,7 +257,7 @@ export function useMemberTable() {
//second filter
const list = filterList.value ?? [];
if (filterList.value && filterList.value.length > 0) {
filteredMembers.value = allMembers.value.filter((member) =>
filteredMembers.value = filteredMembers.value.filter((member) =>
list.every((filterItem) => {
const keys = filterItem.keys ?? [];
if (keys.includes('null')) return true;

View File

@@ -1,5 +1,4 @@
<template>
<div class="q-pa-md">
<q-table
flat
bordered
@@ -19,8 +18,11 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<!-- top left of table-->
<template v-slot:top-left>
<div>
<q-btn-group push flat style="color: grey">
@@ -34,9 +36,7 @@
<q-tooltip>{{ $t('addNewMember') }}</q-tooltip>
</q-btn>
<q-btn
v-if="
user.isPermittedTo('members', 'write') || user.isPermittedTo('members', 'delete')
"
v-if="user.isPermittedTo('members', 'write') || user.isPermittedTo('members', 'delete')"
dense
flat
style="color: grey"
@@ -127,6 +127,9 @@
{{ $t('selected') }}: {{ selected.length }}
</div>
</template>
<!-- top right of table-->
<template v-slot:top-right>
<q-input filled dense debounce="300" v-model="filter" :placeholder="$t('search')">
<template v-slot:append>
@@ -134,6 +137,9 @@
</template>
</q-input>
</template>
<!-- table body content-->
<template v-slot:body-cell="props">
<q-td
:props="props"
@@ -160,6 +166,7 @@
<q-td :props="props">
<q-select
v-if="groups.length > 0"
dense
:readonly="!user.isPermittedTo('members', 'write')"
:options="groups"
emit-value
@@ -174,6 +181,7 @@
<template v-slot:body-cell-responsiblePerson="props">
<q-td :props="props">
<q-select
dense
v-if="responsibles.length > 0"
:readonly="!user.isPermittedTo('members', 'write')"
:options="responsibles"
@@ -194,6 +202,7 @@
/>
<q-menu v-if="openSubmenu" anchor="top right" self="top left">
<q-item
dense
v-if="user.isPermittedTo('members', 'write')"
clickable
v-close-popup
@@ -207,6 +216,7 @@
!inProps.addAttendees &&
!inProps.addResponsible
"
dense
clickable
v-close-popup
@click="openRemoveDialog(props.row)"
@@ -218,7 +228,6 @@
</q-td>
</template>
</q-table>
</div>
<EditOneDialog
ref="editOneDialog"
endpoint="members/edit"
@@ -228,6 +237,7 @@
<EditAllDialog
ref="editAllDialog"
:responsibles="responsibles"
:group="groups"
v-on:update="updateMember"
></EditAllDialog>
<OkDialog

View File

@@ -19,6 +19,7 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<template v-slot:top-left>

View File

@@ -19,6 +19,7 @@
:selection="selectOption ? 'multiple' : 'none'"
v-model:selected="selected"
binary-state-sort
dense
class="bigger-table-text"
>
<template v-slot:top-left>