feat: update route center calculating
This commit is contained in:
6
.env
6
.env
@@ -1,3 +1,3 @@
|
||||
VITE_API_URL='https://content.wn.polygon.unprism.ru/'
|
||||
VITE_REACT_APP ='https://content.wn.polygon.unprism.ru/'
|
||||
VITE_KRBL_MEDIA='https://content.wn.polygon.unprism.ru/media/'
|
||||
VITE_API_URL='https://wn.krbl.ru'
|
||||
VITE_REACT_APP ='https://wn.krbl.ru'
|
||||
VITE_KRBL_MEDIA='https://wn.krbl.ru/media/'
|
||||
@@ -21,7 +21,7 @@ function a11yProps(index: number) {
|
||||
export const EditSightPage = observer(() => {
|
||||
const [value, setValue] = useState(0);
|
||||
const [isLoadingData, setIsLoadingData] = useState(true);
|
||||
const { sight, getSightInfo, needLeaveAgree } = editSightStore;
|
||||
const { sight, getSightInfo, needLeaveAgree, getRightArticles } = editSightStore;
|
||||
const { getArticles } = articlesStore;
|
||||
|
||||
const { id } = useParams();
|
||||
@@ -48,6 +48,8 @@ export const EditSightPage = observer(() => {
|
||||
await getArticles("ru");
|
||||
await getArticles("en");
|
||||
await getArticles("zh");
|
||||
// Загружаем данные правого виджета перед завершением загрузки
|
||||
await getRightArticles(+id);
|
||||
} finally {
|
||||
setIsLoadingData(false);
|
||||
}
|
||||
|
||||
@@ -488,16 +488,6 @@ class MapStore {
|
||||
const route_number = properties.name || "Маршрут 1";
|
||||
const path = geometry.coordinates.map((c: any) => [c[1], c[0]]);
|
||||
|
||||
const lineGeom = new GeoJSON().readGeometry(geometry, {
|
||||
dataProjection: "EPSG:4326",
|
||||
featureProjection: "EPSG:3857",
|
||||
});
|
||||
const centerCoords = getCenter(lineGeom.getExtent());
|
||||
const [center_longitude, center_latitude] = toLonLat(
|
||||
centerCoords,
|
||||
"EPSG:3857"
|
||||
);
|
||||
|
||||
let carrier_id = 0;
|
||||
let carrier = "";
|
||||
|
||||
@@ -515,8 +505,8 @@ class MapStore {
|
||||
const routeData = {
|
||||
route_number,
|
||||
path,
|
||||
center_latitude,
|
||||
center_longitude,
|
||||
center_latitude: path[0][0],
|
||||
center_longitude: path[0][1],
|
||||
carrier,
|
||||
carrier_id,
|
||||
governor_appeal: 0,
|
||||
@@ -2662,18 +2652,16 @@ const MapSightbar: React.FC<MapSightbarProps> = observer(
|
||||
description.trim() !== "";
|
||||
const routeName =
|
||||
featureType === "route"
|
||||
? ((feature.get("routeName") as string) || "")
|
||||
? (feature.get("routeName") as string) || ""
|
||||
: "";
|
||||
const routeNumber =
|
||||
featureType === "route"
|
||||
? ((feature.get("routeNumber") as string) || fName)
|
||||
? (feature.get("routeNumber") as string) || fName
|
||||
: "";
|
||||
const routeNumberTrimmed = routeNumber.trim();
|
||||
const routeNameTrimmed = routeName.trim();
|
||||
const displayName =
|
||||
featureType === "route"
|
||||
? routeNumberTrimmed || fName
|
||||
: fName;
|
||||
featureType === "route" ? routeNumberTrimmed || fName : fName;
|
||||
const showRouteName =
|
||||
featureType === "route" &&
|
||||
routeNameTrimmed !== "" &&
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
} from "@mui/material";
|
||||
import { MediaViewer, VideoPreviewCard } from "@widgets";
|
||||
import { observer } from "mobx-react-lite";
|
||||
import { ArrowLeft, Loader2, Save, Plus } from "lucide-react";
|
||||
import { ArrowLeft, Loader2, Save, Plus, X } from "lucide-react";
|
||||
import { useEffect, useState, useMemo } from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { toast } from "react-toastify";
|
||||
@@ -174,11 +174,6 @@ export const RouteCreatePage = observer(() => {
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
if (!governorAppeal) {
|
||||
toast.error("Выберите статью для обращения к пассажирам");
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const validationResult = validateCoordinates(routeCoords);
|
||||
if (validationResult !== true) {
|
||||
@@ -213,7 +208,9 @@ export const RouteCreatePage = observer(() => {
|
||||
}
|
||||
|
||||
const carrier_id = Number(carrier);
|
||||
const governor_appeal = Number(governorAppeal);
|
||||
const governor_appeal = governorAppeal
|
||||
? Number(governorAppeal)
|
||||
: undefined;
|
||||
const rotate = turn ? Number(turn) : undefined;
|
||||
const center_latitude = centerLat ? Number(centerLat) : undefined;
|
||||
const center_longitude = centerLng ? Number(centerLng) : undefined;
|
||||
@@ -238,7 +235,6 @@ export const RouteCreatePage = observer(() => {
|
||||
carrier_id,
|
||||
route_number: routeNumber,
|
||||
route_sys_number: govRouteNumber,
|
||||
governor_appeal,
|
||||
route_name: routeName,
|
||||
route_direction,
|
||||
scale_min: scale_min !== null ? scale_min : 0,
|
||||
@@ -251,6 +247,10 @@ export const RouteCreatePage = observer(() => {
|
||||
videoPreview && videoPreview !== "" ? videoPreview : undefined,
|
||||
};
|
||||
|
||||
if (governor_appeal !== undefined) {
|
||||
newRoute.governor_appeal = governor_appeal;
|
||||
}
|
||||
|
||||
await routeStore.createRoute(newRoute);
|
||||
toast.success("Маршрут успешно создан");
|
||||
navigate(-1);
|
||||
@@ -382,6 +382,17 @@ export const RouteCreatePage = observer(() => {
|
||||
},
|
||||
}}
|
||||
/>
|
||||
{selectedArticle && (
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="error"
|
||||
onClick={() => setGovernorAppeal("")}
|
||||
startIcon={<X size={16} />}
|
||||
sx={{ minWidth: "auto", px: 2 }}
|
||||
>
|
||||
Сбросить
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
variant="outlined"
|
||||
onClick={() => setIsSelectArticleDialogOpen(true)}
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
} from "@mui/material";
|
||||
import { MediaViewer, VideoPreviewCard } from "@widgets";
|
||||
import { observer } from "mobx-react-lite";
|
||||
import { ArrowLeft, Copy, Save, Plus } from "lucide-react";
|
||||
import { ArrowLeft, Copy, Save, Plus, X } from "lucide-react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
|
||||
@@ -102,10 +102,6 @@ export const RouteEditPage = observer(() => {
|
||||
toast.error("Заполните номер маршрута в Говорящем Городе");
|
||||
return;
|
||||
}
|
||||
if (!editRouteData.governor_appeal) {
|
||||
toast.error("Выберите статью для обращения к пассажирам");
|
||||
return;
|
||||
}
|
||||
|
||||
const validationResult = validateCoordinates(coordinates);
|
||||
if (validationResult !== true) {
|
||||
@@ -531,6 +527,21 @@ export const RouteEditPage = observer(() => {
|
||||
},
|
||||
}}
|
||||
/>
|
||||
{selectedArticle && (
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="error"
|
||||
onClick={() =>
|
||||
routeStore.setEditRouteData({
|
||||
governor_appeal: 0,
|
||||
})
|
||||
}
|
||||
startIcon={<X size={16} />}
|
||||
sx={{ minWidth: "auto", px: 2 }}
|
||||
>
|
||||
Сбросить
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
variant="outlined"
|
||||
onClick={() => setIsSelectArticleDialogOpen(true)}
|
||||
|
||||
@@ -12,6 +12,7 @@ export function RightSidebar() {
|
||||
saveChanges,
|
||||
originalRouteData,
|
||||
setMapRotation,
|
||||
setMapCenter,
|
||||
setIconSize: updateIconSize,
|
||||
setFontSize: updateFontSize,
|
||||
} = useMapData();
|
||||
@@ -386,7 +387,11 @@ export function RightSidebar() {
|
||||
value={Math.round(localCenter.x * 1000) / 1000}
|
||||
onChange={(e) => {
|
||||
setIsUserEditing(true);
|
||||
setLocalCenter((prev) => ({ ...prev, x: Number(e.target.value) }));
|
||||
const newValue = Number(e.target.value);
|
||||
setLocalCenter((prev) => ({ ...prev, x: newValue }));
|
||||
if (!isNaN(newValue) && localCenter.y !== undefined) {
|
||||
setMapCenter(newValue, localCenter.y);
|
||||
}
|
||||
}}
|
||||
onBlur={() => {
|
||||
setIsUserEditing(false);
|
||||
@@ -406,12 +411,16 @@ export function RightSidebar() {
|
||||
/>
|
||||
<TextField
|
||||
type="number"
|
||||
label="Центр карты, высота"
|
||||
label="Центр карты, долгота"
|
||||
variant="filled"
|
||||
value={Math.round(localCenter.y * 1000) / 1000}
|
||||
onChange={(e) => {
|
||||
setIsUserEditing(true);
|
||||
setLocalCenter((prev) => ({ ...prev, y: Number(e.target.value) }));
|
||||
const newValue = Number(e.target.value);
|
||||
setLocalCenter((prev) => ({ ...prev, y: newValue }));
|
||||
if (!isNaN(newValue) && localCenter.x !== undefined) {
|
||||
setMapCenter(localCenter.x, newValue);
|
||||
}
|
||||
}}
|
||||
onBlur={() => {
|
||||
setIsUserEditing(false);
|
||||
|
||||
@@ -123,11 +123,18 @@ class RouteStore {
|
||||
if (!this.editRouteData.video_preview) {
|
||||
delete this.editRouteData.video_preview;
|
||||
}
|
||||
const response = await authInstance.patch(`/route/${id}`, {
|
||||
const dataToSend: any = {
|
||||
...this.editRouteData,
|
||||
center_latitude: parseFloat(this.editRouteData.center_latitude),
|
||||
center_longitude: parseFloat(this.editRouteData.center_longitude),
|
||||
});
|
||||
};
|
||||
if (
|
||||
this.editRouteData.governor_appeal === 0 ||
|
||||
!this.editRouteData.governor_appeal
|
||||
) {
|
||||
dataToSend.governor_appeal = null;
|
||||
}
|
||||
const response = await authInstance.patch(`/route/${id}`, dataToSend);
|
||||
|
||||
runInAction(() => {
|
||||
this.route[id] = response.data;
|
||||
|
||||
Reference in New Issue
Block a user