import React from 'react'; import { IntelligenceItem, University1415Dimension, JobEntity } from '../types/futures'; import { PageHeader } from '../components/common/PageHeader'; import { toPersianDigits, getHorizonLabelFa } from '../utils/persianNumbers'; import { CATEGORY_META, CATEGORY_ORDER } from '../utils/categories'; import { HORIZON_START, HORIZON_END } from '../utils/horizon'; import { Card } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Printer } from 'lucide-react'; interface ReportsPageProps { items: IntelligenceItem[]; dimensions: University1415Dimension[]; jobs: JobEntity[]; } export const ReportsPage: React.FC = ({ items, dimensions, jobs }) => { const criticalItems = items.filter( (i) => i.status === 'critical' || i.impactScore === 5 ); const byGap = [...dimensions].sort((a, b) => b.gap - a.gap); const avgReadiness = dimensions.length ? Math.round( dimensions.reduce((acc, d) => acc + d.readinessPercentage, 0) / dimensions.length ) : 0; const growingJobs = jobs.filter((j) => j.type === 'growing').length; return (
window.print()}> چاپ } />
{/* Document header */}

رادار آینده دانشگاه اصفهان — گزارش وضعیت

افق راهبردی {toPersianDigits(HORIZON_START)} تا {toPersianDigits(HORIZON_END)}

{/* Figures, all derived from the dataset. */}
در یک نگاه
{CATEGORY_ORDER.map((cat) => { const meta = CATEGORY_META[cat]; const count = items.filter((i) => i.category === cat).length; return (
{meta.label}
{toPersianDigits(count)}
); })}
{/* Critical items */} {criticalItems.length > 0 && (
مواردی که نیازمند تصمیم‌اند
عنوان دسته افق اثر پیامد {criticalItems.map((item) => ( {item.title} {CATEGORY_META[item.category].label} {getHorizonLabelFa(item.horizon)} {toPersianDigits(item.impactScore)}/۵ {item.whyItMatters} ))}
)} {/* Gap matrix */}
شکاف ویژگی‌های {toPersianDigits(HORIZON_END)}
{byGap.map((dim) => (
{dim.title} شکاف {toPersianDigits(dim.gap)}
موجود {toPersianDigits(dim.currentScore)}/۱۰ هدف {toPersianDigits(dim.targetScore)}/۱۰ {toPersianDigits(dim.readinessPercentage)}٪ آمادگی
{dim.strategicRecommendations[0] && (

اقدام پیشنهادی: {dim.strategicRecommendations[0]}

)}
))}
); }; const SectionTitle: React.FC<{ children: React.ReactNode }> = ({ children }) => (

{children}

); const Figure: React.FC<{ label: string; value: string }> = ({ label, value }) => (
{label}
{value}
);