Skip to content

Commit 7915625

Browse files
committed
feat(bulk): add bulk user creation page and update sidebar navigation
- Introduced a new page for bulk user creation with a dedicated route. - Updated sidebar to include navigation for bulk user creation. - Enhanced existing bulk operations with improved routing and header management. - Added new localization strings for user interface elements related to bulk user creation.
1 parent 3cbd79a commit 7915625

File tree

9 files changed

+1053
-65
lines changed

9 files changed

+1053
-65
lines changed

dashboard/public/statics/locales/en.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,7 @@
10681068
"createAndManageTemplates": "Create and manage templates",
10691069
"password": "Password",
10701070
"previous": "Previous",
1071+
"back": "Back",
10711072
"qrcodeDialog.sublink": "Subscribe Link",
10721073
"reset": "Reset",
10731074
"resetAllUsage": "Reset All Usages",
@@ -1565,6 +1566,11 @@
15651566
"toggle": "Toggle status",
15661567
"close": "Close",
15671568
"copy": "Copy",
1569+
"copyAll": "Copy All",
1570+
"copied": "Copied!",
1571+
"clickToCopy": "Click to copy",
1572+
"copyFailed": "Failed to copy",
1573+
"more": "more",
15681574
"validation": {
15691575
"generic": "{{field}} is invalid",
15701576
"min": "{{field}} must be at least {{min}}",
@@ -1687,6 +1693,8 @@
16871693
},
16881694
"bulk": {
16891695
"title": "Bulk",
1696+
"createUsers": "Create Users",
1697+
"createUsersDesc": "Create multiple users at once from a template",
16901698
"groups": "Groups",
16911699
"proxySettings": "Proxy Settings",
16921700
"proxySettingsDesc": "Configure the proxy settings to apply",
@@ -1776,6 +1784,45 @@
17761784
"confirmApplyGroupsDescription": "Are you sure you want to apply the group changes to {{totalTargets}} target(s)? This will update the groups for all selected users and admins.",
17771785
"expire": {
17781786
"placeholder": "Enter expire date"
1787+
},
1788+
"create": {
1789+
"title": "Bulk Create Users",
1790+
"description": "Create multiple users at once from a template",
1791+
"selectTemplate": "Select User Template",
1792+
"selectTemplatePlaceholder": "Choose a template...",
1793+
"userConfiguration": "User Configuration",
1794+
"userCount": "Number of Users",
1795+
"maxUsers": "Maximum 500 users",
1796+
"usernameStrategy": "Username Strategy",
1797+
"baseUsername": "Base Username",
1798+
"baseUsernamePlaceholder": "e.g., user, customer, client",
1799+
"baseUsernameHelp": "This will be followed by sequential numbers",
1800+
"baseUsernameRequired": "Base username is required",
1801+
"startNumber": "Start Number",
1802+
"startNumberHelp": "Starting suffix for the sequence",
1803+
"preview": "Username Preview",
1804+
"note": "Note (Optional)",
1805+
"notePlaceholder": "Add any notes about these users...",
1806+
"createUsers": "Create {{count}} Users",
1807+
"creating": "Creating Users...",
1808+
"success": "Users created successfully!",
1809+
"successTitle": "Users Created Successfully!",
1810+
"successDescription": "Successfully created {{count}} user accounts.",
1811+
"failed": "Failed to create users",
1812+
"created": "Created {{count}} users",
1813+
"allUsersExist": "All usernames already exist",
1814+
"selectTemplateError": "Please select a template",
1815+
"invalidCount": "User count must be between 1 and 500",
1816+
"noTemplates": "No Templates Found",
1817+
"noTemplatesDesc": "You need to create at least one user template before you can bulk create users",
1818+
"createTemplate": "Create User Template",
1819+
"subscriptionUrls": "Subscription URLs",
1820+
"subscriptionUrlsDesc": "Copy and share these subscription URLs with your users",
1821+
"createMore": "Create More Users",
1822+
"strategy": {
1823+
"sequence": "Sequential (user1, user2, user3...)",
1824+
"random": "Random (user-abc123, user-def456...)"
1825+
}
17791826
}
17801827
},
17811828
"operationSuccess": "Operation successful!",

