Browse Source

zacatek

master
vit.tlusty 3 years ago
parent
commit
d45613028b
  1. 942
      package-lock.json
  2. 4
      package.json
  3. 2
      public/index.html
  4. 24
      src/App.vue
  5. 3
      src/main.js
  6. 25
      src/router/index.js
  7. 152
      src/views/Home.vue
  8. 5
      src/views/Kosik.vue

942
package-lock.json

File diff suppressed because it is too large

4
package.json

@ -9,11 +9,13 @@
},
"dependencies": {
"core-js": "^3.6.5",
"vue": "^3.0.0"
"vue": "^3.0.0",
"vue-router": "^4.0.0-0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "^4.5.15",
"@vue/cli-service": "~4.5.0",
"@vue/compiler-sfc": "^3.0.0",
"babel-eslint": "^10.1.0",

2
public/index.html

@ -6,12 +6,14 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- built files will be auto injected -->
</body>
</html>

24
src/App.vue

@ -1,26 +1,8 @@
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
<router-view/>
</template>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

3
src/main.js

@ -1,4 +1,5 @@
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).mount('#app')
createApp(App).use(router).mount('#app')

25
src/router/index.js

@ -0,0 +1,25 @@
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/kosik',
name: 'Košík',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../views/Kosik.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router

152
src/views/Home.vue

@ -0,0 +1,152 @@
<template>
<div>
<div class="muj-toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="d-flex">
<div v-if="toust" class="toast-body">
Uspěšně jste přidaly věc do košíku
</div>
<button v-on:click="toust = false" type="button" class="btn-close me-2 m-auto" aria-label="Close"></button>
</div>
</div>
<div class="modal fade" id="kosikModal" tabindex="-1" aria-labelledby="kosikModal" aria-hidden="true">
<div class="modal-dialog modal-fullscreen">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="kosikModal">Košík</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div v-for="item, i in kosik" :key="i">
{{ item.nazev }} <br>
{{ item.polozka }} <br>
{{ item.cena }} <br>
</div>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Služby</div>
<div class="card-body">
<div class="list-group list-group-flush">
<a v-on:click="aktivniSluzba = sluzba" v-for="sluzba, i in sluzby" :key="i" href="#" class="list-group-item list-group-item-action">{{ sluzba.nazev }}</a>
</div>
</div>
</div>
<div v-if="aktivniSluzba" class="card">
<div class="card-header d-flex justify-content-between">
<div>Možnosti: {{ aktivniSluzba.nazev }}</div>
<div><button v-on:click="aktivniSluzba = null" class="btn btn-sm btn-secondary">&times;</button></div>
</div>
<div class="card-body">
<div v-if="aktivniSluzba.akce == 1">
<p>
Cena za metr čtvereční: {{ aktivniSluzba.cenaMetr }}
</p>
<input v-model="posekaniZahrady" class="form-control" type="number" min="1" step="1">
<p>
Výsledná cena: {{ posekaniZahrady * aktivniSluzba.cenaMetr }}
</p>
<p>
<button v-on:click="kosikPosekaniZahrady()" class="btn btn-primary">Do košíku</button>
</p>
</div>
<div v-else-if="aktivniSluzba.akce == 2">
<p>
Zvolte strom
</p>
<select v-model="strom" class="form-select">
<option :value="strom" v-for="strom, i in aktivniSluzba.stromy" :key="i">
{{ strom.nazev }}, {{ strom.cena }}
</option>
</select>
<input v-model="stromPocet" type="number" class="form-control" step="1" min="1">
<p v-if="strom">
Výsledná cena: {{ strom.cena * stromPocet }}
</p>
<p>
<button v-on:click="kosikVysaditStrom()" class="btn btn-primary">Do košíku</button>
</p>
</div>
</div>
</div>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target='#kosikModal'>Přejít k placení</button>
</div>
</template>
<script>
export default {
name: "Home",
data: function () {
return {
sluzby: [
{
nazev: "posekání zahrady",
akce: 1,
cenaMetr: 1.5,
},
{
nazev: "vysázení stromu",
akce: 2,
stromy: [
{ nazev: "bříza", cena: 49 },
{ nazev: "dub", cena: 89 },
],
},
{
nazev: "jezírko - čištění",
akce: 3,
cenaKubik: 22,
},
],
aktivniSluzba: null,
posekaniZahrady: 1,
strom: null,
stromPocet: 1,
kosik: [],
toust: false,
};
},
methods: {
kosikPosekaniZahrady: function() {
this.kosik.push({
nazev: this.aktivniSluzba.nazev,
polozka: "počet metrů: " + this.posekaniZahrady,
cena: this.posekaniZahrady * this.aktivniSluzba.cenaMetr,
})
this.toust= true
this.aktivniSluzba = null
},
kosikVysaditStrom: function() {
this.kosik.push({
nazev: this.aktivniSluzba.nazev,
polozka: "strom: " + this.strom.nazev + ", počet: " + this.stromPocet,
cena: this.strom.cena * this.stromPocet,
})
this.toust = true
this.aktivniSluzba = null
},
zavriToast: function () {
this.toust = false
}
},
watch:{
toust:function () {
if (this.toust == true){
setTimeout(this.zavriToast, 3000)
}
}
}
};
</script>
<style>
</style>

5
src/views/Kosik.vue

@ -0,0 +1,5 @@
<template>
<div class="about">
<h1>Toto je košík</h1>
</div>
</template>
Loading…
Cancel
Save