import ConversationsSvg from '@/assets/icons/svg/conversations.svg'; import MoreArrowSvg from '@/assets/icons/svg/moreArrow.svg'; import PointsSvg from '@/assets/icons/svg/points.svg'; import StoriesSvg from '@/assets/icons/svg/stories.svg'; import UsedStorageSvg from '@/assets/icons/svg/usedStorage.svg'; import AskNavbar from '@/components/layout/ask'; import AlbumComponent from '@/components/owner/album'; import CategoryComponent from '@/components/owner/category'; import CountComponent from '@/components/owner/count'; import CreateCountComponent from '@/components/owner/createCount'; import Ranking from '@/components/owner/ranking'; import ResourceComponent from '@/components/owner/resource'; import SettingModal from '@/components/owner/setting'; import UserInfo from '@/components/owner/userName'; import { formatDuration } from '@/components/utils/time'; import { checkAuthStatus } from '@/lib/auth'; import { fetchApi } from '@/lib/server-api-util'; import { CountData, UserInfoDetails } from '@/types/user'; import { useRouter } from 'expo-router'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FlatList, ScrollView, StyleSheet, View } from 'react-native'; import { useSafeAreaInsets } from "react-native-safe-area-context"; export default function OwnerPage() { const insets = useSafeAreaInsets(); const { t } = useTranslation(); const router = useRouter(); useEffect(() => { const checkAuth = async () => { const authStatus = await checkAuthStatus(router); if (!authStatus) { router.push('/login'); } }; checkAuth(); }, [router]); // 设置弹窗 const [modalVisible, setModalVisible] = useState(false); // 数据统计 const [countData, setCountData] = useState({} as CountData); // 获取数量统计 --- 需要轮询 const getCountData = () => { fetchApi("/material/statistics").then((res) => { setCountData(res as CountData); }); } // 获取用户信息 const [userInfoDetails, setUserInfoDetails] = useState({} as UserInfoDetails); const getUserInfo = () => { fetchApi("/membership/personal-center-info").then((res) => { setUserInfoDetails(res as UserInfoDetails); }) } // 设计轮询获取数量统计 // useEffect(() => { // const interval = setInterval(() => { // getCountData(); // }, 1000); // return () => clearInterval(interval); // }, []); // 初始化获取用户信息 useEffect(() => { getUserInfo(); getCountData(); }, []); return ( {/* 用户信息 */} {/* 设置栏 */} {/* 资源数据 */} } isFormatBytes={true} /> } /> {/* 数据统计 */} {/* 分类 */} {countData?.counter?.category_count && Object.entries(countData?.counter?.category_count).map(([key, value], index) => { return ( ) })} {/* 作品数据 */} } number={userInfoDetails.stories_count} /> } number={userInfoDetails.conversations_count} /> {/* 排行榜 */} } /> {/* 设置弹窗 */} {/* 导航栏 */} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: 'white', paddingBottom: 86, }, contentContainer: { paddingHorizontal: 16, }, resourceContainer: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', gap: 16, backgroundColor: "#FAF9F6", padding: 16, borderRadius: 18, paddingTop: 20 }, userInfo: { flexDirection: 'row', alignItems: 'center', padding: 16, }, medal: { marginLeft: 16, }, backButton: { padding: 4, }, headerTitle: { fontSize: 18, fontWeight: '600', color: '#333', }, content: { flex: 1, }, profileSection: { backgroundColor: '#fff', padding: 20, flexDirection: 'row', alignItems: 'center', marginBottom: 10, }, avatarContainer: { marginRight: 16, }, avatar: { width: 70, height: 70, borderRadius: 35, borderWidth: 2, borderColor: '#FFD38D', }, profileInfo: { flex: 1, }, userName: { fontSize: 18, fontWeight: '600', color: '#333', marginBottom: 4, }, userPhone: { fontSize: 14, color: '#666', }, editButton: { flexDirection: 'row', alignItems: 'center', padding: 8, borderWidth: 1, borderColor: '#eee', borderRadius: 15, }, editButtonText: { marginLeft: 4, color: '#666', fontSize: 14, }, menuContainer: { backgroundColor: '#fff', paddingHorizontal: 16, }, menuItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 16, borderBottomWidth: 1, borderBottomColor: '#f5f5f5', }, menuItemText: { flex: 1, marginLeft: 12, fontSize: 16, color: '#333', }, arrowIcon: { marginLeft: 'auto', }, });