mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-19 05:05:44 +08:00
Add cache cleaning feature to backend and frontend
Co-authored-by: sj817 <74231782+sj817@users.noreply.github.com>
This commit is contained in:
parent
94676998cc
commit
94bc4f8301
@ -197,4 +197,12 @@ export default class WebUIManager {
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
// 清理缓存
|
||||
public static async cleanCache() {
|
||||
const { data } = await serverRequest.post<
|
||||
ServerResponse<{ result: boolean; message: string }>
|
||||
>('/base/CleanCache')
|
||||
return data.data
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,22 @@
|
||||
import { Button } from '@heroui/button'
|
||||
import { Input } from '@heroui/input'
|
||||
import { Switch } from '@heroui/switch'
|
||||
import { useRequest } from 'ahooks'
|
||||
import { useEffect } from 'react'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { Controller, useForm } from 'react-hook-form'
|
||||
import toast from 'react-hot-toast'
|
||||
import { MdDeleteSweep } from 'react-icons/md'
|
||||
|
||||
import SaveButtons from '@/components/button/save_buttons'
|
||||
import PageLoading from '@/components/page_loading'
|
||||
|
||||
import useDialog from '@/hooks/use-dialog'
|
||||
|
||||
import WebUIManager from '@/controllers/webui_manager'
|
||||
|
||||
const ServerConfigCard = () => {
|
||||
const dialog = useDialog()
|
||||
const [isCleaningCache, setIsCleaningCache] = useState(false)
|
||||
const {
|
||||
data: configData,
|
||||
loading: configLoading,
|
||||
@ -69,6 +75,42 @@ const ServerConfigCard = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const handleCleanCache = () => {
|
||||
dialog.confirm({
|
||||
title: '清理缓存',
|
||||
content: (
|
||||
<div className="space-y-2">
|
||||
<p>确定要清理缓存吗?此操作将清理以下内容:</p>
|
||||
<ul className="list-disc list-inside text-sm text-default-600">
|
||||
<li>临时文件夹中的所有文件</li>
|
||||
<li>图片缓存 (Pic)</li>
|
||||
<li>语音缓存 (Ptt)</li>
|
||||
<li>视频缓存 (Video)</li>
|
||||
<li>文件缓存 (File)</li>
|
||||
<li>日志文件 (log)</li>
|
||||
</ul>
|
||||
<p className="text-warning text-sm">此操作不可撤销,请谨慎操作。</p>
|
||||
</div>
|
||||
),
|
||||
onConfirm: async () => {
|
||||
setIsCleaningCache(true)
|
||||
try {
|
||||
const result = await WebUIManager.cleanCache()
|
||||
if (result.result) {
|
||||
toast.success(result.message || '缓存清理成功')
|
||||
} else {
|
||||
toast.error(result.message || '缓存清理失败')
|
||||
}
|
||||
} catch (error) {
|
||||
const msg = (error as Error).message
|
||||
toast.error(`清理缓存失败: ${msg}`)
|
||||
} finally {
|
||||
setIsCleaningCache(false)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
reset()
|
||||
}, [configData])
|
||||
@ -131,6 +173,30 @@ const ServerConfigCard = () => {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex-shrink-0 w-full">维护操作</div>
|
||||
<div className="flex flex-col gap-2 p-4 rounded-lg bg-default-50">
|
||||
<div className="flex items-start justify-between gap-2">
|
||||
<div className="flex-1">
|
||||
<div className="font-medium">清理缓存</div>
|
||||
<div className="text-sm text-default-500">
|
||||
清理临时文件、图片、语音、视频、文件缓存和日志文件
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
color="danger"
|
||||
variant="flat"
|
||||
startContent={<MdDeleteSweep size={20} />}
|
||||
onPress={handleCleanCache}
|
||||
isLoading={isCleaningCache}
|
||||
isDisabled={!!configError}
|
||||
>
|
||||
清理缓存
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex-shrink-0 w-full">安全配置</div>
|
||||
<Controller
|
||||
|
||||
@ -217,6 +217,15 @@ export class NapCatOneBot11Adapter {
|
||||
//this.context.logger.log(`OneBot11 配置更改:${JSON.stringify(prev)} -> ${JSON.stringify(newConfig)}`);
|
||||
await this.reloadNetwork(prev, newConfig);
|
||||
});
|
||||
WebUiDataRuntime.setCleanCacheCall(async () => {
|
||||
try {
|
||||
await this.actions.get('clean_cache')?.handle({});
|
||||
return { result: true, message: '缓存清理成功' };
|
||||
} catch (error) {
|
||||
this.context.logger.logError('清理缓存失败:', error);
|
||||
return { result: false, message: `清理缓存失败: ${(error as Error).message}` };
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -24,3 +24,8 @@ export const SetThemeConfigHandler: RequestHandler = async (req, res) => {
|
||||
await WebUiConfig.UpdateTheme(theme);
|
||||
sendSuccess(res, { message: '更新成功' });
|
||||
};
|
||||
|
||||
export const CleanCacheHandler: RequestHandler = async (_, res) => {
|
||||
const result = await WebUiDataRuntime.requestCleanCache();
|
||||
sendSuccess(res, result);
|
||||
};
|
||||
|
||||
@ -27,6 +27,9 @@ const LoginRuntime: LoginRuntimeType = {
|
||||
onQuickLoginRequested: async () => {
|
||||
return { result: false, message: '' };
|
||||
},
|
||||
onCleanCacheRequested: async () => {
|
||||
return { result: false, message: '' };
|
||||
},
|
||||
QQLoginList: [],
|
||||
NewQQLoginList: [],
|
||||
},
|
||||
@ -130,6 +133,14 @@ export const WebUiDataRuntime = {
|
||||
return LoginRuntime.NapCatHelper.onOB11ConfigChanged(ob11);
|
||||
} as LoginRuntimeType['NapCatHelper']['onOB11ConfigChanged'],
|
||||
|
||||
setCleanCacheCall(func: LoginRuntimeType['NapCatHelper']['onCleanCacheRequested']): void {
|
||||
LoginRuntime.NapCatHelper.onCleanCacheRequested = func;
|
||||
},
|
||||
|
||||
requestCleanCache: function () {
|
||||
return LoginRuntime.NapCatHelper.onCleanCacheRequested();
|
||||
} as LoginRuntimeType['NapCatHelper']['onCleanCacheRequested'],
|
||||
|
||||
getPackageJson() {
|
||||
return LoginRuntime.packageJson;
|
||||
},
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Router } from 'express';
|
||||
import { GetThemeConfigHandler, PackageInfoHandler, QQVersionHandler, SetThemeConfigHandler } from '../api/BaseInfo';
|
||||
import { CleanCacheHandler, GetThemeConfigHandler, PackageInfoHandler, QQVersionHandler, SetThemeConfigHandler } from '../api/BaseInfo';
|
||||
import { StatusRealTimeHandler } from '@webapi/api/Status';
|
||||
import { GetProxyHandler } from '../api/Proxy';
|
||||
|
||||
@ -11,5 +11,6 @@ router.get('/GetSysStatusRealTime', StatusRealTimeHandler);
|
||||
router.get('/proxy', GetProxyHandler);
|
||||
router.get('/Theme', GetThemeConfigHandler);
|
||||
router.post('/SetTheme', SetThemeConfigHandler);
|
||||
router.post('/CleanCache', CleanCacheHandler);
|
||||
|
||||
export { router as BaseRouter };
|
||||
|
||||
1
src/webui/src/types/data.d.ts
vendored
1
src/webui/src/types/data.d.ts
vendored
@ -15,6 +15,7 @@ interface LoginRuntimeType {
|
||||
NapCatHelper: {
|
||||
onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;
|
||||
onOB11ConfigChanged: (ob11: OneBotConfig) => Promise<void>;
|
||||
onCleanCacheRequested: () => Promise<{ result: boolean; message: string }>;
|
||||
QQLoginList: string[];
|
||||
NewQQLoginList: LoginListItem[];
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user