import { useEffect, useRef, useState } from "react"; import { Image, View, ScrollView, Video } from "@tarojs/components"; import { formatSeconds } from "@/utils/index"; import PageCustom from "@/components/page-custom/index"; import NavBarNormal from "@/components/NavBarNormal/index"; import { uploadAndNavToGenNewAvatar } from "@/utils/avatar"; import IconPlusBig from "@/components/icon/icon-plus-big"; import { editAgentAvatar } from "@/service/agent"; import { deleteAvatar, fetchMyAvatars } from "@/service/storage"; import style from "./index.module.less"; import { TAvatarItem } from "@/service/storage"; import { useAgentStore } from "@/store/agentStore"; import Taro from "@tarojs/taro"; import { isSuccess } from "@/utils"; import IconDeleteGray16 from "@/components/icon/IconDeleteGray16"; import EmptyData from "@/components/empty-data"; import { useModalStore } from "@/store/modalStore"; import { useLoadMoreInfinite, createKey } from "@/utils/loadMoreInfinite"; export default function Index() { const { agent, fetchAgent } = useAgentStore(); const [scrollTop, setScrollTop] = useState(0); const scrollPositionRef = useRef(0); const { showModal } = useModalStore(); const fetcher = async ([_url, { pageIndex, pageSize }]) => { const res = await fetchMyAvatars({ pageIndex, pageSize }); return res.data; }; const { list, loadMore, mutate } = useLoadMoreInfinite( createKey("fetchMyAvatars"), fetcher ); const [current, setCurrent] = useState(null); const handleClick = async (item: TAvatarItem) => { console.log(item); if (!agent?.agentId) { return; } Taro.showLoading(); const result = await editAgentAvatar(agent.agentId, item.avatarId, false); await fetchAgent(agent.agentId); Taro.hideLoading(); setCurrent(item); if (isSuccess(result.status)) { Taro.navigateBack(); } }; const onScrollToLower = () => { loadMore(); console.log("lower"); }; const handleCreate = () => { uploadAndNavToGenNewAvatar(); }; const handleDelete = async (e: any, avatar: TAvatarItem) => { e.stopPropagation(); showModal({ content: <>确认删除该形象?, async onConfirm() { const response = await deleteAvatar(avatar.avatarId); if (isSuccess(response.status)) { mutate(); } }, }); }; const renderMedia = (avatar: TAvatarItem) => { if (avatar.isVideo) { return ( ); } return ; }; const renderList = () => { if (!list.length) { return ( <> ); } return list.map((avatar) => { const isCurrent = agent?.avatarUrl === avatar.avatarUrl; return ( handleClick(avatar)} > {!isCurrent && ( handleDelete(e, avatar)} > )} {renderMedia(avatar)} ); }); }; return ( 历史形象 { scrollPositionRef.current = e.detail.scrollTop; }} style={{ flex: 1, height: "100%", // 高度自适应 }} > 创建新形象 {renderList()} ); }