automngr/resources/js/Pages/Cars/Index.vue

71 lines
2.1 KiB
Vue

<template>
<app-layout>
<template #header>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
Autos
</h2>
</template>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="mb-6 flex justify-between items-center">
<input type="text" ref="search" v-model="form.search" autofocus="true" name="search" placeholder="Suchen..." class="border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm block w-full" autocomplete="off">
<jet-button class="ml-4" @click="createCar">
Auto erfassen
</jet-button>
</div>
<simple-table :title="cars.total + ' Autos'" :data="cars" :columns="columns" :defaultSort="{ by: 'name', direction:'asc'}" />
</div>
</div>
</app-layout>
</template>
<script>
import { pickBy, throttle, mapValues } from 'lodash'
import AppLayout from '@/Layouts/AppLayout'
import SimpleTable from '@/Components/SimpleTable.vue'
import SearchFilter from '@/Components/SearchFilter'
import JetButton from '@/Jetstream/Button'
export default {
components: {
SearchFilter,
JetButton,
AppLayout,
SimpleTable,
},
props: {
filters: Object,
cars: Object,
},
data() {
return {
form: {
search: this.filters.search,
trashed: this.filters.trashed,
},
columns: [
{key: 'name', value: 'Name', sortable: true},
{key: 'stammnummer', value: 'Stammummer', sortable: true},
{key: 'buy_price', value: 'Kaufpreis', sortable: true},
{key: 'initial_date', value: 'Inverkehrssetzung', sortable: true},
],
}
},
watch: {
form: {
deep: true,
handler: throttle(function() {
this.$inertia.get(this.route('cars'), pickBy(this.form), { preserveState: false })
}, 300),
},
},
methods: {
reset() {
this.form = mapValues(this.form, () => null)
},
createCar() {
this.$inertia.visit(route('cars.create'), { method: 'get' })
},
},
}
</script>