import React, { useState, useEffect, useCallback } from 'react' import { View, Text, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import Badge from '@/components/common/Badge' import { useUser } from '@/hooks/useUser' import { getMyApps } from '@/api/app/appProduct' import { getAppApiKeyStats } from '@/api/app/apikey' import { getMyTickets } from '@/api/app/ticket' import { getPageTotal } from '@/utils/devcenter' definePageConfig({ navigationBarTitleText: '开发者中心', }) // 功能卡片定义(未来新增功能只需在这里加一项) const FEATURE_CARDS = [ { key: 'apps', icon: '📦', title: '我的应用', desc: '管理你开发并上架的应用', url: '/pages/developer/apps/index', color: '#3b82f6', bgColor: '#dbeafe', showBadge: true, }, { key: 'apikeys', icon: '🔑', title: 'API Key', desc: '查看与管理你的接口密钥', url: '/pages/developer/apikeys/index', color: '#10b981', bgColor: '#dcfce7', showBadge: true, }, { key: 'tickets', icon: '🎫', title: '我的工单', desc: '提交与跟踪你的工单', url: '/pages/developer/tickets/index', color: '#f59e0b', bgColor: '#fef3c7', showBadge: true, }, ] export default function DeveloperCenterPage() { const { user, isLoggedIn, loading: userLoading } = useUser() const isDeveloper = !!(user as any)?.isDeveloper const [stats, setStats] = useState({ apps: 0, keys: 0, tickets: 0 }) useEffect(() => { if (isLoggedIn && isDeveloper) { load() } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isLoggedIn, isDeveloper]) /** 加载我的应用 / API Key / 工单数量 */ const load = useCallback(async () => { try { const [appsR, keysR, ticketsR] = await Promise.allSettled([ getMyApps({ page: 1, limit: 1 }), getAppApiKeyStats(), getMyTickets({ page: 1, limit: 1 }), ]) const apps = appsR.status === 'fulfilled' ? getPageTotal(appsR.value) : 0 const keys = keysR.status === 'fulfilled' ? getPageTotal(keysR.value) : 0 const tickets = ticketsR.status === 'fulfilled' ? getPageTotal(ticketsR.value) : 0 setStats({ apps, keys, tickets }) } catch { // ignore } }, []) /** 获取卡片角标数字 */ const getBadgeCount = (key: string) => { if (key === 'apps') return stats.apps if (key === 'apikeys') return stats.keys if (key === 'tickets') return stats.tickets return 0 } if (userLoading) { return ( 加载中... ) } if (!isLoggedIn) { return ( 🔐 请先登录 登录后方可进入开发者中心 ) } if (!isDeveloper) { return ( 🛠️ 尚未加入开发者中心 开发者中心提供应用管理、API Key、工单等能力,请先申请开发者资质 Taro.navigateTo({ url: '/pages/user/vip-upgrade/index' })} > 申请成为开发者 ) } // 头部展示信息 const header = { avatar: (user as any)?.avatar, title: '开发者中心', subtitle: `${((user as any)?.nickname || (user as any)?.username || '')}${((user as any)?.phone) ? ` · ${(user as any).phone}` : ''}`, } return ( {/* 顶部信息区:头像 + 名称 */} {/* 头像 */} {header.avatar ? ( ) : ( 👤 )} {/* 信息 */} {header.title} {header.subtitle} {/* 功能卡片区 */} {FEATURE_CARDS.map(card => ( Taro.navigateTo({ url: card.url })} > {/* 图标 */} {card.icon} {/* 文字 */} {card.title} {card.desc} {/* 数量角标 */} {card.showBadge && ( )} {/* 箭头 */} ))} {/* 底部提示 */} {/* 开发者帮助 */} Taro.navigateTo({ url: '/pages/user/help-center/index' })} > 💡 开发者帮助与支持 查看接口文档、SDK 与常见问题 查看 ) }