test version for review
This commit is contained in:
@ -25,7 +25,7 @@ export default function ContactsPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<div className="max-w-7xl mx-auto py-8">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Контакты</h1>
|
<h1 className="text-4xl font-bold text-gray-900 mb-4">Контакты</h1>
|
||||||
<p className="text-lg text-gray-600">
|
<p className="text-lg text-gray-600">
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { Inter } from "next/font/google";
|
import { Inter } from "next/font/google";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import Header from "@/components/Header";
|
import SidebarClient from "@/components/SidebarClient";
|
||||||
import Footer from "@/components/Footer";
|
import Footer from "@/components/Footer";
|
||||||
|
|
||||||
const inter = Inter({
|
const inter = Inter({
|
||||||
@ -20,12 +20,16 @@ export default function RootLayout({
|
|||||||
}>) {
|
}>) {
|
||||||
return (
|
return (
|
||||||
<html lang="ru">
|
<html lang="ru">
|
||||||
<body className={`${inter.className} antialiased min-h-screen flex flex-col`}>
|
<body className={`${inter.className} antialiased min-h-screen`}>
|
||||||
<Header />
|
<div className="flex min-h-screen">
|
||||||
<main className="flex-1">
|
<SidebarClient />
|
||||||
|
<div className="flex-1 flex flex-col">
|
||||||
|
<main className="flex-1 p-6">
|
||||||
{children}
|
{children}
|
||||||
</main>
|
</main>
|
||||||
<Footer />
|
<Footer />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export default function Home() {
|
|||||||
const activeProjects = mockProjects.filter(p => p.status === 'active').slice(0, 2);
|
const activeProjects = mockProjects.filter(p => p.status === 'active').slice(0, 2);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<div className="max-w-7xl mx-auto py-8">
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="text-center py-16 bg-gradient-to-r from-blue-50 to-indigo-50 rounded-lg mb-12">
|
<section className="text-center py-16 bg-gradient-to-r from-blue-50 to-indigo-50 rounded-lg mb-12">
|
||||||
<h1 className="text-4xl md:text-6xl font-bold text-gray-900 mb-6">
|
<h1 className="text-4xl md:text-6xl font-bold text-gray-900 mb-6">
|
||||||
@ -22,7 +22,7 @@ export default function Home() {
|
|||||||
href="/publications"
|
href="/publications"
|
||||||
className="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition-colors inline-block"
|
className="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition-colors inline-block"
|
||||||
>
|
>
|
||||||
Наши публикации
|
Новости и публикации
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="/projects"
|
href="/projects"
|
||||||
@ -60,7 +60,7 @@ export default function Home() {
|
|||||||
<div className="flex justify-between items-center mb-6">
|
<div className="flex justify-between items-center mb-6">
|
||||||
<h2 className="text-3xl font-bold text-gray-900">Последние публикации</h2>
|
<h2 className="text-3xl font-bold text-gray-900">Последние публикации</h2>
|
||||||
<Link href="/publications" className="text-blue-600 hover:text-blue-800">
|
<Link href="/publications" className="text-blue-600 hover:text-blue-800">
|
||||||
Все публикации →
|
Все новости и публикации →
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-4">
|
<div className="grid gap-4">
|
||||||
|
|||||||
@ -6,7 +6,7 @@ export default function ProjectsPage() {
|
|||||||
const completedProjects = mockProjects.filter(p => p.status === 'completed');
|
const completedProjects = mockProjects.filter(p => p.status === 'completed');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<div className="max-w-7xl mx-auto py-8">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Проекты</h1>
|
<h1 className="text-4xl font-bold text-gray-900 mb-4">Проекты</h1>
|
||||||
<p className="text-lg text-gray-600">
|
<p className="text-lg text-gray-600">
|
||||||
|
|||||||
@ -33,11 +33,11 @@ export default function PublicationsPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<div className="max-w-7xl mx-auto py-8">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Публикации</h1>
|
<h1 className="text-4xl font-bold text-gray-900 mb-4">Новости и публикации</h1>
|
||||||
<p className="text-lg text-gray-600">
|
<p className="text-lg text-gray-600">
|
||||||
Научные работы и публикации сотрудников отдела радиофотоники
|
Новости отдела и научные работы сотрудников отдела радиофотоники
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
33
frontend/src/app/rid/page.tsx
Normal file
33
frontend/src/app/rid/page.tsx
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
export default function RIDPage() {
|
||||||
|
return (
|
||||||
|
<div className="max-w-4xl mx-auto">
|
||||||
|
<h1 className="text-3xl font-bold text-gray-900 mb-8">
|
||||||
|
РИД - Результаты интеллектуальной деятельности
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
||||||
|
<div className="prose max-w-none">
|
||||||
|
<p className="text-lg text-gray-600 mb-6">
|
||||||
|
Здесь представлены результаты интеллектуальной деятельности отдела радиофотоники.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-2xl font-semibold text-gray-900 mb-4">Патенты</h2>
|
||||||
|
<div className="space-y-4">
|
||||||
|
<div className="border-l-4 border-blue-500 pl-4">
|
||||||
|
<h3 className="font-medium text-gray-900">Патент на изобретение</h3>
|
||||||
|
<p className="text-gray-600">Описание патента будет добавлено позднее</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 className="text-2xl font-semibold text-gray-900 mb-4 mt-8">Программные продукты</h2>
|
||||||
|
<div className="space-y-4">
|
||||||
|
<div className="border-l-4 border-green-500 pl-4">
|
||||||
|
<h3 className="font-medium text-gray-900">Программное обеспечение</h3>
|
||||||
|
<p className="text-gray-600">Описание программного продукта будет добавлено позднее</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -4,7 +4,7 @@ import Image from 'next/image';
|
|||||||
|
|
||||||
export default function StaffPage() {
|
export default function StaffPage() {
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<div className="max-w-7xl mx-auto py-8">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Сотрудники</h1>
|
<h1 className="text-4xl font-bold text-gray-900 mb-4">Сотрудники</h1>
|
||||||
<p className="text-lg text-gray-600">
|
<p className="text-lg text-gray-600">
|
||||||
|
|||||||
46
frontend/src/app/students/page.tsx
Normal file
46
frontend/src/app/students/page.tsx
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
export default function StudentsPage() {
|
||||||
|
return (
|
||||||
|
<div className="max-w-4xl mx-auto">
|
||||||
|
<h1 className="text-3xl font-bold text-gray-900 mb-8">
|
||||||
|
Студентам
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div className="grid gap-6">
|
||||||
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
||||||
|
<h2 className="text-2xl font-semibold text-gray-900 mb-4">
|
||||||
|
Учебные материалы
|
||||||
|
</h2>
|
||||||
|
<div className="prose max-w-none">
|
||||||
|
<p className="text-gray-600 mb-4">
|
||||||
|
Здесь представлены учебные материалы, методические пособия и другие ресурсы для студентов.
|
||||||
|
</p>
|
||||||
|
<ul className="list-disc list-inside space-y-2">
|
||||||
|
<li>Лекционные материалы по радиофотонике</li>
|
||||||
|
<li>Лабораторные работы</li>
|
||||||
|
<li>Методические указания</li>
|
||||||
|
<li>Список рекомендуемой литературы</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
||||||
|
<h2 className="text-2xl font-semibold text-gray-900 mb-4">
|
||||||
|
Практика и стажировки
|
||||||
|
</h2>
|
||||||
|
<p className="text-gray-600">
|
||||||
|
Информация о возможностях прохождения практики и стажировок в отделе радиофотоники.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
||||||
|
<h2 className="text-2xl font-semibold text-gray-900 mb-4">
|
||||||
|
Дипломные работы
|
||||||
|
</h2>
|
||||||
|
<p className="text-gray-600">
|
||||||
|
Темы дипломных работ и требования к их выполнению.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
44
frontend/src/components/Sidebar.tsx
Normal file
44
frontend/src/components/Sidebar.tsx
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import Link from 'next/link'
|
||||||
|
import { usePathname } from 'next/navigation'
|
||||||
|
|
||||||
|
const menuItems = [
|
||||||
|
{ href: '/', label: 'Главная' },
|
||||||
|
{ href: '/publications', label: 'Новости и публикации' },
|
||||||
|
{ href: '/rid', label: 'РИД' },
|
||||||
|
{ href: '/staff', label: 'Сотрудники' },
|
||||||
|
{ href: '/projects', label: 'Проекты' },
|
||||||
|
{ href: '/students', label: 'Студентам' },
|
||||||
|
{ href: '/contacts', label: 'Контакты' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export default function Sidebar() {
|
||||||
|
const pathname = usePathname()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<aside className="w-64 bg-white shadow-sm border-r min-h-screen">
|
||||||
|
<div className="p-6">
|
||||||
|
<Link href="/" className="text-xl font-bold text-gray-900 block mb-8">
|
||||||
|
Отдел Радиофотоники
|
||||||
|
</Link>
|
||||||
|
<nav className="space-y-2">
|
||||||
|
{menuItems.map((item) => {
|
||||||
|
const isActive = pathname === item.href
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
key={item.href}
|
||||||
|
href={item.href}
|
||||||
|
className={`block px-4 py-3 rounded-lg text-sm font-medium transition-colors ${
|
||||||
|
isActive
|
||||||
|
? 'bg-blue-50 text-blue-700 border-l-4 border-blue-700'
|
||||||
|
: 'text-gray-700 hover:bg-gray-50 hover:text-blue-600'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
)
|
||||||
|
}
|
||||||
46
frontend/src/components/SidebarClient.tsx
Normal file
46
frontend/src/components/SidebarClient.tsx
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
'use client'
|
||||||
|
|
||||||
|
import Link from 'next/link'
|
||||||
|
import { usePathname } from 'next/navigation'
|
||||||
|
|
||||||
|
const menuItems = [
|
||||||
|
{ href: '/', label: 'Главная' },
|
||||||
|
{ href: '/publications', label: 'Новости и публикации' },
|
||||||
|
{ href: '/rid', label: 'РИД' },
|
||||||
|
{ href: '/staff', label: 'Сотрудники' },
|
||||||
|
{ href: '/projects', label: 'Проекты' },
|
||||||
|
{ href: '/students', label: 'Студентам' },
|
||||||
|
{ href: '/contacts', label: 'Контакты' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export default function SidebarClient() {
|
||||||
|
const pathname = usePathname()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<aside className="w-64 bg-white shadow-sm border-r min-h-screen">
|
||||||
|
<div className="p-6">
|
||||||
|
<Link href="/" className="text-xl font-bold text-gray-900 block mb-8">
|
||||||
|
Отдел Радиофотоники
|
||||||
|
</Link>
|
||||||
|
<nav className="space-y-2">
|
||||||
|
{menuItems.map((item) => {
|
||||||
|
const isActive = pathname === item.href
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
key={item.href}
|
||||||
|
href={item.href}
|
||||||
|
className={`block px-4 py-3 rounded-lg text-sm font-medium transition-colors ${
|
||||||
|
isActive
|
||||||
|
? 'bg-blue-50 text-blue-700 border-l-4 border-blue-700'
|
||||||
|
: 'text-gray-700 hover:bg-gray-50 hover:text-blue-600'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user