diff --git a/web/src/components/RedemptionsTable.js b/web/src/components/RedemptionsTable.js index f4efca06..08b7f199 100644 --- a/web/src/components/RedemptionsTable.js +++ b/web/src/components/RedemptionsTable.js @@ -11,17 +11,33 @@ import { ITEMS_PER_PAGE } from '../constants'; import { renderQuota } from '../helpers/render'; import { Button, + Card, Divider, - Form, + Dropdown, + Input, Modal, - Popconfirm, Popover, + Space, Table, Tag, + Typography, } from '@douyinfe/semi-ui'; +import { + IconPlus, + IconCopy, + IconSearch, + IconEyeOpened, + IconEdit, + IconDelete, + IconStop, + IconPlay, + IconMore, +} from '@douyinfe/semi-icons'; import EditRedemption from '../pages/Redemption/EditRedemption'; import { useTranslation } from 'react-i18next'; +const { Text } = Typography; + function renderTimestamp(timestamp) { return <>{timestamp2string(timestamp)}; } @@ -33,25 +49,25 @@ const RedemptionsTable = () => { switch (status) { case 1: return ( - + {t('未使用')} ); case 2: return ( - + {t('已禁用')} ); case 3: return ( - + {t('已使用')} ); default: return ( - + {t('未知状态')} ); @@ -99,76 +115,107 @@ const RedemptionsTable = () => { { title: '', dataIndex: 'operate', - render: (text, record, index) => ( -
- - - - - { - manageRedemption(record.id, 'delete', record).then(() => { - removeRecord(record.key); + render: (text, record, index) => { + // 创建更多操作的下拉菜单项 + const moreMenuItems = [ + { + node: 'item', + name: t('删除'), + icon: , + type: 'danger', + onClick: () => { + Modal.confirm({ + title: t('确定是否要删除此兑换码?'), + content: t('此修改将不可逆'), + onOk: () => { + manageRedemption(record.id, 'delete', record).then(() => { + removeRecord(record.key); + }); + }, }); - }} - > - - - {record.status === 1 ? ( - - ) : ( + }, + } + ]; + + // 动态添加启用/禁用按钮 + if (record.status === 1) { + moreMenuItems.push({ + node: 'item', + name: t('禁用'), + icon: , + type: 'warning', + onClick: () => { + manageRedemption(record.id, 'disable', record); + }, + }); + } else { + moreMenuItems.push({ + node: 'item', + name: t('启用'), + icon: , + type: 'secondary', + onClick: () => { + manageRedemption(record.id, 'enable', record); + }, + disabled: record.status === 3, + }); + } + + return ( + + + + - )} - -
- ), + + + + + + +
+
+ } + placeholder={t('关键字(id或者名称)')} + value={searchKeyword} + onChange={handleKeywordChange} + className="!rounded-full" + showClear + /> +
+ +
+ + + ); + return ( <> { visiable={showEdit} handleClose={closeEdit} > -
{ - searchRedemptions(searchKeyword, activePage, pageSize).then(); - }} - > - - - -
- - -
- - t('第 {{start}} - {{end}} 条,共 {{total}} 条', { - start: page.currentStart, - end: page.currentEnd, - total: tokenCount, - }), - onPageSizeChange: (size) => { - setPageSize(size); - setActivePage(1); - if (searchKeyword === '') { - loadRedemptions(1, size).then(); - } else { - searchRedemptions(searchKeyword, 1, size).then(); - } - }, - onPageChange: handlePageChange, - }} - loading={loading} - rowSelection={rowSelection} - onRow={handleRow} - >
+ + + t('第 {{start}} - {{end}} 条,共 {{total}} 条', { + start: page.currentStart, + end: page.currentEnd, + total: tokenCount, + }), + onPageSizeChange: (size) => { + setPageSize(size); + setActivePage(1); + if (searchKeyword === '') { + loadRedemptions(1, size).then(); + } else { + searchRedemptions(searchKeyword, 1, size).then(); + } + }, + onPageChange: handlePageChange, + }} + loading={loading} + rowSelection={rowSelection} + 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 e1f7bd0c..4de8fa45 100644 --- a/web/src/i18n/locales/en.json +++ b/web/src/i18n/locales/en.json @@ -1432,5 +1432,6 @@ "30个": "30 items", "100个": "100 items", "Midjourney 任务记录": "Midjourney Task Records", - "任务记录": "Task Records" + "任务记录": "Task Records", + "兑换码可以批量生成和分发,适合用于推广活动或批量充值。": "Redemption codes can be batch generated and distributed, suitable for promotion activities or bulk recharge." } \ No newline at end of file diff --git a/web/src/pages/Redemption/index.js b/web/src/pages/Redemption/index.js index 9178805a..f877b601 100644 --- a/web/src/pages/Redemption/index.js +++ b/web/src/pages/Redemption/index.js @@ -1,20 +1,10 @@ import React from 'react'; import RedemptionsTable from '../../components/RedemptionsTable'; -import { Layout } from '@douyinfe/semi-ui'; -import { useTranslation } from 'react-i18next'; const Redemption = () => { - const { t } = useTranslation(); return ( <> - - -

{t('管理兑换码')}

-
- - - -
+ ); }; diff --git a/web/src/pages/Token/index.js b/web/src/pages/Token/index.js index 242ee02b..eea68941 100644 --- a/web/src/pages/Token/index.js +++ b/web/src/pages/Token/index.js @@ -1,8 +1,7 @@ import React from 'react'; import TokensTable from '../../components/TokensTable'; -import { useTranslation } from 'react-i18next'; + const Token = () => { - const { t } = useTranslation(); return ( <>