dashboard/public/statics/locales/fa.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,7 @@
944944
"createAndManageTemplates": "ایجاد و مدیریت قالب‌ها",
945945
"password": "گذرواژه",
946946
"previous": "قبلی",
947+
"back": "بازگشت",
947948
"qrcodeDialog.sublink": "لینک اشتراک",
948949
"reset": "بازنشانی",
949950
"resetAllUsage": "بازنشانی کل مصرف",
@@ -1489,6 +1490,11 @@
14891490
"core.deleteConfirm": "آیا مطمئن هستید که می‌خواهید هسته «{{name}}» را حذف کنید؟",
14901491
"close": "بستن",
14911492
"copy": "کپی",
1493+
"copyAll": "کپی همه",
1494+
"copied": "کپی شد!",
1495+
"clickToCopy": "کلیک برای کپی",
1496+
"copyFailed": "کپی ناموفق بود",
1497+
"more": "بیشتر",
14921498
"validation": {
14931499
"generic": "{{field}} نامعتبر است",
14941500
"min": "{{field}} باید حداقل {{min}} باشد",
@@ -1627,6 +1633,8 @@
16271633
},
16281634
"bulk": {
16291635
"title": "عملیات گروهی",
1636+
"createUsers": "ایجاد کاربران",
1637+
"createUsersDesc": "ایجاد چندین کاربر به صورت یکجا از یک الگو",
16301638
"groups": "گروه‌ها",
16311639
"proxySettings": "تنظیمات پروکسی",
16321640
"proxySettingsDesc": "تنظیمات پروکسی را برای اعمال انتخاب کنید",
@@ -1736,6 +1744,45 @@
17361744
"confirmApplyGroupsDescription": "آیا مطمئن هستید که می‌خواهید تغییرات گروه را برای {{totalTargets}} مورد انتخابی اعمال کنید؟ این کار گروه‌ها را برای همه کاربران و مدیران انتخاب‌شده به‌روزرسانی می‌کند.",
17371745
"expire": {
17381746
"placeholder": "تاریخ انقضا را وارد کنید"
1747+
},
1748+
"create": {
1749+
"title": "ایجاد دسته‌ای کاربران",
1750+
"description": "ایجاد چندین کاربر به صورت یکجا از یک قالب",
1751+
"selectTemplate": "انتخاب قالب کاربر",
1752+
"selectTemplatePlaceholder": "یک قالب انتخاب کنید...",
1753+
"userConfiguration": "تنظیمات کاربر",
1754+
"userCount": "تعداد کاربران",
1755+
"maxUsers": "حداکثر ۵۰۰ کاربر",
1756+
"usernameStrategy": "استراتژی نام کاربری",
1757+
"baseUsername": "نام کاربری پایه",
1758+
"baseUsernamePlaceholder": "مثال: user، customer، client",
1759+
"baseUsernameHelp": "این با اعداد متوالی دنبال خواهد شد",
1760+
"baseUsernameRequired": "وارد کردن نام کاربری پایه الزامی است",
1761+
"startNumber": "عدد شروع",
1762+
"startNumberHelp": "پسوند شروع برای دنباله",
1763+
"preview": "پیش‌نمایش نام کاربری",
1764+
"note": "یادداشت (اختیاری)",
1765+
"notePlaceholder": "یادداشتی درباره این کاربران اضافه کنید...",
1766+
"createUsers": "ایجاد {{count}} کاربر",
1767+
"creating": "در حال ایجاد کاربران...",
1768+
"success": "کاربران با موفقیت ایجاد شدند!",
1769+
"successTitle": "کاربران با موفقیت ایجاد شدند!",
1770+
"successDescription": "{{count}} حساب کاربری با موفقیت ایجاد شد.",
1771+
"failed": "ایجاد کاربران ناموفق بود",
1772+
"allUsersExist": "همه نام‌های کاربری از قبل وجود دارند",
1773+
"created": "{{count}} کاربر ایجاد شد",
1774+
"selectTemplateError": "لطفاً یک قالب انتخاب کنید",
1775+
"noTemplates": "قالبی یافت نشد",
1776+
"noTemplatesDesc": "برای ایجاد دسته‌ای کاربران، ابتدا باید حداقل یک قالب کاربر ایجاد کنید",
1777+
"createTemplate": "ایجاد قالب کاربر",
1778+
"invalidCount": "تعداد کاربران باید بین ۱ تا ۵۰۰ باشد",
1779+
"subscriptionUrls": "لینک‌های اشتراک",
1780+
"subscriptionUrlsDesc": "این لینک‌های اشتراک را کپی کرده و با کاربران خود به اشتراک بگذارید",
1781+
"createMore": "ایجاد کاربران بیشتر",
1782+
"strategy": {
1783+
"sequence": "متوالی (user1، user2، user3...)",
1784+
"random": "تصادفی (user-abc123، user-def456...)"
1785+
}
17391786
}
17401787
},
17411788
"operationSuccess": "عملیات موفق بود!",

