a594f54cd2
- 全站品牌替换:DAEL / Design AI & Ecology Lab → TeaLab / SI · 空间智能与自主设计 * 11 个 HTML 页面 title、navbar、页脚、版权统一更新 * Logo 字母 D → T,配色与版式不变 * js/common.js 注释 + localStorage 计数键更新 * backend/app.py /api/health 文案更新 - website.html 内容重写 * Hero 改为"空间智能 & 自主设计",加序言两行 + 英文 mission * 使命段改为研究主线(感知→理解→推理闭环) * 研究方向三卡:自主设计 / 深邃之形 / 人本智能(含工具栈) - research.html 拆分 * 原 research.html(研究管理后台)重命名为 research-manage.html * 新建公开 research.html:研究定位 + 完整段落 + 概念对比表 + 研究维度表 - 基础设施调整 * 后端端口 5000 → 5001(避开本机 zotero-proxy 占用) * start_backend.sh 加可执行位 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
240 lines
12 KiB
HTML
240 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN" class="scroll-smooth">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>内容管理 | TeaLab · 空间智能与自主设计</title>
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="css/common.css">
|
|
</head>
|
|
<body class="antialiased bg-gray-50">
|
|
|
|
<!-- Navigation -->
|
|
<nav class="fixed w-full z-50 bg-white border-b border-gray-200 shadow-sm" id="navbar">
|
|
<div class="max-w-7xl mx-auto px-6 lg:px-12 h-16 flex items-center justify-between">
|
|
<a href="website.html" class="text-xl tracking-tight font-bold flex items-center gap-2">
|
|
<div class="w-8 h-8 bg-black text-white flex items-center justify-center font-serif italic">T</div>
|
|
<span>TeaLab<span class="text-gray-400 font-light mx-2">/</span><span class="text-sm font-normal text-gray-600">Admin Panel</span></span>
|
|
</a>
|
|
<div class="flex items-center gap-4">
|
|
<span id="admin-user" class="text-sm text-gray-600"></span>
|
|
<a href="website.html" class="text-sm text-gray-600 hover:text-black">返回网站</a>
|
|
<button id="logout-btn" class="text-xs border border-gray-300 px-4 py-2 rounded hover:bg-black hover:text-white transition-colors">退出</button>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Admin Panel -->
|
|
<div class="pt-20 pb-12">
|
|
<div class="max-w-7xl mx-auto px-6 lg:px-12">
|
|
<h1 class="text-3xl font-bold mb-8">内容管理系统</h1>
|
|
|
|
<!-- Tabs -->
|
|
<div class="flex space-x-4 border-b border-gray-200 mb-8">
|
|
<button class="admin-tab active pb-4 px-4 text-sm font-medium border-b-2 border-black" data-tab="articles">文章管理</button>
|
|
<button class="admin-tab pb-4 px-4 text-sm font-medium text-gray-500 hover:text-black" data-tab="resources">资源管理</button>
|
|
<button class="admin-tab pb-4 px-4 text-sm font-medium text-gray-500 hover:text-black" data-tab="team">团队管理</button>
|
|
</div>
|
|
|
|
<!-- Articles Tab -->
|
|
<div id="tab-articles" class="admin-tab-content">
|
|
<div class="flex justify-between items-center mb-6">
|
|
<h2 class="text-xl font-bold">文章列表</h2>
|
|
<button onclick="showArticleForm()" class="bg-black text-white px-4 py-2 rounded text-sm hover:bg-gray-800">+ 新建文章</button>
|
|
</div>
|
|
<div id="articles-list" class="space-y-4">
|
|
<!-- Articles will be loaded here -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Resources Tab -->
|
|
<div id="tab-resources" class="admin-tab-content hidden">
|
|
<div class="flex justify-between items-center mb-6">
|
|
<h2 class="text-xl font-bold">资源列表</h2>
|
|
<button onclick="showResourceForm()" class="bg-black text-white px-4 py-2 rounded text-sm hover:bg-gray-800">+ 上传资源</button>
|
|
</div>
|
|
<div id="resources-list" class="space-y-4">
|
|
<!-- Resources will be loaded here -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Team Tab -->
|
|
<div id="tab-team" class="admin-tab-content hidden">
|
|
<div class="flex justify-between items-center mb-6">
|
|
<h2 class="text-xl font-bold">团队成员</h2>
|
|
<button onclick="showTeamForm()" class="bg-black text-white px-4 py-2 rounded text-sm hover:bg-gray-800">+ 添加成员</button>
|
|
</div>
|
|
<div id="team-list" class="space-y-4">
|
|
<!-- Team members will be loaded here -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Article Form Modal -->
|
|
<div id="article-modal" class="hidden fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center">
|
|
<div class="bg-white rounded-lg p-8 max-w-2xl w-full mx-4 max-h-[90vh] overflow-y-auto">
|
|
<h3 class="text-2xl font-bold mb-6" id="article-modal-title">新建文章</h3>
|
|
<form id="article-form" onsubmit="saveArticle(event)">
|
|
<input type="hidden" id="article-id">
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">标题</label>
|
|
<input type="text" id="article-title" required class="form-input w-full">
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">摘要</label>
|
|
<textarea id="article-summary" class="form-input w-full" rows="2"></textarea>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">内容</label>
|
|
<textarea id="article-content" required class="form-input w-full" rows="10"></textarea>
|
|
</div>
|
|
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">分类</label>
|
|
<select id="article-category" class="form-input w-full">
|
|
<option value="news">新闻</option>
|
|
<option value="publication">出版物</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">状态</label>
|
|
<select id="article-published" class="form-input w-full">
|
|
<option value="true">已发布</option>
|
|
<option value="false">草稿</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="flex items-center">
|
|
<input type="checkbox" id="article-protected" class="mr-2">
|
|
<span class="text-sm">受保护内容(需要登录查看)</span>
|
|
</label>
|
|
</div>
|
|
<div class="flex gap-4">
|
|
<button type="submit" class="bg-black text-white px-6 py-2 rounded hover:bg-gray-800">保存</button>
|
|
<button type="button" onclick="closeArticleForm()" class="bg-gray-200 text-gray-800 px-6 py-2 rounded hover:bg-gray-300">取消</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Resource Form Modal -->
|
|
<div id="resource-modal" class="hidden fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center">
|
|
<div class="bg-white rounded-lg p-8 max-w-2xl w-full mx-4">
|
|
<h3 class="text-2xl font-bold mb-6">上传资源</h3>
|
|
<form id="resource-form" onsubmit="saveResource(event)">
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">文件</label>
|
|
<input type="file" id="resource-file" required class="form-input w-full">
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">名称</label>
|
|
<input type="text" id="resource-name" required class="form-input w-full">
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">描述</label>
|
|
<textarea id="resource-description" class="form-input w-full" rows="3"></textarea>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">分类</label>
|
|
<select id="resource-category" class="form-input w-full">
|
|
<option value="software">软件</option>
|
|
<option value="dataset">数据集</option>
|
|
<option value="document">文档</option>
|
|
</select>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="flex items-center">
|
|
<input type="checkbox" id="resource-protected" class="mr-2">
|
|
<span class="text-sm">受保护资源(需要登录下载)</span>
|
|
</label>
|
|
</div>
|
|
<div class="flex gap-4">
|
|
<button type="submit" class="bg-black text-white px-6 py-2 rounded hover:bg-gray-800">上传</button>
|
|
<button type="button" onclick="closeResourceForm()" class="bg-gray-200 text-gray-800 px-6 py-2 rounded hover:bg-gray-300">取消</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Team Form Modal -->
|
|
<div id="team-modal" class="hidden fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center">
|
|
<div class="bg-white rounded-lg p-8 max-w-2xl w-full mx-4 max-h-[90vh] overflow-y-auto">
|
|
<h3 class="text-2xl font-bold mb-6">添加团队成员</h3>
|
|
<form id="team-form" onsubmit="saveTeamMember(event)">
|
|
<input type="hidden" id="team-id">
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">姓名</label>
|
|
<input type="text" id="team-name" required class="form-input w-full">
|
|
</div>
|
|
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">职位(中文)</label>
|
|
<input type="text" id="team-title" class="form-input w-full">
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">职位(英文)</label>
|
|
<input type="text" id="team-title-en" class="form-input w-full">
|
|
</div>
|
|
</div>
|
|
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">简介(中文)</label>
|
|
<textarea id="team-bio" class="form-input w-full" rows="3"></textarea>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">简介(英文)</label>
|
|
<textarea id="team-bio-en" class="form-input w-full" rows="3"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">角色</label>
|
|
<select id="team-role" class="form-input w-full">
|
|
<option value="professor">教授</option>
|
|
<option value="faculty">教师</option>
|
|
<option value="student">在读学生</option>
|
|
<option value="alumni">毕业学生</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm font-medium mb-2">排序</label>
|
|
<input type="number" id="team-order" value="0" class="form-input w-full">
|
|
</div>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">邮箱</label>
|
|
<input type="email" id="team-email" class="form-input w-full">
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="block text-sm font-medium mb-2">网站</label>
|
|
<input type="url" id="team-website" class="form-input w-full">
|
|
</div>
|
|
<div class="flex gap-4">
|
|
<button type="submit" class="bg-black text-white px-6 py-2 rounded hover:bg-gray-800">保存</button>
|
|
<button type="button" onclick="closeTeamForm()" class="bg-gray-200 text-gray-800 px-6 py-2 rounded hover:bg-gray-300">取消</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://unpkg.com/lucide@latest"></script>
|
|
<script src="js/api.js"></script>
|
|
<script src="js/common.js"></script>
|
|
<script src="js/auth.js"></script>
|
|
<script src="js/admin.js"></script>
|
|
</body>
|
|
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|