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 与常见问题
查看
)
}