1<!doctype html> 2<html lang="pt-br"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <title>Prefeitura Municipal de Oliveira Dos Brejinhos - Ba</title> 8 9 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" 10 integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" 11 crossorigin="anonymous" referrerpolicy="no-referrer" /> 12 13 14 15
15<script src="https://kit.fontawesome.com/7c366fa5c4.js" crossorigin="anonymous"></script>
15 16 <link rel="icon" type="image/x-icon" href="src/View/Layout/favicon/favicon.ico"> 17 <link rel="shortcut icon" href="src/View/Layout/favicon/favicon.ico" type="image/x-icon"> 18 <link rel="apple-touch-icon" href="src/View/Layout/favicon/favicon.ico"> 19 <link href="node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> 20 <link href="public/css/app.css" rel="stylesheet"> 21 <link href="public/js/app.js"> 22 <link href="public/js/jquery.js"> 23 <link rel="stylesheet" href="node_modules/bootstrap-icons/font/bootstrap-icons.css"> 24
24<script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
24 25 <link href="https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.css" rel="stylesheet"> 26
26<script src="https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js"></script>
26 27 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" 28 integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> 29
29<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
29 30 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"> 31 32 33
33<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
33 34
34<script src="https://deuxhuithuit.github.io/quicksearch/r/src/jquery.quicksearch.js"></script>
34 35 36 37
37<script> 38 ! function (d, s, id) { 39 var js, fjs = d.getElementsByTagName(s)[0]; 40 if (!d.getElementById(id)) { 41 js = d.createElement(s); 42 js.id = id; 43 js.src = 'https://weatherwidget.io/js/widget.min.js'; 44 fjs.parentNode.insertBefore(js, fjs); 45 } 46 }(document, 'script', 'weatherwidget-io-js'); 47 </script>
47 48</head> 49 50 51 52<body><nav class="navbar fixed-top mb_menu container-fluid" 53 style="background-color: #0A28D2;"> 54 55 <div class="container-fluid d-flex justify-content-between align-items-center"> 56 57 <!-- Portal Transparência --> 58 <div class="d-flex align-items-center ms-5"> 59 <a href="https://transparencia.caldeiraogrande.ba.gov.br" 60 class="btn tr-button"> 61 PORTAL DA TRANSPARÃNCIA 62 </a> 63 </div> 64 65 <!-- Logo --> 66 <div class="d-flex justify-content-center flex-grow-1 ms-5"> 67 <a class="navbar-brand m-0"> 68 <img src="public/images/logo/logo.png" width="300"> 69 </a> 70 </div> 71 72 <!-- Redes Sociais --> 73 <div class="d-flex align-items-center gap-1 ms-5"> 74 75 <button id="searchBtn" class="btn btn-outline-danger glass-box"> 76 <i class="fa-solid fa-magnifying-glass"></i> 77 </button> 78 79 <input id="searchInput" 80 type="text" 81 class="form-control glass-box" 82 placeholder="Buscar" 83 style="width:130px;"> 84 85 <a href="https://www.instagram.com/pref.oliveiradosbrejinhos/" class="btn btn-outline-danger glass-box"> 86 <i class="fa-brands fa-instagram"></i> 87 </a> 88 89 <a href="https://www.facebook.com/prefeituradeoliveiradosbrejinhos" class="btn btn-outline-danger glass-box"> 90 <i class="fa-brands fa-facebook"></i> 91 </a> 92 93 <a href="https://www.youtube.com/@OliveiraDosBrejinhos" class="btn btn-outline-danger glass-box"> 94 <i class="fa-brands fa-youtube"></i> 95 </a> 96 97 <a href="https://wa.me/message/JX4V6KJNSAOUE1" 98 target="_blank" 99 class="btn btn-outline-danger glass-box"> 100 <i class="bi bi-whatsapp"></i> 101 </a> 102 103 </div> 104 105 </div> 106 107</nav> 108<nav class="navbar navbar-expand-lg fixed-top container-fluid mb_mn_config h6" style="background-color:#0a28d2; top: 130px;"><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> <div class="row collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav text-center d-flex justify-content-center grid gap-3"><li class="nav-item grid gap-3"><a class="nav-link fw-bold menu_h white-space-nowrap" href="/">INÃCIO</a></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown8" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">INSTITUCIONAL</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown8" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="/municipio"> A CIDADE</a><a class="dropdown-item fw-bold menu_h text-center" href="/gestao"> GESTÃO</a><a class="dropdown-item fw-bold menu_h text-center" href="/organograma"> ORGANOGRAMA</a></div></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown10" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">TRANSPARÃNCIA</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown10" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="/diario"> DIARIO OFICIAL</a><a class="dropdown-item fw-bold menu_h text-center" href="https://transparencia.oliveiradosbrejinhos.ba.gov.br"> PORTAL DA TRANSPARÃNCIA</a><a class="dropdown-item fw-bold menu_h text-center" href="/esic"> E-SIC</a><a class="dropdown-item fw-bold menu_h text-center" href="/ouvidoria"> OUVIDORIA</a><a class="dropdown-item fw-bold menu_h text-center" href="https://transparencia.oliveiradosbrejinhos.ba.gov.br"> DOCUMENTAÃÃO NA INTEGRA</a></div></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown11" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">CIDADÃO</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown11" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="https://alistamento.eb.mil.br/"> SERVIÃO MILITAR</a><a class="dropdown-item fw-bold menu_h text-center" href="https://delegaciavirtual.sinesp.gov.br/portal/"> DELEGACIA VIRTUAL</a><a class="dropdown-item fw-bold menu_h text-center" href="https://www.sac.ba.gov.br/"> SAC</a><a class="dropdown-item fw-bold menu_h text-center" href="https://www.ba.gov.br/trabalho/280/vagas-do-dia-sinebahia"> SINE BAHIA</a><a class="dropdown-item fw-bold menu_h text-center" href="https://www.gov.br/pt-br"> GOV BR</a><a class="dropdown-item fw-bold menu_h text-center" href="https://www.ba.gov.br/">
108 SERVIÃOS DO GOVERNO</a><a class="dropdown-item fw-bold menu_h text-center" href="/curriculoonline"> CURRICULO ONLINE PMOB</a></div></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown12" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">EMPREENDEDOR</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown12" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="https://imcompras.org"> PORTAL DE COMPRAS</a><a class="dropdown-item fw-bold menu_h text-center" href="https://oliveiradosbrejinhos.saatri.com.br/DocumentoFiscal"> NOTA FISCAL DE SERVIÃOS</a></div></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown13" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">SERVIDOR</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown13" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="https://m.fatorsistemas.com.br/login.php"> PORTAL DO SERVIDOR</a></div></li><li class="nav-item grid gap-3"><a class="nav-link fw-bold menu_h white-space-nowrap" href="/noticias">NOTÃCIAS</a></li><li class="nav-item dropdown text-center"><a class="nav-link fw-bold dropdown-toggle menu_h" href="#" id="navbarDropdown15" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">CONTATO</a><div class="dropdown-menu dropdown-content col" aria-labelledby="navbarDropdown15" style="background-color:#0a28d2"><a class="dropdown-item fw-bold menu_h text-center" href="/faleconosco"> FALE CONOSCO</a><a class="dropdown-item fw-bold menu_h text-center" href="/ouvidoria"> OUVIDORIA</a></div></li></ul></div></nav><div class="modal fade" id="modalBusca" tabindex="-1" aria-labelledby="modalBuscaLabel" aria-hidden="true"> 109 <div class="modal-dialog modal-dialog-centered"> 110 <div class="modal-content bg-dark text-light"> 111 <div class="modal-header border-0"> 112 <h5 class="modal-title" id="modalBuscaLabel">Pesquisar no Portal</h5> 113 <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Fechar"></button> 114 </div> 115 <div class="modal-body"> 116 <form id="formBusca" method="GET" action="buscar.php"> 117 <div class="input-group"> 118 <input type="text" name="q" class="form-control form-control-lg" placeholder="Digite sua busca..." required> 119 <button id="btnSearch" class="btn btn-primary btn-lg" type="submit"><i class="bi bi-search"></i></button> 120 121 122 </div> 123 </form> 124 <div id="resultadosBusca" class="mt-4"></div> 125 </div> 126 </div> 127 </div> 128</div>
129<script> 130 // Função para aumentar o tamanho da fonte de todos os elementos filhos de body 131 function increaseFontSize() { 132 const currentFontSize = parseFloat(window.getComputedStyle(document.body).fontSize); 133 document.body.style.fontSize = (currentFontSize * 1.1) + 'px'; 134 135 // Aumentar o tamanho de fonte para todos os elementos filhos de body 136 const allElements = document.querySelectorAll('body *'); 137 allElements.forEach(element => { 138 const elementFontSize = parseFloat(window.getComputedStyle(element).fontSize); 139 element.style.fontSize = (elementFontSize * 1.1) + 'px'; 140 }); 141 } 142 143 // Função para diminuir o tamanho da fonte de todos os elementos filhos de body 144 function decreaseFontSize() { 145 const currentFontSize = parseFloat(window.getComputedStyle(document.body).fontSize); 146 document.body.style.fontSize = (currentFontSize / 1.1) + 'px'; 147 148 // Diminuir o tamanho de fonte para todos os elementos filhos de body 149 const allElements = document.querySelectorAll('body *'); 150 allElements.forEach(element => { 151 const elementFontSize = parseFloat(window.getComputedStyle(element).fontSize); 152 element.style.fontSize = (elementFontSize / 1.1) + 'px'; 153 }); 154 } 155 // Função para alternar o modo de contraste 156 function toggleContrastMode() { 157 document.body.classList.toggle('high-contrast'); 158 } 159 160 const originalFontSizes = []; 161 162 window.addEventListener('load', function() { 163 const allElements = document.querySelectorAll('body *'); 164 allElements.forEach(element => { 165 const elementFontSize = parseFloat(window.getComputedStyle(element).fontSize); 166 originalFontSizes.push(elementFontSize); 167 }); 168 }); 169 170 // Restaurar configurações para o padrão 171 function resetSettings() { 172 // Redefinir o tamanho de fonte para o body 173 document.body.style.fontSize = ''; 174 175 // Restaurar tamanhos de fonte originais dos elementos filhos de body 176 const allElements = document.querySelectorAll('body *'); 177 allElements.forEach((element, index) => { 178 element.style.fontSize = originalFontSizes[index] + 'px'; 179 }); 180 181 // Remover a classe high-contrast 182 document.body.classList.remove('high-contrast'); 183 } 184 185 // Event listeners para os links de acessibilidade 186 document.getElementById('increase-font').addEventListener('click', increaseFontSize); 187 document.getElementById('decrease-font').addEventListener('click', decreaseFontSize); 188 document.getElementById('toggle-contrast').addEventListener('click', toggleContrastMode); 189 document.getElementById('reset-settings').addEventListener('click', resetSettings); 190</script>
190 191<style> 192 .foto { 193 194 width: 170px; 195 height: 170px; 196 border-radius: 50%; 197 object-fit: cover; 198 199 border: 5px solid #f1f1f1; 200 201 box-shadow: 0 10px 25px rgba(0, 0, 0, .18); 202 203 } 204 205 .card { 206 207 border-radius: 18px; 208 209 transition: .3s; 210 211 } 212 213 .card:hover { 214 215 transform: translateY(-8px); 216 217 } 218 219 .cargo { 220 221 display: inline-block; 222 223 background: #0A28D2; 224 225 color: #fff; 226 227 padding: 6px 16px; 228 229 border-radius: 20px; 230 231 font-size: 14px; 232 233 margin-top: 8px; 234 235 } 236 237 .modal-body h5 { 238 239 color: #0A28D2; 240 241 margin-top: 20px; 242 243 } 244</style> 245 246<div id="pag_config"> 247 248 <div class="m-5"> 249 <nav aria-label="breadcrumb"> 250 <ol class="breadcrumb"> 251 <li class="breadcrumb-item"><a href="/" class="text-decoration-none text-primary fw-bold"><i class="bi bi-house-fill"></i> InÃcio</a></li> 252 <li class="breadcrumb-item active">Gestão</li> 253 </ol> 254 </nav> 255 <hr class="hr-breadcrumb"> 256 </div> 257 <div class="container py-5"> 258 259 <div class="text-center mb-5"> 260 <h2 class="text-uppercase fw-bold" style="color: #0a28d2;">Gestão</h2> 261 <p class="text-muted"> 262 Conheça os representantes do Poder Executivo Municipal. 263 </p> 264 </div> 265 266 <div class="row"> 267 268 <!-- PREFEITO --> 269 270 <div class="col-lg-6 mb-4"> 271 272 <div class="card shadow border-0 h-100"> 273 274 <div class="card-body text-center"> 275 276 <img 277 src="public/images/user.png" 278 class="foto"> 279 280 <h3 class="mt-3"> 281 282 283 <div class="alert alert-warning"> 284 Nenhum prefeito cadastrado. 285 </div> 286 287 </h3> 288 289 <span class="cargo"> 290 291 Prefeito 292 293 </span> 294 295 <hr> 296 297 <p> 298 299 Biografia não informada. 300 </p> 301 302 <button 303 class="btn btn-outline-primary" 304 data-bs-toggle="modal" 305 data-bs-target="#modalPrefeito"> 306 307 Ver Perfil 308 309 </button> 310 311 </div> 312 313 </div> 314 315 </div> 316 317 318 <!-- VICE --> 319 320 <div class="col-lg-6 mb-4"> 321 322 <div class="card shadow border-0 h-100"> 323 324 <div class="card-body text-center"> 325 326 <img 327 src="public/images/user.png" 328 class="foto"> 329 330 <h3 class="mt-3"> 331 332 333 <div class="alert alert-warning"> 334 Nenhum Vice-Prefeito cadastrado. 335 </div> 336 337 338 </h3> 339 340 <span class="cargo"> 341 342 Vice-Prefeito 343 344 </span> 345 346 <hr> 347 348 <p> 349 350 Biografia não informada. 351 </p> 352 353 <button 354 class="btn btn-outline-success" 355 data-bs-toggle="modal" 356 data-bs-target="#modalVice"> 357 358 Ver Perfil 359 360 </button> 361 362 </div> 363 364 </div> 365 366 </div> 367 368 </div> 369 370 </div> 371 372</div> 373 374 375<div class="modal fade" id="modalPrefeito"> 376 377 <div class="modal-dialog modal-xl"> 378 379 <div class="modal-content"> 380 381 <div class="modal-header"> 382 383 <h4> 384 385 386 </h4> 387 388 <button class="btn-close" data-bs-dismiss="modal"></button> 389 390 </div> 391 392 <div class="modal-body"> 393 394 <div class="row"> 395 396 <div class="col-md-4 text-center"> 397 398 <img src="public/images/user.png" class="img-fluid rounded"> 399 400 </div> 401 402 <div class="col-md-8"> 403 404 <h5>Biografia:</h5> 405 406 <p></p> 407 408 <hr> 409 410 <h5>Competências:</h5> 411 412 413 <hr> 414 415 <h5>Horário de Atendimento:</h5> 416 417 418 <hr> 419 420 <h5>Contatos:</h5> 421 422 423 <hr> 424 425 <h5>Endereço:</h5> 426 427 428 </div> 429 430 </div> 431 432 </div> 433 434 </div> 435 436 </div> 437 438</div> 439 440<div class="modal fade" id="modalVice"> 441 442 <div class="modal-dialog modal-xl"> 443 444 <div class="modal-content"> 445 446 <div class="modal-header"> 447 448 <h4> 449 450 451 </h4> 452 453 <button class="btn-close" data-bs-dismiss="modal"></button> 454 455 </div> 456 457 <div class="modal-body"> 458 459 <div class="row"> 460 461 <div class="col-md-4 text-center"> 462 463 <img src="public/images/user.png" class="img-fluid rounded"> 464 465 </div> 466 467 <div class="col-md-8"> 468 469 <h5>Biografia:</h5> 470 471 <p></p> 472 473 <hr> 474 475 <h5>Competências:</h5> 476 477 478 <hr> 479 480 <h5>Horário de Atendimento:</h5> 481 482 483 <hr> 484 485 <h5>Contatos:</h5> 486 487 488 <hr> 489 490 <h5>Endereço:</h5> 491 492 493 </div> 494 495 </div> 496 497 </div> 498 499 </div> 500 501 </div> 502 503</div><!-- Feedback Popup (cole no footer, antes de </body>) --> 504<style> 505/* popup base */ 506#siteFeedbackModal { 507 position: fixed; 508 inset: 0; 509 display: none; 510 z-index: 1080;
511 align-items: center; 512 justify-content: center; 513 background: rgba(15,15,15,0.45); 514 backdrop-filter: blur(4px); 515 animation: fadeIn .18s ease; 516} 517@keyframes fadeIn { from {opacity:0} to {opacity:1} } 518 519#siteFeedbackCard { 520 width: 100%; 521 max-width: 680px; 522 border-radius: 14px; 523 background: #fff; 524 box-shadow: 0 10px 30px rgba(0,0,0,0.18); 525 transform: translateY(10px); 526 animation: popIn .25s cubic-bezier(.2,.9,.2,1); 527} 528@keyframes popIn { from {opacity:0; transform:translateY(20px) scale(.98)} to {opacity:1; transform:translateY(0) scale(1)} } 529 530.sf-header { 531 padding: 18px 22px; 532 border-bottom: 1px solid #f1f1f1; 533 display:flex; align-items:center; gap:12px; 534} 535.sf-body { padding: 20px 22px; } 536.sf-footer { padding: 14px 22px; border-top:1px solid #f6f6f6; display:flex; justify-content:space-between; align-items:center; gap:12px; } 537 538/* stars */ 539.sf-stars { display:flex; gap:6px; align-items:center; } 540.sf-star { 541 font-size: 32px; 542 cursor: pointer; 543 transition: transform .12s ease, color .12s ease; 544 color: #dcdcdc; 545 user-select:none; 546} 547.sf-star:hover { transform: translateY(-3px) scale(1.08); } 548 549/* rating text */ 550.sf-rating-text { font-size:14px; color:#666; margin-left:8px; } 551 552/* textarea */ 553.sf-text { 554 width:100%; 555 min-height:90px; 556 resize:vertical; 557 padding:10px 12px; 558 border-radius:8px; 559 border:1px solid #e6e6e6; 560 font-size:14px; 561} 562 563/* compact checkbox */ 564.sf-bottom-left { display:flex; align-items:center; gap:8px; font-size:13px; color:#666; } 565 566/* primary btn */ 567.sf-send { 568 background: linear-gradient(90deg,#16a34a,#10b981); /* green gradient */ 569 color:#fff; 570 border:0; 571 padding:9px 18px; 572 border-radius:10px; 573 box-shadow: 0 6px 18px rgba(16,185,129,0.18); 574} 575 576/* success */ 577.sf-success { 578 display:none; 579 padding:18px; 580 text-align:center; 581 color:#064e3b; 582} 583 584/* small responsive tweak */ 585@media (max-width:576px){ 586 #siteFeedbackCard { margin: 20px; } 587 .sf-star { font-size:28px; } 588} 589</style> 590 591<!-- Modal markup --> 592<!---<div id="siteFeedbackModal" aria-hidden="true" role="dialog" aria-labelledby="sfTitle" aria-modal="true"> 593 <div id="siteFeedbackCard" role="document"> 594 <div class="sf-header"> 595 <div style="width:46px;height:46px;background:linear-gradient(135deg,#06b6d4,#7c3aed);border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700">BD</div> 596 <div> 597 <h5 id="sfTitle" style="margin:0">O que está achando do site?</h5> 598 <small style="color:#666">Sua opinião ajuda a melhorar â leva só 10 segundos</small> 599 </div> 600 <button type="button" class="btn-close ms-auto me-2" aria-label="Fechar" id="sfCloseBtn"></button> 601 </div> 602 603 <div class="sf-body"> 604 <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px"> 605 <div class="sf-stars" id="sfStars" role="radiogroup" aria-label="Avaliação em estrelas"> 606 </div> 607 <div class="sf-rating-text" id="sfRatingText">Selecione uma nota</div> 608 </div> 609 610 <textarea id="sfText" class="sf-text" placeholder="Deixe um comentário (opcional) â o que você gostou? o que podemos melhorar?"></textarea> 611 </div> 612 613 <div class="sf-footer"> 614 <div class="sf-bottom-left"> 615 <input type="checkbox" id="sfDontShow" /> 616 <label for="sfDontShow">Não mostrar novamente</label> 617 </div> 618 <div style="display:flex;gap:10px;align-items:center"> 619 <button class="btn btn-outline-secondary" id="sfSkipBtn">Agora não</button> 620 <button class="sf-send" id="sfSubmitBtn">Enviar feedback</button> 621 </div> 622 </div> 623 624 <div class="sf-success" id="sfSuccess"> 625 <p style="margin:0;font-weight:700">Obrigado pelo feedback!</p> 626 <p style="margin:6px 0 0;color:#065f46">Sua opinião foi enviada com sucesso.</p> 627 </div> 628 </div> 629</div> 630
631<script> 632(function(){ 633 // --- Config --- 634 const delayMs = 6000; // tempo até abrir (ms) 635 const endpoint = 'src/Services/feedback.php'; // ajuste se necessário 636 const storageKey = 'brejolandia_feedback_dontshow'; 637 638 // --- DOM refs --- 639 const modal = document.getElementById('siteFeedbackModal'); 640 const starsWrap = document.getElementById('sfStars'); 641 const ratingText = document.getElementById('sfRatingText'); 642 const textEl = document.getElementById('sfText'); 643 const dontShowEl = document.getElementById('sfDontShow'); 644 const closeBtn = document.getElementById('sfCloseBtn'); 645 const skipBtn = document.getElementById('sfSkipBtn'); 646 const submitBtn = document.getElementById('sfSubmitBtn'); 647 const successBox = document.getElementById('sfSuccess'); 648 649 let currentRating = 0; 650 651 // star labels (you can change) 652 const ratingLabels = { 653 1: 'Péssimo', 654 2: 'Ruim', 655 3: 'Regular', 656 4: 'Bom', 657 5: 'Ãtimo' 658 }; 659 660 // create star elements 661 for (let i=1;i<=5;i++){ 662 const span = document.createElement('span'); 663 span.className = 'sf-star'; 664 span.setAttribute('data-value', i); 665 span.setAttribute('role','radio'); 666 span.setAttribute('aria-checked','false'); 667 span.setAttribute('tabindex', '0'); 668 span.innerHTML = 'â '; // star glyph 669 // events 670 span.addEventListener('mouseenter', ()=> highlight(i)); 671 span.addEventListener('mouseleave', ()=> highlight(currentRating)); 672 span.addEventListener('click', ()=> setRating(i)); 673 span.addEventListener('keydown', (ev)=> { 674 if (ev.key === 'Enter' || ev.key === ' ') { ev.preventDefault(); setRating(i); } 675 if (ev.key === 'ArrowRight' && i < 5) { document.querySelector('[data-value="'+(i+1)+'"]').focus(); } 676 if (ev.key === 'ArrowLeft' && i > 1) { document.querySelector('[data-value="'+(i-1)+'"]').focus(); } 677 }); 678 starsWrap.appendChild(span); 679 } 680 681 function highlight(n){ 682 const stars = starsWrap.querySelectorAll('.sf-star'); 683 stars.forEach(s => { 684 const v = parseInt(s.getAttribute('data-value'),10); 685 s.style.color = (v <= n) ? '#f59e0b' : '#dcdcdc'; 686 }); 687 ratingText.textContent = n ? ratingLabels[n] : 'Selecione uma nota'; 688 } 689 690 function setRating(n){ 691 currentRating = n; 692 highlight(n); 693 // set aria-checked 694 starsWrap.querySelectorAll('.sf-star').forEach(s => { 695 s.setAttribute('aria-checked', parseInt(s.getAttribute('data-value'),10) === n ? 'true' : 'false'); 696 }); 697 } 698 699 // open modal 700 function openModal(){ 701 // don't open if user opted out 702 if (localStorage.getItem(storageKey) === '1') return; 703 modal.style.display = 'flex'; 704 modal.setAttribute('aria-hidden','false'); 705 // focus first star 706 const firstStar = modal.querySelector('.sf-star'); 707 if (firstStar) firstStar.focus(); 708 } 709 710 // close 711 function closeModal(){ 712 modal.style.display = 'none'; 713 modal.setAttribute('aria-hidden','true'); 714 } 715 716 // submit 717 async function submitFeedback(){ 718 if (!currentRating) { 719 // small feedback if not rated 720 ratingText.textContent = 'Por favor, escolha uma nota antes de enviar.'; 721 ratingText.style.color = '#b91c1c'; 722 setTimeout(()=> ratingText.style.color = '', 2200); 723 return; 724 } 725 726 submitBtn.disabled = true; 727 submitBtn.textContent = 'Enviando...'; 728 729 const payload = { 730 pagina: window.location.pathname, 731 nota: currentRating, 732 comentario: textEl.value.trim() 733 }; 734 735 try { 736 const res = await fetch(endpoint, { 737 method: 'POST', 738 headers: {'Content-Type':'application/json'}, 739 body: JSON.stringify(payload) 740 }); 741 742 if (!res.ok) throw new Error('Erro na rede'); 743 744 const data = await res.json(); 745 if (data && data.success) { 746 // show success and optionally store "dont show" if checked 747 successBox.style.display = 'block'; 748 modal.querySelector('.sf-body, .sf-footer, .sf-header').style.display = 'none'; 749 if (dontShowEl.checked) localStorage.setItem(storageKey,'1'); 750 setTimeout(closeModal, 2000); 751 } else { 752 throw new Error(data.message || 'Erro desconhecido'); 753 } 754 } catch (err) { 755 alert('Erro ao enviar feedback: ' + (err.message||err));
756 submitBtn.disabled = false; 757 submitBtn.textContent = 'Enviar feedback'; 758 } 759 } 760 761 // events 762 closeBtn.addEventListener('click', closeModal); 763 skipBtn.addEventListener('click', closeModal); 764 submitBtn.addEventListener('click', submitFeedback); 765 766 // close on background click 767 modal.addEventListener('click', (e)=>{ 768 if (e.target === modal) closeModal(); 769 }); 770 771 // open after delay 772 window.addEventListener('load', ()=>{ 773 setTimeout(openModal, delayMs); 774 }); 775 776})(); 777</script>
777--> 778 779<footer class="bg-sb text-white pt-5 pb-4"> 780 <div class="container"> 781 <div class="row"> 782 783 <!-- COLUNA ESQUERDA: LOGO + REDES + SERVIÃOS + GOVERNO --> 784 <div class="col-md-6"> 785 <div class="row"> 786 787 <!-- LOGO + REDES SOCIAIS --> 788 <div class="col-md-6 mb-4" style="margin-left: -30px;"> 789 <img src="public/images/logo/logofo.png" alt="Logo Prefeitura" width="130px"> 790 <h5 class="mb-4 mt-4 mt-3">Redes sociais</h5> 791 <a href="#" class="text-warning mr-3"><i class="fab fa-facebook fa-lg"></i></a> 792 <a href="#" class="text-warning mr-3"><i class="fab fa-instagram fa-lg"></i></a> 793 <a href="#" class="text-warning"><i class="fab fa-youtube fa-lg"></i></a> 794 </div> 795 796 <!-- SERVIÃOS AO CIDADÃO + GOVERNO --> 797 <div class="col-md-6 mb-4"> 798 <h6 class="text-warning font-weight-bold">Serviços<br>ao Cidadão</h6> 799 <ul class="list-unstyled mt-3"> 800 <li><a href="#" class="text-white">Emissão de Certidão Negativa</a></li> 801 <li><a href="#" class="text-white">Emissão de Nota Fiscal</a></li> 802 <li><a href="#" class="text-white">Emissão de Guias IPTU</a></li> 803 </ul> 804 805 <h6 class="text-warning font-weight-bold mt-4">Estrutura<br>de Governo</h6> 806 <ul class="list-unstyled mt-3"> 807 <li><a href="#" class="text-white">Gabinete do Prefeito</a></li> 808 <li><a href="#" class="text-white">Gabinete do Vice-prefeito</a></li> 809 <li><a href="#" class="text-white">Estrutura Organizacional</a></li> 810 </ul> 811 </div> 812 813 </div> 814 </div> 815 816 <!-- COLUNA DIREITA: TRANSPARÃNCIA + OUVIDORIA + CONTATO + LOCALIZAÃÃO --> 817 <div class="col-md-6"> 818 <div class="row"> 819 820 <!-- TRANSPARÃNCIA + OUVIDORIA --> 821 <div class="col-md-6 mb-4"> 822 <h6 class="text-warning font-weight-bold">Portal da<br>Transparência</h6> 823 <ul class="list-unstyled mt-3"> 824 <li><a href="#" class="text-white">Licitações</a></li> 825 <li><a href="https://sobradinho.ba.gov.br/integra_view/contrato.php" class="text-white">Contratos</a></li> 826 <li><a href="#" class="text-white">Relatório de Gestão Fiscal</a></li><p> 827 <li><a href="#" class="text-white">Despesas</a></li> 828 </ul> 829 830 <h6 class="text-warning font-weight-bold mt-4">Ouvidoria e<br>Atendimento</h6> 831 <ul class="list-unstyled mt-3"> 832 <li><a href="/ouvidoria" class="text-white">Ouvidoria</a></li> 833 <li><a href="/esic" class="text-white">SIC - Informação</a></li> 834 <li><a href="/faleconosco" class="text-white">Fale Conosco</a></li> 835 </ul> 836 </div> 837 838 <!-- CONTATO + LOCALIZAÃÃO (em blocos) --> 839 <div class="col-md-6 mb-4"> 840 <!-- Contato --> 841 <div class="d-flex mb-3" style="min-width: 310px; background-color: #0a28d2; color: #0f2a73; border-radius: 20px 20px 20px 20px; font-family: 'Montserrat', sans-serif; font-weight: 600;"> 842 <div class="bg-warning d-flex align-items-center justify-content-center px-2 text-center font-weight-bold" 843 style="writing-mode: vertical-rl; text-orientation: mixed; font-size: 14px; border-radius: 0px 20px 20px 0px; transform: rotate(180deg) !important;">FALE CONOSCO</div> 844 <div class="p-3"> 845 846 <p class="mb-1 text-white ">(77) 9 9849-2915</p> 847 <p class="mb-1 text-white" style="font-size:0.9rem; word-break: break-word;"> 848 [email protected] </p> 849 850 </div> 851 </div> 852 853 <!-- Localização --> 854 <div class="d-flex" style="min-width: 310px; background-color: #0a28d2; color: #0f2a73; border-radius: 20px 20px 20px 20px;"> 855 <div class="bg-warning d-flex align-items-center justify-content-center px-2 text-center font-weight-bold" 856 style="writing-mode: vertical-rl; text-orientation: mixed; font-size: 14px; border-radius: 0px 20px 20px 0px; transform: rotate(180deg) !important;">LOCALIZAÃÃO</div> 857 <div class="p-3">
858 <p class="mb-1 text-white text-justify">Praça João Nery de Sant´ana, nº 197, centro, Oliveira dos Brejinhos - Bahia</p> 859 <span class="mb-0 text-white text-justify" style="font-size: 0.9rem;">De Segunda a Sextadas 07h à s 13h</span> 860 </div> 861 </div> 862 </div> 863 864 </div> 865 </div> 866 867 </div> 868 869 <!-- COPYRIGHT --> 870 <div class="text-center mt-4 pt-2 border-top border-white"> 871 <small>2025 © Prefeitura Municipal de Oliveira Dos Brejinhos - Ba. Todos os direitos reservados.</small> 872 </div> 873 </div> 874 </footer> 875 </div> 876 877 878 879<footer class="font-small pt-4 text-center text-white" style="background-color: #0a28d2;"> 880 <p><a href="#" class="text-white">Politica de Privacidade</a> <a href="#" class="text-white"> Mapa do Site</a> <a href="#" class="text-white"> Acessibilidade</a> <a href="#" class="text-white"> Glossario</a> <a href="./faleconosco" class="text-white">Contato</a> </p><br> 881</footer> 882</footer> 883 884<div class="modal fade" id="transparenciaModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> 885 <div class="modal-dialog modal-fullscreen"> 886 <div class="modal-content"> 887 <div class="modal-header"> 888 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 889 </div> 890 <div class="modal-body"> 891 <!-- Loader --> 892 <div id="iframeLoader" class="text-center py-5"> 893 <div class="spinner-border text-primary" role="status"></div> 894 </div> 895 <iframe id="modalFrame" width="100%" height="600px" style="border:0; display:none;" onload="hideLoader()"></iframe> 896 </div> 897 <div class="modal-footer"> 898 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fechar</button> 899 </div> 900 </div> 901 </div> 902</div> 903 904 905<!-- EDITAL-YEAR --> 906<div class="row"> 907 <!-- Modal --> 908 <div class="modal fade" id="editalModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> 909 <div class="modal-dialog modal-xl" role="document"> 910 <div class="modal-content"> 911 <div class="modal-header"> 912 <button type="button" class="close pr-3" data-dismiss="modal" aria-label="Close" @click="clear()"> 913 <span aria-hidden="true">×</span> 914 </button> 915 </div> 916 <div class="modal-body"> 917 918 Nenhum resultado encontrado. 919 </div> 920 <div class="modal-footer"> 921 <button type="button" class="btn bg-padrao text-light" data-dismiss="modal" @click="getEditalAll()">TODAS</button> 922 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">FECHAR</button> 923 </div> 924 </div> 925 </div> 926 </div> 927</div><!-- row --> 928<!-- EDITAL-YEAR --> 929<style> 930.bg-sb{ 931 background-color: #0f2a73; 932} 933 934ul{ 935text-align: left !important; 936} 937li{ 938text-align: left !important; 939} 940</style> 941 942 943 944
944<script> 945 let currentUrl = ""; 946 947 function hideLoader() { 948 const loader = document.getElementById("iframeLoader"); 949 const iframe = document.getElementById("modalFrame"); 950 loader.style.display = "none"; 951 iframe.style.display = "block"; 952 } 953 954 function openModal(url) { 955 const modal = document.getElementById("transparenciaModal"); 956 const iframe = document.getElementById("modalFrame"); 957 const loader = document.getElementById("iframeLoader"); 958 959 // Mostra loader e esconde iframe 960 loader.style.display = "block"; 961 iframe.style.display = "none"; 962 963 // Seta a URL apenas se for diferente da anterior 964 if (url !== currentUrl) { 965 iframe.src = url; 966 currentUrl = url; 967 } 968 969 // Cria e abre o modal com Bootstrap 970 const modalBS = bootstrap.Modal.getOrCreateInstance(modal); 971 modalBS.show(); 972 } 973</script>
973 974
975<script> 976 // Encontre todos os elementos de menu dropdown 977 var dropdowns = document.querySelectorAll(".dropdown"); 978 979 // Adicione ouvintes de eventos para cada elemento de menu dropdown 980 dropdowns.forEach(function(dropdown) { 981 // Abra o dropdown quando o mouse entra 982 dropdown.addEventListener("mouseenter", function() { 983 var dropdownContent = this.querySelector(".dropdown-content"); 984 if (dropdownContent) { 985 dropdownContent.style.display = "block"; 986 } 987 }); 988 989 // Feche o dropdown quando o mouse sai 990 dropdown.addEventListener("mouseleave", function() { 991 var dropdownContent = this.querySelector(".dropdown-content"); 992 if (dropdownContent) { 993 dropdownContent.style.display = "none"; 994 } 995 }); 996 }); 997</script>
997 998 999 1000<div vw class="enabled"> 1001 <div vw-access-button class="active"></div> 1002 <div vw-plugin-wrapper> 1003 <div class="vw-plugin-top-wrapper"></div> 1004 </div> 1005</div>
1006<script src="https://vlibras.gov.br/app/vlibras-plugin.js"></script>
vendor: 2 bytes, line 1006
1006
1007<script> 1008 new window.VLibras.Widget('https://vlibras.gov.br/app'); 1009</script>
1009 1010</div>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.