1282 lines
60 KiB
PHP
Executable File
1282 lines
60 KiB
PHP
Executable File
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{{ config('app.name') }}</title>
|
|
|
|
<link rel="icon" type="image/x-icon" href="{{ URL::asset('assets/dist/img/favicon.ico') }}">
|
|
|
|
<!-- Google Font: Source Sans Pro -->
|
|
<link rel="stylesheet"
|
|
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
|
|
|
|
<!-- Font Awesome -->
|
|
{{-- <link rel="stylesheet" href="{{ URL::asset('assets/plugins/fontawesome-free/css/all.min.css') }}"> --}}
|
|
<link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-6.4.2/css/all.css') }}">
|
|
|
|
<!-- Ionicons -->
|
|
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
|
|
<!-- Tempusdominus Bootstrap 4 -->
|
|
<link rel="stylesheet"
|
|
href="{{ URL::asset('assets/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css') }}">
|
|
<!-- iCheck -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/icheck-bootstrap/icheck-bootstrap.min.css') }}">
|
|
<!-- JQVMap -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/jqvmap/jqvmap.min.css') }}">
|
|
<!-- Theme style -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/dist/css/adminlte.min.css') }}">
|
|
<!-- overlayScrollbars -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/overlayScrollbars/css/OverlayScrollbars.min.css') }}">
|
|
<!-- Daterange picker -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/daterangepicker/daterangepicker.css') }}">
|
|
<!-- summernote -->
|
|
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/summernote/summernote-bs4.min.css') }}">
|
|
|
|
<style>
|
|
[class*=sidebar-dark] .btn-sidebar2,
|
|
[class*=sidebar-dark] .form-control-sidebar2 {
|
|
background-color: #3f474e;
|
|
border: 1px solid #56606a;
|
|
color: #fff;
|
|
}
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body class="hold-transition sidebar-mini layout-fixed">
|
|
<div class="wrapper">
|
|
|
|
<!-- Navbar -->
|
|
<nav class="main-header navbar navbar-expand navbar-white navbar-light" style="background-color: #00B0EA">
|
|
<!-- Left navbar links -->
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"
|
|
style="color:#1f2d3d"></i></a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link">
|
|
<i class="fas fa-play" style="color:#1f3d2f"></i>
|
|
<span class="badge badge-info navbar-badge">{{ count($receiveAllEquipmentOfProject) }}</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link">
|
|
<i class="fas fa-check" style="color:#1f2d3d"></i>
|
|
<span class="badge badge-success navbar-badge"
|
|
style="background-color: #28a745">{{ count($completedEquipments) }} </span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<!-- Right navbar links -->
|
|
<ul class="navbar-nav ml-auto">
|
|
<li class="nav-item d-none d-sm-inline-block">
|
|
<!--<div class="nav-link">{{ Auth::user()->user_name }}</div>-->
|
|
<div class="nav-link" style="color:#1f2d3d">{{ $receiveDataWs->nomenclature_workstation }}</div>
|
|
</li>
|
|
<!-- User Dropdown Menu -->
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link" data-toggle="dropdown" href="#">
|
|
<img src="{{ URL::asset('assets/dist/img/ispt.jpg') }}" class="img-circle elevation-2"
|
|
alt="User Image" style="width:30px;height:30px;">
|
|
</a>
|
|
<div class="dropdown-menu dropdown-menu-right">
|
|
<form id="logout-form" action="{{ route('logout') }}" method="POST">
|
|
@csrf
|
|
@method('POST')
|
|
<a class="dropdown-item" href="{{ route('logout') }}"
|
|
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
|
<i class="fas fa-sign-out-alt text-danger"></i>
|
|
<span>Terminar sessão</span>
|
|
</a>
|
|
</form>
|
|
</div>
|
|
</li>
|
|
<!-- Control sidebar -->
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-widget="control-sidebar" data-controlsidebar-slide="true" href="#"
|
|
role="button" style="color:#1f2d3d">
|
|
<i class="fas fa-bars"></i>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
<!-- /.navbar -->
|
|
|
|
<!-- Main Sidebar Container -->
|
|
<aside class="main-sidebar sidebar-dark-primary elevation-4" style="background-color: #09255C">
|
|
<!-- Brand Logo -->
|
|
<p class="brand-link">
|
|
<img src="{{ URL::asset('assets/dist/img/ispt40.jpg') }}" alt="Ispt4.0 Logo"
|
|
class="brand-image img-circle elevation-3" style="opacity: .8">
|
|
<span class="brand-text font-weight-light">{{ config('app.name') }}</span>
|
|
</p>
|
|
|
|
<!-- Sidebar -->
|
|
<div class="sidebar mt-4">
|
|
|
|
<!-- SidebarSearch Form -->
|
|
<div class="form-inline">
|
|
<div class="input-group" data-widget="sidebar-search">
|
|
<input id="qrtextleft" class="form-control form-control-sidebar text-white" type="search"
|
|
placeholder="Procurar" aria-label="Search">
|
|
<div class="input-group-append">
|
|
<button class="btn btn-sidebar">
|
|
<i class="fas fa-search fa-fw text-white"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Sidebar Menu -->
|
|
<nav class="mt-2">
|
|
{{-- <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" >
|
|
|
|
<!-- Add icons to the links using the .nav-icon class
|
|
with font-awesome or any other icon font library -->
|
|
<li class="menu-closed">
|
|
<a href="#" class="nav-link text-white" style="background-color: #007BFF;">
|
|
<i class="fas fa-play"></i>
|
|
<p>
|
|
{{ count($receiveAllEquipmentOfProject) }}
|
|
a iniciar
|
|
<i class="right fas fa-angle-left"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav-treeview">
|
|
@foreach ($receiveAllEquipmentOfProject as $equipmentOfProject)
|
|
<div class="row text-white">
|
|
<div class="col-sm-1"><i class="fas fa-tag nav-icon"></i></div>
|
|
<div class="col-sm-11"> <p>{{ $equipmentOfProject->equipment_tag }}</p></div>
|
|
</div>
|
|
@endforeach
|
|
</ul>
|
|
</li>
|
|
</ul> --}}
|
|
<ul class="nav nav-pills nav-sidebar flex-column searchable" data-widget="treeview"
|
|
role="menu" data-accordion="false">
|
|
<li class="nav-item menu-closed">
|
|
<a href="#" class="nav-link text-white" style="background-color: #007BFF;">
|
|
<i class="nav-icon fas fa-play"></i>
|
|
<p>
|
|
{{ count($receiveAllEquipmentOfProject) }}
|
|
a iniciar
|
|
<i class="right fas fa-angle-left"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview">
|
|
@foreach ($receiveAllEquipmentOfProject as $equipmentOfProject)
|
|
<div class="row text-white">
|
|
<div class="col-sm-2 pl-4"><i class="fas fa-tag nav-icon"></i></div>
|
|
<div class="col-sm-10">
|
|
<p>{{ $equipmentOfProject->equipment_tag }}</p>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<ul class="nav nav-pills nav-sidebar flex-column searchable" style="display: none;">
|
|
|
|
<!-- Add icons to the links using the .nav-icon class
|
|
with font-awesome or any other icon font library -->
|
|
<li class="nav-item menu-closed">
|
|
<a href="#" class="nav-link text-white" style="background-color: #007BFF;">
|
|
<i class="nav-icon fas fa-play"></i>
|
|
<p>
|
|
{{ count($receiveQrcodeEquipmentsProject) }}
|
|
a iniciar QrCodes
|
|
<i class="right fas fa-angle-left"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview">
|
|
@foreach ($receiveQrcodeEquipmentsProject as $equipmentOfProject)
|
|
<li class="nav-item">
|
|
<a href="{{ route('getEquipmentData', ['equipment_id' => $equipmentOfProject->equipment_id, 'component_tag' => $equipmentOfProject->component_tag]) }}"
|
|
class="nav-link text-white">
|
|
<i class="fas fa-tag nav-icon"></i>
|
|
<p class="Tags">{{ $equipmentOfProject->component_tag }}</p>
|
|
</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
</nav>
|
|
<!-- /.sidebar-menu -->
|
|
</div>
|
|
<!-- /.sidebar -->
|
|
</aside>
|
|
|
|
<!-- Content Wrapper. Contains page content -->
|
|
<div class="content-wrapper">
|
|
<!-- Content Header (Page header) -->
|
|
<div class="content-header">
|
|
<div class="container-fluid">
|
|
<div class="row mb-2">
|
|
<!-- Info box1 -->
|
|
<div class="col-sm-6">
|
|
|
|
</div>
|
|
|
|
<!-- /.col -->
|
|
<div class="col-sm-6">
|
|
|
|
</div><!-- /.col -->
|
|
</div><!-- /.row -->
|
|
</div><!-- /.container-fluid -->
|
|
</div>
|
|
<!-- /.content-header -->
|
|
|
|
<!-- Main content -->
|
|
<section class="content">
|
|
@yield('content')
|
|
</section>
|
|
<!-- /.content -->
|
|
</div>
|
|
<!-- /.content-wrapper -->
|
|
<footer class="main-footer" style="background-color: #00B0EA">
|
|
<strong>Copyright © 2017-{{ date('Y') }} <a href="https://www.isptgroup.com" target="_blank">ISPT -
|
|
Industrial Services,
|
|
SA</a>.</strong>
|
|
Todos os direitos reservados.
|
|
<div class="float-right d-none d-sm-inline-block">
|
|
<b>Versão</b> {{ config('app.version') }}
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- Control Sidebar -->
|
|
<aside class="control-sidebar control-sidebar-dark" data-widget="control-treeview"
|
|
style="background-color: #09255C">
|
|
<!-- Control sidebar content goes here -->
|
|
<div class="p-3 control-sidebar-content">
|
|
|
|
<!-- SidebarSearch Form -->
|
|
<div class="form-inline">
|
|
<div class="input-group" data-widget="sidebar-search">
|
|
<input id="qrtextright" class="form-control form-control-sidebar text-white" type="search"
|
|
placeholder="Procurar" aria-label="Search">
|
|
<div class="input-group-append">
|
|
<button class="btn btn-sidebar">
|
|
<i class="fas fa-search fa-fw text-white"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Sidebar Menu -->
|
|
<nav class="mt-2">
|
|
<ul class="nav nav-pills nav-sidebar flex-column control-sidebar-treeview" role="menu"
|
|
data-accordion="false">
|
|
<!-- Add icons to the links using the .nav-icon class
|
|
with font-awesome or any other icon font library -->
|
|
<li class="nav-item menu-closed">
|
|
<a href="#" class="nav-link text-white" style="background-color: #28a745;">
|
|
<i class="nav-icon fas fa-check"></i>
|
|
<p>
|
|
{{ count($completedEquipments) }}
|
|
válvulas concluídas
|
|
<i class="right fas fa-angle-left"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview">
|
|
@foreach ($completedEquipments as $equipmentDone)
|
|
<li class="nav-item-right">
|
|
<a href="#" class="nav-link text-white">
|
|
<i class="fas fa-tag nav-icon"></i>
|
|
<p>{{ $equipmentDone->equipment_tag }}</p>
|
|
</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
<!-- /.control-sidebar-menu -->
|
|
</div>
|
|
</aside>
|
|
<!-- /.control-sidebar -->
|
|
<!-- /.content-wrapper -->
|
|
{{-- <footer class="main-footer" style="background-color: #00B0EA">
|
|
<strong>Copyright © 2017-{{ date('Y') }} <a href="https://www.isptgroup.com" target="_blank">ISPT -
|
|
Industrial Services,
|
|
SA</a>.</strong>
|
|
Todos os direitos reservados.
|
|
<div class="float-right d-none d-sm-inline-block">
|
|
<b>Versão</b> {{ config('app.version') }}
|
|
</div>
|
|
</footer> --}}
|
|
|
|
|
|
</div>
|
|
<!-- ./wrapper -->
|
|
|
|
<!-- jQuery -->
|
|
<script src="{{ URL::asset('assets/plugins/jquery/jquery.min.js') }}"></script>
|
|
<!-- jQuery UI 1.11.4 -->
|
|
<script src="{{ URL::asset('assets/plugins/jquery-ui/jquery-ui.min.js') }}"></script>
|
|
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
|
|
<script>
|
|
$.widget.bridge('uibutton', $.ui.button)
|
|
</script>
|
|
<!-- Bootstrap 4 -->
|
|
<script src="{{ URL::asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
|
|
<!-- ChartJS -->
|
|
<script src="{{ URL::asset('assets/plugins/chart.js/Chart.min.js') }}"></script>
|
|
<!-- Sparkline -->
|
|
<script src="{{ URL::asset('assets/plugins/sparklines/sparkline.js') }}"></script>
|
|
<!-- JQVMap -->
|
|
<script src="{{ URL::asset('assets/plugins/jqvmap/jquery.vmap.min.js') }}"></script>
|
|
<script src="{{ URL::asset('assets/plugins/jqvmap/maps/jquery.vmap.usa.js') }}"></script>
|
|
<!-- jQuery Knob Chart -->
|
|
<script src="{{ URL::asset('assets/plugins/jquery-knob/jquery.knob.min.js') }}"></script>
|
|
<!-- daterangepicker -->
|
|
<script src="{{ URL::asset('assets/plugins/moment/moment.min.js') }}"></script>
|
|
<script src="{{ URL::asset('assets/plugins/daterangepicker/daterangepicker.js') }}"></script>
|
|
<!-- Tempusdominus Bootstrap 4 -->
|
|
<script src="{{ URL::asset('assets/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js') }}">
|
|
</script>
|
|
<!-- Summernote -->
|
|
<script src="{{ URL::asset('assets/plugins/summernote/summernote-bs4.min.js') }}"></script>
|
|
<!-- overlayScrollbars -->
|
|
<script src="{{ URL::asset('assets/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js') }}"></script>
|
|
<!-- AdminLTE App -->
|
|
<script src="{{ URL::asset('assets/dist/js/adminlte.js') }}"></script>
|
|
<!-- AdminLTE dashboard demo (This is only for demo purposes) -->
|
|
<script src="{{ URL::asset('assets/dist/js/pages/dashboard.js') }}"></script>
|
|
<!-- HTML5 QRCode-->
|
|
<script src="{{ URL::asset('assets/plugins/html5-qrcode/html5-qrcode.min.js') }}"></script>
|
|
|
|
|
|
<script>
|
|
function searchForValueAndNavigate(value, itemsSelector, containerSelector) {
|
|
var searchQuery = value.toLowerCase();
|
|
var found = false; // Variable to track if any item is found
|
|
|
|
$(itemsSelector).each(function() {
|
|
var itemText = $(this).text().toLowerCase();
|
|
if (itemText.includes(searchQuery)) {
|
|
found = true;
|
|
window.location.href = $(this).attr('href');
|
|
return false; // Exit the .each loop after attempting navigation
|
|
}
|
|
});
|
|
|
|
// If no item is found, change the class of <li> elements
|
|
if (!found) {
|
|
$(containerSelector + ' .nav-item.menu-open').each(function() {
|
|
$(this).removeClass('menu-open').addClass('menu-closed');
|
|
});
|
|
}
|
|
}
|
|
|
|
let scanner = new Html5Qrcode("reader");
|
|
let startScan = document.getElementById("startScan");
|
|
let reader = document.getElementById("reader");
|
|
let qrtextleft = document.getElementById("qrtextleft");
|
|
let qrtextright = document.getElementById("qrtextright");
|
|
|
|
startScan.addEventListener('click', function() {
|
|
// Hiding the startScan button and showing the reader
|
|
startScan.style.display = "none";
|
|
reader.style.display = "block";
|
|
|
|
scanner.start({
|
|
facingMode: "environment"
|
|
}, {
|
|
fps: 20,
|
|
qrbox: {
|
|
width: 250,
|
|
height: 250
|
|
}
|
|
},
|
|
function(qrCodeMessage) {
|
|
// This is called when a QR Code is scanned
|
|
|
|
// Suppress every text in front of "@" including it
|
|
|
|
scanner.stop().then(() => {
|
|
qrtextleft.value = qrCodeMessage;
|
|
qrtextright.value = qrCodeMessage;
|
|
reader.style.display = "none";
|
|
startScan.style.display = "block";
|
|
|
|
// Trigger the search functionality for both sidebars
|
|
searchForValueAndNavigate(qrCodeMessage,
|
|
'.main-sidebar .nav.nav-pills.nav-sidebar.flex-column li a',
|
|
'.main-sidebar');
|
|
searchForValueAndNavigate(qrCodeMessage,
|
|
'.control-sidebar .nav.nav-pills.nav-sidebar.flex-column li a',
|
|
'.control-sidebar');
|
|
});
|
|
},
|
|
function(errorMessage) {
|
|
// In case of errors
|
|
console.log(errorMessage);
|
|
}
|
|
)
|
|
.catch(err => {
|
|
console.log(err);
|
|
});
|
|
});
|
|
</script>
|
|
|
|
{{-- <script>
|
|
let scannerCheck = new Html5Qrcode("readerUnique");
|
|
let startScanCheck = document.getElementById("startScanUnique");
|
|
let readerCheck = document.getElementById("readerUnique");
|
|
|
|
startScanCheck.addEventListener('click', function() {
|
|
startScanCheck.style.display = "none";
|
|
readerCheck.style.display = "block";
|
|
|
|
scannerCheck.start({
|
|
facingMode: "environment"
|
|
}, {
|
|
fps: 40,
|
|
qrbox: {
|
|
width: 450,
|
|
height: 450
|
|
}
|
|
},
|
|
|
|
function(qrCodeMessage) {
|
|
scannerCheck.stop().then(() => {
|
|
|
|
//recebe e sepera o valor do Qrcode.
|
|
const parts = qrCodeMessage.split('@');
|
|
const valor = parts[0];
|
|
const componente = parts[1];
|
|
|
|
//verica se existe $receiveComponentTag e se nao e vazio, se nao for separa a varaivel e guarda o valor antes do @
|
|
@if (isset($receiveComponentTag) && !empty($receiveComponentTag))
|
|
var expectedTag = "{{ $receiveComponentTag }}".split('@');
|
|
@endif
|
|
|
|
const expectedValor = expectedTag[0];
|
|
const expectedComponente = "Obturador";
|
|
// Cria a varaivel para receber valores e alterar com base acoes do qrcode.
|
|
let receiveValueValidateQRcode;
|
|
|
|
const qrCodeErrorInput = document.querySelector(
|
|
'#form10 #qrCodeError #qrCodeErrorText');
|
|
|
|
const qrCodeError = document.querySelector('#form10 #qrCodeError');
|
|
|
|
let modalContent;
|
|
|
|
const verificationStatusP = document.querySelector(
|
|
'#form10 #verificationStatus');
|
|
|
|
if (valor == expectedValor && componente == expectedComponente) {
|
|
|
|
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado)
|
|
verificationStatusP.textContent = 'Verificado com sucesso !!!';
|
|
verificationStatusP.style.color = 'green'; // Muda a cor do texto para verde
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
qrCodeError.style.display = 'none';
|
|
|
|
} else {
|
|
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
verificationStatusP.textContent =
|
|
'Tags nao correspondem ao mesmo equipamento, tente novamente com a Tag correta !!! ';
|
|
verificationStatusP.style.color = 'red'; // Muda a cor do texto para verde
|
|
|
|
qrCodeErrorText.textContent =
|
|
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
|
|
qrCodeErrorText.style.color = 'red';
|
|
|
|
qrCodeError.style.display = 'block'
|
|
}
|
|
|
|
// Atualiza o valor do input no formulário
|
|
//Se o Qrcode nao for o qrcode esperado, ele e devolvido como: ''undefined' se nao ele devolve '1'
|
|
const confirmCheckbox = document.querySelector(
|
|
'input[name="ID10[confirm_label_compliance-checkbox]"]');
|
|
confirmCheckbox.value = receiveValueValidateQRcode;
|
|
|
|
// Seleciona o botão pelo seu ID
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
// Verifica se 'receiveValueValidateQRcode' não é 'undefined'
|
|
if (receiveValueValidateQRcode !== undefined) {
|
|
// Se 'receiveValueValidateQRcode' tiver um valor (não 'undefined'), habilita o botão
|
|
submitButton.disabled = false;
|
|
} else {
|
|
// Se 'receiveValueValidateQRcode' for 'undefined', desabilita o botão
|
|
submitButton.disabled = true;
|
|
}
|
|
|
|
|
|
readerCheck.style.display = "block";
|
|
startScanCheck.style.display = "block";
|
|
});
|
|
});
|
|
});
|
|
</script> --}}
|
|
|
|
{{-- <script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
const btnConfirmManual = document.getElementById('btnConfirmManual');
|
|
const submitButton = document.getElementById(
|
|
'checkValidateQrCode'); // Supondo que este seja o ID do seu botão de envio.
|
|
const verificationStatusP = document.querySelector('#form10 #verificationStatus');
|
|
|
|
|
|
btnConfirmManual.addEventListener('click', function() {
|
|
// Atualiza 'receiveValueValidateQRcode' para 0.
|
|
let receiveValueValidateQRcode = 0;
|
|
|
|
// Atualiza o valor do input no formulário.
|
|
const confirmCheckbox = document.querySelector(
|
|
'input[name="ID10[confirm_label_compliance-checkbox]"]');
|
|
confirmCheckbox.value = receiveValueValidateQRcode;
|
|
|
|
// Atualiza o texto de status (opcional).
|
|
verificationStatusP.textContent = 'Etiquetas confirmadas manualmente';
|
|
verificationStatusP.style.color = 'orange'; // Altera a cor do texto conforme necessário.
|
|
|
|
// Habilita o botão de envio (se necessário).
|
|
submitButton.disabled = false;
|
|
|
|
// Fecha a segunda modal.
|
|
$('#exampleModalSmall').modal('hide');
|
|
$('#exampleModal').modal('hide');
|
|
|
|
});
|
|
|
|
const input = document.getElementById('inputReceiveErrors');
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
// Função para verificar e ajustar o estado do botão baseado no valor do input
|
|
function checkInputAndToggleSubmit() {
|
|
const value = input.value;
|
|
submitButton.disabled = !(value === '1' || value === '0');
|
|
}
|
|
|
|
// Inicialmente checa o estado para desabilitar o botão se necessário
|
|
checkInputAndToggleSubmit();
|
|
});
|
|
</script> --}}
|
|
|
|
{{-- <script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
//Variavel para utilizacao de Qrcode
|
|
let scannerCheck = new Html5Qrcode("readerUnique");
|
|
let startScanCheck = document.getElementById("startScanUnique");
|
|
let readerCheck = document.getElementById("readerUnique");
|
|
|
|
//Variavel para receber erro em caso de falha de leitura de QrCode
|
|
const qrCodeError = document.querySelector('#form10 #qrCodeError');
|
|
const qrCodeErrorText = document.querySelector('#form10 #qrCodeError #qrCodeErrorText');
|
|
|
|
//Recebe mensagem variavel de acordo com a leitura do Qrcode ou se foi feito Manualmente
|
|
const verificationStatusP = document.querySelector('#form10 #verificationStatus');
|
|
const confirmCheckbox = document.querySelector('input[name="ID10[confirm_label_compliance-checkbox]"]');
|
|
|
|
//Botao de confirmacao Manual
|
|
const btnConfirmManual = document.getElementById('btnConfirmManual');
|
|
|
|
//Botao do Submit do formulario, nao deve ficar disponivel ate ter algum valor da verificacao de juncao de equipamentos.
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
// Função para verificar e ajustar o estado do botão baseado no valor do input
|
|
function checkInputAndToggleSubmit() {
|
|
const value = confirmCheckbox.value;
|
|
submitButton.disabled = !(value == '1' || value == '0');
|
|
}
|
|
|
|
// Inicialmente checa o estado para desabilitar o botão se necessário
|
|
checkInputAndToggleSubmit();
|
|
|
|
startScanCheck.addEventListener('click', function() {
|
|
startScanCheck.style.display = "none";
|
|
readerCheck.style.display = "block";
|
|
|
|
// Inicia o scanner de QR Code
|
|
scannerCheck.start({
|
|
facingMode: "environment"
|
|
}, {
|
|
fps: 10,
|
|
qrbox: 250
|
|
}, function(qrCodeMessage) {
|
|
// Lógica de processamento do QR Code
|
|
processQRCode(qrCodeMessage);
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
//Botao para fechar e cancelar a Leitura do Qrcode.
|
|
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
|
|
scannerCheck.stop().then(() => {
|
|
|
|
readerCheck.style.display = "none"; // Esconde a área de leitura
|
|
startScanCheck.style.display =
|
|
"block"; // Mostra novamente o botão de iniciar leitura
|
|
|
|
// Opcionalmente, limpa qualquer mensagem de erro ou de sucesso mostrada durante a leitura
|
|
const verificationStatusP = document.querySelector(
|
|
'#form10 #verificationStatus');
|
|
if (verificationStatusP) {
|
|
verificationStatusP.textContent = ''; // Limpa o texto
|
|
verificationStatusP.style.color = ''; // Remove a cor do texto
|
|
}
|
|
|
|
const qrCodeError = document.querySelector('#form10 #qrCodeError');
|
|
if (qrCodeError) {
|
|
qrCodeError.style.display = 'none'; // Esconde a mensagem de erro
|
|
}
|
|
|
|
// Reseta o valor do input para um estado inicial, se necessário
|
|
const confirmCheckbox = document.querySelector(
|
|
'input[name="ID10[confirm_label_compliance-checkbox]"]');
|
|
if (confirmCheckbox) {
|
|
confirmCheckbox.value = ''; // Reseta o valor do input
|
|
}
|
|
|
|
// Reseta ou ajusta qualquer outro elemento da interface conforme necessário
|
|
});
|
|
});
|
|
|
|
|
|
function processQRCode(qrCodeMessage) {
|
|
scannerCheck.stop().then(() => {
|
|
|
|
//recebe e sepera o valor do Qrcode.
|
|
const parts = qrCodeMessage.split('@');
|
|
const valor = parts[0];
|
|
const componente = parts[1];
|
|
|
|
//verica se existe $receiveComponentTag e se nao e vazio, se nao for separa a varaivel e guarda o valor antes do @
|
|
@if (isset($receiveComponentTag) && !empty($receiveComponentTag))
|
|
var expectedTag = "{{ $receiveComponentTag }}".split('@');
|
|
@endif
|
|
|
|
const expectedValor = expectedTag[0];
|
|
const expectedComponente = "Obturador";
|
|
// Cria a varaivel para receber valores e alterar com base acoes do qrcode.
|
|
let receiveValueValidateQRcode;
|
|
|
|
const qrCodeErrorInput = document.querySelector(
|
|
'#form10 #qrCodeError #qrCodeErrorText');
|
|
|
|
const qrCodeError = document.querySelector('#form10 #qrCodeError');
|
|
|
|
let modalContent;
|
|
|
|
|
|
const verificationStatusP = document.querySelector(
|
|
'#form10 #verificationStatus');
|
|
|
|
if (valor == expectedValor && componente == expectedComponente) {
|
|
|
|
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado)
|
|
verificationStatusP.textContent = 'Verificado com sucesso !!!';
|
|
verificationStatusP.style.color = 'green'; // Muda a cor do texto para verde
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
qrCodeError.style.display = 'none';
|
|
|
|
} else {
|
|
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
verificationStatusP.textContent =
|
|
'Tags nao correspondem ao mesmo equipamento, tente novamente com a Tag correta !!! ';
|
|
verificationStatusP.style.color = 'red'; // Muda a cor do texto para verde
|
|
|
|
qrCodeErrorText.textContent =
|
|
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
|
|
qrCodeErrorText.style.color = 'red';
|
|
|
|
qrCodeError.style.display = 'block'
|
|
}
|
|
|
|
// Atualiza o valor do input no formulário
|
|
//Se o Qrcode nao for o qrcode esperado, ele e devolvido como: ''undefined' se nao ele devolve '1'
|
|
const confirmCheckbox = document.querySelector(
|
|
'input[name="ID10[confirm_label_compliance-checkbox]"]');
|
|
confirmCheckbox.value = receiveValueValidateQRcode;
|
|
|
|
// Seleciona o botão pelo seu ID
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
// Verifica se 'receiveValueValidateQRcode' não é 'undefined'
|
|
if (receiveValueValidateQRcode !== undefined) {
|
|
// Se 'receiveValueValidateQRcode' tiver um valor (não 'undefined'), habilita o botão
|
|
submitButton.disabled = false;
|
|
} else {
|
|
// Se 'receiveValueValidateQRcode' for 'undefined', desabilita o botão
|
|
submitButton.disabled = true;
|
|
}
|
|
readerCheck.style.display = "block";
|
|
startScanCheck.style.display = "block";
|
|
|
|
});
|
|
}
|
|
|
|
btnConfirmManual.addEventListener('click', function() {
|
|
|
|
$('#exampleModalSmall').modal('hide'); // Fecha a segunda modal.
|
|
$('#exampleModal').modal('hide'); // Fecha a primeira modal.
|
|
|
|
// Atualiza 'receiveValueValidateQRcode' para 0.
|
|
let receiveValueValidateQRcode = 0;
|
|
confirmCheckbox.value =
|
|
receiveValueValidateQRcode; // Atualiza o valor do input para refletir a confirmação manual
|
|
|
|
verificationStatusP.textContent = 'Etiquetas confirmadas manualmente';
|
|
verificationStatusP.style.color = 'orange'; // Altera a cor do texto conforme necessário.
|
|
|
|
|
|
checkInputAndToggleSubmit(); // Checa e ajusta o estado do botão após modificar o valor
|
|
|
|
scannerCheck.stop().then(() => {
|
|
// Apos fechar as Modais, cancelamos o mode de leitura se por acaso tiver sido selecionado e nao apertou em fechar.
|
|
readerCheck.style.display = "none"; // Esconde a área de leitura
|
|
startScanCheck.style.display =
|
|
"block"; // Mostra novamente o botão de iniciar leitura
|
|
|
|
});
|
|
|
|
// submitButton.disabled = false;
|
|
|
|
});
|
|
|
|
});
|
|
</script> --}}
|
|
|
|
|
|
|
|
{{-- <script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
let scannerCheck = new Html5Qrcode("readerUnique");
|
|
let startScanCheck = document.getElementById("startScanUnique");
|
|
let readerCheck = document.getElementById("readerUnique");
|
|
let currentFormId = ''; // Variável para armazenar o ID do formulário ativo
|
|
|
|
// Atualiza o estado do botão de envio com base no valor do checkbox
|
|
function checkInputAndToggleSubmit(formId) {
|
|
const confirmCheckbox = document.querySelector(
|
|
`#${formId} input[name^="ID"][name$="[confirm_label_compliance-checkbox]"]`);
|
|
const value = confirmCheckbox.value;
|
|
const submitButton = document.querySelector(
|
|
`#${formId} .submit-button-class`); // Adapte a classe do botão de envio conforme necessário
|
|
submitButton.disabled = !(value == '1' || value == '0');
|
|
}
|
|
|
|
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
|
|
button.addEventListener('click', function() {
|
|
currentFormId = this.getAttribute(
|
|
'data-form-id'); // Atualiza o ID do formulário ativo
|
|
checkInputAndToggleSubmit(currentFormId);
|
|
});
|
|
});
|
|
|
|
function startScan() {
|
|
startScanCheck.style.display = "none";
|
|
readerCheck.style.display = "block";
|
|
scannerCheck.start({
|
|
facingMode: "environment"
|
|
}, {
|
|
fps: 10,
|
|
qrbox: 250
|
|
}, function(qrCodeMessage) {
|
|
processQRCode(qrCodeMessage);
|
|
});
|
|
}
|
|
|
|
function processQRCode(qrCodeMessage) {
|
|
scannerCheck.stop().then(() => {
|
|
const parts = qrCodeMessage.split('@');
|
|
const valor = parts[0];
|
|
const componente = parts[1];
|
|
var expectedTag = "{{ $receiveComponentTag }}".split(
|
|
'@'); // Adapte conforme necessário
|
|
const expectedValor = expectedTag[0];
|
|
const expectedComponente = determineExpectedComponent(
|
|
currentFormId); // Função para determinar o componente esperado com base no formId
|
|
|
|
let receiveValueValidateQRcode = (valor == expectedValor && componente ==
|
|
expectedComponente) ? 1 : 0;
|
|
updateUIBasedOnQRCodeResult(currentFormId, receiveValueValidateQRcode);
|
|
});
|
|
}
|
|
|
|
function determineExpectedComponent(formId) {
|
|
// Adapte esta lógica conforme necessário
|
|
return (formId === "form10") ? "Obturador" : "Flange";
|
|
}
|
|
|
|
function updateUIBasedOnQRCodeResult(formId, isValid) {
|
|
const verificationStatusP = document.querySelector(`#${formId} #verificationStatus`);
|
|
const qrCodeError = document.querySelector(`#${formId} #qrCodeError`);
|
|
verificationStatusP.textContent = isValid ? 'Verificado com sucesso !!!' :
|
|
'Tags não correspondem. Tente novamente!';
|
|
verificationStatusP.style.color = isValid ? 'green' : 'red';
|
|
qrCodeError.style.display = isValid ? 'none' : 'block';
|
|
checkInputAndToggleSubmit(formId);
|
|
}
|
|
|
|
// Adicione mais eventos conforme necessário, como o clique no botão de confirmação manual, etc.
|
|
|
|
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
|
|
// Pare a leitura do QR Code e ajuste a UI conforme necessário
|
|
});
|
|
});
|
|
</script> --}}
|
|
|
|
{{-- <script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
//Variavel para utilizacao de Qrcode
|
|
let scannerCheck = new Html5Qrcode("readerUnique");
|
|
let startScanCheck = document.getElementById("startScanUnique");
|
|
let readerCheck = document.getElementById("readerUnique");
|
|
|
|
//Botao de confirmacao Manual
|
|
const btnConfirmManual = document.getElementById('btnConfirmManual');
|
|
|
|
//Botao do Submit do formulario, nao deve ficar disponivel ate ter algum valor da verificacao de juncao de equipamentos.
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
|
|
// Função para verificar e ajustar o estado do botão baseado no valor do input
|
|
function checkInputAndToggleSubmit() {
|
|
const value = confirmCheckbox.value;
|
|
submitButton.disabled = !(value == '1' || value == '0');
|
|
}
|
|
|
|
// Inicialmente checa o estado para desabilitar o botão se necessário
|
|
checkInputAndToggleSubmit();
|
|
|
|
|
|
//Ao click no botao, indica em qual form esta, para ser preciso ao saber quais as verificacoes necessarias para o Qrcode
|
|
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
|
|
|
|
|
|
button.addEventListener('click', function(formId) {
|
|
|
|
const formId = this.getAttribute('data-form-id');
|
|
|
|
console.log(formId);
|
|
|
|
const formSelector = `#${formId}`;
|
|
// Extrai o número do formulário a partir do formId (assumindo que formId é algo como "form10")
|
|
const formNumber = formId.replace('form', '');
|
|
// Constrói o seletor do input com base no número do formulário
|
|
const inputName = `ID${formNumber}[confirm_label_compliance-checkbox]`;
|
|
|
|
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
|
|
const qrCodeErrorText = document.querySelector(
|
|
`${formSelector} #qrCodeErrorText`);
|
|
|
|
const verificationStatusP = document.querySelector(
|
|
`${formSelector} #verificationStatus`);
|
|
// Usa o inputName construído para selecionar o input correto
|
|
const confirmCheckbox = document.querySelector(
|
|
`${formSelector} input[name="${inputName}"]`);
|
|
const expectedComponente = (formId === "form10") ? "Obturador" : "Flange";
|
|
|
|
startScan(formId, qrCodeError, qrCodeErrorText, verificationStatusP,
|
|
confirmCheckbox, expectedComponente);
|
|
});
|
|
|
|
});
|
|
|
|
function startScan(formId, qrCodeError, qrCodeErrorText, verificationStatusP, confirmCheckbox,
|
|
expectedComponente) {
|
|
startScanCheck.style.display = "none";
|
|
readerCheck.style.display = "block";
|
|
|
|
scannerCheck.start({
|
|
facingMode: "environment"
|
|
}, {
|
|
fps: 10,
|
|
qrbox: 250
|
|
}, function(qrCodeMessage) {
|
|
processQRCode(qrCodeMessage, qrCodeError, qrCodeErrorText, verificationStatusP,
|
|
confirmCheckbox, expectedComponente);
|
|
});
|
|
}
|
|
|
|
function processQRCode(qrCodeMessage, qrCodeError, qrCodeErrorText, verificationStatusP,
|
|
confirmCheckbox, expectedComponente) {
|
|
|
|
//recebe e sepera o valor do Qrcode.
|
|
const parts = qrCodeMessage.split('@');
|
|
const valor = parts[0];
|
|
const componente = parts[1];
|
|
|
|
//verica se existe $receiveComponentTag e se nao e vazio, se nao for separa a varaivel e guarda o valor antes do @
|
|
@if (isset($receiveComponentTag) && !empty($receiveComponentTag))
|
|
var expectedTag = "{{ $receiveComponentTag }}".split('@');
|
|
@endif
|
|
|
|
const expectedValor = expectedTag[0];
|
|
let receiveValueValidateQRcode;
|
|
|
|
let modalContent;
|
|
|
|
|
|
|
|
if (valor == expectedValor && componente == expectedComponente) {
|
|
|
|
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado)
|
|
verificationStatusP.textContent = 'Verificado com sucesso !!!';
|
|
verificationStatusP.style.color = 'green'; // Muda a cor do texto para verde
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
qrCodeError.style.display = 'none';
|
|
|
|
} else {
|
|
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação
|
|
verificationStatusP.textContent =
|
|
'Tags nao correspondem ao mesmo equipamento, tente novamente com a Tag correta !!! ';
|
|
verificationStatusP.style.color = 'red'; // Muda a cor do texto para verde
|
|
|
|
qrCodeErrorText.textContent =
|
|
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
|
|
qrCodeErrorText.style.color = 'red';
|
|
|
|
qrCodeError.style.display = 'block'
|
|
}
|
|
|
|
// Atualiza o valor do input no formulário
|
|
confirmCheckbox.value = receiveValueValidateQRcode;
|
|
|
|
// Seleciona o botão pelo seu ID
|
|
const submitButton = document.getElementById('checkValidateQrCode');
|
|
|
|
// Verifica se 'receiveValueValidateQRcode' não é 'undefined'
|
|
if (receiveValueValidateQRcode !== undefined) {
|
|
// Se 'receiveValueValidateQRcode' tiver um valor (não 'undefined'), habilita o botão
|
|
submitButton.disabled = false;
|
|
} else {
|
|
// Se 'receiveValueValidateQRcode' for 'undefined', desabilita o botão
|
|
submitButton.disabled = true;
|
|
}
|
|
readerCheck.style.display = "block";
|
|
startScanCheck.style.display = "block";
|
|
}
|
|
|
|
// Botão para fechar e cancelar a Leitura do Qrcode.
|
|
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
|
|
scannerCheck.stop().then(() => {
|
|
// Assumindo que o ID do formulário atual está armazenado de alguma forma
|
|
// Talvez através de um atributo data no botão de leitura do QR code ou de outra maneira.
|
|
// Você precisa definir como o formId é recuperado aqui. Vou usar um placeholder para ilustração.
|
|
const formId =
|
|
currentFormId; // Placeholder: substitua pela lógica correta de obtenção do formId atual
|
|
console.log(formId);
|
|
const formSelector = `#${formId}`;
|
|
const formNumber = formId.replace('form', '');
|
|
const inputName = `ID${formNumber}[confirm_label_compliance-checkbox]`;
|
|
|
|
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
|
|
const verificationStatusP = document.querySelector(
|
|
`${formSelector} #verificationStatus`);
|
|
|
|
const confirmCheckbox = document.querySelector(
|
|
`${formSelector} input[name="${inputName}"]`);
|
|
|
|
|
|
// Esconde a área de leitura
|
|
readerCheck.style.display = "none";
|
|
// Mostra novamente o botão de iniciar leitura
|
|
startScanCheck.style.display = "block";
|
|
|
|
// Limpa qualquer mensagem de erro ou de sucesso mostrada durante a leitura
|
|
if (verificationStatusP) {
|
|
verificationStatusP.textContent = '';
|
|
verificationStatusP.style.color = '';
|
|
}
|
|
|
|
if (qrCodeError) {
|
|
qrCodeError.style.display = 'none';
|
|
}
|
|
|
|
// Reseta o valor do input para um estado inicial
|
|
if (confirmCheckbox) {
|
|
confirmCheckbox.value = '';
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
btnConfirmManual.addEventListener('click', function() {
|
|
// Atualiza 'receiveValueValidateQRcode' para 0.
|
|
let receiveValueValidateQRcode = 0;
|
|
confirmCheckbox.value =
|
|
receiveValueValidateQRcode; // Atualiza o valor do input para refletir a confirmação manual
|
|
|
|
verificationStatusP.textContent = 'Etiquetas confirmadas manualmente';
|
|
verificationStatusP.style.color = 'orange'; // Altera a cor do texto conforme necessário.
|
|
|
|
checkInputAndToggleSubmit(); // Checa e ajusta o estado do botão após modificar o valor
|
|
|
|
scannerCheck.stop().then(() => {
|
|
$('#exampleModalSmall').modal('hide'); // Fecha a segunda modal.
|
|
$('#exampleModal').modal('hide'); // Fecha a primeira modal.
|
|
|
|
// Apos fechar as Modais, cancelamos o mode de leitura se por acaso tiver sido selecionado e nao apertou em fechar.
|
|
readerCheck.style.display = "none"; // Esconde a área de leitura
|
|
startScanCheck.style.display =
|
|
"block"; // Mostra novamente o botão de iniciar leitura
|
|
|
|
});
|
|
});
|
|
|
|
});
|
|
</script> --}}
|
|
|
|
|
|
{{-- Novo teste --}}
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
// let scannerCheck;
|
|
// let isScanning = false; // Estado global de escaneamento
|
|
|
|
//Para leitura do Qrcode
|
|
let scannerCheck = new Html5Qrcode("readerUnique");
|
|
let startScanCheck = document.getElementById("startScanUnique");
|
|
let readerCheck = document.getElementById("readerUnique");
|
|
|
|
const btnConfirmManual = document.getElementById('btnConfirmManual');
|
|
|
|
let currentFormId = ''; // Variável para armazenar o ID do formulário ativo
|
|
|
|
// Captura cliques em botões que abrem a modal e extrai o ID do formulário
|
|
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
|
|
button.addEventListener('click', function() {
|
|
currentFormId = this.getAttribute('data-form-id');
|
|
console.log(` ${currentFormId}`); // Exibe o ID do formulário atual
|
|
// const submitButton = document.querySelector(`${formSelector} #checkValidateQrCode`);
|
|
});
|
|
});
|
|
|
|
// Evento de clique para iniciar a leitura do QR Code
|
|
startScanCheck.addEventListener('click', function() {
|
|
startScanCheck.style.display = "none";
|
|
readerCheck.style.display = "block";
|
|
|
|
// Inicia o scanner de QR Code com configurações específicas
|
|
scannerCheck.start({
|
|
facingMode: "environment" // Usa a câmera traseira
|
|
}, {
|
|
fps: 10,
|
|
qrbox: 250
|
|
}, function(qrCodeMessage) {
|
|
// Chamada quando um QR Code é detectado
|
|
processQRCode(qrCodeMessage,currentFormId);
|
|
// startScan(currentFormId); // Inicia a leitura com base no formulário ativo
|
|
});
|
|
|
|
});
|
|
|
|
function processQRCode(qrCodeMessage, currentFormId) {
|
|
scannerCheck.stop().then(() => {
|
|
// Separa o valor do QR code.
|
|
const parts = qrCodeMessage.split('@');
|
|
const valor = parts[0];
|
|
const componente = parts[1];
|
|
|
|
//verica se existe $receiveComponentTag e se nao e vazio, se nao for separa a varaivel e guarda o valor antes do @
|
|
@if (isset($receiveComponentTag) && !empty($receiveComponentTag))
|
|
var expectedTag = "{{ $receiveComponentTag }}".split('@');
|
|
@endif
|
|
|
|
//Verifica se o form atual espera receber o valor : Obturador ou Flange
|
|
const expectedComponente = (currentFormId == "form10") ? "Obturador" : "Flange";
|
|
|
|
const expectedValor = expectedTag[0];
|
|
let receiveValueValidateQRcode; //
|
|
// Seleciona os elementos específicos do formulário ativo.
|
|
const formSelector = `#${currentFormId}`;
|
|
|
|
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
|
|
const qrCodeErrorText = document.querySelector(`${formSelector} #qrCodeErrorText`);
|
|
const verificationStatusP = document.querySelector(`${formSelector} #verificationStatus`);
|
|
|
|
const confirmCheckbox = document.querySelector(
|
|
`${formSelector} input[name^='ID'][name$='[confirm_label_compliance-checkbox]']`
|
|
);
|
|
|
|
|
|
// const btnConfirmManual = document.getElementById('btnConfirmManual');
|
|
// Processa a leitura do QR Code.
|
|
if (valor == expectedValor && componente == expectedComponente) {
|
|
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado).
|
|
verificationStatusP.textContent = 'Verificado com sucesso !!!';
|
|
verificationStatusP.style.color = 'green';
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação.
|
|
qrCodeError.style.display = 'none';
|
|
} else {
|
|
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação.
|
|
verificationStatusP.textContent =
|
|
'Tags não correspondem ao mesmo equipamento, tente novamente com a Tag correta !!!';
|
|
verificationStatusP.style.color = 'red';
|
|
qrCodeErrorText.textContent =
|
|
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
|
|
qrCodeErrorText.style.color = 'red';
|
|
qrCodeError.style.display = 'block';
|
|
}
|
|
// Apos finalizar a leitura, deve voltar a poder utilizar a leitura do QrCode se necessario.
|
|
readerCheck.style.display = "none";
|
|
startScanCheck.style.display = "block";
|
|
// Atualiza o valor do input no formulário com o resultado da verificação.
|
|
confirmCheckbox.value = receiveValueValidateQRcode;
|
|
|
|
// Ajusta o estado do botão de submit com base no resultado da verificação.
|
|
const submitButton = document.querySelector(
|
|
`${formSelector} #checkValidateQrCode`); // Ajuste o seletor conforme necessário.
|
|
|
|
console.log(submitButton);
|
|
|
|
submitButton.disabled = receiveValueValidateQRcode !== 1;
|
|
});
|
|
}
|
|
|
|
// Configura o evento de clique para o botão que para a leitura do QR Code
|
|
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
|
|
// Para o scanner de QR Code e executa ações de limpeza da interface
|
|
stopScan(currentFormId);
|
|
});
|
|
|
|
//Função para parar a leitura do QR Code e limpar a interface
|
|
function stopScan(currentFormId) {
|
|
scannerCheck.stop().then(() => {
|
|
readerCheck.style.display = "none";
|
|
startScanCheck.style.display = "block";
|
|
//Recebe o form atual
|
|
const formSelector = `#${currentFormId}`;
|
|
|
|
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
|
|
const verificationStatusP = document.querySelector(
|
|
`${formSelector} #verificationStatus`);
|
|
|
|
//De acordo com o form atual, devolve o nome do input referente ao numero do form atual
|
|
const confirmCheckbox = document.querySelector(
|
|
`${formSelector} input[name^='ID'][name$='[confirm_label_compliance-checkbox]']`
|
|
);
|
|
console.log(confirmCheckbox);
|
|
});
|
|
}
|
|
|
|
btnConfirmManual.addEventListener('click', function() {
|
|
|
|
const formSelector = `#${currentFormId}`;
|
|
|
|
// const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
|
|
// const verificationStatusP = document.querySelector(`${formSelector} #verificationStatus`);
|
|
// // Constrói o nome do input dinamicamente com base no ID do formulário atual
|
|
// const inputNameSelector =
|
|
// `input[name='ID${currentFormId.replace('form', '')}[confirm_label_compliance-checkbox]']`;
|
|
// const confirmCheckbox = document.querySelector(`${formSelector} ${inputNameSelector}`);
|
|
// if (!confirmCheckbox) {
|
|
// console.error("Elemento confirmCheckbox não encontrado.");
|
|
// return;
|
|
// }
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
$(document).on('click', '[data-widget="control-treeview"] .nav-link', function(event) {
|
|
event.preventDefault();
|
|
var checkElement = $(this).next();
|
|
|
|
if ((checkElement.is('.nav-treeview')) && (checkElement.is(':visible'))) {
|
|
checkElement.slideUp('normal', function() {
|
|
checkElement.removeClass('menu-open');
|
|
});
|
|
checkElement.parent("li").removeClass("menu-open");
|
|
} else if ((checkElement.is('.nav-treeview')) && (!checkElement.is(':visible'))) {
|
|
var parent = $(this).parents('ul').first();
|
|
var ul = parent.find('ul:visible').slideUp('normal');
|
|
ul.removeClass('menu-open');
|
|
var parent_li = $(this).parent("li");
|
|
|
|
checkElement.slideDown('normal', function() {
|
|
checkElement.addClass('menu-open');
|
|
parent.find('.menu-open').not(checkElement).removeClass('menu-open');
|
|
});
|
|
}
|
|
if (checkElement.is('.nav-treeview')) {
|
|
event.preventDefault();
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<script>
|
|
function handleSearch(inputSelector, itemsSelector, containerSelector) {
|
|
console.log(inputSelector);
|
|
$(inputSelector).on('keyup', function() {
|
|
var searchQuery = $(this).val().toLowerCase();
|
|
var found = false; // Variable to track if any item is found
|
|
|
|
$(itemsSelector).each(function() {
|
|
var itemText = $(this).text().toLowerCase();
|
|
if (itemText.includes(searchQuery)) {
|
|
$(this).show();
|
|
found = true;
|
|
} else {
|
|
$(this).hide();
|
|
}
|
|
});
|
|
|
|
// If any item is found, change the class of <li> elements
|
|
if (found) {
|
|
$(containerSelector + ' .nav-item.menu-closed').each(function() {
|
|
$(this).removeClass('menu-closed').addClass('menu-open');
|
|
});
|
|
} else {
|
|
$(containerSelector + ' .nav-item.menu-open').each(function() {
|
|
$(this).removeClass('menu-open').addClass('menu-closed');
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// Nao me parece fazer nada, nao encontrei funcionalidade ainda, ja que a pesquisa ainda e feita, e a selacao tambem.
|
|
handleSearch('#qrtextleft', '.searchable .nav.nav-pills.nav-sidebar.flex-column li.tags', '.searchable');
|
|
|
|
|
|
|
|
// Apply the search functionality for the main sidebar
|
|
// handleSearch('#qrtextleft', '.main-sidebar .nav.nav-pills.nav-sidebar.flex-column li', '.main-sidebar');
|
|
|
|
// Apply the search functionality for the control sidebar
|
|
// handleSearch('#qrtextright', '.control-sidebar .nav.nav-pills.nav-sidebar.flex-column li', '.control-sidebar');
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|