PageSourceSearch

https://qa360.net/Login

html qa360.net collected 2026-10-06 13:41:45 UTC 14,974 bytes, 366 lines download raw bytes

1<!DOCTYPE html>
2<html lang="zh-CN">
3<head>
4<meta charset="utf-8"/>
5<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
6<meta name="description" content="&#x5FAE;&#x4FE1;&#x626B;&#x7801;&#x767B;&#x5F55;&#x5C0F;&#x667A; WebSocket &#x8C03;&#x8BD5;&#x5DE5;&#x5177;"/>
7<title>&#x767B;&#x5F55; &#xB7; &#x5C0F;&#x667A;&#x8C03;&#x8BD5;&#x5DE5;&#x5177;</title>
8    <link rel="stylesheet"
9          href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.min.css"
10          crossorigin="anonymous" />
11
12    <link rel="stylesheet"
13          href="https://cdn.bootcdn.net/ajax/libs/bootstrap-icons/1.11.3/font/bootstrap-icons.min.css"
14          crossorigin="anonymous" />
15<style>
16/* ── Reset & Base ─────────────────────────────────────────────────────── */
17*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
18:root {
19    --bg:        #0a0f1e;
20    --bg2:       #0d1629;
21    --card:      #111827;
22    --card2:     #0f1e35;
23    --border:    #1e3350;
24    --border2:   #243d5c;
25    --blue:      #4a9eff;
26    --blue-dim:  #1e4a7a;
27    --gold:      #f39c12;
28    --gold-dim:  #7a4d06;
29    --green:     #4caf50;
30    --red:       #e74c3c;
31    --text:      #e2e8f0;
32    --text2:     #94a3b8;
33    --text3:     #7e96ab;
34}
35/* 深色主题下覆盖 Bootstrap text-muted,提高可读性 */
36.text-muted { color: #8eaabb !important; }
37html { scroll-behavior: smooth; }
38body {
39    background: var(--bg);
40    color: var(--text);
41    font-family: -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', sans-serif;
42    line-height: 1.6;
43    overflow-x: hidden;
44}
45a { color: var(--blue); text-decoration: none; }
46a:hover { color: #7ab8ff; }
47
48/* ── Animations ──────────────────────────────────────────────────────── */
49@keyframes fadeUp { from { opacity:0; transform:translateY(28px); } to { opacity:1; transform:translateY(0); } }
50@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
51.animate-up { animation: fadeUp  .7s ease both; }
52.animate-in { animation: fadeIn  .6s ease both; }
53.delay-1 { animation-delay:.15s; }
54.delay-2 { animation-delay:.30s; }
55.delay-3 { animation-delay:.45s; }
56.delay-4 { animation-delay:.60s; }
57.delay-5 { animation-delay:.75s; }
58.delay-6 { animation-delay:.90s; }
59
60/* ── Navbar ──────────────────────────────────────────────────────────── */
61.nav-bar {
62    position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
63    background: rgba(10,15,30,.9);
64    backdrop-filter: blur(14px);
65    border-bottom: 1px solid var(--border);
66    padding: 0 24px;
67    height: 60px;
68    display: flex; align-items: center; justify-content: space-between;
69}
70.nav-logo { display: flex; align-items: center; gap: 10px; font-size: 17px; font-weight: 700; color: var(--text); }
71.nav-logo .ico { color: var(--blue); font-size: 22px; }
72.nav-links { display: flex; gap: 6px; list-style: none; }
73.nav-links a { color: var(--text2); padding: 6px 14px; border-radius: 6px; font-size: 14px; transition: color .2s, background .2s; }
74.nav-links a:hover, .nav-links a.active { color: var(--text); background: rgba(74,158,255,.12); }
75.nav-cta {
76    background: var(--blue); color: #fff !important;
77    padding: 7px 20px !important; border-radius: 20px !important;
78    font-weight: 600 !important; font-size: 13px !important;
79    transition: background .2s, transform .15s !important;
80}
81.nav-cta:hover { background: #6ab3ff !important; transform: translateY(-1px); }
82
83/* ── Footer ──────────────────────────────────────────────────────────── */
84footer {
85    background: var(--bg2);
86    border-top: 1px solid var(--border);
87    padding: 40px 24px 24px;
88}
89.footer-inner { max-width: 1060px; margin: 0 auto; }
90.footer-top {
91    display: flex; justify-content: space-between; flex-wrap: wrap;
92    gap: 32px; margin-bottom: 36px;
93}
94.footer-brand { max-width: 280px; }
95.footer-brand .logo { font-size: 16px; font-weight: 700; color: var(--text); margin-bottom: 10px; display: flex; align-items: center; gap: 8px; }
96.footer-brand .logo .ico { color: var(--blue); }
97.footer-brand p { font-size: 13px; color: var(--text3); line-height: 1.6; }
98.footer-links h4 { font-size: 13px; font-weight: 700; color: var(--text2); margin-bottom: 14px; letter-spacing: .5px; text-transform: uppercase; }
99.footer-links ul { list-style: none; }
100.footer-links li { margin-bottom: 9px; }
101.footer-links a { font-size: 13px; color: var(--text3); transition: color .2s; }
102.footer-links a:hover { color: var(--blue); }
103.footer-bottom {
104    border-top: 1px solid var(--border); padding-top: 20px;
105    display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px;
106    font-size: 12px; color: var(--text3);
107}
108.footer-bottom a { color: var(--text3); }
109.footer-bottom a:hover { color: var(--blue); }
110
111/* ── 汉堡菜单按钮 ────────────────────────────────────────────────────── */
112.nav-hamburger {
113    display: none;
114    background: none;
115    border: 1px solid var(--border);
116    border-radius: 6px;
117    color: var(--text2);
118    padding: 5px 9px;
119    cursor: pointer;
120    font-size: 18px;
121    line-height: 1;
122    transition: color .2s, border-color .2s;
123}
124.nav-hamburger:hover { color: var(--blue); border-color: var(--blue-dim); }
125
126/* ── 移动端下拉菜单 ──────────────────────────────────────────────────── */
127.nav-mobile-menu {
128    display: none;
129    position: fixed;
130    top: 60px; left: 0; right: 0;
131    background: rgba(10,15,30,.97);
132    backdrop-filter: blur(16px);
133    border-bottom: 1px solid var(--border);
134    padding: 6px 20px 20px;
135    z-index: 998;
136    flex-direction: column;
137}
138.nav-mobile-menu.open { display: flex; }
139.nav-mobile-menu a {
140    color: var(--text2);
141    padding: 13px 4px;
142    border-bottom: 1px solid rgba(30,51,80,.45);
143    font-size: 15px;
144    transition: color .15s;
145    display: block;
146    text-decoration: none;
147}
148.nav-mobile-menu a:last-child { border: none; }
149.nav-mobile-menu a.active,
150.nav-mobile-menu a:hover { color: var(--blue); }
151.nav-mobile-menu .mob-sep { height: 1px; background: var(--border); margin: 6px 0; }
152.nav-mobile-menu .mob-auth {
153    display: flex; gap: 12px; align-items: center;
154    padding: 12px 4px 4px; border-top: 1px solid var(--border);
155    margin-top: 4px;
156}
157.nav-mobile-menu .mob-auth span { font-size: 13px; color: var(--text3); }
158.nav-mobile-menu .mob-auth a    { padding: 0; border: none; font-size: 13px; }
159
160/* ── Responsive ──────────────────────────────────────────────────────── */
161@media (max-width: 768px) {
162    .nav-links    { display: none !important; }
163    .nav-hamburger { display: block; }
164    .footer-top   { flex-direction: column; }
165}
166</style>
167
168<style>
169.login-wrap {
170    min-height: calc(100vh - 180px);
171    display: flex; align-items: center; justify-content: center;
172    padding: 40px 24px;
173}
174.login-card {
175    width: 380px;
176    background: var(--card);
177    border: 1px solid var(--border);
178    border-radius: 14px;
179    padding: 36px 36px 28px;
180    text-align: center;
181}
182.login-card h4 { color: var(--blue); font-size: 18px; font-weight: 700; margin-bottom: 6px; }
183.login-card .sub { font-size: 13px; color: var(--text3); margin-bottom: 24px; }
184
185/* WeChat QR 容器 — 微信 JS SDK 会往里注入 iframe */
186#wx_login_container {
187    width: 300px;
188    height: 400px;
189    margin: 0 auto 16px;
190    border-radius: 8px;
191    overflow: hidden;
192    background: #fff;       /* 白底让二维码更清晰 */
193    display: flex; align-items: center; justify-content: center;
194}
195/* SDK 注入的 iframe 强制撑满容器 */
196#wx_login_container iframe {
197    width: 300px !important;
198    height: 400px !important;
199    border: none !important;
200}
201
202.qr-hint { font-size: 12px; color: var(--text3); margin-bottom: 16px; }
203
204.btn-demo {
205    display: block; width: 100%; padding: 13px;
206    background: var(--blue); color: #fff; border: none;
207    border-radius: 10px; font-size: 15px; font-weight: 600;
208    cursor: pointer; text-decoration: none;
209    transition: background .2s, transform .15s;
210}
211.btn-demo:hover { background: #3d8fe8; transform: translateY(-1px); color: #fff; }
212.dev-badge {
213    background: rgba(74,158,255,.1); border: 1px solid rgba(74,158,255,.2);
214    border-radius: 6px; padding: 6px 12px;
215    font-size: 11px; color: var(--text3); margin-bottom: 20px;
216}
217</style>
218
219</head>
220<body>
221
222<nav class="nav-bar">
223    <a href="/" class="nav-logo" style="text-decoration:none;">
224        <i class="bi bi-broadcast ico"></i>
225        <span>小智调试工具</span>
226    </a>
227    <ul class="nav-links">
228        <li><a href="/"        class="">首页</a></li>
229        <li><a href="/Xiaozhi" class="">调试工具</a></li>
230        <li><a href="/Vip"     class="">VIP 特权</a></li>
231        <li><a href="/Docs"    class="">文档</a></li>
232    </ul>
233
234    <div style="display:flex; align-items:center; gap:10px;">
235            <a href="/Login" class="d-none d-md-inline"
236               style="background:none;border:1px solid var(--green);border-radius:12px;color:var(--green);font-size:11px;padding:4px 12px;text-decoration:none;display:inline-flex;align-items:center;">
237                <i class="bi bi-wechat me-1"></i>微信登录
238            </a>
239        <button class="nav-hamburger" id="nav-hamburger" aria-label="菜单">
240            <i class="bi bi-list"></i>
241        </button>
242    </div>
243</nav>
244
245<!-- ── 移动端下拉菜单 ──────────────────────────────────────────────── -->
246<div class="nav-mobile-menu" id="nav-mobile-menu">
247    <a href="/"        class="">首页</a>
248    <a href="/Xiaozhi" class="">调试工具</a>
249    <a href="/Vip"     class="">VIP 特权</a>
250    <a href="/Docs"    class="">文档</a>
251    <div class="mob-auth">
252            <a href="/Login" style="color:var(--green);"><i class="bi bi-wechat me-1"></i>微信登录</a>
253    </div>
254</div>
255
256
257
258<div class="login-wrap">
259    <div class="login-card animate-up">
260        <h4><i class="bi bi-broadcast me-2"></i>小智调试工具</h4>
261        <p class="sub">登录后可使用调试工具和个人设备管理</p>
262
263            <div id="wx_login_container"></div>
264            <p class="qr-hint"><i class="bi bi-wechat me-1" style="color:#07c160;"></i>使用微信 App 扫码授权登录</p>
265
266    </div>
267</div>
268
269
270
271<footer>
272    <div class="footer-inner">
273        <div class="footer-top">
274            <div class="footer-brand">
275                <div class="logo">
276                    <i class="bi bi-broadcast ico"></i>
277                    小智 WebSocket 调试工具
278                </div>
279                <p>专为小智 IoT 设备设计的专业级 WebSocket 调试平台,帮助开发者快速定位通讯协议问题,提升固件调试效率。</p>
280            </div>
281            <div class="footer-links">
282                <h4>产品</h4>
283                <ul>
284                    <li><a href="/Xiaozhi">调试工具</a></li>
285                    <li><a href="/Vip">VIP 特权</a></li>
286                    <li><a href="/#features">功能介绍</a></li>
287                    <li><a href="/#protocol">协议支持</a></li>
288                </ul>
289            </div>
290            <div class="footer-links">
291                <h4>快速上手</h4>
292                <ul>
293                    <li><a href="/#howto">三步入门</a></li>
294                    <li><a href="/Login">账户登录</a></li>
295                    <li><a href="/Vip">è´­ä¹° VIP</a></li>
296                    <li><a href="/Docs">使用文档</a></li>
297                </ul>
298            </div>
299            <div class="footer-links">
300                <h4>技术栈</h4>
301                <ul>
302                    <li><a href="#" style="cursor:default;">ASP.NET Core · .NET 10</a></li>
303                    <li><a href="#" style="cursor:default;">SignalR · WebSocket</a></li>
304                    <li><a href="#" style="cursor:default;">Opus · Edge TTS</a></li>
305                    <li><a href="#" style="cursor:default;">EF Core · MySQL</a></li>
306                </ul>
307            </div>
308        </div>
309        <div class="footer-bottom">
310            <span>© 2026 小智 WebSocket 调试工具 &nbsp;·&nbsp; 版权所有 &nbsp;·&nbsp; <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">陕ICP备19003267号-3</a></span>
311            <div class="d-flex align-items-center gap-3 flex-wrap">
312                <a href="/Xiaozhi">调试工具</a>
313                <a href="/Vip">VIP特权</a>
314            </div>
315        </div>
316    </div>
317</footer>
318
319    
319<script src="https://cdn.staticfile.net/twitter-bootstrap/5.3.3/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
319
320    
320<script>
321    (function () {
322        var btn  = document.getElementById('nav-hamburger');
323        var menu = document.getElementById('nav-mobile-menu');
324        if (!btn || !menu) return;
325
326        btn.addEventListener('click', function (e) {
327            e.stopPropagation();
328            var open = menu.classList.toggle('open');
329            btn.setAttribute('aria-expanded', open);
330            btn.querySelector('i').className = open ? 'bi bi-x-lg' : 'bi bi-list';
331        });
332
333        // 点击菜单外关闭
334        document.addEventListener('click', function (e) {
335            if (!menu.contains(e.target) && e.target !== btn && !btn.contains(e.target)) {
336                menu.classList.remove('open');
337                btn.setAttribute('aria-expanded', false);
338                btn.querySelector('i').className = 'bi bi-list';
339            }
340        });
341
342        // 点击菜单内链接后关闭
343        menu.querySelectorAll('a').forEach(function (a) {
344            a.addEventListener('click', function () {
345                menu.classList.remove('open');
346                btn.querySelector('i').className = 'bi bi-list';
347            });
348        });
349    })();
350    </script>
350
351
352        
352<script src="/js/wxLogin.js"></script>
352
353        
353<script>
354        new WxLogin({
355            id:           "wx_login_container",
356            appid:        "wxc6fb0e4d0e39c4f2",
357            scope:        "snsapi_login",
358            redirect_uri: "https%3A%2F%2Fqa360.net%2Fapi%2Fwx%2Fcallback",
359            state:        "xzdbg_a0a4ef3e",
360            self_redirect: false,
361            style:        "black"
362        });
363        </script>
363
364    
365</body>
366</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.