system-copyright-react/src/components/ai/mod/AiHelperMod.tsx

155 lines
5.2 KiB
TypeScript
Raw Normal View History

2024-04-24 18:03:44 +08:00
import {Button, Divider, Dropdown, Space, Table, TableProps} from "antd";
import {CheckOutlined, LoadingOutlined, ReloadOutlined, RedoOutlined} from "@ant-design/icons";
import {useEffect, useState} from "react";
import {IProjMod} from "../../../interfaces/proj/IProj.ts";
type PropsType = {
mods: IProjMod[];
newMods: ProjModType[],
handleGenerate: () => void;
handleSave: (index: number, mod: ProjModType) => void;
handleResaveField: (index: number, projModId: string) => void;
}
type ProjModType = {
name: string,
desc: string,
}
const savedItems = [
{
key: 'edit',
label: '编辑',
},{
key: 'remove',
label: '删除',
},
]
export default function AiHelperMod(props: PropsType) {
const [modArray, setModArray] = useState<IProjMod[]>([]);
const [newModArray, setNewModArray] = useState<ProjModType[]>([]);
useEffect(() => {
setModArray(props.mods);
setNewModArray(props.newMods);
}, [props.mods, props.newMods]);
const modColumnArray: TableProps<IProjMod>['columns'] = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 60,
align: 'center',
render: (_value, _record, index) => {
return index + 1
}
},
{title: '模块名称', dataIndex: 'modName', key: 'name', width: 200, align: 'center'},
{title: '模块描述', dataIndex: 'modDesc', key: 'desc', align: 'center'},
{
title: 'AI状态',
dataIndex: 'aiFieldStatus',
key: 'desc',
width: 100,
align: 'center',
render: (value) => {
if(value == 'GENERATING') {
return '处理中'
}
if(value == 'FIELD') {
return '失败'
}
if(value == 'SUCCESS') {
return '成功'
}
}
},
{
title: '操作',
dataIndex: 'option',
key: 'option',
width: 80,
align: 'center',
render: (_value, record, index) => {
if(record.aiFieldStatus == 'GENERATING') {
return <LoadingOutlined />
}
if(record.aiFieldStatus == 'FAILED') {
return <Button onClick={() => {
props.handleResaveField(index, record.projModId);
}}><RedoOutlined /></Button>
}
return (
<Dropdown menu={{ items: savedItems }} placement="bottomCenter" arrow>
<Button></Button>
</Dropdown>
)
}
},
];
const newModColumnArray: TableProps<ProjModType>['columns'] = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 60,
align: 'center',
render: (_value, _record, index) => {
return index + 1
}
},
{title: '模块名称', dataIndex: 'name', key: 'name', width: 200, align: 'center'},
{title: '模块描述', dataIndex: 'desc', key: 'desc', align: 'center'},
{
title: '确认',
dataIndex: 'option',
key: 'option',
width: 80,
align: 'center',
render: (_value, record, index) => {
return (
<Button onClick={() => {
props.handleSave(index, record);
}}>
<CheckOutlined />
</Button>
)
}
},
];
return (
<>
<div style={{padding: '5px 0 0 0'}}>
{newModArray.length > 0 ? <Divider orientation="right" plain></Divider> : <></>}
<Table columns={modColumnArray} dataSource={modArray} size="small" bordered={true} scroll={{y: 240}} pagination={false}/>
{
newModArray.length > 0 ? (
<>
<Divider orientation="right" plain></Divider>
<Table columns={newModColumnArray} dataSource={newModArray} size="small" bordered={true} scroll={{y: 240}} pagination={false}/>
</>
) : <></>
}
</div>
<div style={{padding: '5px 0 0 0', textAlign: 'center'}}>
{
newModArray.length > 0 ? (
<Space>
<Button type="link" style={{cursor: 'pointer'}}
onClick={() => {
props.handleGenerate();
}}><ReloadOutlined/> </Button>
</Space>
) : <Button type="link" style={{cursor: 'pointer'}}
onClick={() => {
props.handleGenerate();
}}>AI生成</Button>
}
</div>
</>
)
}