From 3bcff142f5c4de1f792da496ca72376106faca26 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 14 May 2026 12:30:27 -0400 Subject: [PATCH] feat(fc2a): add SettingsView shell with Overview tab (SystemStatsCards) Overview tab shows total images/tags/storage/pending/failed using Fraunces for the big numbers. Inline alert nudges the operator to the Import tab when pending tasks exist. Polls /api/system/stats every 5s while the tab is visible (pauses when the document is hidden). Import tab references three placeholders (TriggerPanel/FiltersForm/ TaskList); real implementations land in Task 15. Router replaces the placeholder view for /settings with SettingsView. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../components/settings/ImportFiltersForm.vue | 1 + .../components/settings/ImportTaskList.vue | 1 + .../settings/ImportTriggerPanel.vue | 1 + .../components/settings/SystemStatsCards.vue | 63 ++++++++++++++ frontend/src/router.js | 3 +- frontend/src/views/SettingsView.vue | 86 +++++++++++++++++++ 6 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/settings/ImportFiltersForm.vue create mode 100644 frontend/src/components/settings/ImportTaskList.vue create mode 100644 frontend/src/components/settings/ImportTriggerPanel.vue create mode 100644 frontend/src/components/settings/SystemStatsCards.vue create mode 100644 frontend/src/views/SettingsView.vue diff --git a/frontend/src/components/settings/ImportFiltersForm.vue b/frontend/src/components/settings/ImportFiltersForm.vue new file mode 100644 index 0000000..1dfcc5d --- /dev/null +++ b/frontend/src/components/settings/ImportFiltersForm.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/components/settings/ImportTaskList.vue b/frontend/src/components/settings/ImportTaskList.vue new file mode 100644 index 0000000..44df079 --- /dev/null +++ b/frontend/src/components/settings/ImportTaskList.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/components/settings/ImportTriggerPanel.vue b/frontend/src/components/settings/ImportTriggerPanel.vue new file mode 100644 index 0000000..0ceea25 --- /dev/null +++ b/frontend/src/components/settings/ImportTriggerPanel.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/components/settings/SystemStatsCards.vue b/frontend/src/components/settings/SystemStatsCards.vue new file mode 100644 index 0000000..92d9ba7 --- /dev/null +++ b/frontend/src/components/settings/SystemStatsCards.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/frontend/src/router.js b/frontend/src/router.js index d60b5e5..c983d82 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -1,12 +1,13 @@ import { createRouter, createWebHistory } from 'vue-router' import PlaceholderView from './views/PlaceholderView.vue' +import SettingsView from './views/SettingsView.vue' const routes = [ // FC-2: image backbone { path: '/', name: 'gallery', component: PlaceholderView, meta: { title: 'Gallery' } }, { path: '/showcase', name: 'showcase', component: PlaceholderView, meta: { title: 'Showcase' } }, { path: '/tags', name: 'tags', component: PlaceholderView, meta: { title: 'Tags' } }, - { path: '/settings', name: 'settings', component: PlaceholderView, meta: { title: 'Settings' } }, + { path: '/settings', name: 'settings', component: SettingsView, meta: { title: 'Settings' } }, // FC-3: subscription backbone { path: '/subscriptions', name: 'subscriptions', component: PlaceholderView, meta: { title: 'Subscriptions' } }, diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue new file mode 100644 index 0000000..a0b854f --- /dev/null +++ b/frontend/src/views/SettingsView.vue @@ -0,0 +1,86 @@ + + + + +