feat: implement batch team owner pooling functionality with dedicated upload, processing, logging, and results pages.

This commit is contained in:
2026-01-30 08:57:16 +08:00
parent 9dfa61ac05
commit 6d236419b9
11 changed files with 477 additions and 693 deletions

View File

@@ -10,10 +10,6 @@ interface TeamOwner {
created_at: string
}
interface OwnerListProps {
apiBase?: string
}
const statusColors: Record<string, string> = {
valid: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
registered: 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400',
@@ -26,7 +22,7 @@ const statusLabels: Record<string, string> = {
pooled: '已入库',
}
export default function OwnerList({ apiBase = 'http://localhost:8088' }: OwnerListProps) {
export default function OwnerList() {
const [owners, setOwners] = useState<TeamOwner[]>([])
const [total, setTotal] = useState(0)
const [loading, setLoading] = useState(false)
@@ -45,7 +41,7 @@ export default function OwnerList({ apiBase = 'http://localhost:8088' }: OwnerLi
params.set('status', filter)
}
const res = await fetch(`${apiBase}/api/db/owners?${params}`)
const res = await fetch(`/api/db/owners?${params}`)
const data = await res.json()
if (data.code === 0) {
setOwners(data.data.owners || [])
@@ -65,7 +61,7 @@ export default function OwnerList({ apiBase = 'http://localhost:8088' }: OwnerLi
const handleDelete = async (id: number) => {
if (!confirm('确认删除此账号?')) return
try {
await fetch(`${apiBase}/api/db/owners/${id}`, { method: 'DELETE' })
await fetch(`/api/db/owners/${id}`, { method: 'DELETE' })
loadOwners()
} catch (e) {
console.error('Failed to delete:', e)
@@ -75,7 +71,7 @@ export default function OwnerList({ apiBase = 'http://localhost:8088' }: OwnerLi
const handleClearAll = async () => {
if (!confirm('确认清空所有账号?此操作不可恢复!')) return
try {
await fetch(`${apiBase}/api/db/owners/clear`, { method: 'POST' })
await fetch('/api/db/owners/clear', { method: 'POST' })
loadOwners()
} catch (e) {
console.error('Failed to clear:', e)