diff --git a/src/AppRouter.jsx b/src/AppRouter.jsx
index c4eb65e..2339d5b 100755
--- a/src/AppRouter.jsx
+++ b/src/AppRouter.jsx
@@ -4,6 +4,7 @@ import Home from "./pages/Home.jsx";
import Accessories from "./pages/Accessories.jsx";
import PrivateRoute from "./components/PrivateRoute";
import Cities from "./pages/Cities.jsx";
+import FederalDistricts from "./pages/FederalDistricts.jsx";
const RoutesComponent = () => (
@@ -12,6 +13,7 @@ const RoutesComponent = () => (
} />
} />
} />
+ } />
);
diff --git a/src/api.jsx b/src/api.jsx
index a19295a..995696e 100755
--- a/src/api.jsx
+++ b/src/api.jsx
@@ -170,3 +170,55 @@ export const getFederalDistricts = async () => {
throw error;
}
};
+
+export const createFederalDistrict = async (districtData) => {
+ try {
+ const response = await axios.post(
+ `${API_URL}/federal-districts`,
+ districtData,
+ {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ "Content-Type": "application/json",
+ },
+ }
+ );
+ return response.data;
+ } catch (error) {
+ console.log("Ошибка при создании федерального округа:", error);
+ throw error;
+ }
+};
+
+export const updateFederalDistrict = async (id, districtData) => {
+ try {
+ const response = await axios.put(
+ `${API_URL}/federal-districts/${id}`,
+ districtData,
+ {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ "Content-Type": "application/json",
+ },
+ }
+ );
+ return response.data;
+ } catch (error) {
+ console.log("Ошибка при обновлении федерального округа:", error);
+ throw error;
+ }
+};
+
+export const deleteFederalDistrict = async (id) => {
+ try {
+ await axios.delete(`${API_URL}/federal-districts/${id}`, {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ Accept: "application/json",
+ },
+ });
+ } catch (error) {
+ console.log("Ошибка при удалении федерального округа:", error);
+ throw error;
+ }
+};
diff --git a/src/components/Header.jsx b/src/components/Header.jsx
index 0f9b0e1..881ca7c 100644
--- a/src/components/Header.jsx
+++ b/src/components/Header.jsx
@@ -35,6 +35,11 @@ const Header = () => {
Города
+
+
+ Федеральные округа
+
+
{isAuthenticated ? (
diff --git a/src/pages/FederalDistricts.jsx b/src/pages/FederalDistricts.jsx
new file mode 100644
index 0000000..8455e7c
--- /dev/null
+++ b/src/pages/FederalDistricts.jsx
@@ -0,0 +1,162 @@
+import React, { useState, useEffect } from "react";
+import { useNavigate } from "react-router-dom";
+import { getAuthToken } from "../api.jsx";
+import {
+ getFederalDistricts,
+ createFederalDistrict,
+ updateFederalDistrict,
+ deleteFederalDistrict,
+} from "../api.jsx";
+
+const FederalDistricts = () => {
+ const [districts, setDistricts] = useState([]);
+ const [newDistrict, setNewDistrict] = useState({
+ name: "",
+ });
+ const [editingDistrictId, setEditingDistrictId] = useState(null);
+ const [error, setError] = useState(null);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ fetchFederalDistricts();
+ }, []);
+
+ const fetchFederalDistricts = async () => {
+ try {
+ const data = await getFederalDistricts();
+ setDistricts(data);
+ } catch (error) {
+ console.error("Ошибка при загрузке федеральных округов:", error);
+ }
+ };
+
+ const handleInputChange = (e) => {
+ const { name, value } = e.target;
+ setNewDistrict({ ...newDistrict, [name]: value });
+ };
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!newDistrict.name) {
+ setError("Пожалуйста, заполните все поля.");
+ return;
+ }
+
+ try {
+ if (editingDistrictId) {
+ await updateFederalDistrict(editingDistrictId, newDistrict);
+ } else {
+ await createFederalDistrict(newDistrict);
+ }
+ fetchFederalDistricts();
+ resetForm();
+ } catch (error) {
+ console.error(
+ "Ошибка при добавлении или обновлении федерального округа:",
+ error
+ );
+ }
+ };
+
+ const handleEdit = (district) => {
+ setNewDistrict({
+ name: district.name,
+ });
+ setEditingDistrictId(district.id);
+ };
+
+ const handleDelete = async (districtId) => {
+ try {
+ await deleteFederalDistrict(districtId);
+ fetchFederalDistricts();
+ } catch (error) {
+ console.error("Ошибка при удалении федерального округа:", error);
+ }
+ };
+
+ const resetForm = () => {
+ setNewDistrict({
+ name: "",
+ });
+ setEditingDistrictId(null);
+ };
+
+ if (getAuthToken() === null) {
+ navigate("/login");
+ }
+
+ return (
+
+
Федеральные округа
+
+
Список федеральных округов
+
+
+
+ | ID |
+ Название |
+ Действия |
+
+
+
+ {districts.map((district) => (
+
+ | {district.id} |
+ {district.name} |
+
+
+
+
+
+ |
+
+ ))}
+
+
+
+ );
+};
+
+export default FederalDistricts;