admin_nyelvi_javítas

This commit is contained in:
Roo
2026-07-25 10:22:03 +00:00
parent 33c4d793db
commit c9118bf52f
29 changed files with 4474 additions and 943 deletions

View File

@@ -2297,197 +2297,106 @@ async function getLocaleMessagesMerged(locale, loaders = []) {
return merged;
}
var loading$1 = "Betöltés...";
var saving$1 = "Mentés...";
var error$1 = "Hiba történt";
var retry$1 = "Újra";
var save$1 = "Mentés";
var saving_data$1 = "Adatok mentése...";
var cancel$1 = "Mégsem";
var discard$1 = "Elvetés";
var delete_confirm$1 = "Biztosan törölni szeretnéd ezt az elemet?";
var delete_btn$1 = "Törlés";
var delete_title$1 = "Törlés Megerősítése";
var deleted$1 = "Sikeresen törölve";
var edit$1 = "Szerkesztés";
var edit_title$1 = "Elem Szerkesztése";
var create$1 = "Létrehozás";
var create_btn$1 = "Létrehozás";
var create_title$1 = "Új Létrehozása";
var create_first$1 = "Hozd létre az első elemet a kezdéshez";
var search$1 = "Keresés";
var search_placeholder$1 = "Keresés...";
var filter$1 = "Szűrés";
var no_results$1 = "Nincs találat";
var no_results_hint$1 = "Próbáld módosítani a keresési vagy szűrési feltételeket";
var no_items$1 = "Nincsenek elemek";
var actions$1 = "Műveletek";
var status$1 = "Státusz";
var active$1 = "Aktív";
var inactive$1 = "Inaktív";
var activate$1 = "Aktiválás";
var deactivate$1 = "Deaktiválás";
var name$1 = "Név";
var name_placeholder$1 = "Add meg a nevet";
var description$1 = "Leírás";
var desc_placeholder$1 = "Add meg a leírást";
var details$1 = "Részletek";
var email$1 = "E-mail";
var id$1 = "Azonosító";
var type$1 = "Típus";
var type_corporate$1 = "Vállalati";
var view$1 = "Megtekintés";
var updated$1 = "Sikeresen frissítve";
var save_error$1 = "Sikertelen mentés";
var invalid_json$1 = "Érvénytelen JSON formátum";
var prev$1 = "Előző";
var next$1 = "Következő";
var none$1 = "Nincs";
var reset$1 = "Visszaállítás";
var confirm$1 = "Megerősítés";
var close$1 = "Bezárás";
var back$1 = "Vissza";
var exit$1 = "Kilépés";
var all$1 = "Minden";
var select_all$1 = "Összes kiválasztása";
var deselect_all$1 = "Összes elrejtése";
var expires$1 = "Lejárat";
var created$1 = "Létrehozva";
var start_date$1 = "Kezdő Dátum";
var end_date$1 = "Befejező Dátum";
var points$1 = "Pontok";
var level$1 = "Szint";
var user$1 = "Felhasználó";
var user_id$1 = "Felhasználó Azonosító";
var services$1 = "Szolgáltatások";
var discoveries$1 = "Felfedezések";
var restriction$1 = "Korlátozás";
var restriction_mild$1 = "Enyhe";
var restriction_moderate$1 = "Mérsékelt";
var restriction_severe$1 = "Súlyos";
var min_xp$1 = "Min XP";
var xp$1 = "XP";
var penalty$1 = "Büntetés";
var feature_flags$1 = "Funkció Kapcsolók";
var permission$1 = "Engedély";
var role$1 = "Szerepkör";
var domain$1 = "Tartomány";
var action$1 = "Művelet";
var value$1 = "Érték";
var key$1 = "Kulcs";
var enabled$1 = "Bekapcsolva";
var disabled$1 = "Kikapcsolva";
var yes$1 = "Igen";
var no$1 = "Nem";
var on$1 = "Be";
var off$1 = "Ki";
var service_finder$1 = "Service Finder";
var admin$1 = "Admin";
var version$1 = "Verzió";
var super_administrator$1 = "Szuper Adminisztrátor";
var administrator$1 = "Adminisztrátor";
var profile_settings$1 = "Profil Beállítások";
var sign_out$1 = "Kijelentkezés";
var unknown_user$1 = "Ismeretlen felhasználó";
var ascending$1 = "Növekvő";
var descending$1 = "Csökkenő";
const locale_common_46json_68c48c8a = {
loading: loading$1,
saving: saving$1,
error: error$1,
retry: retry$1,
save: save$1,
saving_data: saving_data$1,
cancel: cancel$1,
discard: discard$1,
var common$6 = {
loading: "Betöltés...",
saving: "Mentés...",
error: "Hiba történt",
retry: "Újra",
save: "Mentés",
saving_data: "Adatok mentése...",
cancel: "Mégsem",
discard: "Elvetés",
"delete": "Törlés",
delete_confirm: delete_confirm$1,
delete_btn: delete_btn$1,
delete_title: delete_title$1,
deleted: deleted$1,
edit: edit$1,
edit_title: edit_title$1,
create: create$1,
create_btn: create_btn$1,
create_title: create_title$1,
create_first: create_first$1,
search: search$1,
search_placeholder: search_placeholder$1,
filter: filter$1,
no_results: no_results$1,
no_results_hint: no_results_hint$1,
no_items: no_items$1,
actions: actions$1,
status: status$1,
active: active$1,
inactive: inactive$1,
activate: activate$1,
deactivate: deactivate$1,
name: name$1,
name_placeholder: name_placeholder$1,
description: description$1,
desc_placeholder: desc_placeholder$1,
details: details$1,
email: email$1,
id: id$1,
type: type$1,
type_corporate: type_corporate$1,
view: view$1,
updated: updated$1,
save_error: save_error$1,
invalid_json: invalid_json$1,
prev: prev$1,
next: next$1,
none: none$1,
reset: reset$1,
confirm: confirm$1,
close: close$1,
back: back$1,
delete_confirm: "Biztosan törölni szeretnéd ezt az elemet?",
delete_btn: "Törlés",
delete_title: "Törlés Megerősítése",
deleted: "Sikeresen törölve",
edit: "Szerkesztés",
edit_title: "Elem Szerkesztése",
create: "Létrehozás",
create_btn: "Létrehozás",
create_title: "Új Létrehozása",
create_first: "Hozd létre az első elemet a kezdéshez",
search: "Keresés",
search_placeholder: "Keresés...",
filter: "Szűrés",
no_results: "Nincs találat",
no_results_hint: "Próbáld módosítani a keresési vagy szűrési feltételeket",
no_items: "Nincsenek elemek",
actions: "Műveletek",
status: "Státusz",
active: "Aktív",
inactive: "Inaktív",
activate: "Aktiválás",
deactivate: "Deaktiválás",
name: "Név",
name_placeholder: "Add meg a nevet",
description: "Leírás",
desc_placeholder: "Add meg a leírást",
details: "Részletek",
email: "E-mail",
id: "Azonosító",
type: "Típus",
type_corporate: "Vállalati",
view: "Megtekintés",
updated: "Sikeresen frissítve",
save_error: "Sikertelen mentés",
invalid_json: "Érvénytelen JSON formátum",
prev: "Előző",
next: "Következő",
none: "Nincs",
reset: "Visszaállítás",
confirm: "Megerősítés",
close: "Bezárás",
back: "Vissza",
"continue": "Tovább",
exit: exit$1,
all: all$1,
select_all: select_all$1,
deselect_all: deselect_all$1,
expires: expires$1,
created: created$1,
start_date: start_date$1,
end_date: end_date$1,
points: points$1,
level: level$1,
user: user$1,
user_id: user_id$1,
services: services$1,
discoveries: discoveries$1,
restriction: restriction$1,
restriction_mild: restriction_mild$1,
restriction_moderate: restriction_moderate$1,
restriction_severe: restriction_severe$1,
min_xp: min_xp$1,
xp: xp$1,
penalty: penalty$1,
feature_flags: feature_flags$1,
permission: permission$1,
role: role$1,
domain: domain$1,
action: action$1,
value: value$1,
key: key$1,
enabled: enabled$1,
disabled: disabled$1,
yes: yes$1,
no: no$1,
on: on$1,
off: off$1,
service_finder: service_finder$1,
admin: admin$1,
version: version$1,
super_administrator: super_administrator$1,
administrator: administrator$1,
profile_settings: profile_settings$1,
sign_out: sign_out$1,
unknown_user: unknown_user$1,
ascending: ascending$1,
descending: descending$1
exit: "Kilépés",
all: "Minden",
select_all: "Összes kiválasztása",
deselect_all: "Összes elrejtése",
expires: "Lejárat",
created: "Létrehozva",
start_date: "Kezdő Dátum",
end_date: "Befejező Dátum",
points: "Pontok",
level: "Szint",
user: "Felhasználó",
user_id: "Felhasználó Azonosító",
services: "Szolgáltatások",
discoveries: "Felfedezések",
restriction: "Korlátozás",
restriction_mild: "Enyhe",
restriction_moderate: "Mérsékelt",
restriction_severe: "Súlyos",
min_xp: "Min XP",
xp: "XP",
penalty: "Büntetés",
feature_flags: "Funkció Kapcsolók",
permission: "Engedély",
role: "Szerepkör",
domain: "Tartomány",
action: "Művelet",
value: "Érték",
key: "Kulcs",
enabled: "Bekapcsolva",
disabled: "Kikapcsolva",
yes: "Igen",
no: "Nem",
on: "Be",
off: "Ki",
service_finder: "Service Finder",
admin: "Admin",
version: "Verzió",
super_administrator: "Szuper Adminisztrátor",
administrator: "Adminisztrátor",
profile_settings: "Profil Beállítások",
sign_out: "Kijelentkezés",
unknown_user: "Ismeretlen felhasználó",
ascending: "Növekvő",
descending: "Csökkenő"
};
const locale_common_46json_68c48c8a = {
common: common$6
};
var menu$1 = {
@@ -3667,74 +3576,6 @@ var system$1 = {
no_csv_data: "Nincs adat a CSV exportáláshoz.",
csv_downloaded: "CSV letöltés elindítva."
},
packages: {
title: "Csomagok Kezelése",
subtitle: "Előfizetési csomagok és funkciók kezelése — Free, Premium, Enterprise",
loading: "Csomagok betöltése...",
retry: "Újra",
create_new: "Új Csomag",
no_packages: "Még nincsenek csomagok",
no_packages_desc: "Hozd létre az első előfizetési csomagot a kezdéshez.",
create_first: "Első Csomag Létrehozása",
popular: "Népszerű",
fallback_badge: "Visszaesési",
trial_badge: "Próba",
month: "hó",
feature_flags: "Elérhető Funkciók",
edit: "Szerkesztés",
duplicate: "Másolás",
"delete": "Törlés",
set_as_default: "Beállítás alapértelmezettként",
set_as_default_success: "alapértelmezett csomagként beállítva!",
edit_title: "Csomag Szerkesztése",
create_title: "Csomag Létrehozása",
cancel: "Mégse",
save: "Változtatások Mentése",
create: "Létrehozás",
save_success: "Csomag sikeresen frissítve!",
delete_title: "Csomag Törlése",
delete_confirm: "Biztosan törölni szeretnéd a \"{name}\" csomagot?",
delete_btn: "Törlés",
allowances: "Korlátok",
max_vehicles: "Max Jármű",
max_garages: "Max Garázs",
max_users: "Max Dolgozó",
monthly_credits: "Havi Kredit",
tier_level: "Szint",
form_name: "Rendszer Név",
form_name_placeholder: "pl. premium_2024",
form_display_name: "Megjelenítési Név",
form_display_name_placeholder: "pl. Premium Plus",
form_type: "Típus",
type_private: "Magán",
type_corporate: "Vállalati",
form_tier_level: "Szintszám",
form_tier_level_hint: "Magasabb szám = több funkció és magasabb rang",
form_monthly_price: "Havi Díj",
form_yearly_price: "Éves Díj",
form_currency: "Pénznem",
form_subtitle: "Felirat / Leírás",
form_subtitle_placeholder: "pl. Ideális kisvállalkozásoknak",
form_badge: "Jelvény Szöveg",
form_badge_placeholder: "pl. Legnépszerűbb",
form_is_custom: "Egyedi Csomag (nem publikus)",
singleton_rules: "Egyediségi Szabályok",
form_is_default_fallback: "Alapértelmezett Visszaesési Csomag — lejárt előfizetés esetén erre vált",
form_trial_days: "Próba Napok Regisztrációnál",
form_trial_days_hint: "Az új szervezetek ennyi ingyenes napot kapnak. Csak egy csomagnál lehet > 0.",
per_region_pricing: "Régiók szerinti árazás",
smart_calculator: "Okos Árkalkulátor",
calc_net_price: "Nettó ár",
calc_vat_rate: "ÁFA kulcs",
calc_currency: "Pénznem",
calc_net: "Nettó",
calc_vat: "ÁFA",
calc_gross: "Bruttó",
calc_apply: "Alkalmaz a kiválasztott régióra",
add_zone: "Új Zóna Hozzáadása",
add_zone_select: "Válassz országkódot...",
add_zone_already_exists: "Ez a régió már létezik a csomag árazásában!"
},
permissions: {
title: "Jogosultság Kezelés",
subtitle: "Jogosultsági Mátrix — Szerepkör alapú hozzáférés-vezérlés",
@@ -3764,8 +3605,83 @@ var system$1 = {
action: "Művelet"
}
};
var packages$1 = {
title: "Csomagok Kezelése",
subtitle: "Előfizetési csomagok és funkciók kezelése — Free, Premium, Enterprise",
loading: "Csomagok betöltése...",
retry: "Újra",
create_new: "Új Csomag",
no_packages: "Még nincsenek csomagok",
no_packages_desc: "Hozd létre az első előfizetési csomagot a kezdéshez.",
create_first: "Első Csomag Létrehozása",
popular: "Népszerű",
fallback_badge: "Visszaesési",
trial_badge: "Próba",
month: "hó",
feature_flags: "Elérhető Funkciók",
edit: "Szerkesztés",
duplicate: "Másolás",
"delete": "Törlés",
set_as_default: "Beállítás alapértelmezettként",
set_as_default_success: "alapértelmezett csomagként beállítva!",
edit_title: "Csomag Szerkesztése",
create_title: "Csomag Létrehozása",
cancel: "Mégse",
save: "Változtatások Mentése",
create: "Létrehozás",
save_success: "Csomag sikeresen frissítve!",
delete_title: "Csomag Törlése",
delete_confirm: "Biztosan törölni szeretnéd a \"{name}\" csomagot?",
delete_btn: "Törlés",
allowances: "Korlátok",
max_vehicles: "Max Jármű",
max_garages: "Max Garázs",
max_users: "Max Dolgozó",
monthly_credits: "Havi Kredit",
tier_level: "Szint",
form_name: "Rendszer Név",
form_name_placeholder: "pl. premium_2024",
form_display_name: "Megjelenítési Név",
form_display_name_placeholder: "pl. Premium Plus",
form_type: "Típus",
type_private: "Magán",
type_corporate: "Vállalati",
form_tier_level: "Szintszám",
form_tier_level_hint: "Magasabb szám = több funkció és magasabb rang",
form_monthly_price: "Havi Díj",
form_yearly_price: "Éves Díj",
form_currency: "Pénznem",
form_subtitle: "Felirat / Leírás",
form_subtitle_placeholder: "pl. Ideális kisvállalkozásoknak",
form_badge: "Jelvény Szöveg",
form_badge_placeholder: "pl. Legnépszerűbb",
form_is_custom: "Egyedi Csomag (nem publikus)",
singleton_rules: "Egyediségi Szabályok",
form_is_default_fallback: "Alapértelmezett Visszaesési Csomag — lejárt előfizetés esetén erre vált",
form_trial_days: "Próba Napok Regisztrációnál",
form_trial_days_hint: "Az új szervezetek ennyi ingyenes napot kapnak. Csak egy csomagnál lehet > 0.",
per_region_pricing: "Régiók szerinti árazás",
smart_calculator: "Okos Árkalkulátor",
calc_net_price: "Nettó ár",
calc_vat_rate: "ÁFA kulcs",
calc_currency: "Pénznem",
calc_net: "Nettó",
calc_vat: "ÁFA",
calc_gross: "Bruttó",
calc_apply: "Alkalmaz a kiválasztott régióra",
add_zone: "Új Zóna Hozzáadása",
add_zone_select: "Válassz országkódot...",
add_zone_already_exists: "Ez a régió már létezik a csomag árazásában!",
feature_capabilities: "Funkció Képességek (JSON)",
feature_capabilities_hint: "JSON formátumban add meg a funkció képességeket. Pl.: ai_analysis: true, priority_support: false",
singleton_rules_title: "Egyediségi Szabályok",
form_trial_days_label: "Próba Napok",
per_region_pricing_title: "Régiók szerinti árazás",
smart_calculator_title: "Okos Árkalkulátor"
};
const locale_system_46json_21da1de8 = {
system: system$1
system: system$1,
packages: packages$1
};
var commission_rules$1 = {
@@ -3800,7 +3716,16 @@ var commission_rules$1 = {
upline_commission_percent_helper: "A felső szintű ajánlónak (Gen2 — az ajánló ajánlója) járó jutalék százaléka minden vásárlás után.",
renewal_commission_percent: "Megújítási Jutalék %",
renewal_commission_percent_helper: "A havi/éves előfizetés megújításakor járó jutalék százaléka.",
commission_max_amount: "Max Összeg",
commission_max_amount: "Max Összeg (általános)",
gen1_max_amount: "Gen1 Max Összeg",
gen1_max_amount_helper: "Gen1 (közvetlen ajánló) maximális jutalék összege. NULL/0 = korlátlan, fallback: Max Összeg.",
gen2_max_amount: "Gen2 Max Összeg",
gen2_max_amount_helper: "Gen2 (felső szintű ajánló) maximális jutalék összege. NULL/0 = korlátlan, fallback: Max Összeg.",
gen1_title: "Közvetlen Ajánló (Gen1)",
gen2_title: "Felsővonal (Gen2)",
legacy_fallback: "örökölt mező",
gen2_renewal_percent: "Gen2 Megújítási Jutalék %",
gen2_renewal_percent_helper: "Gen2-nek járó megújítási jutalék százaléka (pl. 1.00 = 1%). Fallback: Felső szintű Jutalék %.",
deactivate_confirm: "Biztosan deaktiválod a következőt: \"{name}\"?",
showing: "Mutatva",
xp_reward_helper: "Egyéni meghívások után járó fix jutalom (pl. sikeres regisztráció).",
@@ -3843,203 +3768,116 @@ var commission_rules$1 = {
tier_vip: "VIP",
tier_platinum: "Platinum",
tier_enterprise: "Enterprise",
tier_contracted: "Szerződött Üzletkötő"
tier_contracted: "Szerződött Üzletkötő",
conflict_title: "Szabályütközés észlelve",
conflict_message: "Már létezik egy aktív szabály erre a célcsoportra és régióra. Szeretnéd inaktiválni a régit, és életbe léptetni az újat?",
conflict_confirm: "Felülírás jóváhagyása",
conflict_cancel: "Mégsem"
};
const locale_commission_46json_2229a18b = {
commission_rules: commission_rules$1
};
var loading = "Loading...";
var saving = "Saving...";
var error = "An error occurred";
var retry = "Retry";
var save = "Save";
var saving_data = "Saving data...";
var cancel = "Cancel";
var discard = "Discard";
var delete_confirm = "Are you sure you want to delete this item?";
var delete_btn = "Delete";
var delete_title = "Confirm Deletion";
var deleted = "Deleted successfully";
var edit = "Edit";
var edit_title = "Edit Item";
var create = "Create";
var create_btn = "Create";
var create_title = "Create New";
var create_first = "Create your first item to get started";
var search = "Search";
var search_placeholder = "Search...";
var filter = "Filter";
var no_results = "No results found";
var no_results_hint = "Try adjusting your search or filter criteria";
var no_items = "No items available";
var actions = "Actions";
var status = "Status";
var active = "Active";
var inactive = "Inactive";
var activate = "Activate";
var deactivate = "Deactivate";
var name = "Name";
var name_placeholder = "Enter name";
var description = "Description";
var desc_placeholder = "Enter description";
var details = "Details";
var email = "Email";
var id = "ID";
var type = "Type";
var type_corporate = "Corporate";
var view = "View";
var updated = "Updated successfully";
var save_error = "Failed to save";
var invalid_json = "Invalid JSON format";
var prev = "Previous";
var next = "Next";
var none = "None";
var reset = "Reset";
var confirm = "Confirm";
var close = "Close";
var back = "Back";
var exit = "Exit";
var all = "All";
var select_all = "Select All";
var deselect_all = "Deselect All";
var expires = "Expires";
var created = "Created";
var start_date = "Start Date";
var end_date = "End Date";
var points = "Points";
var level = "Level";
var user = "User";
var user_id = "User ID";
var services = "Services";
var discoveries = "Discoveries";
var restriction = "Restriction";
var restriction_mild = "Mild";
var restriction_moderate = "Moderate";
var restriction_severe = "Severe";
var min_xp = "Min XP";
var xp = "XP";
var penalty = "Penalty";
var feature_flags = "Feature Flags";
var permission = "Permission";
var role = "Role";
var domain = "Domain";
var action = "Action";
var value = "Value";
var key = "Key";
var enabled = "Enabled";
var disabled = "Disabled";
var yes = "Yes";
var no = "No";
var on = "On";
var off = "Off";
var service_finder = "Service Finder";
var admin = "Admin";
var version = "Version";
var super_administrator = "Super Administrator";
var administrator = "Administrator";
var profile_settings = "Profile Settings";
var sign_out = "Sign Out";
var unknown_user = "Unknown user";
var ascending = "Ascending";
var descending = "Descending";
const locale_common_46json_364cfaa7 = {
loading: loading,
saving: saving,
error: error,
retry: retry,
save: save,
saving_data: saving_data,
cancel: cancel,
discard: discard,
var common$5 = {
loading: "Loading...",
saving: "Saving...",
error: "An error occurred",
retry: "Retry",
save: "Save",
saving_data: "Saving data...",
cancel: "Cancel",
discard: "Discard",
"delete": "Delete",
delete_confirm: delete_confirm,
delete_btn: delete_btn,
delete_title: delete_title,
deleted: deleted,
edit: edit,
edit_title: edit_title,
create: create,
create_btn: create_btn,
create_title: create_title,
create_first: create_first,
search: search,
search_placeholder: search_placeholder,
filter: filter,
no_results: no_results,
no_results_hint: no_results_hint,
no_items: no_items,
actions: actions,
status: status,
active: active,
inactive: inactive,
activate: activate,
deactivate: deactivate,
name: name,
name_placeholder: name_placeholder,
description: description,
desc_placeholder: desc_placeholder,
details: details,
email: email,
id: id,
type: type,
type_corporate: type_corporate,
view: view,
updated: updated,
save_error: save_error,
invalid_json: invalid_json,
prev: prev,
next: next,
none: none,
reset: reset,
confirm: confirm,
close: close,
back: back,
delete_confirm: "Are you sure you want to delete this item?",
delete_btn: "Delete",
delete_title: "Confirm Deletion",
deleted: "Deleted successfully",
edit: "Edit",
edit_title: "Edit Item",
create: "Create",
create_btn: "Create",
create_title: "Create New",
create_first: "Create your first item to get started",
search: "Search",
search_placeholder: "Search...",
filter: "Filter",
no_results: "No results found",
no_results_hint: "Try adjusting your search or filter criteria",
no_items: "No items available",
actions: "Actions",
status: "Status",
active: "Active",
inactive: "Inactive",
activate: "Activate",
deactivate: "Deactivate",
name: "Name",
name_placeholder: "Enter name",
description: "Description",
desc_placeholder: "Enter description",
details: "Details",
email: "Email",
id: "ID",
type: "Type",
type_corporate: "Corporate",
view: "View",
updated: "Updated successfully",
save_error: "Failed to save",
invalid_json: "Invalid JSON format",
prev: "Previous",
next: "Next",
none: "None",
reset: "Reset",
confirm: "Confirm",
close: "Close",
back: "Back",
"continue": "Continue",
exit: exit,
all: all,
select_all: select_all,
deselect_all: deselect_all,
expires: expires,
created: created,
start_date: start_date,
end_date: end_date,
points: points,
level: level,
user: user,
user_id: user_id,
services: services,
discoveries: discoveries,
restriction: restriction,
restriction_mild: restriction_mild,
restriction_moderate: restriction_moderate,
restriction_severe: restriction_severe,
min_xp: min_xp,
xp: xp,
penalty: penalty,
feature_flags: feature_flags,
permission: permission,
role: role,
domain: domain,
action: action,
value: value,
key: key,
enabled: enabled,
disabled: disabled,
yes: yes,
no: no,
on: on,
off: off,
service_finder: service_finder,
admin: admin,
version: version,
super_administrator: super_administrator,
administrator: administrator,
profile_settings: profile_settings,
sign_out: sign_out,
unknown_user: unknown_user,
ascending: ascending,
descending: descending
exit: "Exit",
all: "All",
select_all: "Select All",
deselect_all: "Deselect All",
expires: "Expires",
created: "Created",
start_date: "Start Date",
end_date: "End Date",
points: "Points",
level: "Level",
user: "User",
user_id: "User ID",
services: "Services",
discoveries: "Discoveries",
restriction: "Restriction",
restriction_mild: "Mild",
restriction_moderate: "Moderate",
restriction_severe: "Severe",
min_xp: "Min XP",
xp: "XP",
penalty: "Penalty",
feature_flags: "Feature Flags",
permission: "Permission",
role: "Role",
domain: "Domain",
action: "Action",
value: "Value",
key: "Key",
enabled: "Enabled",
disabled: "Disabled",
yes: "Yes",
no: "No",
on: "On",
off: "Off",
service_finder: "Service Finder",
admin: "Admin",
version: "Version",
super_administrator: "Super Administrator",
administrator: "Administrator",
profile_settings: "Profile Settings",
sign_out: "Sign Out",
unknown_user: "Unknown user",
ascending: "Ascending",
descending: "Descending"
};
const locale_common_46json_364cfaa7 = {
common: common$5
};
var menu = {
@@ -5219,74 +5057,6 @@ var system = {
no_csv_data: "No data for CSV export.",
csv_downloaded: "CSV download started."
},
packages: {
title: "Package Management",
subtitle: "Manage subscription packages and features — Free, Premium, Enterprise",
loading: "Loading packages...",
retry: "Retry",
create_new: "New Package",
no_packages: "No packages yet",
no_packages_desc: "Create your first subscription package to get started.",
create_first: "Create First Package",
popular: "Popular",
fallback_badge: "Fallback",
trial_badge: "Trial",
month: "mo",
feature_flags: "Available Features",
edit: "Edit",
duplicate: "Duplicate",
"delete": "Delete",
set_as_default: "Set as Default",
set_as_default_success: "set as default package!",
edit_title: "Edit Package",
create_title: "Create Package",
cancel: "Cancel",
save: "Save Changes",
create: "Create",
save_success: "Package updated successfully!",
delete_title: "Delete Package",
delete_confirm: "Are you sure you want to delete \"{name}\"?",
delete_btn: "Delete",
allowances: "Allowances",
max_vehicles: "Max Vehicles",
max_garages: "Max Garages",
max_users: "Max Users",
monthly_credits: "Monthly Credits",
tier_level: "Level",
form_name: "System Name",
form_name_placeholder: "e.g. premium_2024",
form_display_name: "Display Name",
form_display_name_placeholder: "e.g. Premium Plus",
form_type: "Type",
type_private: "Private",
type_corporate: "Corporate",
form_tier_level: "Tier Level",
form_tier_level_hint: "Higher number = more features and higher rank",
form_monthly_price: "Monthly Price",
form_yearly_price: "Yearly Price",
form_currency: "Currency",
form_subtitle: "Subtitle / Description",
form_subtitle_placeholder: "e.g. Ideal for small businesses",
form_badge: "Badge Text",
form_badge_placeholder: "e.g. Most Popular",
form_is_custom: "Custom Package (not public)",
singleton_rules: "Singleton Rules",
form_is_default_fallback: "Default Fallback Package — expired subscriptions fall back to this",
form_trial_days: "Trial Days on Signup",
form_trial_days_hint: "New organizations get this many free days. Only one package can have > 0.",
per_region_pricing: "Per-Region Pricing",
smart_calculator: "Smart Price Calculator",
calc_net_price: "Net Price",
calc_vat_rate: "VAT Rate",
calc_currency: "Currency",
calc_net: "Net",
calc_vat: "VAT",
calc_gross: "Gross",
calc_apply: "Apply to selected region",
add_zone: "Add New Zone",
add_zone_select: "Select country code...",
add_zone_already_exists: "This region already exists in the package pricing!"
},
permissions: {
title: "Permissions Management",
subtitle: "Permission Matrix — Role-based access control",
@@ -5316,8 +5086,83 @@ var system = {
action: "Action"
}
};
var packages = {
title: "Package Management",
subtitle: "Manage subscription packages and features — Free, Premium, Enterprise",
loading: "Loading packages...",
retry: "Retry",
create_new: "New Package",
no_packages: "No packages yet",
no_packages_desc: "Create your first subscription package to get started.",
create_first: "Create First Package",
popular: "Popular",
fallback_badge: "Fallback",
trial_badge: "Trial",
month: "mo",
feature_flags: "Available Features",
edit: "Edit",
duplicate: "Duplicate",
"delete": "Delete",
set_as_default: "Set as Default",
set_as_default_success: "set as default package!",
edit_title: "Edit Package",
create_title: "Create Package",
cancel: "Cancel",
save: "Save Changes",
create: "Create",
save_success: "Package updated successfully!",
delete_title: "Delete Package",
delete_confirm: "Are you sure you want to delete \"{name}\"?",
delete_btn: "Delete",
allowances: "Allowances",
max_vehicles: "Max Vehicles",
max_garages: "Max Garages",
max_users: "Max Users",
monthly_credits: "Monthly Credits",
tier_level: "Level",
form_name: "System Name",
form_name_placeholder: "e.g. premium_2024",
form_display_name: "Display Name",
form_display_name_placeholder: "e.g. Premium Plus",
form_type: "Type",
type_private: "Private",
type_corporate: "Corporate",
form_tier_level: "Tier Level",
form_tier_level_hint: "Higher number = more features and higher rank",
form_monthly_price: "Monthly Price",
form_yearly_price: "Yearly Price",
form_currency: "Currency",
form_subtitle: "Subtitle / Description",
form_subtitle_placeholder: "e.g. Ideal for small businesses",
form_badge: "Badge Text",
form_badge_placeholder: "e.g. Most Popular",
form_is_custom: "Custom Package (not public)",
singleton_rules: "Singleton Rules",
form_is_default_fallback: "Default Fallback Package — expired subscriptions fall back to this",
form_trial_days: "Trial Days on Signup",
form_trial_days_hint: "New organizations get this many free days. Only one package can have > 0.",
per_region_pricing: "Per-Region Pricing",
smart_calculator: "Smart Price Calculator",
calc_net_price: "Net Price",
calc_vat_rate: "VAT Rate",
calc_currency: "Currency",
calc_net: "Net",
calc_vat: "VAT",
calc_gross: "Gross",
calc_apply: "Apply to selected region",
add_zone: "Add New Zone",
add_zone_select: "Select country code...",
add_zone_already_exists: "This region already exists in the package pricing!",
feature_capabilities: "Feature Capabilities (JSON)",
feature_capabilities_hint: "Enter feature capabilities in JSON format. E.g.: ai_analysis: true, priority_support: false",
singleton_rules_title: "Singleton Rules",
form_trial_days_label: "Trial Days",
per_region_pricing_title: "Per-Region Pricing",
smart_calculator_title: "Smart Price Calculator"
};
const locale_system_46json_cff5800c = {
system: system
system: system,
packages: packages
};
var commission_rules = {
@@ -5352,7 +5197,16 @@ var commission_rules = {
upline_commission_percent_helper: "Percentage paid to the upline (Gen2 — the referrer's referrer) on each purchase.",
renewal_commission_percent: "Renewal Commission %",
renewal_commission_percent_helper: "Percentage paid on monthly/yearly subscription renewals.",
commission_max_amount: "Max Amount",
commission_max_amount: "Max Amount (global)",
gen1_max_amount: "Gen1 Max Amount",
gen1_max_amount_helper: "Gen1 (direct referrer) maximum commission amount. NULL/0 = unlimited, fallback: Max Amount.",
gen2_max_amount: "Gen2 Max Amount",
gen2_max_amount_helper: "Gen2 (upline) maximum commission amount. NULL/0 = unlimited, fallback: Max Amount.",
gen1_title: "Direct Referrer (Gen1)",
gen2_title: "Upline (Gen2)",
legacy_fallback: "legacy fallback",
gen2_renewal_percent: "Gen2 Renewal %",
gen2_renewal_percent_helper: "Gen2 renewal commission percentage (e.g. 1.00 = 1%). Fallback: Upline Commission %.",
deactivate_confirm: "Are you sure you want to deactivate \"{name}\"?",
showing: "Showing",
xp_reward_helper: "Fixed reward given to the user for successful individual referrals (e.g., successful registration via invite code).",
@@ -5395,7 +5249,11 @@ var commission_rules = {
tier_vip: "VIP",
tier_platinum: "Platinum",
tier_enterprise: "Enterprise",
tier_contracted: "Contracted Agent"
tier_contracted: "Contracted Agent",
conflict_title: "Rule Conflict Detected",
conflict_message: "An active rule already exists for this target group and region. Do you want to deactivate the old rule and activate the new one?",
conflict_confirm: "Confirm Override",
conflict_cancel: "Cancel"
};
const locale_commission_46json_ea60861a = {
commission_rules: commission_rules
@@ -6657,16 +6515,16 @@ _wH6JrtIxmaSoA8lCPWFnE9z4lQeXW6H5z3l5aymEQw
const assets = {
"/index.mjs": {
"type": "text/javascript; charset=utf-8",
"etag": "\"3e482-bMW8N/gd5+rJ6Fet5d7ZvFyoG5I\"",
"mtime": "2026-07-24T01:36:18.316Z",
"size": 255106,
"etag": "\"3db35-gliVpBtK5107QX2IT8SR1tGeiAs\"",
"mtime": "2026-07-24T12:30:16.660Z",
"size": 252725,
"path": "index.mjs"
},
"/index.mjs.map": {
"type": "application/json",
"etag": "\"84cfb-v0HL6pG50A9Shz5WFud0S34p4No\"",
"mtime": "2026-07-24T01:36:18.317Z",
"size": 543995,
"etag": "\"84c6f-gMC45UcEAiPwtJNbdMr3pGk5iUE\"",
"mtime": "2026-07-24T12:30:16.660Z",
"size": 543855,
"path": "index.mjs.map"
}
};

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
{
"date": "2026-07-24T01:36:24.822Z",
"date": "2026-07-24T12:30:18.036Z",
"preset": "nitro-dev",
"framework": {
"name": "nuxt",
@@ -11,7 +11,7 @@
"dev": {
"pid": 19,
"workerAddress": {
"socketPath": "\u0000nitro-worker-19-14-14-1789.sock"
"socketPath": "\u0000nitro-worker-19-30-30-3992.sock"
}
}
}

View File

@@ -1,4 +1,4 @@
// generated by the @nuxtjs/tailwindcss <https://github.com/nuxt-modules/tailwindcss> module at 7/24/2026, 1:36:24 AM
// generated by the @nuxtjs/tailwindcss <https://github.com/nuxt-modules/tailwindcss> module at 7/24/2026, 12:30:17 PM
import "@nuxtjs/tailwindcss/config-ctx"
import configMerger from "@nuxtjs/tailwindcss/merger";

View File

@@ -31,7 +31,16 @@
"upline_commission_percent_helper": "Percentage paid to the upline (Gen2 — the referrer's referrer) on each purchase.",
"renewal_commission_percent": "Renewal Commission %",
"renewal_commission_percent_helper": "Percentage paid on monthly/yearly subscription renewals.",
"commission_max_amount": "Max Amount",
"commission_max_amount": "Max Amount (global)",
"gen1_max_amount": "Gen1 Max Amount",
"gen1_max_amount_helper": "Gen1 (direct referrer) maximum commission amount. NULL/0 = unlimited, fallback: Max Amount.",
"gen2_max_amount": "Gen2 Max Amount",
"gen2_max_amount_helper": "Gen2 (upline) maximum commission amount. NULL/0 = unlimited, fallback: Max Amount.",
"gen1_title": "Direct Referrer (Gen1)",
"gen2_title": "Upline (Gen2)",
"legacy_fallback": "legacy fallback",
"gen2_renewal_percent": "Gen2 Renewal %",
"gen2_renewal_percent_helper": "Gen2 renewal commission percentage (e.g. 1.00 = 1%). Fallback: Upline Commission %.",
"deactivate_confirm": "Are you sure you want to deactivate \"{name}\"?",
"showing": "Showing",
"xp_reward_helper": "Fixed reward given to the user for successful individual referrals (e.g., successful registration via invite code).",
@@ -74,6 +83,10 @@
"tier_vip": "VIP",
"tier_platinum": "Platinum",
"tier_enterprise": "Enterprise",
"tier_contracted": "Contracted Agent"
"tier_contracted": "Contracted Agent",
"conflict_title": "Rule Conflict Detected",
"conflict_message": "An active rule already exists for this target group and region. Do you want to deactivate the old rule and activate the new one?",
"conflict_confirm": "Confirm Override",
"conflict_cancel": "Cancel"
}
}

View File

@@ -1,98 +1,100 @@
{
"loading": "Loading...",
"saving": "Saving...",
"error": "An error occurred",
"retry": "Retry",
"save": "Save",
"saving_data": "Saving data...",
"cancel": "Cancel",
"discard": "Discard",
"delete": "Delete",
"delete_confirm": "Are you sure you want to delete this item?",
"delete_btn": "Delete",
"delete_title": "Confirm Deletion",
"deleted": "Deleted successfully",
"edit": "Edit",
"edit_title": "Edit Item",
"create": "Create",
"create_btn": "Create",
"create_title": "Create New",
"create_first": "Create your first item to get started",
"search": "Search",
"search_placeholder": "Search...",
"filter": "Filter",
"no_results": "No results found",
"no_results_hint": "Try adjusting your search or filter criteria",
"no_items": "No items available",
"actions": "Actions",
"status": "Status",
"active": "Active",
"inactive": "Inactive",
"activate": "Activate",
"deactivate": "Deactivate",
"name": "Name",
"name_placeholder": "Enter name",
"description": "Description",
"desc_placeholder": "Enter description",
"details": "Details",
"email": "Email",
"id": "ID",
"type": "Type",
"type_corporate": "Corporate",
"view": "View",
"updated": "Updated successfully",
"save_error": "Failed to save",
"invalid_json": "Invalid JSON format",
"prev": "Previous",
"next": "Next",
"none": "None",
"reset": "Reset",
"confirm": "Confirm",
"close": "Close",
"back": "Back",
"continue": "Continue",
"exit": "Exit",
"all": "All",
"select_all": "Select All",
"deselect_all": "Deselect All",
"expires": "Expires",
"created": "Created",
"start_date": "Start Date",
"end_date": "End Date",
"points": "Points",
"level": "Level",
"user": "User",
"user_id": "User ID",
"services": "Services",
"discoveries": "Discoveries",
"restriction": "Restriction",
"restriction_mild": "Mild",
"restriction_moderate": "Moderate",
"restriction_severe": "Severe",
"min_xp": "Min XP",
"xp": "XP",
"penalty": "Penalty",
"feature_flags": "Feature Flags",
"permission": "Permission",
"role": "Role",
"domain": "Domain",
"action": "Action",
"value": "Value",
"key": "Key",
"enabled": "Enabled",
"disabled": "Disabled",
"yes": "Yes",
"no": "No",
"on": "On",
"off": "Off",
"service_finder": "Service Finder",
"admin": "Admin",
"version": "Version",
"super_administrator": "Super Administrator",
"administrator": "Administrator",
"profile_settings": "Profile Settings",
"sign_out": "Sign Out",
"unknown_user": "Unknown user",
"ascending": "Ascending",
"descending": "Descending"
"common": {
"loading": "Loading...",
"saving": "Saving...",
"error": "An error occurred",
"retry": "Retry",
"save": "Save",
"saving_data": "Saving data...",
"cancel": "Cancel",
"discard": "Discard",
"delete": "Delete",
"delete_confirm": "Are you sure you want to delete this item?",
"delete_btn": "Delete",
"delete_title": "Confirm Deletion",
"deleted": "Deleted successfully",
"edit": "Edit",
"edit_title": "Edit Item",
"create": "Create",
"create_btn": "Create",
"create_title": "Create New",
"create_first": "Create your first item to get started",
"search": "Search",
"search_placeholder": "Search...",
"filter": "Filter",
"no_results": "No results found",
"no_results_hint": "Try adjusting your search or filter criteria",
"no_items": "No items available",
"actions": "Actions",
"status": "Status",
"active": "Active",
"inactive": "Inactive",
"activate": "Activate",
"deactivate": "Deactivate",
"name": "Name",
"name_placeholder": "Enter name",
"description": "Description",
"desc_placeholder": "Enter description",
"details": "Details",
"email": "Email",
"id": "ID",
"type": "Type",
"type_corporate": "Corporate",
"view": "View",
"updated": "Updated successfully",
"save_error": "Failed to save",
"invalid_json": "Invalid JSON format",
"prev": "Previous",
"next": "Next",
"none": "None",
"reset": "Reset",
"confirm": "Confirm",
"close": "Close",
"back": "Back",
"continue": "Continue",
"exit": "Exit",
"all": "All",
"select_all": "Select All",
"deselect_all": "Deselect All",
"expires": "Expires",
"created": "Created",
"start_date": "Start Date",
"end_date": "End Date",
"points": "Points",
"level": "Level",
"user": "User",
"user_id": "User ID",
"services": "Services",
"discoveries": "Discoveries",
"restriction": "Restriction",
"restriction_mild": "Mild",
"restriction_moderate": "Moderate",
"restriction_severe": "Severe",
"min_xp": "Min XP",
"xp": "XP",
"penalty": "Penalty",
"feature_flags": "Feature Flags",
"permission": "Permission",
"role": "Role",
"domain": "Domain",
"action": "Action",
"value": "Value",
"key": "Key",
"enabled": "Enabled",
"disabled": "Disabled",
"yes": "Yes",
"no": "No",
"on": "On",
"off": "Off",
"service_finder": "Service Finder",
"admin": "Admin",
"version": "Version",
"super_administrator": "Super Administrator",
"administrator": "Administrator",
"profile_settings": "Profile Settings",
"sign_out": "Sign Out",
"unknown_user": "Unknown user",
"ascending": "Ascending",
"descending": "Descending"
}
}

View File

@@ -81,74 +81,6 @@
"no_csv_data": "No data for CSV export.",
"csv_downloaded": "CSV download started."
},
"packages": {
"title": "Package Management",
"subtitle": "Manage subscription packages and features — Free, Premium, Enterprise",
"loading": "Loading packages...",
"retry": "Retry",
"create_new": "New Package",
"no_packages": "No packages yet",
"no_packages_desc": "Create your first subscription package to get started.",
"create_first": "Create First Package",
"popular": "Popular",
"fallback_badge": "Fallback",
"trial_badge": "Trial",
"month": "mo",
"feature_flags": "Available Features",
"edit": "Edit",
"duplicate": "Duplicate",
"delete": "Delete",
"set_as_default": "Set as Default",
"set_as_default_success": "set as default package!",
"edit_title": "Edit Package",
"create_title": "Create Package",
"cancel": "Cancel",
"save": "Save Changes",
"create": "Create",
"save_success": "Package updated successfully!",
"delete_title": "Delete Package",
"delete_confirm": "Are you sure you want to delete \"{name}\"?",
"delete_btn": "Delete",
"allowances": "Allowances",
"max_vehicles": "Max Vehicles",
"max_garages": "Max Garages",
"max_users": "Max Users",
"monthly_credits": "Monthly Credits",
"tier_level": "Level",
"form_name": "System Name",
"form_name_placeholder": "e.g. premium_2024",
"form_display_name": "Display Name",
"form_display_name_placeholder": "e.g. Premium Plus",
"form_type": "Type",
"type_private": "Private",
"type_corporate": "Corporate",
"form_tier_level": "Tier Level",
"form_tier_level_hint": "Higher number = more features and higher rank",
"form_monthly_price": "Monthly Price",
"form_yearly_price": "Yearly Price",
"form_currency": "Currency",
"form_subtitle": "Subtitle / Description",
"form_subtitle_placeholder": "e.g. Ideal for small businesses",
"form_badge": "Badge Text",
"form_badge_placeholder": "e.g. Most Popular",
"form_is_custom": "Custom Package (not public)",
"singleton_rules": "Singleton Rules",
"form_is_default_fallback": "Default Fallback Package — expired subscriptions fall back to this",
"form_trial_days": "Trial Days on Signup",
"form_trial_days_hint": "New organizations get this many free days. Only one package can have > 0.",
"per_region_pricing": "Per-Region Pricing",
"smart_calculator": "Smart Price Calculator",
"calc_net_price": "Net Price",
"calc_vat_rate": "VAT Rate",
"calc_currency": "Currency",
"calc_net": "Net",
"calc_vat": "VAT",
"calc_gross": "Gross",
"calc_apply": "Apply to selected region",
"add_zone": "Add New Zone",
"add_zone_select": "Select country code...",
"add_zone_already_exists": "This region already exists in the package pricing!"
},
"permissions": {
"title": "Permissions Management",
"subtitle": "Permission Matrix — Role-based access control",
@@ -177,5 +109,79 @@
"rbac_desc": "Role-based access control — which roles can perform which admin actions.",
"action": "Action"
}
},
"packages": {
"title": "Package Management",
"subtitle": "Manage subscription packages and features — Free, Premium, Enterprise",
"loading": "Loading packages...",
"retry": "Retry",
"create_new": "New Package",
"no_packages": "No packages yet",
"no_packages_desc": "Create your first subscription package to get started.",
"create_first": "Create First Package",
"popular": "Popular",
"fallback_badge": "Fallback",
"trial_badge": "Trial",
"month": "mo",
"feature_flags": "Available Features",
"edit": "Edit",
"duplicate": "Duplicate",
"delete": "Delete",
"set_as_default": "Set as Default",
"set_as_default_success": "set as default package!",
"edit_title": "Edit Package",
"create_title": "Create Package",
"cancel": "Cancel",
"save": "Save Changes",
"create": "Create",
"save_success": "Package updated successfully!",
"delete_title": "Delete Package",
"delete_confirm": "Are you sure you want to delete \"{name}\"?",
"delete_btn": "Delete",
"allowances": "Allowances",
"max_vehicles": "Max Vehicles",
"max_garages": "Max Garages",
"max_users": "Max Users",
"monthly_credits": "Monthly Credits",
"tier_level": "Level",
"form_name": "System Name",
"form_name_placeholder": "e.g. premium_2024",
"form_display_name": "Display Name",
"form_display_name_placeholder": "e.g. Premium Plus",
"form_type": "Type",
"type_private": "Private",
"type_corporate": "Corporate",
"form_tier_level": "Tier Level",
"form_tier_level_hint": "Higher number = more features and higher rank",
"form_monthly_price": "Monthly Price",
"form_yearly_price": "Yearly Price",
"form_currency": "Currency",
"form_subtitle": "Subtitle / Description",
"form_subtitle_placeholder": "e.g. Ideal for small businesses",
"form_badge": "Badge Text",
"form_badge_placeholder": "e.g. Most Popular",
"form_is_custom": "Custom Package (not public)",
"singleton_rules": "Singleton Rules",
"form_is_default_fallback": "Default Fallback Package — expired subscriptions fall back to this",
"form_trial_days": "Trial Days on Signup",
"form_trial_days_hint": "New organizations get this many free days. Only one package can have > 0.",
"per_region_pricing": "Per-Region Pricing",
"smart_calculator": "Smart Price Calculator",
"calc_net_price": "Net Price",
"calc_vat_rate": "VAT Rate",
"calc_currency": "Currency",
"calc_net": "Net",
"calc_vat": "VAT",
"calc_gross": "Gross",
"calc_apply": "Apply to selected region",
"add_zone": "Add New Zone",
"add_zone_select": "Select country code...",
"add_zone_already_exists": "This region already exists in the package pricing!",
"feature_capabilities": "Feature Capabilities (JSON)",
"feature_capabilities_hint": "Enter feature capabilities in JSON format. E.g.: ai_analysis: true, priority_support: false",
"singleton_rules_title": "Singleton Rules",
"form_trial_days_label": "Trial Days",
"per_region_pricing_title": "Per-Region Pricing",
"smart_calculator_title": "Smart Price Calculator"
}
}

View File

@@ -31,7 +31,16 @@
"upline_commission_percent_helper": "A felső szintű ajánlónak (Gen2 — az ajánló ajánlója) járó jutalék százaléka minden vásárlás után.",
"renewal_commission_percent": "Megújítási Jutalék %",
"renewal_commission_percent_helper": "A havi/éves előfizetés megújításakor járó jutalék százaléka.",
"commission_max_amount": "Max Összeg",
"commission_max_amount": "Max Összeg (általános)",
"gen1_max_amount": "Gen1 Max Összeg",
"gen1_max_amount_helper": "Gen1 (közvetlen ajánló) maximális jutalék összege. NULL/0 = korlátlan, fallback: Max Összeg.",
"gen2_max_amount": "Gen2 Max Összeg",
"gen2_max_amount_helper": "Gen2 (felső szintű ajánló) maximális jutalék összege. NULL/0 = korlátlan, fallback: Max Összeg.",
"gen1_title": "Közvetlen Ajánló (Gen1)",
"gen2_title": "Felsővonal (Gen2)",
"legacy_fallback": "örökölt mező",
"gen2_renewal_percent": "Gen2 Megújítási Jutalék %",
"gen2_renewal_percent_helper": "Gen2-nek járó megújítási jutalék százaléka (pl. 1.00 = 1%). Fallback: Felső szintű Jutalék %.",
"deactivate_confirm": "Biztosan deaktiválod a következőt: \"{name}\"?",
"showing": "Mutatva",
"xp_reward_helper": "Egyéni meghívások után járó fix jutalom (pl. sikeres regisztráció).",
@@ -74,6 +83,10 @@
"tier_vip": "VIP",
"tier_platinum": "Platinum",
"tier_enterprise": "Enterprise",
"tier_contracted": "Szerződött Üzletkötő"
"tier_contracted": "Szerződött Üzletkötő",
"conflict_title": "Szabályütközés észlelve",
"conflict_message": "Már létezik egy aktív szabály erre a célcsoportra és régióra. Szeretnéd inaktiválni a régit, és életbe léptetni az újat?",
"conflict_confirm": "Felülírás jóváhagyása",
"conflict_cancel": "Mégsem"
}
}

View File

@@ -1,98 +1,100 @@
{
"loading": "Betöltés...",
"saving": "Mentés...",
"error": "Hiba történt",
"retry": "Újra",
"save": "Mentés",
"saving_data": "Adatok mentése...",
"cancel": "Mégsem",
"discard": "Elvetés",
"delete": "Törlés",
"delete_confirm": "Biztosan törölni szeretnéd ezt az elemet?",
"delete_btn": "Törlés",
"delete_title": "Törlés Megerősítése",
"deleted": "Sikeresen törölve",
"edit": "Szerkesztés",
"edit_title": "Elem Szerkesztése",
"create": "Létrehozás",
"create_btn": "Létrehozás",
"create_title": "Új Létrehozása",
"create_first": "Hozd létre az első elemet a kezdéshez",
"search": "Keresés",
"search_placeholder": "Keresés...",
"filter": "Szűrés",
"no_results": "Nincs találat",
"no_results_hint": "Próbáld módosítani a keresési vagy szűrési feltételeket",
"no_items": "Nincsenek elemek",
"actions": "Műveletek",
"status": "Státusz",
"active": "Aktív",
"inactive": "Inaktív",
"activate": "Aktiválás",
"deactivate": "Deaktiválás",
"name": "Név",
"name_placeholder": "Add meg a nevet",
"description": "Leírás",
"desc_placeholder": "Add meg a leírást",
"details": "Részletek",
"email": "E-mail",
"id": "Azonosító",
"type": "Típus",
"type_corporate": "Vállalati",
"view": "Megtekintés",
"updated": "Sikeresen frissítve",
"save_error": "Sikertelen mentés",
"invalid_json": "Érvénytelen JSON formátum",
"prev": "Előző",
"next": "Következő",
"none": "Nincs",
"reset": "Visszaállítás",
"confirm": "Megerősítés",
"close": "Bezárás",
"back": "Vissza",
"continue": "Tovább",
"exit": "Kilépés",
"all": "Minden",
"select_all": "Összes kiválasztása",
"deselect_all": "Összes elrejtése",
"expires": "Lejárat",
"created": "Létrehozva",
"start_date": "Kezdő Dátum",
"end_date": "Befejező Dátum",
"points": "Pontok",
"level": "Szint",
"user": "Felhasználó",
"user_id": "Felhasználó Azonosító",
"services": "Szolgáltatások",
"discoveries": "Felfedezések",
"restriction": "Korlátozás",
"restriction_mild": "Enyhe",
"restriction_moderate": "Mérsékelt",
"restriction_severe": "Súlyos",
"min_xp": "Min XP",
"xp": "XP",
"penalty": "Büntetés",
"feature_flags": "Funkció Kapcsolók",
"permission": "Engedély",
"role": "Szerepkör",
"domain": "Tartomány",
"action": "Művelet",
"value": "Érték",
"key": "Kulcs",
"enabled": "Bekapcsolva",
"disabled": "Kikapcsolva",
"yes": "Igen",
"no": "Nem",
"on": "Be",
"off": "Ki",
"service_finder": "Service Finder",
"admin": "Admin",
"version": "Verzió",
"super_administrator": "Szuper Adminisztrátor",
"administrator": "Adminisztrátor",
"profile_settings": "Profil Beállítások",
"sign_out": "Kijelentkezés",
"unknown_user": "Ismeretlen felhasználó",
"ascending": "Növekvő",
"descending": "Csökkenő"
"common": {
"loading": "Betöltés...",
"saving": "Mentés...",
"error": "Hiba történt",
"retry": "Újra",
"save": "Mentés",
"saving_data": "Adatok mentése...",
"cancel": "Mégsem",
"discard": "Elvetés",
"delete": "Törlés",
"delete_confirm": "Biztosan törölni szeretnéd ezt az elemet?",
"delete_btn": "Törlés",
"delete_title": "Törlés Megerősítése",
"deleted": "Sikeresen törölve",
"edit": "Szerkesztés",
"edit_title": "Elem Szerkesztése",
"create": "Létrehozás",
"create_btn": "Létrehozás",
"create_title": "Új Létrehozása",
"create_first": "Hozd létre az első elemet a kezdéshez",
"search": "Keresés",
"search_placeholder": "Keresés...",
"filter": "Szűrés",
"no_results": "Nincs találat",
"no_results_hint": "Próbáld módosítani a keresési vagy szűrési feltételeket",
"no_items": "Nincsenek elemek",
"actions": "Műveletek",
"status": "Státusz",
"active": "Aktív",
"inactive": "Inaktív",
"activate": "Aktiválás",
"deactivate": "Deaktiválás",
"name": "Név",
"name_placeholder": "Add meg a nevet",
"description": "Leírás",
"desc_placeholder": "Add meg a leírást",
"details": "Részletek",
"email": "E-mail",
"id": "Azonosító",
"type": "Típus",
"type_corporate": "Vállalati",
"view": "Megtekintés",
"updated": "Sikeresen frissítve",
"save_error": "Sikertelen mentés",
"invalid_json": "Érvénytelen JSON formátum",
"prev": "Előző",
"next": "Következő",
"none": "Nincs",
"reset": "Visszaállítás",
"confirm": "Megerősítés",
"close": "Bezárás",
"back": "Vissza",
"continue": "Tovább",
"exit": "Kilépés",
"all": "Minden",
"select_all": "Összes kiválasztása",
"deselect_all": "Összes elrejtése",
"expires": "Lejárat",
"created": "Létrehozva",
"start_date": "Kezdő Dátum",
"end_date": "Befejező Dátum",
"points": "Pontok",
"level": "Szint",
"user": "Felhasználó",
"user_id": "Felhasználó Azonosító",
"services": "Szolgáltatások",
"discoveries": "Felfedezések",
"restriction": "Korlátozás",
"restriction_mild": "Enyhe",
"restriction_moderate": "Mérsékelt",
"restriction_severe": "Súlyos",
"min_xp": "Min XP",
"xp": "XP",
"penalty": "Büntetés",
"feature_flags": "Funkció Kapcsolók",
"permission": "Engedély",
"role": "Szerepkör",
"domain": "Tartomány",
"action": "Művelet",
"value": "Érték",
"key": "Kulcs",
"enabled": "Bekapcsolva",
"disabled": "Kikapcsolva",
"yes": "Igen",
"no": "Nem",
"on": "Be",
"off": "Ki",
"service_finder": "Service Finder",
"admin": "Admin",
"version": "Verzió",
"super_administrator": "Szuper Adminisztrátor",
"administrator": "Adminisztrátor",
"profile_settings": "Profil Beállítások",
"sign_out": "Kijelentkezés",
"unknown_user": "Ismeretlen felhasználó",
"ascending": "Növekvő",
"descending": "Csökkenő"
}
}

View File

@@ -81,74 +81,6 @@
"no_csv_data": "Nincs adat a CSV exportáláshoz.",
"csv_downloaded": "CSV letöltés elindítva."
},
"packages": {
"title": "Csomagok Kezelése",
"subtitle": "Előfizetési csomagok és funkciók kezelése — Free, Premium, Enterprise",
"loading": "Csomagok betöltése...",
"retry": "Újra",
"create_new": "Új Csomag",
"no_packages": "Még nincsenek csomagok",
"no_packages_desc": "Hozd létre az első előfizetési csomagot a kezdéshez.",
"create_first": "Első Csomag Létrehozása",
"popular": "Népszerű",
"fallback_badge": "Visszaesési",
"trial_badge": "Próba",
"month": "hó",
"feature_flags": "Elérhető Funkciók",
"edit": "Szerkesztés",
"duplicate": "Másolás",
"delete": "Törlés",
"set_as_default": "Beállítás alapértelmezettként",
"set_as_default_success": "alapértelmezett csomagként beállítva!",
"edit_title": "Csomag Szerkesztése",
"create_title": "Csomag Létrehozása",
"cancel": "Mégse",
"save": "Változtatások Mentése",
"create": "Létrehozás",
"save_success": "Csomag sikeresen frissítve!",
"delete_title": "Csomag Törlése",
"delete_confirm": "Biztosan törölni szeretnéd a \"{name}\" csomagot?",
"delete_btn": "Törlés",
"allowances": "Korlátok",
"max_vehicles": "Max Jármű",
"max_garages": "Max Garázs",
"max_users": "Max Dolgozó",
"monthly_credits": "Havi Kredit",
"tier_level": "Szint",
"form_name": "Rendszer Név",
"form_name_placeholder": "pl. premium_2024",
"form_display_name": "Megjelenítési Név",
"form_display_name_placeholder": "pl. Premium Plus",
"form_type": "Típus",
"type_private": "Magán",
"type_corporate": "Vállalati",
"form_tier_level": "Szintszám",
"form_tier_level_hint": "Magasabb szám = több funkció és magasabb rang",
"form_monthly_price": "Havi Díj",
"form_yearly_price": "Éves Díj",
"form_currency": "Pénznem",
"form_subtitle": "Felirat / Leírás",
"form_subtitle_placeholder": "pl. Ideális kisvállalkozásoknak",
"form_badge": "Jelvény Szöveg",
"form_badge_placeholder": "pl. Legnépszerűbb",
"form_is_custom": "Egyedi Csomag (nem publikus)",
"singleton_rules": "Egyediségi Szabályok",
"form_is_default_fallback": "Alapértelmezett Visszaesési Csomag — lejárt előfizetés esetén erre vált",
"form_trial_days": "Próba Napok Regisztrációnál",
"form_trial_days_hint": "Az új szervezetek ennyi ingyenes napot kapnak. Csak egy csomagnál lehet > 0.",
"per_region_pricing": "Régiók szerinti árazás",
"smart_calculator": "Okos Árkalkulátor",
"calc_net_price": "Nettó ár",
"calc_vat_rate": "ÁFA kulcs",
"calc_currency": "Pénznem",
"calc_net": "Nettó",
"calc_vat": "ÁFA",
"calc_gross": "Bruttó",
"calc_apply": "Alkalmaz a kiválasztott régióra",
"add_zone": "Új Zóna Hozzáadása",
"add_zone_select": "Válassz országkódot...",
"add_zone_already_exists": "Ez a régió már létezik a csomag árazásában!"
},
"permissions": {
"title": "Jogosultság Kezelés",
"subtitle": "Jogosultsági Mátrix — Szerepkör alapú hozzáférés-vezérlés",
@@ -177,5 +109,79 @@
"rbac_desc": "Szerepkör alapú hozzáférés-vezérlés — mely szerepkörök mely admin műveleteket végezhetik.",
"action": "Művelet"
}
},
"packages": {
"title": "Csomagok Kezelése",
"subtitle": "Előfizetési csomagok és funkciók kezelése — Free, Premium, Enterprise",
"loading": "Csomagok betöltése...",
"retry": "Újra",
"create_new": "Új Csomag",
"no_packages": "Még nincsenek csomagok",
"no_packages_desc": "Hozd létre az első előfizetési csomagot a kezdéshez.",
"create_first": "Első Csomag Létrehozása",
"popular": "Népszerű",
"fallback_badge": "Visszaesési",
"trial_badge": "Próba",
"month": "hó",
"feature_flags": "Elérhető Funkciók",
"edit": "Szerkesztés",
"duplicate": "Másolás",
"delete": "Törlés",
"set_as_default": "Beállítás alapértelmezettként",
"set_as_default_success": "alapértelmezett csomagként beállítva!",
"edit_title": "Csomag Szerkesztése",
"create_title": "Csomag Létrehozása",
"cancel": "Mégse",
"save": "Változtatások Mentése",
"create": "Létrehozás",
"save_success": "Csomag sikeresen frissítve!",
"delete_title": "Csomag Törlése",
"delete_confirm": "Biztosan törölni szeretnéd a \"{name}\" csomagot?",
"delete_btn": "Törlés",
"allowances": "Korlátok",
"max_vehicles": "Max Jármű",
"max_garages": "Max Garázs",
"max_users": "Max Dolgozó",
"monthly_credits": "Havi Kredit",
"tier_level": "Szint",
"form_name": "Rendszer Név",
"form_name_placeholder": "pl. premium_2024",
"form_display_name": "Megjelenítési Név",
"form_display_name_placeholder": "pl. Premium Plus",
"form_type": "Típus",
"type_private": "Magán",
"type_corporate": "Vállalati",
"form_tier_level": "Szintszám",
"form_tier_level_hint": "Magasabb szám = több funkció és magasabb rang",
"form_monthly_price": "Havi Díj",
"form_yearly_price": "Éves Díj",
"form_currency": "Pénznem",
"form_subtitle": "Felirat / Leírás",
"form_subtitle_placeholder": "pl. Ideális kisvállalkozásoknak",
"form_badge": "Jelvény Szöveg",
"form_badge_placeholder": "pl. Legnépszerűbb",
"form_is_custom": "Egyedi Csomag (nem publikus)",
"singleton_rules": "Egyediségi Szabályok",
"form_is_default_fallback": "Alapértelmezett Visszaesési Csomag — lejárt előfizetés esetén erre vált",
"form_trial_days": "Próba Napok Regisztrációnál",
"form_trial_days_hint": "Az új szervezetek ennyi ingyenes napot kapnak. Csak egy csomagnál lehet > 0.",
"per_region_pricing": "Régiók szerinti árazás",
"smart_calculator": "Okos Árkalkulátor",
"calc_net_price": "Nettó ár",
"calc_vat_rate": "ÁFA kulcs",
"calc_currency": "Pénznem",
"calc_net": "Nettó",
"calc_vat": "ÁFA",
"calc_gross": "Bruttó",
"calc_apply": "Alkalmaz a kiválasztott régióra",
"add_zone": "Új Zóna Hozzáadása",
"add_zone_select": "Válassz országkódot...",
"add_zone_already_exists": "Ez a régió már létezik a csomag árazásában!",
"feature_capabilities": "Funkció Képességek (JSON)",
"feature_capabilities_hint": "JSON formátumban add meg a funkció képességeket. Pl.: ai_analysis: true, priority_support: false",
"singleton_rules_title": "Egyediségi Szabályok",
"form_trial_days_label": "Próba Napok",
"per_region_pricing_title": "Régiók szerinti árazás",
"smart_calculator_title": "Okos Árkalkulátor"
}
}

