- Add validateRegisterCode function to verify codes during registration
- Integrate Aliyun SMS SDK (dysmsapi-20170525) replacing placeholder
- Make cookie names configurable via JWT CookiePrefix setting
- Rename login type "phone" to "sms" for consistency
- Add 1-minute TTL cache for setting values
- Add $fetch wrapper replacing raw fetch calls across all UI pages
- Add verification code inputs with countdown send buttons to register UI
- Move CSS/JS assets from root.html to auth and default layouts
- Add scope parameter to VBase permission check methods
- Add i18n entries for verification code messages (zh/en)
- Fix route guard to use next('/403') instead of router.push
- Replace permission selector dialog with inline add form (scope/id/level)
- Replace per-user role API calls with batch PUT /api/roles/{id}/users
- Add isLogin() async method with lazy _ensureAuth initialization
- Clean up login page CSS: replace hardcoded colors with CSS variables
- Add Chrome autofill style override for dark theme support
- Use @submit.prevent instead of manual e.preventDefault()
- Remove redundant inline comments from script sections
- Add role detail dialog with tabs for permissions and users
- Implement permission selector with level badges (create/read/write/admin)
- Add user management with avatar display and search functionality
- Add i18n translations for new role management features
- Update default DB charset from utf8 to utf8mb4