import React, { useState, useEffect } from 'react'; import { createForm } from '@formily/core'; import { createSchemaField } from '@formily/react'; import { Form, FormItem, Input, Select, Submit, FormGrid, ArrayItems, Editable, Switch, ArrayTable, FormButtonGroup, NumberPicker, } from '@formily/antd'; import { observable } from '@formily/reactive'; import Upload from '@/components/Upload'; import { WorkType } from '@/constants/enum/work'; import { message, Button, Spin } from 'antd'; import Editor from '@/components/Editor'; import DetailPageContainer from '@/components/DetailPageContainer'; import { addWork, updateWork, queryWorkDetail } from '@/services/work'; import { useLocation } from 'umi'; import { UploadBizType } from '@/constants/enum/uploadBizType'; import AuthorSelect, { Options } from './components/AuthorSelector'; const SchemaField = createSchemaField({ components: { FormItem, FormGrid, Input, Select, ArrayTable, Upload, Switch, ArrayItems, NumberPicker, Editable, Editor, AuthorSelect, }, }); const obs: { authorDefaultOption: Options[] } = observable({ authorDefaultOption: [], }); const workTypeList = [ { label: '视频', value: WorkType.VIDEO, }, { label: '音频', value: WorkType.AUDIO, }, { label: '图片', value: WorkType.PICTURE, }, ]; const form = createForm({}); const WorkEdit = () => { const { id } = useLocation().query; const [loading, setLoading] = useState(false); const getWorkDetail = async () => { const res: any = await queryWorkDetail({ id }); const resourseList = res.resource_arr.map((item) => ({ ...item, img: [{ uid: item.path, path: item.path, url: item.url }], })); const newValue = { ...res, resource_arr: resourseList, author_id: res.author?.id }; obs.authorDefaultOption = [ { label: `${res.author?.first_name} ${res.author?.last_name}`, value: res.author?.id }, ]; form.setValues(newValue); }; const handleSubmit = async (val) => { const params = { ...val }; if (params.resource_arr.filter((item) => item.cover).length > 1) { message.warning('只能设置一张图片为封面'); return; } if (params.resource_arr.filter((item) => item.cover).length === 0) { message.warning('请设置一张图片为封面'); return; } if (params.resource_arr.filter((item) => item.avatar).length > 1) { message.warning('只能设置一个为nft资源'); return; } if (params.resource_arr.filter((item) => item.avatar).length === 0) { message.warning('请设置一个为nft资源'); return; } params.resource_arr.forEach((item, index) => { item.path = item.img[0].path; item.order_num = index; }); setLoading(true); try { if (id) { await updateWork(params); } else { await addWork(params); } message.success('操作成功'); setLoading(false); history.back(); } catch (e) { setLoading(false); } }; const handleAddResoruce = () => { const resourceList = form.getFieldState('resource_arr').value; if (resourceList.length >= 5) { message.warning('只能添加5个资源'); return; } form.setFieldState('resource_arr', (state) => { state.value = [...resourceList, {}]; }); }; useEffect(() => { id && getWorkDetail(); return () => { form.setValues({}, 'overwrite'); obs.authorDefaultOption = []; }; }, []); return (
{ field.component[1].defaultOptions = obs.authorDefaultOption; }} x-decorator="FormItem" x-component="AuthorSelect" /> 提交
); }; export default WorkEdit;