Files
NapCatQQ/packages/napcat-webui-frontend/src/pages/dashboard/config/onebot.tsx
手瓜一十雪 84f0e0f9a0 Refactor UI for network cards and improve theming
Redesigned network display cards and related components for a more modern, consistent look, including improved button styles, card layouts, and responsive design. Added support for background images and dynamic theming across cards, tables, and log views. Enhanced input and select components with unified styling. Improved file table responsiveness and log display usability. Refactored OneBot API debug and navigation UI for better usability and mobile support.
2025-12-22 12:27:56 +08:00

118 lines
3.2 KiB
TypeScript

import { Input } from '@heroui/input';
import { useEffect, useState } from 'react';
import { Controller, useForm } from 'react-hook-form';
import toast from 'react-hot-toast';
import SaveButtons from '@/components/button/save_buttons';
import PageLoading from '@/components/page_loading';
import SwitchCard from '@/components/switch_card';
import useConfig from '@/hooks/use-config';
const OneBotConfigCard = () => {
const { config, saveConfigWithoutNetwork, refreshConfig } = useConfig();
const [loading, setLoading] = useState(false);
const {
control,
handleSubmit: handleOnebotSubmit,
formState: { isSubmitting },
setValue: setOnebotValue,
} = useForm<IConfig['onebot']>({
defaultValues: {
musicSignUrl: '',
enableLocalFile2Url: false,
parseMultMsg: false,
},
});
const reset = () => {
setOnebotValue('musicSignUrl', config.musicSignUrl);
setOnebotValue('enableLocalFile2Url', config.enableLocalFile2Url);
setOnebotValue('parseMultMsg', config.parseMultMsg);
};
const onSubmit = handleOnebotSubmit(async (data) => {
try {
await saveConfigWithoutNetwork(data);
toast.success('保存成功');
} catch (error) {
const msg = (error as Error).message;
toast.error(`保存失败: ${msg}`);
}
});
const onRefresh = async (shotTip = true) => {
try {
setLoading(true);
await refreshConfig();
if (shotTip) toast.success('刷新成功');
} catch (error) {
const msg = (error as Error).message;
toast.error(`刷新失败: ${msg}`);
} finally {
setLoading(false);
}
};
useEffect(() => {
reset();
}, [config]);
useEffect(() => {
onRefresh(false);
}, []);
if (loading) return <PageLoading loading />;
return (
<>
<title>OneBot配置 - NapCat WebUI</title>
<Controller
control={control}
name='musicSignUrl'
render={({ field }) => (
<Input
{...field}
label='音乐签名地址'
placeholder='请输入音乐签名地址'
classNames={{
inputWrapper:
'bg-default-100/50 dark:bg-white/5 backdrop-blur-md border border-transparent hover:bg-default-200/50 dark:hover:bg-white/10 transition-all shadow-sm data-[hover=true]:border-default-300',
input: 'bg-transparent text-default-700 placeholder:text-default-400',
}}
/>
)}
/>
<Controller
control={control}
name='enableLocalFile2Url'
render={({ field }) => (
<SwitchCard
{...field}
description='启用本地文件到URL'
label='启用本地文件到URL'
/>
)}
/>
<Controller
control={control}
name='parseMultMsg'
render={({ field }) => (
<SwitchCard
{...field}
description='启用上报解析合并消息'
label='启用上报解析合并消息'
/>
)}
/>
<SaveButtons
onSubmit={onSubmit}
reset={reset}
isSubmitting={isSubmitting}
refresh={onRefresh}
/>
</>
);
};
export default OneBotConfigCard;