feat: campo reajuste usa lista fixa com opção Outro para texto livre
Adiciona select com índices pré-definidos (IPCA, IGPM, INPC, INCC, IPC-FIPE, SELIC, IPCA-E) e opção "Outro" que revela input de texto livre. Campo órgão passa a ser dropdown dos órgãos cadastrados. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -71,6 +71,20 @@ const closeMenu = () => { openMenuId.value = null }
|
||||
onMounted(() => document.addEventListener('click', closeMenu))
|
||||
onUnmounted(() => document.removeEventListener('click', closeMenu))
|
||||
|
||||
// --- Reajuste ---
|
||||
const REAJUSTES = ['IPCA', 'IGPM', 'INPC', 'INCC', 'IPC-FIPE', 'SELIC', 'IPCA-E', 'Outro']
|
||||
const createReajusteSelect = ref('')
|
||||
const editReajusteSelect = ref('')
|
||||
|
||||
watch(createReajusteSelect, (v) => {
|
||||
if (v !== 'Outro') createForm.reajuste = v
|
||||
else createForm.reajuste = ''
|
||||
})
|
||||
watch(editReajusteSelect, (v) => {
|
||||
if (v !== 'Outro') editForm.reajuste = v
|
||||
else editForm.reajuste = ''
|
||||
})
|
||||
|
||||
// --- Modal Criar ---
|
||||
const showCreate = ref(false)
|
||||
const createForm = reactive({
|
||||
@@ -88,6 +102,7 @@ async function criarContrato() {
|
||||
await apiFetch('/contracts', { method: 'POST', body: { ...createForm } })
|
||||
showCreate.value = false
|
||||
Object.assign(createForm, { numero: '', orgao: '', objeto: '', valor: 0, data_inicio: '', data_fim: '', fiscal_contrato: '', reajuste: '', prorrogacao_maxima: '', sla: '', status: 'ativo' })
|
||||
createReajusteSelect.value = ''
|
||||
await refresh()
|
||||
} catch (err: any) {
|
||||
createError.value = err?.data?.error || 'Erro ao criar contrato.'
|
||||
@@ -117,6 +132,7 @@ function abrirEditar(c: ApiContract) {
|
||||
prorrogacao_maxima: c.ProrrogacaoMaxima ? c.ProrrogacaoMaxima.slice(0, 10) : '',
|
||||
sla: c.Sla, status: c.Status,
|
||||
})
|
||||
editReajusteSelect.value = REAJUSTES.includes(c.Reajuste) ? c.Reajuste : (c.Reajuste ? 'Outro' : '')
|
||||
editError.value = ''
|
||||
showEdit.value = true
|
||||
}
|
||||
@@ -321,7 +337,11 @@ async function downloadArquivo(contractId: string, fileId: string, nome: string)
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Reajuste</label>
|
||||
<UInput v-model="createForm.reajuste" placeholder="Ex: IPCA" class="w-full" />
|
||||
<select v-model="createReajusteSelect" class="field-select">
|
||||
<option value="" disabled>Selecione</option>
|
||||
<option v-for="r in REAJUSTES" :key="r" :value="r">{{ r }}</option>
|
||||
</select>
|
||||
<UInput v-if="createReajusteSelect === 'Outro'" v-model="createForm.reajuste" placeholder="Especifique o índice" class="w-full" style="margin-top:6px" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Prorrogação Máxima</label>
|
||||
@@ -386,7 +406,11 @@ async function downloadArquivo(contractId: string, fileId: string, nome: string)
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Reajuste</label>
|
||||
<UInput v-model="editForm.reajuste" class="w-full" />
|
||||
<select v-model="editReajusteSelect" class="field-select">
|
||||
<option value="" disabled>Selecione</option>
|
||||
<option v-for="r in REAJUSTES" :key="r" :value="r">{{ r }}</option>
|
||||
</select>
|
||||
<UInput v-if="editReajusteSelect === 'Outro'" v-model="editForm.reajuste" placeholder="Especifique o índice" class="w-full" style="margin-top:6px" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Prorrogação Máxima</label>
|
||||
|
||||
Reference in New Issue
Block a user