Data model: - Add IAMUserProject model (sub-account → N projects, each with monitoring toggle) - Remove old single project_name from IAMUser model - Update SpendingRecord with per-project granularity Backend: - Project CRUD views: list/add/update-toggle/delete/toggle-all - Create user view auto-adds first project if specified - Scheduler aggregates spending across all enabled projects per user - Per-project spending recorded in SpendingRecord + IAMUserProject.current_spending - Alert details include per-project spending breakdown Frontend: - New "项目管理" dialog: add projects from Volcengine dropdown, toggle monitoring per project, remove projects, batch toggle all - "项目" column in user table showing monitored/total count (clickable) - BillingView: expandable rows showing per-project spending breakdown - Create dialog: optional initial project selection - Removed old single-project select from config dialog Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
from django.urls import path
|
|
from . import views
|
|
|
|
urlpatterns = [
|
|
# Dashboard
|
|
path('dashboard/', views.dashboard_view),
|
|
|
|
# Volcengine account management
|
|
path('volc-accounts/', views.volc_account_view),
|
|
path('volc-accounts/<int:pk>/', views.volc_account_detail_view),
|
|
path('volc-accounts/<int:pk>/test/', views.volc_account_test_view),
|
|
|
|
# IAM user management
|
|
path('iam-users/', views.iam_user_list_view),
|
|
path('iam-users/create/', views.iam_user_create_view),
|
|
path('iam-users/sync/', views.iam_user_sync_view),
|
|
path('iam-users/import/', views.iam_user_import_view),
|
|
path('iam-users/<int:pk>/', views.iam_user_detail_view),
|
|
path('iam-users/<int:pk>/update/', views.iam_user_update_view),
|
|
path('iam-users/<int:pk>/disable/', views.iam_user_disable_view),
|
|
path('iam-users/<int:pk>/enable/', views.iam_user_enable_view),
|
|
path('iam-users/<int:pk>/policies/', views.iam_user_policies_view),
|
|
path('iam-users/<int:pk>/policies/attach/', views.iam_user_attach_policy_view),
|
|
path('iam-users/<int:pk>/policies/detach/', views.iam_user_detach_policy_view),
|
|
# IAM user projects (multi-project)
|
|
path('iam-users/<int:pk>/projects/', views.iam_user_project_list_view),
|
|
path('iam-users/<int:pk>/projects/add/', views.iam_user_project_add_view),
|
|
path('iam-users/<int:pk>/projects/<int:pid>/', views.iam_user_project_update_view),
|
|
path('iam-users/<int:pk>/projects/<int:pid>/delete/', views.iam_user_project_delete_view),
|
|
path('iam-users/<int:pk>/projects/toggle-all/', views.iam_user_project_toggle_all_view),
|
|
|
|
# Quota
|
|
path('iam-users/<int:pk>/allocate/', views.quota_allocate_view),
|
|
path('iam-users/<int:pk>/quota-history/', views.quota_history_view),
|
|
|
|
# Billing
|
|
path('billing/overview/', views.spending_overview_view),
|
|
path('billing/refresh/', views.spending_refresh_view),
|
|
path('billing/balance/', views.balance_view),
|
|
|
|
# Global config
|
|
path('config/', views.global_config_view),
|
|
|
|
# Alerts
|
|
path('alerts/', views.alert_list_view),
|
|
|
|
# Projects
|
|
path('projects/', views.project_list_view),
|
|
]
|