From db45a669e3778d8f9dac6bdf908306c58e5a1672 Mon Sep 17 00:00:00 2001
From: Wang Defa <61809431+wangdefaa@users.noreply.github.com>
Date: Thu, 9 Jul 2026 15:31:29 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E6=8F=90=E4=BA=A4=EF=BC=9AOC?=
=?UTF-8?q?I=20=E9=9D=A2=E6=9D=BF=E5=89=8D=E7=AB=AF=EF=BC=88=E5=90=AB=20Ge?=
=?UTF-8?q?nAI=20=E7=BD=91=E5=85=B3=E4=B8=80=E6=9C=9F=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 2 +
.gitignore | 6 +
.prettierrc.json | 6 +
env.d.ts | 10 +
eslint.config.js | 16 +
index.html | 13 +
package-lock.json | 4724 +++++++++++++++++
package.json | 41 +
public/favicon.svg | 7 +
src/App.vue | 33 +
src/api/aigateway.ts | 96 +
src/api/analytics.ts | 28 +
src/api/auth.ts | 151 +
src/api/bootVolumes.ts | 59 +
src/api/configs.ts | 121 +
src/api/instances.ts | 380 ++
src/api/logevents.ts | 104 +
src/api/mock.ts | 1716 ++++++
src/api/networks.ts | 66 +
src/api/proxies.ts | 90 +
src/api/request.ts | 66 +
src/api/settings.ts | 152 +
src/api/tasks.ts | 75 +
src/api/tenant.ts | 344 ++
src/assets/main.css | 260 +
src/components/AccountTypeBadge.vue | 26 +
src/components/AppInputNumber.vue | 22 +
src/components/AppLogo.vue | 30 +
src/components/CostChart.vue | 60 +
src/components/DeadPlaceholder.vue | 34 +
src/components/DetailFieldList.vue | 57 +
src/components/DetailHero.vue | 34 +
src/components/EmptyCard.vue | 11 +
src/components/FilePicker.vue | 112 +
src/components/FootNote.vue | 5 +
src/components/FormField.vue | 35 +
src/components/FormModal.vue | 62 +
src/components/FormSection.vue | 11 +
src/components/FullPageBackdrop.vue | 78 +
src/components/JsonBlock.vue | 121 +
src/components/LifecycleBadge.vue | 22 +
src/components/OauthProviderIcon.vue | 25 +
src/components/OcidText.vue | 30 +
src/components/PageHeader.vue | 16 +
src/components/RenameModal.vue | 45 +
src/components/StatusBadge.vue | 48 +
src/components/TenantPicker.vue | 198 +
src/components/ToggleCard.vue | 17 +
src/components/ai/AiChannelPanel.vue | 250 +
src/components/ai/AiKeyPanel.vue | 226 +
src/components/config/EditConfigModal.vue | 194 +
src/components/config/ImportConfigModal.vue | 213 +
src/components/instance/AttachVnicModal.vue | 146 +
src/components/instance/AttachVolumeModal.vue | 114 +
src/components/instance/ConsoleConnModal.vue | 74 +
.../instance/CreateInstanceModal.vue | 105 +
.../instance/EditBootVolumeModal.vue | 85 +
src/components/instance/InstanceSpecForm.vue | 535 ++
.../instance/InstanceTrafficPanel.vue | 140 +
.../instance/ReplaceBootVolumeModal.vue | 94 +
src/components/instance/ResizeModal.vue | 146 +
.../instance/SerialConsolePanel.vue | 332 ++
src/components/instance/VnicPanel.vue | 235 +
src/components/logs/AiCallLogPanel.vue | 293 +
src/components/logs/LogEventPanel.vue | 280 +
src/components/logs/SystemLogPanel.vue | 219 +
src/components/network/CreateVcnModal.vue | 88 +
src/components/proxy/ProxyPanel.vue | 386 ++
src/components/settings/AboutTab.vue | 123 +
.../settings/AccountSecurityCard.vue | 739 +++
.../settings/NotifyTemplateModal.vue | 162 +
.../storage/AttachBootVolumeModal.vue | 97 +
.../storage/EditBootVolumeModal.vue | 110 +
src/components/task/CronEditor.vue | 178 +
src/components/task/TaskCard.vue | 191 +
src/components/task/TaskFormModal.vue | 345 ++
src/components/task/TaskTypeIcon.vue | 50 +
src/components/task/taskDisplay.ts | 91 +
src/components/tenant/AuditLogTab.vue | 277 +
src/components/tenant/CostTab.vue | 106 +
src/components/tenant/IdpFormModal.vue | 218 +
src/components/tenant/IdpTab.vue | 216 +
src/components/tenant/MiscTab.vue | 409 ++
src/components/tenant/PolicyEditModal.vue | 94 +
src/components/tenant/QuotaTab.vue | 233 +
src/components/tenant/SubsTab.vue | 297 ++
.../tenant/SubscribeRegionModal.vue | 88 +
src/components/tenant/UserFormModal.vue | 233 +
src/components/tenant/UsersTab.vue | 176 +
src/composables/cron.ts | 41 +
src/composables/useActionLabel.ts | 83 +
src/composables/useAsync.ts | 36 +
src/composables/useAutoRefresh.ts | 20 +
src/composables/useEventLabel.ts | 37 +
src/composables/useFormat.ts | 62 +
src/composables/useParticles.ts | 51 +
src/composables/useProxyOptions.ts | 26 +
src/composables/useRegionAlias.ts | 33 +
src/composables/useToast.ts | 82 +
src/composables/useTransientPoll.ts | 33 +
src/layouts/AppLayout.vue | 231 +
src/layouts/SidebarNav.vue | 240 +
src/main.ts | 12 +
src/router/index.ts | 103 +
src/stores/app.ts | 37 +
src/stores/auth.ts | 32 +
src/stores/console.ts | 41 +
src/stores/scope.ts | 186 +
src/theme/naive.ts | 97 +
src/theme/tokens.ts | 53 +
src/types/api.ts | 969 ++++
src/types/novnc.d.ts | 15 +
src/views/AiGatewayView.vue | 181 +
src/views/BootVolumeListView.vue | 294 +
src/views/InstanceDetailView.vue | 766 +++
src/views/InstanceListView.vue | 229 +
src/views/LoginView.vue | 272 +
src/views/LogsView.vue | 30 +
src/views/NetworkListView.vue | 174 +
src/views/OverviewView.vue | 243 +
src/views/ProxyListView.vue | 22 +
src/views/SettingsView.vue | 631 +++
src/views/TaskDetailView.vue | 323 ++
src/views/TaskListView.vue | 113 +
src/views/TenantDetailView.vue | 165 +
src/views/TenantListView.vue | 331 ++
src/views/VcnDetailView.vue | 308 ++
src/views/VncConsoleView.vue | 143 +
src/views/errors/BlockedView.vue | 49 +
src/views/errors/NotFoundView.vue | 28 +
src/views/errors/error-page.css | 70 +
tsconfig.app.json | 15 +
tsconfig.json | 7 +
tsconfig.node.json | 12 +
vite.config.ts | 41 +
135 files changed, 25220 insertions(+)
create mode 100644 .env.development
create mode 100644 .gitignore
create mode 100644 .prettierrc.json
create mode 100644 env.d.ts
create mode 100644 eslint.config.js
create mode 100644 index.html
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 public/favicon.svg
create mode 100644 src/App.vue
create mode 100644 src/api/aigateway.ts
create mode 100644 src/api/analytics.ts
create mode 100644 src/api/auth.ts
create mode 100644 src/api/bootVolumes.ts
create mode 100644 src/api/configs.ts
create mode 100644 src/api/instances.ts
create mode 100644 src/api/logevents.ts
create mode 100644 src/api/mock.ts
create mode 100644 src/api/networks.ts
create mode 100644 src/api/proxies.ts
create mode 100644 src/api/request.ts
create mode 100644 src/api/settings.ts
create mode 100644 src/api/tasks.ts
create mode 100644 src/api/tenant.ts
create mode 100644 src/assets/main.css
create mode 100644 src/components/AccountTypeBadge.vue
create mode 100644 src/components/AppInputNumber.vue
create mode 100644 src/components/AppLogo.vue
create mode 100644 src/components/CostChart.vue
create mode 100644 src/components/DeadPlaceholder.vue
create mode 100644 src/components/DetailFieldList.vue
create mode 100644 src/components/DetailHero.vue
create mode 100644 src/components/EmptyCard.vue
create mode 100644 src/components/FilePicker.vue
create mode 100644 src/components/FootNote.vue
create mode 100644 src/components/FormField.vue
create mode 100644 src/components/FormModal.vue
create mode 100644 src/components/FormSection.vue
create mode 100644 src/components/FullPageBackdrop.vue
create mode 100644 src/components/JsonBlock.vue
create mode 100644 src/components/LifecycleBadge.vue
create mode 100644 src/components/OauthProviderIcon.vue
create mode 100644 src/components/OcidText.vue
create mode 100644 src/components/PageHeader.vue
create mode 100644 src/components/RenameModal.vue
create mode 100644 src/components/StatusBadge.vue
create mode 100644 src/components/TenantPicker.vue
create mode 100644 src/components/ToggleCard.vue
create mode 100644 src/components/ai/AiChannelPanel.vue
create mode 100644 src/components/ai/AiKeyPanel.vue
create mode 100644 src/components/config/EditConfigModal.vue
create mode 100644 src/components/config/ImportConfigModal.vue
create mode 100644 src/components/instance/AttachVnicModal.vue
create mode 100644 src/components/instance/AttachVolumeModal.vue
create mode 100644 src/components/instance/ConsoleConnModal.vue
create mode 100644 src/components/instance/CreateInstanceModal.vue
create mode 100644 src/components/instance/EditBootVolumeModal.vue
create mode 100644 src/components/instance/InstanceSpecForm.vue
create mode 100644 src/components/instance/InstanceTrafficPanel.vue
create mode 100644 src/components/instance/ReplaceBootVolumeModal.vue
create mode 100644 src/components/instance/ResizeModal.vue
create mode 100644 src/components/instance/SerialConsolePanel.vue
create mode 100644 src/components/instance/VnicPanel.vue
create mode 100644 src/components/logs/AiCallLogPanel.vue
create mode 100644 src/components/logs/LogEventPanel.vue
create mode 100644 src/components/logs/SystemLogPanel.vue
create mode 100644 src/components/network/CreateVcnModal.vue
create mode 100644 src/components/proxy/ProxyPanel.vue
create mode 100644 src/components/settings/AboutTab.vue
create mode 100644 src/components/settings/AccountSecurityCard.vue
create mode 100644 src/components/settings/NotifyTemplateModal.vue
create mode 100644 src/components/storage/AttachBootVolumeModal.vue
create mode 100644 src/components/storage/EditBootVolumeModal.vue
create mode 100644 src/components/task/CronEditor.vue
create mode 100644 src/components/task/TaskCard.vue
create mode 100644 src/components/task/TaskFormModal.vue
create mode 100644 src/components/task/TaskTypeIcon.vue
create mode 100644 src/components/task/taskDisplay.ts
create mode 100644 src/components/tenant/AuditLogTab.vue
create mode 100644 src/components/tenant/CostTab.vue
create mode 100644 src/components/tenant/IdpFormModal.vue
create mode 100644 src/components/tenant/IdpTab.vue
create mode 100644 src/components/tenant/MiscTab.vue
create mode 100644 src/components/tenant/PolicyEditModal.vue
create mode 100644 src/components/tenant/QuotaTab.vue
create mode 100644 src/components/tenant/SubsTab.vue
create mode 100644 src/components/tenant/SubscribeRegionModal.vue
create mode 100644 src/components/tenant/UserFormModal.vue
create mode 100644 src/components/tenant/UsersTab.vue
create mode 100644 src/composables/cron.ts
create mode 100644 src/composables/useActionLabel.ts
create mode 100644 src/composables/useAsync.ts
create mode 100644 src/composables/useAutoRefresh.ts
create mode 100644 src/composables/useEventLabel.ts
create mode 100644 src/composables/useFormat.ts
create mode 100644 src/composables/useParticles.ts
create mode 100644 src/composables/useProxyOptions.ts
create mode 100644 src/composables/useRegionAlias.ts
create mode 100644 src/composables/useToast.ts
create mode 100644 src/composables/useTransientPoll.ts
create mode 100644 src/layouts/AppLayout.vue
create mode 100644 src/layouts/SidebarNav.vue
create mode 100644 src/main.ts
create mode 100644 src/router/index.ts
create mode 100644 src/stores/app.ts
create mode 100644 src/stores/auth.ts
create mode 100644 src/stores/console.ts
create mode 100644 src/stores/scope.ts
create mode 100644 src/theme/naive.ts
create mode 100644 src/theme/tokens.ts
create mode 100644 src/types/api.ts
create mode 100644 src/types/novnc.d.ts
create mode 100644 src/views/AiGatewayView.vue
create mode 100644 src/views/BootVolumeListView.vue
create mode 100644 src/views/InstanceDetailView.vue
create mode 100644 src/views/InstanceListView.vue
create mode 100644 src/views/LoginView.vue
create mode 100644 src/views/LogsView.vue
create mode 100644 src/views/NetworkListView.vue
create mode 100644 src/views/OverviewView.vue
create mode 100644 src/views/ProxyListView.vue
create mode 100644 src/views/SettingsView.vue
create mode 100644 src/views/TaskDetailView.vue
create mode 100644 src/views/TaskListView.vue
create mode 100644 src/views/TenantDetailView.vue
create mode 100644 src/views/TenantListView.vue
create mode 100644 src/views/VcnDetailView.vue
create mode 100644 src/views/VncConsoleView.vue
create mode 100644 src/views/errors/BlockedView.vue
create mode 100644 src/views/errors/NotFoundView.vue
create mode 100644 src/views/errors/error-page.css
create mode 100644 tsconfig.app.json
create mode 100644 tsconfig.json
create mode 100644 tsconfig.node.json
create mode 100644 vite.config.ts
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..a62bf31
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,2 @@
+# 开发期默认走内置 mock;对接真实后端时改为 0 并启动 oci-portal(:8080)
+VITE_MOCK=0
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a739064
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+dist
+*.local
+.DS_Store
+npm-debug.log*
+.playwright-cli
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..3ee2d11
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,6 @@
+{
+ "semi": false,
+ "singleQuote": true,
+ "printWidth": 100,
+ "trailingComma": "all"
+}
diff --git a/env.d.ts b/env.d.ts
new file mode 100644
index 0000000..4287929
--- /dev/null
+++ b/env.d.ts
@@ -0,0 +1,10 @@
+///
| 名称 | +私网 IP | +公网 IP | +子网 | +状态 | +操作 | +
|---|---|---|---|---|---|
|
+
+
+ {{ v.displayName || '(未命名)' }}
+
+
+ 主网卡
+
+
+ |
+ {{ v.privateIp || '—' }} | +{{ v.publicIp || '—' }} | +
+
+ {{ v.subnetName }}
+
+ |
+
+ |
+ |
|
+
+ IPV6
+
+
+ {{ addr }}
+
+
+
+ 无
+
+
+ |
+ |||||
{{ fmtBody(contentLog.requestBody) }}
+ {{ fmtBody(contentLog.responseBody) }}
+ scheme://[user:pass@]host:port
+ scheme 为 socks5 / http / https
+ host:port[:user:pass]
+ 无协议头,缺省按 SOCKS5;# 开头为注释
+ | 名称 | +类型 | +Client ID | +状态 | +操作 | +
|---|---|---|---|---|
| {{ row.name }} | ++ + {{ row.provider }} + + | ++ {{ row.clientId }} + | ++ + + {{ row.disabled ? '已禁用' : '启用中' }} + + | +
+ |
+
{{ rootPassword }}
+