feat: 初始提交(仅核心代码,已排除大文件)
This commit is contained in:
@@ -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"></></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
Reference in New Issue
Block a user