routes creator
Gitea Actions Demo / build_and_push (push) Successful in 1m9s
Details
Gitea Actions Demo / build_and_push (push) Successful in 1m9s
Details
This commit is contained in:
parent
dcc16aa373
commit
80b00a281e
|
|
@ -1,29 +0,0 @@
|
||||||
import VuesticLogo from "./VuesticLogo.vue";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
title: "VuesticLogo",
|
|
||||||
component: VuesticLogo,
|
|
||||||
tags: ["autodocs"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Default = () => ({
|
|
||||||
components: { VuesticLogo },
|
|
||||||
template: `<VuesticLogo start="#6B7AFE" end="#083CC6" />`,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const White = () => ({
|
|
||||||
components: { VuesticLogo },
|
|
||||||
template: `<div class="bg-primary">
|
|
||||||
<VuesticLogo start="#FFF"/>
|
|
||||||
</div>`,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Blue = () => ({
|
|
||||||
components: { VuesticLogo },
|
|
||||||
template: `<VuesticLogo start="#0E41C9"/>`,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Height = () => ({
|
|
||||||
components: { VuesticLogo },
|
|
||||||
template: `<VuesticLogo start="#6B7AFE" end="#083CC6" :height="48"/>`,
|
|
||||||
});
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
<template>
|
|
||||||
<VaButton
|
|
||||||
preset="secondary"
|
|
||||||
color="textPrimary"
|
|
||||||
href="https://github.com/epicmaxco/vuestic-admin"
|
|
||||||
target="_blank"
|
|
||||||
aria-label="Visit github"
|
|
||||||
>
|
|
||||||
<VaIcon :component="VaIconGitHub" />
|
|
||||||
</VaButton>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import VaIconGitHub from "../../icons/VaIconGitHub.vue";
|
|
||||||
</script>
|
|
||||||
|
|
@ -12,6 +12,13 @@ const authRoutes = [
|
||||||
icon: "vuestic-iconset-dashboard",
|
icon: "vuestic-iconset-dashboard",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "routes",
|
||||||
|
displayName: "menu.routes",
|
||||||
|
meta: {
|
||||||
|
icon: "near_me",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'workouts',
|
name: 'workouts',
|
||||||
displayName: 'menu.workouts',
|
displayName: 'menu.workouts',
|
||||||
|
|
@ -38,6 +45,13 @@ const authRoutes = [
|
||||||
] as INavigationRoute[]
|
] as INavigationRoute[]
|
||||||
|
|
||||||
const publicRoutes = [
|
const publicRoutes = [
|
||||||
|
{
|
||||||
|
name: "routes",
|
||||||
|
displayName: "menu.routes",
|
||||||
|
meta: {
|
||||||
|
icon: "vuestic-iconset-map",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "dashboard",
|
name: "dashboard",
|
||||||
displayName: "menu.dashboard",
|
displayName: "menu.dashboard",
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
"auth": "Auth",
|
"auth": "Auth",
|
||||||
"buttons": "Buttons",
|
"buttons": "Buttons",
|
||||||
"timelines": "Timelines",
|
"timelines": "Timelines",
|
||||||
|
"routes": "Построение маршрутов",
|
||||||
"dashboard": "Лента",
|
"dashboard": "Лента",
|
||||||
"billing": "Billing",
|
"billing": "Billing",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<section class="map">
|
||||||
|
<div id="workout-map">
|
||||||
|
<yandex-map v-model="map" :settings="{
|
||||||
|
location: {
|
||||||
|
center: mapCenter,
|
||||||
|
zoom: 10,
|
||||||
|
},
|
||||||
|
}" width="100%" :height=height>
|
||||||
|
<yandex-map-default-scheme-layer />
|
||||||
|
<yandex-map-default-features-layer />
|
||||||
|
<yandex-map-listener :settings="{ onClick: (_: any, e: any) => clickCoordinates = [...clickCoordinates, e.coordinates]}"/>
|
||||||
|
<yandex-map-default-marker
|
||||||
|
v-if="clickCoordinates.length === 1"
|
||||||
|
:settings="{ title: 'Начальная точка', coordinates: clickCoordinates[0] }"
|
||||||
|
/>
|
||||||
|
<yandex-map-feature
|
||||||
|
:settings="{
|
||||||
|
geometry: {
|
||||||
|
type: 'LineString',
|
||||||
|
coordinates: clickCoordinates,
|
||||||
|
},
|
||||||
|
style: {
|
||||||
|
stroke: [{ color: '#007afce6', width: 4 }],
|
||||||
|
},
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<yandex-map-controls :settings="{ position: 'right top', orientation: 'vertical' }">
|
||||||
|
<yandex-map-control>
|
||||||
|
<div class="info">
|
||||||
|
Вы можете добавлять новые точки<br> на карту путём клика на неё
|
||||||
|
</div>
|
||||||
|
</yandex-map-control>
|
||||||
|
<yandex-map-control-button
|
||||||
|
v-if="clickCoordinates.length"
|
||||||
|
:settings="{ background: 'blue', color: '#fff', onClick: () => downloadAsCSV()}"
|
||||||
|
>
|
||||||
|
Выгрузить
|
||||||
|
</yandex-map-control-button>
|
||||||
|
<yandex-map-control-button
|
||||||
|
v-if="clickCoordinates.length"
|
||||||
|
:settings="{ background: 'blue', color: '#fff', onClick: () => clickCoordinates.pop()}"
|
||||||
|
>
|
||||||
|
Отменить последнюю точку
|
||||||
|
</yandex-map-control-button>
|
||||||
|
<yandex-map-control-button
|
||||||
|
v-if="clickCoordinates.length"
|
||||||
|
:settings="{ background: '#fd6466e6', color: '#fff', onClick: () => clickCoordinates = []}"
|
||||||
|
>
|
||||||
|
Стереть точки ({{ clickCoordinates.length }})
|
||||||
|
</yandex-map-control-button>
|
||||||
|
</yandex-map-controls>
|
||||||
|
</yandex-map>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
import { AxiosResponse, AxiosInstance } from "axios";
|
||||||
|
import { ref, inject, shallowRef } from 'vue';
|
||||||
|
import { useToast } from "vuestic-ui/web-components";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
import type { LngLat, YMap } from '@yandex/ymaps3-types';
|
||||||
|
import {
|
||||||
|
YandexMap,
|
||||||
|
YandexMapDefaultSchemeLayer,
|
||||||
|
YandexMapFeature,
|
||||||
|
YandexMapDefaultFeaturesLayer,
|
||||||
|
YandexMapDefaultMarker,
|
||||||
|
YandexMapControl,
|
||||||
|
YandexMapControlButton,
|
||||||
|
YandexMapControls,
|
||||||
|
YandexMapListener, } from 'vue-yandex-maps';
|
||||||
|
|
||||||
|
|
||||||
|
const { push } = useRouter();
|
||||||
|
const axiosPublic= inject('axiosPublic') as AxiosInstance;
|
||||||
|
const { init } = useToast();
|
||||||
|
const mapCenter = ref([30.31413, 59.93863]);
|
||||||
|
const height = `${window.innerHeight}px`;
|
||||||
|
|
||||||
|
const map = shallowRef<null | YMap>(null);
|
||||||
|
const clickCoordinates = ref<LngLat[]>([]);
|
||||||
|
|
||||||
|
const toGPX = () => {
|
||||||
|
let content = "";
|
||||||
|
var date = (new Date()).toISOString();
|
||||||
|
for (let i in clickCoordinates.value) {
|
||||||
|
content += `<trkpt lat="${clickCoordinates.value[i][1]}" lon="${clickCoordinates.value[i][0]}"><ele>${i}</ele><time>${date}</time></trkpt>`
|
||||||
|
}
|
||||||
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no" ?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="cycle-rider.ru.ru" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"><metadata><name>cycle-rider.ru</name><time>${date}</time></metadata><trk><name>cycle-rider.ru</name><trkseg>${content}</trkseg></trk></gpx>`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const downloadAsCSV = () => {
|
||||||
|
const gpx = toGPX();
|
||||||
|
|
||||||
|
const blob = new Blob([gpx], { type: "text/xml" });
|
||||||
|
|
||||||
|
const link = document.createElement("a");
|
||||||
|
link.href = window.URL.createObjectURL(blob);
|
||||||
|
link.download = "df";
|
||||||
|
link.click();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.map:deep([class$="main-engine-container"] canvas) {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
padding: 15px;
|
||||||
|
width: 300px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -156,7 +156,7 @@ import {
|
||||||
|
|
||||||
import LineWithLineChart from './LineWithLineChart.js'
|
import LineWithLineChart from './LineWithLineChart.js'
|
||||||
import type { YMap } from '@yandex/ymaps3-types';
|
import type { YMap } from '@yandex/ymaps3-types';
|
||||||
import { YandexMap, YandexMapDefaultSchemeLayer, YandexMapFeature, YandexMapDefaultFeaturesLayer, YandexMapMarker, YandexMapDefaultMarker, YandexMapListener, } from 'vue-yandex-maps';
|
import { YandexMap, YandexMapDefaultSchemeLayer, YandexMapFeature, YandexMapDefaultFeaturesLayer, YandexMapDefaultMarker, YandexMapListener, } from 'vue-yandex-maps';
|
||||||
import { WorkoutItem, distConvert, speedConvert, formatTime, ChartData } from "../Definitions.vue";
|
import { WorkoutItem, distConvert, speedConvert, formatTime, ChartData } from "../Definitions.vue";
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,11 @@ const routes: Array<RouteRecordRaw> = [
|
||||||
path: "dashboard",
|
path: "dashboard",
|
||||||
component: () => import("../pages/workouts/Feed.vue"),
|
component: () => import("../pages/workouts/Feed.vue"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "routes",
|
||||||
|
path: "routes",
|
||||||
|
component: () => import("../pages/routes/Route.vue"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "workouts",
|
name: "workouts",
|
||||||
path: "workouts",
|
path: "workouts",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue