Разработка начальной страницы проекта
This commit is contained in:
parent
d98a8df5c9
commit
8965419cbc
9 changed files with 123 additions and 41 deletions
|
|
@ -2,26 +2,5 @@
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: #D9D9D9;
|
padding: 0;
|
||||||
color: rgba(0, 0, 0, 0.8);
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 400;
|
|
||||||
font-family: 'Inter', sans-serif;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 24px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #fff;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #F5B14E;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:active {
|
|
||||||
color: #F5B14E;
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +1,11 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import Cover from './start-page/cover';
|
import StartPage from './start-page/start-page';
|
||||||
import TopBar from './start-page/top-bar';
|
|
||||||
|
|
||||||
export const AppData = {
|
|
||||||
contact: 'https://t.me/pavelgnedov',
|
|
||||||
bot: 'https://t.me/eltex_event_emitter_bot'
|
|
||||||
};
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<TopBar contact={AppData.contact} />
|
<StartPage />
|
||||||
<Cover telegramBotUrl={AppData.bot} />
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
17
frontend/src/start-page/content-block.tsx
Normal file
17
frontend/src/start-page/content-block.tsx
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export type Props = {
|
||||||
|
title: string;
|
||||||
|
children?: any;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ContentBlock = (props: Props) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<h2>{props.title}</h2>
|
||||||
|
{props.children}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ContentBlock;
|
||||||
10
frontend/src/start-page/content.module.css
Normal file
10
frontend/src/start-page/content.module.css
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
.content {
|
||||||
|
margin-left: 135px;
|
||||||
|
margin-top: 956px;
|
||||||
|
max-width: 1170px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 0px;
|
||||||
|
gap: 32px;
|
||||||
|
}
|
||||||
16
frontend/src/start-page/content.tsx
Normal file
16
frontend/src/start-page/content.tsx
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
import React from 'react';
|
||||||
|
import ContentCss from './content.module.css';
|
||||||
|
|
||||||
|
export type Props = {
|
||||||
|
children?: any;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Content = (props: Props) => {
|
||||||
|
return (
|
||||||
|
<div className={ContentCss.content}>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Content;
|
||||||
25
frontend/src/start-page/start-page.module.css
Normal file
25
frontend/src/start-page/start-page.module.css
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
.startPage {
|
||||||
|
margin: 0;
|
||||||
|
background-color: #D9D9D9;
|
||||||
|
color: rgba(0, 0, 0, 0.8);
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
font-family: 'Inter', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.startPage a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.startPage a:hover {
|
||||||
|
color: #F5B14E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.startPage a:active {
|
||||||
|
color: #F5B14E;
|
||||||
|
}
|
||||||
40
frontend/src/start-page/start-page.tsx
Normal file
40
frontend/src/start-page/start-page.tsx
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
import React from 'react';
|
||||||
|
import Content from './content';
|
||||||
|
import ContentBlock from './content-block';
|
||||||
|
import Cover from './cover';
|
||||||
|
import StartPageCss from './start-page.module.css';
|
||||||
|
import TopBar from './top-bar';
|
||||||
|
|
||||||
|
export const StartPageData = {
|
||||||
|
contact: 'https://t.me/pavelgnedov',
|
||||||
|
bot: 'https://t.me/eltex_event_emitter_bot'
|
||||||
|
};
|
||||||
|
|
||||||
|
export const StartPage = () => {
|
||||||
|
return (
|
||||||
|
<div className={StartPageCss.startPage}>
|
||||||
|
<TopBar contact={StartPageData.contact} />
|
||||||
|
<Cover telegramBotUrl={StartPageData.bot} />
|
||||||
|
<Content>
|
||||||
|
<ContentBlock title='Возможности'>
|
||||||
|
<ul>
|
||||||
|
<li>Уведомления в реальном времени о событиях из задач - изменения статусов, упоминания комментариев</li>
|
||||||
|
<li>Генерация и управления отчётами о задачах</li>
|
||||||
|
<li>Под капотом приложение фреймворк</li>
|
||||||
|
</ul>
|
||||||
|
</ContentBlock>
|
||||||
|
<ContentBlock title='Функции telegram бота'>
|
||||||
|
<ul>
|
||||||
|
<li>Последний отчёт для дейли проект ECCM</li>
|
||||||
|
<li>Дополнительные функции для разработчиков
|
||||||
|
eccm:/current_issues_eccm - список текущих задач по статусам - выбираютсятолько задачи из актуальных версий в статусах, где нужна какая-то реакцияили возможна работа прямо сейчас</li>
|
||||||
|
<li>Скриншоты уведомления от бота:
|
||||||
|
Примеры уведомлений о новых задачах и об изменениях статусов:</li>
|
||||||
|
</ul>
|
||||||
|
</ContentBlock>
|
||||||
|
</Content>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StartPage;
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
z-index: 100500;
|
z-index: 100500;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
background-color: #001826;
|
background-color: #001826;
|
||||||
|
|
@ -15,7 +17,7 @@
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container_title {
|
.containerTitle {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-left: 135px;
|
margin-left: 135px;
|
||||||
margin-right: 135px;
|
margin-right: 135px;
|
||||||
|
|
@ -27,7 +29,7 @@
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container_title {
|
.containerTitle {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-left: 100px;
|
margin-left: 100px;
|
||||||
|
|
@ -38,14 +40,14 @@
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.event_emitter_eltex_loc {
|
.eventEmitterEltexLoc {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: width 0.5s, height 0.5s;
|
transition: width 0.5s, height 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.event_emitter_eltex_loc:hover {
|
.eventEmitterEltexLoc:hover {
|
||||||
/* height: 38px; */
|
/* height: 38px; */
|
||||||
/* transform: scale(1.5); */
|
/* transform: scale(1.5); */
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { ReactElement } from 'react';
|
import React, { ReactElement } from 'react';
|
||||||
import './top-bar.css';
|
import TopBarCss from './top-bar.module.css';
|
||||||
import LogoImg from './event_emitter_eltex_loc-32px.png';
|
import LogoImg from './event_emitter_eltex_loc-32px.png';
|
||||||
|
|
||||||
export type TopBarProps = {
|
export type TopBarProps = {
|
||||||
|
|
@ -9,11 +9,11 @@ export type TopBarProps = {
|
||||||
|
|
||||||
const TopBar = (props: TopBarProps): ReactElement => {
|
const TopBar = (props: TopBarProps): ReactElement => {
|
||||||
return (
|
return (
|
||||||
<div className="top">
|
<div className={TopBarCss.top}>
|
||||||
<div className="container_title">
|
<div className={TopBarCss.containerTitle}>
|
||||||
<div className="logo">
|
<div className={TopBarCss.logo}>
|
||||||
<a href="/" className="logo"> {/* a.logo */}
|
<a href="/" className={TopBarCss.logo}>
|
||||||
<img src={LogoImg} alt="event_emitter_eltex_loc" className="event_emitter_eltex_loc" />
|
<img src={LogoImg} alt="event_emitter_eltex_loc" className={TopBarCss.eventEmitterEltexLoc} />
|
||||||
<span>redmine-issue-event-emitter</span>
|
<span>redmine-issue-event-emitter</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue