Spaces:
Running
Running
Add 3 files
Browse files- README.md +6 -4
- index.html +1093 -19
- prompts.txt +1 -0
README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
colorTo: red
|
6 |
sdk: static
|
7 |
pinned: false
|
|
|
|
|
8 |
---
|
9 |
|
10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
+
title: formulario
|
3 |
+
emoji: 🐳
|
4 |
+
colorFrom: blue
|
5 |
colorTo: red
|
6 |
sdk: static
|
7 |
pinned: false
|
8 |
+
tags:
|
9 |
+
- deepsite
|
10 |
---
|
11 |
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
index.html
CHANGED
@@ -1,19 +1,1093 @@
|
|
1 |
-
<!
|
2 |
-
<html>
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="pt-BR">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Formulário de Vaga</title>
|
7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
8 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
|
9 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
10 |
+
<style>
|
11 |
+
.remove-btn {
|
12 |
+
color: #ef4444;
|
13 |
+
cursor: pointer;
|
14 |
+
font-weight: bold;
|
15 |
+
font-size: 1.2em;
|
16 |
+
}
|
17 |
+
.error-message {
|
18 |
+
color: #ef4444;
|
19 |
+
font-size: 0.875rem;
|
20 |
+
margin-top: 0.25rem;
|
21 |
+
}
|
22 |
+
.form-section {
|
23 |
+
display: none;
|
24 |
+
}
|
25 |
+
.form-section.active {
|
26 |
+
display: block;
|
27 |
+
}
|
28 |
+
select[multiple] {
|
29 |
+
height: 150px;
|
30 |
+
}
|
31 |
+
.animate-pulse {
|
32 |
+
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
33 |
+
}
|
34 |
+
@keyframes pulse {
|
35 |
+
0%, 100% {
|
36 |
+
opacity: 1;
|
37 |
+
}
|
38 |
+
50% {
|
39 |
+
opacity: 0.5;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
.optional {
|
43 |
+
color: #6b7280;
|
44 |
+
font-style: italic;
|
45 |
+
font-size: 0.875rem;
|
46 |
+
}
|
47 |
+
</style>
|
48 |
+
</head>
|
49 |
+
<body class="bg-gray-50 min-h-screen">
|
50 |
+
<div class="container mx-auto px-4 py-8 max-w-4xl">
|
51 |
+
<!-- Header with important notices -->
|
52 |
+
<div class="bg-blue-50 border-l-4 border-blue-500 p-4 mb-6 rounded">
|
53 |
+
<div class="flex items-start">
|
54 |
+
<div class="flex-shrink-0">
|
55 |
+
<i class="fas fa-bullhorn text-blue-500 text-xl mr-3 mt-1"></i>
|
56 |
+
</div>
|
57 |
+
<div>
|
58 |
+
<p class="font-bold text-blue-800"><i class="fas fa-exclamation-circle mr-1"></i> Este formulário garante que sua vaga seja divulgada com rapidez e visibilidade.</p>
|
59 |
+
<p class="text-blue-700 mt-1"><i class="fas fa-exclamation-triangle mr-1"></i> Vagas sem esse envio podem demorar mais para irem ao ar.</p>
|
60 |
+
</div>
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
|
64 |
+
<!-- Progress tracker -->
|
65 |
+
<div class="flex mb-8 overflow-x-auto">
|
66 |
+
<div class="flex space-x-4">
|
67 |
+
<div class="flex items-center">
|
68 |
+
<div class="w-8 h-8 rounded-full bg-green-500 flex items-center justify-center text-white font-bold">1</div>
|
69 |
+
<div class="ml-2 text-sm font-medium text-gray-700">Dados Básicos</div>
|
70 |
+
</div>
|
71 |
+
<div class="flex items-center">
|
72 |
+
<div class="w-8 h-8 rounded-full bg-blue-500 flex items-center justify-center text-white font-bold">2</div>
|
73 |
+
<div class="ml-2 text-sm font-medium text-gray-700">Impulsionamento</div>
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
+
|
78 |
+
<!-- Tip box -->
|
79 |
+
<div class="bg-blue-100 border-l-4 border-blue-500 p-4 mb-6 rounded">
|
80 |
+
<div class="flex items-start">
|
81 |
+
<div class="flex-shrink-0">
|
82 |
+
<i class="fas fa-lightbulb text-blue-500 text-xl mr-3 mt-1"></i>
|
83 |
+
</div>
|
84 |
+
<div>
|
85 |
+
<p class="text-blue-800">Essa etapa ajuda o marketing a entender melhor como divulgar sua vaga.</p>
|
86 |
+
</div>
|
87 |
+
</div>
|
88 |
+
</div>
|
89 |
+
|
90 |
+
<form id="vagaForm" class="bg-white shadow-md rounded-lg p-6">
|
91 |
+
<!-- Section 1 - Job Data -->
|
92 |
+
<section id="sessao1" class="form-section active">
|
93 |
+
<h2 class="text-2xl font-bold text-blue-700 border-b border-blue-200 pb-3 mb-6 flex items-center">
|
94 |
+
<i class="fas fa-file-alt mr-2"></i> Sessão 1 - Dados da Vaga
|
95 |
+
</h2>
|
96 |
+
|
97 |
+
<!-- Analyst Info -->
|
98 |
+
<div class="mb-4">
|
99 |
+
<label class="block text-gray-700 font-medium mb-2" for="analista">
|
100 |
+
Nome do analista <span class="text-red-500">*</span>
|
101 |
+
<span class="text-blue-500 cursor-help ml-1" title="Insira o nome completo do analista responsável">
|
102 |
+
<i class="fas fa-info-circle"></i>
|
103 |
+
</span>
|
104 |
+
</label>
|
105 |
+
<input id="analista" name="analista" type="text" required
|
106 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
107 |
+
</div>
|
108 |
+
|
109 |
+
<!-- WhatsApp -->
|
110 |
+
<div class="mb-4">
|
111 |
+
<label class="block text-gray-700 font-medium mb-2" for="whatsapp">
|
112 |
+
WhatsApp <span class="text-red-500">*</span>
|
113 |
+
<span class="text-blue-500 cursor-help ml-1" title="Insira o número de WhatsApp com DDD">
|
114 |
+
<i class="fas fa-info-circle"></i>
|
115 |
+
</span>
|
116 |
+
</label>
|
117 |
+
<input id="whatsapp" name="whatsapp" type="tel" required
|
118 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
119 |
+
</div>
|
120 |
+
|
121 |
+
<!-- Logo Disclosure -->
|
122 |
+
<div id="avisoLogo" class="hidden bg-yellow-50 border-l-4 border-yellow-400 p-4 mb-4 rounded">
|
123 |
+
<div class="flex items-start">
|
124 |
+
<div class="flex-shrink-0">
|
125 |
+
<i class="fas fa-info-circle text-yellow-500 text-xl mr-3 mt-1"></i>
|
126 |
+
</div>
|
127 |
+
<div>
|
128 |
+
<p class="text-yellow-800">Para melhor divulgação, envie o logo em formato vetorial (AI, SVG ou EPS). Caso não tenha, podemos usar versão JPG/PNG.</p>
|
129 |
+
</div>
|
130 |
+
</div>
|
131 |
+
</div>
|
132 |
+
|
133 |
+
<div class="mb-4">
|
134 |
+
<label class="block text-gray-700 font-medium mb-2" for="divulgaLogo">
|
135 |
+
Pode divulgar a logo? <span class="text-red-500">*</span>
|
136 |
+
<span class="text-blue-500 cursor-help ml-1" title="Selecione se a logo da empresa pode ser divulgada">
|
137 |
+
<i class="fas fa-info-circle"></i>
|
138 |
+
</span>
|
139 |
+
</label>
|
140 |
+
<select id="divulgaLogo" required
|
141 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
142 |
+
<option value="">Selecione</option>
|
143 |
+
<option value="Sim">Sim</option>
|
144 |
+
<option value="Não">Não</option>
|
145 |
+
</select>
|
146 |
+
</div>
|
147 |
+
|
148 |
+
<!-- Company Name (conditional) -->
|
149 |
+
<div id="nomeEmpresaContainer" class="hidden mb-4">
|
150 |
+
<label class="block text-gray-700 font-medium mb-2" for="empresa">
|
151 |
+
Nome da empresa <span class="text-red-500">*</span>
|
152 |
+
<span class="text-blue-500 cursor-help ml-1" title="Insira o nome da empresa">
|
153 |
+
<i class="fas fa-info-circle"></i>
|
154 |
+
</span>
|
155 |
+
</label>
|
156 |
+
<input id="empresa" name="empresa" type="text"
|
157 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
158 |
+
</div>
|
159 |
+
|
160 |
+
<!-- Production Job -->
|
161 |
+
<div class="mb-4">
|
162 |
+
<label class="block text-gray-700 font-medium mb-2" for="producao">
|
163 |
+
É produção? <span class="text-red-500">*</span>
|
164 |
+
<span class="text-blue-500 cursor-help ml-1" title="Selecione se a vaga é para produção">
|
165 |
+
<i class="fas fa-info-circle"></i>
|
166 |
+
</span>
|
167 |
+
</label>
|
168 |
+
<select id="producao" required
|
169 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
170 |
+
<option value="">Selecione</option>
|
171 |
+
<option value="Sim">Sim</option>
|
172 |
+
<option value="Não">Não</option>
|
173 |
+
</select>
|
174 |
+
</div>
|
175 |
+
|
176 |
+
<!-- Marketing Warning (conditional) -->
|
177 |
+
<div id="avisoMarketing" class="hidden bg-red-50 border-l-4 border-red-400 p-4 mb-4 rounded">
|
178 |
+
<div class="flex items-start">
|
179 |
+
<div class="flex-shrink-0">
|
180 |
+
<i class="fas fa-exclamation-triangle text-red-500 text-xl mr-3 mt-1"></i>
|
181 |
+
</div>
|
182 |
+
<div>
|
183 |
+
<p class="text-red-800">O marketing NÃO está permitido divulgar vagas de produção sem logo.</p>
|
184 |
+
</div>
|
185 |
+
</div>
|
186 |
+
</div>
|
187 |
+
|
188 |
+
<!-- In-person Attendance -->
|
189 |
+
<div class="mb-4">
|
190 |
+
<label class="block text-gray-700 font-medium mb-2" for="presencial">
|
191 |
+
Comparecimento presencial? <span class="text-red-500">*</span>
|
192 |
+
</label>
|
193 |
+
<select id="presencial" required
|
194 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
195 |
+
<option value="">Selecione</option>
|
196 |
+
<option value="RHBrasil">RHBrasil</option>
|
197 |
+
<option value="Outro">Outro lugar</option>
|
198 |
+
</select>
|
199 |
+
</div>
|
200 |
+
|
201 |
+
<!-- Other Location (conditional) -->
|
202 |
+
<div id="outroLugar" class="hidden mb-4">
|
203 |
+
<label class="block text-gray-700 font-medium mb-2" for="local">
|
204 |
+
Local para comparecer (Google Maps link) <span class="text-red-500">*</span>
|
205 |
+
</label>
|
206 |
+
<input id="local" name="local" type="url" placeholder="https://goo.gl/maps/xyz123"
|
207 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
208 |
+
</div>
|
209 |
+
|
210 |
+
<!-- Event Type (conditional) -->
|
211 |
+
<div id="eventoContainer" class="hidden mb-4">
|
212 |
+
<label class="block text-gray-700 font-medium mb-2" for="evento">
|
213 |
+
É evento/feirão/mutirão?
|
214 |
+
</label>
|
215 |
+
<select id="evento" name="evento"
|
216 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
217 |
+
<option value="Não">Não</option>
|
218 |
+
<option value="Feirão">Feirão</option>
|
219 |
+
<option value="Mutirão">Mutirão</option>
|
220 |
+
</select>
|
221 |
+
</div>
|
222 |
+
|
223 |
+
<!-- Job Title -->
|
224 |
+
<div class="mb-4">
|
225 |
+
<label class="block text-gray-700 font-medium mb-2" for="cargo">
|
226 |
+
Nome do cargo <span class="text-red-500">*</span>
|
227 |
+
</label>
|
228 |
+
<input id="cargo" name="cargo" type="text" required
|
229 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
230 |
+
</div>
|
231 |
+
|
232 |
+
<!-- Defined Date -->
|
233 |
+
<div class="mb-4">
|
234 |
+
<label class="block text-gray-700 font-medium mb-2" for="temDataDefinida">
|
235 |
+
Tem data definida? <span class="text-red-500">*</span>
|
236 |
+
<span class="text-blue-500 cursor-help ml-1" title="Se não tiver data definida, o padrão será de Segunda à Sexta">
|
237 |
+
<i class="fas fa-info-circle"></i>
|
238 |
+
</span>
|
239 |
+
</label>
|
240 |
+
<select id="temDataDefinida" required
|
241 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
242 |
+
<option value="">Selecione</option>
|
243 |
+
<option value="Sim">Sim</option>
|
244 |
+
<option value="Não">Não</option>
|
245 |
+
</select>
|
246 |
+
</div>
|
247 |
+
|
248 |
+
<!-- Date Selection (conditional) -->
|
249 |
+
<div id="datasContainer" class="hidden mb-4">
|
250 |
+
<div class="tipo-container flex space-x-4 mb-4">
|
251 |
+
<label class="inline-flex items-center">
|
252 |
+
<input type="radio" name="tipoData" value="unico" checked class="form-radio text-blue-600">
|
253 |
+
<span class="ml-2">Data única</span>
|
254 |
+
</label>
|
255 |
+
<label class="inline-flex items-center">
|
256 |
+
<input type="radio" name="tipoData" value="intervalo" class="form-radio text-blue-600">
|
257 |
+
<span class="ml-2">Intervalo</span>
|
258 |
+
</label>
|
259 |
+
</div>
|
260 |
+
|
261 |
+
<!-- Single Date -->
|
262 |
+
<div id="dataUnica">
|
263 |
+
<div id="datasUnicas">
|
264 |
+
<div class="campo-data flex items-center mb-2">
|
265 |
+
<label class="mr-2">Data:</label>
|
266 |
+
<input type="date" name="datas[]" required
|
267 |
+
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
268 |
+
<span class="remove-btn ml-2" onclick="removerData(this)"><i class="fas fa-times"></i></span>
|
269 |
+
</div>
|
270 |
+
</div>
|
271 |
+
<button type="button" onclick="adicionarData()"
|
272 |
+
class="mt-2 px-4 py-2 bg-blue-100 text-blue-700 rounded-md hover:bg-blue-200 transition">
|
273 |
+
<i class="fas fa-plus mr-1"></i> Adicionar data
|
274 |
+
</button>
|
275 |
+
</div>
|
276 |
+
|
277 |
+
<!-- Date Range -->
|
278 |
+
<div id="dataIntervalo" class="hidden">
|
279 |
+
<div class="campo-intervalo grid grid-cols-5 gap-2 items-center mb-2">
|
280 |
+
<label>De</label>
|
281 |
+
<input type="date" name="dataInicio[]" required
|
282 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
283 |
+
<label>até</label>
|
284 |
+
<input type="date" name="dataFim[]" required
|
285 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
286 |
+
<span class="remove-btn ml-2" onclick="removerIntervalo(this)"><i class="fas fa-times"></i></span>
|
287 |
+
</div>
|
288 |
+
<button type="button" onclick="adicionarIntervalo()"
|
289 |
+
class="mt-2 px-4 py-2 bg-blue-100 text-blue-700 rounded-md hover:bg-blue-200 transition">
|
290 |
+
<i class="fas fa-plus mr-1"></i> Adicionar intervalo
|
291 |
+
</button>
|
292 |
+
</div>
|
293 |
+
</div>
|
294 |
+
|
295 |
+
<!-- Defined Time -->
|
296 |
+
<div class="mb-4">
|
297 |
+
<label class="block text-gray-700 font-medium mb-2" for="temHorarioDefinido">
|
298 |
+
Tem horário definido? <span class="text-red-500">*</span>
|
299 |
+
<span class="text-blue-500 cursor-help ml-1" title="Se não tiver horário definido, o padrão será das 7:30 às 17:00">
|
300 |
+
<i class="fas fa-info-circle"></i>
|
301 |
+
</span>
|
302 |
+
</label>
|
303 |
+
<select id="temHorarioDefinido" required
|
304 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
305 |
+
<option value="">Selecione</option>
|
306 |
+
<option value="Sim">Sim</option>
|
307 |
+
<option value="Não">Não</option>
|
308 |
+
</select>
|
309 |
+
</div>
|
310 |
+
|
311 |
+
<!-- Time Selection (conditional) -->
|
312 |
+
<div id="horariosContainer" class="hidden mb-4">
|
313 |
+
<div class="tipo-container flex space-x-4 mb-4">
|
314 |
+
<label class="inline-flex items-center">
|
315 |
+
<input type="radio" name="tipoHorario" value="unico" checked class="form-radio text-blue-600">
|
316 |
+
<span class="ml-2">Horário único</span>
|
317 |
+
</label>
|
318 |
+
<label class="inline-flex items-center">
|
319 |
+
<input type="radio" name="tipoHorario" value="intervalo" class="form-radio text-blue-600">
|
320 |
+
<span class="ml-2">Intervalo</span>
|
321 |
+
</label>
|
322 |
+
</div>
|
323 |
+
|
324 |
+
<!-- Single Time -->
|
325 |
+
<div id="horarioUnico">
|
326 |
+
<div class="campo-horario flex items-center mb-2">
|
327 |
+
<label class="mr-2">Horário:</label>
|
328 |
+
<input type="time" name="horarios[]" required
|
329 |
+
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
330 |
+
<span class="remove-btn ml-2" onclick="removerHorario(this)"><i class="fas fa-times"></i></span>
|
331 |
+
</div>
|
332 |
+
<button type="button" onclick="adicionarHorario()"
|
333 |
+
class="mt-2 px-4 py-2 bg-blue-100 text-blue-700 rounded-md hover:bg-blue-200 transition">
|
334 |
+
<i class="fas fa-plus mr-1"></i> Adicionar horário
|
335 |
+
</button>
|
336 |
+
</div>
|
337 |
+
|
338 |
+
<!-- Time Range -->
|
339 |
+
<div id="horarioIntervalo" class="hidden">
|
340 |
+
<div class="campo-intervalo grid grid-cols-5 gap-2 items-center mb-2">
|
341 |
+
<label>Das</label>
|
342 |
+
<input type="time" name="horaInicio" required
|
343 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
344 |
+
<label>às</label>
|
345 |
+
<input type="time" name="horaFim" required
|
346 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
347 |
+
</div>
|
348 |
+
</div>
|
349 |
+
</div>
|
350 |
+
|
351 |
+
<!-- Number of Positions -->
|
352 |
+
<div class="mb-4">
|
353 |
+
<label class="block text-gray-700 font-medium mb-2" for="vagas">
|
354 |
+
Quantas vagas <span class="text-red-500">*</span>
|
355 |
+
</label>
|
356 |
+
<input id="vagas" name="vagas" type="number" required placeholder="Ex: 1, 3, 10 ou 400"
|
357 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
358 |
+
</div>
|
359 |
+
|
360 |
+
<!-- Benefits -->
|
361 |
+
<div class="mb-4">
|
362 |
+
<label class="block text-gray-700 font-medium mb-2" for="beneficios">
|
363 |
+
Benefícios <span class="optional">(Opcional)</span>
|
364 |
+
</label>
|
365 |
+
<textarea id="beneficios" name="beneficios" rows="3"
|
366 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"></textarea>
|
367 |
+
</div>
|
368 |
+
|
369 |
+
<!-- Requirements -->
|
370 |
+
<div class="mb-4">
|
371 |
+
<label class="block text-gray-700 font-medium mb-2" for="requisitos">
|
372 |
+
Requisitos <span class="optional">(Opcional)</span>
|
373 |
+
</label>
|
374 |
+
<textarea id="requisitos" name="requisitos" rows="3"
|
375 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"></textarea>
|
376 |
+
</div>
|
377 |
+
|
378 |
+
<!-- Shifts -->
|
379 |
+
<div class="mb-4">
|
380 |
+
<label class="block text-gray-700 font-medium mb-2" for="turnos">
|
381 |
+
Turnos <span class="optional">(Opcional)</span>
|
382 |
+
</label>
|
383 |
+
<input id="turnos" name="turnos" type="text"
|
384 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
385 |
+
</div>
|
386 |
+
|
387 |
+
<!-- Joinville -->
|
388 |
+
<div class="mb-4">
|
389 |
+
<label class="block text-gray-700 font-medium mb-2" for="joinville">
|
390 |
+
É para Joinville? <span class="text-red-500">*</span>
|
391 |
+
</label>
|
392 |
+
<select id="joinville" required
|
393 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
394 |
+
<option value="">Selecione</option>
|
395 |
+
<option value="Sim">Sim</option>
|
396 |
+
<option value="Não">Não</option>
|
397 |
+
</select>
|
398 |
+
</div>
|
399 |
+
|
400 |
+
<!-- Other City (conditional) -->
|
401 |
+
<div id="cidadeOutras" class="hidden mb-4">
|
402 |
+
<label class="block text-gray-700 font-medium mb-2" for="outraCidade">
|
403 |
+
Qual cidade? <span class="text-red-500">*</span>
|
404 |
+
</label>
|
405 |
+
<input id="outraCidade" name="outraCidade" type="text" required
|
406 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
407 |
+
</div>
|
408 |
+
|
409 |
+
<!-- Additional Notes -->
|
410 |
+
<div class="mb-4">
|
411 |
+
<label class="block text-gray-700 font-medium mb-2" for="notas">
|
412 |
+
Notas adicionais (algo que só você sabe e ajuda muito?) <span class="optional">(Opcional)</span>
|
413 |
+
</label>
|
414 |
+
<textarea id="notas" name="notas" rows="3"
|
415 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"></textarea>
|
416 |
+
</div>
|
417 |
+
|
418 |
+
<!-- Boost -->
|
419 |
+
<div class="mb-6">
|
420 |
+
<label class="block text-gray-700 font-medium mb-2" for="impulsionar">
|
421 |
+
É para impulsionar? <span class="text-red-500">*</span>
|
422 |
+
</label>
|
423 |
+
<select id="impulsionar" required
|
424 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
425 |
+
<option value="Não">Não</option>
|
426 |
+
<option value="Sim">Sim</option>
|
427 |
+
</select>
|
428 |
+
</div>
|
429 |
+
|
430 |
+
<!-- Boost Warning (conditional) -->
|
431 |
+
<div id="avisoImpulsionamento" class="hidden bg-yellow-50 border-l-4 border-yellow-400 p-4 mb-6 rounded">
|
432 |
+
<div class="flex items-start">
|
433 |
+
<div class="flex-shrink-0">
|
434 |
+
<i class="fas fa-exclamation-triangle text-yellow-500 text-xl mr-3 mt-1"></i>
|
435 |
+
</div>
|
436 |
+
<div>
|
437 |
+
<p class="text-yellow-800">Não recomendamos o impulsionamento para comparecer em menos de 4 dias</p>
|
438 |
+
</div>
|
439 |
+
</div>
|
440 |
+
</div>
|
441 |
+
|
442 |
+
<!-- Navigation Buttons -->
|
443 |
+
<div class="flex justify-between mt-8">
|
444 |
+
<button type="button" class="px-6 py-3 bg-green-600 text-white font-medium rounded-md hover:bg-green-700 transition flex items-center"
|
445 |
+
onclick="salvarPDF()" id="btnFinalizar">
|
446 |
+
<i class="fas fa-check-circle mr-2"></i> Finalizar e Salvar como PDF
|
447 |
+
</button>
|
448 |
+
<button type="button" class="px-6 py-3 bg-blue-600 text-white font-medium rounded-md hover:bg-blue-700 transition flex items-center"
|
449 |
+
onclick="validarSessao(1)" id="btnContinuar" style="display: none;">
|
450 |
+
Continuar para Impulsionamento <i class="fas fa-arrow-right ml-2"></i>
|
451 |
+
</button>
|
452 |
+
</div>
|
453 |
+
</section>
|
454 |
+
|
455 |
+
<!-- Section 2 - Boost -->
|
456 |
+
<section id="sessao2" class="form-section">
|
457 |
+
<h2 class="text-2xl font-bold text-blue-700 border-b border-blue-200 pb-3 mb-6 flex items-center">
|
458 |
+
<i class="fas fa-rocket mr-2"></i> Sessão 2 - Impulsionamento
|
459 |
+
</h2>
|
460 |
+
|
461 |
+
<!-- Boost Warning -->
|
462 |
+
<div id="avisoImpulsionamento4dias" class="bg-yellow-50 border-l-4 border-yellow-400 p-4 mb-6 rounded">
|
463 |
+
<div class="flex items-start">
|
464 |
+
<div class="flex-shrink-0">
|
465 |
+
<i class="fas fa-exclamation-triangle text-yellow-500 text-xl mr-3 mt-1"></i>
|
466 |
+
</div>
|
467 |
+
<div>
|
468 |
+
<p class="text-yellow-800">Não recomendamos o impulsionamento para comparecer em menos de 4 dias</p>
|
469 |
+
</div>
|
470 |
+
</div>
|
471 |
+
</div>
|
472 |
+
|
473 |
+
<!-- Gender -->
|
474 |
+
<div class="mb-4">
|
475 |
+
<label class="block text-gray-700 font-medium mb-2" for="genero">
|
476 |
+
Gênero <span class="text-red-500">*</span>
|
477 |
+
</label>
|
478 |
+
<select id="genero" name="genero" required
|
479 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
480 |
+
<option value="Ambos" selected>Ambos</option>
|
481 |
+
<option value="Masculino">Masculino</option>
|
482 |
+
<option value="Feminino">Feminino</option>
|
483 |
+
</select>
|
484 |
+
</div>
|
485 |
+
|
486 |
+
<!-- Age Range -->
|
487 |
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
|
488 |
+
<div>
|
489 |
+
<label class="block text-gray-700 font-medium mb-2" for="idadeMinima">
|
490 |
+
Idade mínima <span class="text-red-500">*</span>
|
491 |
+
</label>
|
492 |
+
<input id="idadeMinima" name="idadeMinima" type="number" value="18" required min="18" max="100"
|
493 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
494 |
+
</div>
|
495 |
+
<div>
|
496 |
+
<label class="block text-gray-700 font-medium mb-2" for="idadeMaxima">
|
497 |
+
Idade máxima <span class="text-red-500">*</span>
|
498 |
+
</label>
|
499 |
+
<input id="idadeMaxima" name="idadeMaxima" type="number" value="55" required min="18" max="100"
|
500 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
501 |
+
</div>
|
502 |
+
</div>
|
503 |
+
|
504 |
+
<!-- Boost Days -->
|
505 |
+
<div class="mb-4">
|
506 |
+
<label class="block text-gray-700 font-medium mb-2" for="dias">
|
507 |
+
Quantos dias de impulsionamento? <span class="text-red-500">*</span>
|
508 |
+
</label>
|
509 |
+
<input id="dias" name="dias" type="number" value="4" required min="1"
|
510 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
511 |
+
</div>
|
512 |
+
|
513 |
+
<!-- Daily Budget -->
|
514 |
+
<div class="mb-4">
|
515 |
+
<label class="block text-gray-700 font-medium mb-2" for="orcamento">
|
516 |
+
Qual orçamento sugerido por dia? <span class="text-red-500">*</span>
|
517 |
+
</label>
|
518 |
+
<input id="orcamento" name="orcamento" type="text" value="R$50,00" required
|
519 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
520 |
+
</div>
|
521 |
+
|
522 |
+
<!-- Neighborhoods -->
|
523 |
+
<div id="bairrosJoinvilleContainer" class="mb-6">
|
524 |
+
<label class="block text-gray-700 font-medium mb-2" for="bairros">
|
525 |
+
Quais bairros? <span class="text-red-500">*</span>
|
526 |
+
</label>
|
527 |
+
|
528 |
+
<div class="bairros-container bg-white border border-gray-300 rounded-md overflow-hidden">
|
529 |
+
<div class="bairros-search p-2 border-b border-gray-300">
|
530 |
+
<input type="text" placeholder="Buscar bairro..." id="bairroSearch"
|
531 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
532 |
+
</div>
|
533 |
+
<div class="bairros-list p-2">
|
534 |
+
<select multiple="multiple" name="bairros" required
|
535 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
536 |
+
<option value="toda">Toda Joinville</option>
|
537 |
+
<optgroup label="CentroNorte">
|
538 |
+
<option value="Centro">Centro</option>
|
539 |
+
<option value="Bom Retiro">Bom Retiro</option>
|
540 |
+
<option value="Pirabeiraba/Centro">Pirabeiraba/Centro</option>
|
541 |
+
<option value="América">América</option>
|
542 |
+
<option value="Atiradores">Atiradores</option>
|
543 |
+
<option value="Costa e Silva">Costa e Silva</option>
|
544 |
+
<option value="Dona Francisca">Dona Francisca</option>
|
545 |
+
<option value="Glória">Glória</option>
|
546 |
+
<option value="Jardim Paraíso">Jardim Paraíso</option>
|
547 |
+
<option value="Jardim Sofia">Jardim Sofia</option>
|
548 |
+
<option value="Rio Bonito">Rio Bonito</option>
|
549 |
+
<option value="Saguaçu">Saguaçu</option>
|
550 |
+
<option value="Santo Antônio">Santo Antônio</option>
|
551 |
+
<option value="Santa Catarina">Santa Catarina</option>
|
552 |
+
<option value="Zona Industrial Norte">Zona Industrial Norte</option>
|
553 |
+
</optgroup>
|
554 |
+
<optgroup label="Zona Leste">
|
555 |
+
<option value="Aventureiro">Aventureiro</option>
|
556 |
+
<option value="Boa Vista">Boa Vista</option>
|
557 |
+
<option value="Comasa">Comasa</option>
|
558 |
+
<option value="Espinheiros">Espinheiros</option>
|
559 |
+
<option value="Iririú">Iririú</option>
|
560 |
+
<option value="Jardim Iririú">Jardim Iririú</option>
|
561 |
+
<option value="Vila Cubatão">Vila Cubatão</option>
|
562 |
+
<option value="Zona Industrial Tupy">Zona Industrial Tupy</option>
|
563 |
+
</optgroup>
|
564 |
+
<optgroup label="Zona Sul">
|
565 |
+
<option value="Adhemar Garcia">Adhemar Garcia</option>
|
566 |
+
<option value="Anita Garibaldi">Anita Garibaldi</option>
|
567 |
+
<option value="Boehmerwald">Boehmerwald</option>
|
568 |
+
<option value="Bucarein">Bucarein</option>
|
569 |
+
<option value="Fátima">Fátima</option>
|
570 |
+
<option value="Floresta">Floresta</option>
|
571 |
+
<option value="Guanabara">Guanabara</option>
|
572 |
+
<option value="Itaum">Itaum</option>
|
573 |
+
<option value="Itinga">Itinga</option>
|
574 |
+
<option value="Jarivatuba">Jarivatuba</option>
|
575 |
+
<option value="João Costa">João Costa</option>
|
576 |
+
<option value="Paranaguamirim">Paranaguamirim</option>
|
577 |
+
<option value="Parque Guarani">Parque Guarani</option>
|
578 |
+
<option value="Petrópolis">Petrópolis</option>
|
579 |
+
<option value="Profipo">Profipo</option>
|
580 |
+
</optgroup>
|
581 |
+
<optgroup label="Zona Oeste">
|
582 |
+
<option value="Morro do Meio">Morro do Meio</option>
|
583 |
+
<option value="Nova Brasília">Nova Brasília</option>
|
584 |
+
<option value="São Marcos">São Marcos</option>
|
585 |
+
<option value="Ulysses Guimarães">Ulysses Guimarães</option>
|
586 |
+
<option value="Vila Nova">Vila Nova</option>
|
587 |
+
</optgroup>
|
588 |
+
</select>
|
589 |
+
</div>
|
590 |
+
</div>
|
591 |
+
</div>
|
592 |
+
|
593 |
+
<!-- Other Neighborhoods -->
|
594 |
+
<div id="outrosBairrosContainer" class="hidden mb-6">
|
595 |
+
<label class="block text-gray-700 font-medium mb-2" for="outrosBairros">
|
596 |
+
Quais bairros? <span class="text-red-500">*</span>
|
597 |
+
</label>
|
598 |
+
<input id="outrosBairros" name="outrosBairros" type="text"
|
599 |
+
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
600 |
+
</div>
|
601 |
+
|
602 |
+
<!-- Navigation Buttons -->
|
603 |
+
<div class="flex justify-between mt-8">
|
604 |
+
<button type="button" class="px-6 py-3 bg-gray-600 text-white font-medium rounded-md hover:bg-gray-700 transition flex items-center"
|
605 |
+
onclick="voltarSessao(1)">
|
606 |
+
<i class="fas fa-arrow-left mr-2"></i> Voltar
|
607 |
+
</button>
|
608 |
+
<button type="button" class="px-6 py-3 bg-green-600 text-white font-medium rounded-md hover:bg-green-700 transition flex items-center"
|
609 |
+
onclick="salvarPDF()">
|
610 |
+
<i class="fas fa-check-circle mr-2"></i> Finalizar e Salvar como PDF
|
611 |
+
</button>
|
612 |
+
</div>
|
613 |
+
</section>
|
614 |
+
|
615 |
+
<!-- Error Messages -->
|
616 |
+
<div id="errorMessages" class="hidden bg-red-50 border-l-4 border-red-500 p-4 mb-6 rounded">
|
617 |
+
<div class="flex items-start">
|
618 |
+
<div class="flex-shrink-0">
|
619 |
+
<i class="fas fa-exclamation-circle text-red-500 text-xl mr-3 mt-1"></i>
|
620 |
+
</div>
|
621 |
+
<div>
|
622 |
+
<p class="font-bold text-red-800">Por favor, corrija os seguintes erros:</p>
|
623 |
+
<ul id="errorList" class="list-disc pl-5 mt-2 text-red-700"></ul>
|
624 |
+
</div>
|
625 |
+
</div>
|
626 |
+
</div>
|
627 |
+
</form>
|
628 |
+
</div>
|
629 |
+
|
630 |
+
<script>
|
631 |
+
// Initialize form on load
|
632 |
+
document.addEventListener('DOMContentLoaded', function() {
|
633 |
+
// Set up all conditional fields
|
634 |
+
setupConditionalFields();
|
635 |
+
|
636 |
+
// Set up validation for age fields
|
637 |
+
setupAgeValidation();
|
638 |
+
|
639 |
+
// Set up date validation
|
640 |
+
setupDateValidation();
|
641 |
+
});
|
642 |
+
|
643 |
+
// Show/hide conditional fields
|
644 |
+
function setupConditionalFields() {
|
645 |
+
// Logo disclosure
|
646 |
+
document.getElementById('divulgaLogo').addEventListener('change', function() {
|
647 |
+
const avisoLogo = document.getElementById('avisoLogo');
|
648 |
+
const nomeEmpresaContainer = document.getElementById('nomeEmpresaContainer');
|
649 |
+
|
650 |
+
if (this.value === 'Sim') {
|
651 |
+
avisoLogo.classList.remove('hidden');
|
652 |
+
nomeEmpresaContainer.classList.add('hidden');
|
653 |
+
document.getElementById('empresa').removeAttribute('required');
|
654 |
+
} else if (this.value === 'Não') {
|
655 |
+
avisoLogo.classList.add('hidden');
|
656 |
+
nomeEmpresaContainer.classList.remove('hidden');
|
657 |
+
document.getElementById('empresa').setAttribute('required', 'required');
|
658 |
+
} else {
|
659 |
+
avisoLogo.classList.add('hidden');
|
660 |
+
nomeEmpresaContainer.classList.add('hidden');
|
661 |
+
document.getElementById('empresa').removeAttribute('required');
|
662 |
+
}
|
663 |
+
|
664 |
+
// Check marketing warning
|
665 |
+
checkMarketingWarning();
|
666 |
+
});
|
667 |
+
|
668 |
+
// Production job
|
669 |
+
document.getElementById('producao').addEventListener('change', function() {
|
670 |
+
checkMarketingWarning();
|
671 |
+
});
|
672 |
+
|
673 |
+
// In-person attendance
|
674 |
+
document.getElementById('presencial').addEventListener('change', function() {
|
675 |
+
const outroLugar = document.getElementById('outroLugar');
|
676 |
+
const eventoContainer = document.getElementById('eventoContainer');
|
677 |
+
|
678 |
+
if (this.value === 'Outro') {
|
679 |
+
outroLugar.classList.remove('hidden');
|
680 |
+
eventoContainer.classList.remove('hidden');
|
681 |
+
document.getElementById('local').setAttribute('required', 'required');
|
682 |
+
} else {
|
683 |
+
outroLugar.classList.add('hidden');
|
684 |
+
eventoContainer.classList.add('hidden');
|
685 |
+
document.getElementById('local').removeAttribute('required');
|
686 |
+
}
|
687 |
+
});
|
688 |
+
|
689 |
+
// Defined date
|
690 |
+
document.getElementById('temDataDefinida').addEventListener('change', function() {
|
691 |
+
const datasContainer = document.getElementById('datasContainer');
|
692 |
+
if (this.value === 'Sim') {
|
693 |
+
datasContainer.classList.remove('hidden');
|
694 |
+
} else {
|
695 |
+
datasContainer.classList.add('hidden');
|
696 |
+
}
|
697 |
+
});
|
698 |
+
|
699 |
+
// Defined time
|
700 |
+
document.getElementById('temHorarioDefinido').addEventListener('change', function() {
|
701 |
+
const horariosContainer = document.getElementById('horariosContainer');
|
702 |
+
if (this.value === 'Sim') {
|
703 |
+
horariosContainer.classList.remove('hidden');
|
704 |
+
} else {
|
705 |
+
horariosContainer.classList.add('hidden');
|
706 |
+
}
|
707 |
+
});
|
708 |
+
|
709 |
+
// Joinville
|
710 |
+
document.getElementById('joinville').addEventListener('change', function() {
|
711 |
+
const cidadeOutras = document.getElementById('cidadeOutras');
|
712 |
+
const bairrosJoinvilleContainer = document.getElementById('bairrosJoinvilleContainer');
|
713 |
+
const outrosBairrosContainer = document.getElementById('outrosBairrosContainer');
|
714 |
+
|
715 |
+
if (this.value === 'Não') {
|
716 |
+
cidadeOutras.classList.remove('hidden');
|
717 |
+
bairrosJoinvilleContainer.classList.add('hidden');
|
718 |
+
outrosBairrosContainer.classList.remove('hidden');
|
719 |
+
document.getElementById('outraCidade').setAttribute('required', 'required');
|
720 |
+
document.getElementById('outrosBairros').setAttribute('required', 'required');
|
721 |
+
document.querySelector('select[name="bairros"]').removeAttribute('required');
|
722 |
+
} else {
|
723 |
+
cidadeOutras.classList.add('hidden');
|
724 |
+
bairrosJoinvilleContainer.classList.remove('hidden');
|
725 |
+
outrosBairrosContainer.classList.add('hidden');
|
726 |
+
document.getElementById('outraCidade').removeAttribute('required');
|
727 |
+
document.getElementById('outrosBairros').removeAttribute('required');
|
728 |
+
document.querySelector('select[name="bairros"]').setAttribute('required', 'required');
|
729 |
+
}
|
730 |
+
});
|
731 |
+
|
732 |
+
// Boost
|
733 |
+
document.getElementById('impulsionar').addEventListener('change', function() {
|
734 |
+
const avisoImpulsionamento = document.getElementById('avisoImpulsionamento');
|
735 |
+
const btnContinuar = document.getElementById('btnContinuar');
|
736 |
+
|
737 |
+
if (this.value === 'Sim') {
|
738 |
+
avisoImpulsionamento.classList.remove('hidden');
|
739 |
+
btnContinuar.style.display = 'flex';
|
740 |
+
} else {
|
741 |
+
avisoImpulsionamento.classList.add('hidden');
|
742 |
+
btnContinuar.style.display = 'none';
|
743 |
+
}
|
744 |
+
});
|
745 |
+
|
746 |
+
// Toggle between date types
|
747 |
+
document.querySelectorAll('input[name="tipoData"]').forEach(radio => {
|
748 |
+
radio.addEventListener('change', function() {
|
749 |
+
const dataUnica = document.getElementById('dataUnica');
|
750 |
+
const dataIntervalo = document.getElementById('dataIntervalo');
|
751 |
+
|
752 |
+
if (this.value === 'unico') {
|
753 |
+
dataUnica.classList.remove('hidden');
|
754 |
+
dataIntervalo.classList.add('hidden');
|
755 |
+
} else {
|
756 |
+
dataUnica.classList.add('hidden');
|
757 |
+
dataIntervalo.classList.remove('hidden');
|
758 |
+
}
|
759 |
+
});
|
760 |
+
});
|
761 |
+
|
762 |
+
// Toggle between time types
|
763 |
+
document.querySelectorAll('input[name="tipoHorario"]').forEach(radio => {
|
764 |
+
radio.addEventListener('change', function() {
|
765 |
+
const horarioUnico = document.getElementById('horarioUnico');
|
766 |
+
const horarioIntervalo = document.getElementById('horarioIntervalo');
|
767 |
+
|
768 |
+
if (this.value === 'unico') {
|
769 |
+
horarioUnico.classList.remove('hidden');
|
770 |
+
horarioIntervalo.classList.add('hidden');
|
771 |
+
} else {
|
772 |
+
horarioUnico.classList.add('hidden');
|
773 |
+
horarioIntervalo.classList.remove('hidden');
|
774 |
+
}
|
775 |
+
});
|
776 |
+
});
|
777 |
+
}
|
778 |
+
|
779 |
+
// Check marketing warning condition
|
780 |
+
function checkMarketingWarning() {
|
781 |
+
const avisoMarketing = document.getElementById('avisoMarketing');
|
782 |
+
const divulgaLogo = document.getElementById('divulgaLogo').value;
|
783 |
+
const producao = document.getElementById('producao').value;
|
784 |
+
|
785 |
+
if (divulgaLogo === 'Não' && producao === 'Sim') {
|
786 |
+
avisoMarketing.classList.remove('hidden');
|
787 |
+
} else {
|
788 |
+
avisoMarketing.classList.add('hidden');
|
789 |
+
}
|
790 |
+
}
|
791 |
+
|
792 |
+
// Set up age validation
|
793 |
+
function setupAgeValidation() {
|
794 |
+
const idadeMinima = document.getElementById('idadeMinima');
|
795 |
+
const idadeMaxima = document.getElementById('idadeMaxima');
|
796 |
+
|
797 |
+
idadeMinima.addEventListener('change', function() {
|
798 |
+
if (parseInt(this.value) < 18) {
|
799 |
+
this.value = 18;
|
800 |
+
}
|
801 |
+
if (parseInt(this.value) > parseInt(idadeMaxima.value)) {
|
802 |
+
idadeMaxima.value = this.value;
|
803 |
+
}
|
804 |
+
});
|
805 |
+
|
806 |
+
idadeMaxima.addEventListener('change', function() {
|
807 |
+
if (parseInt(this.value) < parseInt(idadeMinima.value)) {
|
808 |
+
this.value = idadeMinima.value;
|
809 |
+
}
|
810 |
+
if (parseInt(this.value) > 100) {
|
811 |
+
this.value = 100;
|
812 |
+
}
|
813 |
+
});
|
814 |
+
}
|
815 |
+
|
816 |
+
// Set up date validation
|
817 |
+
function setupDateValidation() {
|
818 |
+
const today = new Date();
|
819 |
+
today.setHours(0, 0, 0, 0);
|
820 |
+
|
821 |
+
// Validate single dates
|
822 |
+
document.addEventListener('change', function(e) {
|
823 |
+
if (e.target && e.target.name === 'datas[]') {
|
824 |
+
const selectedDate = new Date(e.target.value);
|
825 |
+
if (selectedDate < today) {
|
826 |
+
alert('Não é possível selecionar datas passadas');
|
827 |
+
e.target.value = '';
|
828 |
+
}
|
829 |
+
}
|
830 |
+
|
831 |
+
// Validate date ranges
|
832 |
+
if (e.target && (e.target.name === 'dataInicio[]' || e.target.name === 'dataFim[]')) {
|
833 |
+
const parent = e.target.closest('.campo-intervalo');
|
834 |
+
if (parent) {
|
835 |
+
const inicio = new Date(parent.querySelector('input[name="dataInicio[]"]').value);
|
836 |
+
const fim = new Date(parent.querySelector('input[name="dataFim[]"]').value);
|
837 |
+
|
838 |
+
if (inicio && fim && inicio > fim) {
|
839 |
+
alert('A data de início não pode ser depois da data de fim');
|
840 |
+
e.target.value = '';
|
841 |
+
}
|
842 |
+
|
843 |
+
if (inicio && inicio < today) {
|
844 |
+
alert('Não é possível selecionar datas passadas');
|
845 |
+
parent.querySelector('input[name="dataInicio[]"]').value = '';
|
846 |
+
}
|
847 |
+
|
848 |
+
if (fim && fim < today) {
|
849 |
+
alert('Não é possível selecionar datas passadas');
|
850 |
+
parent.querySelector('input[name="dataFim[]"]').value = '';
|
851 |
+
}
|
852 |
+
}
|
853 |
+
}
|
854 |
+
});
|
855 |
+
}
|
856 |
+
|
857 |
+
// Add/remove date fields
|
858 |
+
function adicionarData() {
|
859 |
+
const container = document.getElementById('datasUnicas');
|
860 |
+
const newField = document.createElement('div');
|
861 |
+
newField.className = 'campo-data flex items-center mb-2';
|
862 |
+
newField.innerHTML = `
|
863 |
+
<label class="mr-2">Data:</label>
|
864 |
+
<input type="date" name="datas[]" required
|
865 |
+
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
866 |
+
<span class="remove-btn ml-2" onclick="removerData(this)"><i class="fas fa-times"></i></span>
|
867 |
+
`;
|
868 |
+
container.appendChild(newField);
|
869 |
+
}
|
870 |
+
|
871 |
+
function removerData(element) {
|
872 |
+
element.parentElement.remove();
|
873 |
+
}
|
874 |
+
|
875 |
+
// Add/remove date range fields
|
876 |
+
function adicionarIntervalo() {
|
877 |
+
const container = document.getElementById('dataIntervalo');
|
878 |
+
const newField = document.createElement('div');
|
879 |
+
newField.className = 'campo-intervalo grid grid-cols-5 gap-2 items-center mb-2';
|
880 |
+
newField.innerHTML = `
|
881 |
+
<label>De</label>
|
882 |
+
<input type="date" name="dataInicio[]" required
|
883 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
884 |
+
<label>até</label>
|
885 |
+
<input type="date" name="dataFim[]" required
|
886 |
+
class="col-span-2 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
887 |
+
<span class="remove-btn ml-2" onclick="removerIntervalo(this)"><i class="fas fa-times"></i></span>
|
888 |
+
`;
|
889 |
+
container.insertBefore(newField, container.lastElementChild);
|
890 |
+
}
|
891 |
+
|
892 |
+
function removerIntervalo(element) {
|
893 |
+
element.parentElement.remove();
|
894 |
+
}
|
895 |
+
|
896 |
+
// Add/remove time fields
|
897 |
+
function adicionarHorario() {
|
898 |
+
const container = document.getElementById('horarioUnico');
|
899 |
+
const newField = document.createElement('div');
|
900 |
+
newField.className = 'campo-horario flex items-center mb-2';
|
901 |
+
newField.innerHTML = `
|
902 |
+
<label class="mr-2">Horário:</label>
|
903 |
+
<input type="time" name="horarios[]" required
|
904 |
+
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
|
905 |
+
<span class="remove-btn ml-2" onclick="removerHorario(this)"><i class="fas fa-times"></i></span>
|
906 |
+
`;
|
907 |
+
container.insertBefore(newField, container.lastElementChild);
|
908 |
+
}
|
909 |
+
|
910 |
+
function removerHorario(element) {
|
911 |
+
element.parentElement.remove();
|
912 |
+
}
|
913 |
+
|
914 |
+
// Form navigation
|
915 |
+
function validarSessao(sessaoAtual) {
|
916 |
+
// Simple validation - in a real app you would validate all required fields
|
917 |
+
const errorMessages = document.getElementById('errorMessages');
|
918 |
+
const errorList = document.getElementById('errorList');
|
919 |
+
|
920 |
+
errorMessages.classList.add('hidden');
|
921 |
+
errorList.innerHTML = '';
|
922 |
+
|
923 |
+
// Check if all required fields are filled
|
924 |
+
let isValid = true;
|
925 |
+
const requiredFields = document.querySelectorAll(`#sessao${sessaoAtual} [required]`);
|
926 |
+
|
927 |
+
requiredFields.forEach(field => {
|
928 |
+
if (!field.value.trim()) {
|
929 |
+
isValid = false;
|
930 |
+
const fieldName = field.previousElementSibling ? field.previousElementSibling.textContent.trim() : 'Campo obrigatório';
|
931 |
+
const errorItem = document.createElement('li');
|
932 |
+
errorItem.textContent = `${fieldName} não preenchido`;
|
933 |
+
errorList.appendChild(errorItem);
|
934 |
+
|
935 |
+
// Highlight the field
|
936 |
+
field.classList.add('border-red-500');
|
937 |
+
field.addEventListener('input', function() {
|
938 |
+
if (this.value.trim()) {
|
939 |
+
this.classList.remove('border-red-500');
|
940 |
+
}
|
941 |
+
});
|
942 |
+
}
|
943 |
+
});
|
944 |
+
|
945 |
+
// Special validation for age range
|
946 |
+
const idadeMinima = parseInt(document.getElementById('idadeMinima').value);
|
947 |
+
const idadeMaxima = parseInt(document.getElementById('idadeMaxima').value);
|
948 |
+
if (idadeMinima > idadeMaxima) {
|
949 |
+
isValid = false;
|
950 |
+
const errorItem = document.createElement('li');
|
951 |
+
errorItem.textContent = 'Idade mínima não pode ser maior que idade máxima';
|
952 |
+
errorList.appendChild(errorItem);
|
953 |
+
}
|
954 |
+
|
955 |
+
if (!isValid) {
|
956 |
+
errorMessages.classList.remove('hidden');
|
957 |
+
return;
|
958 |
+
}
|
959 |
+
|
960 |
+
// If validation passes, go to next section
|
961 |
+
if (sessaoAtual === 1) {
|
962 |
+
document.getElementById('sessao1').classList.remove('active');
|
963 |
+
document.getElementById('sessao2').classList.add('active');
|
964 |
+
|
965 |
+
// Check if we should show the boost warning for dates < 4 days
|
966 |
+
checkBoostDateWarning();
|
967 |
+
}
|
968 |
+
}
|
969 |
+
|
970 |
+
// Check if we should show boost date warning
|
971 |
+
function checkBoostDateWarning() {
|
972 |
+
const temDataDefinida = document.getElementById('temDataDefinida').value;
|
973 |
+
const avisoImpulsionamento4dias = document.getElementById('avisoImpulsionamento4dias');
|
974 |
+
|
975 |
+
if (temDataDefinida === 'Sim') {
|
976 |
+
// Check if any date is within 4 days
|
977 |
+
const today = new Date();
|
978 |
+
today.setHours(0, 0, 0, 0);
|
979 |
+
|
980 |
+
// Check single dates
|
981 |
+
const datas = document.querySelectorAll('input[name="datas[]"]');
|
982 |
+
let showWarning = false;
|
983 |
+
|
984 |
+
datas.forEach(dateInput => {
|
985 |
+
if (dateInput.value) {
|
986 |
+
const selectedDate = new Date(dateInput.value);
|
987 |
+
const diffTime = selectedDate - today;
|
988 |
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
989 |
+
|
990 |
+
if (diffDays < 4) {
|
991 |
+
showWarning = true;
|
992 |
+
}
|
993 |
+
}
|
994 |
+
});
|
995 |
+
|
996 |
+
// Check date ranges
|
997 |
+
const intervalos = document.querySelectorAll('.campo-intervalo');
|
998 |
+
intervalos.forEach(intervalo => {
|
999 |
+
const inicio = new Date(intervalo.querySelector('input[name="dataInicio[]"]').value);
|
1000 |
+
const fim = new Date(intervalo.querySelector('input[name="dataFim[]"]').value);
|
1001 |
+
|
1002 |
+
if (inicio) {
|
1003 |
+
const diffTime = inicio - today;
|
1004 |
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
1005 |
+
|
1006 |
+
if (diffDays < 4) {
|
1007 |
+
showWarning = true;
|
1008 |
+
}
|
1009 |
+
}
|
1010 |
+
});
|
1011 |
+
|
1012 |
+
if (showWarning) {
|
1013 |
+
avisoImpulsionamento4dias.classList.remove('hidden');
|
1014 |
+
} else {
|
1015 |
+
avisoImpulsionamento4dias.classList.add('hidden');
|
1016 |
+
}
|
1017 |
+
} else {
|
1018 |
+
avisoImpulsionamento4dias.classList.add('hidden');
|
1019 |
+
}
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
function voltarSessao(sessao) {
|
1023 |
+
document.getElementById('sessao1').classList.remove('active');
|
1024 |
+
document.getElementById('sessao2').classList.remove('active');
|
1025 |
+
|
1026 |
+
if (sessao === 1) {
|
1027 |
+
document.getElementById('sessao1').classList.add('active');
|
1028 |
+
}
|
1029 |
+
}
|
1030 |
+
|
1031 |
+
// Save as PDF
|
1032 |
+
function salvarPDF() {
|
1033 |
+
const element = document.getElementById('vagaForm');
|
1034 |
+
const opt = {
|
1035 |
+
margin: 10,
|
1036 |
+
filename: 'formulario_vaga.pdf',
|
1037 |
+
image: { type: 'jpeg', quality: 0.98 },
|
1038 |
+
html2canvas: { scale: 2 },
|
1039 |
+
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
|
1040 |
+
};
|
1041 |
+
|
1042 |
+
// Show loading state
|
1043 |
+
const saveBtn = document.querySelector('button[onclick="salvarPDF()"]');
|
1044 |
+
const originalText = saveBtn.innerHTML;
|
1045 |
+
saveBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Gerando PDF...';
|
1046 |
+
saveBtn.disabled = true;
|
1047 |
+
|
1048 |
+
// Generate PDF
|
1049 |
+
html2pdf().set(opt).from(element).save().then(() => {
|
1050 |
+
// Restore button state
|
1051 |
+
saveBtn.innerHTML = originalText;
|
1052 |
+
saveBtn.disabled = false;
|
1053 |
+
|
1054 |
+
// Show success message
|
1055 |
+
const successMsg = document.createElement('div');
|
1056 |
+
successMsg.className = 'bg-green-50 border-l-4 border-green-500 p-4 mb-6 rounded animate-pulse';
|
1057 |
+
successMsg.innerHTML = `
|
1058 |
+
<div class="flex items-start">
|
1059 |
+
<div class="flex-shrink-0">
|
1060 |
+
<i class="fas fa-check-circle text-green-500 text-xl mr-3 mt-1"></i>
|
1061 |
+
</div>
|
1062 |
+
<div>
|
1063 |
+
<p class="font-bold text-green-800">Formulário salvo com sucesso!</p>
|
1064 |
+
<p class="text-green-700 mt-1">O arquivo PDF foi baixado para o seu dispositivo.</p>
|
1065 |
+
</div>
|
1066 |
+
</div>
|
1067 |
+
`;
|
1068 |
+
element.parentNode.insertBefore(successMsg, element.nextSibling);
|
1069 |
+
|
1070 |
+
// Remove message after 5 seconds
|
1071 |
+
setTimeout(() => {
|
1072 |
+
successMsg.remove();
|
1073 |
+
}, 5000);
|
1074 |
+
});
|
1075 |
+
}
|
1076 |
+
|
1077 |
+
// Neighborhood search
|
1078 |
+
document.getElementById('bairroSearch').addEventListener('input', function() {
|
1079 |
+
const searchTerm = this.value.toLowerCase();
|
1080 |
+
const options = document.querySelectorAll('select[name="bairros"] option');
|
1081 |
+
|
1082 |
+
options.forEach(option => {
|
1083 |
+
const text = option.textContent.toLowerCase();
|
1084 |
+
if (text.includes(searchTerm) || searchTerm === '') {
|
1085 |
+
option.style.display = '';
|
1086 |
+
} else {
|
1087 |
+
option.style.display = 'none';
|
1088 |
+
}
|
1089 |
+
});
|
1090 |
+
});
|
1091 |
+
</script>
|
1092 |
+
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Ticoliro/formulario" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
1093 |
+
</html>
|
prompts.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
aplique essas condiçoes nesse html GustavoNeneve: @workspace poderia me explicar as codiçoes para cada pergunta aparecer, cada avisto, quais perguntas são obrigatorias, quais não são, quais não são quando tiver perguntas não aparecem esse tipo de coisa Workspace: Coletando informações do workspaceVou explicar as principais condições e dependências do formulário: ### Campos Sempre Obrigatórios ```javascript const camposObrigatorios = { 'analista': 'Nome do analista', 'whatsapp': 'WhatsApp', 'divulgaLogo': 'Pode divulgar logo', 'producao': 'É produção', 'cargo': 'Nome do cargo', 'vagas': 'Quantas vagas', 'joinville': 'É para Joinville', 'impulsionar': 'É para impulsionar' } ``` ### Campos Opcionais ```html <!-- Campos marcados com class="optional" --> <label>Benefícios:<span class="optional"></span></label> <label>Requisitos:<span class="optional"></span></label> <label>Turnos:<span class="optional"></span></label> <label>Notas adicionais:<span class="optional"></span></label> ``` ### Condições de Exibição 1. **Logo e Nome da Empresa** ```javascript // Se "Pode divulgar logo?" = "Sim" - Mostra campo "Nome da empresa" (obrigatório) - Mostra aviso sobre formato do logo ``` 2. **Aviso Marketing** ```javascript // Se "Pode divulgar logo?" = "Não" E "É produção?" = "Sim" - Mostra aviso "O marketing NÃO está permitido divulgar vagas de produção sem logo" ``` 3. **Local de Comparecimento** ```javascript // Se "Comparecimento presencial?" = "Outro" - Mostra campo para inserir link do Google Maps (obrigatório) ``` 4. **Datas** ```javascript // Se "Tem data definida?" = "Sim" - Mostra opções de "Data única" ou "Intervalo" - Se "Data única": permite adicionar múltiplas datas - Se "Intervalo": permite adicionar períodos com início e fim ``` 5. **Horários** ```javascript // Se "Tem horário definido?" = "Sim" - Mostra opções de "Horário único" ou "Intervalo" - Se "Horário único": permite adicionar múltiplos horários - Se "Intervalo": requer hora início e fim ``` 6. **Cidade e Bairros** ```javascript // Se "É para Joinville?" = "Sim" - Mostra seleção de bairros de Joinville (obrigatório) // Se "É para Joinville?" = "Não" - Mostra campo "Qual cidade?" (obrigatório) - Mostra campo "Quais bairros?" (obrigatório) ``` 7. **Impulsionamento** ```javascript // Se "É para impulsionar?" = "Sim" - Mostra seção 2 completa com campos adicionais: - Gênero (obrigatório) - Idade mínima/máxima (obrigatório) - Dias de impulsionamento (obrigatório) - Orçamento por dia (obrigatório) - Mostra aviso se data for menor que 4 dias ``` ### Validações Especiais 1. **Idade**: ```javascript - Idade mínima deve ser >= 18 - Idade máxima não pode ser menor que idade mínima ``` 2. **Datas**: ```javascript - Não podem ser datas passadas - Se tiver impulsionamento, mostra aviso para datas em menos de 4 dias ``` 3. **Campos de Bairros**: ```javascript - Para Joinville: deve selecionar ao menos um bairro - Para outras cidades: deve preencher campo de texto ``` Se precisar de detalhes específicos sobre alguma destas condições, posso explicar melhor.
|