fix: allow clearing number inputs and add validation

- Add inputHelpers utility for number inputs that allow empty values
- Update tariff, campaign, promo offers, and server forms
- Add validation for required fields (deviceLimit, tierLevel, dailyPrice)
- Add placeholders and error indicators for empty required fields
- Add fieldRequired and dailyPriceRequired translations
This commit is contained in:
c0mrade
2026-02-02 03:10:54 +03:00
parent 36cc01ca7e
commit 47e28ee78f
10 changed files with 234 additions and 136 deletions

View File

@@ -1259,6 +1259,7 @@
"deviceLimitLabel": "Devices in tariff",
"tierLevelLabel": "Tariff tier level",
"tierLevelHint": "Affects upgrade availability between tariffs",
"fieldRequired": "Required field",
"periodsTabHint": "Add periods and prices for the tariff. Users will be able to choose from the added periods.",
"addPeriodTitle": "Add period",
"daysLabel": "Days",
@@ -1307,7 +1308,8 @@
"periodType": "Period-based",
"dailyPriceLabel": "Price per day",
"currencyPerDay": "\u20bd/day",
"dailyDeductionDesc": "Charged daily from user's balance"
"dailyDeductionDesc": "Charged daily from user's balance",
"dailyPriceRequired": "Enter a price per day greater than 0"
},
"servers": {
"title": "Server Management",

View File

@@ -1029,6 +1029,7 @@
"deviceLimitLabel": "دستگاه‌ها در تعرفه",
"tierLevelLabel": "سطح تعرفه",
"tierLevelHint": "بر دسترسی ارتقا بین تعرفه‌ها تأثیر می‌گذارد",
"fieldRequired": "فیلد اجباری",
"periodsTabHint": "دوره‌ها و قیمت‌ها را برای تعرفه اضافه کنید. کاربران می‌توانند از دوره‌های اضافه شده انتخاب کنند.",
"addPeriodTitle": "افزودن دوره",
"daysLabel": "روز",
@@ -1077,7 +1078,8 @@
"periodType": "دوره‌ای",
"dailyPriceLabel": "قیمت روزانه",
"currencyPerDay": "₽/روز",
"dailyDeductionDesc": "هر روز از موجودی کاربر کسر می‌شود"
"dailyDeductionDesc": "هر روز از موجودی کاربر کسر می‌شود",
"dailyPriceRequired": "قیمت روزانه بزرگتر از 0 را وارد کنید"
},
"servers": {
"title": "مدیریت سرورها",

View File

@@ -1770,6 +1770,7 @@
"deviceLimitLabel": "Устройств в тарифе",
"tierLevelLabel": "Уровень тарифа",
"tierLevelHint": "Влияет на доступность перехода между тарифами",
"fieldRequired": "Обязательное поле",
"periodsTabHint": "Добавьте периоды и цены для тарифа. Пользователи смогут выбирать из добавленных периодов.",
"addPeriodTitle": "Добавить период",
"daysLabel": "Дней",
@@ -1818,7 +1819,8 @@
"periodType": "Периодный",
"dailyPriceLabel": "Цена за день",
"currencyPerDay": "₽/день",
"dailyDeductionDesc": "Списывается ежедневно с баланса пользователя"
"dailyDeductionDesc": "Списывается ежедневно с баланса пользователя",
"dailyPriceRequired": "Укажите цену за день больше 0"
},
"servers": {
"title": "Управление серверами",

View File

@@ -1066,6 +1066,7 @@
"deviceLimitLabel": "套餐中的设备数",
"tierLevelLabel": "套餐等级",
"tierLevelHint": "影响套餐之间的升级可用性",
"fieldRequired": "必填字段",
"periodsTabHint": "为套餐添加周期和价格。用户将能够从添加的周期中选择。",
"addPeriodTitle": "添加周期",
"daysLabel": "天",
@@ -1114,7 +1115,8 @@
"periodType": "周期套餐",
"dailyPriceLabel": "每天价格",
"currencyPerDay": "₽/天",
"dailyDeductionDesc": "每天从用户余额中扣除"
"dailyDeductionDesc": "每天从用户余额中扣除",
"dailyPriceRequired": "请输入大于0的每日价格"
},
"servers": {
"title": "服务器管理",