feat: 🐛 readded support for selectable driver and vehicle at track upload

This commit is contained in:
2025-01-09 01:30:05 +01:00
parent c97499196c
commit a4b1895844
2 changed files with 107 additions and 28 deletions

7
app.py
View File

@ -199,8 +199,11 @@ def uploadFile():
with open(file_path, 'wb') as f: with open(file_path, 'wb') as f:
f.write(file.read()) f.write(file.read())
driver = driverHandler.getDriver(1) driverID = int(request.form.get('driverID'))
vehicle = vehicleHandler.getVehicle(1) vehicleID = int(request.form.get('vehicleID'))
driver = driverHandler.getDriver(driverID)
vehicle = vehicleHandler.getVehicle(vehicleID)
app.logger.debug(f"driver {driver.id}") app.logger.debug(f"driver {driver.id}")
app.logger.debug(f"vehicle {vehicle.id}") app.logger.debug(f"vehicle {vehicle.id}")

View File

@ -1,12 +1,18 @@
<script lang="ts"> <script lang="ts">
import {defineComponent, SetupContext, ref, Ref} from 'vue'; import { defineComponent, SetupContext, ref, Ref } from 'vue';
import GetLocalizedText from "../classes/language"; import GetLocalizedText from "../classes/language";
type driver = { type driver = {
id:number id: number
name:string name: string
} }
type vehicle = {
id: number
name: string
}
export default defineComponent({ export default defineComponent({
emits: ['close', 'response'], emits: ['close', 'response'],
name: 'settings', name: 'settings',
@ -15,16 +21,18 @@ export default defineComponent({
const file = ref<File | null>(); const file = ref<File | null>();
const form = ref<HTMLFormElement>(); const form = ref<HTMLFormElement>();
const drivers:Ref<driver[]> = ref([]) const drivers: Ref<driver[]> = ref([])
const selectedDriver:Ref<number> = ref(0); const vehicles: Ref<vehicle[]> = ref([])
const selectedDriver: Ref<number> = ref(0);
const selectedVehicle: Ref<number> = ref(0);
props.drivers.forEach((d:driver) => { props.drivers.forEach((d: driver) => {
drivers.value.push({id:d.id, name:d.name}) drivers.value.push({ id: d.id, name: d.name })
}); });
// localized text // localized text
// if there is time left this gets moved out to its own class // if there is time left this gets moved out to its own class
var localizedUploadHeader:Ref<string> = ref("") var localizedUploadHeader: Ref<string> = ref("")
async function getLocalization() { async function getLocalization() {
localizedUploadHeader.value = await GetLocalizedText("localizedUploadHeader") localizedUploadHeader.value = await GetLocalizedText("localizedUploadHeader")
} }
@ -37,6 +45,60 @@ export default defineComponent({
} }
} }
// handles sending webrequests to the backend
const getDrivers = async () => {
const headers: Headers = new Headers()
headers.set('Content-Type', 'application/json')
headers.set('Accept', 'application/json')
const request: RequestInfo = new Request("http://localhost:5000/driver", {
method: "GET",
headers: headers
})
var response = await fetch(request)
// make sure the request was successfull
if (response.ok) {
var jsonBody = await response.json()
// convert vehicles from json response to processable data
for (let i = 0; i < jsonBody.length; i++) {
drivers.value.push({ id: jsonBody[i]["id"], name: jsonBody[i]["name"] })
}
} else {
console.log(await response.text())
}
}
// handles getting all existing drivers
const getVehicles = async () => {
const headers: Headers = new Headers()
headers.set('Content-Type', 'application/json')
headers.set('Accept', 'application/json')
const request: RequestInfo = new Request("http://localhost:5000/vehicle", {
method: "GET",
headers: headers
})
var response = await fetch(request)
// make sure the request was successfull
if (response.ok) {
var jsonBody = await response.json()
// convert vehicles from json response to processable data
for (let i = 0; i < jsonBody.length; i++) {
vehicles.value.push({ id: jsonBody[i]["id"], name: jsonBody[i]["name"] })
}
} else {
console.log(await response.text())
}
}
var save = async () => { var save = async () => {
if (!file.value) { if (!file.value) {
@ -46,7 +108,8 @@ export default defineComponent({
const formData = new FormData(); const formData = new FormData();
formData.append("file", file.value); formData.append("file", file.value);
formData.append("driverId", selectedDriver.value.toString()); formData.append("driverID", selectedDriver.value.toString());
formData.append("vehicleID", selectedVehicle.value.toString());
try { try {
@ -73,6 +136,8 @@ export default defineComponent({
} }
getVehicles()
getDrivers()
getLocalization() getLocalization()
const close = () => { const close = () => {
emit("close"); emit("close");
@ -82,7 +147,10 @@ export default defineComponent({
close, close,
fileInputChange, fileInputChange,
selectedDriver, selectedDriver,
selectedVehicle,
save, save,
drivers,
vehicles,
localizedUploadHeader localizedUploadHeader
}; };
}, },
@ -98,19 +166,26 @@ export default defineComponent({
<button class="btn btn-error close round" @click="close()"> <button class="btn btn-error close round" @click="close()">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed">
<path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/> <path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z" />
</svg> </svg>
</button> </button>
<label class="form-control w-full max-w-xs"> <label class="form-control w-full max-w-xs">
<div class="label"> <div class="label">
<span class="label-text">Upload a GPX File</span> <span class="label-text">Upload a GPX File</span>
</div> </div>
<input type="file" ref="file" v-on:change="fileInputChange($event)" class="file-input file-input-bordered w-full max-w-xs" /> <input type="file" ref="file" v-on:change="fileInputChange($event)"
class="file-input file-input-bordered w-full max-w-xs" />
</label> </label>
<div class="dropdown dropdown-bottom"> <div class="dropdown dropdown-bottom">
select Driver: <div tabindex="0" role="button" class="btn m-1">Click</div> select Driver: <div tabindex="0" role="button" class="btn m-1">Click</div>
<ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-[1] w-52 p-2 shadow"> <ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-[1] w-52 p-2 shadow">
<li v-for="driver in drivers"><a v-on:click="selectedDriver=driver.id">{{ driver.name }}</a></li> <li v-for="driver in drivers"><a v-on:click="selectedDriver = driver.id">{{ driver.name }}</a></li>
</ul>
</div>
<div class="dropdown dropdown-bottom">
select Vehicle: <div tabindex="0" role="button" class="btn m-1">Click</div>
<ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-[1] w-52 p-2 shadow">
<li v-for="vehicle in vehicles"><a v-on:click="selectedVehicle = vehicle.id">{{ vehicle.name }}</a></li>
</ul> </ul>
</div> </div>
<button class="btn btn-success" v-on:click="save">Upload</button> <button class="btn btn-success" v-on:click="save">Upload</button>
@ -119,16 +194,17 @@ export default defineComponent({
</template> </template>
<style scoped> <style scoped>
.settingsBody { .settingsBody {
position: absolute; position: absolute;
margin: 10% 10% 0 10%; margin: 10% 10% 0 10%;
width: 80%; width: 80%;
z-index: 10; z-index: 10;
} }
.btn.close {
position: absolute; .btn.close {
right: 30px; position: absolute;
top: 30px; right: 30px;
margin: 0; top: 30px;
} margin: 0;
}
</style> </style>