返回 AiToEarn
replyWorks.tsx
1 import { toolsApi } from '@/api/tools';
2 import { icpCreateComment, WorkData } from '@/icp/reply';
3 import { Button, Form, Input, Modal, Tooltip, Space, message } from 'antd';
4 import { forwardRef, useImperativeHandle, useState } from 'react';
5 import logoAi from '@/assets/logoAi.png';
6 import { SendOutlined } from '@ant-design/icons';
7 import '../reply.module.scss';
8
9 export interface ReplyWorksRef {
10 init: (accountId: number, inWorkData: WorkData) => Promise<void>;
11 }
12
13 interface FormData {
14 content: string;
15 }
16
17 const Com = forwardRef<ReplyWorksRef>((props: any, ref) => {
18 const [isModalOpen, setIsModalOpen] = useState(false);
19 const [accountId, setAccountId] = useState<number>(0);
20 const [workData, setWorkData] = useState<WorkData | null>(null);
21 const [form] = Form.useForm<FormData>();
22
23 async function init(accountId: number, inWorkData: WorkData) {
24 setAccountId(accountId);
25 setWorkData(inWorkData);
26 setIsModalOpen(true);
27 }
28
29 useImperativeHandle(ref, () => ({
30 init: init,
31 }));
32
33 function handleCancel() {
34 setIsModalOpen(false);
35 }
36
37 /**
38 * 创建评论
39 */
40 async function createComment(content: string) {
41 // try {
42 const res = await icpCreateComment(accountId, workData!.dataId, content);
43 // if (res) {
44 message.success('评论成功');
45 setIsModalOpen(false);
46 form.resetFields();
47 // }
48 // } catch (error) {
49 // message.error('评论失败,请重试');
50 // }
51 }
52
53 async function onFinish(values: FormData) {
54 createComment(values.content);
55 }
56
57 async function onFinishFailed(errorInfo: any) {
58 console.log('Failed:', errorInfo);
59 }
60
61 async function getAiContent() {
62 if (!workData?.coverUrl) return;
63 const res = await toolsApi.apiReviewImgAi({
64 imgUrl: workData?.coverUrl,
65 });
66
67 console.log('----- res', res);
68
69 form.setFieldsValue({
70 content: res,
71 });
72 }
73
74 return (
75 <>
76 <Modal
77 title="作品评论"
78 open={isModalOpen}
79 onCancel={handleCancel}
80 footer={null}
81 width={500}
82 className="reply-works-modal"
83 >
84 <div className="p-6">
85 <Form
86 form={form}
87 name="basic"
88 layout="vertical"
89 initialValues={{ remember: true }}
90 onFinish={onFinish}
91 onFinishFailed={onFinishFailed}
92 autoComplete="off"
93 >
94 <Form.Item
95 label="评论内容"
96 name="content"
97 rules={[{ required: true, message: '请输入评论!' }]}
98 >
99 <Input.TextArea rows={4} />
100 </Form.Item>
101 <div className="flex justify-end items-center gap-4">
102 <Tooltip title="获取AI建议">
103 <img
104 src={logoAi}
105 alt="logo"
106 width={32}
107 onClick={getAiContent}
108 className="cursor-pointer hover:opacity-80 transition-opacity"
109 />
110 </Tooltip>
111 <Tooltip title="发送">
112 <Button
113 type="primary"
114 shape="circle"
115 htmlType="submit"
116 icon={<SendOutlined />}
117 className="flex items-center justify-center"
118 />
119 </Tooltip>
120 </div>
121 </Form>
122 </div>
123 </Modal>
124 </>
125 );
126 });
127 export default Com;
128
128 lines Plain Text