david subr 4 years ago
parent
commit
390087e9f7
  1. 37
      package-lock.json
  2. 4
      package.json
  3. 234
      src/App.vue
  4. 7
      src/assets/bootstrap.min.css
  5. BIN
      src/assets/fly.jpg
  6. BIN
      src/assets/inside.jpg
  7. BIN
      src/assets/plane.png
  8. BIN
      src/assets/seat.png
  9. 10
      src/main.js

37
package-lock.json

@ -4011,6 +4011,21 @@
"assert-plus": "^1.0.0"
}
},
"date-fns": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.17.0.tgz",
"integrity": "sha512-ZEhqxUtEZeGgg9eHNSOAJ8O9xqSgiJdrL0lzSSfMF54x6KXWJiOH/xntSJ9YomJPrYH/p08t6gWjGWq1SDJlSA=="
},
"date-fns-tz": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.1.1.tgz",
"integrity": "sha512-5PR604TlyvpiNXtvn+PZCcCazsI8fI1am3/aimNFN8CMqHQ0KRl+6hB46y4mDbB7bk3+caEx3qHhS7Ewac/FIg=="
},
"date-format-parse": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.6.tgz",
"integrity": "sha512-sdxnYAWmLopeb+6Hmw+vo3or4OCJOnh4+YoJ9p+Id3o2EnNP0INpTqx7wr8UregfMpgaSZAH473R/ytiaB3gVg=="
},
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
@ -6941,8 +6956,7 @@
"lodash": {
"version": "4.17.20",
"resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1598867216316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz",
"integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=",
"dev": true
"integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI="
},
"lodash.defaultsdeep": {
"version": "4.6.1",
@ -10822,6 +10836,17 @@
"integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
"dev": true
},
"v-calendar": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/v-calendar/-/v-calendar-2.2.3.tgz",
"integrity": "sha512-E4dByu3vDYtleIsZcciUJANpKn6zI0DCXzRsm6g3VsfV7Wpr49t+OQrrc6zVFtISardEUCabivzJOJ0NVdga/Q==",
"requires": {
"core-js": "^3.6.5",
"date-fns": "^2.8.1",
"date-fns-tz": "^1.0.12",
"lodash": "4.17.20"
}
},
"v8-compile-cache": {
"version": "2.2.0",
"resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.2.0.tgz?cache=0&sync_timestamp=1603909569446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.2.0.tgz",
@ -11040,6 +11065,14 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true
},
"vue2-datepicker": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.9.0.tgz",
"integrity": "sha512-nRqIZx5Ks0TDHFyzyHYIlfmuszEsEvRhwJ6HGuGGHQpjOfrIgkJ9B0pnEEJaVS3LKX6IWCVQMUq0H7I2UKmHqA==",
"requires": {
"date-format-parse": "^0.2.6"
}
},
"watchpack": {
"version": "1.7.5",
"resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1607687479532&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",

4
package.json

@ -9,7 +9,9 @@
},
"dependencies": {
"core-js": "^3.6.5",
"vue": "^2.6.11"
"v-calendar": "^2.2.3",
"vue": "^2.6.11",
"vue2-datepicker": "^3.9.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",

234
src/App.vue

@ -1,20 +1,240 @@
<template>
<div id="app">
<div id="app">
<div class="container-fluid">
<div class="row">
<div class="col-md-12; peknejheader">
<nav class="navbar navbar-expand-lg navbar-light bg-light; peknejheader">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="navbar-toggler-icon"></span>
</button> <a class="navbar-brand" href="#"> <h1>Letenky</h1> </a>
</nav>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-6; fotka">
<h2 style="color: whitesmoke; padding-top: 10px;">Parametry letu</h2>
<div class="peknyokno">
<h3>Cesta:</h3>
<p>
<select v-model="travelType">
<option value="" disabled> Vyberte jednu možnost</option>
<option v-for="(option, index) in travelTypes" :key="index" :value="option">
{{ option.text }}
</option>
</select>
</p>
<!-- volba destinace -->
<!-- datum odletu -->
</div>
</template>
<!-- datum příletu pokud zpáteční -->
<p>
<label for="inputPersonCount"> <h3>Počet cestujících:</h3> </label><br>
<input v-on:change="personCountChange()" v-model="personCount" type="number" id="inputPersonCount" min="1" max="10">
</p>
<!-- volba třídy E, B -->
<p>
<label for="inputClassType"> <h3>Volba třídy:</h3> </label><br>
<select v-model="classType" id="inputClassType">
<option value="" disabled>Vyberte jednu možnost</option>
<option v-for="(option, index) in classTypes" :key="index" :value="option">
{{ option.text }}
</option>
</select>
</p>
<div class="seatWrap">
<div style="width: 20%; border:0;" class="seat" v-for="(seat, index) in seats" :key="index">
<img style="width: 50%; padding-bottom: 5%" class="sedacka" src="@/assets/seat.png" alt="sedacka">
<div v-if="chosenSeats.indexOf(seat) >= 0" v-on:click="chosenSeats.splice(chosenSeats.indexOf(seat), 1)" class="chosen">
{{ seat }}
</div>
<div v-else v-on:click="addSeatClick(seat)">
{{ seat }}
</div>
</div>
</div>
<button v-on:click="chosenSeats=[]">Odebrat všechna sedadla</button>
</div>
</div>
</div>
</div>
<script>
<div class="col-md-6">
<div class="row">
<div class="col-md-5">
<h2 style="padding-top: 10px;">Objednávka</h2>
<p v-if="travelType">
Typ cesty:
<span style="text-transform: lowercase">
{{ travelType.text }}
</span>
</p>
<p>
Počet cestujích: {{ personCount}}
</p>
<p v-if="classType">
Třída:
<span style="text-transform: lowercase">
{{ classType.text }}
</span>
</p>
<div v-if="chosenSeats.length">
<p>Vybraná místa:</p>
<div class="seat" v-for="seat in chosenSeats" :key="seat">
{{ seat }}
</div>
</div>
</div>
<div class="col-md-7">
<img src="./assets/inside.jpg" style="height: 600px">
</div>
</div>
</div>
</div>
</div>
<footer style="color: gray; padding:10px; background-color: lightblue" class=" text-lg-start">
<p style="color: black;">© David Šubr 2021</p>
<a style="padding: 0px" href="#">Privacy policy</a><br>
<a style="padding: 0px" href="#">Contact us</a>
</footer>
</div>
</template>
<script>
export default {
name: 'App',
data: function() {
return {
travelType: "",
travelTypes: [
{ value: "R", text: "Zpáteční" },
{ value: "O", text: "Jednosměrná" },
],
personCount: 1,
classType: "",
classTypes: [
{ value: "E", text: "Ekonomická" },
{ value: "B", text: "Byznys" }
],
seats: [
"B1", "B2", "B3",
"E1", "E2", "E3", "E4", "E5"
],
chosenSeats: []
}
},
methods: {
addSeatClick: function(seat) {
if (this.chosenSeats.length < this.personCount) {
this.chosenSeats.push(seat);
}
else {
alert("Všichni cestující již sedí!");
}
},
personCountChange: function() {
let diff = this.personCount - this.chosenSeats.length;
if (diff < 0) {
// diff je záporné číslo
for (let i = diff; i < 0; i++) {
this.chosenSeats.pop();
}
}
}
}
}
</script>
<style>
.wrapper{
/**html, body {margin: 0; height: 100%; overflow: hidden}**/
html, body{
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif
}
@import './assets/bootstrap.min.css';
.wrapper {
padding: 10px;
display: grid;
grid-template-columns: 1fr 1fr;
}
</style>
.seat {
display: inline-block;
width: 30px;
text-align: center;
border: 1px solid gray;
margin: 2px;
}
.seatWrap{
padding-bottom: 2.5%;
}
.seat div:hover {
cursor: pointer;
background-color: lightgray;
}
.seat .chosen {
background-color: lightgreen;
}
.peknejheader{
background-color: lightblue;
}
.fotka{
background-image: url("assets/fly.jpg");
height: 600px;
width: 100%;
}
.peknyokno{
margin-top: 5px;
padding: 10px;
background-color:white;
border: 1px solid;
box-shadow: 5px 5px 5px rgb(53, 53, 53);
}
select,input,button{
border-radius: 5px;
}
h1{
font-size: 36px;
}
h2{
font-size: 24px;
}
h3{
font-size: 18px;
color:rgb(138, 138, 138);
padding: 5px;
}
p{
font-size: 14px;
}
</style>

7
src/assets/bootstrap.min.css

File diff suppressed because one or more lines are too long

BIN
src/assets/fly.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

BIN
src/assets/inside.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
src/assets/plane.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/assets/seat.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

10
src/main.js

@ -1,8 +1,14 @@
import Vue from 'vue'
import App from './App.vue'
import VCalendar from 'v-calendar';
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
render: h => h(App)
}).$mount('#app');
Vue.use(VCalendar, {
componentPrefix: 'vc',
});

Loading…
Cancel
Save