better-staridc-MNBT
1<?php
2if (!defined('IN_CRONLITE')) { exit; }
3$page_title = $page_title ?? '我的主机';
4$assets = $assets ?? [];
5$status_labels = ['active'=>'正常','expired'=>'已到期','cancelled'=>'已取消'];
6ob_start();
7?>
8<div class="hs-section"><h1>我的主机</h1><p>已开通的虚拟主机资产</p></div>
9
10<div class="layui-card">
11 <div class="layui-card-body" style="padding:0;">
12 <?php if (empty($assets)): ?>
13 <p style="text-align:center;padding:40px;color:#999;">您还没有开通的主机,<a href="<?= hosting_url('shop') ?>" style="color:#1e9fff;">去购买</a></p>
14 <?php else: ?>
15 <table class="ly-table hs-asset-table">
16 <thead><tr><th>套餐</th><th>主机账号</th><th>控制面板密码</th><th>节点</th><th>到期时间</th><th>状态</th><th>操作</th></tr></thead>
17 <tbody>
18 <?php foreach ($assets as $a): ?>
19 <tr>
20 <td><?= htmlspecialchars($a['plan_name']) ?></td>
21 <td class="ly-mono"><span class="hs-copy-text" data-copy="<?= htmlspecialchars($a['host_user'] ?? '', ENT_QUOTES) ?>"><?= htmlspecialchars($a['host_user'] ?? '-') ?></span></td>
22 <td class="ly-mono">
23 <?php if (!empty($a['host_pass'])): ?>
24 <span class="hs-pass-mask" data-pass="<?= htmlspecialchars($a['host_pass'], ENT_QUOTES) ?>">********</span>
25 <button type="button" class="hs-icon-btn hs-toggle-pass" title="显示/隐藏密码">👁</button>
26 <button type="button" class="hs-icon-btn hs-copy-btn" data-copy="<?= htmlspecialchars($a['host_pass'], ENT_QUOTES) ?>" title="复制密码">📋</button>
27 <?php else: ?>
28 -
29 <?php endif; ?>
30 </td>
31 <td><?= htmlspecialchars($a['ssbt'] ?? '-') ?></td>
32 <td><?= htmlspecialchars($a['expire_at']) ?></td>
33 <td><span class="ly-status ly-status-<?= $a['status'] ?>"><?= $status_labels[$a['status']] ?? $a['status'] ?></span></td>
34 <td>
35 <?php if (!empty($a['host_user']) && !empty($a['host_pass'])): ?>
36 <form method="POST" action="<?= htmlspecialchars(hosting_core_url('user/idcdl.php?gn=logine'), ENT_QUOTES) ?>" target="_blank" style="display:inline;">
37 <input type="hidden" name="username" value="<?= htmlspecialchars($a['host_user'], ENT_QUOTES) ?>">
38 <input type="hidden" name="password" value="<?= htmlspecialchars($a['host_pass'], ENT_QUOTES) ?>">
39 <button type="submit" class="layui-btn layui-btn-xs layui-btn-normal">一键登录</button>
40 </form>
41 <?php else: ?>
42 <span style="color:#999;font-size:12px;">无登录信息</span>
43 <?php endif; ?>
44 </td>
45 </tr>
46 <?php endforeach; ?>
47 </tbody>
48 </table>
49 <?php endif; ?>
50 </div>
51</div>
52
53<script>
54(function(){
55 document.querySelectorAll('.hs-toggle-pass').forEach(function(btn){
56 btn.addEventListener('click', function(){
57 var span = this.parentNode.querySelector('.hs-pass-mask');
58 if (!span) return;
59 if (span.textContent === '********') {
60 span.textContent = span.getAttribute('data-pass');
61 span.classList.add('revealed');
62 } else {
63 span.textContent = '********';
64 span.classList.remove('revealed');
65 }
66 });
67 });
68 document.querySelectorAll('.hs-copy-btn, .hs-copy-text').forEach(function(el){
69 el.addEventListener('click', function(){
70 var text = this.getAttribute('data-copy');
71 if (!text) return;
72 if (navigator.clipboard && navigator.clipboard.writeText) {
73 navigator.clipboard.writeText(text).then(function(){
74 alert('已复制:' + text);
75 }).catch(function(){
76 fallbackCopy(text);
77 });
78 } else {
79 fallbackCopy(text);
80 }
81 });
82 });
83 function fallbackCopy(text){
84 var ta = document.createElement('textarea');
85 ta.value = text;
86 ta.style.position = 'fixed';
87 ta.style.opacity = '0';
88 document.body.appendChild(ta);
89 ta.select();
90 try { document.execCommand('copy'); alert('已复制:' + text); }
91 catch (err) { alert('复制失败,请手动复制'); }
92 document.body.removeChild(ta);
93 }
94})();
95</script>
96<?php
97$content = ob_get_clean();
98include __DIR__ . '/layout.php';