refactor(knowledge): restructure configuration components to use common items
163 lines
4.6 KiB
TypeScript
163 lines
4.6 KiB
TypeScript
import React from 'react';
|
||
import { Box, Typography, Paper, Divider } from '@mui/material';
|
||
import { useForm, FormProvider } from 'react-hook-form';
|
||
import {
|
||
SliderInputFormField,
|
||
SwitchFormField,
|
||
SelectFormField,
|
||
MultilineTextFormField,
|
||
NumberInputFormField,
|
||
ChipListFormField,
|
||
type SelectOption,
|
||
} from '@/components/FormField';
|
||
|
||
const FormFieldTest: React.FC = () => {
|
||
const methods = useForm({
|
||
defaultValues: {
|
||
parser_config: {
|
||
auto_keywords: 5,
|
||
auto_questions: 3,
|
||
delimiter: '\n',
|
||
chunk_token_num: 512,
|
||
layout_recognize: 'DeepDOC',
|
||
html4excel: false,
|
||
},
|
||
pagerank: 50,
|
||
custom_slider: 25,
|
||
},
|
||
});
|
||
|
||
const onSubmit = (data: any) => {
|
||
console.log('Form Data:', data);
|
||
};
|
||
|
||
return (
|
||
<Box sx={{ p: 3, maxWidth: 800, mx: 'auto' }}>
|
||
<Typography variant="h4" gutterBottom>
|
||
FormField 组件测试
|
||
</Typography>
|
||
|
||
<Paper sx={{ p: 3, mt: 2 }}>
|
||
<FormProvider {...methods}>
|
||
<form onSubmit={methods.handleSubmit(onSubmit)}>
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
自动关键词和问题
|
||
</Typography>
|
||
<NumberInputFormField
|
||
name="parser_config.auto_keywords"
|
||
label="自动关键词"
|
||
defaultValue={5}
|
||
min={0}
|
||
placeholder="输入关键词数量"
|
||
/>
|
||
<NumberInputFormField
|
||
name="parser_config.auto_questions"
|
||
label="自动问题"
|
||
defaultValue={3}
|
||
min={0}
|
||
placeholder="输入问题数量"
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
分隔符配置
|
||
</Typography>
|
||
<MultilineTextFormField
|
||
name="parser_config.delimiter"
|
||
label="分隔符"
|
||
defaultValue="\n"
|
||
rows={2}
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
Token数量配置
|
||
</Typography>
|
||
<SliderInputFormField
|
||
name="parser_config.chunk_token_num"
|
||
label="最大Token数"
|
||
min={64}
|
||
max={2048}
|
||
step={64}
|
||
defaultValue={512}
|
||
layout="horizontal"
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
页面排名
|
||
</Typography>
|
||
<NumberInputFormField
|
||
name="pagerank"
|
||
label="页面排名"
|
||
defaultValue={50}
|
||
min={0}
|
||
placeholder="输入页面排名"
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
布局识别
|
||
</Typography>
|
||
<SelectFormField
|
||
name="parser_config.layout_recognize"
|
||
label="布局识别方法"
|
||
options={[
|
||
{ value: 'DeepDOC', label: 'DeepDOC' },
|
||
{ value: 'LayoutLM', label: 'LayoutLM' },
|
||
{ value: 'OCR', label: 'OCR' }
|
||
]}
|
||
defaultValue="DeepDOC"
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
Excel转HTML
|
||
</Typography>
|
||
<SwitchFormField
|
||
name="parser_config.html4excel"
|
||
label="Excel转HTML"
|
||
defaultValue={false}
|
||
/>
|
||
<Divider sx={{ my: 3 }} />
|
||
|
||
<Typography variant="h6" gutterBottom>
|
||
自定义滑块(垂直布局)
|
||
</Typography>
|
||
<SliderInputFormField
|
||
name="custom_slider"
|
||
label="自定义滑块"
|
||
tooltip="这是一个自定义的滑块组件"
|
||
max={100}
|
||
min={0}
|
||
defaultValue={25}
|
||
layout={'vertical'}
|
||
/>
|
||
|
||
<Box sx={{ mt: 4, display: 'flex', gap: 2 }}>
|
||
<button type="submit">提交测试</button>
|
||
<button
|
||
type="button"
|
||
onClick={() => methods.reset()}
|
||
>
|
||
重置表单
|
||
</button>
|
||
</Box>
|
||
</form>
|
||
</FormProvider>
|
||
</Paper>
|
||
|
||
<Paper sx={{ p: 3, mt: 3 }}>
|
||
<Typography variant="h6" gutterBottom>
|
||
当前表单值
|
||
</Typography>
|
||
<pre style={{ fontSize: '12px', overflow: 'auto' }}>
|
||
{JSON.stringify(methods.watch(), null, 2)}
|
||
</pre>
|
||
</Paper>
|
||
</Box>
|
||
);
|
||
};
|
||
|
||
export default FormFieldTest; |