OrderDetailDialog
This commit is contained in:
@@ -23,14 +23,10 @@ defineProps({
|
|||||||
:icon="icon"
|
:icon="icon"
|
||||||
:tonal="false"
|
:tonal="false"
|
||||||
>
|
>
|
||||||
<template #default v-if="$slots.default">
|
<template #borderless>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #borderless v-if="$slots.borderless">
|
|
||||||
<slot name="borderless"></slot>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template #actions v-if="$slots.actions">
|
<template #actions v-if="$slots.actions">
|
||||||
<slot name="actions"></slot>
|
<slot name="actions"></slot>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ const router = useRouter()
|
|||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
addButtonString: String,
|
addButtonString: String,
|
||||||
|
hideAddButton: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
onAddClick: {
|
onAddClick: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => {}
|
default: () => {}
|
||||||
@@ -28,6 +32,7 @@ defineProps({
|
|||||||
|
|
||||||
<v-col class="text-end">
|
<v-col class="text-end">
|
||||||
<outlined-button
|
<outlined-button
|
||||||
|
v-if="!hideAddButton"
|
||||||
prepend-icon="mdi-plus"
|
prepend-icon="mdi-plus"
|
||||||
color="green"
|
color="green"
|
||||||
:disabled="fetchInProgress"
|
:disabled="fetchInProgress"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
"withoutConcert": "ohne Konzert"
|
"withoutConcert": "ohne Konzert"
|
||||||
},
|
},
|
||||||
"ticket": {
|
"ticket": {
|
||||||
"tickets": "Ticket | Tickets"
|
"ticket": "Ticket | Tickets"
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
"account": "Account | Accounts",
|
"account": "Account | Accounts",
|
||||||
@@ -112,7 +112,6 @@
|
|||||||
"administrator": "Administrator | Administratoren"
|
"administrator": "Administrator | Administratoren"
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"orders": "Bestellung | Bestellungen",
|
|
||||||
"oclock": "Uhr",
|
"oclock": "Uhr",
|
||||||
"ordering": "Bestellabschluss",
|
"ordering": "Bestellabschluss",
|
||||||
"orderSummary": "Bestellübersicht",
|
"orderSummary": "Bestellübersicht",
|
||||||
@@ -120,7 +119,8 @@
|
|||||||
"noOrders": "Keine Bestellungen gefunden",
|
"noOrders": "Keine Bestellungen gefunden",
|
||||||
"orderedAt": "Bestellt am",
|
"orderedAt": "Bestellt am",
|
||||||
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
||||||
"ordersDescription": "Übersicht aller getätigten Bestellungen"
|
"ordersDescription": "Übersicht aller getätigten Bestellungen",
|
||||||
|
"order": "Bestellung | Bestellungen"
|
||||||
},
|
},
|
||||||
"basket": {
|
"basket": {
|
||||||
"addToBasket": "Zum Warenkorb hinzufügen",
|
"addToBasket": "Zum Warenkorb hinzufügen",
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
"withoutConcert": "without concert"
|
"withoutConcert": "without concert"
|
||||||
},
|
},
|
||||||
"ticket": {
|
"ticket": {
|
||||||
"tickets": "Ticket | Tickets"
|
"ticket": "Ticket | Tickets"
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
"account": "Account | Accounts",
|
"account": "Account | Accounts",
|
||||||
@@ -112,7 +112,6 @@
|
|||||||
"administrator": "Administrator"
|
"administrator": "Administrator"
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"orders": "Order | Orders",
|
|
||||||
"oclock": "o'clock",
|
"oclock": "o'clock",
|
||||||
"ordering": "Finish order process",
|
"ordering": "Finish order process",
|
||||||
"orderSummary": "Order overview",
|
"orderSummary": "Order overview",
|
||||||
@@ -120,7 +119,8 @@
|
|||||||
"noOrders": "No orders found",
|
"noOrders": "No orders found",
|
||||||
"orderedAt": "Ordered at",
|
"orderedAt": "Ordered at",
|
||||||
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
||||||
"ordersDescription": "Overview of all placed orders"
|
"ordersDescription": "Overview of all placed orders",
|
||||||
|
"order": "Order | Orders"
|
||||||
},
|
},
|
||||||
"basket": {
|
"basket": {
|
||||||
"addToBasket": "Add to basket",
|
"addToBasket": "Add to basket",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const router = useRouter()
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
<card-view
|
<card-view
|
||||||
:title="$t('order.orders', 2)"
|
:title="$t('order.order', 2)"
|
||||||
icon="mdi-basket-check"
|
icon="mdi-basket-check"
|
||||||
@click="router.push('/account/orders')"
|
@click="router.push('/account/orders')"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -107,9 +107,9 @@ orderStore.getAllOrders()
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<dashboard-card
|
<dashboard-card
|
||||||
:title="$t('order.orders', 2)"
|
:title="$t('order.order', 2)"
|
||||||
icon="mdi-basket"
|
icon="mdi-basket"
|
||||||
:first-line="orderStore.orders.length + ' ' + $t('order.orders', 2)"
|
:first-line="orderStore.orders.length + ' ' + $t('order.order', 2)"
|
||||||
second-line="todo"
|
second-line="todo"
|
||||||
button-route="/admin/orders"
|
button-route="/admin/orders"
|
||||||
:loading="orderStore.fetchInProgress"
|
:loading="orderStore.fetchInProgress"
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import actionDialog from '@/components/basics/actionDialog.vue';
|
import actionDialog from '@/components/basics/actionDialog.vue';
|
||||||
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
||||||
|
import { getStringRules } from '@/scripts/validationRules';
|
||||||
import { useGenreStore } from '@/stores/genre.store';
|
import { useGenreStore } from '@/stores/genre.store';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
const valid = ref(false)
|
||||||
|
|
||||||
const genreStore = useGenreStore()
|
const genreStore = useGenreStore()
|
||||||
</script>
|
</script>
|
||||||
@@ -13,6 +17,7 @@ const genreStore = useGenreStore()
|
|||||||
icon="mdi-pencil"
|
icon="mdi-pencil"
|
||||||
max-width="500"
|
max-width="500"
|
||||||
>
|
>
|
||||||
|
<v-form v-model="valid">
|
||||||
<v-container>
|
<v-container>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
@@ -21,15 +26,18 @@ const genreStore = useGenreStore()
|
|||||||
v-model="genreStore.genre.name"
|
v-model="genreStore.genre.name"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
hide-details
|
hide-details
|
||||||
|
:rules="getStringRules(3)"
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</v-container>
|
||||||
|
</v-form>
|
||||||
|
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
color="green"
|
color="green"
|
||||||
@click="genreStore.saveGenre"
|
@click="genreStore.saveGenre"
|
||||||
|
:disabled="!valid"
|
||||||
:loading="genreStore.fetchInProgress"
|
:loading="genreStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.save') }}
|
{{ $t('misc.actions.save') }}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import adminDataLayout from '@/layouts/adminDataLayout.vue';
|
import adminDataLayout from '@/layouts/adminDataLayout.vue';
|
||||||
import { useOrderStore } from '@/stores/order.store';
|
import { useOrderStore } from '@/stores/order.store';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { title } from 'process';
|
import OrderDetailDialog from './orderDetailDialog.vue';
|
||||||
|
|
||||||
const orderStore = useOrderStore()
|
const orderStore = useOrderStore()
|
||||||
|
|
||||||
@@ -20,7 +20,9 @@ orderStore.getAllOrders()
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<admin-data-layout>
|
<admin-data-layout
|
||||||
|
:hide-add-button="true"
|
||||||
|
>
|
||||||
<v-data-table
|
<v-data-table
|
||||||
:headers="headers"
|
:headers="headers"
|
||||||
:items="orderStore.orders"
|
:items="orderStore.orders"
|
||||||
@@ -52,6 +54,7 @@ orderStore.getAllOrders()
|
|||||||
<v-btn
|
<v-btn
|
||||||
icon="mdi-eye"
|
icon="mdi-eye"
|
||||||
variant="plain"
|
variant="plain"
|
||||||
|
@click="orderStore.openDetails(item)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<v-btn
|
<v-btn
|
||||||
@@ -64,4 +67,6 @@ orderStore.getAllOrders()
|
|||||||
|
|
||||||
</v-data-table>
|
</v-data-table>
|
||||||
</admin-data-layout>
|
</admin-data-layout>
|
||||||
|
|
||||||
|
<order-detail-dialog />
|
||||||
</template>
|
</template>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import actionDialog from '@/components/basics/actionDialog.vue';
|
||||||
|
import outlinedButton from '@/components/basics/outlinedButton.vue';
|
||||||
|
import { useOrderStore } from '@/stores/order.store';
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
const orderStore = useOrderStore()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<action-dialog
|
||||||
|
v-model="orderStore.showDetailDialog"
|
||||||
|
:title="$t('order.order')"
|
||||||
|
icon="mdi-basket"
|
||||||
|
>
|
||||||
|
<v-list>
|
||||||
|
<v-list-subheader>
|
||||||
|
{{ $t('ticket.ticket', 2) }}
|
||||||
|
</v-list-subheader>
|
||||||
|
|
||||||
|
<v-list-item v-for="ticket of orderStore.order.tickets">
|
||||||
|
{{ moment(ticket.concert.date).format("DD.MM.YYYY") }} -
|
||||||
|
{{ ticket.concert.band.name }} - {{ ticket.concert.name }}
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</action-dialog>
|
||||||
|
</template>
|
||||||
@@ -3,9 +3,11 @@ import { useFeedbackStore } from "@/stores/feedback.store"
|
|||||||
/**
|
/**
|
||||||
* Check a string for no numbers and more than four digits
|
* Check a string for no numbers and more than four digits
|
||||||
*
|
*
|
||||||
|
* @param [minChars=4] Minimal number of characters
|
||||||
|
*
|
||||||
* @returns Array of rules
|
* @returns Array of rules
|
||||||
*/
|
*/
|
||||||
export function getStringRules() {
|
export function getStringRules(minChars = 4) {
|
||||||
const feedbackStore = useFeedbackStore()
|
const feedbackStore = useFeedbackStore()
|
||||||
|
|
||||||
return [
|
return [
|
||||||
@@ -24,7 +26,7 @@ export function getStringRules() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
value => {
|
value => {
|
||||||
if (value?.length >= 4) {
|
if (value?.length >= minChars) {
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ export const useOrderStore = defineStore("orderStore", {
|
|||||||
/** All orders of one/all users */
|
/** All orders of one/all users */
|
||||||
orders: ref<Array<OrderApiModel>>([]),
|
orders: ref<Array<OrderApiModel>>([]),
|
||||||
|
|
||||||
|
order: ref<OrderApiModel>(new OrderApiModel),
|
||||||
|
|
||||||
|
showDetailDialog: ref<boolean>(false),
|
||||||
|
|
||||||
/** Request to server sent, waiting for data response */
|
/** Request to server sent, waiting for data response */
|
||||||
fetchInProgress: ref(false)
|
fetchInProgress: ref(false)
|
||||||
}),
|
}),
|
||||||
@@ -42,6 +46,11 @@ export const useOrderStore = defineStore("orderStore", {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
openDetails(order: OrderApiModel) {
|
||||||
|
this.order = order
|
||||||
|
this.showDetailDialog = true
|
||||||
|
},
|
||||||
|
|
||||||
async deleteOrder(order: OrderApiModel) {
|
async deleteOrder(order: OrderApiModel) {
|
||||||
// todo
|
// todo
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user