PWA: FAB-Button auf Panel 1 entfernt, Lösch-Button für Produktzeilen

- FAB (Plus-Button unten rechts) nur noch auf Panel 0 (STZ-Liste) sichtbar,
  Panel 1 hat bereits den Inline-Button "+ Leistung hinzufügen"
- Lösch-Button (🗑️) für verbaute Produkte (order/added) im Product-Card-Header
  mit Bestätigungsdialog hinzugefügt
- Cache-Busting auf v=2.7

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-03-01 09:57:23 +01:00
parent 292db5d40c
commit 3c9add6864
3 changed files with 26 additions and 14 deletions

View file

@ -459,6 +459,12 @@ body {
align-items: flex-start;
gap: 8px;
}
.product-card-actions {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.product-name {
font-weight: 600;
font-size: 14px;

View file

@ -628,27 +628,18 @@
updateFab: function() {
var $fab = $('#fab-add');
var stz = this.data.stz;
var isDraft = stz && stz.status == 0;
// FAB auf Panel 0 (neuen STZ anlegen) und Panel 1 (Leistung hinzufuegen, nur Draft)
// FAB nur auf Panel 0 (neuen STZ anlegen) - Panel 1 hat eigenen Inline-Button
if (this.state.activePanel === 0 && this.state.canWrite) {
$fab.removeClass('hidden');
} else if (this.state.activePanel === 1 && isDraft && this.state.canEditStz) {
$fab.removeClass('hidden');
} else {
$fab.addClass('hidden');
}
},
handleFabClick: function() {
switch (this.state.activePanel) {
case 0:
if (this.state.activePanel === 0) {
this.showCreateStzDialog();
break;
case 1:
this.showAddLeistungDialog();
break;
}
},
@ -938,6 +929,16 @@
}
});
// Produkt loeschen
$panel.find('.btn-delete-product').on('click', function(e) {
e.stopPropagation();
var id = $(this).data('id');
var origin = $(this).data('origin');
self.showConfirm('Produkt löschen?', 'Dieses Produkt wirklich vom Stundenzettel entfernen?', 'Löschen').then(function(ok) {
if (ok) self.deleteLine(id, origin);
});
});
// Produkt hinzufuegen
$panel.find('#btn-add-product-inline').on('click', function() {
self.showAddProductDialog();
@ -1264,7 +1265,12 @@
html += '<div class="product-desc">' + self.escHtml(p.description) + '</div>';
}
html += '</div>';
html += '<div class="product-card-actions">';
html += '<span class="badge badge-' + p.origin + '">' + self.getOriginLabel(p.origin) + '</span>';
if (isDraft && canWrite) {
html += '<button class="btn btn-danger btn-small btn-delete-product" data-id="' + p.id + '" data-origin="' + p.origin + '">&#128465;</button>';
}
html += '</div>';
html += '</div>';
html += '<div class="product-qty-row">';

View file

@ -38,7 +38,7 @@ $themeColor = getDolGlobalString('THEME_ELDY_TOPMENU_BACK1', '#4390dc');
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/png" sizes="192x192" href="img/icon-192.png">
<link rel="apple-touch-icon" href="img/icon-192.png">
<link rel="stylesheet" href="css/pwa.css?v=2.6">
<link rel="stylesheet" href="css/pwa.css?v=2.7">
<style>:root { --primary: <?php echo htmlspecialchars($themeColor); ?>; }</style>
</head>
<body>
@ -160,7 +160,7 @@ $themeColor = getDolGlobalString('THEME_ELDY_TOPMENU_BACK1', '#4390dc');
authUrl: '<?php echo dol_buildpath('/stundenzettel/ajax/pwa_auth.php', 1); ?>'
};
</script>
<script src="js/pwa.js?v=2.6"></script>
<script src="js/pwa.js?v=2.7"></script>
<!-- Service Worker Registration -->
<script>