diff --git a/frontend/app.vue b/frontend/app.vue
index 1ee8844..2a84181 100644
--- a/frontend/app.vue
+++ b/frontend/app.vue
@@ -47,14 +47,16 @@ useSeoMeta({
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -136,4 +138,4 @@ useSeoMeta({
.scroll {
overflow-y: scroll;
}
-
\ No newline at end of file
+
diff --git a/frontend/components/ArchiveButton.vue b/frontend/components/ArchiveButton.vue
index 4116419..ca934ea 100644
--- a/frontend/components/ArchiveButton.vue
+++ b/frontend/components/ArchiveButton.vue
@@ -39,33 +39,35 @@ const emitConfirm = () => {
Archivieren
-
-
- Archivieren bestätigen
-
- Möchten Sie diese/-s/-n {{dataType.labelSingle}} wirklich archivieren?
+
+
+
+ Archivieren bestätigen
+
+ Möchten Sie diese/-s/-n {{dataType.labelSingle}} wirklich archivieren?
-
-
-
-
- Abbrechen
-
-
- Archivieren
-
-
+
+
+
+
+ Abbrechen
+
+
+ Archivieren
+
+
-
-
-
+
+
+
+
diff --git a/frontend/components/BankAccountAssignInput.vue b/frontend/components/BankAccountAssignInput.vue
index cd469b1..12b1a9e 100644
--- a/frontend/components/BankAccountAssignInput.vue
+++ b/frontend/components/BankAccountAssignInput.vue
@@ -49,7 +49,7 @@ const assignByIban = async () => {
const match = accounts.value.find((a) => normalizeIban(a.iban) === search)
if (!match) {
- toast.add({ title: "Kein Bankkonto mit dieser IBAN gefunden.", color: "rose" })
+ toast.add({ title: "Kein Bankkonto mit dieser IBAN gefunden.", color: "error" })
return
}
@@ -68,7 +68,7 @@ const removeAssigned = (id) => {
const createAndAssign = async () => {
if (!createPayload.value.iban || !createPayload.value.bic || !createPayload.value.bankName) {
- toast.add({ title: "IBAN, BIC und Bankinstitut sind Pflichtfelder.", color: "rose" })
+ toast.add({ title: "IBAN, BIC und Bankinstitut sind Pflichtfelder.", color: "error" })
return
}
@@ -141,42 +141,44 @@ loadAccounts()
-
- Neue Bankverbindung erstellen
-
-
-
-
-
- Ermitteln
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Abbrechen
-
Erstellen und zuweisen
+
+
+ Neue Bankverbindung erstellen
+
+
+
+
+
+ Ermitteln
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+ Abbrechen
+ Erstellen und zuweisen
+
+
+
+
diff --git a/frontend/components/ButtonWithConfirm.vue b/frontend/components/ButtonWithConfirm.vue
index 91da4c0..e5621f1 100644
--- a/frontend/components/ButtonWithConfirm.vue
+++ b/frontend/components/ButtonWithConfirm.vue
@@ -50,7 +50,7 @@ const emitConfirm = () => {
Archivieren
diff --git a/frontend/components/Calculator.vue b/frontend/components/Calculator.vue
index a31fd53..8bee185 100644
--- a/frontend/components/Calculator.vue
+++ b/frontend/components/Calculator.vue
@@ -51,8 +51,8 @@
+19%
+7%
-
-19%
-
-7%
+
-19%
+
-7%
C
M+
diff --git a/frontend/components/DocumentDisplayModal.vue b/frontend/components/DocumentDisplayModal.vue
index df83272..327f617 100644
--- a/frontend/components/DocumentDisplayModal.vue
+++ b/frontend/components/DocumentDisplayModal.vue
@@ -187,7 +187,7 @@ const moveFile = async () => {
{
-
Zuweisungen
+
| Projekt |
@@ -279,7 +279,7 @@ const moveFile = async () => {
-
Datei zuweisen
+
{
- Datei verschieben
+
{
>Verschieben
- Dateityp
+
{
@change="updateDocument"
/>
- Dokumentenbox
+
{
}
}
+const getSelectItems = (datapoint) => {
+ return datapoint.selectManualOptions || loadedOptions.value[datapoint.selectDataType] || []
+}
+
+const getSelectValueKey = (datapoint) => {
+ return datapoint.selectValueAttribute || 'id'
+}
+
+const getSelectLabelKey = (datapoint) => {
+ return datapoint.selectOptionAttribute || 'label'
+}
+
+const getSelectSearchInput = (datapoint) => {
+ return datapoint.selectSearchAttributes ? { placeholder: 'Suche...' } : false
+}
+
const createItem = async () => {
let ret = null
@@ -264,7 +280,7 @@ const updateItem = async () => {
{
v-for="(columnName,index) in dataType.inputColumns"
:class="platform === 'mobile' ? ['w-full'] : [`w-1/${dataType.inputColumns.length}`, ... index < dataType.inputColumns.length -1 ? ['mr-5'] : []]"
>
- {{ columnName }}
+
-
@@ -354,7 +370,7 @@ const updateItem = async () => {
{
{{ datapoint.inputTrailing }}
-
@@ -393,7 +409,7 @@ const updateItem = async () => {
{
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
rows="4"
/>
-
+
{
/>
-
+
-
+
{
/>
-
+
@@ -460,7 +476,7 @@ const updateItem = async () => {
{
{{ datapoint.inputTrailing }}
-
Keine Optionen verfügbar
{
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
rows="4"
/>
-
+
-
+
-
+
-
+
@@ -572,11 +586,11 @@ const updateItem = async () => {
icon="i-heroicons-x-mark"
/>
-
+
-
@@ -589,7 +603,7 @@ const updateItem = async () => {
{
{{ datapoint.inputTrailing }}
-
@@ -628,7 +642,7 @@ const updateItem = async () => {
{
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
rows="4"
/>
-
+
{
/>
-
+
-
+
{
/>
-
+
@@ -695,7 +709,7 @@ const updateItem = async () => {
{
{{ datapoint.inputTrailing }}
-
Keine Optionen verfügbar
{
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
rows="4"
/>
-
+
-
+
-
+
-
+
@@ -807,7 +819,7 @@ const updateItem = async () => {
icon="i-heroicons-x-mark"
/>
-
+
diff --git a/frontend/components/EntityList.vue b/frontend/components/EntityList.vue
index 2cbdb46..acf1ab5 100644
--- a/frontend/components/EntityList.vue
+++ b/frontend/components/EntityList.vue
@@ -110,12 +110,6 @@ const filteredRows = computed(() => {
-
@@ -138,7 +132,7 @@ const filteredRows = computed(() => {
@@ -169,7 +163,7 @@ const filteredRows = computed(() => {
:ui-menu="{ width: 'min-w-max' }"
@change="tempStore.modifyColumns(type,selectedColumns)"
>
-
+
Spalten
diff --git a/frontend/components/EntityShowSubCreatedDocuments.vue b/frontend/components/EntityShowSubCreatedDocuments.vue
index 7f3aa6b..3b9535e 100644
--- a/frontend/components/EntityShowSubCreatedDocuments.vue
+++ b/frontend/components/EntityShowSubCreatedDocuments.vue
@@ -248,7 +248,7 @@ const selectItem = (item) => {
{
{
selectAllocation(i)"
:empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: 'Keine Buchungen anzuzeigen' }"
diff --git a/frontend/components/EntityShowSubTimes.vue b/frontend/components/EntityShowSubTimes.vue
index 01e9f5f..58ba907 100644
--- a/frontend/components/EntityShowSubTimes.vue
+++ b/frontend/components/EntityShowSubTimes.vue
@@ -68,7 +68,7 @@ const columns = [
diff --git a/frontend/components/EntityTable.vue b/frontend/components/EntityTable.vue
index e8a53ce..5dfc78b 100644
--- a/frontend/components/EntityTable.vue
+++ b/frontend/components/EntityTable.vue
@@ -58,77 +58,101 @@
const dataType = dataStore.dataTypes[props.type]
const selectedItem = ref(0)
- const sort = ref({
- column: dataType.sortColumn || "date",
- direction: 'desc'
- })
+ const sorting = ref([{
+ id: dataType.sortColumn || "date",
+ desc: true
+ }])
const normalizedColumns = computed(() => normalizeTableColumns(props.columns))
+ const truncateValue = (value, maxLength) => {
+ if (value === null || value === undefined || value === '') {
+ return '\u00A0'
+ }
+
+ const stringValue = String(value)
+ if (!maxLength || stringValue.length <= maxLength) {
+ return stringValue
+ }
+
+ return `${stringValue.substring(0, maxLength)}...`
+ }
+ const handleSortChange = (value) => {
+ const nextSort = Array.isArray(value) ? value[0] : undefined
+
+ if (!nextSort?.id) {
+ return
+ }
+
+ emit('sort', {
+ sort_column: nextSort.id,
+ sort_direction: nextSort.desc ? 'desc' : 'asc'
+ })
+ }
+ const handleSelect = (row) => {
+ router.push(getShowRoute(props.type, row.original.id))
+ }
router.push(getShowRoute(type, i.id))"
- :empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: `Keine ${dataType.label} anzuzeigen` }"
+ :on-select="handleSelect"
+ :empty="`Keine ${dataType.label} anzuzeigen`"
>
-
-
+
-
- {{dataType.templateColumns.find(i => i.key === "name").maxLength ? (row.name.length > dataType.templateColumns.find(i => i.key === "name").maxLength ? `${row.name.substring(0,dataType.templateColumns.find(i => i.key === "name").maxLength)}...` : row.name ) : row.name}}
+ v-if="row.original.id === props.rows[selectedItem]?.id"
+ class="block truncate text-primary-500 font-bold"
+ >
+
+
+ {{ truncateValue(row.original.name, dataType.templateColumns.find(i => i.key === "name")?.maxLength) }}
+
-
-
- {{dataType.templateColumns.find(i => i.key === "name").maxLength ? (row.name.length > dataType.templateColumns.find(i => i.key === "name").maxLength ? `${row.name.substring(0,dataType.templateColumns.find(i => i.key === "name").maxLength)}...` : row.name ) : row.name}}
+
+
+
+ {{ truncateValue(row.original.name, dataType.templateColumns.find(i => i.key === "name")?.maxLength) }}
+
-
+
{{row.fullName}}
+ v-if="row.original.id === props.rows[selectedItem]?.id"
+ class="block truncate text-primary-500 font-bold">{{ row.original.fullName }}
-
- {{row.fullName}}
+
+ {{ row.original.fullName }}
-
+
{{row.licensePlate}}
+ v-if="row.original.id === props.rows[selectedItem]?.id"
+ class="block truncate text-primary-500 font-bold">{{ row.original.licensePlate }}
-
- {{row.licensePlate}}
+
+ {{ row.original.licensePlate }}
-
-
-
- {{row[column.key] ? `${column.maxLength ? (row[column.key].length > column.maxLength ? `${row[column.key].substring(0,column.maxLength)}...` : row[column.key]) : row[column.key]} ${column.unit ? column.unit : ''}`: ''}}
-
+ v-slot:[`${column.key}-cell`]="{ row }">
+
+
+
+
+ {{ `${truncateValue(row.original[column.key], column.maxLength)}${column.unit ? ` ${column.unit}` : ''}` }}
+
+
diff --git a/frontend/components/EntityTableMobile.vue b/frontend/components/EntityTableMobile.vue
index 8c195f8..19bdc9b 100644
--- a/frontend/components/EntityTableMobile.vue
+++ b/frontend/components/EntityTableMobile.vue
@@ -77,7 +77,7 @@
@@ -138,7 +138,7 @@ const renderText = (text) => {
v-if="items.length > 0"
v-for="(item,index) in items.slice().reverse()"
>
-
diff --git a/frontend/components/InboxList.vue b/frontend/components/InboxList.vue
index 04ab42b..6027c41 100644
--- a/frontend/components/InboxList.vue
+++ b/frontend/components/InboxList.vue
@@ -86,7 +86,7 @@ defineShortcuts({
-
+
\ No newline at end of file
diff --git a/frontend/components/InboxMail.vue b/frontend/components/InboxMail.vue
index fcf7314..f8b841b 100644
--- a/frontend/components/InboxMail.vue
+++ b/frontend/components/InboxMail.vue
@@ -34,7 +34,7 @@ defineProps({
-
+
@@ -42,7 +42,7 @@ defineProps({
-
+