2.3 KiB
2.3 KiB
2026-08-07 — UI: 3-tab layout per spec (admin overview w/ date filter, personal dashboard, training, settings)
Spec (from user)
- Settings page: user/profile settings + change password.
- 3-tab UI:
- 2.1 Dashboard ภาพรวม (admin only): overall user stats + DATE FILTER.
- 2.2 Personal dashboard: per-user results (admin also has it — admins train too).
- 2.3 Training: product list -> persona list w/ difficulty; admin sees full persona data + edit + "add product" button (generate new personas).
Implemented (commit b05907a)
- Tab 1 Admin overview (
/) = Analytics.vue: headline stats (sessions/wins/losses/close rate/avg score/trainees) + date filter (?from=YYYY-MM-DD&to=YYYY-MM-DDon sessioncreated_at) + hardest personas + admin quick actions (Users / + Add product). - Tab 2 My dashboard (
/my/board) = MyBoard.vue: win/lose/not-tried summary + recent sessions. Backend/api/me/board+/api/chat/sessionsnow allow ANY authenticated user (so admins can view their personal dashboard too), not just role=user. - Tab 3 Training (
/training) = Training.vue: product list w/ status badge + persona count; admins see ALL groups (draft -> analyze/edit, ready -> manage), trainees see ready only; on product click -> personas list showing difficulty (1-5 stars); admins get the Manage-personas route (/admin/groups/:gid/edit). - Settings (
/settings) = Settings.vue: profile (name/email) + change password + language. Added self-servicePATCH /api/auth/profile(updates name/email for any authed user) +UserStore.set_name.
Backend changes
- analytics_routes: date-range filter (
from/to) on session created_at. - auth_routes:
PATCH /api/auth/profile. - users.py:
set_name. - me_routes / chat_routes: removed strict
require_roles("user")on /api/me/board and /api/chat/sessions (still auth-gated + self-scoped).
Verification
- Frontend
npm run buildok (fixed a duplicatestyleattr in Analytics.vue that broke parse). - Backend tests m0 / setup / e2e all pass.
- Live server:
/api/analytics?from&toreturns filtered results;PATCH /api/auth/profileupdates name (200); served SPA references the fresh chunk. - Pushed to
git.moreminimore.com/kunthawat/sales-trainer(b05907a).