diff --git a/src/app/pages/create-page/create-page.html b/src/app/pages/create-page/create-page.html index 42b736e..37ca6ff 100644 --- a/src/app/pages/create-page/create-page.html +++ b/src/app/pages/create-page/create-page.html @@ -76,6 +76,7 @@ step="1" inputmode="numeric" placeholder="0" + [disabled]="isAmountLocked()" autofocus /> diff --git a/src/app/pages/create-page/create-page.ts b/src/app/pages/create-page/create-page.ts index 41fc2d5..eac02b0 100644 --- a/src/app/pages/create-page/create-page.ts +++ b/src/app/pages/create-page/create-page.ts @@ -22,6 +22,8 @@ interface SettingsResponse { minAmount?: number; maxAmount?: number; qrTTL?: number; + defaultAmount?: number; + enableAmount?: boolean; } interface CreateQrResponse { @@ -58,6 +60,7 @@ export class CreatePage { maxAmount = signal(200_000); amount = signal(null); + private lockedAmount = signal(null); note = signal(''); error = signal(''); loading = signal(false); @@ -109,17 +112,26 @@ export class CreatePage { private loadSettings(): void { // Fetch limits from /qr/settings. If the call fails, keep defaults. - const url = `${QR_VITANOVA_API}/qr/settings`; + const partnerqrID = this.partnerqrID; + const url = `${QR_VITANOVA_API}/qr/settings${partnerqrID ? `?id=${encodeURIComponent(partnerqrID)}` : ''}`; this.http.get(url).subscribe({ next: (s) => { if (typeof s?.minAmount === 'number') this.minAmount.set(s.minAmount); if (typeof s?.maxAmount === 'number') this.maxAmount.set(s.maxAmount); + + const defaultAmount = typeof s?.defaultAmount === 'number' ? s.defaultAmount : 0; + if (s?.enableAmount === true && defaultAmount > 0) { + this.lockedAmount.set(defaultAmount); + this.amount.set(defaultAmount); + } else { + this.lockedAmount.set(null); + } } }); } createCheck(): void { - const val = this.amount(); + const val = this.lockedAmount() ?? this.amount(); if (val !== null && val < this.minAmount()) { this.error.set(`${this.t('errors.invalid_amount')} (мин. ${this.minAmount()} ₽)`); return; @@ -223,10 +235,19 @@ export class CreatePage { } onAmountChange(value: number | null): void { + if (this.lockedAmount() !== null) { + this.amount.set(this.lockedAmount()); + return; + } + this.amount.set(value || null); if (value && value > 0) this.error.set(''); } + isAmountLocked(): boolean { + return this.lockedAmount() !== null; + } + onNoteChange(value: string): void { this.note.set(value); }