- Add request interceptor to inject Authorization Bearer token
- Add response interceptor to handle AjaxResult format uniformly
- Fix getInfo() response parsing to read nested data.user/roles/permissions
- Ensure login token is correctly extracted and stored
Root cause: apiClient had no interceptors, so getInfo() sent requests
without token after login, causing 401 and redirect back to login.
- Fix login page background and button styles using fixed color values
- Add ElMessage success/error feedback for login attempts
- Replace window.location.href with router.push for proper navigation
- Improve input field styles for dark theme
- Fix 48 TypeScript errors across all view and component files
- Fix SCSS :global syntax causing build failures
- Update vite.config.ts port to 5173
- Add global type declarations for missing modules
- Fix API response type access patterns (res.data.rows)
- Fix Element Plus component type mismatches
- Update README with project documentation
- Run Prettier code formatting
- Vue Router 4 with navigation guards and dynamic route loading
- Pinia stores for user, permission, and app state management
- Axios API layer with request/response interceptors
- Permission control (v-hasPermi, v-hasRole directives)
- Utility functions (auth, validate, permission)
- Layout component with sidebar, navbar, and breadcrumbs
- Error pages (401, 404) and redirect view
- Login API integration with user store