feat: add domain rules management feature

- Introduced a new DomainRulesPage component for managing custom and global equivalent domains.
- Updated AppMainRoutes to include a route for domain rules.
- Added API functions to fetch and save domain rules.
- Enhanced localization with new strings for domain rules in multiple languages.
- Updated styles for the new domain rules interface and ensured responsiveness.
- Added types for domain rules in the TypeScript definitions.
This commit is contained in:
shuaiplus
2026-05-06 00:33:09 +08:00
parent 246c73a3d3
commit 0a001bebcc
32 changed files with 2045 additions and 32 deletions
+22 -1
View File
@@ -874,7 +874,28 @@ const en: Record<string, string> = {
"txt_status_inactive": "Inactive",
"txt_language": "Language",
"txt_display_language": "Display language",
"txt_language_saved_locally": "This preference is saved in this browser and used before the app loads next time."
"txt_language_saved_locally": "This preference is saved in this browser and used before the app loads next time.",
"nav_domain_rules": "Domain Rules",
"txt_domain_rules_description": "Mark sites that share one login as equivalent domains. Global rules come from the preset list; custom rules only affect your own matching.",
"txt_submit_pr": "Submit PR",
"txt_custom_equivalent_domains": "Custom equivalent domains",
"txt_global_equivalent_domains": "Global equivalent domains",
"txt_domain_group": "Domain group",
"txt_no_custom_domain_rules": "No custom domain rules",
"txt_no_domain_rules_found": "No domain rules found",
"txt_search_domains": "Search domains",
"txt_domain_rules_saved": "Domain rules saved",
"txt_domain_rules_save_failed": "Saving domain rules failed",
"txt_domain_rules_load_failed": "Loading domain rules failed",
"txt_domain_rules_invalid_response": "Invalid domain rules response",
"txt_domain_rules_refreshed": "Domain rules refreshed",
"txt_saving": "Saving...",
"txt_domain_rule_needs_two_domains": "Each domain rule needs at least two domains.",
"txt_domain_rule_invalid_domains": "Please enter valid domains, such as example.com.",
"txt_add_domain": "Add domain",
"txt_expand": "Expand",
"txt_collapse": "Collapse",
"txt_remove_domain": "Remove domain"
};
export default en;
+22 -1
View File
@@ -874,7 +874,28 @@ const es: Record<string, string> = {
"txt_status_inactive": "Inactivo",
"txt_language": "Idioma",
"txt_display_language": "Idioma de visualización",
"txt_language_saved_locally": "Esta preferencia se guarda en este navegador y se usa antes de que la aplicación cargue la próxima vez."
"txt_language_saved_locally": "Esta preferencia se guarda en este navegador y se usa antes de que la aplicación cargue la próxima vez.",
"nav_domain_rules": "Reglas de dominio",
"txt_domain_rules_description": "Marca los sitios que comparten un inicio de sesión como dominios equivalentes. Las reglas globales vienen de la lista predefinida; las personalizadas solo afectan tus coincidencias.",
"txt_submit_pr": "Enviar PR",
"txt_custom_equivalent_domains": "Dominios equivalentes personalizados",
"txt_global_equivalent_domains": "Dominios equivalentes globales",
"txt_domain_group": "Grupo de dominios",
"txt_no_custom_domain_rules": "No hay reglas de dominio personalizadas",
"txt_no_domain_rules_found": "No se encontraron reglas de dominio",
"txt_search_domains": "Buscar dominios",
"txt_domain_rules_saved": "Reglas de dominio guardadas",
"txt_domain_rules_save_failed": "No se pudieron guardar las reglas de dominio",
"txt_domain_rules_load_failed": "No se pudieron cargar las reglas de dominio",
"txt_domain_rules_invalid_response": "Respuesta de reglas de dominio no válida",
"txt_domain_rules_refreshed": "Reglas de dominio actualizadas",
"txt_saving": "Guardando...",
"txt_domain_rule_needs_two_domains": "Cada regla de dominio necesita al menos dos dominios.",
"txt_domain_rule_invalid_domains": "Introduce dominios válidos, como example.com.",
"txt_add_domain": "Añadir dominio",
"txt_expand": "Expandir",
"txt_collapse": "Contraer",
"txt_remove_domain": "Quitar dominio"
};
export default es;
+22 -1
View File
@@ -874,7 +874,28 @@ const ru: Record<string, string> = {
"txt_status_inactive": "Неактивный",
"txt_language": "Язык",
"txt_display_language": "Язык дисплея",
"txt_language_saved_locally": "Этот выбор сохраняется в текущем браузере и применяется при следующей загрузке приложения."
"txt_language_saved_locally": "Этот выбор сохраняется в текущем браузере и применяется при следующей загрузке приложения.",
"nav_domain_rules": "Правила доменов",
"txt_domain_rules_description": "Отмечайте сайты с одним логином как эквивалентные домены. Глобальные правила берутся из готового списка, а пользовательские влияют только на ваши совпадения.",
"txt_submit_pr": "Отправить PR",
"txt_custom_equivalent_domains": "Пользовательские эквивалентные домены",
"txt_global_equivalent_domains": "Глобальные эквивалентные домены",
"txt_domain_group": "Группа доменов",
"txt_no_custom_domain_rules": "Нет пользовательских правил доменов",
"txt_no_domain_rules_found": "Правила доменов не найдены",
"txt_search_domains": "Поиск доменов",
"txt_domain_rules_saved": "Правила доменов сохранены",
"txt_domain_rules_save_failed": "Не удалось сохранить правила доменов",
"txt_domain_rules_load_failed": "Не удалось загрузить правила доменов",
"txt_domain_rules_invalid_response": "Недопустимый ответ правил доменов",
"txt_domain_rules_refreshed": "Правила доменов обновлены",
"txt_saving": "Сохранение...",
"txt_domain_rule_needs_two_domains": "В каждом правиле доменов должно быть не менее двух доменов.",
"txt_domain_rule_invalid_domains": "Введите корректные домены, например example.com.",
"txt_add_domain": "Добавить домен",
"txt_expand": "Развернуть",
"txt_collapse": "Свернуть",
"txt_remove_domain": "Удалить домен"
};
export default ru;
+22 -1
View File
@@ -874,7 +874,28 @@ const zhCN: Record<string, string> = {
"txt_status_inactive": "未激活",
"txt_language": "语言",
"txt_display_language": "显示语言",
"txt_language_saved_locally": "此偏好会保存在当前浏览器中,下次打开应用前就会生效。"
"txt_language_saved_locally": "此偏好会保存在当前浏览器中,下次打开应用前就会生效。",
"nav_domain_rules": "域名规则",
"txt_domain_rules_description": "多个网站共用同一登录信息时,可将它们设为等效域名;全局规则来自预置列表,自定义规则只影响你自己的匹配。",
"txt_submit_pr": "提交 PR",
"txt_custom_equivalent_domains": "自定义等效域名",
"txt_global_equivalent_domains": "全局等效域名",
"txt_domain_group": "域名组",
"txt_no_custom_domain_rules": "暂无自定义域名规则",
"txt_no_domain_rules_found": "未找到域名规则",
"txt_search_domains": "搜索域名",
"txt_domain_rules_saved": "域名规则已保存",
"txt_domain_rules_save_failed": "保存域名规则失败",
"txt_domain_rules_load_failed": "加载域名规则失败",
"txt_domain_rules_invalid_response": "域名规则响应无效",
"txt_domain_rules_refreshed": "域名规则已刷新",
"txt_saving": "保存中...",
"txt_domain_rule_needs_two_domains": "每条域名规则至少需要两个域名。",
"txt_domain_rule_invalid_domains": "请输入有效域名,例如 example.com。",
"txt_add_domain": "新增域名",
"txt_expand": "展开",
"txt_collapse": "收起",
"txt_remove_domain": "移除域名"
};
export default zhCN;
+22 -1
View File
@@ -874,7 +874,28 @@ const zhTW: Record<string, string> = {
"txt_status_inactive": "未激活",
"txt_language": "語言",
"txt_display_language": "顯示語言",
"txt_language_saved_locally": "此偏好會保存在當前瀏覽器中,下次打開應用前就會生效。"
"txt_language_saved_locally": "此偏好會保存在當前瀏覽器中,下次打開應用前就會生效。",
"nav_domain_rules": "域名規則",
"txt_domain_rules_description": "多個網站共用同一登入資訊時,可將它們設為等效域名;全局規則來自預置列表,自定義規則只影響你自己的匹配。",
"txt_submit_pr": "提交 PR",
"txt_custom_equivalent_domains": "自定義等效域名",
"txt_global_equivalent_domains": "全局等效域名",
"txt_domain_group": "域名組",
"txt_no_custom_domain_rules": "暫無自定義域名規則",
"txt_no_domain_rules_found": "未找到域名規則",
"txt_search_domains": "搜索域名",
"txt_domain_rules_saved": "域名規則已保存",
"txt_domain_rules_save_failed": "保存域名規則失敗",
"txt_domain_rules_load_failed": "加載域名規則失敗",
"txt_domain_rules_invalid_response": "域名規則響應無效",
"txt_domain_rules_refreshed": "域名規則已刷新",
"txt_saving": "保存中...",
"txt_domain_rule_needs_two_domains": "每條域名規則至少需要兩個域名。",
"txt_domain_rule_invalid_domains": "請輸入有效域名,例如 example.com。",
"txt_add_domain": "新增域名",
"txt_expand": "展開",
"txt_collapse": "收起",
"txt_remove_domain": "移除域名"
};
export default zhTW;