Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 22 additions & 61 deletions front-doc/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { useState, useEffect } from "react";
import "./App.css";
import { Route, Routes, useLocation } from "react-router-dom";
import { HomePage } from "./pages/home/HomePage";
import { ReportPage } from "./pages/ReportPage";
import { ReleasePage } from "./pages/documentForms/release/ReleasePage";
import { OrderPage } from "./pages/OrderPage";
import { ListPage } from "./pages/ListPage";
import { ThemeProvider } from "./providers/ThemeProvider";
import { HeaderComponent } from "./components/header/HeaderComponent";
import { FooterComponent } from "./components/footer/FooterComponent";
import Loader from "./components/loader/Loader";
import { LoginPage } from "./pages/login/LoginPage";
import { AboutCreatorsPage } from "./pages/creators/AboutCreatorsPage";
import ProtectedRoute from "../src/ProtectedRoute";
import { useAuth } from "../src/hooks/useLogin";
import { useState, useEffect } from 'react';
import './App.css';
import { Route, Routes, useLocation } from 'react-router-dom';
import { HomePage } from './pages/home/HomePage';
import { ReportPage } from './pages/documentForms/report/ReportPage';
import { ReleasePage } from './pages/documentForms/release/ReleasePage';
import { OrderPage } from './pages/OrderPage';
import { ListPage } from './pages/ListPage';
import { ThemeProvider } from './providers/ThemeProvider';
import { HeaderComponent } from './components/header/HeaderComponent';
import { FooterComponent } from './components/footer/FooterComponent';
import Loader from './components/loader/Loader';
import { LoginPage } from './pages/login/LoginPage';
import { AboutCreatorsPage } from './pages/creators/AboutCreatorsPage';
import ProtectedRoute from '../src/ProtectedRoute';
import { useAuth } from '../src/hooks/useLogin';

