Add PM extension (Projects, Work Logs, Comments) + Quill rich-text UI

Projects: Brick-backed model with list/detail screens and nav entry.
Work Logs: per-contributor time ledger, assignee running-clock +
helper logged minutes with Hours/Minutes input; pause-after-save and
helper-deduct prompts.
Comments: threaded comments with file attachments and Quill composer.
Detail screen: tabbed layout (Work Log / Comments / Activity),
editable title + description via edit dialog, Quill-rendered
descriptions with legacy plain-text fallback.
Create dialog: fixed-width (480px max), Quill description editor.
Shared QuillFieldEditor + QuillReadOnly widgets extracted for reuse.
RLS: hardened activity-log actor binding, immutable creator_id/
created_at triggers, SECURITY INVOKER visibility helper,
append-only work-log and scoped comment policies.
Brick migration for project_id FK on programmer_tasks.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-09-27 16:06:26 +08:00
parent 627645056b
commit b307f66f2c
33 changed files with 2960 additions and 216 deletions
+9 -1
View File
@@ -460,13 +460,20 @@ List<NavSection> _buildSections(String role) {
icon: Icons.task_outlined,
selectedIcon: Icons.task,
),
if (role == 'admin' || role == 'programmer')
if (role == 'admin' || role == 'programmer') ...[
NavItem(
label: 'Programmer Tasks',
route: '/programmer-tasks',
icon: Icons.developer_mode_outlined,
selectedIcon: Icons.developer_mode,
),
NavItem(
label: 'Projects',
route: '/programmer-projects',
icon: Icons.folder_outlined,
selectedIcon: Icons.folder,
),
],
NavItem(
label: 'IT Service Requests',
route: '/it-service-requests',
@@ -723,6 +730,7 @@ String _routeToTitle(String location) {
'/tickets' => 'Tickets',
'/tasks' => 'Tasks',
'/programmer-tasks' => 'Programmer Tasks',
'/programmer-projects' => 'Projects',
'/it-service-requests' => 'IT Service Requests',
'/network-map' => 'Network Map',
'/notifications' => 'Notifications',