feature: app's api key support delete

This commit is contained in:
zhaoying
2025-12-18 15:12:39 +08:00
parent fa53ab1d6a
commit 3ab68e126f
2 changed files with 14 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
import { type FC, useState, useRef, useEffect } from 'react'; import { type FC, useState, useRef, useEffect } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Space, App, Statistic, Row, Col, Divider } from 'antd'; import { Button, Space, App, Statistic, Row, Col } from 'antd';
import copy from 'copy-to-clipboard' import copy from 'copy-to-clipboard'
import Card from './components/Card'; import Card from './components/Card';
@@ -10,7 +10,7 @@ import type { ApiKey } from '@/views/ApiKeyManagement/types'
import ApiKeyModal from './components/ApiKeyModal'; import ApiKeyModal from './components/ApiKeyModal';
import ApiKeyConfigModal from './components/ApiKeyConfigModal'; import ApiKeyConfigModal from './components/ApiKeyConfigModal';
import Tag from '@/components/Tag' import Tag from '@/components/Tag'
import { getApiKeyList, getApiKeyStats } from '@/api/apiKey'; import { getApiKeyList, getApiKeyStats, deleteApiKey } from '@/api/apiKey';
import { maskApiKeys } from '@/utils/apiKeyReplacer' import { maskApiKeys } from '@/utils/apiKeyReplacer'
const Api: FC<{ application: Application | null }> = ({ application }) => { const Api: FC<{ application: Application | null }> = ({ application }) => {
@@ -44,7 +44,7 @@ const Api: FC<{ application: Application | null }> = ({ application }) => {
}).then(res => { }).then(res => {
const response = res as { items: ApiKey[] } const response = res as { items: ApiKey[] }
const list = response.items ?? [] const list = response.items ?? []
getAllStats(list) getAllStats([...list])
}) })
} }
const getAllStats = (list: ApiKey[]) => { const getAllStats = (list: ApiKey[]) => {
@@ -78,7 +78,11 @@ const Api: FC<{ application: Application | null }> = ({ application }) => {
okText: t('common.delete'), okText: t('common.delete'),
okType: 'danger', okType: 'danger',
onOk: () => { onOk: () => {
deleteApiKey(vo.id)
.then(() => {
getApiList();
message.success(t('common.deleteSuccess'))
})
} }
}) })
} }

View File

@@ -18,13 +18,14 @@ const ApiKeyConfigModal = forwardRef<ApiKeyConfigModalRef, ApiKeyConfigModalProp
const [form] = Form.useForm<ApiKey>(); const [form] = Form.useForm<ApiKey>();
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const values = Form.useWatch<ApiKey>([], form) const values = Form.useWatch<ApiKey>([], form)
const [editVo, setEditVo] = useState<ApiKey>({} as ApiKey) const [editVo, setEditVo] = useState<ApiKey | null>(null)
// 封装取消方法,添加关闭弹窗逻辑 // 封装取消方法,添加关闭弹窗逻辑
const handleClose = () => { const handleClose = () => {
setVisible(false);
form.resetFields(); form.resetFields();
setLoading(false) setLoading(false)
setEditVo(null)
setVisible(false);
}; };
const handleOpen = (apiKey: ApiKey) => { const handleOpen = (apiKey: ApiKey) => {
@@ -37,6 +38,7 @@ const ApiKeyConfigModal = forwardRef<ApiKeyConfigModalRef, ApiKeyConfigModalProp
}; };
// 封装保存方法,添加提交逻辑 // 封装保存方法,添加提交逻辑
const handleSave = () => { const handleSave = () => {
if (!editVo?.id) return
form.validateFields() form.validateFields()
.then((values) => { .then((values) => {
updateApiKey(editVo.id, { updateApiKey(editVo.id, {
@@ -88,7 +90,7 @@ const ApiKeyConfigModal = forwardRef<ApiKeyConfigModalRef, ApiKeyConfigModalProp
step={1} step={1}
/> />
</Form.Item> </Form.Item>
<div className="rb:flex rb:items-center rb:justify-between rb:text-[#5B6167] rb:leading-5 rb:mt-[-26px]"> <div className="rb:flex rb:items-center rb:justify-between rb:text-[#5B6167] rb:leading-5 rb:-mt-6.5">
1 1
<span>{t('application.currentValue')}: {values?.rate_limit}{t('application.qpsLimitUnit')}</span> <span>{t('application.currentValue')}: {values?.rate_limit}{t('application.qpsLimitUnit')}</span>
</div> </div>
@@ -113,7 +115,7 @@ const ApiKeyConfigModal = forwardRef<ApiKeyConfigModalRef, ApiKeyConfigModalProp
step={100} step={100}
/> />
</Form.Item> </Form.Item>
<div className="rb:flex rb:items-center rb:justify-between rb:text-[#5B6167] rb:leading-5 rb:mt-[-26px]"> <div className="rb:flex rb:items-center rb:justify-between rb:text-[#5B6167] rb:leading-5 rb:-mt-6.5">
100 100
<span>{t('application.currentValue')}: {values?.daily_request_limit}{t('application.dailyUsageLimitUnit')}</span> <span>{t('application.currentValue')}: {values?.daily_request_limit}{t('application.dailyUsageLimitUnit')}</span>
</div> </div>