dashboard/public/statics/locales/ru.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,7 @@
743743
"createAndManageTemplates": "Создавать и управлять шаблонами",
744744
"password": "Пароль",
745745
"previous": "Назад",
746+
"back": "Назад",
746747
"qrcodeDialog.sublink": "Ссылка на подписку",
747748
"reset": "Сбросить",
748749
"resetAllUsage": "Сбросить расход трафика",
@@ -1463,6 +1464,11 @@
14631464
"toggle": "Переключить статус",
14641465
"close": "Закрыть",
14651466
"copy": "Копировать",
1467+
"copyAll": "Копировать все",
1468+
"copied": "Скопировано!",
1469+
"clickToCopy": "Нажмите, чтобы скопировать",
1470+
"copyFailed": "Не удалось скопировать",
1471+
"more": "еще",
14661472
"userDialog": {
14671473
"deleteSuccess": "Пользователь «{{name}}» был успешно удалён.",
14681474
"resetUsageSuccess": "Использование пользователя «{{name}}» было сброшено.",
@@ -1599,6 +1605,8 @@
15991605
},
16001606
"bulk": {
16011607
"title": "Массовые операции",
1608+
"createUsers": "Создать пользователей",
1609+
"createUsersDesc": "Создайте несколько пользователей одновременно из шаблона",
16021610
"groups": "Группы",
16031611
"proxySettings": "Настройки прокси",
16041612
"proxySettingsDesc": "Настройте параметры прокси для применения",
@@ -1708,6 +1716,45 @@
17081716
"confirmApplyGroupsDescription": "Вы уверены, что хотите применить изменения групп к {{totalTargets}} выбранным объектам? Это обновит группы для всех выбранных пользователей и администраторов.",
17091717
"expire": {
17101718
"placeholder": "Введите дату истечения"
1719+
},
1720+
"create": {
1721+
"title": "Массовое создание пользователей",
1722+
"description": "Создайте несколько пользователей одновременно из шаблона",
1723+
"selectTemplate": "Выберите шаблон пользователя",
1724+
"selectTemplatePlaceholder": "Выберите шаблон...",
1725+
"userConfiguration": "Конфигурация пользователя",
1726+
"userCount": "Количество пользователей",
1727+
"maxUsers": "Максимум 500 пользователей",
1728+
"usernameStrategy": "Стратегия имени пользователя",
1729+
"baseUsername": "Базовое имя пользователя",
1730+
"baseUsernamePlaceholder": "например, user, customer, client",
1731+
"baseUsernameHelp": "За ним будут следовать последовательные номера",
1732+
"baseUsernameRequired": "Базовое имя пользователя обязательно",
1733+
"startNumber": "Начальный номер",
1734+
"startNumberHelp": "Начальный суффикс для последовательности",
1735+
"preview": "Предпросмотр имени пользователя",
1736+
"note": "Примечание (необязательно)",
1737+
"notePlaceholder": "Добавьте заметки об этих пользователях...",
1738+
"createUsers": "Создать {{count}} пользователей",
1739+
"creating": "Создание пользователей...",
1740+
"success": "Пользователи успешно созданы!",
1741+
"successTitle": "Пользователи успешно созданы!",
1742+
"successDescription": "Успешно создано {{count}} учетных записей пользователей.",
1743+
"failed": "Не удалось создать пользователей",
1744+
"created": "Создано {{count}} пользователей",
1745+
"allUsersExist": "Все имена пользователей уже существуют",
1746+
"selectTemplateError": "Пожалуйста, выберите шаблон",
1747+
"invalidCount": "Количество пользователей должно быть от 1 до 500",
1748+
"noTemplates": "Шаблоны не найдены",
1749+
"noTemplatesDesc": "Вам нужно создать хотя бы один шаблон пользователя, прежде чем вы сможете массово создавать пользователей",
1750+
"createTemplate": "Создать шаблон пользователя",
1751+
"subscriptionUrls": "URL-адреса подписок",
1752+
"subscriptionUrlsDesc": "Скопируйте и поделитесь этими URL-адресами подписок с вашими пользователями",
1753+
"createMore": "Создать больше пользователей",
1754+
"strategy": {
1755+
"sequence": "Последовательный (user1, user2, user3...)",
1756+
"random": "Случайный (user-abc123, user-def456...)"
1757+
}
17111758
}
17121759
},
17131760
"operationSuccess": "Операция выполнена успешно!",

