PHP Classes

File: src/pages/RecipePage.vue

Recommend this page to a friend!
  Packages of Robert Devenyi   Sibo Meal Planner   src/pages/RecipePage.vue   Download  
File: src/pages/RecipePage.vue
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Sibo Meal Planner
App to help treat the SIBO health condition
Author: By
Last change:
Date: 8 months ago
Size: 2,547 bytes
 

Contents

Class file image Download
<template> <q-page class="q-pa-md"> <div class="text-h4 text-center q-mb-lg">Recipes for {{ type }}</div> <div v-if="recipes.length"> <q-card v-for="(recipe, i) in recipes" :key="i" class="q-mb-md"> <q-card-section> <div class="text-h6">{{ recipe.name }}</div> <div class="text-subtitle2 q-mb-sm">{{ recipe.short }}</div> <q-btn flat size="sm" label="Show / Hide Details" @click="recipe.show = !recipe.show" color="primary" class="q-mb-sm" /> <div v-if="recipe.show" class="q-mt-sm">{{ recipe.body }}</div> </q-card-section> </q-card> </div> <!-- Email Signup --> <div class="q-mt-xl" style="max-width: 400px; margin: auto"> <q-input v-model="email" label="Enter your email" outlined class="q-mb-md" /> <q-select v-model="selectedType" :options="types.map((t) => ({ label: t.name, value: t.id }))" label="Select your SIBO type" outlined class="q-mb-md" /> <q-btn label="Sign Up for More Recipes" color="secondary" @click="signup" /> <div v-if="message" class="text-positive q-mt-md">{{ message }}</div> </div> </q-page> </template> <script setup> import { ref, onMounted } from 'vue' import axios from 'axios' import { useRoute } from 'vue-router' const route = useRoute() const type = route.query.type || '' // or use state if preferred const recipes = ref([]) const email = ref('') const message = ref('') const types = ref([]) const selectedType = ref(type) // default to current page type // Load recipes onMounted(async () => { if (!type) return try { const res = await axios.post('http://localhost:8080/api/recipe', { type }) recipes.value = res.data.recipes.map((r) => ({ ...r, show: false })) } catch (err) { console.error(err) } // Load SIBO types for dropdown try { const res = await axios.get('http://localhost:8080/api/sibotypes') types.value = res.data.types } catch (err) { console.error(err) } }) // Signup function const signup = async () => { if (!email.value || !selectedType.value) { message.value = 'Please enter email and select your SIBO type.' return } try { const res = await axios.post('http://localhost:8080/api/signup', { email: email.value, type: selectedType.value, }) message.value = res.data.message email.value = '' } catch (err) { console.error(err) } } </script>