Small improvements on account pages, added payment info card
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
title: String,
|
title: String,
|
||||||
subtitle: String,
|
subtitle: String,
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-progress-circular
|
||||||
|
size="128"
|
||||||
|
width="12"
|
||||||
|
color="primary"
|
||||||
|
indeterminate
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
21
software/src/layouts/accountSubPageLayout.vue
Normal file
21
software/src/layouts/accountSubPageLayout.vue
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-container max-width="1000">
|
||||||
|
<!-- Back to previous page -->
|
||||||
|
<v-row>
|
||||||
|
<v-col>
|
||||||
|
<outlined-button prepend-icon="mdi-arrow-left" @click="router.back()" >
|
||||||
|
{{ $t('misc.onePageBack') }}
|
||||||
|
</outlined-button>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<slot></slot>
|
||||||
|
</v-container>
|
||||||
|
</template>
|
||||||
@@ -106,7 +106,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"addNewAccount": "Neuen Account hinzufügen",
|
"addNewAccount": "Neuen Account hinzufügen",
|
||||||
"accountRole": "Account Rolle"
|
"accountRole": "Account Rolle",
|
||||||
|
"noRealPaymentsNeeded": "Keine echten Kontodaten nötig!"
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"orders": "Bestellung | Bestellungen",
|
"orders": "Bestellung | Bestellungen",
|
||||||
|
|||||||
@@ -106,7 +106,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"addNewAccount": "Add new account",
|
"addNewAccount": "Add new account",
|
||||||
"accountRole": "Account Role"
|
"accountRole": "Account Role",
|
||||||
|
"noRealPaymentsNeeded": "No real payment data required!"
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"orders": "Order | Orders",
|
"orders": "Order | Orders",
|
||||||
|
|||||||
@@ -3,22 +3,14 @@ import accountDataCard from './accountDataCard.vue';
|
|||||||
import accountManagingCard from './accountManagingCard.vue';
|
import accountManagingCard from './accountManagingCard.vue';
|
||||||
import addressesCard from './addressesCard.vue';
|
import addressesCard from './addressesCard.vue';
|
||||||
import paymentsCard from './paymentsCard.vue';
|
import paymentsCard from './paymentsCard.vue';
|
||||||
import OutlinedButton from '@/components/basics/outlinedButton.vue';
|
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
import accountSubPageLayout from '@/layouts/accountSubPageLayout.vue';
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-container max-width="1000">
|
<account-sub-page-layout>
|
||||||
<v-row>
|
|
||||||
<v-col>
|
|
||||||
<outlined-button prepend-icon="mdi-arrow-left" @click="router.back()" >
|
|
||||||
{{ $t('misc.onePageBack') }}
|
|
||||||
</outlined-button>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
|
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
<account-data-card />
|
<account-data-card />
|
||||||
@@ -42,5 +34,5 @@ const router = useRouter()
|
|||||||
<account-managing-card />
|
<account-managing-card />
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</account-sub-page-layout>
|
||||||
</template>
|
</template>
|
||||||
@@ -4,9 +4,9 @@ import { useAccountStore } from '@/stores/account.store';
|
|||||||
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
||||||
import { PaymentModel } from '@/data/models/user/paymentModel';
|
import { PaymentModel } from '@/data/models/user/paymentModel';
|
||||||
import { getIbanRules, getStringRules } from '@/scripts/validationRules';
|
import { getIbanRules, getStringRules } from '@/scripts/validationRules';
|
||||||
|
import cardViewOneLine from '@/components/basics/cardViewOneLine.vue';
|
||||||
|
|
||||||
const accountStore = useAccountStore()
|
const accountStore = useAccountStore()
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -14,9 +14,19 @@ const accountStore = useAccountStore()
|
|||||||
icon="mdi-currency-usd"
|
icon="mdi-currency-usd"
|
||||||
:title="$t('account.userData.payment')"
|
:title="$t('account.userData.payment')"
|
||||||
>
|
>
|
||||||
<v-expansion-panels
|
<v-row>
|
||||||
v-if="accountStore.userAccount.payments.length > 0"
|
<v-col>
|
||||||
>
|
<card-view-one-line
|
||||||
|
color="amber"
|
||||||
|
prepend-icon="mdi-alert"
|
||||||
|
:title="$t('account.noRealPaymentsNeeded')"
|
||||||
|
/>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<v-row v-if="accountStore.userAccount.payments.length > 0">
|
||||||
|
<v-col>
|
||||||
|
<v-expansion-panels>
|
||||||
<v-expansion-panel
|
<v-expansion-panel
|
||||||
v-for="payment in accountStore.userAccount.payments"
|
v-for="payment in accountStore.userAccount.payments"
|
||||||
color="primary"
|
color="primary"
|
||||||
@@ -56,12 +66,19 @@ const accountStore = useAccountStore()
|
|||||||
</template>
|
</template>
|
||||||
</v-expansion-panel>
|
</v-expansion-panel>
|
||||||
</v-expansion-panels>
|
</v-expansion-panels>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<v-row v-else>
|
||||||
|
<v-col>
|
||||||
<v-empty-state
|
<v-empty-state
|
||||||
v-else
|
|
||||||
:title="$t('account.noPayments')"
|
:title="$t('account.noPayments')"
|
||||||
icon="mdi-currency-usd-off"
|
icon="mdi-currency-usd-off"
|
||||||
/>
|
/>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
|
|||||||
@@ -1,27 +1,28 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useAccountStore } from '@/stores/account.store';
|
import { useAccountStore } from '@/stores/account.store';
|
||||||
import orderItem from './orderItem.vue';
|
import orderItem from './orderItem.vue';
|
||||||
import { useRouter } from 'vue-router';
|
import accountSubPageLayout from '@/layouts/accountSubPageLayout.vue';
|
||||||
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
import circularProgressIndeterminate from '@/components/basics/circularProgressIndeterminate.vue';
|
||||||
|
|
||||||
const accountStore = useAccountStore()
|
const accountStore = useAccountStore()
|
||||||
const router = useRouter()
|
|
||||||
|
|
||||||
accountStore.refreshOrders()
|
accountStore.refreshOrders()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-container max-width="1000">
|
<account-sub-page-layout>
|
||||||
<v-row>
|
<!-- During fetching state -->
|
||||||
<v-col>
|
<v-row
|
||||||
<outlined-button prepend-icon="mdi-arrow-left" @click="router.back()" >
|
v-if="accountStore.fetchInProgress"
|
||||||
{{ $t('misc.onePageBack') }}
|
>
|
||||||
</outlined-button>
|
<v-col class="text-center">
|
||||||
|
<circular-progress-indeterminate />
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
<!-- Display all orders -->
|
||||||
<v-row
|
<v-row
|
||||||
v-if="accountStore.orders.length > 0"
|
v-else-if="accountStore.orders.length > 0"
|
||||||
v-for="order in accountStore.orders"
|
v-for="order in accountStore.orders"
|
||||||
>
|
>
|
||||||
<v-col>
|
<v-col>
|
||||||
@@ -31,6 +32,7 @@ accountStore.refreshOrders()
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
<!-- No orders -->
|
||||||
<v-row v-else>
|
<v-row v-else>
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-empty-state
|
<v-empty-state
|
||||||
@@ -40,5 +42,5 @@ accountStore.refreshOrders()
|
|||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</account-sub-page-layout>
|
||||||
</template>
|
</template>
|
||||||
@@ -5,11 +5,7 @@ import { OrderApiModel } from '@/data/models/apiEndpoints/orderApiModel';
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
order: OrderApiModel,
|
order: OrderApiModel
|
||||||
loading: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -52,7 +48,7 @@ defineProps({
|
|||||||
:location="ticket.concert.location"
|
:location="ticket.concert.location"
|
||||||
:city="ticket.concert.location.city"
|
:city="ticket.concert.location.city"
|
||||||
:image="ticket.concert.image"
|
:image="ticket.concert.image"
|
||||||
:seat="ticket.seat.seatNr"
|
:seat-nr="ticket.seat.seatNr"
|
||||||
:seat-group="ticket.seat.seatRow.seatGroup.name"
|
:seat-group="ticket.seat.seatRow.seatGroup.name"
|
||||||
:seat-row="ticket.seat.seatRow.row"
|
:seat-row="ticket.seat.seatRow.row"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import concertListItem from '@/components/pageParts/concertListItem.vue';
|
|||||||
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
||||||
import { useConcertStore } from '@/stores/concert.store';
|
import { useConcertStore } from '@/stores/concert.store';
|
||||||
import ticketListItem from '@/components/pageParts/ticketListItem.vue';
|
import ticketListItem from '@/components/pageParts/ticketListItem.vue';
|
||||||
|
import circularProgressIndeterminate from '@/components/basics/circularProgressIndeterminate.vue';
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const basketStore = useBasketStore()
|
const basketStore = useBasketStore()
|
||||||
@@ -53,12 +54,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
|||||||
|
|
||||||
<v-row >
|
<v-row >
|
||||||
<v-col class="text-center" v-if="concertStore.fetchInProgress">
|
<v-col class="text-center" v-if="concertStore.fetchInProgress">
|
||||||
<v-progress-circular
|
<circular-progress-indeterminate />
|
||||||
size="x-large"
|
|
||||||
width="10"
|
|
||||||
color="primary"
|
|
||||||
indeterminate
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div class="pt-5 text-h3">
|
<div class="pt-5 text-h3">
|
||||||
{{ $t('misc.loading') }}...
|
{{ $t('misc.loading') }}...
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import sectionDivider from '@/components/basics/sectionDivider.vue';
|
import sectionDivider from '@/components/basics/sectionDivider.vue';
|
||||||
import seatPlanMap from '@/components/seatPlanMap/seatPlanMap.vue';
|
import seatPlanMap from '@/components/seatPlanMap/seatPlanMap.vue';
|
||||||
import { ref } from 'vue';
|
|
||||||
import heroImage from '@/components/pageParts/heroImage.vue';
|
import heroImage from '@/components/pageParts/heroImage.vue';
|
||||||
import concertListItem from '@/components/pageParts/concertListItem.vue';
|
import concertListItem from '@/components/pageParts/concertListItem.vue';
|
||||||
import { LocationDetailsApiModel } from '@/data/models/locations/locationDetailsApiModel';
|
|
||||||
import cardViewHorizontal from '@/components/basics/cardViewHorizontal.vue';
|
import cardViewHorizontal from '@/components/basics/cardViewHorizontal.vue';
|
||||||
import { useLocationStore } from '@/stores/location.store';
|
import { useLocationStore } from '@/stores/location.store';
|
||||||
|
import circularProgressIndeterminate from '@/components/basics/circularProgressIndeterminate.vue';
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const locationStore = useLocationStore()
|
const locationStore = useLocationStore()
|
||||||
@@ -82,7 +81,7 @@ locationStore.getLocationByName(String(router.currentRoute.value.params.name))
|
|||||||
|
|
||||||
<div v-if="locationStore.fetchInProgress">
|
<div v-if="locationStore.fetchInProgress">
|
||||||
<v-col class="text-center">
|
<v-col class="text-center">
|
||||||
<v-progress-circular indeterminate :size="128" :width="12" color="primary" />
|
<circular-progress-indeterminate />
|
||||||
</v-col>
|
</v-col>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ locationStore.getLocations()
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-container>
|
<v-container>
|
||||||
<v-row>
|
|
||||||
|
|
||||||
</v-row>
|
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-spacer />
|
<v-spacer />
|
||||||
|
|
||||||
@@ -26,7 +23,7 @@ locationStore.getLocations()
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<v-row >
|
<v-row>
|
||||||
<v-col class="text-center" v-for="i in 4" cols="3">
|
<v-col class="text-center" v-for="i in 4" cols="3">
|
||||||
<card-with-top-image :loading="true" />
|
<card-with-top-image :loading="true" />
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|||||||
Reference in New Issue
Block a user