function App() {
const [loading, setLoading] = useState(true);
Expand Down Expand Up @@ -49,59 +49,20 @@ function App() {
<main>
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route
path="/"
element={
<ProtectedRoute
element={<HomePage />}
isAuthenticated={isAuthenticated}
/>
}
/>
<Route path="/" element={<ProtectedRoute element={<HomePage />} isAuthenticated={isAuthenticated} />} />
<Route
path="report"
element={
<ProtectedRoute
element={<ReportPage />}
isAuthenticated={isAuthenticated}
/>
}
element={<ProtectedRoute element={<ReportPage />} isAuthenticated={isAuthenticated} />}
/>
<Route
path="release"
element={
<ProtectedRoute
element={<ReleasePage />}
isAuthenticated={isAuthenticated}
/>
}
/>
<Route
path="order"
element={
<ProtectedRoute
element={<OrderPage />}
isAuthenticated={isAuthenticated}
/>
}
/>
<Route
path="list"
element={
<ProtectedRoute
element={<ListPage />}
isAuthenticated={isAuthenticated}
/>
}
element={<ProtectedRoute element={<ReleasePage />} isAuthenticated={isAuthenticated} />}
/>
<Route path="order" element={<ProtectedRoute element={<OrderPage />} isAuthenticated={isAuthenticated} />} />
<Route path="list" element={<ProtectedRoute element={<ListPage />} isAuthenticated={isAuthenticated} />} />
<Route
path="creators"
element={
<ProtectedRoute
element={<AboutCreatorsPage />}
isAuthenticated={isAuthenticated}
/>
}
element={<ProtectedRoute element={<AboutCreatorsPage />} isAuthenticated={isAuthenticated} />}
/>
</Routes>
</main>
Expand Down
77 changes: 77 additions & 0 deletions front-doc/src/components/report/ReportDefault.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import jsPDF from 'jspdf';
import { Report } from '../../interfaces/DocumentInterfaces';
import '../../fonts/Times New Roman Cyr Regular-normal';

export const generateReportPDF = (report: Report) => {
const doc = new jsPDF();

doc.addFont('Times New Roman Cyr Regular-normal.ttf', 'Times New Roman Cyr Regular', 'normal');

doc.setFont('Times New Roman Cyr Regular', 'normal');

let pageWidth = doc.internal.pageSize.getWidth();
doc.setFontSize(12);

// шапка документа
let facultyTitle = 'Факультет прикладной математики и информатики';
let reportTitle = 'ДОКЛАДНАЯ ЗАПИСКА';
let reportDate = '24.03.2023 г. № _________';
let location = 'г. Минск';
let recipientTitle = 'Начальнику службы охраны и безопасности';
let recipientName = 'Довыдёнку А.О.';

// Заголовок факультета
doc.text(facultyTitle, 20, 20, { maxWidth: pageWidth / 2 - 40 });

doc.text(reportTitle, 20, 35);
doc.text(reportDate, 20, 45);
doc.text(location, 20, 55);

let recipientTitleWidth = doc.getTextWidth(recipientTitle);
doc.text(recipientTitle, pageWidth - recipientTitleWidth - 20, 20);
let recipientNameWidth = doc.getTextWidth(recipientName);
doc.text(recipientName, pageWidth - recipientNameWidth - 20, 25);

const margin = 10;
const maxWidth = pageWidth - margin * 2;

doc.setFontSize(12);
const text =
report.firstPrefix +
' ' +
report.event +
',' +
' ' +
report.eventOrg +
' ' +
report.secondPrefix +
' ' +
report.action +
'\n';

doc.text(text, 20, 70, { maxWidth: maxWidth });

report.auds.forEach((aud, index) => {
let daysText = '';
if (!aud.allWeek) {
daysText += ' по ';
aud.days.map((day) => (daysText += ' ' + day + ','));
daysText = daysText.substring(0, daysText.length - 1);
}
let timeText = 'c ' + aud.timeFrom?.format('HH:mm') + ' по ' + aud.timeTo?.format('HH:mm');

doc.text(`-. Аудиторию ${aud.number} ${daysText} ${timeText} `, 30, 85 + index * 10);
});

doc.text(`${report.sender}`, 20, 100);
doc.text('Е.О.Шевцов', 20, 105);

doc.text('Согласовано:', pageWidth - 50, 100);
doc.text('Декан ФПМИ БГУ', pageWidth - 50, 105);
doc.text('Ю.Л.Орлович', pageWidth - 50, 110);

doc.save('докладная.pdf');
const pdfDataUri = doc.output('datauristring');
const newTab = window.open();
newTab?.document.write(`<iframe width='100%' height='100%' src='${pdfDataUri}'></iframe>`);
};
10 changes: 10 additions & 0 deletions front-doc/src/constants/reportConstants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export const daysOfWeek = [
{ name: 'Понедельник', val: 'понедельникам' },
{ name: 'Вторник', val: 'вторникам' },
{ name: 'Среда', val: 'средам' },
{ name: 'Четверг', val: 'четвергам' },
{ name: 'Пятница', val: 'пятницам' },
{ name: 'Суббота', val: 'субботам' }
];

export const approverList = ['Замдекана', 'Декан', 'ГСБ'];
7 changes: 7 additions & 0 deletions front-doc/src/fonts/Times New Roman Cyr Regular-normal.js

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions front-doc/src/interfaces/DocumentInterfaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Dayjs } from 'dayjs';

export interface AudotoryInfo {
number: number;
days: string[];
timeFrom: Dayjs | null;
timeTo: Dayjs | null;
allWeek: boolean;
}

export interface Report {
approver: string;
sender: string;
firstPrefix: string;
event: string;
eventOrg: string;
secondPrefix: string;
action: string;
auds: AudotoryInfo[];
}
3 changes: 0 additions & 3 deletions front-doc/src/pages/ReportPage.tsx

This file was deleted.

Loading