Files
gongxue-base/apps/taro/src/pages/tenant-admin/content/index.tsx
2026-06-29 12:15:56 +08:00

76 lines
3.6 KiB
TypeScript

import { useEffect, useState } from 'react';
import { Text, View } from '@tarojs/components';
import { loadContentEntriesAdmin, loadImportJobs, loadPublicQuestionBanks, type ContentEntryAdminItem, type ImportJobItem, type PublicQuestionBankItem } from '@/services/tenantAdmin';
import '../admin.css';
export default function TenantContentPage() {
const [entries, setEntries] = useState<ContentEntryAdminItem[]>([]);
const [jobs, setJobs] = useState<ImportJobItem[]>([]);
const [publicBanks, setPublicBanks] = useState<PublicQuestionBankItem[]>([]);
const [error, setError] = useState('');
useEffect(() => {
Promise.all([
loadContentEntriesAdmin().catch(() => ({ items: [] })),
loadImportJobs(20).catch(() => ({ items: [] })),
loadPublicQuestionBanks().catch(() => ({ items: [] })),
]).then(([entryPayload, jobPayload, bankPayload]) => {
setEntries(entryPayload.items || []);
setJobs(jobPayload.items || []);
setPublicBanks(bankPayload.items || []);
}).catch(nextError => setError(nextError instanceof Error ? nextError.message : '内容数据加载失败'));
}, []);
return (
<View className='admin-page'>
<View className='admin-shell'>
<View className='admin-header'>
<Text className='admin-kicker'>Content</Text>
<Text className='admin-title'></Text>
<Text className='admin-subtitle'></Text>
</View>
<View className='admin-section'>
<Text className='admin-section-title'></Text>
<View className='admin-list'>
{entries.map(item => (
<View className='admin-row' key={item.id}>
<Text className='admin-row-main'>{item.name}</Text>
<Text className='admin-row-meta'>{item.entryType || 'entry'} · {item.visibility || 'visible'} · {item.isActive === false ? '停用' : '启用'}</Text>
</View>
))}
</View>
{!entries.length ? <View className='admin-empty'></View> : null}
</View>
<View className='admin-section'>
<Text className='admin-section-title'></Text>
<View className='admin-list'>
{jobs.map(item => (
<View className='admin-row' key={item.id}>
<Text className='admin-row-main'>{item.importType || 'import'} · {item.status || 'unknown'}</Text>
<Text className='admin-row-meta'> {item.totalCount || 0} · {item.successCount || 0} · {item.errorCount || 0} · {item.warningCount || 0}</Text>
</View>
))}
</View>
{!jobs.length ? <View className='admin-empty'></View> : null}
</View>
<View className='admin-section'>
<Text className='admin-section-title'></Text>
<View className='admin-list'>
{publicBanks.map((item, index) => (
<View className='admin-row' key={item.grantId || item.sourceQuestionBankId || index}>
<Text className='admin-row-main'>{item.name || '公共题库'}</Text>
<Text className='admin-row-meta'>{item.regionName || '通用'} · {item.grantScope || '授权'} · {item.adoption ? '已采纳' : '可采纳'}</Text>
</View>
))}
</View>
{!publicBanks.length ? <View className='admin-empty'></View> : null}
</View>
{error ? <Text className='admin-error'>{error}</Text> : null}
</View>
</View>
);
}