waypoints and button

main
Ogoun 5 months ago
parent b30dac2562
commit 5c16593823

@ -24,8 +24,8 @@
<table style="border: 0; display: block;"> <table style="border: 0; display: block;">
<tbody> <tbody>
<tr> <tr>
<td style="width: 760px;"> <td style="width: 760px; vertical-align: top; border-right: 5px solid #252d4a;">
<div class="header-text">Планирование маршрутов</div> <div class="header-text">Выбор региона для посещения</div>
<div class="hr"></div> <div class="hr"></div>
<div id="map"></div> <div id="map"></div>
<div class="legend-row"> <div class="legend-row">
@ -42,12 +42,20 @@
<div id="regionPointsList"></div> <div id="regionPointsList"></div>
</div> </div>
</td> </td>
<td style="width: 640px;"> <td style="width: 640px; vertical-align: top;">
<div class="header-text">Планирование маршрута</div>
<div class="travel"> <div class="travel">
<div class="dx-field"> <div class="dx-field">
<div id="selectedPointsList"></div> <div id="selectedPointsList"></div>
</div> </div>
</div> </div>
<p class="text">Для планирования маршрута выберите регион, и точки для посещения. Затем
разместите в начале списка пункт с которого планируете
начать
путешествие, а в конце, пункт в котором планируете закончить. После чего нажмите кнопку -
<b>Рассчитать маршрут.</b>
</p>
<div id="recalculateWaypointsButton"> </div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

@ -1,6 +1,8 @@
let markersData = []; let markersData = [];
let regions = []; let regions = [];
let points = []; let points = [];
var regionPointsWidget;
var selectedPointsWidget;
const markerUrl = './img/map-marker.png'; const markerUrl = './img/map-marker.png';
// Инициализация данных, подготовка массивов для загрузки в контролы // Инициализация данных, подготовка массивов для загрузки в контролы
@ -37,7 +39,8 @@ function loadPoints(region) {
var lon = parseFloat(loc[1].trim()) var lon = parseFloat(loc[1].trim())
points.push({ points.push({
id: p_idx, id: p_idx,
text: point.name + ' (' + point.description + ')', text: point.name,
description: point.description,
location: [lat, lon], location: [lat, lon],
tooltip: { tooltip: {
text: point.description, text: point.description,
@ -65,8 +68,13 @@ function initMap() {
// Пересоздание списка точек указанного региона, для выбора мест к посещению // Пересоздание списка точек указанного региона, для выбора мест к посещению
function rebuildRegionPointsList(region) { function rebuildRegionPointsList(region) {
loadPoints(region); if (regionPointsWidget) {
const listWidget = $('#regionPointsList').dxList({ regionPointsWidget.dispose();
}
if (selectedPointsWidget) {
selectedPointsWidget.dispose();
}
regionPointsWidget = $('#regionPointsList').dxList({
dataSource: new DevExpress.data.DataSource({ dataSource: new DevExpress.data.DataSource({
store: new DevExpress.data.ArrayStore({ store: new DevExpress.data.ArrayStore({
key: 'id', key: 'id',
@ -74,12 +82,19 @@ function rebuildRegionPointsList(region) {
}), }),
}), }),
height: 400, height: 400,
showScrollbar: 'always',
showSelectionControls: true, showSelectionControls: true,
selectionMode: 'all', selectionMode: 'all',
selectByClick: false, selectByClick: false,
onSelectionChanged() { onSelectionChanged() {
rebuildSelectedPointsList(listWidget.option('selectedItemKeys')); rebuildSelectedPointsList(regionPointsWidget.option('selectedItemKeys'));
}, },
itemTemplate(data) {
const result = $('<div>').addClass('region-point');
$('<h3>').text(data.text).appendTo(result);
$('<i>').text(data.description).appendTo(result);
return result;
}
}).dxList('instance'); }).dxList('instance');
} }
@ -95,6 +110,7 @@ function initRegionDropDown() {
keyExpr: 'id', keyExpr: 'id',
onItemClick(e) { onItemClick(e) {
var region = data['regions'][e.itemData.id]; var region = data['regions'][e.itemData.id];
loadPoints(region);
rebuildRegionPointsList(region); rebuildRegionPointsList(region);
DevExpress.ui.notify(`${e.itemData.name}`, 'success', 600); DevExpress.ui.notify(`${e.itemData.name}`, 'success', 600);
}, },
@ -102,13 +118,69 @@ function initRegionDropDown() {
}); });
} }
function rebuildSelectedPointsList(selectedPointsIndexes) // Перестроение списка выбранных точек
{ function rebuildSelectedPointsList(selectedPointsIndexes) {
let selected = [];
for (const p_idx in points) {
if (p_idx in selectedPointsIndexes) {
selected.push(points[p_idx]);
}
}
if (selectedPointsWidget) {
selectedPointsWidget.dispose();
}
selectedPointsWidget = $("#selectedPointsList").dxList({
dataSource: selected,
keyExpr: 'id',
height: 400,
showScrollbar: 'always',
itemDragging: {
allowReordering: true,
data: selected,
group: 'selected',
onDragStart(e) {
e.itemData = e.fromData[e.fromIndex];
},
onAdd(e) {
e.toData.splice(e.toIndex, 0, e.itemData);
e.component.reload();
},
onRemove(e) {
e.fromData.splice(e.fromIndex, 1);
e.component.reload();
},
onReorder({
fromIndex,
toIndex,
fromData,
component,
}) {
[fromData[fromIndex], fromData[toIndex]] = [fromData[toIndex], fromData[fromIndex]];
component.reload();
},
},
}).dxList('instance');
}
function initRecalculateWaypointsButton(){
$('#recalculateWaypointsButton').dxButton({
stylingMode: 'contained',
text: 'Рассчитать маршрут',
type: 'default',
width: 220,
onClick() {
recalculateWaypoints();
},
});
}
function recalculateWaypoints(){
DevExpress.ui.notify('The Text button was clicked');
} }
$(() => { $(() => {
initData(); initData();
initMap(); initMap();
initRegionDropDown(); initRegionDropDown();
initRecalculateWaypointsButton();
}); });

@ -32,10 +32,19 @@
font-size: 30px; font-size: 30px;
font-family: 'Segoe UI Light', 'Helvetica Neue Light', 'Segoe UI', 'Helvetica Neue', Helvetica, 'Trebuchet MS', 'Droid Sans', Tahoma, Geneva, sans-serif; font-family: 'Segoe UI Light', 'Helvetica Neue Light', 'Segoe UI', 'Helvetica Neue', Helvetica, 'Trebuchet MS', 'Droid Sans', Tahoma, Geneva, sans-serif;
font-weight: 200; font-weight: 200;
margin-left: 100px;
padding: 0 0 30px 0; padding: 0 0 30px 0;
} }
.text
{
display: inline-block;
font-size: 18px;
font-family: 'Segoe UI Light', 'Helvetica Neue Light', 'Segoe UI', 'Helvetica Neue', Helvetica, 'Trebuchet MS', 'Droid Sans', Tahoma, Geneva, sans-serif;
font-weight: 200;
padding: 0 0 0 0;
color: white;
}
.dark .header-text .dark .header-text
{ {
color: white; color: white;

Loading…
Cancel
Save

Powered by TurnKey Linux.