feat: 初始提交(仅核心代码,已排除大文件)

This commit is contained in:
yangxiangyuan
2026-07-08 10:29:50 +08:00
commit be7c5842f1
623 changed files with 332897 additions and 0 deletions
+391
View File
@@ -0,0 +1,391 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>工作周报</title>
<link rel="icon" href="/icons/weekly.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/common/common.css" />
<link rel="stylesheet" href="/tools/cloud/theme/tokens.css" />
<link rel="stylesheet" href="/tools/cloud/theme/components.css" />
<link rel="stylesheet" href="/tools/weekly/weekly.css" />
</head>
<body class="theme-cloud">
<button class="mobile-menu-btn" id="mobile-menu-btn">☰ 菜单</button>
<main class="container">
<!-- 登录界面 -->
<section id="auth" class="card">
<h2>登录</h2>
<div class="form" autocomplete="off">
<input id="login-user" placeholder="用户名" autocomplete="off" readonly />
<input id="login-pass" placeholder="密码" type="password" autocomplete="off" readonly />
<button id="btn-login" class="btn">登录</button>
</div>
<div id="auth-status" class="status" style="display:none"></div>
</section>
<!-- 主应用界面 -->
<section id="weekly-app" style="display:none">
<div class="app-layout">
<!-- 侧边栏导航 -->
<aside class="sidebar" id="sidebar">
<div class="sidebar-header">
<h3>周报管理</h3>
<button class="sidebar-toggle" id="sidebar-toggle" title="收起/展开菜单">
<span class="toggle-icon">◀</span>
</button>
</div>
<nav class="sidebar-nav">
<button class="nav-item active" data-view="overview">
<span class="nav-icon">📊</span>
<span class="nav-text">概览</span>
</button>
<button class="nav-item" data-view="reports">
<span class="nav-icon">📝</span>
<span class="nav-text">周报编辑</span>
</button>
<button class="nav-item" data-view="events">
<span class="nav-icon">📋</span>
<span class="nav-text">事件管理</span>
</button>
<button class="nav-item" data-view="search">
<span class="nav-icon">🔍</span>
<span class="nav-text">全文检索</span>
</button>
<button class="nav-item" data-view="settings">
<span class="nav-icon">⚙️</span>
<span class="nav-text">设置与备份</span>
</button>
</nav>
</aside>
<!-- 主内容区域 -->
<div class="main-content">
<!-- 顶部工具栏 -->
<div class="top-bar">
<div class="time-controls">
<select id="week-year" title="选择年份(倒序显示)"></select>
<select id="week-list" title="选择周(北京时区周一至周日)"></select>
</div>
<div class="quick-actions">
<select id="quick-time" title="快速筛选时间维度"><option value="week">周</option><option value="month">月</option><option value="quarter">季度</option></select>
<select id="quick-rel" title="筛选关联关系"><option value="all">全部</option><option value="has_parent">有父事件</option><option value="has_child">有子事件</option></select>
<button id="btn-apply-quick" class="btn" title="应用快速筛选">筛选</button>
</div>
</div>
<!-- 视图容器 -->
<div class="view-container">
<!-- 概览视图 -->
<div id="view-overview" class="view active">
<div class="overview-grid">
<div class="overview-card">
<div class="card-header-sm">
<h3>本周统计</h3>
<button id="btn-refresh-overview" class="btn-icon" title="刷新数据">🔄</button>
</div>
<div class="stats">
<div class="stat-item">
<span class="stat-value">0</span>
<span class="stat-label">总事件</span>
</div>
<div class="stat-item">
<span class="stat-value">0</span>
<span class="stat-label">进行中</span>
</div>
<div class="stat-item">
<span class="stat-value">0</span>
<span class="stat-label">已完成</span>
</div>
</div>
</div>
<div class="overview-card">
<h3>遗留事项</h3>
<div class="backlog-widget">
<div class="stat-item warning">
<span class="stat-value" id="stat-backlog">0</span>
<span class="stat-label">历史未完</span>
</div>
<div class="backlog-desc">来自过往周报的未完成任务</div>
</div>
</div>
<div class="overview-card full-width">
<h3>近12周工作量趋势</h3>
<div id="trend-chart" class="chart-container"></div>
</div>
<div class="overview-card full-width">
<h3>活跃度热力图 (近60天)</h3>
<div id="heatmap-chart" class="heatmap-container"></div>
</div>
<div class="overview-card full-width">
<h3>最近活动</h3>
<div id="recent-activities" class="activities">
<div class="activity-empty">暂无最近活动</div>
</div>
</div>
</div>
</div>
<!-- 周报编辑视图 -->
<div id="view-reports" class="view">
<section class="card">
<div class="card-header">
<h3>周报内容</h3>
<div class="header-actions">
<button id="btn-save-report" class="btn">保存周报</button>
<button id="btn-insert-template" class="btn" title="将默认周报模板插入正文">插入模板</button>
<button id="btn-refresh-report" class="btn" title="强制刷新当前周报内容">刷新周报</button>
</div>
</div>
<input id="report-title" placeholder="标题" />
<div class="toolbar" aria-label="编辑工具">
<div class="toolbar-group">
<button class="toolbar-btn" data-cmd="bold" title="加粗选中文本">
<span class="toolbar-icon">B</span>
<span class="tooltip">加粗</span>
</button>
<button class="toolbar-btn" data-cmd="italic" title="斜体选中文本">
<span class="toolbar-icon">I</span>
<span class="tooltip">斜体</span>
</button>
<button class="toolbar-btn" data-cmd="underline" title="为选中文本加下划线">
<span class="toolbar-icon">U</span>
<span class="tooltip">下划线</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" id="btn-emoji" data-cmd="emoji" title="插入常用Emoji">
<span class="toolbar-icon">😊</span>
<span class="tooltip">Emoji</span>
</button>
<div id="emoji-panel" class="emoji-panel hidden">
<div class="emoji-tabs"></div>
<div id="emoji-list" class="emoji-list"></div>
</div>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" id="btn-font-color" data-cmd="color" title="字体颜色">
<span class="toolbar-icon">🆎</span>
<span class="tooltip">颜色</span>
</button>
<input id="font-color" type="color" title="字体颜色" style="display:none" />
<select id="font-size" title="字体大小">
<option value="12">12</option>
<option value="14" selected>14</option>
<option value="16">16</option>
<option value="18">18</option>
<option value="20">20</option>
<option value="24">24</option>
</select>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="h1" title="设置为一级标题">
<span class="toolbar-icon">H1</span>
<span class="tooltip">一级标题</span>
</button>
<button class="toolbar-btn" data-cmd="h2" title="设置为二级标题">
<span class="toolbar-icon">H2</span>
<span class="tooltip">二级标题</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="ul" title="插入无序列表">
<span class="toolbar-icon">•</span>
<span class="tooltip">无序列表</span>
</button>
<button class="toolbar-btn" data-cmd="ol" title="插入有序列表">
<span class="toolbar-icon">1.</span>
<span class="tooltip">有序列表</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="quote" title="插入引用块">
<span class="toolbar-icon">❝</span>
<span class="tooltip">引用</span>
</button>
<button class="toolbar-btn" data-cmd="code" title="插入代码块">
<span class="toolbar-icon">&lt;/&gt;</span>
<span class="tooltip">代码块</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="link" title="为选中文本添加链接">
<span class="toolbar-icon">🔗</span>
<span class="tooltip">链接</span>
</button>
<div class="file-input-wrapper">
<input id="img-file" type="file" accept="image/*" title="选择本地图片用于插入" />
<button class="toolbar-btn" data-cmd="img" title="插入所选图片">
<span class="toolbar-icon">🖼️</span>
<span class="tooltip">图片</span>
</button>
</div>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="table" title="插入表格">
<span class="toolbar-icon">📊</span>
<span class="tooltip">表格</span>
</button>
<button class="toolbar-btn" data-cmd="template" title="插入周报模板">
<span class="toolbar-icon">📋</span>
<span class="tooltip">模板</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="undo" title="撤销">
<span class="toolbar-icon">↶</span>
<span class="tooltip">撤销</span>
</button>
<button class="toolbar-btn" data-cmd="redo" title="重做">
<span class="toolbar-icon">↷</span>
<span class="tooltip">重做</span>
</button>
<div class="toolbar-separator"></div>
<button class="toolbar-btn" data-cmd="clear" title="清除选中文本的样式">
<span class="toolbar-icon">🧹</span>
<span class="tooltip">清除样式</span>
</button>
</div>
</div>
<div id="report-content" class="editor" contenteditable="true" aria-label="周报正文" title="周报正文,支持富文本编辑"></div>
<div class="form" style="margin-top:12px">
<textarea id="report-summary" rows="3" placeholder="摘要" title="概要总结,可手动录入或自动生成"></textarea>
<button id="btn-auto-summary" class="btn" title="从正文自动生成摘要">AI总结成摘要</button>
</div>
</section>
</div>
<!-- 事件管理视图 -->
<div id="view-events" class="view">
<section class="card">
<h3>事件列表</h3>
<div class="form-vertical" style="margin-bottom: 12px;">
<input id="ev-title" placeholder="事件标题" style="width: 100%; margin-bottom: 8px; padding: 8px; box-sizing: border-box;" />
<div id="ev-content" class="editor" contenteditable="true" placeholder="事件内容" style="min-height: 80px; margin-bottom: 8px; padding: 8px; border: 1px solid var(--border-color); border-radius: 4px;"></div>
<div class="form">
<select id="ev-status">
<option value="doing">▶️进行中</option>
<option value="done">✔️完成</option>
<option value="pause">⏸️暂停</option>
<option value="new">📅本周新增</option>
<option value="close">❌关闭</option>
<option value="not">👋未做</option>
<option value="ok">👌成功</option>
<option value="fail">⛔失败</option>
</select>
<input id="ev-deadline" type="datetime-local" />
<button id="btn-add-event" class="btn" title="新增事件">新增事件</button>
<button id="btn-link-event" class="btn" title="将当前事件关联到历史事件">关联事件</button>
<button id="btn-refresh-events" class="btn" title="强制刷新事件列表">刷新列表</button>
</div>
</div>
<div id="events" class="list"></div>
</section>
</div>
<!-- 其他视图 -->
<div id="view-search" class="view">
<section id="weekly-search" class="card">
<h3>全文检索</h3>
<div class="form">
<input id="search-q" placeholder="关键词" />
<button id="btn-search" class="btn">搜索</button>
</div>
<div id="search-results" class="list"></div>
</section>
</div>
<div id="view-settings" class="view">
<section id="weekly-settings" class="card">
<h3>设置与备份</h3>
<div class="settings-tabs">
<button class="tab-btn active" data-tab="general">常规设置</button>
<button class="tab-btn" data-tab="backup">备份恢复</button>
<button class="tab-btn" data-tab="versions">版本对比</button>
<button class="tab-btn" data-tab="logs">调试日志</button>
<button class="tab-btn" data-tab="ai">AI摘要设置</button>
</div>
<div class="tab-content active" id="tab-general">
<div class="form">
<button id="btn-refresh-reminders" class="btn" title="刷新明日到期与已逾期列表">刷新提醒</button>
<div id="reminders" class="list"></div>
</div>
<div class="form">
<label title="开启后将在截止前一天发送邮件提醒"><input id="email-enabled" type="checkbox" />启用邮件提醒</label>
<button id="btn-save-settings" class="btn" title="保存提醒设置">保存设置</button>
</div>
</div>
<div class="tab-content" id="tab-ai">
<div class="form">
<input id="ai-model" placeholder="模型,如 deepseek-v3 或 qwen-plus" style="width: 280px;" />
<input id="ai-temperature" type="number" step="0.1" min="0" max="2" placeholder="温度,默认 0.3" style="width: 160px;" />
</div>
<div class="form" style="width: 100%;">
<textarea id="ai-system-prompt" rows="10" placeholder="系统提示词" style="width: 100%;"></textarea>
</div>
<div class="form">
<button id="btn-save-ai" class="btn">保存AI设置</button>
<button id="btn-reset-ai" class="btn btn-secondary">重置为默认</button>
</div>
</div>
<div class="tab-content" id="tab-backup">
<div class="form">
<button id="btn-backup" class="btn" title="打包数据库与附件为加密ZIP">生成加密备份</button>
<a id="backup-link" href="#" target="_blank" style="display:none" title="下载最近生成的加密备份">下载备份</a>
</div>
<div class="form">
<input id="restore-file" type="file" title="选择加密备份文件进行恢复" />
<button id="btn-restore" class="btn" title="从所选备份恢复数据">恢复</button>
</div>
</div>
<div class="tab-content" id="tab-versions">
<div class="form">
<button id="btn-load-versions" class="btn" title="载入当前周报的历史版本">加载版本</button>
<select id="ver-a" title="选择版本A"></select>
<select id="ver-b" title="选择版本B"></select>
<button id="btn-diff" class="btn" title="对比两个版本的差异">对比</button>
</div>
<div id="diff-output" class="list"></div>
</div>
<div class="tab-content" id="tab-logs">
<div class="form">
<button id="wd-refresh" class="btn" title="拉取周报模块日志">刷新</button>
<button id="wd-clear" class="btn" title="清空周报模块日志">清空</button>
<button id="wd-copy" class="btn" title="复制日志">复制</button>
</div>
<div id="wd-output" class="editor" style="min-height:200px" title="周报模块日志输出"></div>
</div>
</section>
</div>
</div>
</div>
</div>
</section>
</div>
</section>
</main>
<!-- 模态框系统 -->
<div class="modal-overlay" id="modal-overlay">
<div class="modal" id="modal">
<div class="modal-header" id="modal-header">
<h3 id="modal-title">模态框标题</h3>
<button class="modal-close" id="modal-close">×</button>
</div>
<div class="modal-body" id="modal-body">
<p>模态框内容</p>
</div>
<div class="modal-footer" id="modal-footer">
<button class="btn btn-secondary" id="modal-cancel">取消</button>
<button class="btn" id="modal-confirm">确认</button>
</div>
</div>
</div>
<script src="/common/common.js"></script>
<script src="/tools/weekly/weekly.js"></script>
<script src="/tools/cloud/theme/script.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff