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