{record.DeletedAt !== null ? (
-
{t('已注销')}
+
{t('已注销')}
) : (
renderStatus(text)
)}
@@ -143,92 +167,117 @@ const UsersTable = () => {
{
title: '',
dataIndex: 'operate',
- render: (text, record, index) => (
-
- {record.DeletedAt !== null ? (
- <>>
- ) : (
- <>
-
{
+ render: (text, record, index) => {
+ if (record.DeletedAt !== null) {
+ return <>>;
+ }
+
+ // 创建更多操作的下拉菜单项
+ const moreMenuItems = [
+ {
+ node: 'item',
+ name: t('提升'),
+ icon: ,
+ type: 'warning',
+ onClick: () => {
+ Modal.confirm({
+ title: t('确定要提升此用户吗?'),
+ content: t('此操作将提升用户的权限级别'),
+ onOk: () => {
manageUser(record.id, 'promote', record);
- }}
- >
-
-
-
{
+ },
+ });
+ },
+ },
+ {
+ node: 'item',
+ name: t('降级'),
+ icon: ,
+ type: 'secondary',
+ onClick: () => {
+ Modal.confirm({
+ title: t('确定要降级此用户吗?'),
+ content: t('此操作将降低用户的权限级别'),
+ onOk: () => {
manageUser(record.id, 'demote', record);
- }}
- >
-
-
- {record.status === 1 ? (
-
- ) : (
-
- )}
-
-
{
+ },
+ });
+ },
+ },
+ {
+ node: 'item',
+ name: t('注销'),
+ icon: ,
+ type: 'danger',
+ onClick: () => {
+ Modal.confirm({
+ title: t('确定是否要注销此用户?'),
+ content: t('相当于删除用户,此修改将不可逆'),
+ onOk: () => {
manageUser(record.id, 'delete', record).then(() => {
removeRecord(record.id);
});
- }}
- >
-
-
- >
- )}
-
- ),
+ },
+ });
+ },
+ }
+ ];
+
+ // 动态添加启用/禁用按钮
+ if (record.status === 1) {
+ moreMenuItems.splice(-1, 0, {
+ node: 'item',
+ name: t('禁用'),
+ icon:
,
+ type: 'warning',
+ onClick: () => {
+ manageUser(record.id, 'disable', record);
+ },
+ });
+ } else {
+ moreMenuItems.splice(-1, 0, {
+ node: 'item',
+ name: t('启用'),
+ icon:
,
+ type: 'secondary',
+ onClick: () => {
+ manageUser(record.id, 'enable', record);
+ },
+ disabled: record.status === 3,
+ });
+ }
+
+ return (
+
+ }
+ theme='light'
+ type='tertiary'
+ size="small"
+ className="!rounded-full"
+ onClick={() => {
+ setEditingUser(record);
+ setShowEditUser(true);
+ }}
+ >
+ {t('编辑')}
+
+
+ }
+ theme='light'
+ type='tertiary'
+ size="small"
+ className="!rounded-full"
+ />
+
+
+ );
+ },
},
];
@@ -311,25 +360,6 @@ const UsersTable = () => {
}
};
- const renderStatus = (status) => {
- switch (status) {
- case 1:
- return
{t('已激活')};
- case 2:
- return (
-
- {t('已封禁')}
-
- );
- default:
- return (
-
- {t('未知状态')}
-
- );
- }
- };
-
const searchUsers = async (
startIdx,
pageSize,
@@ -420,6 +450,83 @@ const UsersTable = () => {
});
};
+ const handleRow = (record, index) => {
+ if (record.DeletedAt !== null || record.status !== 1) {
+ return {
+ style: {
+ background: 'var(--semi-color-disabled-border)',
+ },
+ };
+ } else {
+ return {};
+ }
+ };
+
+ const renderHeader = () => (
+
+
+
+
+ {t('用户管理页面,可以查看和管理所有注册用户的信息、权限和状态。')}
+
+
+
+
+
+
+
+ }
+ className="!rounded-full w-full md:w-auto"
+ onClick={() => {
+ setShowAddUser(true);
+ }}
+ >
+ {t('添加用户')}
+
+
+
+
+
+ }
+ placeholder={t('支持搜索用户的 ID、用户名、显示名称和邮箱地址')}
+ value={searchKeyword}
+ onChange={handleKeywordChange}
+ className="!rounded-full"
+ showClear
+ />
+
+
+
+
+
+
+
+ );
+
return (
<>
{
handleClose={closeEditUser}
editingUser={editingUser}
>
-
-
-
- t('第 {{start}} - {{end}} 条,共 {{total}} 条', {
- start: page.currentStart,
- end: page.currentEnd,
- total: users.length,
- }),
- currentPage: activePage,
- pageSize: pageSize,
- total: userCount,
- pageSizeOpts: [10, 20, 50, 100],
- showSizeChanger: true,
- onPageSizeChange: (size) => {
- handlePageSizeChange(size);
- },
- onPageChange: handlePageChange,
- }}
- loading={loading}
- />
+
+ t('第 {{start}} - {{end}} 条,共 {{total}} 条', {
+ start: page.currentStart,
+ end: page.currentEnd,
+ total: userCount,
+ }),
+ currentPage: activePage,
+ pageSize: pageSize,
+ total: userCount,
+ pageSizeOpts: [10, 20, 50, 100],
+ showSizeChanger: true,
+ onPageSizeChange: (size) => {
+ handlePageSizeChange(size);
+ },
+ onPageChange: handlePageChange,
+ }}
+ loading={loading}
+ onRow={handleRow}
+ className="rounded-xl overflow-hidden"
+ size="middle"
+ />
+
>
);
};
diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json
index 4de8fa45..e41d76d3 100644
--- a/web/src/i18n/locales/en.json
+++ b/web/src/i18n/locales/en.json
@@ -1433,5 +1433,13 @@
"100个": "100 items",
"Midjourney 任务记录": "Midjourney Task Records",
"任务记录": "Task Records",
- "兑换码可以批量生成和分发,适合用于推广活动或批量充值。": "Redemption codes can be batch generated and distributed, suitable for promotion activities or bulk recharge."
+ "兑换码可以批量生成和分发,适合用于推广活动或批量充值。": "Redemption codes can be batch generated and distributed, suitable for promotion activities or bulk recharge.",
+ "剩余": "Remaining",
+ "已用": "Used",
+ "调用": "Calls",
+ "邀请": "Invitations",
+ "收益": "Earnings",
+ "无邀请人": "No Inviter",
+ "邀请人": "Inviter",
+ "用户管理页面,可以查看和管理所有注册用户的信息、权限和状态。": "User management page, you can view and manage all registered user information, permissions, and status."
}
\ No newline at end of file
diff --git a/web/src/pages/User/index.js b/web/src/pages/User/index.js
index 3c9e2824..f1d04419 100644
--- a/web/src/pages/User/index.js
+++ b/web/src/pages/User/index.js
@@ -1,20 +1,10 @@
import React from 'react';
import UsersTable from '../../components/UsersTable';
-import { Layout } from '@douyinfe/semi-ui';
-import { useTranslation } from 'react-i18next';
const User = () => {
- const { t } = useTranslation();
return (
<>
-
-
- {t('管理用户')}
-
-
-
-
-
+
>
);
};