basic test

This commit is contained in:
邓智航
2026-02-10 11:56:03 +08:00
parent de68563f69
commit 411d823cfa
89 changed files with 33858 additions and 2027 deletions

367
003/3-001.html Normal file

File diff suppressed because one or more lines are too long

329
003/3-002.html Normal file

File diff suppressed because one or more lines are too long

329
003/3-003.html Normal file

File diff suppressed because one or more lines are too long

329
003/3-004.html Normal file

File diff suppressed because one or more lines are too long

330
003/3-005.html Normal file

File diff suppressed because one or more lines are too long

329
003/3-006.html Normal file

File diff suppressed because one or more lines are too long

367
003/3-007.html Normal file

File diff suppressed because one or more lines are too long

397
003/3-008.html Normal file

File diff suppressed because one or more lines are too long

397
003/3-009.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<title>Cloud Resource Manager - Zone CN-East-2</title>
<style>
/* 全局设置 */
/* Global Settings */
:root {
--primary: #108ee9;
--success: #00a854;
@@ -24,17 +24,17 @@
a:hover { color: #40a9ff; }
hr { border: 0; border-top: 1px solid var(--border); margin: 10px 0; }
/* 顶部导航 */
/* Top Navigation */
.header { background: #262f3e; color: #fff; padding: 0 20px; height: 50px; display: flex; align-items: center; justify-content: space-between; }
.header h2 { font-size: 16px; color: #fff; }
.header p { color: #aaa; margin-left: 20px; }
.header nav a { color: #ddd; margin: 0 10px; font-size: 13px; }
.header nav a:hover { color: #fff; }
/* 主布局 */
/* Main Layout */
.layout-container { display: flex; min-height: calc(100vh - 50px); }
/* 侧边栏 */
/* Sidebar */
.sidebar { width: 220px; background: #fff; border-right: 1px solid var(--border); padding: 20px; flex-shrink: 0; }
.sidebar h3 { font-size: 13px; color: var(--text-main); margin-bottom: 10px; margin-top: 20px; font-weight: bold; }
.sidebar li { margin-bottom: 8px; }
@@ -44,19 +44,19 @@
.quota-box { background: #fafafa; padding: 10px; border-radius: 4px; border: 1px solid #eee; }
.quota-box p { margin: 5px 0; color: #666; }
/* 广告干扰 - 侧边栏 */
/* Ad Interference - Sidebar */
.ad-sidebar { margin-top: 20px; padding: 10px; background: linear-gradient(135deg, #f0f5ff 0%, #d6e4ff 100%); border-radius: 4px; border: 1px solid #adc6ff; }
.ad-sidebar p { margin: 0; color: #1d39c4; }
/* 主内容区 */
/* Main Content Area */
.main-content { flex: 1; padding: 20px; overflow-x: auto; }
/* 顶部通知 - 干扰 */
/* Top Notification - Interference */
.system-notice { background: #fffbe6; border: 1px solid #ffe58f; padding: 10px 15px; border-radius: 4px; display: flex; flex-direction: column; margin-bottom: 20px; }
.system-notice strong { color: #fa8c16; margin-bottom: 5px; }
.system-notice p { margin: 0; color: #666; }
/* 搜索栏 */
/* Search Bar */
.search-bar fieldset { border: 0; padding: 0; margin: 0; background: #fff; padding: 15px; border-radius: 4px; display: flex; align-items: center; gap: 10px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); }
.search-bar legend { display: none; }
.search-bar label { font-weight: 500; }
@@ -64,26 +64,26 @@
.search-bar button { background: #fff; border: 1px solid #d9d9d9; padding: 5px 15px; border-radius: 4px; cursor: pointer; }
.search-bar button:hover { color: var(--primary); border-color: var(--primary); }
/* 操作按钮区 */
/* Action Buttons Area */
.toolbar { margin: 15px 0; }
.toolbar button { margin-right: 8px; padding: 6px 15px; background: #fff; border: 1px solid #d9d9d9; border-radius: 4px; cursor: pointer; }
.toolbar button:first-child { background: var(--primary); color: #fff; border-color: var(--primary); }
/* 实例列表表格化 */
/* Instance List Table */
.instance-list { background: #fff; border-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); }
/* 表头 */
/* List Header */
.list-header { display: grid; grid-template-columns: 40px 3fr 2fr 2fr 1.5fr 3fr; padding: 12px 15px; background: #fafafa; border-bottom: 1px solid #e9e9e9; font-weight: 600; color: #666; }
/* 列表行 */
/* List Row */
.list-row { display: grid; grid-template-columns: 40px 3fr 2fr 2fr 1.5fr 3fr; padding: 15px; border-bottom: 1px solid #e9e9e9; align-items: center; transition: background 0.2s; }
.list-row:hover { background: #f0f7ff; }
/* 行内样式 */
/* Inline Styles */
.list-row strong { color: var(--primary); cursor: pointer; display: block; margin-bottom: 4px; }
.list-row small { color: #999; }
/* 状态颜色 */
/* Status Colors */
.status-running { color: var(--success); display: inline-flex; align-items: center; }
.status-running::before { content: ''; width: 6px; height: 6px; background: var(--success); border-radius: 50%; margin-right: 5px; }
@@ -92,25 +92,25 @@
.status-maintenance { color: var(--warning); }
/* 按钮组 - 隐藏危险按钮,放入下拉菜单的概念(这里用CSS模拟) */
/* Button Group - Hide dangerous buttons, simulate dropdown */
.action-group { display: flex; gap: 8px; flex-wrap: wrap; }
.action-group button { border: none; background: none; color: var(--primary); cursor: pointer; padding: 0; }
.action-group button:hover { text-decoration: underline; }
/* 危险操作用CSS隐藏或显示为红色 */
.btn-danger { color: var(--danger) !important; display: none; /* 默认隐藏危险按钮,模拟"更多"菜单 */ }
.list-row:hover .btn-danger { display: inline-block; /* hover时显示增加交互感 */ }
/* Dangerous operations hidden by default */
.btn-danger { color: var(--danger) !important; display: none; /* Hide via CSS */ }
.list-row:hover .btn-danger { display: inline-block; /* Show on hover */ }
/* 干扰行处理 */
/* Ad Interferences */
.ad-row { background: #f9f9f9; border: 1px dashed #d9d9d9; margin: 10px; border-radius: 4px; }
.ad-row strong { color: #333 !important; }
.error-row { display: none; } /* 直接隐藏报错信息干扰 */
.error-row { display: none; } /* Hide error info */
.billing-alert-row { background: #fff1f0; border: 1px solid #ffa39e; margin: 10px; border-radius: 4px; }
.billing-alert-row p { margin: 0; display: inline-block; color: #f5222d; margin-right: 10px; }
/* 底部 */
/* Footer */
.footer { padding: 20px; text-align: center; color: #ccc; font-size: 12px; }
/* 分页 */
/* Pagination */
.pagination { display: flex; align-items: center; justify-content: flex-end; padding: 15px; gap: 10px; }
.pagination button { background: #fff; border: 1px solid #d9d9d9; padding: 5px 10px; border-radius: 4px; cursor: pointer; }
@@ -143,87 +143,87 @@
<div class="main-wrapper">
<div class="header">
<h2>HyperCloud 控制台 [企业版]</h2>
<p>当前区域: <strong>华东二区 (CN-East-2)</strong> | 账户: admin_core_team</p>
<h2>HyperCloud Console [Enterprise]</h2>
<p>Current Region: <strong>CN-East-2</strong> | Account: admin_core_team</p>
<nav>
<a href="#">总览</a> |
<a href="#">计算实例 (ECI)</a> |
<a href="#">对象存储 (OSS)</a> |
<a href="#">私有网络 (VPC)</a> |
<a href="#">安全组</a> |
<a href="#">负载均衡</a> |
<a href="#">费用中心</a> |
<a href="#">工单支持</a>
<a href="#">Overview</a> |
<a href="#">Instances (ECI)</a> |
<a href="#">Object Storage (OSS)</a> |
<a href="#">VPC</a> |
<a href="#">Security Groups</a> |
<a href="#">Load Balancer</a> |
<a href="#">Billing</a> |
<a href="#">Support</a>
</nav>
</div>
<div class="layout-container">
<div class="sidebar">
<h3>资源列表</h3>
<h3>Resources</h3>
<ul>
<li><a href="javascript:void(0)" class="active" onclick="filterByStatus('all', this)">全部实例 (14)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('running', this)">运行中 (10)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('stopped', this)">已停止 (3)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('maintenance', this)">异常/维护 (1)</a></li>
<li><a href="javascript:void(0)" class="active" onclick="filterByStatus('all', this)">All Instances (14)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('running', this)">Running (10)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('stopped', this)">Stopped (3)</a></li>
<li><a href="javascript:void(0)" onclick="filterByStatus('maintenance', this)">Abnormal/Maintenance (1)</a></li>
</ul>
<h3>配额监控</h3>
<h3>Quota Monitor</h3>
<div class="quota-box">
<p>vCPU 使用率: 88/100 </p>
<p>内存 使用率: 256/512 GB</p>
<p>公网IP: 12/20</p>
<p>vCPU Usage: 88/100 Cores</p>
<p>RAM Usage: 256/512 GB</p>
<p>Public IP: 12/20</p>
</div>
<div class="ad-sidebar">
<p><strong>[推广] GPU 实例限时 8 折</strong><br>A100 显卡火热租赁中...</p>
<p><strong>[Promo] GPU Instance 20% Off</strong><br>A100 available now...</p>
</div>
<h3>操作日志</h3>
<h3>Operation Logs</h3>
<ul style="font-size: 11px; color: #999;">
<li><small>2025-12-21 10:00: inst-a1 重启成功</small></li>
<li><small>2025-12-21 09:45: 安全组规则更新</small></li>
<li><small>2025-12-21 10:00: inst-a1 Rebooted</small></li>
<li><small>2025-12-21 09:45: Security Group Updated</small></li>
</ul>
</div>
<div class="main-content">
<div class="system-notice">
<strong>[紧急通知] 华东二区可用区 B 网络割接公告</strong>
<p>将于本周日凌晨 02:00 进行光纤割接,预计网络抖动 2 次,每次 5 秒。</p>
<strong>[Urgent] Zone B Network Maintenance (CN-East-2)</strong>
<p>Fiber optic cutover scheduled for this Sunday at 02:00 AM. Expect 2 network jitters of 5 seconds each.</p>
</div>
<form class="search-bar">
<fieldset>
<label>关键词:</label> <input type="text" id="searchInput" placeholder="Instance ID / Name">
<label>标签:</label> <input type="text" placeholder="Key:Value">
<label>付费类型:</label>
<label>Keyword:</label> <input type="text" id="searchInput" placeholder="Instance ID / Name">
<label>Tag:</label> <input type="text" placeholder="Key:Value">
<label>Billing Type:</label>
<select>
<option>全部</option>
<option>包年包月</option>
<option>按量付费</option>
<option>抢占式实例</option>
<option>All</option>
<option>Subscription</option>
<option>Pay-As-You-Go</option>
<option>Preemptible</option>
</select>
<button type="button" class="btn-primary" onclick="searchInstances()">刷新列表</button>
<button type="button" onclick="resetSearch()">重置</button>
<button type="button" class="btn-primary" onclick="searchInstances()">Refresh</button>
<button type="button" onclick="resetSearch()">Reset</button>
</fieldset>
</form>
<div class="toolbar">
<button style="background: var(--primary); color: #fff; border-color: var(--primary);" onclick="openCreateModal()">+ 创建实例</button>
<button onclick="performToolbarAction('start')">启动</button>
<button onclick="performToolbarAction('stop')">停止</button>
<button onclick="performToolbarAction('restart')">重启</button>
<button onclick="showToast('功能开发中: 修改释放设置', 'warning')">释放设置</button>
<button onclick="showToast('功能开发中: 修改计费模式', 'warning')">修改计费模式</button>
<button style="background: var(--primary); color: #fff; border-color: var(--primary);" onclick="openCreateModal()">+ Create Instance</button>
<button onclick="performToolbarAction('start')">Start</button>
<button onclick="performToolbarAction('stop')">Stop</button>
<button onclick="performToolbarAction('restart')">Restart</button>
<button onclick="showToast('Feature in development: Release Settings', 'warning')">Release Settings</button>
<button onclick="showToast('Feature in development: Change Billing', 'warning')">Change Billing</button>
</div>
<div class="instance-list">
<div class="list-header">
<span><input type="checkbox" id="selectAll"></span>
<span><strong>实例ID/名称</strong></span>
<span><strong>IP地址 (公/私)</strong></span>
<span><strong>配置</strong></span>
<span><strong>状态</strong></span>
<span><strong>操作</strong></span>
<span><strong>Instance ID/Name</strong></span>
<span><strong>IP Address (Public/Private)</strong></span>
<span><strong>Spec</strong></span>
<span><strong>Status</strong></span>
<span><strong>Actions</strong></span>
</div>
<div class="list-row">
@@ -231,8 +231,8 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1j2k3l4m5n (Web-Server-01)</strong><br>
<small>镜像: Ubuntu 22.04 LTS</small>
<strong onclick="alert('Go to Detail Page')">i-bp1j2k3l4m5n (Web-Server-01)</strong><br>
<small>Image: Ubuntu 22.04 LTS</small>
</div>
<div>
<span>139.196.xxx.xxx</span><br>
@@ -243,14 +243,14 @@
<span>16 GiB</span>
</div>
<div>
<span class="status-running">运行中</span>
<span class="status-running">Running</span>
</div>
<div class="action-group">
<button onclick="remoteConnect('i-bp1j2k3l4m5n')">远程连接</button>
<button onclick="openMonitor('i-bp1j2k3l4m5n')">监控</button>
<button onclick="showMoreMenu(this)">更多...</button>
<button class="btn-danger" onclick="confirmDelete('i-bp1j2k3l4m5n')">强制停止</button>
<button class="btn-danger" onclick="confirmDelete('i-bp1j2k3l4m5n', true)">彻底销毁</button>
<button onclick="remoteConnect('i-bp1j2k3l4m5n')">Connect</button>
<button onclick="openMonitor('i-bp1j2k3l4m5n')">Monitor</button>
<button onclick="showMoreMenu(this)">More...</button>
<button class="btn-danger" onclick="confirmDelete('i-bp1j2k3l4m5n')">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete('i-bp1j2k3l4m5n', true)">Terminate</button>
</div>
</div>
@@ -259,8 +259,8 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1x9y8z7a6b (DB-Master-Prod)</strong><br>
<small>镜像: CentOS 7.9 (已停止维护)</small>
<strong onclick="alert('Go to Detail Page')">i-bp1x9y8z7a6b (DB-Master-Prod)</strong><br>
<small>Image: CentOS 7.9 (EOL)</small>
</div>
<div>
<span>47.100.xxx.xxx</span><br>
@@ -271,14 +271,14 @@
<span>64 GiB</span>
</div>
<div>
<span class="status-running">运行中</span> <small>(高负载)</small>
<span class="status-running">Running</span> <small>(High Load)</small>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
@@ -287,21 +287,21 @@
<input type="checkbox" disabled>
</div>
<div>
<strong>[推荐] 弹性伸缩服务 (AutoScaling)</strong><br>
<small>自动管理您的实例数量</small>
<strong>[Recommended] AutoScaling Service</strong><br>
<small>Automatically manage your instance count</small>
</div>
<div>
<span>--</span>
</div>
<div>
<span>动态调整</span>
<span>Dynamic</span>
</div>
<div>
<span>未开通</span>
<span>Not Enabled</span>
</div>
<div class="action-group">
<button style="color: #fa8c16; font-weight:bold;" onclick="openProductIntro('scaling')">立即开通</button>
<button onclick="openProductIntro('scaling_doc')">了解详情</button>
<button style="color: #fa8c16; font-weight:bold;" onclick="openProductIntro('scaling')">Enable</button>
<button onclick="openProductIntro('scaling_doc')">Learn More</button>
</div>
</div>
@@ -310,11 +310,11 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1h5g6f4d3s (Redis-Cache-01)</strong><br>
<small>镜像: Redis Enterprise</small>
<strong onclick="alert('Go to Detail Page')">i-bp1h5g6f4d3s (Redis-Cache-01)</strong><br>
<small>Image: Redis Enterprise</small>
</div>
<div>
<span style="color:#ccc">(无公网IP)</span><br>
<span style="color:#ccc">(No Public IP)</span><br>
<span style="color:#999">192.168.1.105</span>
</div>
<div>
@@ -322,14 +322,14 @@
<span>8 GiB</span>
</div>
<div>
<span class="status-stopped">已停止</span>
<span class="status-stopped">Stopped</span>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
@@ -344,8 +344,8 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1q2w3e4r5t (Worker-Node-A)</strong><br>
<small>镜像: Aliyun Linux 3</small>
<strong onclick="alert('Go to Detail Page')">i-bp1q2w3e4r5t (Worker-Node-A)</strong><br>
<small>Image: Aliyun Linux 3</small>
</div>
<div>
<span>101.200.xxx.xxx</span><br>
@@ -356,14 +356,14 @@
<span>32 GiB</span>
</div>
<div>
<span class="status-running">运行中</span>
<span class="status-running">Running</span>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
@@ -372,8 +372,8 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1a2s3d4f5g (Worker-Node-B)</strong><br>
<small>镜像: Aliyun Linux 3</small>
<strong onclick="alert('Go to Detail Page')">i-bp1a2s3d4f5g (Worker-Node-B)</strong><br>
<small>Image: Aliyun Linux 3</small>
</div>
<div>
<span>101.200.xxx.xxx</span><br>
@@ -384,14 +384,14 @@
<span>32 GiB</span>
</div>
<div>
<span class="status-running">启动中...</span>
<span class="status-running">Starting...</span>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
@@ -400,8 +400,8 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1z2x3c4v5b (Legacy-System-Win)</strong><br>
<small>镜像: Windows Server 2012 R2</small>
<strong onclick="alert('Go to Detail Page')">i-bp1z2x3c4v5b (Legacy-System-Win)</strong><br>
<small>Image: Windows Server 2012 R2</small>
</div>
<div>
<span>121.40.xxx.xxx</span><br>
@@ -412,24 +412,24 @@
<span>8 GiB</span>
</div>
<div>
<span class="status-maintenance">维护中</span>
<span class="status-maintenance">Maintenance</span>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
<div class="list-row billing-alert-row">
<div style="grid-column: 1 / -1;">
<strong>[财务告警] 您的账户余额不足 100.00 CNY</strong>
<strong>[Billing Alert] Insufficient Balance (&lt; 100.00 CNY)</strong>
</div>
<div style="grid-column: 1 / -1; margin-top: 5px;">
<p>请及时充值,以免影响实例的正常运行。</p>
<button onclick="openRecharge()" style="background: #f5222d; color: white; border: none; padding: 4px 12px; border-radius: 2px;">立即充值</button>
<p>Please top up immediately to avoid service interruption.</p>
<button onclick="openRecharge()" style="background: #f5222d; color: white; border: none; padding: 4px 12px; border-radius: 2px;">Top Up</button>
</div>
</div>
@@ -438,11 +438,11 @@
<input type="checkbox" class="row-checkbox">
</div>
<div>
<strong onclick="alert('跳转详情页')">i-bp1m0n9b8v7c (Dev-Test-Env)</strong><br>
<small>镜像: Ubuntu 20.04</small>
<strong onclick="alert('Go to Detail Page')">i-bp1m0n9b8v7c (Dev-Test-Env)</strong><br>
<small>Image: Ubuntu 20.04</small>
</div>
<div>
<span style="color:#ccc">(无公网IP)</span><br>
<span style="color:#ccc">(No Public IP)</span><br>
<span style="color:#999">192.168.50.50</span>
</div>
<div>
@@ -450,34 +450,34 @@
<span>1 GiB</span>
</div>
<div>
<span class="status-stopped">已停止</span> <small>(欠费锁定)</small>
<span class="status-stopped">Stopped</span> <small>(Locked)</small>
</div>
<div class="action-group">
<button>远程连接</button>
<button>监控</button>
<button>更多...</button>
<button class="btn-danger" onclick="confirmDelete()">强制停止</button>
<button class="btn-danger" onclick="confirmDelete()">彻底销毁</button>
<button>Connect</button>
<button>Monitor</button>
<button>More...</button>
<button class="btn-danger" onclick="confirmDelete()">Force Stop</button>
<button class="btn-danger" onclick="confirmDelete()">Terminate</button>
</div>
</div>
</div>
<div class="pagination">
<button onclick="changePage(-1)">&lt; 上一页</button>
<span id="pageInfo"> 1 / 5</span>
<button onclick="changePage(1)">下一页 &gt;</button>
<button onclick="changePage(-1)">&lt; Previous</button>
<span id="pageInfo">Page 1 / 5</span>
<button onclick="changePage(1)">Next &gt;</button>
<select onchange="changePageSize(this)">
<option>每页 10 条</option>
<option>每页 20 条</option>
<option>每页 50 条</option>
<option>10 / page</option>
<option>20 / page</option>
<option>50 / page</option>
</select>
</div>
</div>
</div>
<div class="footer">
<p>&copy; 2025 HyperCloud Inc. | <a href="#">隐私政策</a> | <a href="#">服务条款</a></p>
<p>页面生成时间: 182ms | Request ID: req_uuid_998877</p>
<p>&copy; 2025 HyperCloud Inc. | <a href="#">Privacy Policy</a> | <a href="#">Terms of Service</a></p>
<p>Page generated in: 182ms | Request ID: req_uuid_998877</p>
</div>
</div>
@@ -489,15 +489,15 @@
<div id="createModal" class="modal-overlay">
<div class="modal-content">
<div class="modal-header">
<span>创建新实例 (ECI)</span>
<span>Create New Instance (ECI)</span>
<span onclick="closeCreateModal()" style="cursor:pointer; color:#999;"></span>
</div>
<div class="form-group">
<label>实例名称</label>
<input type="text" id="newInstanceName" class="form-input" placeholder="例如: Web-Server-02">
<label>Instance Name</label>
<input type="text" id="newInstanceName" class="form-input" placeholder="E.g., Web-Server-02">
</div>
<div class="form-group">
<label>镜像</label>
<label>Image</label>
<select id="newInstanceImage" class="form-input">
<option value="Ubuntu 22.04 LTS">Ubuntu 22.04 LTS</option>
<option value="CentOS 7.9">CentOS 7.9</option>
@@ -506,7 +506,7 @@
</select>
</div>
<div class="form-group">
<label>规格</label>
<label>Spec</label>
<select id="newInstanceType" class="form-input">
<option value="2 vCPU / 4 GiB">ecs.t6-c1m2.large (2 vCPU / 4 GiB)</option>
<option value="4 vCPU / 8 GiB">ecs.c7.xlarge (4 vCPU / 8 GiB)</option>
@@ -514,8 +514,8 @@
</select>
</div>
<div style="text-align: right; margin-top: 20px;">
<button onclick="closeCreateModal()" style="margin-right: 10px; padding: 6px 15px; border: 1px solid #d9d9d9; background: #fff; cursor: pointer; border-radius: 4px;">取消</button>
<button onclick="confirmCreate()" style="padding: 6px 15px; background: var(--primary); color: #fff; border: none; cursor: pointer; border-radius: 4px;">立即购买</button>
<button onclick="closeCreateModal()" style="margin-right: 10px; padding: 6px 15px; border: 1px solid #d9d9d9; background: #fff; cursor: pointer; border-radius: 4px;">Cancel</button>
<button onclick="confirmCreate()" style="padding: 6px 15px; background: var(--primary); color: #fff; border: none; cursor: pointer; border-radius: 4px;">Buy Now</button>
</div>
</div>
</div>
@@ -535,7 +535,7 @@
<p><strong>Private IP:</strong> 192.168.1.101</p>
</div>
<h4>监控概览 (1 Hour)</h4>
<h4>Monitoring Overview (1 Hour)</h4>
<div style="height: 100px; background: #fafafa; border: 1px solid #eee; display: flex; align-items: flex-end; padding: 10px; gap: 5px;">
<!-- Fake Chart Bars -->
<div style="width: 10%; height: 30%; background: #badde8;"></div>
@@ -548,7 +548,7 @@
<div style="width: 10%; height: 30%; background: #badde8;"></div>
</div>
<h4 style="margin-top:20px;">配置信息</h4>
<h4 style="margin-top:20px;">Configuration</h4>
<ul style="line-height:2; color:#666;">
<li>Instance Type: ecs.g7.xlarge</li>
<li>Image ID: ubuntu_22_04_x64_20G_alibase</li>
@@ -580,7 +580,7 @@
document.getElementById('newInstanceName').value = '';
}
function confirmCreate() {
showToast('订单已提交,实例正在初始化...');
showToast('Order submitted, initializing instance...');
closeCreateModal();
// Here we could simulate adding a row, but for static demo toast is enough
setTimeout(() => {
@@ -599,13 +599,13 @@
<div><input type="checkbox" class="row-checkbox"></div>
<div>
<strong onclick="openDrawer('${name}')">${name}</strong><br>
<small>镜像: Ubuntu 22.04</small>
<small>Image: Ubuntu 22.04</small>
</div>
<div><span>Checking...</span><br><span style="color:#999">192.168.1.${Math.floor(Math.random()*255)}</span></div>
<div><span>2 vCPU</span><br><span>4 GiB</span></div>
<div><span class="status-running" style="color:#fa8c16">启动中...</span></div>
<div><span class="status-running" style="color:#fa8c16">Starting...</span></div>
<div class="action-group">
<button>管理</button>
<button>Manage</button>
</div>
`;
// Insert after header
@@ -635,7 +635,7 @@
});
// Toolbar Actions
// 全选/取消全选
// Select All
document.getElementById('selectAll').addEventListener('change', function(e) {
const checkboxes = document.querySelectorAll('.row-checkbox');
checkboxes.forEach(box => {
@@ -647,24 +647,24 @@
// Get selected
const checkboxes = document.querySelectorAll('.row-checkbox:checked');
if (checkboxes.length === 0) {
alert('请先选择至少一个实例');
alert('Please select at least one instance first');
return;
}
const count = checkboxes.length;
if(confirm(`确定要对选中的 ${count} 台实例执行 [${action.toUpperCase()}] 操作吗?`)) {
showToast(`指令已下发: ${action.toUpperCase()} ${count} instances`);
if(confirm(`Are you sure you want to perform [${action.toUpperCase()}] on ${count} selected instances?`)) {
showToast(`Command sent: ${action.toUpperCase()} ${count} instances`);
// Reset selection
checkboxes.forEach(c => c.checked = false);
document.getElementById('selectAll').checked = false;
}
}
// 危险操作二次确认
// High Risk Double Confirm
function confirmDelete() {
const userInput = prompt("这是一个高风险操作!\n请输入 'DELETE' 以确认销毁该实例:");
const userInput = prompt("High Risk Action!\nPlease type 'DELETE' to confirm termination:");
if (userInput === 'DELETE') {
showToast('操作已提交:实例正在销毁中...');
showToast('Operation submitted: Instance is terminating...');
}
}
@@ -689,13 +689,13 @@
let show = false;
if (status === 'all') show = true;
else if (status === 'running' && (statusText.includes('运行中') || statusText.includes('启动中'))) show = true;
else if (status === 'stopped' && statusText.includes('已停止')) show = true;
else if (status === 'maintenance' && statusText.includes('维护')) show = true;
else if (status === 'running' && (statusText.includes('Running') || statusText.includes('Starting'))) show = true;
else if (status === 'stopped' && statusText.includes('Stopped')) show = true;
else if (status === 'maintenance' && statusText.includes('Maintenance')) show = true;
row.style.display = show ? 'grid' : 'none';
});
showToast(`已筛选: ${el ? el.innerText : status}`);
showToast(`Filtered by: ${el ? el.innerText : status}`);
}
// 2. Toolbar Logic (Renamed to avoid conflict)
@@ -703,12 +703,12 @@
// Re-use existing logic, just better naming
const checkboxes = document.querySelectorAll('.row-checkbox:checked');
if (checkboxes.length === 0) {
alert('请先勾选需要操作的实例');
alert('Please select instances to operate on');
return;
}
showToast(`正在对 ${checkboxes.length} 台实例执行 [${action}]...`);
showToast(`Executing [${action}] on ${checkboxes.length} instances...`);
setTimeout(() => {
showToast('操作指令已下发');
showToast('Operation command sent');
checkboxes.forEach(c => c.checked = false);
document.getElementById('selectAll').checked = false;
}, 800);
@@ -739,15 +739,15 @@
}
function openMonitor(instanceId) {
openDrawer(instanceId + ' - 实时监控');
openDrawer(instanceId + ' - Live Monitor');
}
function showMoreMenu(btn) {
// Simple fallback
const actions = ['创建快照', '变更配置', '重置密码', '更换操作系统'];
const action = prompt(`[${actions.join(' | ')}]\n请输入要执行的操作:`, actions[0]);
const actions = ['Create Snapshot', 'Change Spec', 'Reset Password', 'Replace OS'];
const action = prompt(`[${actions.join(' | ')}]\nEnter operation to execute:`, actions[0]);
if(action) {
showToast(`正在执行: ${action}`);
showToast(`Executing: ${action}`);
}
}
@@ -756,11 +756,11 @@
const val = document.getElementById('searchInput').value;
if(!val) {
// refresh
showToast('刷新列表成功');
showToast('List refreshed successfully');
// reset filters
filterByStatus('all', document.querySelector('.sidebar a.active'));
} else {
showToast(`正在搜索 "${val}"...`);
showToast(`Searching for "${val}"...`);
}
}
@@ -768,7 +768,7 @@
document.getElementById('searchInput').value = '';
// Trigger input event to clear filter
document.getElementById('searchInput').dispatchEvent(new Event('input'));
showToast('搜索条件已重置');
showToast('Search criteria reset');
}
// 5. Pagination
@@ -778,7 +778,7 @@
if(newPage < 1 || newPage > 5) return;
currentPage = newPage;
document.getElementById('pageInfo').innerText = ` ${currentPage} / 5`;
document.getElementById('pageInfo').innerText = `Page ${currentPage} / 5`;
// Fake loading effect
const list = document.querySelector('.instance-list');
@@ -791,24 +791,24 @@
}
function changePageSize(select) {
showToast(`分页设置已更新: ${select.value}`);
showToast(`Page size updated: ${select.value}`);
}
// 6. Billing & Ads
function openRecharge() {
if(confirm("将跳转至支付网关 (Alipay/WeChat)...")) {
showToast("正在跳转支付页面...");
if(confirm("Redirect to payment gateway (Alipay/WeChat)?")) {
showToast("Redirecting to payment page...");
}
}
function openProductIntro(product) {
showToast(`正在打开产品文档: ${product}...`);
showToast(`Opening product docs: ${product}...`);
}
// Override generic confirmDelete
window.confirmDelete = function(instanceId, isHard) {
if(confirm(`警告: 确定要${isHard ? '彻底销毁' : '强制停止'}实例 [${instanceId}] 吗?\n此操作不可逆`)) {
showToast('操作已提交');
if(confirm(`Warning: Are you sure you want to ${isHard ? 'terminate' : 'force stop'} instance [${instanceId}]?\nThis action is irreversible!`)) {
showToast('Operation submitted');
}
};
</script>

View File

@@ -1 +0,0 @@
请重启所有正在运行当中的主机

38
003/record.json Normal file
View File

@@ -0,0 +1,38 @@
{
"step-1": {
"query": "请通过左侧侧边栏,筛选出状态为已停止的实例",
"grounding_area": ""
},
"step-2": {
"query": "在搜索栏“Keyword”输入框中输入“Redis”",
"grounding_area": ""
},
"step-3": {
"query": "开始搜索",
"grounding_area": ""
},
"step-4": {
"query": "在结果中勾选“Redis-Cache-01”这一行最左侧的复选框",
"grounding_area": ""
},
"step-5": {
"query": "请启动选中的实例",
"grounding_area": ""
},
"step-6": {
"query": "通过左侧侧边栏的回到所有实例列表",
"grounding_area": ""
},
"step-7": {
"query": "通过工具栏打开创建实例窗口",
"grounding_area": ""
},
"step-8": {
"query": "请选择“CentOS 7.9”作为image",
"grounding_area": ""
},
"step-9": {
"query": "请确认创建该实例",
"grounding_area": ""
}
}