init: TEALab 2025 实验室网站项目

从百度网盘 /apps/bypy/dofile/ 下载的完整项目结构,包含:
- dofile/: Flask 后端(端口 5000)+ 静态前端(端口 6002)
- officefile/: 项目相关文档
- .gitignore: Python venv / 日志 / 缓存

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 01:07:19 +08:00
commit a3eb5c7b2d
39 changed files with 7110 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
<!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>组会管理 | Design AI & Ecology Lab</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">D</div>
<span>DAEL<span class="text-gray-400 font-light mx-2">/</span><span class="text-sm font-normal text-gray-600">组会管理</span></span>
</a>
<div class="flex items-center gap-4">
<a href="website.html" class="text-sm text-gray-600 hover:text-black">返回首页</a>
<a href="research.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>
<!-- Main Content -->
<div class="pt-24 pb-12">
<div class="max-w-7xl mx-auto px-6 lg:px-12">
<div class="flex justify-between items-center mb-8">
<div>
<h1 class="text-3xl font-bold mb-2">组会管理</h1>
<p class="text-gray-600">创建和管理实验室组会,报名参会,记录会议内容</p>
</div>
<button onclick="showMeetingForm()" class="bg-black text-white px-6 py-3 rounded hover:bg-gray-800">
+ 创建组会
</button>
</div>
<!-- Filter Tabs -->
<div class="flex space-x-4 border-b border-gray-200 mb-6">
<button class="filter-tab active pb-4 px-4 text-sm font-medium border-b-2 border-black" data-filter="all">全部</button>
<button class="filter-tab pb-4 px-4 text-sm font-medium text-gray-500 hover:text-black" data-filter="planned">计划中</button>
<button class="filter-tab pb-4 px-4 text-sm font-medium text-gray-500 hover:text-black" data-filter="ongoing">进行中</button>
<button class="filter-tab pb-4 px-4 text-sm font-medium text-gray-500 hover:text-black" data-filter="completed">已结束</button>
</div>
<!-- Meetings List -->
<div id="meetings-list" class="space-y-4">
<!-- Meetings will be loaded here -->
</div>
</div>
</div>
<!-- Meeting Form Modal -->
<div id="meeting-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="meeting-modal-title">创建组会</h3>
<form id="meeting-form" onsubmit="saveMeeting(event)">
<input type="hidden" id="meeting-id">
<div class="mb-4">
<label class="block text-sm font-medium mb-2">标题 *</label>
<input type="text" id="meeting-title" required class="form-input w-full">
</div>
<div class="mb-4">
<label class="block text-sm font-medium mb-2">描述</label>
<textarea id="meeting-description" class="form-input w-full" rows="3"></textarea>
</div>
<div class="grid grid-cols-2 gap-4 mb-4">
<div>
<label class="block text-sm font-medium mb-2">日期 *</label>
<input type="date" id="meeting-date" required class="form-input w-full">
</div>
<div>
<label class="block text-sm font-medium mb-2">时间 *</label>
<input type="time" id="meeting-time" required class="form-input w-full">
</div>
</div>
<div class="mb-4">
<label class="block text-sm font-medium mb-2">地点</label>
<input type="text" id="meeting-location" 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>
<select id="meeting-type" class="form-input w-full">
<option value="weekly">周会</option>
<option value="monthly">月会</option>
<option value="special">专题会</option>
</select>
</div>
<div>
<label class="block text-sm font-medium mb-2">状态</label>
<select id="meeting-status" class="form-input w-full">
<option value="planned">计划中</option>
<option value="ongoing">进行中</option>
<option value="completed">已结束</option>
<option value="cancelled">已取消</option>
</select>
</div>
</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="closeMeetingForm()" class="bg-gray-200 text-gray-800 px-6 py-2 rounded hover:bg-gray-300">取消</button>
</div>
</form>
</div>
</div>
<!-- Meeting Detail Modal -->
<div id="meeting-detail-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-3xl w-full mx-4 max-h-[90vh] overflow-y-auto">
<div id="meeting-detail-content">
<!-- Meeting details will be loaded here -->
</div>
</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/meetings.js"></script>
</body>
</html>