Создал странички ленты и сотрудников.
This commit is contained in:
parent
cf2ea7893a
commit
621d73257c
110
.github/copilot-instructions.md
vendored
Normal file
110
.github/copilot-instructions.md
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
<!-- Use this file to provide workspace-specific custom instructions to Copilot. For more details, visit https://code.visualstudio.com/docs/copilot/copilot-customization#_use-a-githubcopilotinstructionsmd-file -->
|
||||
- [x] Verify that the copilot-instructions.md file in the .github directory is created.
|
||||
|
||||
- [x] Clarify Project Requirements
|
||||
<!-- Ask for project type, language, and frameworks if not specified. Skip if already provided. -->
|
||||
|
||||
- [x] Scaffold the Project
|
||||
<!--
|
||||
Ensure that the previous step has been marked as completed.
|
||||
Call project setup tool with projectType parameter.
|
||||
Run scaffolding command to create project files and folders.
|
||||
Use '.' as the working directory.
|
||||
If no appropriate projectType is available, search documentation using available tools.
|
||||
Otherwise, create the project structure manually using available file creation tools.
|
||||
-->
|
||||
|
||||
- [ ] Customize the Project
|
||||
<!--
|
||||
Verify that all previous steps have been completed successfully and you have marked the step as completed.
|
||||
Develop a plan to modify codebase according to user requirements.
|
||||
Apply modifications using appropriate tools and user-provided references.
|
||||
Skip this step for "Hello World" projects.
|
||||
-->
|
||||
|
||||
- [ ] Install Required Extensions
|
||||
<!-- ONLY install extensions provided mentioned in the get_project_setup_info. Skip this step otherwise and mark as completed. -->
|
||||
|
||||
- [x] Compile the Project
|
||||
<!--
|
||||
Verify that all previous steps have been completed.
|
||||
Install any missing dependencies.
|
||||
Run diagnostics and resolve any issues.
|
||||
Check for markdown files in project folder for relevant instructions on how to do this.
|
||||
-->
|
||||
|
||||
- [x] Create and Run Task
|
||||
<!--
|
||||
Verify that all previous steps have been completed.
|
||||
Check https://code.visualstudio.com/docs/debugtest/tasks to determine if the project needs a task. If so, use the create_and_run_task to create and launch a task based on package.json, README.md, and project structure.
|
||||
Skip this step otherwise.
|
||||
-->
|
||||
|
||||
- [x] Launch the Project
|
||||
<!--
|
||||
Verify that all previous steps have been completed.
|
||||
Prompt user for debug mode, launch only if confirmed.
|
||||
-->
|
||||
|
||||
- [ ] Ensure Documentation is Complete
|
||||
<!--
|
||||
Verify that all previous steps have been completed.
|
||||
Verify that README.md and the copilot-instructions.md file in the .github directory exists and contains current project information.
|
||||
Clean up the copilot-instructions.md file in the .github directory by removing all HTML comments.
|
||||
-->
|
||||
|
||||
<!--
|
||||
## Execution Guidelines
|
||||
PROGRESS TRACKING:
|
||||
- If any tools are available to manage the above todo list, use it to track progress through this checklist.
|
||||
- After completing each step, mark it complete and add a summary.
|
||||
- Read current todo list status before starting each new step.
|
||||
|
||||
COMMUNICATION RULES:
|
||||
- Avoid verbose explanations or printing full command outputs.
|
||||
- If a step is skipped, state that briefly (e.g. "No extensions needed").
|
||||
- Do not explain project structure unless asked.
|
||||
- Keep explanations concise and focused.
|
||||
|
||||
DEVELOPMENT RULES:
|
||||
- Use '.' as the working directory unless user specifies otherwise.
|
||||
- Avoid adding media or external links unless explicitly requested.
|
||||
- Use placeholders only with a note that they should be replaced.
|
||||
- If the user has not specified project details, assume they want a "Hello World" project as a starting point.
|
||||
- Avoid adding links of any type (URLs, files, folders, etc.) or integrations that are not explicitly required.
|
||||
- Avoid generating images, videos, or any other media files unless explicitly requested.
|
||||
- If you need to use any media assets as placeholders, let the user know that these are placeholders and should be replaced with the actual assets later.
|
||||
- Ensure all generated components serve a clear purpose within the user's requested workflow.
|
||||
- If a feature is assumed but not confirmed, prompt the user for clarification before including it.
|
||||
- If you are working on a VS Code extension, use the VS Code API tool with a query to find relevant VS Code API references and samples related to that query.
|
||||
|
||||
FOLDER CREATION RULES:
|
||||
- Always use the current directory as the project root.
|
||||
- If you are running any terminal commands, use the '.' argument to ensure that the current working directory is used ALWAYS.
|
||||
- Do not create a new folder unless the user explicitly requests it besides a .vscode folder for a tasks.json file.
|
||||
- If any of the scaffolding commands mention that the folder name is not correct, let the user know to create a new folder with the correct name and then reopen it again in vscode.
|
||||
|
||||
EXTENSION INSTALLATION RULES:
|
||||
- Only install extension specified by the get_project_setup_info tool. DO NOT INSTALL any other extensions.
|
||||
|
||||
PROJECT CONTENT RULES:
|
||||
- If the user has not specified project details, assume they want a "Hello World" project as a starting point.
|
||||
- Avoid adding links of any type (URLs, files, folders, etc.) or integrations that are not explicitly required.
|
||||
- Avoid generating images, videos, or any other media files unless explicitly requested.
|
||||
- If you need to use any media assets as placeholders, let the user know that these are placeholders and should be replaced with the actual assets later.
|
||||
- Ensure all generated components serve a clear purpose within the user's requested workflow.
|
||||
- If a feature is assumed but not confirmed, prompt the user for clarification before including it.
|
||||
- If you are working on a VS Code extension, use the VS Code API tool with a query to find relevant VS Code API references and samples related to that query.
|
||||
|
||||
TASK COMPLETION RULES:
|
||||
- Your task is complete when:
|
||||
- Project is successfully scaffolded and compiled without errors
|
||||
- copilot-instructions.md file in the .github directory exists in the project
|
||||
- README.md file exists and is up to date
|
||||
- User is provided with clear instructions to debug/launch the project
|
||||
|
||||
Before starting a new task in the above plan, update progress in the plan.
|
||||
-->
|
||||
- Work through each checklist item systematically.
|
||||
- Keep communication concise and focused.
|
||||
- Follow development best practices.
|
||||
15
.vscode/tasks.json
vendored
Normal file
15
.vscode/tasks.json
vendored
Normal file
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
9
package-lock.json
generated
9
package-lock.json
generated
@ -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",
|
||||
|
||||
@ -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"
|
||||
|
||||
BIN
public/logo.png
Normal file
BIN
public/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/logo.webp
Normal file
BIN
public/logo.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 104 KiB |
195
public/logo1.svg
Normal file
195
public/logo1.svg
Normal file
@ -0,0 +1,195 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M963 4786 c-81 -26 -170 -92 -220 -162 -49 -71 -53 -101 -55 -468 -1
|
||||
-188 2 -348 6 -355 5 -7 5 -28 1 -48 -3 -19 -1 -93 6 -164 12 -125 12 -130 -8
|
||||
-157 -15 -19 -29 -27 -49 -26 -175 8 -266 14 -274 19 -14 8 -120 -12 -137 -27
|
||||
-11 -9 -16 -9 -23 2 -6 10 -14 9 -38 -8 -37 -27 -54 -53 -75 -116 -19 -56 -20
|
||||
-59 -10 -53 11 7 15 -882 5 -1103 -9 -194 -3 -249 32 -302 24 -37 94 -81 118
|
||||
-74 12 2 45 0 75 -5 37 -7 100 -7 195 0 148 11 171 7 183 -30 4 -11 2 -109 -4
|
||||
-217 -7 -128 -8 -320 -3 -547 l7 -350 29 -58 c51 -99 162 -180 284 -206 70
|
||||
-15 2994 -16 3073 -1 111 21 206 84 266 177 58 91 62 127 63 501 0 185 0 339
|
||||
0 342 0 3 -2 71 -4 151 -2 81 -6 151 -9 156 -7 12 21 70 37 76 7 3 51 1 97 -4
|
||||
152 -17 269 -16 326 4 61 22 126 82 144 135 17 49 18 194 1 200 -7 2 -12 22
|
||||
-12 50 0 26 -7 74 -15 107 -8 33 -15 76 -15 95 0 19 -10 55 -21 80 -34 75 -36
|
||||
162 -5 249 70 200 32 422 -98 559 -27 29 -63 61 -80 71 -46 28 -207 81 -273
|
||||
89 -50 6 -60 11 -80 41 -12 18 -21 37 -18 41 19 30 33 917 16 1025 -20 134
|
||||
-90 228 -211 288 l-65 32 -1560 2 c-1271 1 -1568 -1 -1602 -11z m3140 -165
|
||||
c13 -5 49 -34 80 -64 l57 -55 0 -605 c0 -393 -4 -608 -10 -612 -6 -3 -10 -12
|
||||
-10 -19 0 -10 29 -16 108 -21 253 -17 377 -77 446 -218 20 -42 27 -75 32 -153
|
||||
6 -101 -7 -216 -26 -222 -6 -2 -10 -12 -10 -23 0 -11 -11 -31 -24 -43 -33 -34
|
||||
-38 -54 -18 -74 9 -10 30 -42 46 -72 27 -52 29 -63 34 -205 4 -121 8 -157 23
|
||||
-185 32 -59 22 -138 -19 -158 -37 -17 -397 -17 -432 1 -42 21 -52 58 -57 210
|
||||
-2 78 -9 154 -15 170 -10 26 -12 27 -89 27 l-79 0 0 -192 c0 -106 -3 -203 -6
|
||||
-214 -5 -20 -2 -22 37 -22 29 -1 48 -7 56 -18 10 -14 13 -148 13 -626 0 -606
|
||||
0 -608 -21 -626 -12 -9 -39 -35 -61 -57 l-40 -40 -1566 -5 -1567 -5 -32 28
|
||||
c-18 16 -31 34 -30 40 1 6 -5 12 -13 12 -8 0 -14 7 -12 15 2 8 0 12 -4 8 -4
|
||||
-4 -13 -3 -20 3 -11 9 -14 125 -14 614 l0 602 26 28 c25 28 27 28 116 21 50
|
||||
-3 113 -6 139 -6 81 0 79 16 79 -552 l0 -488 1335 0 1335 0 0 504 c0 435 2
|
||||
507 15 520 25 25 17 36 -25 36 l-40 0 0 -99 c0 -147 -6 -151 -251 -151 l-170
|
||||
0 3 -72 3 -73 133 -5 c184 -7 172 13 172 -287 0 -230 0 -236 -22 -259 l-23
|
||||
-24 -1142 0 -1142 0 -21 22 c-19 21 -20 34 -20 263 0 191 3 245 14 260 12 17
|
||||
30 20 120 23 l106 4 0 74 0 74 -134 0 c-130 0 -173 7 -199 31 -8 8 -11 44 -9
|
||||
124 l4 112 -63 6 c-34 4 -94 7 -133 7 -68 0 -72 1 -89 29 -9 16 -17 37 -17 46
|
||||
0 9 -4 14 -9 10 -14 -8 -24 93 -19 204 2 65 0 99 -7 98 -5 -1 -9 6 -7 16 3 15
|
||||
-6 17 -68 17 l-70 0 0 -183 c0 -215 -5 -233 -65 -242 -22 -4 -122 -5 -222 -3
|
||||
-168 3 -183 5 -198 23 l-15 20 6 -20 c6 -20 5 -20 -10 -1 -14 18 -16 91 -16
|
||||
662 l0 642 25 16 c21 14 63 16 302 16 l278 0 -2 627 c-2 344 0 624 3 620 7 -7
|
||||
64 49 64 64 0 6 4 8 9 5 4 -3 17 4 27 15 11 12 28 25 39 30 28 11 3068 11
|
||||
3098 0z"/>
|
||||
<path d="M1017 4479 l-37 -40 0 -537 c0 -295 4 -543 9 -550 5 -9 24 -12 57
|
||||
-10 l49 3 3 524 c1 367 6 528 13 538 10 11 257 13 1436 13 963 0 1431 -3 1444
|
||||
-10 18 -10 19 -27 19 -530 l0 -520 60 0 60 0 0 541 0 541 -40 39 -40 39 -1498
|
||||
0 -1497 -1 -38 -40z"/>
|
||||
<path d="M1220 3805 c0 -461 -1 -497 -18 -527 -21 -37 -19 -58 6 -58 31 -1
|
||||
142 -78 142 -99 0 -6 9 -11 20 -11 15 0 20 7 20 29 0 100 151 181 338 181 64
|
||||
0 81 3 86 16 13 35 0 274 -15 274 -5 0 -9 -24 -9 -53 0 -83 -21 -101 -121
|
||||
-106 -179 -8 -182 -3 -177 288 2 158 6 212 17 224 11 14 34 17 132 17 110 0
|
||||
119 -1 133 -22 9 -12 16 -39 16 -60 0 -20 5 -40 10 -43 11 -7 12 12 19 213 1
|
||||
12 9 26 19 29 9 4 20 11 23 15 3 5 37 15 75 21 38 7 74 15 79 19 14 9 123 28
|
||||
161 28 18 0 34 4 36 9 2 5 80 14 174 21 132 9 209 9 340 0 93 -6 178 -15 189
|
||||
-20 11 -4 61 -14 110 -20 50 -7 92 -16 95 -19 3 -4 37 -12 77 -18 39 -6 83
|
||||
-19 97 -29 27 -20 30 -42 28 -189 0 -33 2 -49 4 -35 18 99 20 100 157 100 62
|
||||
0 117 -4 122 -8 30 -22 35 -56 35 -253 0 -268 -1 -269 -164 -269 -39 0 -80 3
|
||||
-91 6 -31 8 -49 42 -55 104 -4 37 -7 11 -8 -80 0 -74 1 -143 4 -152 4 -14 16
|
||||
-18 52 -18 118 -1 215 -28 273 -77 14 -11 18 -11 29 2 11 13 34 16 122 14 60
|
||||
-1 111 1 114 4 4 3 -1 16 -10 29 -14 20 -16 80 -16 520 l0 498 -1335 0 -1335
|
||||
0 0 -495z m2505 335 c12 -13 15 -27 11 -45 -8 -32 -26 -32 -64 0 -17 14 -39
|
||||
25 -50 25 -11 0 -25 7 -32 15 -11 14 -10 14 12 6 14 -5 29 -6 34 -1 9 8 36 16
|
||||
60 19 6 0 19 -8 29 -19z m-2242 1 c18 -2 4 -23 -31 -46 -32 -21 -44 -24 -65
|
||||
-16 -32 12 -34 24 -7 51 14 14 29 18 57 15 21 -2 41 -4 46 -4z m-86 -749 c-5
|
||||
-37 -34 -53 -53 -27 -13 17 -11 73 3 98 10 17 53 -45 50 -71z m2351 31 c-5
|
||||
-23 -23 -20 -26 4 -3 18 0 21 13 17 9 -4 15 -13 13 -21z"/>
|
||||
<path d="M2285 4088 c-49 -5 -97 -13 -106 -18 -9 -4 -51 -13 -95 -20 -43 -7
|
||||
-83 -16 -89 -20 -5 -4 -21 -10 -35 -12 -25 -3 -25 -3 -28 -127 -2 -93 -6 -127
|
||||
-18 -138 -13 -14 -13 -18 1 -39 12 -19 15 -63 15 -252 0 -164 -3 -231 -12
|
||||
-240 -8 -8 -57 -12 -153 -12 -78 0 -145 -4 -151 -9 -5 -5 -26 -14 -47 -21 -62
|
||||
-20 -67 -42 -67 -304 0 -139 -4 -227 -10 -231 -6 -4 -10 -134 -10 -356 l0
|
||||
-349 -27 -11 c-15 -6 -35 -8 -45 -6 -38 10 -49 -14 -46 -98 l3 -80 167 -3
|
||||
c132 -2 167 -5 171 -17 8 -19 11 -334 4 -341 -3 -3 -56 -7 -119 -7 l-113 -2
|
||||
-3 -173 -2 -172 485 0 485 0 0 163 c0 89 -4 167 -8 174 -5 8 -43 13 -107 15
|
||||
l-100 3 -3 163 c-1 101 2 170 8 182 10 19 22 20 285 20 150 0 276 -3 278 -7 3
|
||||
-5 7 -87 8 -183 l4 -175 -105 -5 -105 -5 -3 -173 -2 -172 510 0 510 0 -2 172
|
||||
-3 173 -145 5 -145 5 -2 164 c-1 107 2 170 9 178 8 10 57 13 204 13 l194 0 0
|
||||
84 c0 91 -3 97 -54 103 -58 6 -55 -22 -58 597 l-3 573 -28 36 c-19 25 -40 40
|
||||
-70 47 -23 7 -58 16 -78 21 -20 5 -72 9 -116 9 -48 0 -84 5 -91 12 -17 17 -17
|
||||
448 1 496 10 28 10 36 0 39 -10 4 -13 38 -13 128 0 130 -2 135 -51 135 -10 0
|
||||
-19 4 -19 9 0 4 -41 14 -91 20 -49 6 -98 16 -107 20 -51 27 -461 39 -657 19z
|
||||
m50 -138 c11 -5 31 -11 45 -14 42 -9 110 -78 125 -128 14 -48 12 -139 -5 -183
|
||||
-12 -33 -84 -105 -104 -105 -8 0 -16 -6 -19 -12 -6 -20 -207 -18 -231 2 -48
|
||||
39 -108 105 -117 127 -5 13 -9 54 -9 90 0 52 5 75 24 107 45 75 69 90 211 131
|
||||
13 4 54 -4 80 -15z m630 -10 c22 -6 45 -17 50 -23 6 -7 19 -17 30 -23 11 -6
|
||||
30 -30 42 -54 28 -52 32 -160 8 -218 -16 -37 -80 -102 -102 -102 -6 0 -13 -6
|
||||
-16 -12 -3 -9 -34 -13 -109 -13 -86 0 -108 3 -122 18 -10 9 -21 17 -25 17 -15
|
||||
0 -65 52 -85 89 -27 49 -29 170 -3 198 9 11 17 24 17 29 0 6 17 26 38 45 32
|
||||
31 89 56 167 73 10 3 40 -4 110 -24z m-308 -445 c80 -53 165 -78 238 -70 32 3
|
||||
75 13 93 21 38 15 90 18 110 5 15 -9 42 -93 42 -131 0 -42 46 -123 85 -148 19
|
||||
-12 56 -27 82 -33 164 -40 179 -48 215 -127 17 -38 19 -66 18 -280 0 -130 0
|
||||
-250 -1 -267 -2 -85 20 -505 29 -536 12 -47 -7 -96 -40 -103 -13 -3 -54 -13
|
||||
-92 -21 -127 -28 -169 -72 -186 -196 -12 -85 -1 -188 24 -237 21 -41 69 -76
|
||||
133 -97 104 -33 126 -120 41 -156 -26 -11 -105 -14 -371 -14 l-339 0 -30 34
|
||||
c-49 54 -28 105 70 173 55 38 81 90 88 180 13 163 -30 269 -121 300 -68 23
|
||||
-386 25 -461 3 -98 -29 -134 -98 -134 -259 0 -120 18 -168 76 -212 120 -91
|
||||
140 -135 83 -190 l-30 -29 -211 -3 c-234 -3 -423 9 -457 29 -26 17 -37 53 -25
|
||||
85 5 13 40 45 79 71 89 61 108 103 107 241 -1 171 -37 235 -154 276 -29 11
|
||||
-63 28 -76 40 -21 18 -23 27 -18 71 4 27 10 214 15 415 15 620 18 665 41 710
|
||||
27 52 78 78 182 91 153 19 205 67 229 209 20 121 40 134 154 101 40 -11 89
|
||||
-21 107 -21 50 0 136 28 188 60 114 71 131 72 217 15z"/>
|
||||
<path d="M2220 3843 c-8 -3 -23 -14 -34 -25 -11 -10 -23 -18 -28 -18 -4 0 -12
|
||||
-18 -18 -41 -19 -70 11 -124 87 -154 40 -16 45 -16 87 0 31 12 53 30 70 56 38
|
||||
56 34 91 -14 140 -35 36 -48 42 -88 45 -26 2 -54 1 -62 -3z"/>
|
||||
<path d="M2788 3823 c-87 -66 -74 -164 29 -217 37 -19 56 -20 81 -6 9 5 28 14
|
||||
42 19 16 5 35 27 49 55 24 45 24 46 6 85 -26 58 -61 84 -120 89 -43 3 -55 0
|
||||
-87 -25z"/>
|
||||
<path d="M2358 2866 c-26 -7 -62 -25 -80 -40 -103 -83 -144 -96 -318 -96 -167
|
||||
0 -248 -33 -271 -109 -9 -29 -9 -47 1 -75 22 -69 61 -92 285 -173 82 -29 159
|
||||
-58 170 -63 26 -11 162 -59 343 -121 213 -73 282 -68 372 26 66 68 104 85 197
|
||||
85 238 1 337 28 376 102 34 68 -2 132 -104 184 -97 49 -789 273 -889 287 -19
|
||||
3 -56 0 -82 -7z m111 -63 c3 -6 34 -16 69 -23 34 -7 62 -16 62 -20 0 -4 27
|
||||
-13 60 -19 33 -7 60 -15 60 -20 0 -4 29 -13 65 -20 36 -7 65 -16 65 -20 0 -3
|
||||
26 -12 58 -20 31 -7 62 -16 67 -21 6 -4 35 -13 65 -20 30 -7 57 -16 60 -20 3
|
||||
-3 31 -12 63 -19 31 -7 57 -16 57 -20 0 -4 29 -13 65 -20 36 -7 65 -17 65 -21
|
||||
0 -4 11 -11 25 -14 37 -9 45 -69 14 -102 l-22 -24 -273 0 -273 0 -3 -77 -3
|
||||
-77 -38 -20 c-24 -13 -41 -16 -45 -10 -4 5 -34 15 -66 22 -33 6 -62 15 -65 20
|
||||
-3 4 -32 14 -63 22 -32 7 -58 16 -58 20 0 4 -25 12 -55 19 -30 7 -55 16 -55
|
||||
20 0 4 -27 13 -60 20 -33 8 -60 17 -60 21 0 4 -27 13 -60 20 -33 7 -60 16 -60
|
||||
20 0 4 -25 12 -55 19 -30 7 -55 16 -55 20 0 4 -27 13 -60 20 -33 8 -60 17 -60
|
||||
21 0 4 -15 10 -34 13 -18 3 -54 15 -79 26 -35 16 -47 28 -52 50 -6 30 7 69 29
|
||||
83 6 4 90 8 186 9 96 0 213 4 260 7 l85 7 7 52 c4 29 16 62 25 74 16 18 26 20
|
||||
77 16 32 -3 62 -9 65 -14z"/>
|
||||
<path d="M2418 2693 c-3 -4 -11 -28 -18 -53 -20 -65 -26 -70 -89 -70 -31 0
|
||||
-63 -4 -71 -10 -9 -5 -19 -5 -27 2 -9 7 -13 7 -13 -1 0 -14 -57 -15 -62 -1 -2
|
||||
7 -12 6 -29 -2 -24 -11 -24 -13 -8 -29 9 -9 35 -20 56 -24 22 -3 51 -12 65
|
||||
-19 14 -7 48 -19 77 -26 28 -6 51 -15 51 -19 0 -4 27 -13 60 -20 33 -8 60 -17
|
||||
60 -21 0 -4 17 -11 38 -15 20 -4 51 -13 67 -20 29 -13 102 -35 118 -35 4 0 7
|
||||
29 7 63 0 93 7 97 157 97 146 0 166 5 126 31 -15 11 -39 19 -53 19 -14 0 -37
|
||||
6 -52 14 -15 8 -52 20 -83 27 -30 7 -55 16 -55 20 0 4 -19 10 -42 14 -24 4
|
||||
-56 13 -73 20 -16 8 -50 19 -75 25 -25 7 -49 15 -55 20 -16 12 -73 22 -77 13z
|
||||
m157 -177 c0 -47 -66 -45 -73 3 -3 20 0 22 35 19 29 -2 38 -7 38 -22z"/>
|
||||
<path d="M1604 3867 c-2 -7 -3 -78 -2 -157 l3 -145 29 -3 c36 -4 46 10 46 72
|
||||
0 27 6 65 13 84 10 28 10 36 0 39 -8 3 -13 22 -13 48 0 24 -3 50 -6 59 -7 19
|
||||
-62 22 -70 3z"/>
|
||||
<path d="M3450 3820 c0 -33 -4 -60 -10 -60 -5 0 -10 -11 -10 -25 0 -14 5 -25
|
||||
10 -25 6 0 10 -30 10 -70 0 -65 1 -70 24 -76 14 -3 30 -3 35 1 7 4 11 63 11
|
||||
161 l0 154 -35 0 -35 0 0 -60z"/>
|
||||
<path d="M390 2586 l0 -576 140 0 c127 0 140 2 140 18 0 14 -2 15 -10 2 -6
|
||||
-10 -9 49 -9 175 1 105 4 179 9 165 6 -22 8 -21 11 15 l4 40 145 0 c141 0 147
|
||||
-1 176 -25 45 -37 64 -100 64 -216 0 -55 3 -116 6 -136 l7 -38 132 0 132 0 1
|
||||
33 c2 55 -9 177 -16 173 -4 -2 -5 20 -4 50 3 33 -1 60 -8 69 -7 8 -10 22 -6
|
||||
30 15 40 -49 118 -113 135 -36 9 -41 14 -41 40 0 20 7 33 22 41 35 19 83 61
|
||||
115 102 25 31 34 164 20 271 -8 58 -59 126 -109 147 -18 7 -35 16 -38 20 -14
|
||||
20 -162 32 -452 36 l-318 5 0 -576z m211 444 c18 0 8 -46 -20 -97 -37 -66 -49
|
||||
-165 -27 -208 9 -17 16 -37 16 -46 0 -9 16 -37 36 -63 53 -70 54 -100 6 -161
|
||||
-51 -65 -63 -88 -83 -155 l-17 -55 -17 40 c-14 32 -18 73 -19 215 -2 281 4
|
||||
471 15 492 12 22 68 50 87 43 8 -3 18 -5 23 -5z m551 -46 c40 -39 51 -60 59
|
||||
-119 7 -55 -7 -97 -41 -115 -16 -8 -22 -6 -35 13 -8 13 -18 39 -21 58 -8 39
|
||||
-33 91 -69 145 -13 20 -22 41 -19 46 13 20 94 2 126 -28z m-164 -60 c4 -6 17
|
||||
-14 30 -18 12 -4 22 -13 22 -21 0 -7 5 -15 11 -17 6 -2 13 -33 16 -68 6 -88
|
||||
-16 -131 -75 -144 -23 -6 -42 -13 -42 -18 0 -4 -60 -8 -134 -8 -147 0 -145 -1
|
||||
-147 63 l-2 32 -7 -35 c-5 -22 -7 14 -8 95 0 79 3 120 8 105 8 -24 8 -24 9 6
|
||||
1 17 4 34 9 38 12 12 302 3 310 -10z m76 -376 c7 -13 17 -39 20 -59 4 -22 19
|
||||
-48 42 -70 64 -60 94 -116 94 -174 0 -62 -25 -94 -58 -76 -15 8 -27 39 -47
|
||||
126 -27 112 -29 116 -67 143 -22 15 -54 39 -72 55 l-31 27 28 25 c35 31 72 32
|
||||
91 3z"/>
|
||||
<path d="M663 2790 c0 -30 2 -43 4 -27 2 15 2 39 0 55 -2 15 -4 2 -4 -28z"/>
|
||||
<path d="M780 2785 l0 -45 73 0 c39 0 77 4 83 8 6 4 10 21 10 37 -1 36 -16 43
|
||||
-103 44 l-63 1 0 -45z"/>
|
||||
<path d="M3765 3128 c-3 -7 -4 -265 -3 -573 l3 -560 138 -3 137 -3 0 195 c0
|
||||
107 3 201 6 210 10 26 246 23 301 -4 45 -21 73 -68 73 -120 0 -18 4 -29 10
|
||||
-25 6 3 10 2 10 -4 0 -5 -4 -13 -10 -16 -13 -8 -13 -139 -1 -163 6 -9 12 -29
|
||||
16 -44 l5 -28 136 0 136 0 -7 23 c-3 12 -11 91 -15 176 -8 125 -13 161 -31 195
|
||||
-29 56 -46 74 -80 81 -16 4 -29 10 -29 15 0 4 -9 10 -20 13 -41 11 -9 74 45 91
|
||||
11 3 38 32 60 64 l40 57 0 125 c0 120 -1 127 -28 168 -34 52 -95 98 -144 107
|
||||
-21 4 -44 12 -52 18 -22 19 -689 23 -696 5z m260 -100 c30 -13 32 -40 6 -76
|
||||
-51 -73 -69 -183 -43 -273 8 -25 33 -72 58 -105 24 -32 44 -64 44 -71 0 -6 -18
|
||||
-33 -40 -58 -57 -66 -68 -91 -80 -191 -9 -70 -16 -94 -34 -112 -28 -29 -68
|
||||
-22 -85 15 -15 33 -26 437 -16 636 6 137 10 161 29 189 36 55 102 73 161 46z
|
||||
m505 -77 c32 -32 46 -72 35 -98 -5 -10 -7 -24 -6 -30 4 -26 -9 -12 -54 57 -48
|
||||
76 -52 86 -32 93 22 10 28 7 57 -22z m-174 -50 c40 -11 74 -40 67 -57 -3 -8 0
|
||||
-14 6 -14 14 0 15 -126 1 -135 -6 -4 -8 -10 -6 -14 11 -17 -48 -53 -102 -62
|
||||
-77 -12 -239 -11 -263 1 -17 10 -19 22 -19 144 0 73 3 136 7 139 10 10 273 8
|
||||
309 -2z m82 -391 c7 -12 10 -25 7 -30 -10 -15 -41 -12 -56 6 -11 14 -10 18 6
|
||||
30 25 18 28 18 43 -6z"/>
|
||||
<path d="M4147 2803 c-14 -14 -7 -81 9 -87 30 -11 111 -6 142 10 34 16 43 49
|
||||
20 72 -13 13 -159 17 -171 5z"/>
|
||||
<path d="M664 2235 c0 -49 1 -71 3 -48 2 23 2 64 0 90 -2 26 -3 8 -3 -42z"/>
|
||||
<path d="M943 2140 c0 -47 2 -66 4 -42 2 23 2 61 0 85 -2 23 -4 4 -4 -43z"/>
|
||||
<path d="M4010 1259 c0 -333 -4 -517 -10 -530 -11 -19 -37 -19 -1445 -19
|
||||
-1408 0 -1434 0 -1445 19 -6 13 -10 196 -10 526 l0 506 -57 -3 -58 -3 -3 -533
|
||||
c-2 -584 -6 -550 59 -598 l33 -24 1482 0 1483 0 45 37 45 38 0 548 1 547 -60
|
||||
0 -60 0 0 -511z"/>
|
||||
<path d="M2340 1561 l0 -79 88 -4 c48 -2 126 -2 175 0 l87 4 0 79 0 79 -175 0
|
||||
-175 0 0 -79z"/>
|
||||
<path d="M956 537 c3 -10 9 -15 12 -12 3 3 0 11 -7 18 -10 9 -11 8 -5 -6z"/>
|
||||
<path d="M4481 3697 c1 -21 3 -25 6 -12 3 11 10 23 15 26 5 3 3 9 -6 12 -13 5
|
||||
-16 0 -15 -26z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
10
src/app/departments/page.tsx
Normal file
10
src/app/departments/page.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
export default function DepartmentsPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<div className="mx-auto max-w-4xl px-4 py-10 sm:px-8">
|
||||
<h1 className="text-2xl font-bold text-gray-900">Отделы</h1>
|
||||
<p className="mt-2 text-sm text-gray-600">Раздел в разработке. Здесь будут списки отделов и контакты.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
10
src/app/documents/page.tsx
Normal file
10
src/app/documents/page.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
export default function DocumentsPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<div className="mx-auto max-w-4xl px-4 py-10 sm:px-8">
|
||||
<h1 className="text-2xl font-bold text-gray-900">Документы</h1>
|
||||
<p className="mt-2 text-sm text-gray-600">Раздел в разработке. Здесь будут договоры, отчёты и файлы.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
192
src/app/employees/page.tsx
Normal file
192
src/app/employees/page.tsx
Normal file
@ -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 (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<header className="sticky top-0 z-30 border-b border-slate-100 bg-white/90 backdrop-blur">
|
||||
<div className="mx-auto flex h-14 max-w-6xl items-center gap-4 px-4 sm:px-8">
|
||||
<div className="flex items-center gap-2">
|
||||
<img src="/logo.png" alt="Логотип" className="h-11 w-auto" />
|
||||
</div>
|
||||
<div className="hidden flex-1 items-center justify-center md:flex">
|
||||
<div className="relative w-full max-w-xl">
|
||||
<Search size={16} className="pointer-events-none absolute left-4 top-1/2 -translate-y-1/2 text-gray-400" />
|
||||
<input
|
||||
type="text"
|
||||
className="w-full rounded-full border border-gray-200 bg-gray-50 py-2.5 pl-11 pr-4 text-sm text-gray-800 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="Поиск"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-auto flex items-center gap-1 sm:gap-2">
|
||||
<button className="flex h-10 w-10 items-center justify-center rounded-full hover:bg-slate-100">
|
||||
<Bell size={18} className="text-gray-600" />
|
||||
</button>
|
||||
<div className="ml-1 flex h-10 w-10 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">КМ</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div className="mx-auto flex min-h-screen max-w-6xl gap-6 px-4 py-8 sm:px-8">
|
||||
<aside className="hidden w-64 flex-shrink-0 lg:block">
|
||||
<div className="sticky top-8 space-y-4">
|
||||
<div className="rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="mb-4 flex items-center gap-3">
|
||||
<div className="flex h-11 w-11 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">КМ</div>
|
||||
<div>
|
||||
<p className="text-sm font-semibold text-gray-900">Константин Макаев</p>
|
||||
<p className="text-xs text-gray-500">Онлайн</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-2 text-sm text-gray-700">
|
||||
<Link href="/" className={navLinkClass("/")}>
|
||||
<HomeIcon size={18} className={pathname === "/" ? "text-sky-700" : "text-sky-600"} />
|
||||
Лента
|
||||
</Link>
|
||||
<Link href="/messages" className={navLinkClass("/messages")}>
|
||||
<MessageSquare size={18} className={navIconClass("/messages")} />
|
||||
Сообщения
|
||||
</Link>
|
||||
<Link href="/employees" className={navLinkClass("/employees")}>
|
||||
<Users size={18} className={navIconClass("/employees")} />
|
||||
Сотрудники
|
||||
</Link>
|
||||
<Link href="/departments" className={navLinkClass("/departments")}>
|
||||
<Building2 size={18} className={navIconClass("/departments")} />
|
||||
Отделы
|
||||
</Link>
|
||||
<Link href="/requests" className={navLinkClass("/requests")}>
|
||||
<FileSignature size={18} className={navIconClass("/requests")} />
|
||||
Заявления
|
||||
</Link>
|
||||
<Link href="/documents" className={navLinkClass("/documents")}>
|
||||
<FileText size={18} className={navIconClass("/documents")} />
|
||||
Документы
|
||||
</Link>
|
||||
<Link href="/finances" className={navLinkClass("/finances")}>
|
||||
<Wallet size={18} className={navIconClass("/finances")} />
|
||||
Финансы
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main className="flex-1 space-y-6">
|
||||
<div className="flex flex-col gap-3 rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="flex items-center justify-between gap-3">
|
||||
<div>
|
||||
<p className="text-sm font-semibold text-sky-600">Команда</p>
|
||||
<h1 className="text-2xl font-bold text-gray-900">Сотрудники</h1>
|
||||
</div>
|
||||
<div className="rounded-full bg-sky-50 px-4 py-2 text-xs font-medium text-sky-700 ring-1 ring-sky-100">Всего: {employees.length}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
{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 (
|
||||
<article
|
||||
key={employee.id}
|
||||
className="flex items-center gap-4 rounded-2xl bg-white p-4 shadow-sm ring-1 ring-gray-100"
|
||||
>
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">
|
||||
{employee.name
|
||||
.split(" ")
|
||||
.slice(0, 2)
|
||||
.map((part) => part[0])
|
||||
.join("")}
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
<p className="text-sm font-semibold text-gray-900">{employee.name}</p>
|
||||
<p className="text-xs text-gray-500">{employee.role}</p>
|
||||
<div className="mt-2 flex items-center gap-2 text-xs text-gray-500">
|
||||
<span className={`h-2 w-2 rounded-full ${dotColor}`} />
|
||||
<span className={statusColor}>{employee.status}</span>
|
||||
<span className="mx-1 text-gray-300">•</span>
|
||||
<span className="text-gray-500">{employee.department}</span>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside className="hidden w-72 flex-shrink-0 space-y-4 lg:block">
|
||||
<div className="sticky top-8 space-y-4">
|
||||
<div className="rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="flex items-center justify-between text-sm font-semibold text-gray-900">
|
||||
<span>Календарь</span>
|
||||
<span className="text-xs font-normal text-gray-500">Февраль 2026</span>
|
||||
</div>
|
||||
<div className="mt-4 grid grid-cols-7 gap-1 text-center text-xs text-gray-500">
|
||||
{weekdays.map((day) => (
|
||||
<div key={day} className="py-1 font-medium">
|
||||
{day}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className="mt-1 grid grid-cols-7 gap-1 text-sm text-gray-800">
|
||||
{calendarWeeks.map((week, wi) =>
|
||||
week.map((day, di) => {
|
||||
const isToday = day === "18";
|
||||
return (
|
||||
<div
|
||||
key={`${wi}-${di}`}
|
||||
className={`flex h-9 items-center justify-center rounded-full ${
|
||||
day
|
||||
? isToday
|
||||
? "bg-sky-100 text-sky-800 font-semibold ring-1 ring-sky-200"
|
||||
: "hover:bg-sky-50"
|
||||
: ""
|
||||
}`}
|
||||
>
|
||||
{day}
|
||||
</div>
|
||||
);
|
||||
})
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 15 KiB |
10
src/app/finances/page.tsx
Normal file
10
src/app/finances/page.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
export default function FinancesPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<div className="mx-auto max-w-4xl px-4 py-10 sm:px-8">
|
||||
<h1 className="text-2xl font-bold text-gray-900">Финансы</h1>
|
||||
<p className="mt-2 text-sm text-gray-600">Раздел в разработке. Здесь появится аналитика и отчётность.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
74
src/app/login/page.tsx
Normal file
74
src/app/login/page.tsx
Normal file
@ -0,0 +1,74 @@
|
||||
import Link from "next/link";
|
||||
|
||||
export default function Login() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 to-white text-gray-900">
|
||||
<div className="mx-auto flex min-h-screen max-w-4xl flex-col justify-center px-6 py-12 sm:px-10">
|
||||
<div className="mx-auto w-full max-w-xl rounded-2xl bg-white p-8 shadow-xl ring-1 ring-gray-100">
|
||||
<h1 className="mb-2 text-3xl font-semibold tracking-tight text-gray-900 sm:text-4xl">
|
||||
Войти в аккаунт
|
||||
</h1>
|
||||
<p className="mb-8 text-sm text-gray-600">
|
||||
Используйте телефон или почту, чтобы продолжить.
|
||||
</p>
|
||||
|
||||
<form className="space-y-4">
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="login">
|
||||
Телефон или почта
|
||||
</label>
|
||||
<input
|
||||
id="login"
|
||||
name="login"
|
||||
type="text"
|
||||
autoComplete="username"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="example@mail.com"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="password">
|
||||
Пароль
|
||||
</label>
|
||||
<input
|
||||
id="password"
|
||||
name="password"
|
||||
type="password"
|
||||
autoComplete="current-password"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="••••••••"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center justify-between text-sm text-gray-600">
|
||||
<label className="inline-flex items-center gap-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
className="h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-500"
|
||||
/>
|
||||
Запомнить меня
|
||||
</label>
|
||||
<a className="font-medium text-sky-600 transition hover:text-sky-700" href="#">
|
||||
Забыли пароль?
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
type="submit"
|
||||
className="flex w-full items-center justify-center rounded-lg bg-sky-400 px-4 py-3 text-sm font-semibold text-white shadow-sm transition hover:bg-sky-700 focus:outline-none focus:ring-2 focus:ring-sky-200"
|
||||
>
|
||||
Войти
|
||||
</button>
|
||||
<Link
|
||||
href="/register"
|
||||
className="flex w-full items-center justify-center rounded-lg border border-gray-200 px-4 py-3 text-sm font-semibold text-sky-700 transition hover:border-sky-200 hover:bg-sky-50 focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
>
|
||||
Создать аккаунт
|
||||
</Link>
|
||||
</form>
|
||||
<p className="mt-6 text-center text-xs text-gray-500">
|
||||
Продолжая, вы соглашаетесь с условиями использования и подтверждаете ознакомление с политикой конфиденциальности.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
10
src/app/messages/page.tsx
Normal file
10
src/app/messages/page.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
export default function MessagesPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<div className="mx-auto max-w-4xl px-4 py-10 sm:px-8">
|
||||
<h1 className="text-2xl font-bold text-gray-900">Сообщения</h1>
|
||||
<p className="mt-2 text-sm text-gray-600">Раздел в разработке. Здесь появятся чаты и диалоги.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
290
src/app/page.tsx
290
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 (
|
||||
<div className="flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-black">
|
||||
<main className="flex min-h-screen w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="/next.svg"
|
||||
alt="Next.js logo"
|
||||
width={100}
|
||||
height={20}
|
||||
priority
|
||||
/>
|
||||
<div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
|
||||
<h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
|
||||
To get started, edit the page.tsx file.
|
||||
</h1>
|
||||
<p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400">
|
||||
Looking for a starting point or more instructions? Head over to{" "}
|
||||
<a
|
||||
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
className="font-medium text-zinc-950 dark:text-zinc-50"
|
||||
>
|
||||
Templates
|
||||
</a>{" "}
|
||||
or the{" "}
|
||||
<a
|
||||
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
className="font-medium text-zinc-950 dark:text-zinc-50"
|
||||
>
|
||||
Learning
|
||||
</a>{" "}
|
||||
center.
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col gap-4 text-base font-medium sm:flex-row">
|
||||
<a
|
||||
className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]"
|
||||
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="/vercel.svg"
|
||||
alt="Vercel logomark"
|
||||
width={16}
|
||||
height={16}
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<header className="sticky top-0 z-30 border-b border-slate-100 bg-white/90 backdrop-blur">
|
||||
<div className="mx-auto flex h-14 max-w-6xl items-center gap-4 px-4 sm:px-8">
|
||||
<div className="flex items-center gap-2">
|
||||
<img
|
||||
src="/logo.png"
|
||||
alt="Логотип"
|
||||
className="h-11 w-auto"
|
||||
/>
|
||||
Deploy Now
|
||||
</a>
|
||||
<a
|
||||
className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]"
|
||||
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Documentation
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div className="hidden flex-1 items-center justify-center md:flex">
|
||||
<div className="relative w-full max-w-xl">
|
||||
<Search size={16} className="pointer-events-none absolute left-4 top-1/2 -translate-y-1/2 text-gray-400" />
|
||||
<input
|
||||
type="text"
|
||||
className="w-full rounded-full border border-gray-200 bg-gray-50 py-2.5 pl-11 pr-4 text-sm text-gray-800 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="Поиск"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="ml-auto flex items-center gap-1 sm:gap-2">
|
||||
<button className="flex h-10 w-10 items-center justify-center rounded-full hover:bg-slate-100">
|
||||
<Bell size={18} className="text-gray-600" />
|
||||
</button>
|
||||
<div className="ml-1 flex h-10 w-10 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">
|
||||
КМ
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</header>
|
||||
|
||||
<div className="mx-auto flex min-h-screen max-w-6xl gap-6 px-4 py-8 sm:px-8">
|
||||
<aside className="hidden w-64 flex-shrink-0 lg:block">
|
||||
<div className="sticky top-8 space-y-4">
|
||||
<div className="rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="mb-4 flex items-center gap-3">
|
||||
<div className="flex h-11 w-11 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">
|
||||
КМ
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-semibold text-gray-900">Константин Макаев</p>
|
||||
<p className="text-xs text-gray-500">Онлайн</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-2 text-sm text-gray-700">
|
||||
<Link href="/" className={navLinkClass("/")}>
|
||||
<HomeIcon size={18} className={pathname === "/" ? "text-sky-700" : "text-sky-600"} />
|
||||
Лента
|
||||
</Link>
|
||||
<Link href="/messages" className={navLinkClass("/messages")}>
|
||||
<MessageSquare size={18} className={navIconClass("/messages")} />
|
||||
Сообщения
|
||||
</Link>
|
||||
<Link href="/employees" className={navLinkClass("/employees")}>
|
||||
<Users size={18} className={navIconClass("/employees")} />
|
||||
Сотрудники
|
||||
</Link>
|
||||
<Link href="/departments" className={navLinkClass("/departments")}>
|
||||
<Building2 size={18} className={navIconClass("/departments")} />
|
||||
Отделы
|
||||
</Link>
|
||||
<Link href="/requests" className={navLinkClass("/requests")}>
|
||||
<FileSignature size={18} className={navIconClass("/requests")} />
|
||||
Заявления
|
||||
</Link>
|
||||
<Link href="/documents" className={navLinkClass("/documents")}>
|
||||
<FileText size={18} className={navIconClass("/documents")} />
|
||||
Документы
|
||||
</Link>
|
||||
<Link href="/finances" className={navLinkClass("/finances")}>
|
||||
<Wallet size={18} className={navIconClass("/finances")} />
|
||||
Финансы
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main className="flex-1 space-y-6">
|
||||
<div className="flex flex-col gap-3 rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="flex h-11 w-13 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">
|
||||
КМ
|
||||
</div>
|
||||
<div className="relative w-full">
|
||||
<Search size={16} className="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-400" />
|
||||
<input
|
||||
type="text"
|
||||
className="w-full rounded-full border border-gray-200 bg-gray-50 py-2.5 pl-10 pr-4 text-sm text-gray-800 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="Поиск по ленте"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-wrap gap-2 text-xs text-sky-700">
|
||||
<span className="rounded-full bg-sky-50 px-3 py-1">Статья</span>
|
||||
<span className="rounded-full bg-sky-50 px-3 py-1">Фото</span>
|
||||
<span className="rounded-full bg-sky-50 px-3 py-1">Ссылка</span>
|
||||
<span className="rounded-full bg-sky-50 px-3 py-1">Опрос</span>
|
||||
<span className="rounded-full bg-sky-50 px-3 py-1">Событие</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-4">
|
||||
{feedItems.map((item) => (
|
||||
<article
|
||||
key={item.id}
|
||||
className="rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100"
|
||||
>
|
||||
<header className="mb-3 flex items-start justify-between">
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-full bg-sky-400 text-sm font-semibold text-white">
|
||||
{item.author[0]}
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-semibold text-gray-900">{item.author}</p>
|
||||
<p className="text-xs text-gray-500">{item.time}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<p className="text-sm leading-6 text-gray-800">{item.text}</p>
|
||||
<div className="mt-3 flex flex-wrap gap-2 text-xs text-sky-700">
|
||||
{item.tags.map((tag) => (
|
||||
<span key={tag} className="rounded-full bg-sky-50 px-3 py-1">
|
||||
{tag}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
<div className="mt-4 flex items-center gap-4 text-sm text-gray-600">
|
||||
<button className="flex items-center gap-2 rounded-lg px-3 py-2 hover:bg-gray-50">
|
||||
<Heart size={16} className="text-gray-400" /> {item.actions.likes}
|
||||
</button>
|
||||
<button className="flex items-center gap-2 rounded-lg px-3 py-2 hover:bg-gray-50">
|
||||
<MessageSquare size={16} className="text-gray-400" /> {item.actions.comments}
|
||||
</button>
|
||||
<button className="flex items-center gap-2 rounded-lg px-3 py-2 hover:bg-gray-50">
|
||||
<Star size={16} className="text-gray-400" /> {item.actions.saves}
|
||||
</button>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside className="hidden w-72 flex-shrink-0 space-y-4 lg:block">
|
||||
<div className="sticky top-8 space-y-4">
|
||||
<div className="rounded-2xl bg-white p-5 shadow-sm ring-1 ring-gray-100">
|
||||
<div className="flex items-center justify-between text-sm font-semibold text-gray-900">
|
||||
<span>Календарь</span>
|
||||
<span className="text-xs font-normal text-gray-500">Февраль 2026</span>
|
||||
</div>
|
||||
<div className="mt-4 grid grid-cols-7 gap-1 text-center text-xs text-gray-500">
|
||||
{weekdays.map((day) => (
|
||||
<div key={day} className="py-1 font-medium">
|
||||
{day}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className="mt-1 grid grid-cols-7 gap-1 text-sm text-gray-800">
|
||||
{calendarWeeks.map((week, wi) =>
|
||||
week.map((day, di) => {
|
||||
const isToday = day === "18";
|
||||
return (
|
||||
<div
|
||||
key={`${wi}-${di}`}
|
||||
className={`flex h-9 items-center justify-center rounded-full ${
|
||||
day
|
||||
? isToday
|
||||
? "bg-sky-100 text-sky-800 font-semibold ring-1 ring-sky-200"
|
||||
: "hover:bg-sky-50"
|
||||
: ""
|
||||
}`}
|
||||
>
|
||||
{day}
|
||||
</div>
|
||||
);
|
||||
})
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
111
src/app/register/page.tsx
Normal file
111
src/app/register/page.tsx
Normal file
@ -0,0 +1,111 @@
|
||||
import Link from "next/link";
|
||||
|
||||
export default function Register() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 to-white text-gray-900">
|
||||
<div className="mx-auto flex min-h-screen max-w-4xl flex-col justify-center px-6 py-12 sm:px-10">
|
||||
<div className="mx-auto w-full max-w-xl rounded-2xl bg-white p-8 shadow-xl ring-1 ring-gray-100">
|
||||
<h1 className="mb-2 text-3xl font-semibold tracking-tight text-gray-900 sm:text-4xl">
|
||||
Регистрация
|
||||
</h1>
|
||||
<p className="mb-8 text-sm text-gray-600">
|
||||
Создайте новый аккаунт, указав имя и контактные данные.
|
||||
</p>
|
||||
|
||||
<form className="space-y-4">
|
||||
<div className="grid gap-4 sm:grid-cols-2">
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="firstName">
|
||||
Имя
|
||||
</label>
|
||||
<input
|
||||
id="firstName"
|
||||
name="firstName"
|
||||
type="text"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="Иван"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="lastName">
|
||||
Фамилия
|
||||
</label>
|
||||
<input
|
||||
id="lastName"
|
||||
name="lastName"
|
||||
type="text"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="Иванов"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="login">
|
||||
Телефон или почта
|
||||
</label>
|
||||
<input
|
||||
id="login"
|
||||
name="login"
|
||||
type="text"
|
||||
autoComplete="username"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="example@mail.com"
|
||||
/>
|
||||
</div>
|
||||
<div className="grid gap-4 sm:grid-cols-2">
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="password">
|
||||
Пароль
|
||||
</label>
|
||||
<input
|
||||
id="password"
|
||||
name="password"
|
||||
type="password"
|
||||
autoComplete="new-password"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="••••••••"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="mb-2 block text-sm font-medium text-gray-700" htmlFor="confirmPassword">
|
||||
Повторите пароль
|
||||
</label>
|
||||
<input
|
||||
id="confirmPassword"
|
||||
name="confirmPassword"
|
||||
type="password"
|
||||
autoComplete="new-password"
|
||||
className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
placeholder="••••••••"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<label className="flex items-center gap-3 text-sm text-gray-700">
|
||||
<input
|
||||
type="checkbox"
|
||||
className="h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-500"
|
||||
/>
|
||||
Я согласен с условиями использования
|
||||
</label>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
className="flex w-full items-center justify-center rounded-lg bg-sky-400 px-4 py-3 text-sm font-semibold text-white shadow-sm transition hover:bg-sky-700 focus:outline-none focus:ring-2 focus:ring-sky-200"
|
||||
>
|
||||
Создать аккаунт
|
||||
</button>
|
||||
<Link
|
||||
href="/login"
|
||||
className="flex w-full items-center justify-center rounded-lg border border-gray-200 px-4 py-3 text-sm font-semibold text-sky-700 transition hover:border-sky-200 hover:bg-sky-50 focus:outline-none focus:ring-2 focus:ring-sky-100"
|
||||
>
|
||||
Уже есть аккаунт? Войти
|
||||
</Link>
|
||||
</form>
|
||||
<p className="mt-6 text-center text-xs text-gray-500">
|
||||
Регистрируясь, вы принимаете условия использования и подтверждаете ознакомление с политикой конфиденциальности.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
10
src/app/requests/page.tsx
Normal file
10
src/app/requests/page.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
export default function RequestsPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gradient-to-b from-sky-50 via-white to-white text-gray-900">
|
||||
<div className="mx-auto max-w-4xl px-4 py-10 sm:px-8">
|
||||
<h1 className="text-2xl font-bold text-gray-900">Заявления</h1>
|
||||
<p className="mt-2 text-sm text-gray-600">Раздел в разработке. Здесь появятся заявки и согласования.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user