fix: trash duplicate path, journal tabs, today undefined, mouse back, inbox search

- Trash: removed duplicate fsPath display, folders/files open by clicking icon/name
- Trash: removed separate 'Open' button, only restore/delete right-aligned
- Trash: added ReadTrashFileContent binding + preview for files
- Trash: breadcrumb path under title, compact date display
- Journal: split into 'Предложения' + 'Журнал работы' tabs
- Journal: suggestions tab opens by default
- Today: fixed undefined in feed (null-guard on eventType/title)
- Today: improved event type label readability (blue badge style)
- Today: folder_deleted clicks navigate to trash
- Mouse Back: added mouseup fallback for Wails compat, handle button 3/4
- SearchNodes: case-insensitive with LOWER()
- Inbox assign: added search hint placeholder
This commit is contained in:
2026-06-05 16:49:00 +08:00
parent c512ada386
commit 5257789a4d
11 changed files with 314 additions and 251 deletions
+14 -9
View File
@@ -20,6 +20,7 @@
export let onDeleteSuggestion = (s) => {}
export let onOpenNodeFolder = (id) => {}
export let onOpenInboxArtifact = (item) => {}
export let onOpenTrashNode = (nodeId) => {}
let activeTab = 'feed'
@@ -47,6 +48,7 @@
}
function feedItemLabel(ev) {
if (!ev || !ev.eventType) return ''
return eventLabel(ev.eventType)
}
@@ -64,14 +66,15 @@
}
function handleFeedTitleClick(ev) {
if (!ev || !ev.eventType) return
if (ev.eventType === 'folder_deleted') {
onOpenNodeById(ev.nodeId)
if (ev.targetId) onOpenTrashNode(ev.targetId)
return
}
if (['file_added','file_deleted','file_renamed','file_copied','file_moved','folder_added','folder_renamed','folder_moved'].includes(ev.eventType)) {
if (ev.targetId) {
onOpenActivityTarget(ev)
} else {
} else if (ev.nodeId) {
onOpenNodeById(ev.nodeId)
}
return
@@ -79,20 +82,22 @@
if (['note_created','note_updated','note_deleted'].includes(ev.eventType)) {
if (ev.targetType === 'note' && ev.targetId) {
onOpenActivityTarget(ev)
} else {
} else if (ev.nodeId) {
onOpenNodeById(ev.nodeId)
}
return
}
if (ev.eventType === 'worklog_added') {
onOpenNodeById(ev.nodeId)
if (ev.nodeId) onOpenNodeById(ev.nodeId)
return
}
if (['action_created','action_done'].includes(ev.eventType)) {
onOpenNodeById(ev.nodeId)
if (ev.nodeId) onOpenNodeById(ev.nodeId)
return
}
onOpenActivityEvent(ev)
if (ev.id || ev.nodeId) {
onOpenActivityEvent(ev)
}
}
function feedItemSubtitle(ev) {
@@ -186,9 +191,9 @@
<span class="feed-icon">{feedItemIcon(ev.eventType)}</span>
<div class="feed-body">
<div class="feed-title-line">
<span class="feed-type">{feedItemLabel(ev.eventType)}</span>
<span class="feed-type">{feedItemLabel(ev)}</span>
<span class="feed-colon">:</span>
<span class="feed-title link-btn">{ev.title}</span>
<span class="feed-title link-btn">{ev.title || ''}</span>
</div>
<div class="feed-meta-line">
{#if feedItemSubtitle(ev)}
@@ -365,7 +370,7 @@
.feed-title:hover { text-decoration: underline; }
.feed-meta-line { display: flex; align-items: center; gap: 8px; margin-top: 2px; }
.feed-path { font-size: 11px; color: #8ea0d8; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.feed-event-type { font-size: 10px; color: #555; background: #1e1e2e; padding: 1px 6px; border-radius: 8px; }
.feed-event-type { font-size: 10px; color: #a5b4fc; background: rgba(99,102,241,0.1); padding: 2px 8px; border-radius: 8px; font-weight: 500; }
.feed-time { font-size: 11px; color: #555; margin-left: auto; flex-shrink: 0; }
.feed-nav-btn { background: none; border: none; color: #555; cursor: pointer; padding: 4px; border-radius: 4px; flex-shrink: 0; margin-top: 2px; }
.feed-nav-btn:hover { color: #a5b4fc; background: #1e1e30; }