import WemetaRadio from "@/components/wemeta-radio/index"; import { getSysVoiceList } from "@/service/audio"; import { useCharacterStore } from "@/store/characterStore"; import { TServiceAudioModel } from "@/types/index"; import { Image, View } from "@tarojs/components"; import { useEffect, useState } from "react"; import CardList from "@/components/list/card-list"; import CardListItem from "@/components/list/card-list-item"; type ExtendedTServiceAudioModel = TServiceAudioModel & { checked: boolean }; export default function Index({ profileId, onPlay, }: { profileId: string; onPlay: (voice: any) => void; }) { const { saveCharacter } = useCharacterStore(); const character = useCharacterStore((state) => state.character); const [list, setList] = useState([]); const [sysVoice, setSysVoice] = useState( null ); const initPage = async () => { console.log("profileId: ", profileId); const res = await getSysVoiceList(); if (res.code === 0 && res.data) { const r = res.data.map((item) => { item.checked = character?.defaultSystemVoice === item.voice; return item; }) as ExtendedTServiceAudioModel[]; const checkedVoice = r.find((item) => !!item.checked); if (checkedVoice) { setSysVoice(checkedVoice); } setList(r); } }; const handleSelect = async (voiceItem: ExtendedTServiceAudioModel) => { console.log("system voice select"); const _list = list.map((item) => { return { ...item, checked: item.voice === voiceItem.voice }; }); setList(_list); setSysVoice(voiceItem); if (profileId) { saveCharacter({ defaultSystemVoice: voiceItem.voice, voice: voiceItem.voice, profileId: profileId, }); } // playerRef.current && playerRef.current.play(voiceItem.voice); onPlay && onPlay(voiceItem); }; useEffect(() => { console.log("系统声音页面显示"); initPage(); }, [profileId]); return ( {list.map((item: ExtendedTServiceAudioModel, index) => { // 与克隆语音是否相同 const isEqualToClonedVoice = item.voice === character?.voice; return ( { return }} leftRenderer={()=> { return }} > { handleSelect(item); }} > {item.name} {item.gender === 1 ? "男" : "女"} {item.style} ); })} ); }