feat: replace quota input with amount-first UI and atomic quota adjustment

- Refactor token, redemption, and user quota inputs to prioritize monetary
  amount entry, with raw quota input collapsed by default
- Add atomic quota adjustment modal for users with add/subtract/override modes,
  bypassing batch update queue for immediate DB consistency
- Make user quota fields readonly in edit form; all modifications go through
  the dedicated adjust-quota modal via POST /api/user/manage
- Add DecreaseUserQuota `db` parameter for direct DB writes, matching
  IncreaseUserQuota behavior
- Support negative quota display in amount conversion helpers
- Add i18n keys for all new UI strings across all locales
This commit is contained in:
CaIon
2026-04-09 22:44:53 +08:00
parent 0664bb3f65
commit 040e8c1da8
21 changed files with 493 additions and 149 deletions
+10
View File
@@ -825,6 +825,8 @@
"原密码": "Original Password",
"原生格式": "Native format",
"原生额度": "Raw quota",
"使用原生额度输入": "Use raw quota input",
"收起原生额度输入": "Hide raw quota input",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "Deduplication completed: {{before}} keys before deduplication, {{after}} keys after deduplication",
"参与官方同步": "Participate in official sync",
"参数": "parameter",
@@ -2166,6 +2168,14 @@
"添加键值对": "Add key-value pair",
"添加问答": "Add FAQ",
"添加额度": "Add quota",
"减少": "Subtract",
"覆盖": "Override",
"调整额度": "Adjust Quota",
"调整额度成功": "Quota adjusted successfully",
"当前额度": "Current quota",
"变更": "Change",
"预计结果": "Estimated result",
"正数为增加,负数为减少": "Positive to add, negative to subtract",
"清理不活跃缓存": "Clean up inactive cache",
"清理失败": "Cleanup failed",
"清理方式": "Cleanup Mode",
+10
View File
@@ -821,6 +821,8 @@
"原密码": "Mot de passe original",
"原生格式": "Format natif",
"原生额度": "Quota brut",
"使用原生额度输入": "Saisir le quota brut",
"收起原生额度输入": "Masquer la saisie du quota brut",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "Doublons supprimés : {{before}} clés avant, {{after}} clés après",
"参与官方同步": "Participer à la synchronisation officielle",
"参数": "paramètre",
@@ -2144,6 +2146,14 @@
"添加键值对": "Ajouter une paire clé-valeur",
"添加问答": "Ajouter une FAQ",
"添加额度": "Ajouter un quota",
"减少": "Soustraire",
"覆盖": "Remplacer",
"调整额度": "Ajuster le quota",
"调整额度成功": "Quota ajusté avec succès",
"当前额度": "Quota actuel",
"变更": "Modification",
"预计结果": "Résultat estimé",
"正数为增加,负数为减少": "Positif pour ajouter, négatif pour soustraire",
"清理不活跃缓存": "Nettoyer le cache inactif",
"清理失败": "Échec du nettoyage",
"清理方式": "Mode de nettoyage",
+10
View File
@@ -812,6 +812,8 @@
"原密码": "現在のパスワード",
"原生格式": "ネイティブ形式",
"原生额度": "生クォータ",
"使用原生额度输入": "生クォータで入力",
"收起原生额度输入": "生クォータ入力を非表示",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "重複排除完了:重複排除前 {{before}} 個のAPIキー、重複排除後 {{after}} 個のAPIキー",
"参与官方同步": "公式との同期",
"参数": "パラメータ",
@@ -2127,6 +2129,14 @@
"添加键值对": "キー/値ペア追加",
"添加问答": "FAQ追加",
"添加额度": "残高追加",
"减少": "減少",
"覆盖": "上書き",
"调整额度": "残高調整",
"调整额度成功": "残高の調整に成功しました",
"当前额度": "現在の残高",
"变更": "変更",
"预计结果": "予想結果",
"正数为增加,负数为减少": "正の数で追加、負の数で減少",
"清理不活跃缓存": "非アクティブなキャッシュをクリーンアップ",
"清理失败": "クリーンアップに失敗しました",
"清理方式": "クリーンアップモード",
+10
View File
@@ -827,6 +827,8 @@
"原密码": "Старый пароль",
"原生格式": "Нативный формат",
"原生额度": "Исходный лимит",
"使用原生额度输入": "Ввод в исходных единицах",
"收起原生额度输入": "Скрыть ввод в исходных единицах",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "Дедупликация завершена: до дедупликации {{before}} ключей, после дедупликации {{after}} ключей",
"参与官方同步": "Участвовать в официальной синхронизации",
"参数": "Параметры",
@@ -2156,6 +2158,14 @@
"添加键值对": "Добавить пару ключ-значение",
"添加问答": "Добавить вопрос-ответ",
"添加额度": "Добавить лимит",
"减少": "Уменьшить",
"覆盖": "Заменить",
"调整额度": "Скорректировать квоту",
"调整额度成功": "Квота успешно скорректирована",
"当前额度": "Текущая квота",
"变更": "Изменение",
"预计结果": "Ожидаемый результат",
"正数为增加,负数为减少": "Положительное для увеличения, отрицательное для уменьшения",
"清理不活跃缓存": "Очистить неактивный кэш",
"清理失败": "Ошибка очистки",
"清理方式": "Режим очистки",
+10
View File
@@ -813,6 +813,8 @@
"原密码": "Mật khẩu cũ",
"原生格式": "Định dạng gốc",
"原生额度": "Hạn mức gốc",
"使用原生额度输入": "Nhập hạn mức gốc",
"收起原生额度输入": "Ẩn nhập hạn mức gốc",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "Hoàn tất loại bỏ trùng lặp: {{before}} khóa trước khi loại bỏ, {{after}} khóa sau khi loại bỏ",
"参与官方同步": "Tham gia đồng bộ chính thức",
"参数": "tham số",
@@ -2221,6 +2223,14 @@
"添加键值对": "Thêm cặp khóa-giá trị",
"添加问答": "Thêm hỏi đáp",
"添加额度": "Thêm hạn ngạch",
"减少": "Giảm",
"覆盖": "Ghi đè",
"调整额度": "Điều chỉnh hạn ngạch",
"调整额度成功": "Điều chỉnh hạn ngạch thành công",
"当前额度": "Hạn ngạch hiện tại",
"变更": "Thay đổi",
"预计结果": "Kết quả dự kiến",
"正数为增加,负数为减少": "Số dương để tăng, số âm để giảm",
"清理": "Dọn dẹp",
"清理不活跃缓存": "Xóa cache không hoạt động",
"清理历史日志": "Dọn dẹp nhật ký lịch sử",
+10
View File
@@ -1605,6 +1605,14 @@
"添加键值对": "添加键值对",
"添加问答": "添加问答",
"添加额度": "添加额度",
"减少": "减少",
"覆盖": "覆盖",
"调整额度": "调整额度",
"调整额度成功": "调整额度成功",
"当前额度": "当前额度",
"变更": "变更",
"预计结果": "预计结果",
"正数为增加,负数为减少": "正数为增加,负数为减少",
"清理方式": "清理方式",
"清理日志文件": "清理日志文件",
"清空": "清空",
@@ -2737,6 +2745,8 @@
"请输入总额度": "请输入总额度",
"0 表示不限": "0 表示不限",
"原生额度": "原生额度",
"使用原生额度输入": "使用原生额度输入",
"收起原生额度输入": "收起原生额度输入",
"升级分组": "升级分组",
"不升级": "不升级",
"购买或手动新增订阅会升级到该分组;当套餐失效/过期或手动作废/删除后,将回退到升级前分组。回退不会立即生效,通常会有几分钟延迟。": "购买或手动新增订阅会升级到该分组;当套餐失效/过期或手动作废/删除后,将回退到升级前分组。回退不会立即生效,通常会有几分钟延迟。",
+10
View File
@@ -719,6 +719,8 @@
"原密码": "原密碼",
"原生格式": "原生格式",
"原生额度": "原生額度",
"使用原生额度输入": "使用原生額度輸入",
"收起原生额度输入": "收起原生額度輸入",
"去重完成:去重前 {{before}} 个密钥,去重后 {{after}} 个密钥": "去重完成:去重前 {{before}} 個密鑰,去重後 {{after}} 個密鑰",
"参与官方同步": "參與官方同步",
"参数": "參數",
@@ -1905,6 +1907,14 @@
"添加键值对": "添加鍵值對",
"添加问答": "添加問答",
"添加额度": "添加額度",
"减少": "減少",
"覆盖": "覆蓋",
"调整额度": "調整額度",
"调整额度成功": "調整額度成功",
"当前额度": "當前額度",
"变更": "變更",
"预计结果": "預計結果",
"正数为增加,负数为减少": "正數為增加,負數為減少",
"清理不活跃缓存": "清理不活躍快取",
"清理失败": "清理失敗",
"清理方式": "清理方式",