Advertisement
Guest User

App.vue

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