diff --git a/app/resources/js/views/settings/RequisitesTab.vue b/app/resources/js/views/settings/RequisitesTab.vue index 32aa0969..d5de79d6 100644 --- a/app/resources/js/views/settings/RequisitesTab.vue +++ b/app/resources/js/views/settings/RequisitesTab.vue @@ -46,6 +46,19 @@ const requiresInn = computed( () => form.subject_type === 'sole_proprietor' || form.subject_type === 'legal_entity', ); +const isLegalEntity = computed(() => form.subject_type === 'legal_entity'); +const isSoleProprietor = computed(() => form.subject_type === 'sole_proprietor'); + +// Блок платёжных реквизитов виден, как только выбран тип лица. +const showPayment = computed(() => form.subject_type !== null); +// КПП — только юрлицо; ОГРН/ОГРНИП и юр.адрес — юрлицо и ИП; банк — всегда (когда showPayment). +const showKpp = computed(() => isLegalEntity.value); +const showOgrn = computed(() => isLegalEntity.value || isSoleProprietor.value); +const showLegalAddress = computed(() => isLegalEntity.value || isSoleProprietor.value); +const ogrnLabel = computed(() => (isSoleProprietor.value ? 'ОГРНИП' : 'ОГРН')); + +const isCompleted = computed(() => Boolean(form.requisites_completed_at)); + onMounted(async () => { loading.value = true; try { @@ -90,6 +103,28 @@ function validateClient(): boolean { if (!form.contact_name || form.contact_name.trim() === '') e.contact_name = ['Укажите контактное имя']; if (!form.contact_phone || form.contact_phone.trim() === '') e.contact_phone = ['Укажите телефон']; if (requiresInn.value && (!form.inn || form.inn.trim() === '')) e.inn = ['ИНН обязателен для ИП и юрлица']; + + // Платёжные поля — необязательные; проверяем формат только если заполнены. + const kpp = form.kpp?.trim() ?? ''; + if (kpp !== '' && !/^\d{9}$/.test(kpp)) e.kpp = ['КПП — 9 цифр']; + + const ogrn = form.ogrn?.trim() ?? ''; + if (ogrn !== '') { + const len = isSoleProprietor.value ? 15 : 13; + if (!new RegExp(`^\\d{${len}}$`).test(ogrn)) { + e.ogrn = [isSoleProprietor.value ? 'ОГРНИП — 15 цифр' : 'ОГРН — 13 цифр']; + } + } + + const bik = form.bank_bik?.trim() ?? ''; + if (bik !== '' && !/^\d{9}$/.test(bik)) e.bank_bik = ['БИК — 9 цифр']; + + const acc = form.bank_account?.trim() ?? ''; + if (acc !== '' && !/^\d{20}$/.test(acc)) e.bank_account = ['Расчётный счёт — 20 цифр']; + + const corr = form.corr_account?.trim() ?? ''; + if (corr !== '' && !/^\d{20}$/.test(corr)) e.corr_account = ['Корр. счёт — 20 цифр']; + errors.value = e; return Object.keys(e).length === 0; } @@ -231,6 +266,104 @@ async function save(): Promise { + +