dashboard/public/statics/locales/zh.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,7 @@
10471047
"createAndManageTemplates": "创建和管理模板",
10481048
"password": "密码",
10491049
"previous": "上一页",
1050+
"back": "返回",
10501051
"qrcodeDialog.sublink": "订阅链接",
10511052
"reset": "重置",
10521053
"resetAllUsage": "重置所有统计",
@@ -1524,6 +1525,11 @@
15241525
"toggle": "切换状态",
15251526
"close": "关闭",
15261527
"copy": "复制",
1528+
"copyAll": "复制全部",
1529+
"copied": "已复制!",
1530+
"clickToCopy": "点击复制",
1531+
"copyFailed": "复制失败",
1532+
"more": "更多",
15271533
"userDialog": {
15281534
"deleteSuccess": "用户「{{name}}」已成功删除。",
15291535
"resetUsageSuccess": "用户「{{name}}」的用量已重置。",
@@ -1649,6 +1655,8 @@
16491655
},
16501656
"bulk": {
16511657
"title": "批量操作",
1658+
"createUsers": "创建用户",
1659+
"createUsersDesc": "从模板一次性创建多个用户",
16521660
"groups": "用户组",
16531661
"proxySettings": "代理设置",
16541662
"proxySettingsDesc": "配置要应用的代理设置",
@@ -1758,6 +1766,45 @@
17581766
"confirmApplyGroupsDescription": "您确定要将分组更改应用于 {{totalTargets}} 个目标吗?这将更新所有选定用户和管理员的分组。",
17591767
"expire": {
17601768
"placeholder": "输入到期日期"
1769+
},
1770+
"create": {
1771+
"title": "批量创建用户",
1772+
"description": "从模板一次性创建多个用户",
1773+
"selectTemplate": "选择用户模板",
1774+
"selectTemplatePlaceholder": "选择一个模板...",
1775+
"userConfiguration": "用户配置",
1776+
"userCount": "用户数量",
1777+
"maxUsers": "最多500个用户",
1778+
"usernameStrategy": "用户名策略",
1779+
"baseUsername": "基础用户名",
1780+
"baseUsernamePlaceholder": "例如:user、customer、client",
1781+
"baseUsernameHelp": "后面将跟随连续的数字",
1782+
"baseUsernameRequired": "基础用户名是必需的",
1783+
"startNumber": "起始编号",
1784+
"startNumberHelp": "序列的起始后缀",
1785+
"preview": "用户名预览",
1786+
"note": "备注(可选)",
1787+
"notePlaceholder": "添加关于这些用户的备注...",
1788+
"createUsers": "创建 {{count}} 个用户",
1789+
"creating": "正在创建用户...",
1790+
"success": "用户创建成功!",
1791+
"successTitle": "用户创建成功!",
1792+
"successDescription": "成功创建了 {{count}} 个用户账户。",
1793+
"failed": "创建用户失败",
1794+
"created": "已创建 {{count}} 个用户",
1795+
"allUsersExist": "所有用户名已存在",
1796+
"selectTemplateError": "请选择一个模板",
1797+
"invalidCount": "用户数量必须在1到500之间",
1798+
"noTemplates": "未找到模板",
1799+
"noTemplatesDesc": "您需要先创建至少一个用户模板才能批量创建用户",
1800+
"createTemplate": "创建用户模板",
1801+
"subscriptionUrls": "订阅链接",
1802+
"subscriptionUrlsDesc": "复制并分享这些订阅链接给您的用户",
1803+
"createMore": "创建更多用户",
1804+
"strategy": {
1805+
"sequence": "连续 (user1, user2, user3...)",
1806+
"random": "随机 (user-abc123, user-def456...)"
1807+
}
17611808
}
17621809
},
17631810
"operationSuccess": "操作成功!",

dashboard/src/components/layout/sidebar.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
Settings2,
3838
Share2Icon,
3939
UserCog,
40+
UserPlus,
4041
Users2,
4142
UsersIcon,
4243
Webhook,
@@ -186,8 +187,13 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
186187
icon: Layers,
187188
items: [
188189
{
189-
title: 'bulk.groups',
190+
title: 'bulk.createUsers',
190191
url: '/bulk',
192+
icon: UserPlus,
193+
},
194+
{
195+
title: 'bulk.groups',
196+
url: '/bulk/groups',
191197
icon: Users2,
192198
},
193199
{

0 commit comments

Comments
 (0)