feat: complete project workspace tags and notes UI

This commit is contained in:
2026-07-21 00:46:09 +08:00
parent 54958382f1
commit c613d4c997
28 changed files with 1621 additions and 284 deletions

View File

@@ -16,10 +16,14 @@ export function mapWorkspace(payload: BackendProjectWorkspace, index = 0): Proje
const project: Project = {
id: String(payload.project.id),
name: payload.project.name,
short: payload.project.initials,
identifier: payload.project.identifier ?? '',
icon: payload.project.icon ?? '',
background: payload.project.background ?? '',
description: payload.project.description,
short: projectIconLabel(payload.project.icon ?? '', payload.project.initials),
badge: payload.project.unreadCount,
urgent: payload.project.unreadCount > 20,
color: projectColors[index % projectColors.length],
color: projectColor(payload.project.background ?? '', index),
}
return {
@@ -35,6 +39,22 @@ export function mapWorkspace(payload: BackendProjectWorkspace, index = 0): Proje
}
}
function projectIconLabel(icon: string, fallback: string) {
const trimmed = icon.trim()
if (!trimmed) return fallback
const chars = Array.from(trimmed)
if (chars.length <= 2) return trimmed
return chars.slice(0, 2).join('').toUpperCase()
}
function projectColor(background: string, index: number) {
const trimmed = background.trim()
if (trimmed.startsWith('#') || trimmed.startsWith('rgb') || trimmed.startsWith('hsl')) {
return trimmed
}
return projectColors[index % projectColors.length]
}
function mapChannel(channel: BackendChannel): ProjectChannel {
return {
id: channel.id,
@@ -79,7 +99,7 @@ function channelLabel(channel: BackendChannel) {
case 'notes_sources':
return '笔记资料'
case 'cron':
return 'Cron 计划任务'
return '计划任务'
default:
return channel.title
}