diff --git a/software/src/App.vue b/software/src/App.vue
index 1fac25f..7b10680 100644
--- a/software/src/App.vue
+++ b/software/src/App.vue
@@ -4,8 +4,10 @@ import axios from 'axios';
import { useTheme } from 'vuetify/lib/framework.mjs';
import { useUserStore } from './data/stores/userStore';
import vuetify from './plugins/vuetify';
+import { useBasketStore } from './data/stores/basketStore';
const userStore = useUserStore()
+const basketStore = useBasketStore()
const categories = ref([])
const theme = useTheme()
const navRail = ref(vuetify.display.mobile)
@@ -37,7 +39,13 @@ requestAllCategories()
-
+
+
+
+
+
+
+
@@ -61,14 +69,8 @@ requestAllCategories()
-
-
-
-
-
-
-
-
+
+
diff --git a/software/src/data/models/productModel.ts b/software/src/data/models/productModel.ts
index 7f266b9..96596c1 100644
--- a/software/src/data/models/productModel.ts
+++ b/software/src/data/models/productModel.ts
@@ -7,6 +7,7 @@ export class ProductModel {
price: number = 0
discount: number = 0
rating: number = 1
+ nrOfArticles: number = 2
imageUrl: string = ""
createdAt: string = ""
updatedAt: string = ""
diff --git a/software/src/data/stores/basketStore.ts b/software/src/data/stores/basketStore.ts
new file mode 100644
index 0000000..bd510c9
--- /dev/null
+++ b/software/src/data/stores/basketStore.ts
@@ -0,0 +1,30 @@
+import { defineStore } from "pinia";
+import { useLocalStorage } from "@vueuse/core";
+import { ProductModel } from "../models/productModel";
+import { calcProductPrice } from "@/scripts/productScripts";
+
+export const useBasketStore = defineStore('basket', {
+ state: () => ({
+ productsInBasket: useLocalStorage>("hackmycart/basketStore/productsInBasket", [])
+ }),
+
+ getters: {
+ getTotalPrice() {
+ let result = 0
+
+ for (let product of this.productsInBasket) {
+ result += calcProductPrice(product)
+ }
+
+ return result
+ }
+ },
+
+ actions: {
+ removeProductFromBasket(product: ProductModel) {
+ this.productsInBasket = this.productsInBasket.filter((p: ProductModel) =>
+ p.id != product.id
+ )
+ }
+ }
+})
diff --git a/software/src/pages/ProductsPage.vue b/software/src/pages/ProductsPage.vue
deleted file mode 100644
index ba1c9f8..0000000
--- a/software/src/pages/ProductsPage.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- Products
-
\ No newline at end of file
diff --git a/software/src/pages/basketPage/basketItem.vue b/software/src/pages/basketPage/basketItem.vue
new file mode 100644
index 0000000..22ffb5c
--- /dev/null
+++ b/software/src/pages/basketPage/basketItem.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+ {{ calcProductPrice(product) }} €
+
+
+
\ No newline at end of file
diff --git a/software/src/pages/basketPage/index.vue b/software/src/pages/basketPage/index.vue
new file mode 100644
index 0000000..d8e9072
--- /dev/null
+++ b/software/src/pages/basketPage/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+ {{ basketStore.productsInBasket.length }} Artikel
+
+
+
+
+
+
+
+ Total: {{ basketStore.getTotalPrice }} €
+
+
+
+ Bestellen
+
+
+
+
+
+
\ No newline at end of file
diff --git a/software/src/pages/productsPage/index.vue b/software/src/pages/productsPage/index.vue
index 794e2a9..fed26d2 100644
--- a/software/src/pages/productsPage/index.vue
+++ b/software/src/pages/productsPage/index.vue
@@ -114,34 +114,36 @@ watch(() => onlyDiscounts.value, () => { filterProducts() })
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/software/src/pages/productsPage/productDetails.vue b/software/src/pages/productsPage/productDetails.vue
index 0aec98c..9cd06f1 100644
--- a/software/src/pages/productsPage/productDetails.vue
+++ b/software/src/pages/productsPage/productDetails.vue
@@ -3,14 +3,21 @@ import { VNumberInput } from 'vuetify/labs/VNumberInput'
import { ProductModel } from '@/data/models/productModel';
import { CategoryModel } from '@/data/models/categoryModel';
import { ref } from 'vue';
+import { useBasketStore } from '@/data/stores/basketStore';
const showDialog = defineModel("showDialog", { type: Boolean })
const nrOfArticles = ref(1)
+const basketStore = useBasketStore()
-defineProps({
+const props = defineProps({
product: ProductModel,
productCategory: CategoryModel
})
+
+function addProductToBasket() {
+ basketStore.productsInBasket.push(props.product)
+ showDialog.value = false
+}
@@ -49,7 +56,12 @@ defineProps({
- Zum Einkaufswagen hinzufügen
+
+ Zum Einkaufswagen hinzufügen
+
diff --git a/software/src/router/routes.ts b/software/src/router/routes.ts
index 3e27ac5..aac969b 100644
--- a/software/src/router/routes.ts
+++ b/software/src/router/routes.ts
@@ -3,6 +3,7 @@ import OrdersPage from "@/pages/OrdersPage.vue";
import PreferencesPage from "@/pages/preferencesPage/index.vue";
import ProductsPage from "@/pages/productsPage/index.vue";
import LoginPage from "@/pages/loginPage/index.vue"
+import BasketPage from "@/pages/basketPage/index.vue"
const routes = [
{ path: '/products', component: ProductsPage },
@@ -10,6 +11,7 @@ const routes = [
{ path: '/orders', component: OrdersPage },
{ path: '/preferences', component: PreferencesPage },
{ path: '/login', component: LoginPage },
+ { path: '/basket', component: BasketPage }
]
export default routes
\ No newline at end of file
diff --git a/software/src/scripts/productScripts.ts b/software/src/scripts/productScripts.ts
new file mode 100644
index 0000000..ada7c91
--- /dev/null
+++ b/software/src/scripts/productScripts.ts
@@ -0,0 +1,5 @@
+import { ProductModel } from "@/data/models/productModel";
+
+export function calcProductPrice(product: ProductModel): number {
+ return Math.round(product.price * ((100 - product.discount) / 100) * 100) / 100
+}
\ No newline at end of file