diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..b6b9e95 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,110 @@ + + - [x] Verify that the copilot-instructions.md file in the .github directory is created. + +- [x] Clarify Project Requirements + + +- [x] Scaffold the Project + + +- [ ] Customize the Project + + +- [ ] Install Required Extensions + + + - [x] Compile the Project + + + - [x] Create and Run Task + + + - [x] Launch the Project + + +- [ ] Ensure Documentation is Complete + + + +- Work through each checklist item systematically. +- Keep communication concise and focused. +- Follow development best practices. diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..570ce78 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "dev", + "type": "shell", + "command": "cmd", + "args": [ + "/c", + "set PATH=C:\\Users\\sa\\node-portable\\nodejs;%PATH% && npm run dev" + ], + "isBackground": true + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 911e79f..ce15999 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "corp.front", "version": "0.1.0", "dependencies": { + "lucide-react": "^0.574.0", "next": "16.1.6", "react": "19.2.3", "react-dom": "19.2.3" @@ -4535,6 +4536,14 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.574.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.574.0.tgz", + "integrity": "sha512-dJ8xb5juiZVIbdSn3HTyHsjjIwUwZ4FNwV0RtYDScOyySOeie1oXZTymST6YPJ4Qwt3Po8g4quhYl4OxtACiuQ==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", diff --git a/package.json b/package.json index 5a54f4d..13ed780 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "eslint" }, "dependencies": { + "lucide-react": "^0.574.0", "next": "16.1.6", "react": "19.2.3", "react-dom": "19.2.3" diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..52d84ec Binary files /dev/null and b/public/logo.png differ diff --git a/public/logo.webp b/public/logo.webp new file mode 100644 index 0000000..09dd9eb Binary files /dev/null and b/public/logo.webp differ diff --git a/public/logo1.svg b/public/logo1.svg new file mode 100644 index 0000000..33aab17 --- /dev/null +++ b/public/logo1.svg @@ -0,0 +1,195 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/departments/page.tsx b/src/app/departments/page.tsx new file mode 100644 index 0000000..eac2f5b --- /dev/null +++ b/src/app/departments/page.tsx @@ -0,0 +1,10 @@ +export default function DepartmentsPage() { + return ( +
+
+

Отделы

+

Раздел в разработке. Здесь будут списки отделов и контакты.

+
+
+ ); +} diff --git a/src/app/documents/page.tsx b/src/app/documents/page.tsx new file mode 100644 index 0000000..47754e3 --- /dev/null +++ b/src/app/documents/page.tsx @@ -0,0 +1,10 @@ +export default function DocumentsPage() { + return ( +
+
+

Документы

+

Раздел в разработке. Здесь будут договоры, отчёты и файлы.

+
+
+ ); +} diff --git a/src/app/employees/page.tsx b/src/app/employees/page.tsx new file mode 100644 index 0000000..609c6b9 --- /dev/null +++ b/src/app/employees/page.tsx @@ -0,0 +1,192 @@ +"use client"; + +import { Bell, Building2, FileSignature, FileText, Home as HomeIcon, MessageSquare, Search, Users, Wallet } from "lucide-react"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +const employees = [ + { id: 1, name: "Константин Макаев", role: "Руководитель проектов", status: "Онлайн", department: "ИТ" }, + { id: 2, name: "Виктория Зацарина", role: "Дизайнер", status: "Недавно", department: "Маркетинг" }, + { id: 3, name: "Алексей Пономарёв", role: "Разработчик", status: "Оффлайн", department: "ИТ" }, + { id: 4, name: "Эдуард Иванов", role: "Директор", status: "Онлайн", department: "Финансы" }, +]; + +const weekdays = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]; + +const calendarWeeks = [ + ["", "", "", "", "1", "2", "3"], + ["4", "5", "6", "7", "8", "9", "10"], + ["11", "12", "13", "14", "15", "16", "17"], + ["18", "19", "20", "21", "22", "23", "24"], + ["25", "26", "27", "28", "", "", ""], +]; + +export default function EmployeesPage() { + const pathname = usePathname(); + const sortedEmployees = [...employees].sort((a, b) => a.name.localeCompare(b.name, "ru")); + + const navLinkClass = (href: string) => + `flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-50 ${ + pathname === href ? "bg-sky-50 text-sky-700 ring-1 ring-sky-100" : "text-gray-700" + }`; + + const navIconClass = (href: string) => (pathname === href ? "text-sky-700" : "text-gray-400"); + + return ( +
+
+
+
+ Логотип +
+
+
+ + +
+
+
+ +
КМ
+
+
+
+ +
+ + +
+
+
+
+

Команда

+

Сотрудники

+
+
Всего: {employees.length}
+
+
+ +
+ {sortedEmployees.map((employee) => { + const isOnline = employee.status === "Онлайн"; + const statusColor = isOnline ? "text-green-600" : employee.status === "Недавно" ? "text-amber-600" : "text-gray-500"; + const dotColor = isOnline ? "bg-green-500" : employee.status === "Недавно" ? "bg-amber-500" : "bg-gray-400"; + + return ( +
+
+ {employee.name + .split(" ") + .slice(0, 2) + .map((part) => part[0]) + .join("")} +
+
+

{employee.name}

+

{employee.role}

+
+ + {employee.status} + • + {employee.department} +
+
+
+ ); + })} +
+
+ + +
+
+ ); +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 718d6fe..5a0f9fd 100644 Binary files a/src/app/favicon.ico and b/src/app/favicon.ico differ diff --git a/src/app/finances/page.tsx b/src/app/finances/page.tsx new file mode 100644 index 0000000..82c2c71 --- /dev/null +++ b/src/app/finances/page.tsx @@ -0,0 +1,10 @@ +export default function FinancesPage() { + return ( +
+
+

Финансы

+

Раздел в разработке. Здесь появится аналитика и отчётность.

+
+
+ ); +} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..eef6e31 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,74 @@ +import Link from "next/link"; + +export default function Login() { + return ( +
+
+
+

+ Войти в аккаунт +

+

+ Используйте телефон или почту, чтобы продолжить. +

+ +
+
+ + +
+
+ + +
+
+ + + Забыли пароль? + +
+ + + Создать аккаунт + +
+

+ Продолжая, вы соглашаетесь с условиями использования и подтверждаете ознакомление с политикой конфиденциальности. +

+
+
+
+ ); +} diff --git a/src/app/messages/page.tsx b/src/app/messages/page.tsx new file mode 100644 index 0000000..f932cb5 --- /dev/null +++ b/src/app/messages/page.tsx @@ -0,0 +1,10 @@ +export default function MessagesPage() { + return ( +
+
+

Сообщения

+

Раздел в разработке. Здесь появятся чаты и диалоги.

+
+
+ ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx index 295f8fd..35c42b7 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,65 +1,241 @@ -import Image from "next/image"; +"use client"; + +import { Bell, Bookmark, Building2, FileSignature, FileText, Heart, HeartHandshake, Home as HomeIcon, MessageSquare, Search, Star, Users, Wallet } from "lucide-react"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +const feedItems = [ + { + id: 1, + author: "Алексей Пономарёв", + time: "2 часа назад", + text: "Обновил подборку треков для фокуса. Делюсь плейлистом, если тоже любите работать под легкий электро." , + tags: ["Музыка", "Работа"], + actions: { likes: 42, comments: 8, saves: 5 }, + }, + { + id: 2, + author: "Виктория Зацарина", + time: "3 часа назад", + text: "Собрали командой фотографии с последней пробежки в парке. Город оживает, когда выходит солнце." , + tags: ["Спорт", "Фото"], + actions: { likes: 65, comments: 12, saves: 7 }, + }, + { + id: 3, + author: "Unity C#", + time: "5 часов назад", + text: "Сегодня делимся лучшими гайдами по микроанимациям в интерфейсах. Собрали 7 примеров с кодом и видео." , + tags: ["Дизайн", "Guides"], + actions: { likes: 88, comments: 16, saves: 21 }, + }, +]; + +const weekdays = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]; + +const calendarWeeks = [ + ["", "", "", "", "1", "2", "3"], + ["4", "5", "6", "7", "8", "9", "10"], + ["11", "12", "13", "14", "15", "16", "17"], + ["18", "19", "20", "21", "22", "23", "24"], + ["25", "26", "27", "28", "", "", ""], +]; export default function Home() { + const pathname = usePathname(); + + const navLinkClass = (href: string) => + `flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-50 ${ + pathname === href ? "bg-sky-50 text-sky-700 ring-1 ring-sky-100" : "text-gray-700" + }`; + + const navIconClass = (href: string) => (pathname === href ? "text-sky-700" : "text-gray-400"); + return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
-
- - Vercel logomark +
+
+ +
+
+ + +
+
+ +
+ +
+ КМ +
+
-
+ + +
+ + +
+
+
+
+ КМ +
+
+ + +
+
+
+ Статья + Фото + Ссылка + Опрос + Событие +
+
+ +
+ {feedItems.map((item) => ( +
+
+
+
+ {item.author[0]} +
+
+

{item.author}

+

{item.time}

+
+
+
+

{item.text}

+
+ {item.tags.map((tag) => ( + + {tag} + + ))} +
+
+ + + +
+
+ ))} +
+
+ + +
); } diff --git a/src/app/register/page.tsx b/src/app/register/page.tsx new file mode 100644 index 0000000..788e8f3 --- /dev/null +++ b/src/app/register/page.tsx @@ -0,0 +1,111 @@ +import Link from "next/link"; + +export default function Register() { + return ( +
+
+
+

+ Регистрация +

+

+ Создайте новый аккаунт, указав имя и контактные данные. +

+ +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + + + + Уже есть аккаунт? Войти + +
+

+ Регистрируясь, вы принимаете условия использования и подтверждаете ознакомление с политикой конфиденциальности. +

+
+
+
+ ); +} diff --git a/src/app/requests/page.tsx b/src/app/requests/page.tsx new file mode 100644 index 0000000..b9e1443 --- /dev/null +++ b/src/app/requests/page.tsx @@ -0,0 +1,10 @@ +export default function RequestsPage() { + return ( +
+
+

Заявления

+

Раздел в разработке. Здесь появятся заявки и согласования.

+
+
+ ); +}