Ir para conteúdo
Fórum Script Brasil
  • 0

Não consegui usar Livewire.dispatch( ) dentro do JavaScript [Resolvido]


Frank K Hosaka

Pergunta

O Livewire não consegue fazer o serviço de impressão. Quem faz isso é o bom e velho JavaScript. O problema é como o JavaScript vai devolver o comando para o Livewire. Há vários tutoriais na internet, recomendando a usar o Livewire.dispatch("voltar") dentro do JavaScript e um protected $listeners=["voltar"=>"voltar"] dentro do componente, mas isso não deu certo comigo, eu tive que apelar para a velha gambiarra, eu pedi para o JavaScript voltar para o orçamento.

arquivo app > Livewire > Lcontrolid.php
<?php
namespace App\Livewire;
use App\Models\tbpedido;
use Livewire\Attributes\Layout;
use Livewire\Component;

#[Layout('components.layouts.app',['titulo'=>'Imprimir Pedido'])]
class Lcontrolid extends Component {

    public $itens,$modal,$ped;

    function mount($pedido) {
        $this->ped=$pedido;
        $this->itens=tbpedido::where('tbpedido.ped',$pedido)
            ->join('tbhistped','tbpedido.ped','=','tbhistped.ped')
            ->join('tbprod','tbprod.codprod','=','tbhistped.codprod')->get();
        $num_rows=count($this->itens);
        if($num_rows==0) { $this->modal=true; }  
        session(['ocultar'=>true]); 
    }
}

arquivo resources > views > livewire > lcontrolid.blade.php
<div>
    @if($modal)
        Não há nada para imprimir
    @else
        <table>
        <tr class=fw-semibold><td colspan=7>Quitanda do Frank Corporation
        <tr class=fw-semibold><td colspan=7>Pedido {{$itens[0]->ped}} de {{dbr($itens[0]->dia)}}
        @foreach($itens as $item)
          <tr><td colspan=7>{{$item->prod}}
          <tr><td class=text-end>{{$item->qt}}
              <td class=text-end>{{$item->un}}
              <td class=px-2>x<td class=text-end>{{dec($item->unitario)}}
              <td>=<td class=text-end>{{dec($item->subtotal)}}
        @endforeach
        <tr class=fw-semibold><td>Total<td><td><td><td><td class=text-end>{{dec($itens[0]->total)}}
    @endif
    <script>
        window.print()
        window.onafterprint = function() {
            location.replace('/lorcamento/{{$ped}}')
        }
    </script>
</div>

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Encontrei a resposta nessa mensagem: https://github.com/livewire/livewire/pull/8226

Adaptando ao meu código, ficou assim:

 

arquivo app > Livewire > Lcontrolid.php
<?php
namespace App\Livewire;
use App\Models\tbpedido;
use Livewire\Attributes\Layout;
use Livewire\Component;

#[Layout('components.layouts.app',['titulo'=>'Imprimir Pedido'])]
class Lcontrolid extends Component {

    public $itens,$modal,$ped;
    protected $listeners=['voltar'=>'voltar'];

    function mount($pedido) {
        $this->ped=$pedido;
        $this->itens=tbpedido::where('tbpedido.ped',$pedido)
            ->join('tbhistped','tbpedido.ped','=','tbhistped.ped')
            ->join('tbprod','tbprod.codprod','=','tbhistped.codprod')->get();
        $num_rows=count($this->itens);
        if($num_rows==0) { $this->modal=true; }  
        session(['ocultar'=>true]); 
    }

    function voltar() {
        session()->forget('ocultar');
        redirect("/lorcamento/$this->ped");
    }

}

arquivo resources > views > livewire > lcontrolid.blade.php
<div>
    @if($modal)
        Não há nada para imprimir
    @else
        <table>
        <tr class=fw-semibold><td colspan=7>Quitanda do Frank Corporation
        <tr class=fw-semibold><td colspan=7>Pedido {{$itens[0]->ped}} de {{dbr($itens[0]->dia)}}
        @foreach($itens as $item)
          <tr><td colspan=7>{{$item->prod}}
          <tr><td class=text-end>{{$item->qt}}
              <td class=text-end>{{$item->un}}
              <td class=px-2>x<td class=text-end>{{dec($item->unitario)}}
              <td class=px-2>=<td class=text-end>{{dec($item->subtotal)}}
        @endforeach
        <tr class=fw-semibold><td>Total<td><td><td><td><td class=text-end>{{dec($itens[0]->total)}}
    @endif

    @script
    <script>
        window.print()
        window.onafterprint = function() {
            setTimeout(()=>{$wire.$dispatch('voltar')})
            // location.replace('/lorcamento/{{$ped}}')
        }
    </script>
    @endscript
</div>

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,4k
    • Posts
      652,2k
×
×
  • Criar Novo...