feat: 🐛 readded support for selectable driver and vehicle at track upload
This commit is contained in:
7
app.py
7
app.py
@ -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}")
|
||||||
|
@ -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>
|
Reference in New Issue
Block a user