View File

@@ -357,70 +357,139 @@
</div>
</div>
<!-- Commission Section (L2) -->
<!-- Commission Section (L2) - Százalékos Jutalékok -->
<div
class="bg-slate-700/30 rounded-lg p-4 space-y-4 transition-opacity duration-200"
:class="form.rule_type === 'L1_REWARD' ? 'opacity-40 pointer-events-none' : ''"
>
<div class="text-sm font-medium text-slate-300 mb-2">{{ t('commission_rules.commission_section') }}</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<!-- Commission Percent (Gen1) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.commission_percent') }}</label>
<div class="relative">
<!-- Two-Column Layout: Gen1 (Left) / Gen2 (Right) -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- Left Column: Gen1 - Közvetlen Ajánló -->
<div class="space-y-4">
<h4 class="text-sm font-semibold text-indigo-300 mb-4 border-b border-slate-600/50 pb-2">{{ t('commission_rules.gen1_title') }}</h4>
<!-- Commission Percent (Gen1) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.commission_percent') }}</label>
<div class="relative">
<input
v-model.number="form.commission_percent"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.commission_percent_helper') }}</p>
</div>
<!-- Renewal Commission Percent -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.renewal_commission_percent') }}</label>
<div class="relative">
<input
v-model.number="form.renewal_commission_percent"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.renewal_commission_percent_helper') }}</p>
</div>
<!-- Gen1 Max Amount (Phase 2) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.gen1_max_amount') }}</label>
<input
v-model.number="form.commission_percent"
v-model.number="form.gen1_max_amount"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.gen1_max_amount_helper') }}</p>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.commission_percent_helper') }}</p>
</div>
<!-- Upline Commission Percent (Gen2) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.upline_commission_percent') }}</label>
<div class="relative">
<!-- Right Column: Gen2 - Felsővonal -->
<div class="space-y-4">
<h4 class="text-sm font-semibold text-emerald-300 mb-4 border-b border-slate-600/50 pb-2">{{ t('commission_rules.gen2_title') }}</h4>
<!-- Upline Commission Percent (Gen2) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.upline_commission_percent') }}</label>
<div class="relative">
<input
v-model.number="form.upline_commission_percent"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.upline_commission_percent_helper') }}</p>
</div>
<!-- Gen2 Renewal Percent (Phase 2) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.gen2_renewal_percent') }}</label>
<div class="relative">
<input
v-model.number="form.gen2_renewal_percent"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.gen2_renewal_percent_helper') }}</p>
</div>
<!-- Gen2 Max Amount (Phase 2) -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.gen2_max_amount') }}</label>
<input
v-model.number="form.upline_commission_percent"
v-model.number="form.gen2_max_amount"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.gen2_max_amount_helper') }}</p>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.upline_commission_percent_helper') }}</p>
</div>
<!-- Renewal Commission Percent -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.renewal_commission_percent') }}</label>
<div class="relative">
<input
v-model.number="form.renewal_commission_percent"
type="number"
min="0"
max="100"
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm pr-8 disabled:cursor-not-allowed"
/>
<span class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 text-sm">%</span>
</div>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.renewal_commission_percent_helper') }}</p>
</div>
<!-- Commission Max Amount -->
<div>
<label class="block text-sm font-medium text-slate-300 mb-1">{{ t('commission_rules.commission_max_amount') }}</label>
</div>
<!-- Legacy Field: Commission Max Amount (Fallback) - full width below columns -->
<div class="border-t border-slate-600/30 pt-4 mt-2">
<div class="max-w-xs">
<label class="block text-sm font-medium text-slate-400 mb-1">
{{ t('commission_rules.commission_max_amount') }}
<span class="text-xs text-slate-500 ml-1 italic">({{ t('commission_rules.legacy_fallback') }})</span>
</label>
<input
v-model.number="form.commission_max_amount"
type="number"
@@ -428,9 +497,9 @@
step="0.01"
placeholder="0.00"
:disabled="form.rule_type === 'L1_REWARD'"
class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm disabled:cursor-not-allowed"
class="w-full px-3 py-2 bg-slate-700/50 border border-slate-600/50 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm disabled:cursor-not-allowed"
/>
<p class="mt-1 text-xs text-slate-400">{{ t('commission_rules.commission_max_amount_helper') }}</p>
<p class="mt-1 text-xs text-slate-500">{{ t('commission_rules.commission_max_amount_helper') }}</p>
</div>
</div>
</div>
@@ -481,6 +550,38 @@
</div>
</div>
<!-- Conflict Override Confirmation Modal -->
<div v-if="showConflictModal" class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm" @click.self="showConflictModal = false">
<div class="bg-slate-800 rounded-xl border border-amber-500/30 p-6 w-full max-w-lg mx-4 shadow-2xl">
<div class="flex items-start gap-3 mb-4">
<div class="flex-shrink-0 w-10 h-10 rounded-full bg-amber-500/10 flex items-center justify-center">
<svg class="w-5 h-5 text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" />
</svg>
</div>
<div>
<h2 class="text-lg font-semibold text-white">{{ t('commission_rules.conflict_title') }}</h2>
<p class="text-sm text-slate-400 mt-1">{{ t('commission_rules.conflict_message') }}</p>
<div v-if="conflictingRule" class="mt-3 bg-slate-700/30 rounded-lg p-3 text-xs text-slate-300 space-y-1">
<div><span class="text-slate-500">ID:</span> {{ conflictingRule.id }}</div>
<div><span class="text-slate-500">{{ t('commission_rules.name') }}:</span> {{ conflictingRule.name }}</div>
<div><span class="text-slate-500">{{ t('commission_rules.tier') }}:</span> {{ conflictingRule.tier }}</div>
<div><span class="text-slate-500">{{ t('commission_rules.region') }}:</span> {{ conflictingRule.region_code }}</div>
</div>
</div>
</div>
<div class="flex justify-end gap-3 pt-2 border-t border-slate-700">
<button @click="showConflictModal = false; conflictingRule = null" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition">{{ t('commission_rules.conflict_cancel') }}</button>
<button @click="confirmOverride" :disabled="saving" class="px-4 py-2 bg-amber-600 hover:bg-amber-500 disabled:bg-amber-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2">
<svg v-if="saving" class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" />
</svg>
{{ saving ? t('commission_rules.saving') : t('commission_rules.conflict_confirm') }}
</button>
</div>
</div>
</div>
<!-- Success Toast -->
<div v-if="toast" class="fixed bottom-6 right-6 z-50 bg-emerald-600 text-white px-4 py-3 rounded-lg shadow-lg text-sm flex items-center gap-2 animate-slide-up">
<svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -511,6 +612,9 @@ interface CommissionRule {
upline_commission_percent: number | null
renewal_commission_percent: number | null
commission_max_amount: number | null
gen1_max_amount: number | null
gen2_max_amount: number | null
gen2_renewal_percent: number | null
is_campaign: boolean
start_date: string | null
end_date: string | null
@@ -534,8 +638,11 @@ const error = ref(false)
const rules = ref<CommissionRule[]>([])
const showModal = ref(false)
const showDeactivateModal = ref(false)
const showConflictModal = ref(false)
const editingRule = ref<CommissionRule | null>(null)
const deactivatingRule = ref<CommissionRule | null>(null)
const conflictingRule = ref<CommissionRule | null>(null)
const pendingPayload = ref<Record<string, any> | null>(null)
const saving = ref(false)
const formError = ref('')
const toast = ref('')
@@ -578,6 +685,9 @@ const form = reactive({
upline_commission_percent: null as number | null,
renewal_commission_percent: null as number | null,
commission_max_amount: null as number | null,
gen1_max_amount: null as number | null,
gen2_max_amount: null as number | null,
gen2_renewal_percent: null as number | null,
is_active: true,
})
@@ -607,6 +717,9 @@ function resetForm() {
form.upline_commission_percent = null
form.renewal_commission_percent = null
form.commission_max_amount = null
form.gen1_max_amount = null
form.gen2_max_amount = null
form.gen2_renewal_percent = null
form.is_active = true
formError.value = ''
}
@@ -633,6 +746,9 @@ function openEditModal(rule: CommissionRule) {
form.upline_commission_percent = rule.upline_commission_percent
form.renewal_commission_percent = rule.renewal_commission_percent
form.commission_max_amount = rule.commission_max_amount
form.gen1_max_amount = rule.gen1_max_amount
form.gen2_max_amount = rule.gen2_max_amount
form.gen2_renewal_percent = rule.gen2_renewal_percent
form.is_active = rule.is_active
formError.value = ''
showModal.value = true
@@ -728,6 +844,9 @@ async function saveRule() {
payload.upline_commission_percent = form.upline_commission_percent
payload.renewal_commission_percent = form.renewal_commission_percent
payload.commission_max_amount = form.commission_max_amount
payload.gen1_max_amount = form.gen1_max_amount
payload.gen2_max_amount = form.gen2_max_amount
payload.gen2_renewal_percent = form.gen2_renewal_percent
if (editingRule.value) {
await $fetch(`/api/v1/admin/commission-rules/${editingRule.value.id}`, {
@@ -748,7 +867,78 @@ async function saveRule() {
await fetchRules()
} catch (e: any) {
console.error('Failed to save commission rule:', e)
formError.value = e?.data?.detail || t('commission_rules.save_error')
// Phase 3: Handle 409 Conflict — show override confirmation modal
if (e?.response?.status === 409 || e?.status === 409) {
const detail = e?.data?.detail || e?.response?._data?.detail || {}
const conflicting = detail?.conflicting_rule
if (conflicting) {
conflictingRule.value = conflicting as CommissionRule
pendingPayload.value = {
name: form.name,
description: form.description || null,
rule_type: form.rule_type,
tier: form.tier,
region_code: form.region_code,
is_campaign: form.is_campaign,
is_active: form.is_active,
start_date: form.is_campaign ? (form.start_date || null) : null,
end_date: form.is_campaign ? (form.end_date || null) : null,
xp_reward: form.xp_reward,
credit_reward: form.credit_reward,
commission_percent: form.commission_percent,
upline_commission_percent: form.upline_commission_percent,
renewal_commission_percent: form.renewal_commission_percent,
commission_max_amount: form.commission_max_amount,
gen1_max_amount: form.gen1_max_amount,
gen2_max_amount: form.gen2_max_amount,
gen2_renewal_percent: form.gen2_renewal_percent,
}
showConflictModal.value = true
return // Don't clear form error — modal handles it
}
}
formError.value = e?.data?.detail || e?.message || t('commission_rules.save_error')
} finally {
saving.value = false
}
}
async function confirmOverride() {
if (!pendingPayload.value) return
saving.value = true
formError.value = ''
try {
// Add force_override flag
const payload = { ...pendingPayload.value, force_override: true }
if (editingRule.value) {
await $fetch(`/api/v1/admin/commission-rules/${editingRule.value.id}`, {
method: 'PUT',
headers: getHeaders(),
body: payload,
})
showToast(t('commission_rules.updated'))
} else {
await $fetch('/api/v1/admin/commission-rules', {
method: 'POST',
headers: getHeaders(),
body: payload,
})
showToast(t('commission_rules.created'))
}
showConflictModal.value = false
conflictingRule.value = null
pendingPayload.value = null
closeModal()
await fetchRules()
} catch (e: any) {
console.error('Failed to save commission rule with override:', e)
formError.value = e?.data?.detail || e?.message || t('commission_rules.save_error')
showConflictModal.value = false
conflictingRule.value = null
pendingPayload.value = null
} finally {
saving.value = false
}