diff --git a/src/AppRouter.jsx b/src/AppRouter.jsx
index 0521543..51ac508 100755
--- a/src/AppRouter.jsx
+++ b/src/AppRouter.jsx
@@ -7,6 +7,7 @@ import Cities from "./pages/Cities.jsx";
import FederalDistricts from "./pages/FederalDistricts.jsx";
import Roles from "./pages/Roles.jsx";
import Statuses from "./pages/Statuses.jsx";
+import Trucks from "./pages/Trucks.jsx";
const RoutesComponent = () => (
@@ -17,7 +18,8 @@ const RoutesComponent = () => (
} />
} />
} />
- } />
+ } />{" "}
+ } />
);
diff --git a/src/api.jsx b/src/api.jsx
index 39d64f6..e289cab 100755
--- a/src/api.jsx
+++ b/src/api.jsx
@@ -340,3 +340,62 @@ export const deleteStatus = async (id) => {
throw error;
}
};
+
+export const getTrucks = async () => {
+ try {
+ const response = await axios.get(`${API_URL}/trucks`, {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ Accept: "application/json",
+ },
+ });
+ return response.data;
+ } catch (error) {
+ console.log("Ошибка при загрузке грузовиков:", error);
+ throw error;
+ }
+};
+
+export const createTruck = async (truckData) => {
+ try {
+ const response = await axios.post(`${API_URL}/trucks`, truckData, {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ "Content-Type": "application/json",
+ },
+ });
+ return response.data;
+ } catch (error) {
+ console.log("Ошибка при создании грузовика:", error);
+ throw error;
+ }
+};
+
+export const updateTruck = async (id, truckData) => {
+ try {
+ const response = await axios.put(`${API_URL}/trucks/${id}`, truckData, {
+ headers: {
+ Authorization: `Bearer ${getAuthToken()}`,
+ "Content-Type": "application/json",
+ },
+ });
+ return response.data;
+ } catch (error) {
+ console.log("Ошибка при обновлении грузовика:", error);
+ throw error;
+ }
+};
+
+export const deleteTruck = async (id) => {
+ try {
+ await axios.delete(`${API_URL}/trucks/${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 2782958..810826e 100644
--- a/src/components/Header.jsx
+++ b/src/components/Header.jsx
@@ -50,6 +50,11 @@ const Header = () => {
Статусы
+
+
+ Грузовики
+
+
{isAuthenticated ? (
diff --git a/src/pages/Accessories.jsx b/src/pages/Accessories.jsx
index d53b302..fdbc305 100644
--- a/src/pages/Accessories.jsx
+++ b/src/pages/Accessories.jsx
@@ -33,7 +33,6 @@ const Accessories = () => {
const fetchAccessories = async () => {
try {
const data = await getAccessories();
- console.log(data);
setAccessories(data);
} catch (error) {
console.error("Ошибка при загрузке аксессуаров:", error);
diff --git a/src/pages/Trucks.jsx b/src/pages/Trucks.jsx
new file mode 100644
index 0000000..3d129c5
--- /dev/null
+++ b/src/pages/Trucks.jsx
@@ -0,0 +1,186 @@
+import React, { useState, useEffect } from "react";
+import { useNavigate } from "react-router-dom";
+import { getAuthToken } from "../api.jsx";
+import { getTrucks, createTruck, updateTruck, deleteTruck } from "../api.jsx";
+
+const Trucks = () => {
+ const [trucks, setTrucks] = useState([]);
+ const [newTruck, setNewTruck] = useState({
+ name: "",
+ capacity: "",
+ volume: "",
+ });
+ const [editingTruckId, setEditingTruckId] = useState(null);
+ const [error, setError] = useState(null);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ fetchTrucks();
+ }, []);
+
+ const fetchTrucks = async () => {
+ try {
+ const data = await getTrucks();
+ setTrucks(data);
+ } catch (error) {
+ console.error("Ошибка при загрузке грузовиков:", error);
+ }
+ };
+
+ const handleInputChange = (e) => {
+ const { name, value } = e.target;
+ setNewTruck({ ...newTruck, [name]: value });
+ };
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!newTruck.name || !newTruck.capacity || !newTruck.volume) {
+ setError("Пожалуйста, заполните все поля.");
+ return;
+ }
+
+ try {
+ if (editingTruckId) {
+ await updateTruck(editingTruckId, newTruck);
+ } else {
+ await createTruck(newTruck);
+ }
+ fetchTrucks();
+ resetForm();
+ } catch (error) {
+ console.error("Ошибка при добавлении или обновлении грузовика:", error);
+ }
+ };
+
+ const handleEdit = (truck) => {
+ setNewTruck({
+ name: truck.name,
+ capacity: truck.capacity,
+ volume: truck.volume,
+ });
+ setEditingTruckId(truck.id);
+ };
+
+ const handleDelete = async (truckId) => {
+ try {
+ await deleteTruck(truckId);
+ fetchTrucks();
+ } catch (error) {
+ console.error("Ошибка при удалении грузовика:", error);
+ }
+ };
+
+ const resetForm = () => {
+ setNewTruck({
+ name: "",
+ capacity: "",
+ volume: "",
+ });
+ setEditingTruckId(null);
+ };
+
+ if (getAuthToken() === null) {
+ navigate("/login");
+ }
+
+ return (
+
+
Грузовики
+
+
Список грузовиков
+
+
+
+ | Название |
+ Грузоподъемность |
+ Объем |
+ Действия |
+
+
+
+ {trucks.map((truck) => (
+
+ | {truck.name} |
+ {truck.capacity} |
+ {truck.volume} |
+
+
+
+
+
+ |
+
+ ))}
+
+
+
+ );
+};
+
+export default Trucks;