fix(number-fields): избегаем потери точности длинных чисел

- number-поля теперь рендерятся как text + inputMode=numeric,
  чтобы браузер не округлял значения через input type=number
- пробелы при вставке в number-поля удаляются
- бэкенд нормализует значения number-полей в строку перед сохранением
- добавлен хелпер normalizeFieldValueForStorage

Closes: искажение расчётного счёта и других длинных числовых полей
This commit is contained in:
2026-07-07 21:03:40 +03:00
commit 1f5ecb6da4
1089 changed files with 237546 additions and 0 deletions

66
mobile/README.md Normal file
View File

@@ -0,0 +1,66 @@
# iistwin — Android APK (Expo EAS)
Мобильное приложение для Android, собранное через Expo EAS облачный сервис.
Это WebView-обёртка над веб-версией — обновления функционала происходят автоматически при деплое.
**Production URL:** `https://iistwin.ru`
**Expo проект:** https://expo.dev/accounts/iisultanov/projects/iistwin
## Настройка EXPO_TOKEN
1. Открой https://expo.dev/settings/access-tokens
2. Нажми **Create token**, скопируй значение (~40 символов латиницы)
3. В Replit: левая панель → 🔒 **Secrets** → добавь `EXPO_TOKEN` = твой токен
## Сборка APK (одна команда)
```bash
cd mobile && npm run build
```
Команда автоматически:
1. Генерирует keystore и `credentials.json` если их нет
2. Запускает облачную сборку на серверах Expo (10-20 мин)
APK доступен после сборки: https://expo.dev/accounts/iisultanov/projects/iistwin/builds
## Установка APK на Android
1. Скачай `.apk` с expo.dev → проект → Builds
2. На Android: **Настройки → Безопасность → Установка из неизвестных источников**
3. Установи APK
## Настройка паролей подписи (опционально)
По умолчанию keystore генерируется с паролями по умолчанию.
Для кастомных паролей добавь секреты в Replit:
- `ANDROID_KEYSTORE_PASSWORD` — пароль keystore
- `ANDROID_KEY_PASSWORD` — пароль ключа
- `ANDROID_KEY_ALIAS` — алиас ключа (по умолчанию: iistwin)
## Обновление приложения
- **Изменения UI, форм, функционала** — автоматически при деплое, APK переустанавливать не нужно
- **Изменения нативного кода** (иконка, разрешения) — нужна новая сборка EAS
## Безопасность
- `mobile/credentials/` и `mobile/credentials.json` в `.gitignore` — не попадают в VCS
- Файлы создаются динамически через `scripts/setup-android-creds.sh`
- WebView доступен только для origin: `https://iistwin.ru`
- Внешние ссылки открываются в браузере устройства
## Структура
```
mobile/
├── App.js # WebView — только production origin, кнопка "назад"
├── app.json # projectId=18e993b2, owner=iisultanov
├── eas.json # preview → buildType: apk
├── credentials.json.example # Шаблон (не коммитится)
├── package.json # npm run build = setup + EAS
└── assets/icon.png
scripts/
├── setup-android-creds.sh # Генерирует keystore и credentials.json
└── eas-build.exp # Expect-скрипт для EAS CLI
```