release v2.0.0 #4
|
@ -5,13 +5,13 @@
|
||||||
:label="label"
|
:label="label"
|
||||||
:value="getDateTime()"
|
:value="getDateTime()"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
v-on:input="dateTimeChanged"
|
@input="dateTimeChanged"
|
||||||
:rules="customRules"
|
:rules="customRules"
|
||||||
>
|
>
|
||||||
<template v-slot:append>
|
<template #append>
|
||||||
<q-icon name="event" class="cursor-pointer" v-if="type == 'date' || type == 'datetime'">
|
<q-icon name="event" class="cursor-pointer" v-if="type == 'date' || type == 'datetime'">
|
||||||
<q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">
|
<q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">
|
||||||
<q-date :value="getDate()" mask="YYYY-MM-DD" v-on:input="dateChanged">
|
<q-date :value="getDate()" mask="YYYY-MM-DD" @input="dateChanged">
|
||||||
<div class="row items-center justify-end">
|
<div class="row items-center justify-end">
|
||||||
<q-btn v-close-popup label="Schließen" color="primary" flat />
|
<q-btn v-close-popup label="Schließen" color="primary" flat />
|
||||||
</div>
|
</div>
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
v-if="type == 'time' || type == 'datetime'"
|
v-if="type == 'time' || type == 'datetime'"
|
||||||
>
|
>
|
||||||
<q-popup-proxy ref="qTimeProxy" transition-show="scale" transition-hide="scale">
|
<q-popup-proxy ref="qTimeProxy" transition-show="scale" transition-hide="scale">
|
||||||
<q-time :value="getTime()" mask="HH:mm" v-on:input="timeChanged">
|
<q-time :value="getTime()" mask="HH:mm" @input="timeChanged">
|
||||||
<div class="row items-center justify-end">
|
<div class="row items-center justify-end">
|
||||||
<q-btn v-close-popup label="Schließen" color="primary" flat />
|
<q-btn v-close-popup label="Schließen" color="primary" flat />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class="fit row justify-around items-start q-col-gutter-sm"
|
class="fit row justify-around items-start q-col-gutter-sm"
|
||||||
>
|
>
|
||||||
<div v-for="(item, index) in widgets" :key="index" class="col-4 full-height col-sm-6 col-xs-12">
|
<div v-for="(item, index) in widgets" :key="index" class="col-4 full-height col-sm-6 col-xs-12">
|
||||||
<component v-bind:is="item" />
|
<component :is="item" />
|
||||||
</div>
|
</div>
|
||||||
</q-page>
|
</q-page>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<q-card>
|
<q-card>
|
||||||
<BalanceHeader
|
<BalanceHeader
|
||||||
@update:user="userUpdated"
|
@update:user="userUpdated"
|
||||||
:showSelector="showSelector"
|
:show-selector="showSelector"
|
||||||
@open-history="openHistory"
|
@open-history="openHistory"
|
||||||
/>
|
/>
|
||||||
<q-separator />
|
<q-separator />
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<q-card>
|
<q-card>
|
||||||
<BalanceHeader
|
<BalanceHeader
|
||||||
@update:user="senderUpdated"
|
@update:user="senderUpdated"
|
||||||
:showSelector="showSelector"
|
:show-selector="showSelector"
|
||||||
@open-history="openHistory"
|
@open-history="openHistory"
|
||||||
/>
|
/>
|
||||||
<q-separator />
|
<q-separator />
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<q-card flat square>
|
<q-card flat square>
|
||||||
<q-card-section class="row items-center justify-between" horizontal>
|
<q-card-section class="row items-center justify-between" horizontal>
|
||||||
<div class="col-5 text-left q-px-sm">
|
<div class="col-5 text-left q-px-sm">
|
||||||
<div v-bind:class="{ 'text-negative': isNegative() }" class="text-weight-bold text-h6">
|
<div
|
||||||
<span v-if="isNegative()">-</span>{{ transaction.amount.toFixed(2) }} €
|
:class="{ 'text-negative': isNegative() }"
|
||||||
</div>
|
class="text-weight-bold text-h6"
|
||||||
<div class="text-caption">{{ text }}</div>
|
>
|
||||||
<div class="text-caption">{{ timeStr }}</div>
|
<span v-if="isNegative()">-</span>{{ transaction.amount.toFixed(2) }} €
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 q-px-sm text-center">
|
<div class="col-5 q-px-sm text-center">
|
||||||
<div class="text-subtitle1" v-if="isReversed">Storniert</div>
|
<div class="text-subtitle1" v-if="isReversed">Storniert</div>
|
||||||
|
|
|
@ -32,9 +32,9 @@
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
<q-list v-if="show">
|
<q-list v-if="show">
|
||||||
<div v-for="(transaction, index) in transactions" v-bind:key="index" class="col-sm-12">
|
<div v-for="(transaction, index) in transactions" :key="index" class="col-sm-12">
|
||||||
<!-- TODO: In Vue3 use v-model:transaction="..." -->
|
<!-- TODO: In Vue3 use v-model:transaction="..." -->
|
||||||
<Transaction :transaction.sync="transactions[index]" />
|
<Transaction v-model:transaction="transactions[index]" />
|
||||||
</div>
|
</div>
|
||||||
</q-list>
|
</q-list>
|
||||||
</q-drawer>
|
</q-drawer>
|
||||||
|
|
|
@ -12,16 +12,16 @@
|
||||||
:data="data"
|
:data="data"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
row-key="id"
|
row-key="id"
|
||||||
:pagination.sync="pagination"
|
v-model:pagination="pagination"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@request="onRequest"
|
@request="onRequest"
|
||||||
binary-state-sort
|
binary-state-sort
|
||||||
>
|
>
|
||||||
<template v-slot:top>
|
<template #top>
|
||||||
<q-toggle v-model="showCancelled" label="Stornierte einblenden" />
|
<q-toggle v-model="showCancelled" label="Stornierte einblenden" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell="props">
|
<template #body-cell="props">
|
||||||
<q-td :props="props" v-bind:class="{ 'bg-grey': props.row.reversal_id != null }">
|
<q-td :props="props" :class="{ 'bg-grey': props.row.reversal_id != null }">
|
||||||
{{ props.value }}
|
{{ props.value }}
|
||||||
</q-td>
|
</q-td>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -40,11 +40,11 @@
|
||||||
<q-btn color="primary" label="Schicht hinzufügen" @click="addJob()" />
|
<q-btn color="primary" label="Schicht hinzufügen" @click="addJob()" />
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
|
||||||
<q-card-section v-for="(job, index) in event.jobs" v-bind:key="index">
|
<q-card-section v-for="(job, index) in event.jobs" :key="index">
|
||||||
<q-card class="q-my-auto">
|
<q-card class="q-my-auto">
|
||||||
<job
|
<job
|
||||||
:job="job"
|
:job="job"
|
||||||
:jobCanDelete="jobDeleteDisabled"
|
:job-can-delete="jobDeleteDisabled"
|
||||||
@set-start="setStart"
|
@set-start="setStart"
|
||||||
@set-required="setRequired"
|
@set-required="setRequired"
|
||||||
@set-end="setEnd"
|
@set-end="setEnd"
|
||||||
|
|
|
@ -19,13 +19,13 @@
|
||||||
<q-card>
|
<q-card>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-table title="Veranstaltungstypen" :data="rows" row-key="jobid" :columns="columns">
|
<q-table title="Veranstaltungstypen" :data="rows" row-key="jobid" :columns="columns">
|
||||||
<template v-slot:top-right>
|
<template #top-right>
|
||||||
<q-input dense v-model="newEventType" placeholder="Neuer Typ" />
|
<q-input dense v-model="newEventType" placeholder="Neuer Typ" />
|
||||||
|
|
||||||
<div></div>
|
<div></div>
|
||||||
<q-btn color="primary" icon="mdi-plus" label="Hinzufügen" @click="addType" />
|
<q-btn color="primary" icon="mdi-plus" label="Hinzufügen" @click="addType" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell-actions="props">
|
<template #body-cell-actions="props">
|
||||||
<!-- <q-btn :label="item"> -->
|
<!-- <q-btn :label="item"> -->
|
||||||
<!-- {{ item.row.name }} -->
|
<!-- {{ item.row.name }} -->
|
||||||
<q-td :props="props" align="right" :auto-width="true">
|
<q-td :props="props" align="right" :auto-width="true">
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<IsoDateInput
|
<IsoDateInput
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
:value="job.start"
|
:value="job.start"
|
||||||
v-on:input="setStart"
|
@input="setStart"
|
||||||
label="Beginn"
|
label="Beginn"
|
||||||
type="datetime"
|
type="datetime"
|
||||||
:rules="[noValidDate, notEmpty]"
|
:rules="[noValidDate, notEmpty]"
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
ref="bla"
|
ref="bla"
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
:value="job.end"
|
:value="job.end"
|
||||||
v-on:input="setEnd"
|
@input="setEnd"
|
||||||
label="Ende"
|
label="Ende"
|
||||||
type="datetime"
|
type="datetime"
|
||||||
:rules="[noValidDate, isAfterDate, notEmpty]"
|
:rules="[noValidDate, isAfterDate, notEmpty]"
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
:value="job.type"
|
:value="job.type"
|
||||||
:options="jobtypes"
|
:options="jobtypes"
|
||||||
v-on:input="setJobType"
|
@input="setJobType"
|
||||||
option-label="name"
|
option-label="name"
|
||||||
option-value="name"
|
option-value="name"
|
||||||
map-options
|
map-options
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
label="Beschreibung"
|
label="Beschreibung"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:value="job.comment"
|
:value="job.comment"
|
||||||
v-on:input="setComment"
|
@input="setComment"
|
||||||
filled
|
filled
|
||||||
:rules="[notEmpty]"
|
:rules="[notEmpty]"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -19,13 +19,13 @@
|
||||||
<q-card>
|
<q-card>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-table title="Diensttypen" :data="rows" row-key="jobid" :columns="columns">
|
<q-table title="Diensttypen" :data="rows" row-key="jobid" :columns="columns">
|
||||||
<template v-slot:top-right>
|
<template #top-right>
|
||||||
<q-input dense v-model="newJob" placeholder="Neuer Typ" />
|
<q-input dense v-model="newJob" placeholder="Neuer Typ" />
|
||||||
|
|
||||||
<div></div>
|
<div></div>
|
||||||
<q-btn color="primary" icon="mdi-plus" label="Hinzufügen" @click="addType" />
|
<q-btn color="primary" icon="mdi-plus" label="Hinzufügen" @click="addType" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell-actions="props">
|
<template #body-cell-actions="props">
|
||||||
<!-- <q-btn :label="item"> -->
|
<!-- <q-btn :label="item"> -->
|
||||||
<!-- {{ item.row.name }} -->
|
<!-- {{ item.row.name }} -->
|
||||||
<q-td :props="props" align="right" :auto-width="true">
|
<q-td :props="props" align="right" :auto-width="true">
|
||||||
|
|
|
@ -50,8 +50,6 @@ import { computed, defineComponent, ref } from 'vue';
|
||||||
import Eventtypes from '../components/management/Eventtypes.vue';
|
import Eventtypes from '../components/management/Eventtypes.vue';
|
||||||
import JobTypes from '../components/management/JobTypes.vue';
|
import JobTypes from '../components/management/JobTypes.vue';
|
||||||
import CreateEvent from '../components/management/CreateEvent.vue';
|
import CreateEvent from '../components/management/CreateEvent.vue';
|
||||||
import { Store } from 'vuex';
|
|
||||||
import { StateInterface } from 'src/store';
|
|
||||||
import { hasPermission } from 'src/utils/permission';
|
import { hasPermission } from 'src/utils/permission';
|
||||||
import { PERMISSIONS } from '../permissions';
|
import { PERMISSIONS } from '../permissions';
|
||||||
import { Screen } from 'quasar';
|
import { Screen } from 'quasar';
|
||||||
|
@ -59,10 +57,8 @@ import { Screen } from 'quasar';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'EventManagement',
|
name: 'EventManagement',
|
||||||
components: { CreateEvent, Eventtypes, JobTypes },
|
components: { CreateEvent, Eventtypes, JobTypes },
|
||||||
setup(_, { root }) {
|
setup() {
|
||||||
const store = <Store<StateInterface>>root.$store;
|
const canEditRoles = computed(() => hasPermission(PERMISSIONS.ROLES_EDIT));
|
||||||
|
|
||||||
const canEditRoles = computed(() => hasPermission(PERMISSIONS.ROLES_EDIT, store));
|
|
||||||
|
|
||||||
interface Tab {
|
interface Tab {
|
||||||
name: string;
|
name: string;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
filled
|
filled
|
||||||
:label="label"
|
:label="label"
|
||||||
@input="updated"
|
@input="updated"
|
||||||
:value="user"
|
:value="modelValue"
|
||||||
:options="users"
|
:options="users"
|
||||||
option-label="display_name"
|
option-label="display_name"
|
||||||
option-value="userid"
|
option-value="userid"
|
||||||
|
@ -12,13 +12,17 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, onBeforeMount } from 'vue';
|
import { computed, defineComponent, Prop, onBeforeMount } from 'vue';
|
||||||
import { useStore } from 'vuex';
|
import { useStore } from 'vuex';
|
||||||
import { UserSessionState } from '../store';
|
import { UserSessionState } from '../store';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'UserSelector',
|
name: 'UserSelector',
|
||||||
props: { user: { required: true, type: Object }, label: { type: String, default: 'Benutzer' } },
|
props: {
|
||||||
|
label: { type: String, default: 'Benutzer' },
|
||||||
|
modelValue: { required: true, type: Object } as Prop<FG.User>,
|
||||||
|
},
|
||||||
|
emits: { 'update:modelValue': (user: FG.User) => !!user },
|
||||||
setup(_, { emit }) {
|
setup(_, { emit }) {
|
||||||
const store = useStore<UserSessionState>();
|
const store = useStore<UserSessionState>();
|
||||||
|
|
||||||
|
@ -30,7 +34,7 @@ export default defineComponent({
|
||||||
|
|
||||||
const users = computed(() => store.state.users.users);
|
const users = computed(() => store.state.users.users);
|
||||||
const updated = (value: FG.User) => {
|
const updated = (value: FG.User) => {
|
||||||
emit('update:user', value);
|
emit('update:modelValue', value);
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<span v-if="hasBirthday">Herzlichen Glückwunsch zum Geburtstag!<br /></span>
|
<span v-if="hasBirthday">Herzlichen Glückwunsch zum Geburtstag!<br /></span>
|
||||||
<span v-if="birthday.length > 0"
|
<span v-if="birthday.length > 0"
|
||||||
>Heute <span v-if="birthday.length === 1">hat </span><span v-else>haben </span
|
>Heute <span v-if="birthday.length === 1">hat </span><span v-else>haben </span
|
||||||
><span v-for="(user, index) in birthday" v-bind:key="index"
|
><span v-for="(user, index) in birthday" :key="index"
|
||||||
>{{ user.display_name }}<span v-if="index < birthday.length - 1">, </span></span
|
>{{ user.display_name }}<span v-if="index < birthday.length - 1">, </span></span
|
||||||
>
|
>
|
||||||
Geburtstag.</span
|
Geburtstag.</span
|
||||||
|
|
Loading…
Reference in New Issue