Files
xsk-education-management/app/app/static/admin.html
T
2026-06-18 04:06:06 +08:00

459 lines
20 KiB
HTML

<!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="stylesheet" href="/static/styles.css?v=20260618-log-expand" />
</head>
<body>
<header class="topbar">
<div>
<h1>管理后台</h1>
<p id="adminHealthText">正在读取管理状态</p>
</div>
<div class="top-actions">
<a class="nav-button" href="/">课程记录</a>
<a class="nav-button" href="/admin/logout">退出</a>
<button id="refreshBtn" class="icon-button" title="刷新" type="button" aria-label="刷新"></button>
</div>
</header>
<main class="layout account-layout admin-layout">
<nav class="admin-tabs" aria-label="管理后台功能">
<button class="admin-tab is-active" data-admin-tab="accounts" type="button">课时账户</button>
<button class="admin-tab" data-admin-tab="teachers" type="button">老师档案</button>
<button class="admin-tab" data-admin-tab="reviews" type="button">纠错审核</button>
<button class="admin-tab" data-admin-tab="summaries" type="button">课程小结审核</button>
<button class="admin-tab" data-admin-tab="summarySearch" type="button">课程小结查询</button>
<button class="admin-tab" data-admin-tab="logs" type="button">操作记录</button>
<button class="admin-tab" data-admin-tab="register" type="button">登记</button>
</nav>
<section id="accountsPanel" class="panel admin-panel">
<div class="section-head">
<h2>课时账户</h2>
<div class="quick-actions">
<select id="accountStatus" aria-label="账户状态筛选">
<option value="">全部状态</option>
<option value="欠费">欠费</option>
<option value="预警">预警</option>
<option value="正常">正常</option>
<option value="结课">结课</option>
<option value="退费">退费</option>
</select>
<button id="newAccountBtn" class="chip" type="button">新增账户</button>
</div>
</div>
<form id="accountForm" class="search-row account-search-row">
<input id="accountQuery" autocomplete="off" placeholder="学生姓名或学生ID" />
<button type="submit">查询</button>
</form>
<div id="accountMeta" class="summary-grid"></div>
<div id="accountEditor" class="admin-editor" hidden>
<div class="section-head compact-head">
<h2 id="accountEditorTitle">新增账户</h2>
<button id="cancelAccountEditBtn" class="secondary-button" type="button">取消</button>
</div>
<form id="accountEditForm" class="admin-form">
<div class="form-grid">
<label>
学生ID
<input id="editStudentId" autocomplete="off" placeholder="新增时自动生成" />
</label>
<label>
学生姓名
<input id="editStudent" autocomplete="off" required />
</label>
<label>
剩余课时
<input id="editRemaining" inputmode="decimal" required />
</label>
<label>
账户状态
<select id="editStatus">
<option value="正常">正常</option>
<option value="预警">预警</option>
<option value="欠费">欠费</option>
<option value="结课">结课</option>
<option value="退费">退费</option>
</select>
</label>
<label class="span-2">
缴费记录
<textarea id="editPayments" rows="4" placeholder="每行一条:2026-06-01:53"></textarea>
</label>
<label class="span-2">
备注
<textarea id="editNote" rows="3"></textarea>
</label>
</div>
<p id="accountEditError" class="correction-error" hidden></p>
<div class="modal-actions">
<button type="submit">保存账户</button>
</div>
</form>
</div>
<div class="table-wrap account-table-wrap">
<table>
<thead>
<tr>
<th>学生</th>
<th>状态</th>
<th class="num">剩余课时</th>
<th>缴费记录</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody id="accountRows"></tbody>
</table>
</div>
</section>
<section id="teachersPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>老师档案</h2>
<div class="quick-actions">
<select id="teacherStatus" aria-label="老师状态筛选">
<option value="">全部状态</option>
<option value="在岗">在岗</option>
<option value="离职">离职</option>
</select>
<button id="newTeacherBtn" class="chip" type="button">新增老师</button>
</div>
</div>
<form id="teacherForm" class="search-row account-search-row">
<input id="teacherQuery" autocomplete="off" placeholder="教师姓名、别名、教师ID或学科" />
<button type="submit">查询</button>
</form>
<div id="teacherMeta" class="summary-grid"></div>
<div id="teacherEditor" class="admin-editor" hidden>
<div class="section-head compact-head">
<h2 id="teacherEditorTitle">新增老师</h2>
<button id="cancelTeacherEditBtn" class="secondary-button" type="button">取消</button>
</div>
<form id="teacherEditForm" class="admin-form">
<div class="form-grid">
<label>
教师ID
<input id="editTeacherId" autocomplete="off" placeholder="新增时自动生成" />
</label>
<label>
教师姓名
<input id="editTeacherName" autocomplete="off" required />
</label>
<label>
别名
<input id="editTeacherAlias" autocomplete="off" placeholder="对外展示名称;空则显示教师姓名" />
</label>
<label>
状态
<select id="editTeacherStatus">
<option value="在岗">在岗</option>
<option value="离职">离职</option>
</select>
</label>
<label class="span-2">
任教学科
<input id="editTeacherSubjects" autocomplete="off" placeholder="数学、物理、生物" required />
</label>
<label class="span-2">
备注
<textarea id="editTeacherNote" rows="3"></textarea>
</label>
</div>
<p id="teacherEditError" class="correction-error" hidden></p>
<div class="modal-actions">
<button type="submit">保存老师档案</button>
</div>
</form>
</div>
<div class="table-wrap account-table-wrap">
<table>
<thead>
<tr>
<th>教师</th>
<th>别名</th>
<th>任教学科</th>
<th>状态</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody id="teacherRows"></tbody>
</table>
</div>
</section>
<section id="reviewsPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>纠错审核</h2>
<select id="reviewStatus" aria-label="审核状态筛选">
<option value="pending">待审核</option>
<option value="conflict">冲突</option>
<option value="approved">已批准</option>
<option value="rejected">已驳回</option>
<option value="">全部状态</option>
</select>
</div>
<div id="reviewMeta" class="summary-grid"></div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>编号</th>
<th>状态</th>
<th>类型</th>
<th>原记录</th>
<th>处理内容</th>
<th>提交时间</th>
<th>操作</th>
</tr>
</thead>
<tbody id="reviewRows"></tbody>
</table>
</div>
</section>
<section id="summariesPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>课程小结审核</h2>
<div class="quick-actions">
<select id="summaryReviewStatus" aria-label="课程小结审核状态筛选">
<option value="pending">待审核</option>
<option value="conflict">冲突</option>
<option value="approved">已批准</option>
<option value="rejected">已驳回</option>
<option value="">全部状态</option>
</select>
<button id="duplicateSummaryScanBtn" class="chip" type="button">扫描重复小结</button>
</div>
</div>
<div id="summaryReviewMeta" class="summary-grid"></div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>编号</th>
<th>状态</th>
<th>课程信息</th>
<th>候选记录</th>
<th>小结原文</th>
<th>原因</th>
<th>操作</th>
</tr>
</thead>
<tbody id="summaryReviewRows"></tbody>
</table>
</div>
</section>
<div id="summaryReviewDrawerBackdrop" class="drawer-backdrop" hidden>
<aside class="summary-review-drawer" role="dialog" aria-modal="true" aria-labelledby="summaryReviewDrawerTitle">
<div class="drawer-head">
<div>
<h2 id="summaryReviewDrawerTitle">课程小结详情</h2>
<div id="summaryReviewDrawerMeta" class="drawer-meta"></div>
</div>
<button id="summaryReviewDrawerClose" class="modal-close" type="button">关闭</button>
</div>
<div class="drawer-content">
<div class="drawer-section">
<div class="drawer-label">状态</div>
<div id="summaryReviewDrawerStatus"></div>
</div>
<div class="drawer-section">
<div class="drawer-label">课程信息</div>
<div id="summaryReviewDrawerCourse" class="drawer-text"></div>
</div>
<div id="summaryReviewEditSection" class="drawer-section" hidden>
<div class="drawer-label">修正信息</div>
<div class="form-grid compact-grid">
<label>
学生
<input id="summaryReviewEditStudent" autocomplete="off" />
</label>
<label>
日期
<input id="summaryReviewEditDate" type="date" />
</label>
<label>
时间
<input id="summaryReviewEditTime" autocomplete="off" placeholder="08:00-10:00" />
</label>
<label>
老师
<input id="summaryReviewEditTeacher" autocomplete="off" />
</label>
<label>
科目
<input id="summaryReviewEditSubject" autocomplete="off" />
</label>
</div>
</div>
<div class="drawer-section">
<div class="drawer-label">建议登记行</div>
<div id="summaryReviewDrawerLine"></div>
</div>
<div class="drawer-section">
<div class="drawer-label">审核原因</div>
<div id="summaryReviewDrawerReasons" class="drawer-text"></div>
</div>
<div class="drawer-section">
<div class="drawer-label">小结原文</div>
<div id="summaryReviewDrawerBody" class="drawer-body"></div>
</div>
<div class="drawer-section">
<div class="drawer-label">来源</div>
<div id="summaryReviewDrawerSource" class="drawer-text"></div>
</div>
</div>
<div class="drawer-actions">
<button id="summaryReviewDrawerSave" class="secondary-button" type="button">保存修正</button>
<button id="summaryReviewDrawerLink" class="secondary-button" type="button">关联已有记录</button>
<button id="summaryReviewDrawerReject" class="secondary-button" type="button">驳回</button>
<button id="summaryReviewDrawerApprove" type="button">批准</button>
</div>
</aside>
</div>
<section id="summarySearchPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>课程小结查询</h2>
</div>
<form id="summarySearchForm" class="search-row summary-search-row">
<input id="summarySearchQuery" autocomplete="off" placeholder="关键词:课堂内容、作业、问题等" />
<input id="summarySearchStudent" autocomplete="off" placeholder="学生" />
<input id="summarySearchTeacher" autocomplete="off" placeholder="老师" />
<input id="summarySearchSubject" autocomplete="off" placeholder="科目" />
<input id="summarySearchDateFrom" type="date" aria-label="开始日期" />
<input id="summarySearchDateTo" type="date" aria-label="结束日期" />
<select id="summarySearchMissingTime" aria-label="时间状态筛选">
<option value="">全部时间</option>
<option value="1">缺少时间</option>
</select>
<button type="submit">查询</button>
</form>
<div id="summarySearchMeta" class="summary-grid"></div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>日期</th>
<th>时间</th>
<th>学生</th>
<th>老师/科目</th>
<th>标题</th>
<th>小结正文</th>
<th>操作</th>
</tr>
</thead>
<tbody id="summarySearchRows"></tbody>
</table>
</div>
</section>
<section id="logsPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>操作记录</h2>
<div class="quick-actions">
<select id="logOperation" aria-label="操作类型筛选">
<option value="">全部操作</option>
<option value="登记上课记录">登记上课记录</option>
<option value="登记缴费记录">登记缴费记录</option>
<option value="新增课时账户">新增课时账户</option>
<option value="修改课时账户">修改课时账户</option>
<option value="新增老师档案">新增老师档案</option>
<option value="修改老师档案">修改老师档案</option>
<option value="课程小结接收">课程小结接收</option>
<option value="课程小结登记">课程小结登记</option>
<option value="课程小结审核修正">课程小结审核修正</option>
<option value="课程小结关联已有记录">课程小结关联已有记录</option>
<option value="重复小结扫描">重复小结扫描</option>
<option value="重复小结删除">重复小结删除</option>
<option value="审核批准">审核批准</option>
<option value="审核驳回">审核驳回</option>
<option value="课程小结补齐时间">课程小结补齐时间</option>
<option value="课程小结删除">课程小结删除</option>
<option value="撤回操作">撤回操作</option>
</select>
<select id="logStatus" aria-label="操作结果筛选">
<option value="">全部结果</option>
<option value="完成">完成</option>
<option value="自动入账">自动入账</option>
<option value="待审核">待审核</option>
<option value="重复">重复</option>
<option value="已驳回">失败/驳回</option>
<option value="已批准">已批准</option>
<option value="已更新">已更新</option>
<option value="已删除">已删除</option>
<option value="已撤回">已撤回</option>
</select>
</div>
</div>
<form id="logFilterForm" class="search-row log-search-row">
<input id="logStudent" autocomplete="off" placeholder="按学生筛选" />
<button type="submit">筛选</button>
</form>
<div id="logMeta" class="summary-grid"></div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>时间</th>
<th>操作</th>
<th>结果</th>
<th>学生</th>
<th>批次/任务</th>
<th>操作</th>
</tr>
</thead>
<tbody id="logRows"></tbody>
</table>
</div>
</section>
<section id="registerPanel" class="panel admin-panel" hidden>
<div class="section-head">
<h2>登记</h2>
</div>
<div class="register-grid">
<form id="classRegisterForm" class="admin-form">
<h3>上课记录登记</h3>
<textarea id="classRegisterLines" rows="10" placeholder="每行一条上课记录"></textarea>
<div id="classRegisterPreview" class="register-preview" hidden></div>
<p id="classRegisterStatus" class="inline-account-loading"></p>
<div class="modal-actions">
<button type="submit">生成预览</button>
<button id="classRegisterConfirm" class="secondary-button" type="button" hidden>确认写入</button>
</div>
</form>
<form id="paymentRegisterForm" class="admin-form">
<h3>缴费登记</h3>
<textarea id="paymentRegisterLines" rows="10" placeholder="每行一条:学生-2026-06-01:53"></textarea>
<div id="paymentRegisterPreview" class="register-preview" hidden></div>
<p id="paymentRegisterStatus" class="inline-account-loading"></p>
<div class="modal-actions">
<button type="submit">生成预览</button>
<button id="paymentRegisterConfirm" class="secondary-button" type="button" hidden>确认写入</button>
</div>
</form>
<form id="summaryRegisterForm" class="admin-form">
<h3>课程小结登记</h3>
<textarea id="summaryRegisterText" rows="12" placeholder="粘贴一条或多条课程小结原文,学生/日期/时间/老师/科目由系统自动提取"></textarea>
<div id="summaryRegisterPreview" class="register-preview" hidden></div>
<p id="summaryRegisterStatus" class="inline-account-loading"></p>
<div class="modal-actions">
<button type="submit">生成预览</button>
<button id="summaryRegisterConfirm" class="secondary-button" type="button" hidden>确认写入</button>
</div>
</form>
</div>
</section>
</main>
<script src="/static/admin.js?v=20260618-log-expand"></script>
</body>
</html>