Files
FEDEO/frontend/components/EntityShowSub.vue
florianfederspiel 3f8ce5daf7
All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 30s
Build and Push Docker Images / build-frontend (push) Successful in 1m8s
Tasks und Vertragstyp fix #17
2026-02-15 22:02:16 +01:00

130 lines
3.3 KiB
Vue

<script setup>
const props = defineProps({
queryStringData: {
type: String
},
item: {
type: Object,
required: true
},
tabLabel: {
type: String,
required: true
},
type: {
type: String,
},
topLevelType: {
type: String,
required: true
},
platform: {
type: String,
required: true
}
})
let type = ref("")
const dataStore = useDataStore()
const tempStore = useTempStore()
const router = useRouter()
const createRoute = computed(() => type.value === "tasks" ? `/tasks/create?${props.queryStringData}` : `/standardEntity/${type.value}/create?${props.queryStringData}`)
let dataType = null
const selectedColumns = ref(null)
const columns = computed(() => dataType.templateColumns.filter((column) => !column.disabledInTable && selectedColumns.value.find(i => i.key === column.key)))
const loaded = ref(false)
const setup = () => {
if(!props.type && props.tabLabel ) {
if(props.tabLabel === "Aufgaben") {
type.value = "tasks"
} else if(props.tabLabel === "Projekte") {
type.value = "projects"
} else if(props.tabLabel === "Termine") {
type.value = "events"
} else if(props.tabLabel === "Objekte") {
type.value = "plants"
} else if(props.tabLabel === "Ansprechpartner") {
type.value = "contacts"
} else if(props.tabLabel === "Verträge") {
type.value = "contracts"
} else if(props.tabLabel === "Überprüfungen") {
type.value = "checks"
}
} else {
type.value = props.type
}
dataType = dataStore.dataTypes[type.value]
selectedColumns.value = tempStore.columns[type.value] ? tempStore.columns[type.value] : dataType.templateColumns.filter(i => !i.disabledInTable)
loaded.value = true
}
setup()
</script>
<template>
<UCard class="mt-5" v-if="loaded" :style="props.platform !== 'mobile' ? 'height: 80vh' : ''">
<template #header v-if="props.platform === 'mobile'">
<span>{{dataType.label}}</span>
</template>
<Toolbar>
<UButton
@click="router.push(createRoute)"
>
+ {{dataType.labelSingle}}
</UButton>
<UButton
v-if="props.topLevelType === 'customers' && type === 'plants'"
@click="router.push(`/standardEntity/plants/create?${props.queryStringData}&name=${encodeURIComponent(`${props.item.infoData.street}, ${props.item.infoData.zip} ${props.item.infoData.city}`)}`)"
>
+ Kundenadresse als Objekt
</UButton>
<template #right>
<USelectMenu
v-model="selectedColumns"
icon="i-heroicons-adjustments-horizontal-solid"
:options="dataType.templateColumns.filter(i => !i.disabledInTable)"
multiple
class="hidden lg:block"
by="key"
:color="selectedColumns.length !== dataType.templateColumns.filter(i => !i.disabledInTable).length ? 'primary' : 'white'"
:ui-menu="{ width: 'min-w-max' }"
@change="tempStore.modifyColumns(type,selectedColumns)"
>
<template #label>
Spalten
</template>
</USelectMenu>
</template>
</Toolbar>
<div class="scroll" style="height: 70vh">
<EntityTable
:type="type"
:columns="columns"
:rows="props.item[type]"
style
/>
</div>
</UCard>
</template>
<style scoped>
</style>