From 283e8e2ab4592ed398b7bbbdc60b7a70fa0f8332 Mon Sep 17 00:00:00 2001 From: fadeaway Date: Sat, 22 Jun 2024 13:32:15 +0800 Subject: [PATCH] =?UTF-8?q?WIP:=20=E6=96=B0=E5=BB=BA=E4=B8=93=E8=BE=91?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../create/components/SongInfoItem/index.tsx | 196 ++++++++++++++++++ .../components/SongUploadItem/index.tsx | 21 +- src/pages/albumWorks/create/index.tsx | 46 +++- src/pages/albumWorks/create/step1.tsx | 1 - src/pages/albumWorks/create/step2.tsx | 162 ++++++++------- src/pages/albumWorks/create/step3.tsx | 11 +- .../albumWorks/create/style/index.module.less | 8 + 7 files changed, 347 insertions(+), 98 deletions(-) create mode 100644 src/pages/albumWorks/create/components/SongInfoItem/index.tsx diff --git a/src/pages/albumWorks/create/components/SongInfoItem/index.tsx b/src/pages/albumWorks/create/components/SongInfoItem/index.tsx new file mode 100644 index 0000000..0f5f907 --- /dev/null +++ b/src/pages/albumWorks/create/components/SongInfoItem/index.tsx @@ -0,0 +1,196 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { + Radio, + Form, + InputNumber, + Input, + Select, + Checkbox, +} from '@arco-design/web-react'; +import { IconInfoCircle } from '@arco-design/web-react/icon'; + +import type { UploadItem } from '@arco-design/web-react/es/Upload'; + +export interface SongInfoItemProps { + originNode?: React.ReactNode; + file?: UploadItem; + fileList?: UploadItem[]; +} + +const { Item: FormItem, useForm, useWatch } = Form; +const RadioGroup = Radio.Group; +const { TextArea } = Input; + +const AlbumTypeOpt = [ + { + label: '录音室', + value: 'recordingStudio', + }, + { + label: 'Live', + value: 'live', + }, + { + label: 'Demo', + value: 'demo', + }, + { + label: '伴奏', + value: 'accompaniment', + }, + { + label: '其它', + value: 'other', + }, +]; + +const IsChargeOpt = [ + { + label: '收费', + value: 'charge', + }, + { + label: '免费', + value: 'free', + }, +]; + +export default function SongInfoItem(props: SongInfoItemProps) { + const { originNode, file, fileList } = props || {}; + const [form] = useForm(); + const [iamLyricist, setIamLyricist] = useState(false); // 我是作词人? + const [iamComposer, setIamComposer] = useState(false); // 我是作曲人? + const fileName = useMemo(() => file?.name, [file?.name]); + const filedNames = useMemo( + () => ({ + albumType: `${fileName}.albumType`, + isCharge: `${fileName}.isCharge`, + songPricing: `${fileName}.songPricing`, + singer: `${fileName}.singer`, + songStyle: `${fileName}.songStyle`, + language: `${fileName}.language`, + lyricist: `${fileName}.lyricist`, + composer: `${fileName}.composer`, + lyric: `${fileName}.lyric`, + }), + [fileName] + ); + + return ( + <> + + + + + + + + + + + } + placeholder="请输入歌手名称" + /> + + + + + + { + setIamLyricist(checked); + form?.setFieldValue('lyricist', checked ? 'me' : undefined); // TODO: + }} + > + 我是作词人 + + } + placeholder="请输入" + /> + + + { + setIamComposer(checked); + form?.setFieldValue('composer', checked ? 'me' : undefined); // TODO: + }} + > + 我是作曲人 + + } + placeholder="请输入" + /> + + +