Files
InvoiceShelf/resources/scripts-v2/features/company/estimates/components/EstimateBasicFields.vue
2026-04-06 17:59:15 +02:00

88 lines
2.2 KiB
Vue

<template>
<div class="md:grid-cols-12 grid-cols-1 md:gap-x-6 mt-6 mb-8 grid gap-y-5">
<BaseCustomerSelectPopup
:valid="v.customer_id"
:content-loading="isLoading"
type="estimate"
class="col-span-6 pr-0"
/>
<BaseInputGrid
class="col-span-6 rounded-xl shadow border border-line-light bg-surface p-5"
>
<BaseInputGroup
:label="$t('reports.estimates.estimate_date')"
:content-loading="isLoading"
required
:error="v.estimate_date.$error && v.estimate_date.$errors[0].$message"
>
<BaseDatePicker
v-model="estimateStore.newEstimate.estimate_date"
:content-loading="isLoading"
:calendar-button="true"
calendar-button-icon="calendar"
/>
</BaseInputGroup>
<BaseInputGroup
:label="$t('estimates.expiry_date')"
:content-loading="isLoading"
>
<BaseDatePicker
v-model="estimateStore.newEstimate.expiry_date"
:content-loading="isLoading"
:calendar-button="true"
calendar-button-icon="calendar"
/>
</BaseInputGroup>
<BaseInputGroup
:label="$t('estimates.estimate_number')"
:content-loading="isLoading"
required
:error="
v.estimate_number.$error && v.estimate_number.$errors[0].$message
"
>
<BaseInput
v-model="estimateStore.newEstimate.estimate_number"
:content-loading="isLoading"
/>
</BaseInputGroup>
<ExchangeRateConverter
:store="estimateStore"
store-prop="newEstimate"
:v="v"
:is-loading="isLoading"
:is-edit="isEdit"
:customer-currency="estimateStore.newEstimate.currency_id"
/>
</BaseInputGrid>
</div>
</template>
<script setup lang="ts">
import { ExchangeRateConverter } from '../../../shared/document-form'
import { useEstimateStore } from '../store'
interface ValidationField {
$error: boolean
$errors: Array<{ $message: string }>
$touch: () => void
}
interface Props {
v: Record<string, ValidationField>
isLoading?: boolean
isEdit?: boolean
}
withDefaults(defineProps<Props>(), {
isLoading: false,
isEdit: false,
})
const estimateStore = useEstimateStore()
</script>