fix(money-input): toFixed(2) при allowFractional=true для правильного отображения
Some checks failed
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 57s
CI / Web (React + Vite) (push) Successful in 37s
Docker Images / Detect changes (push) Successful in 4s
Docker Images / API image (push) Has been skipped
Docker Images / Web image (push) Failing after 23s
Docker Images / Deploy stage (push) Has been skipped
Some checks failed
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 57s
CI / Web (React + Vite) (push) Successful in 37s
Docker Images / Detect changes (push) Successful in 4s
Docker Images / API image (push) Has been skipped
Docker Images / Web image (push) Failing after 23s
Docker Images / Deploy stage (push) Has been skipped
formatFromValue использовал String(v) для дробного режима, поэтому целые значения в БД (1317, 1860) показывались как «1317» / «1860» даже при включённой галке «Разрешить дробные цены». Теперь: - fractional=true → v.toFixed(2): 1317 → «1317.00», 1317.5 → «1317.50»; - fractional=false → String(Math.round(v)): 1317.5 → «1318». Хелпер используется в init useState, useEffect-синке и commitDraft — таким образом при onBlur поле всегда возвращается к корректному формату «1317.00». Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4bfcc56e7d
commit
0218c799c5
|
|
@ -60,8 +60,14 @@ export function MoneyInput({
|
|||
const settingKnown = allowFractional !== undefined || org.data !== undefined
|
||||
const fractional = allowFractional ?? org.data?.allowFractionalPrices ?? true
|
||||
|
||||
const formatFromValue = (v: number | null | undefined, frac: boolean) =>
|
||||
v == null ? '' : (frac ? String(v) : String(Math.round(v)))
|
||||
const formatFromValue = (v: number | null | undefined, frac: boolean) => {
|
||||
if (v == null) return ''
|
||||
// При fractional=true всегда показываем ровно 2 знака после запятой
|
||||
// (1317 → «1317.00», 1317.5 → «1317.50»). Так юзеру визуально понятно,
|
||||
// что поле допускает копейки и текущее значение — это целое.
|
||||
if (frac) return v.toFixed(2)
|
||||
return String(Math.round(v))
|
||||
}
|
||||
|
||||
// Локальный draft — то что юзер реально печатает. Может быть промежуточным
|
||||
// ("100.", "100.5", "0."). Sync с внешним value только когда поле не в фокусе.
|
||||
|
|
|
|||
Loading…
Reference in a new issue