Advertisement
Guest User

App.vue

a guest
Jun 16th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 8.45 KB | None | 0 0
  1. <template>
  2.   <div id="app" class="container">
  3.     <h1>Bem vindo a {{ title }}</h1>
  4.  
  5.     <h3 v-if="horas >= 9 && horas < 17" id="aberta">ABERTA</h3>
  6.    <h3 v-else-if="horas >= 17 && horas < 18" id="proxima-fechar">PRÓXIMA DE FECHAR</h3>
  7.    <h3 v-else id="fechada">FECHADA</h3>
  8.  
  9.    <div class="row">
  10.      <div class="col">
  11.        <h2>Filmes encontrados</h2>
  12.        <button
  13.          type="button"
  14.          class="btn btn-primary btn-lg"
  15.          @click="mostrarCarrinho"
  16.        >Carrinho: {{ quantidadeNoCarrinho }} filmes</button>
  17.      </div>
  18.    </div>
  19.  
  20.    <div class="row" v-if="mostrarFilmes">
  21.      <div class="col-3" v-bind:key="filme.id" v-for="filme in filmes">
  22.        <div class="card">
  23.          <img v-bind:src="filme.imagem" class="card-img-top" alt="imagem do filme">
  24.          <div class="card-body">
  25.            <h5 class="card-title">{{ filme.titulo }}</h5>
  26.            <p class="card-text" v-html="filme.descricao"></p>
  27.            <p class="card-text">{{ filme.valor | formatarPreco("R$") }}</p>
  28.            <a
  29.              href="#"
  30.              @click="adicionarAoCarrinho(filme)"
  31.              v-if="validarPermissaoParaAdicionarNoCarrinho(filme)"
  32.              class="btn btn-primary"
  33.            >ALUGAR</a>
  34.            <a href="#" v-else class="btn btn-primary disabled">ALUGAR</a>
  35.          </div>
  36.        </div>
  37.      </div>
  38.    </div>
  39.    <div class="row" v-else>
  40.      <h2>Carrinho</h2>
  41.  
  42.      <div class="col-12">
  43.        <form>
  44.          <div class="form-group">
  45.            <label for="pedido.primeiroNome">Primeiro nome</label>
  46.            <input
  47.              type="text"
  48.              class="form-control"
  49.              id="primeiroNome"
  50.              placeholder="Digita o primeiro nome"
  51.              v-model="pedido.primeiroNome"
  52.            >
  53.          </div>
  54.          <div class="form-group">
  55.            <label for="ultimoNome">Último nome</label>
  56.            <input
  57.              type="text"
  58.              class="form-control"
  59.              id="ultimoNome"
  60.              placeholder="Digite o último nome"
  61.              v-model="pedido.ultimoNome"
  62.            >
  63.          </div>
  64.          <div class="form-group">
  65.            <label for="endereco">Endereço</label>
  66.            <input
  67.              type="text"
  68.              class="form-control"
  69.              id="endereco"
  70.              placeholder="Digita o endereço"
  71.              v-model="pedido.endereco"
  72.            >
  73.          </div>
  74.          <div class="form-group">
  75.            <label for="cidade">Cidade</label>
  76.            <input
  77.              type="text"
  78.              class="form-control"
  79.              id="cidade"
  80.              placeholder="Digita a cidade"
  81.              v-model="pedido.cidade"
  82.            >
  83.          </div>
  84.          <div class="form-group">
  85.            <label for="estado">Estado</label>
  86.            <select class="form-control" id="estado" v-model="pedido.estado">
  87.              <option disabled value>Escolha um estado</option>
  88.              <option
  89.                v-for="(estado, key) in estados"
  90.                v-bind:value="estado"
  91.                v-bind:key="key">
  92.                {{ key }}
  93.              </option>
  94.            </select>
  95.          </div>
  96.          <div class="form-group">
  97.            <label for="cep">CEP</label>
  98.            <input
  99.              type="text"
  100.              class="form-control"
  101.              id="cep"
  102.              placeholder="Digita o CEP"
  103.              v-model="pedido.cep"
  104.            >
  105.          </div>
  106.          <div class="form-group form-check">
  107.            <input
  108.              type="checkbox"
  109.              class="form-check-input"
  110.              id="pagoNaEntrega"
  111.              v-bind:true-value="pedido.simNaEntrega"
  112.              v-bind:false-value="pedido.naoNaEntrega"
  113.              v-model="pedido.pagoNaEntrega"
  114.            >
  115.            <label class="form-check-label" for="pagoNaEntrega">Pago na entrega?</label>
  116.          </div>
  117.          <div class="form-group form-check-inline">
  118.            <input
  119.              type="radio"
  120.              class="form-check-input"
  121.              id="manha"
  122.              value="Manhã"
  123.              v-model="pedido.entrega"
  124.            >
  125.            <label class="form-check-label" for="manha">Manhã</label>
  126.          </div>
  127.          <div class="form-group form-check-inline">
  128.            <input
  129.              type="radio"
  130.              class="form-check-input"
  131.              id="tarde"
  132.              value="Tarde"
  133.              v-model="pedido.entrega"
  134.            >
  135.            <label class="form-check-label" for="tarde">Tarde</label>
  136.          </div>
  137.          <div class="form-group form-check-inline">
  138.            <input
  139.              type="radio"
  140.              class="form-check-input"
  141.              id="noite"
  142.              value="Noite"
  143.              v-model="pedido.entrega"
  144.            >
  145.            <label class="form-check-label" for="noite">Noite</label>
  146.          </div>
  147.          
  148.          <div class="form-group">
  149.            <button type="submit" class="btn btn-primary" v-on:click="submitFormulario">
  150.              Finalizar pedido
  151.            </button>
  152.          </div>
  153.        </form>
  154.      </div>
  155.      <div class="col-12">
  156.        <pre>
  157.          Primeiro nome: {{ pedido.primeiroNome }}
  158.          Último nome: {{ pedido.ultimoNome }}
  159.          Endereço: {{ pedido.endereco }}
  160.          Cidade: {{ pedido.cidade }}
  161.          Estado: {{ pedido.estado }}
  162.          CEP: {{ pedido.cep }}
  163.          Pago na entrega?: {{ pedido.pagoNaEntrega }}
  164.          Entrega: {{ pedido.entrega }}
  165.        </pre>
  166.      </div>
  167.    </div>
  168.  </div>
  169. </template>
  170.  
  171. <script>
  172. export default {
  173.  name: "app",
  174.  data: function() {
  175.    return {
  176.      mostrarFilmes: true,
  177.      title: "Locadora de Filmes",
  178.      horas: new Date().getHours(),
  179.      pedido: {
  180.        primeiroNome: "",
  181.        ultimoNome: "",
  182.        endereco: "",
  183.        cidade: "",
  184.        estado: "",
  185.        cep: "",
  186.        pagoNaEntrega: "Não",
  187.        simNaEntrega: "Sim",
  188.        naoNaEntrega: "Não",
  189.        entrega: "Manhã"
  190.      },
  191.      estados: {
  192.        RJ: 'Rio de Janeiro',
  193.        MG: 'Minas Gerais',
  194.        SP: 'São Paulo',
  195.        ES: 'Espírito Santo'
  196.      },
  197.      filmes: [
  198.        {
  199.          id: 1,
  200.          titulo: "Vingadores",
  201.          descricao: "Um <b>filme</b> de heróis",
  202.          valor: 25,
  203.          imagem: "assets/logo.png",
  204.          estoqueDisponivel: 3
  205.        },
  206.        {
  207.          id: 2,
  208.          titulo: "Pantera Negra",
  209.          descricao: "Um filme de panteras",
  210.          valor: 35,
  211.          imagem: "assets/logo.png",
  212.          estoqueDisponivel: 6
  213.        },
  214.        {
  215.          id: 3,
  216.          titulo: "Homem-Formiga",
  217.          descricao: "Um filme de formigas",
  218.          valor: 20,
  219.          imagem: "assets/logo.png",
  220.          estoqueDisponivel: 2
  221.        },
  222.        {
  223.          id: 4,
  224.          titulo: "Capitã Marvel",
  225.          descricao: "Um filme de capitãs",
  226.          valor: 40,
  227.          imagem: "assets/logo.png",
  228.          estoqueDisponivel: 8
  229.        },
  230.        {
  231.          id: 5,
  232.          titulo: "Hulk",
  233.          descricao: "Um filme de força",
  234.          valor: 10,
  235.          imagem: "assets/logo.png",
  236.          estoqueDisponivel: 7
  237.        }
  238.      ],
  239.      carrinho: []
  240.    };
  241.   },
  242.   methods: {
  243.     submitFormulario() {
  244.       alert('Pedido finalizado');
  245.     },
  246.     mostrarCarrinho() {
  247.       this.mostrarFilmes = this.mostrarFilmes ? false : true;
  248.     },
  249.     adicionarAoCarrinho: function(filme) {
  250.       this.carrinho.push(filme.id);
  251.     },
  252.     quantidadeNoCarrinhoPorFilme: function(filme) {
  253.       var quantidade = 0;
  254.       for (var i = 0; i < this.carrinho.length; i++) {
  255.        if (filme.id == this.carrinho[i]) {
  256.          quantidade++;
  257.        }
  258.      }
  259.      return quantidade;
  260.    },
  261.    validarPermissaoParaAdicionarNoCarrinho: function(filme) {
  262.      return filme.estoqueDisponivel > this.quantidadeNoCarrinhoPorFilme(filme);
  263.     }
  264.   },
  265.   computed: {
  266.     quantidadeNoCarrinho: function() {
  267.       return this.carrinho.length;
  268.     }
  269.   }
  270. };
  271. </script>
  272.  
  273. <style>
  274. #app {
  275.   font-family: "Avenir", Helvetica, Arial, sans-serif;
  276.   -webkit-font-smoothing: antialiased;
  277.   -moz-osx-font-smoothing: grayscale;
  278.   text-align: center;
  279.   color: #2c3e50;
  280.   margin-top: 60px;
  281. }
  282.  
  283. #aberta {
  284.   color: blue;
  285. }
  286.  
  287. #proxima-fechar {
  288.   color: orange;
  289. }
  290.  
  291. #fechada {
  292.   color: red;
  293. }
  294. </style>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement