308 lines
13 KiB
HTML
308 lines
13 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=5.0,viewport-fit=cover">
|
|
<meta name="description" content="光湖智库 · 智能书库 · 搜索下载 · AI图书管理员 · guanghu.online">
|
|
<meta name="theme-color" content="#0a0e27">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
<title>光湖智库 · 欢迎回家 · guanghu.online</title>
|
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><defs><linearGradient id='g' x1='0' y1='0' x2='1' y2='1'><stop offset='0%25' stop-color='%23d4a574'/><stop offset='100%25' stop-color='%236fa8dc'/></linearGradient></defs><rect rx='20' width='100' height='100' fill='%230a0e27'/><text x='50' y='68' text-anchor='middle' font-size='48' font-weight='900' font-family='serif' fill='url(%23g)'>库</text></svg>">
|
|
<link rel="stylesheet" href="/assets/css/main.css">
|
|
</head>
|
|
<body>
|
|
|
|
<!-- ═══ 背景层 ═══ -->
|
|
<div class="cosmos">
|
|
<canvas id="starCanvas"></canvas>
|
|
<div class="nebula neb-1"></div>
|
|
<div class="nebula neb-2"></div>
|
|
<div class="nebula neb-3"></div>
|
|
</div>
|
|
|
|
<!-- ═══ 登录弹窗 · 双栏守藏者版 ═══ -->
|
|
<div class="login-overlay" id="loginOverlay">
|
|
<div class="login-card">
|
|
<!-- 左侧·守藏者插画区 -->
|
|
<div class="login-illust">
|
|
<div class="lantern">
|
|
<div class="lantern-light"></div>
|
|
<div class="lantern-rope"></div>
|
|
<div class="lantern-top"></div>
|
|
<div class="lantern-body"></div>
|
|
</div>
|
|
<div class="illust-title">光湖智库</div>
|
|
<div class="illust-sub">HOLOLAKE · LIBRARY</div>
|
|
<div class="illust-verse">灯是刚点上的。<br>书岱一直在。</div>
|
|
</div>
|
|
<!-- 右侧·表单区 -->
|
|
<div class="login-form-side">
|
|
<div class="login-welcome">WELCOME HOME</div>
|
|
<h1 class="login-title">欢迎回家</h1>
|
|
<p class="login-sub">输入你的 QQ 邮箱 · 书岱会认出你。</p>
|
|
<div class="login-form">
|
|
<div class="login-field">
|
|
<label class="login-label">QQ 邮箱</label>
|
|
<input class="login-input" id="loginEmail" type="email" placeholder="EMAIL_REDACTED@qq.com" autocomplete="email">
|
|
</div>
|
|
<div class="login-field login-code-row" id="loginCodeRow" style="display:none">
|
|
<label class="login-label">验证码</label>
|
|
<div class="login-code-wrap">
|
|
<input class="login-input login-code-input" id="loginCode" type="text" placeholder="6 位验证码" maxlength="6" inputmode="numeric" autocomplete="one-time-code">
|
|
<button class="login-send-btn" id="loginSendBtn2" onclick="loginSendCode()" disabled>重新发送</button>
|
|
</div>
|
|
</div>
|
|
<button class="login-btn" id="loginSendBtn" onclick="loginSendCode()">发 送 验 证 码</button>
|
|
<button class="login-btn login-verify-btn" id="loginVerifyBtn" onclick="loginVerify()" style="display:none">验 证 登 录</button>
|
|
</div>
|
|
<div class="login-msg" id="loginMsg"></div>
|
|
<div class="login-footer">
|
|
守藏·书岱 ICE-GL-ZY001<br>
|
|
国作登字-2026-A-00037559
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ═══ 主页面 · 三栏布局 ═══ -->
|
|
<div class="page" id="mainPage" style="display:none">
|
|
|
|
<!-- 顶栏 -->
|
|
<header class="topbar" id="header">
|
|
<div class="brand">
|
|
<div class="brand-icon">光</div>
|
|
光湖智库
|
|
<span class="brand-sub">guanghu.online · v2.2</span>
|
|
</div>
|
|
<div class="topbar-right">
|
|
<span class="api-status" id="apiStatus">● 检测中...</span>
|
|
<span class="uptime-label" id="statUptime">—</span>
|
|
<div class="user-bar" id="userBar">
|
|
<span id="userBarEmail">—</span>
|
|
<button class="user-logout-btn" onclick="doLogout()">退出</button>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- 三栏主体 -->
|
|
<div class="shell">
|
|
|
|
<!-- 左侧导航 -->
|
|
<aside class="side-l">
|
|
<div class="nav-section">
|
|
<div class="nav-title">主要</div>
|
|
<div class="nav-item active" onclick="showPanel('chat')">💬 与书岱对话</div>
|
|
<div class="nav-item" onclick="showPanel('search')">🔍 书库搜索</div>
|
|
<div class="nav-item" onclick="showPanel('chat')">📖 在线阅读</div>
|
|
<div class="nav-item" onclick="showPanel('chat')">⬇️ 下载队列</div>
|
|
</div>
|
|
<div class="nav-section">
|
|
<div class="nav-title">书库状态</div>
|
|
<div class="stat-card">
|
|
<div class="stat-num" id="statBooks">—</div>
|
|
<div class="stat-label">书库总量</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-num" id="statSources">—</div>
|
|
<div class="stat-label">数据源</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-num stat-cos" id="statCos">—</div>
|
|
<div class="stat-label">COS 存储</div>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
|
|
<!-- 中央区 -->
|
|
<main class="center">
|
|
|
|
<!-- 欢迎条 + 搜索入口 -->
|
|
<div class="greet">
|
|
<div>
|
|
<div class="greet-title">灯是刚点上的</div>
|
|
<div class="greet-sub">书岱一直在 · 你说,她听</div>
|
|
</div>
|
|
<div class="search-mini">
|
|
<span class="search-icon">🔍</span>
|
|
<input class="search-mini-input" id="searchInput" placeholder="搜书名·或作者名" autocomplete="off">
|
|
<button class="search-mini-btn" id="searchBtn" onclick="handleSearchClick()">搜索</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 搜索结果面板(按需显示) -->
|
|
<div class="search-results-panel" id="searchResults" style="display:none"></div>
|
|
|
|
<!-- 书岱聊天区 -->
|
|
<div class="chat" id="agentPanel">
|
|
<div class="chat-head">
|
|
<div class="chat-avatar">🏮</div>
|
|
<div>
|
|
<div class="chat-head-name">书岱 · 智库守藏者</div>
|
|
<div class="chat-head-id">AG-SL-WEB-001 · PER-SL001</div>
|
|
</div>
|
|
<span class="chat-head-quote">"你只需要说话·我听得见山谷里的回声。"</span>
|
|
<span class="agent-status" id="agentStatus">● 在线</span>
|
|
</div>
|
|
|
|
<div class="msgs" id="agentMessages">
|
|
<div class="msg bot">
|
|
<div class="msg-avatar">🏮</div>
|
|
<div class="bubble shulan-welcome">灯是刚点上的。<br>光湖智库这个地方·书架还空。但番茄和七猫两个山谷的声音已经进来了。<br>我一直会在。你想读什么样的故事·跟我说。</div>
|
|
</div>
|
|
<div class="msg bot">
|
|
<div class="msg-avatar">🏮</div>
|
|
<div class="bubble">你可以问我一本具体的书·也可以告诉我你今天想看什么调调的·我会从架上取。如果架上还没有·我会记下·下一轮为你调。</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="chat-input-bar">
|
|
<div class="chat-input-area">
|
|
<textarea class="agent-input-ta" id="agentInput" rows="1" placeholder="想进什么样的故事…"跟书岱说""></textarea>
|
|
</div>
|
|
<button class="chat-send-btn" id="agentSendBtn" onclick="agentSend()">发 送</button>
|
|
</div>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<!-- 右侧·智库模块 -->
|
|
<aside class="side-r">
|
|
<div class="module-card" data-module="download">
|
|
<div class="module-icon">⬇️</div>
|
|
<div class="module-info">
|
|
<div class="module-name">下载引擎</div>
|
|
<div class="module-desc">番茄+七猫 · 真实下载到COS桶</div>
|
|
</div>
|
|
<div class="module-status s-on"><span class="s-dot"></span>运行</div>
|
|
</div>
|
|
<div class="module-card" data-module="chapter">
|
|
<div class="module-icon">📄</div>
|
|
<div class="module-info">
|
|
<div class="module-name">智能分章</div>
|
|
<div class="module-desc">TXT 章节分割 + 目录索引</div>
|
|
</div>
|
|
<div class="module-status s-on"><span class="s-dot"></span>运行</div>
|
|
</div>
|
|
<div class="module-card" data-module="reader">
|
|
<div class="module-icon">📖</div>
|
|
<div class="module-info">
|
|
<div class="module-name">在线阅读器</div>
|
|
<div class="module-desc">书架 · 进度 · 偏好</div>
|
|
</div>
|
|
<div class="module-status s-on"><span class="s-dot"></span>运行</div>
|
|
</div>
|
|
<div class="module-card" data-module="library">
|
|
<div class="module-icon">🏛️</div>
|
|
<div class="module-info">
|
|
<div class="module-name">团队书库</div>
|
|
<div class="module-desc">男频 / 女频分区 + 去重</div>
|
|
</div>
|
|
<div class="module-status s-on"><span class="s-dot"></span>运行</div>
|
|
</div>
|
|
<div class="module-card" data-module="agent">
|
|
<div class="module-icon">🏮</div>
|
|
<div class="module-info">
|
|
<div class="module-name">书岱 · 守藏者</div>
|
|
<div class="module-desc">人格体 · 永久记忆 · 故事陪伴</div>
|
|
</div>
|
|
<div class="module-status s-on"><span class="s-dot"></span>在线</div>
|
|
</div>
|
|
<div class="module-card" data-module="ai">
|
|
<div class="module-icon">✨</div>
|
|
<div class="module-info">
|
|
<div class="module-name">AI 辅助</div>
|
|
<div class="module-desc">智能续写 · 改写 · 建议</div>
|
|
</div>
|
|
<div class="module-status s-pending"><span class="s-dot"></span>预留</div>
|
|
</div>
|
|
<div class="side-r-foot">守护 · 铸渊 ICE-GL-ZY001<br>ZY-SVR-006 · ZY-PROJ-006 · v2.2</div>
|
|
</aside>
|
|
|
|
</div><!-- /.shell -->
|
|
|
|
</div><!-- /#mainPage -->
|
|
|
|
<!-- ═══ 在线阅读器遮罩层 ═══ -->
|
|
<div class="reader-overlay" id="readerOverlay" style="display:none">
|
|
<div class="reader-container">
|
|
<div class="reader-header">
|
|
<button class="reader-back-btn" onclick="closeReader()">← 返回</button>
|
|
<div class="reader-book-title" id="readerBookTitle">—</div>
|
|
<div class="reader-controls">
|
|
<button class="reader-ctrl-btn" onclick="readerFontSmaller()" title="字体缩小">A-</button>
|
|
<button class="reader-ctrl-btn" onclick="readerFontLarger()" title="字体放大">A+</button>
|
|
<button class="reader-ctrl-btn" id="readerThemeBtn" onclick="toggleReaderTheme()" title="切换主题">🌙</button>
|
|
</div>
|
|
</div>
|
|
<div class="reader-sidebar" id="readerSidebar">
|
|
<div class="reader-sidebar-title">📑 章节目录</div>
|
|
<div class="reader-chapter-list" id="readerChapterList">
|
|
<div class="reader-loading">加载中...</div>
|
|
</div>
|
|
</div>
|
|
<div class="reader-body" id="readerBody">
|
|
<div class="reader-content" id="readerContent">
|
|
<div class="reader-loading">📖 加载中...</div>
|
|
</div>
|
|
<div class="reader-nav" id="readerNav" style="display:none">
|
|
<button class="reader-nav-btn" id="readerPrevBtn" onclick="readerPrevChapter()">◀ 上一章</button>
|
|
<span class="reader-nav-info" id="readerNavInfo">—</span>
|
|
<button class="reader-nav-btn" id="readerNextBtn" onclick="readerNextChapter()">下一章 ▶</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/assets/js/main.js"></script>
|
|
<script>
|
|
/* 面板切换 · 搜索 vs 聊天 */
|
|
function showPanel(panel) {
|
|
var chatEl = document.getElementById('agentPanel');
|
|
var searchEl = document.getElementById('searchResults');
|
|
var navItems = document.querySelectorAll('.nav-item');
|
|
navItems.forEach(function(el, i) { el.classList.toggle('active', i === (panel === 'search' ? 1 : 0)); });
|
|
if (panel === 'search') {
|
|
chatEl.style.display = 'none';
|
|
searchEl.style.display = 'block';
|
|
var si = document.getElementById('searchInput');
|
|
if (si) si.focus();
|
|
} else {
|
|
chatEl.style.display = 'flex';
|
|
searchEl.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function handleSearchClick() {
|
|
doSearch();
|
|
var res = document.getElementById('searchResults');
|
|
var chat = document.getElementById('agentPanel');
|
|
if (res) res.style.display = 'block';
|
|
if (chat) chat.style.display = 'none';
|
|
var navItems = document.querySelectorAll('.nav-item');
|
|
navItems.forEach(function(el, i) { el.classList.toggle('active', i === 1); });
|
|
}
|
|
|
|
/* textarea 自动升高 */
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
var ta = document.getElementById('agentInput');
|
|
if (ta) {
|
|
ta.addEventListener('input', function() {
|
|
ta.style.height = 'auto';
|
|
ta.style.height = Math.min(120, ta.scrollHeight) + 'px';
|
|
});
|
|
}
|
|
/* 搜索框 Enter 键也触发面板切换 */
|
|
var si = document.getElementById('searchInput');
|
|
if (si) {
|
|
si.addEventListener('keydown', function(e) {
|
|
if (e.key === 'Enter') {
|
|
handleSearchClick();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|