initial commit

This commit is contained in:
xiaomai
2025-10-22 15:57:46 +08:00
commit 00dc568576
7 changed files with 1394 additions and 0 deletions

127
index.html Normal file
View File

@@ -0,0 +1,127 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title id="pageTitle">Kanban</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<header class="app-header">
<div class="left">
<h1 id="appTitle">Kanban</h1>
<span class="file-status" id="fileStatus">未加载文件</span>
</div>
<div class="right toolbar">
<label class="btn">
<input type="file" id="openFile" accept="application/json" hidden />
打开…
</label>
<button id="saveBtn" class="btn" title="导出当前板为 JSON">保存/导出</button>
<label class="btn">
<input type="file" id="importFile" accept="application/json" hidden />
导入/合并…
</label>
<button id="newBoardBtn" class="btn" title="新建看板">新建</button>
<span class="sep"></span>
<input id="actorInput" class="actor" placeholder="你的名字(用于记录历史)" />
<span class="sep"></span>
<input id="searchInput" class="search" placeholder="搜索任务…" />
<select id="categoryFilter" class="category-filter">
<option value="">筛选:全部类别</option>
</select>
</div>
</header>
<main class="app-main">
<aside class="side-panel">
<section>
<h3>类别</h3>
<div id="categoriesList" class="categories"></div>
<button id="addCategoryBtn" class="btn small">添加类别</button>
</section>
<section>
<h3>布局</h3>
<div id="layoutInfo" class="layout-info"></div>
<div style="display:flex; gap:6px; margin:6px 0;">
<button id="addStageBtn" class="btn small">添加阶段</button>
<button id="addColumnBtn" class="btn small">添加列</button>
</div>
</section>
<section>
<h3>历史</h3>
<div id="historyList" class="history"></div>
<button id="clearHistoryBtn" class="btn small">清空历史(写入文件)</button>
</section>
</aside>
<section class="board" id="board"></section>
</main>
<!-- 模态框:编辑任务 -->
<div class="modal hidden" id="taskModal" role="dialog" aria-modal="true">
<div class="modal-content">
<div class="modal-header">
<h2>编辑任务</h2>
<button class="icon-btn" id="taskModalClose" aria-label="关闭"></button>
</div>
<div class="modal-body">
<div class="form-row">
<label>标题</label>
<input id="taskTitleInput" />
</div>
<div class="form-row">
<label>类别</label>
<select id="taskCategorySelect"></select>
</div>
<div class="form-row">
<label>描述</label>
<textarea id="taskDescInput" rows="6"></textarea>
</div>
<div class="form-row">
<label>步骤</label>
<div id="stepsContainer" class="steps"></div>
<button id="addStepBtn" class="btn small">添加步骤</button>
</div>
</div>
<div class="modal-footer">
<button id="deleteTaskBtn" class="btn danger">删除</button>
<div class="spacer"></div>
<button id="taskSaveBtn" class="btn primary">保存</button>
</div>
</div>
</div>
<!-- 模态框:导入/合并 -->
<div class="modal hidden" id="mergeModal" role="dialog" aria-modal="true">
<div class="modal-content large">
<div class="modal-header">
<h2>导入/合并 预览</h2>
<button class="icon-btn" id="mergeModalClose" aria-label="关闭"></button>
</div>
<div class="modal-body">
<div class="form-row">
<label>策略</label>
<select id="mergePolicy">
<option value="prefer-import">冲突优先:导入文件</option>
<option value="prefer-current">冲突优先:当前看板</option>
</select>
<label class="checkbox">
<input type="checkbox" id="mergeRemoveMissing" /> 同步删除在导入文件中不存在的任务/阶段
</label>
</div>
<div class="diff-summary" id="diffSummary"></div>
<details>
<summary>详细变更</summary>
<div class="diff-details" id="diffDetails"></div>
</details>
</div>
<div class="modal-footer">
<button id="applyMergeBtn" class="btn primary">应用合并</button>
</div>
</div>
</div>
<script src="app.js"></script>
</body>
</html>