- 完成第13周所有班级课评(AICODE03/CSP03/Kitten04共32人) - 修正Kitten04周五1900班文件名:Kitten-13 → Kitten04-13 - 更新周汇总:2026年第13周课评汇总.md - 更新学生画像:多个班级学生profile.md - 添加班级总结:9个班级的班级反馈
4598 lines
234 KiB
HTML
4598 lines
234 KiB
HTML
<!DOCTYPE html>
|
||
<html data-page="course_detail" data-layout="basic" class="layout--basic page--course_detail theme--light nojs" lang="zh" data-app="Hydro">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||
<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
|
||
<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
|
||
<link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
|
||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
|
||
<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
|
||
<link rel="canonical" href="oj.qonnwolf.com/course/6975984d71e15346c9e8fdc2"> <meta name="theme-color" content="#56758f">
|
||
<title>课程详情 - 穹狼科创</title>
|
||
<style>
|
||
body {
|
||
--font-family: "Open Sans", "Open Sans", "Seravek", "Segoe UI", "Verdana", "PingFang SC", "Hiragino Sans GB", "Lantinghei SC", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans";
|
||
--code-font-family: "Source Code Pro", "monaco", "Source Code Pro", "Consolas", "Lucida Console", "monospace";
|
||
--font-ligatures: none !important;
|
||
}
|
||
|
||
.section{border-radius:10px}
|
||
|
||
#panel { display: flex; flex-direction: column; }
|
||
</style>
|
||
<link rel="stylesheet" media="all" href="/theme-4.58.0-beta.17.css">
|
||
<script>
|
||
var _htmlNode = document.documentElement;
|
||
_htmlNode.className = _htmlNode.className.replace(' nojs', ' hasjs');
|
||
var UiContext = '{"cdn_prefix":"/","url_prefix":"/","ws_prefix":"/","hydroacFeatures":[],"blspHost":"wss://ws.hydrooj.com","constantVersion":"eb180064","domainId":"system","domain":{"_id":"system","lower":"system","owner":1,"name":"\u7A79\u72FC\u79D1\u521B","bulletin":"# \u2B50\u6B22\u8FCE\u4F7F\u7528\u7A79\u72FC\u79D1\u521B\u5728\u7EBF\u5B66\u4E60\u8BC4\u6D4B\u7CFB\u7EDF\u2B50\\r\\n\\r\\n## \uD83C\uDF89\uFE0F \u8BAD\u7EC3\u9898\u5355\\r\\n\\r\\n## <a>GESP\uFF1A</a><a href=\\"/training/6870bbec7e50189ceb63a998\\" target=\\"_blank\\">\u4E00\u7EA7</a> | <a href=\\"/training/6870c2367e50189ceb63b4a5\\" target=\\"_blank\\">\u4E8C\u7EA7</a> | <a href=\\"/training/6870c8497e50189ceb63bd05\\" target=\\"_blank\\">\u4E09\u7EA7</a> | <a href=\\"/training/6870c9187e50189ceb63be4c\\" target=\\"_blank\\">\u56DB\u7EA7</a> | <a href=\\"/training/6870c9677e50189ceb63bea0\\" target=\\"_blank\\">\u4E94\u7EA7</a> | <a href=\\"/training/6870ca337e50189ceb63bf59\\" target=\\"_blank\\">\u516D\u7EA7</a> | <a href=\\"/training/6870caa37e50189ceb63bfa8\\" target=\\"_blank\\">\u4E03\u7EA7</a> | <a href=\\"/training/6870ccc37e50189ceb63c061\\" target=\\"_blank\\">\u516B\u7EA7</a>\\r\\n## <a>CSP-JS\uFF1A</a><a href=\\"/d/CSP_J1/\\" target=\\"_blank\\">\u521D\u8D5B</a> | <a href=\\"/training/686f293b7e50189ceb6312a4\\" target=\\"_blank\\">\u590D\u8D5B</a> \\r\\n\\r\\n---\\r\\n## \uD83C\uDF89\uFE0F \u62D3\u5C55\u8BAD\u7EC3\\r\\n\\r\\n### A\uFF1A<a href=\\"/training/686f1e417e50189ceb630e98\\" target=\\"_blank\\">\u987A\u5E8F\u7ED3\u6784</a> | <a href=\\"/training/686f1e937e50189ceb630ee6\\" target=\\"_blank\\">\u5206\u652F\u7ED3\u6784</a> | <a href=\\"/training/686f1f297e50189ceb630f24\\" target=\\"_blank\\">\u5FAA\u73AF\u7ED3\u6784</a> | <a href=\\"/training/686f1f587e50189ceb630f62\\" target=\\"_blank\\">\u7A77\u4E3E\u7B97\u6CD5</a> \\r\\n\\r\\n### B\uFF1A<a href=\\"/training/686f20057e50189ceb630fb6\\" target=\\"_blank\\">\u4E00\u7EF4\u6570\u7EC4</a> | <a href=\\"/training/686f20a77e50189ceb630fe8\\" target=\\"_blank\\">\u5B57\u7B26\u4E32</a> | <a href=\\"/training/686f20f07e50189ceb630ff2\\" target=\\"_blank\\">\u4E8C\u7EF4\u6570\u7EC4</a> | <a href=\\"/training/686f21347e50189ceb630ffb\\" target=\\"_blank\\">\u51FD\u6570</a> | <a href=\\"/training/686f21597e50189ceb631020\\" target=\\"_blank\\">\u7ED3\u6784\u4F53</a> | <a href=\\"/training/68fb217e65d6c0e8cf403f39\\" target=\\"_blank\\">\u6570\u636E\u6392\u5E8F</a>\\r\\n\\r\\n\\r\\n\\r\\n### C\uFF1A<a href=\\"/training/686f23487e50189ceb631156\\" target=\\"_blank\\">\u9012\u63A8\u4E0E\u9012\u5F52</a> | <a href=\\"/training/686f23687e50189ceb6311a0\\" target=\\"_blank\\">\u8D2A\u5FC3</a> | <a href=\\"/training/686f23927e50189ceb6311a7\\" target=\\"_blank\\">\u8FDB\u5236\u8F6C\u6362</a> | <a href=\\"/training/686f23b87e50189ceb6311c6\\" target=\\"_blank\\">\u9AD8\u7CBE\u5EA6</a> | <a href=\\"/training/686f25767e50189ceb63121e\\" target=\\"_blank\\">\u4E8C\u5206</a> | <a href=\\"/training/6915a5c367ceffb06f6af7fa\\" target=\\"_blank\\">\u5206\u6CBB\u7B97\u6CD5</a>\\r\\n\\r\\n### D\uFF1A<a href=\\"/training/686f24377e50189ceb6311f3\\" target=\\"_blank\\">\u6DF1\u5EA6\u4F18\u5148\u641C\u7D22</a> | <a href=\\"/training/686f25527e50189ceb631219\\" target=\\"_blank\\">\u5E7F\u5EA6\u4F18\u5148\u641C\u7D22</a> | <a href=\\"/training/68883b387e50189ceb68b539\\" target=\\"_blank\\">\u524D\u7F00\u548C\u5DEE\u5206</a> | <a href=\\"/training/686f26177e50189ceb631228\\" target=\\"_blank\\">\u52A8\u6001\u89C4\u5212</a> | <a href=\\"/training/686f26787e50189ceb63122e\\" target=\\"_blank\\">\u80CC\u5305</a> | <a href=\\"/training/68fb20fd65d6c0e8cf403f0c\\" target=\\"_blank\\">\u5176\u4ED6\u7B97\u6CD5</a>\\r\\n\\r\\n### E\uFF1A<a href=\\"/training/686f26b67e50189ceb631234\\" target=\\"_blank\\">\u56FE\u8BBA</a> | <a href=\\"/training/686f26e17e50189ceb63123c\\" target=\\"_blank\\">\u5E76\u67E5\u96C6</a> | <a href=\\"/training/686f27317e50189ceb631247\\" target=\\"_blank\\">\u533A\u95F4\u95EE\u9898</a> | <a href=\\"/training/686f27867e50189ceb631251\\" target=\\"_blank\\">\u6811\u53CA\u6811\u7684\u5E94\u7528</a> | <a href=\\"/training/686f27c17e50189ceb631257\\" target=\\"_blank\\">\u6570\u8BBA</a> | <a href=\\"/training/68fb219d65d6c0e8cf403f3a\\" target=\\"_blank\\">\u6570\u636E\u7ED3\u6784</a> \\r\\n---\\r\\n\\r\\n## \uD83C\uDF89\uFE0F <a href=\\"/d/Level_Test/\\" >\u6559\u5E08\u5B66\u751F\u80FD\u529B\u6D4B\u8BD5</a> \\r\\n\\r\\n---","roles":{"guest":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377","default":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624474765150541316737","teacher":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831654949253049046476116983","su_teacher":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831654958476421083332343799","notstu":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377","Other_Teacher":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831654838102077190290064261","AI":"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831654810902468493655930865"},"avatar":"url:/file/2/qonnwolf-logo2.png","langs":"","share":"*","enableDownloadFirst":"on"},"SWConfig":{"preload":"","hosts":["http://oj.qonnwolf.com","https://oj.qonnwolf.com","oj.qonnwolf.com/","/"],"assets":[],"domains":[]}}';
|
||
var UserContext = '{"_id":339,"mail":"chengzi2508@bjcodemao.com","uname":"\u6A59\u5B50\u8001\u5E08","hashType":"hydro","priv":33555460,"regat":"2025-08-18T01:14:43.815Z","loginat":"2026-05-30T08:19:40.590Z","perm":"BigInt::10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831654958476421083332343799","role":"su_teacher","scope":"BigInt::-1","tfa":false,"authn":false,"group":["\u6559\u5E08\u56E2\u961F","339"],"domains":[],"viewLang":"zh","timeZone":"Asia/Shanghai","codeLang":"cc.cc14o2","codeTemplate":"","avatar":"url:/file/339/.avatar.jpg","qq":"","gender":"0","bio":"\u9752\uFF0C\u53D6\u4E4B\u4E8E\u84DD\u800C\u9752\u4E8E\u84DD\u3002\u51B0\uFF0C\u6C34\u4E3A\u4E4B\u800C\u5BD2\u4E8E\u6C34\u3002\\r\\n","school":"\u7F16\u7A0B\u732B\u5927\u5B66","studentId":"111","backgroundImage":"/components/profile/backgrounds/10.jpg","unreadMsg":0,"badge":"","pinnedDomains":[],"rounded":false,"skipAnimate":false,"showTimeAgo":true,"fontFamily":"Open Sans","codeFontFamily":"Source Code Pro","theme":"light","preferredEditorType":"sv","showInvisibleChar":false,"formatCode":true,"coin_now":6930,"coin_all":6940,"displayName":"","rpInfo":{"problem":259.0661269379282,"contest":1},"nAccept":705,"nSubmit":717,"rp":260.0661269379282,"rank":9,"level":8,"join":true,"avatarUrl":"/file/339/.avatar.jpg"}';
|
||
</script>
|
||
|
||
</head>
|
||
<body>
|
||
<script type="text/javascript" src="/resource/eb180064/entry.js"></script>
|
||
<script type="text/javascript" src="/resource/4.58.0-beta.17/lang-zh.js"></script>
|
||
<script type="text/javascript" src="/hydro-4.58.0-beta.17.js"></script>
|
||
<nav class="nav slideout-menu" id="menu">
|
||
<div class="row"><div class="columns clearfix">
|
||
<ol class="nav__list nav__list--main clearfix">
|
||
<li class="nav__list-item">
|
||
<a href="/"><img class="nav__logo" src="/qonnwolf.png"></a>
|
||
</li> <li class="nav__list-item">
|
||
<a href="/" class="nav__item">
|
||
首页
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/course" class="nav__item nav--active">
|
||
课程
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/p" class="nav__item">
|
||
题库
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/training" class="nav__item">
|
||
训练
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/contest" class="nav__item">
|
||
比赛
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/homework" class="nav__item">
|
||
作业
|
||
</a>
|
||
</li>
|
||
<li class="nav__list-item">
|
||
<a href="/domain/dashboard" class="nav__item">
|
||
管理域
|
||
</a>
|
||
</li>
|
||
</ol>
|
||
<ol class="nav__list nav__list--secondary clearfix">
|
||
<li class="nav__list-item" data-dropdown-pos="bottom right" data-dropdown-custom-class="nav__dropdown" data-dropdown-target="#menu-nav-user" data-dropdown-disabledconstrainToWindow data-dropdown-trigger-desktop-only>
|
||
<a href="/user/339" class="nav__item">橙子老师 <span class="icon icon-expand_more nojs--hide"></span></a>
|
||
<ol class="dropdown-target menu" id="menu-nav-user">
|
||
<li class="menu__item">
|
||
<a href="/user/339" class="menu__link">
|
||
<span class="icon icon-account--circle"></span> 我的资料
|
||
</a>
|
||
</li>
|
||
<li class="menu__item">
|
||
<a href="/home/messages" class="menu__link">
|
||
<span class="icon icon-comment--multiple"></span> 站内消息
|
||
</a>
|
||
</li>
|
||
<li class="menu__seperator"></li>
|
||
<li class="menu__item">
|
||
<a href="/home/settings/domain" class="menu__link">
|
||
<span class="icon icon-web"></span> @ 穹狼科创
|
||
</a>
|
||
</li>
|
||
<li class="menu__seperator"></li>
|
||
<li class="menu__item">
|
||
<a href="/home/settings/account" class="menu__link">
|
||
<span class="icon icon-wrench"></span> 账户设置
|
||
</a>
|
||
</li>
|
||
<li class="menu__item">
|
||
<a href="/home/settings/preference" class="menu__link">
|
||
<span class="icon icon-sliders"></span> 偏好设置
|
||
</a>
|
||
</li>
|
||
<li class="menu__item">
|
||
<a href="/home/security" class="menu__link">
|
||
<span class="icon icon-security"></span> 安全设置
|
||
</a>
|
||
</li>
|
||
<li class="menu__seperator"></li>
|
||
<li class="menu__item">
|
||
<a href="/home/domain" class="menu__link">
|
||
<span class="icon icon-web"></span> 我的域
|
||
</a>
|
||
</li>
|
||
<li class="menu__seperator"></li>
|
||
<li class="menu__item">
|
||
<a href="/logout" class="menu__link" name="nav_logout">
|
||
<span class="icon icon-logout"></span> 登出
|
||
</a>
|
||
</li>
|
||
</ol>
|
||
</li>
|
||
</ol>
|
||
</div></div>
|
||
</nav>
|
||
<nav class="nav--shadow"></nav>
|
||
<div class="slideout-panel" id="panel">
|
||
<div class="slideout-overlay"></div>
|
||
<div class="header--mobile">
|
||
<div class="row"><div class="columns clearfix">
|
||
<div class="float-left">
|
||
<a class="header--mobile__domain" href="/" target="_self">
|
||
<img src="/qonnwolf.png">
|
||
</a>
|
||
</div>
|
||
<div class="float-right">
|
||
<button type="button" class="header__hamburger">
|
||
<div class="hamburger hamburger--spin">
|
||
<span class="hamburger-box">
|
||
<span class="hamburger-inner"></span>
|
||
</span>
|
||
</div>
|
||
</button>
|
||
</div>
|
||
</div></div>
|
||
</div>
|
||
<div class="main">
|
||
|
||
|
||
<style>
|
||
/* 课程详情页样式 - B0.4 参考计蒜客设计 */
|
||
|
||
/* 课时卡片容器 */
|
||
.period-card {
|
||
background: #fff;
|
||
border-radius: 5px;
|
||
box-shadow: 0 0 8px 0 rgba(139, 154, 174, 0.15);
|
||
margin-bottom: 24px;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.period-inner {
|
||
border: none;
|
||
position: relative;
|
||
}
|
||
|
||
/* 课时头部 */
|
||
.period-header {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
flex-direction: column;
|
||
padding: 24px 24px 16px 48px;
|
||
cursor: pointer;
|
||
position: relative;
|
||
user-select: none;
|
||
}
|
||
|
||
.period-header:hover {
|
||
background: #fafbfc;
|
||
}
|
||
|
||
/* 展开箭头 */
|
||
.period-toggle {
|
||
position: absolute;
|
||
top: 28px;
|
||
left: 16px;
|
||
color: #999;
|
||
transition: transform 0.3s cubic-bezier(0.46, 1, 0.23, 1.52);
|
||
font-size: 0.8rem;
|
||
}
|
||
|
||
.period-card.expanded .period-toggle {
|
||
transform: rotate(90deg);
|
||
}
|
||
|
||
/* 元数据区域 */
|
||
.period-metadata {
|
||
width: 100%;
|
||
}
|
||
|
||
.period-title {
|
||
font-size: 20px;
|
||
line-height: 28px;
|
||
font-weight: 500;
|
||
color: #555;
|
||
margin: 0 0 4px 0;
|
||
}
|
||
|
||
.period-description {
|
||
line-height: 1.5;
|
||
margin: 4px 0 16px 0;
|
||
color: #777;
|
||
font-size: 14px;
|
||
}
|
||
|
||
/* 进度条 */
|
||
.period-progress {
|
||
margin-top: 8px;
|
||
position: relative;
|
||
height: 8px;
|
||
}
|
||
|
||
.progress-bar-outer {
|
||
background: #f2f4f7;
|
||
border-radius: 100px;
|
||
height: 8px;
|
||
position: relative;
|
||
overflow: visible;
|
||
box-shadow: inset 0 1px 1px 0 rgba(139, 154, 174, 0.3);
|
||
}
|
||
|
||
.progress-bar-inner {
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
height: 100%;
|
||
border-radius: 100px;
|
||
background: linear-gradient(90deg, #41b146, #67d757);
|
||
transition: width 0.6s ease;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
align-items: center;
|
||
min-width: max-content;
|
||
}
|
||
|
||
.progress-bar-text {
|
||
height: 14px;
|
||
line-height: 14px;
|
||
padding: 0 6px;
|
||
background: #41b146;
|
||
margin: 0;
|
||
border-radius: 5px;
|
||
text-align: center;
|
||
font-size: 12px;
|
||
color: #fff;
|
||
font-weight: 500;
|
||
white-space: nowrap;
|
||
position: relative;
|
||
}
|
||
|
||
/* 编辑和回放按钮 */
|
||
.period-actions {
|
||
position: absolute;
|
||
right: 24px;
|
||
top: 24px;
|
||
display: flex;
|
||
gap: 8px;
|
||
z-index: 1;
|
||
}
|
||
|
||
.period-actions .btn-replay {
|
||
height: 32px;
|
||
padding: 0 12px;
|
||
border-radius: 5px;
|
||
background: #41b146;
|
||
color: #fff;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.period-actions .btn-replay:hover {
|
||
background: #4ebe53;
|
||
}
|
||
|
||
.period-actions .btn-edit {
|
||
height: 32px;
|
||
padding: 0 12px;
|
||
border-radius: 5px;
|
||
background: #f5f5f5;
|
||
color: #666;
|
||
display: flex;
|
||
align-items: center;
|
||
font-size: 13px;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.period-actions .btn-edit:hover {
|
||
background: #e8e8e8;
|
||
}
|
||
|
||
/* 课时内容区域 */
|
||
.period-body {
|
||
display: none;
|
||
padding: 0 24px 24px 24px;
|
||
}
|
||
|
||
.period-card.expanded .period-body {
|
||
display: block;
|
||
}
|
||
|
||
.period-divider {
|
||
height: 1px;
|
||
background: #cfcfcf;
|
||
margin: 0 0 16px 24px;
|
||
}
|
||
|
||
/* 章节列表 */
|
||
.chapter-list {
|
||
list-style: none;
|
||
padding: 0;
|
||
margin: 0 0 0 24px;
|
||
}
|
||
|
||
.chapter-item {
|
||
padding: 0 0 0 24px;
|
||
margin-top: 24px;
|
||
}
|
||
|
||
.chapter-item:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.chapter-header .chapter-title {
|
||
color: #41b146;
|
||
font-size: 16px;
|
||
font-weight: 600;
|
||
line-height: 24px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
/* 课时内容列表 */
|
||
.lesson-list {
|
||
list-style: none;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.lesson-item {
|
||
box-sizing: border-box;
|
||
border-radius: 5px;
|
||
background: #f2f4f7;
|
||
margin-top: 10px;
|
||
padding: 12px 16px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
cursor: pointer;
|
||
transition: background 0.15s;
|
||
}
|
||
|
||
.lesson-item:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.lesson-item:hover {
|
||
background: #e8ecf2;
|
||
}
|
||
|
||
.lesson-item a {
|
||
flex: 1;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
text-decoration: none;
|
||
color: #333;
|
||
}
|
||
|
||
.lesson-item .lesson-type {
|
||
font-size: 0.75rem;
|
||
color: #888;
|
||
background: #e0e4e8;
|
||
padding: 2px 8px;
|
||
border-radius: 4px;
|
||
font-family: system-ui;
|
||
}
|
||
|
||
.lesson-item .lesson-name {
|
||
font-size: 14px;
|
||
color: #333;
|
||
}
|
||
|
||
/* 完成状态图标 - 圆形徽章样式 */
|
||
.lesson-status {
|
||
width: 22px;
|
||
height: 22px;
|
||
min-width: 22px;
|
||
min-height: 22px;
|
||
max-width: 22px;
|
||
max-height: 22px;
|
||
border-radius: 50%;
|
||
flex: none;
|
||
flex-shrink: 0;
|
||
flex-grow: 0;
|
||
margin-left: 12px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 12px;
|
||
font-weight: bold;
|
||
text-decoration: none;
|
||
transition: transform 0.15s, box-shadow 0.15s;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.lesson-status:hover {
|
||
transform: scale(1.1);
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
||
}
|
||
|
||
/* 完全正确 - 绿色 */
|
||
.lesson-status.status-ac {
|
||
background: #52c41a;
|
||
color: #fff;
|
||
}
|
||
|
||
/* 错误 - 红色 */
|
||
.lesson-status.status-wa {
|
||
background: #f5222d;
|
||
color: #fff;
|
||
}
|
||
|
||
/* 部分正确 - 黄色/橙色 */
|
||
.lesson-status.status-pa {
|
||
background: #faad14;
|
||
color: #fff;
|
||
}
|
||
|
||
/* 未做 - 灰色空心圆 */
|
||
.lesson-status.status-pending {
|
||
background: transparent;
|
||
border: 2px solid #d1d8e4;
|
||
color: #d1d8e4;
|
||
font-size: 10px;
|
||
}
|
||
|
||
/* 未关联提示 */
|
||
.hw-empty {
|
||
color: #999;
|
||
font-size: 13px;
|
||
padding: 12px 16px;
|
||
background: #f9f9f9;
|
||
border-radius: 5px;
|
||
}
|
||
|
||
.hw-empty a {
|
||
color: #1890ff;
|
||
text-decoration: none;
|
||
}
|
||
|
||
/* 锁定状态(未加入课程) */
|
||
.period-card.locked .period-header {
|
||
cursor: default;
|
||
}
|
||
|
||
.period-card.locked .period-header:hover {
|
||
background: transparent;
|
||
}
|
||
|
||
.period-card.locked .period-toggle {
|
||
color: #ccc;
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
.period-card.locked .period-body {
|
||
display: none !important;
|
||
}
|
||
|
||
/* 深色主题锁定状态 */
|
||
html.theme--dark .period-card.locked .period-header:hover,
|
||
.dark .period-card.locked .period-header:hover {
|
||
background: transparent !important;
|
||
}
|
||
|
||
html.theme--dark .period-card.locked .period-toggle,
|
||
.dark .period-card.locked .period-toggle {
|
||
color: #555 !important;
|
||
}
|
||
|
||
.hw-empty a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
/* 提示信息 */
|
||
.notice-box {
|
||
padding: 16px 20px;
|
||
background: #e6f7ff;
|
||
border: 1px solid #91d5ff;
|
||
border-radius: 5px;
|
||
margin-bottom: 24px;
|
||
color: #0050b3;
|
||
font-size: 14px;
|
||
}
|
||
|
||
/* 空状态 */
|
||
.empty-state {
|
||
text-align: center;
|
||
padding: 60px 20px;
|
||
color: #999;
|
||
font-size: 16px;
|
||
}
|
||
|
||
/* 作业分组标题 */
|
||
.hw-group {
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.hw-group:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.hw-group__title {
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
color: #555;
|
||
margin: 0 0 10px 0;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
}
|
||
|
||
.hw-group__title.muted {
|
||
color: #bbb;
|
||
}
|
||
|
||
/* ========== 用户筛选面板样式(复用训练模块) ========== */
|
||
.training__users {
|
||
max-height: calc(100vh - 100px);
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.training__user-list {
|
||
max-height: 400px;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.training__user-item {
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
gap: 8px;
|
||
}
|
||
|
||
.training__user-avatar {
|
||
width: 24px;
|
||
height: 24px;
|
||
border-radius: 50%;
|
||
flex-shrink: 0;
|
||
overflow: hidden;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
background: #e0e0e0;
|
||
}
|
||
|
||
.training__user-avatar-img {
|
||
width: 100%;
|
||
height: 100%;
|
||
object-fit: cover;
|
||
}
|
||
|
||
.training__user-avatar-placeholder {
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
color: #666;
|
||
}
|
||
|
||
.training__user-name {
|
||
flex: 1;
|
||
font-size: 13px;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.training__users .menu__item--active .menu__link {
|
||
background: #e6f4ea;
|
||
border-left: 3px solid #41b146;
|
||
color: #1e7e34;
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* ======== 成绩面板浮层样式 ======== */
|
||
.gv-modal-overlay {
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: rgba(0, 0, 0, 0.5);
|
||
z-index: 9999;
|
||
display: none;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.gv-modal-content {
|
||
background: #fff;
|
||
width: 90%;
|
||
max-width: 1000px;
|
||
max-height: 90vh;
|
||
border-radius: 8px;
|
||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
||
display: flex;
|
||
flex-direction: column;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.gv-modal-header {
|
||
padding: 16px 20px;
|
||
border-bottom: 1px solid #eee;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
background: #fafafa;
|
||
}
|
||
|
||
.gv-modal-body {
|
||
padding: 20px;
|
||
overflow-y: auto;
|
||
flex: 1;
|
||
}
|
||
|
||
|
||
/* 暗色主题重设计 */
|
||
html.theme--dark,
|
||
.theme--dark,
|
||
.dark {
|
||
--course-dark-bg: #121212;
|
||
--course-dark-surface: #1e1e1e;
|
||
--course-dark-surface-strong: #2d2d2d;
|
||
--course-dark-line: #333333;
|
||
--course-dark-line-strong: #444444;
|
||
--course-dark-text: #e0e0e0;
|
||
--course-dark-muted: #aaaaaa;
|
||
--course-accent: #52c41a;
|
||
}
|
||
|
||
html.theme--dark .period-card,
|
||
.theme--dark .period-card,
|
||
.dark .period-card {
|
||
background: var(--course-dark-surface) !important;
|
||
border: 1px solid var(--course-dark-line);
|
||
border-radius: 8px;
|
||
box-shadow: none !important;
|
||
}
|
||
|
||
html.theme--dark .period-card.expanded,
|
||
.theme--dark .period-card.expanded,
|
||
.dark .period-card.expanded {
|
||
border-color: var(--course-dark-line-strong);
|
||
}
|
||
|
||
html.theme--dark .period-header,
|
||
.theme--dark .period-header,
|
||
.dark .period-header {
|
||
background: transparent !important;
|
||
border-bottom: 1px solid transparent;
|
||
}
|
||
|
||
html.theme--dark .period-header:hover,
|
||
.theme--dark .period-header:hover,
|
||
.dark .period-header:hover {
|
||
background: var(--course-dark-surface-strong) !important;
|
||
}
|
||
|
||
html.theme--dark .period-card.expanded .period-header,
|
||
.theme--dark .period-card.expanded .period-header,
|
||
.dark .period-card.expanded .period-header {
|
||
border-bottom-color: var(--course-dark-line);
|
||
}
|
||
|
||
html.theme--dark .period-toggle,
|
||
.theme--dark .period-toggle,
|
||
.dark .period-toggle {
|
||
top: 25px;
|
||
left: 15px;
|
||
width: 22px;
|
||
height: 22px;
|
||
border-radius: 4px;
|
||
background: var(--course-dark-surface-strong);
|
||
border: 1px solid var(--course-dark-line);
|
||
color: var(--course-dark-muted);
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 10px;
|
||
}
|
||
|
||
html.theme--dark .period-card.locked .period-toggle,
|
||
.theme--dark .period-card.locked .period-toggle,
|
||
.dark .period-card.locked .period-toggle {
|
||
background: transparent;
|
||
border-color: var(--course-dark-line);
|
||
color: var(--course-dark-line-strong) !important;
|
||
}
|
||
|
||
html.theme--dark .period-title,
|
||
.theme--dark .period-title,
|
||
.dark .period-title {
|
||
color: var(--course-dark-text) !important;
|
||
letter-spacing: normal;
|
||
}
|
||
|
||
html.theme--dark .period-description,
|
||
.theme--dark .period-description,
|
||
.dark .period-description {
|
||
color: var(--course-dark-muted) !important;
|
||
}
|
||
|
||
html.theme--dark .progress-bar-outer,
|
||
.theme--dark .progress-bar-outer,
|
||
.dark .progress-bar-outer {
|
||
background: var(--course-dark-line) !important;
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .progress-bar-inner,
|
||
.theme--dark .progress-bar-inner,
|
||
.dark .progress-bar-inner {
|
||
background: var(--course-accent);
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .progress-bar-text,
|
||
.theme--dark .progress-bar-text,
|
||
.dark .progress-bar-text {
|
||
background: var(--course-accent);
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .period-body,
|
||
html.theme--dark .chapter-list,
|
||
html.theme--dark .chapter-item,
|
||
html.theme--dark .hw-group,
|
||
.theme--dark .period-body,
|
||
.theme--dark .chapter-list,
|
||
.theme--dark .chapter-item,
|
||
.theme--dark .hw-group,
|
||
.dark .period-body,
|
||
.dark .chapter-list,
|
||
.dark .chapter-item,
|
||
.dark .hw-group {
|
||
background: transparent !important;
|
||
}
|
||
|
||
html.theme--dark .period-divider,
|
||
.theme--dark .period-divider,
|
||
.dark .period-divider {
|
||
background: var(--course-dark-line) !important;
|
||
}
|
||
|
||
html.theme--dark .hw-group__title,
|
||
.theme--dark .hw-group__title,
|
||
.dark .hw-group__title {
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark .lesson-item,
|
||
.theme--dark .lesson-item,
|
||
.dark .lesson-item {
|
||
background: var(--course-dark-surface-strong) !important;
|
||
border: 1px solid var(--course-dark-line);
|
||
box-shadow: none;
|
||
transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease;
|
||
}
|
||
|
||
html.theme--dark .lesson-item:hover,
|
||
.theme--dark .lesson-item:hover,
|
||
.dark .lesson-item:hover {
|
||
background: #333 !important;
|
||
border-color: var(--course-dark-line-strong);
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
html.theme--dark .lesson-item a,
|
||
html.theme--dark .lesson-item .lesson-name,
|
||
html.theme--dark .lesson-name,
|
||
.theme--dark .lesson-item a,
|
||
.theme--dark .lesson-item .lesson-name,
|
||
.theme--dark .lesson-name,
|
||
.dark .lesson-item a,
|
||
.dark .lesson-item .lesson-name,
|
||
.dark .lesson-name {
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark .lesson-item .lesson-type,
|
||
.theme--dark .lesson-item .lesson-type,
|
||
.dark .lesson-item .lesson-type {
|
||
background: var(--course-dark-line) !important;
|
||
border: 1px solid var(--course-dark-line-strong);
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark .lesson-item [style*="color: #999"],
|
||
.theme--dark .lesson-item [style*="color: #999"],
|
||
.dark .lesson-item [style*="color: #999"] {
|
||
color: var(--course-dark-muted) !important;
|
||
}
|
||
|
||
html.theme--dark .lesson-status.status-pending,
|
||
.theme--dark .lesson-status.status-pending,
|
||
.dark .lesson-status.status-pending {
|
||
border-color: var(--course-dark-line-strong) !important;
|
||
color: var(--course-dark-muted) !important;
|
||
}
|
||
|
||
html.theme--dark .lesson-status:hover,
|
||
.theme--dark .lesson-status:hover,
|
||
.dark .lesson-status:hover {
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .notice-box,
|
||
.theme--dark .notice-box,
|
||
.dark .notice-box {
|
||
background: rgba(24, 144, 255, 0.1) !important;
|
||
border-color: rgba(24, 144, 255, 0.3) !important;
|
||
color: #69c0ff !important;
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .hw-empty,
|
||
.theme--dark .hw-empty,
|
||
.dark .hw-empty,
|
||
html.theme--dark .empty-state,
|
||
.theme--dark .empty-state,
|
||
.dark .empty-state {
|
||
color: var(--course-dark-muted) !important;
|
||
}
|
||
|
||
html.theme--dark .period-actions .btn-edit,
|
||
.theme--dark .period-actions .btn-edit,
|
||
.dark .period-actions .btn-edit {
|
||
background: var(--course-dark-surface-strong);
|
||
border: 1px solid var(--course-dark-line);
|
||
color: var(--course-dark-text);
|
||
}
|
||
|
||
html.theme--dark .period-actions .btn-edit:hover,
|
||
.theme--dark .period-actions .btn-edit:hover,
|
||
.dark .period-actions .btn-edit:hover {
|
||
background: #444;
|
||
color: #fff;
|
||
}
|
||
|
||
html.theme--dark .training__users,
|
||
.theme--dark .training__users,
|
||
.dark .training__users {
|
||
border: 1px solid var(--course-dark-line);
|
||
background: var(--course-dark-surface);
|
||
}
|
||
|
||
html.theme--dark .training__users .section__header,
|
||
.theme--dark .training__users .section__header,
|
||
.dark .training__users .section__header {
|
||
border-color: var(--course-dark-line) !important;
|
||
background: var(--course-dark-surface-strong);
|
||
}
|
||
|
||
html.theme--dark #groupFilter,
|
||
html.theme--dark #userSearch,
|
||
.theme--dark #groupFilter,
|
||
.theme--dark #userSearch,
|
||
.dark #groupFilter,
|
||
.dark #userSearch {
|
||
background: var(--course-dark-surface) !important;
|
||
border-color: var(--course-dark-line) !important;
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark .training__users .menu__item--active .menu__link,
|
||
.theme--dark .training__users .menu__item--active .menu__link,
|
||
.dark .training__users .menu__item--active .menu__link {
|
||
background: rgba(82, 196, 26, 0.1) !important;
|
||
border-left-color: var(--course-accent) !important;
|
||
color: var(--course-accent) !important;
|
||
}
|
||
|
||
html.theme--dark .training__user-avatar,
|
||
.theme--dark .training__user-avatar,
|
||
.dark .training__user-avatar {
|
||
background: var(--course-dark-line) !important;
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.theme--dark .gv-modal-overlay,
|
||
.theme--dark .gv-modal-overlay,
|
||
.dark .gv-modal-overlay {
|
||
background: rgba(0, 0, 0, 0.7);
|
||
backdrop-filter: none;
|
||
}
|
||
|
||
html.theme--dark .gv-modal-content,
|
||
.theme--dark .gv-modal-content,
|
||
.dark .gv-modal-content {
|
||
background: var(--course-dark-surface);
|
||
border: 1px solid var(--course-dark-line);
|
||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
|
||
}
|
||
|
||
html.theme--dark .gv-modal-header,
|
||
.theme--dark .gv-modal-header,
|
||
.dark .gv-modal-header {
|
||
background: var(--course-dark-surface-strong);
|
||
border-color: var(--course-dark-line);
|
||
}
|
||
|
||
html.theme--dark #gv-global-title,
|
||
.theme--dark #gv-global-title,
|
||
.dark #gv-global-title,
|
||
html.theme--dark #gv-loading,
|
||
.theme--dark #gv-loading,
|
||
.dark #gv-loading {
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-empty,
|
||
.theme--dark #gv-empty,
|
||
.dark #gv-empty {
|
||
color: var(--course-dark-muted) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-group-filter,
|
||
.theme--dark #gv-group-filter,
|
||
.dark #gv-group-filter {
|
||
background: var(--course-dark-surface) !important;
|
||
border-color: var(--course-dark-line) !important;
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark .gv-modal-header label,
|
||
.theme--dark .gv-modal-header label,
|
||
.dark .gv-modal-header label {
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-table,
|
||
.theme--dark #gv-table,
|
||
.dark #gv-table {
|
||
background: var(--course-dark-surface);
|
||
border: 1px solid var(--course-dark-line);
|
||
}
|
||
|
||
html.theme--dark #gv-table th,
|
||
.theme--dark #gv-table th,
|
||
.dark #gv-table th {
|
||
background: var(--course-dark-surface-strong) !important;
|
||
border-color: var(--course-dark-line) !important;
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-table tbody tr,
|
||
.theme--dark #gv-table tbody tr,
|
||
.dark #gv-table tbody tr {
|
||
border-bottom-color: var(--course-dark-line) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-table tbody tr:hover,
|
||
.theme--dark #gv-table tbody tr:hover,
|
||
.dark #gv-table tbody tr:hover {
|
||
background: var(--course-dark-surface-strong) !important;
|
||
}
|
||
|
||
html.theme--dark #gv-table tbody td:last-child,
|
||
.theme--dark #gv-table tbody td:last-child,
|
||
.dark #gv-table tbody td:last-child {
|
||
color: var(--course-dark-text) !important;
|
||
}
|
||
|
||
@media (max-width: 640px) {
|
||
html.theme--dark .period-header,
|
||
.theme--dark .period-header,
|
||
.dark .period-header {
|
||
padding-right: 18px;
|
||
}
|
||
|
||
html.theme--dark .period-actions,
|
||
.theme--dark .period-actions,
|
||
.dark .period-actions {
|
||
position: static;
|
||
margin-top: 12px;
|
||
}
|
||
}
|
||
</style>
|
||
|
||
<!-- 成绩面板独立容器 -->
|
||
<div class="gv-modal-overlay" id="gv-global-overlay">
|
||
<div class="gv-modal-content">
|
||
<div class="gv-modal-header" style="flex-wrap: nowrap;">
|
||
<h3
|
||
style="margin: 0; font-size: 1.2rem; color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 40%;"
|
||
id="gv-global-title">📊 章节成绩单</h3>
|
||
<div style="display: flex; align-items: center; gap: 10px; flex-shrink: 0;">
|
||
<select id="gv-group-filter"
|
||
style="font-size: 0.85rem; padding: 4px 6px; border-radius: 4px; border: 1px solid #ccc; background: #fff; cursor: pointer; max-width: 140px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden;">
|
||
<option value="">全部小组</option>
|
||
<option value="克力周六1630CSP06">克力周六1630CSP06</option>
|
||
<option value="教师团队">教师团队</option>
|
||
<option value="杰森周日1045CSP06">杰森周日1045CSP06</option>
|
||
<option value="邓子周日0830CSP05">邓子周日0830CSP05</option>
|
||
<option value="邓子周日1400CSP05">邓子周日1400CSP05</option>
|
||
</select>
|
||
<label
|
||
style="font-size: 0.85rem; display: flex; align-items: center; gap: 4px; cursor: pointer; margin: 0; color: #666; white-space: nowrap;">
|
||
<input type="checkbox" id="gv-hide-teachers" checked> 过滤老师
|
||
</label>
|
||
<button class="rounded primary button"
|
||
style="font-size: 0.85rem; padding: 4px 12px !important; margin: 0; white-space: nowrap; height: auto !important; line-height: 1.5 !important; min-width: 0 !important;"
|
||
onclick="window.CourseGradeViewer.exportCSV()">导出 CSV</button>
|
||
<button class="rounded button"
|
||
style="font-size: 0.85rem; padding: 4px 12px !important; margin: 0; white-space: nowrap; height: auto !important; line-height: 1.5 !important; min-width: 0 !important;"
|
||
onclick="window.CourseGradeViewer.close()">关闭</button>
|
||
</div>
|
||
</div>
|
||
<div class="gv-modal-body">
|
||
<div id="gv-loading" style="text-align: center; color: #666; padding: 40px;">
|
||
⏳ 正在拉取各作业成绩数据以进行合并计算,请稍候...
|
||
</div>
|
||
<div id="gv-empty" style="text-align: center; color: #999; padding: 40px; display: none;">
|
||
暂无成绩数据
|
||
</div>
|
||
<div style="overflow-x: auto;">
|
||
<table class="data-table" id="gv-table" style="display: none; min-width: 100%; border-collapse: collapse;">
|
||
<thead>
|
||
<tr id="gv-thead-tr">
|
||
<th>序号</th>
|
||
<th>姓名</th>
|
||
<!-- 动态插入作业表头 -->
|
||
<th>总分</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="gv-tbody">
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', function () {
|
||
var courseId = '6975984d71e15346c9e8fdc2';
|
||
var storageKey = 'course_expanded_' + courseId;
|
||
|
||
function getExpanded() {
|
||
try {
|
||
return JSON.parse(localStorage.getItem(storageKey)) || {};
|
||
} catch (e) { return {}; }
|
||
}
|
||
|
||
function saveExpanded(data) {
|
||
try {
|
||
localStorage.setItem(storageKey, JSON.stringify(data));
|
||
} catch (e) { }
|
||
}
|
||
|
||
// 初始化展开状态 (每次 PJAX 更新后也需要调用)
|
||
function initExpanded() {
|
||
var expanded = getExpanded();
|
||
document.querySelectorAll('.period-card').forEach(function (card) {
|
||
var id = card.dataset.id;
|
||
if (expanded[id]) {
|
||
card.classList.add('expanded');
|
||
}
|
||
});
|
||
}
|
||
|
||
// 首次初始化
|
||
initExpanded();
|
||
|
||
// 自动滚动到选中的用户(不使用 scrollIntoView 可以防止外层页面跳转)
|
||
var scrollKey = 'course_user_scroll_' + courseId;
|
||
|
||
function restoreScroll() {
|
||
var userList = document.getElementById('userList');
|
||
if (!userList) return;
|
||
var savedScroll = sessionStorage.getItem(scrollKey);
|
||
if (savedScroll !== null) {
|
||
userList.scrollTop = parseInt(savedScroll, 10);
|
||
} else {
|
||
var activeItem = userList.querySelector('.menu__item--active');
|
||
if (activeItem) {
|
||
// 手动计算局部滚动位置将选中项居中,避免外层窗口跳动
|
||
var parentRect = userList.getBoundingClientRect();
|
||
var childRect = activeItem.getBoundingClientRect();
|
||
userList.scrollTop += childRect.top - parentRect.top - (parentRect.height / 2) + (childRect.height / 2);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 初始化调用一次滚动还原
|
||
restoreScroll();
|
||
|
||
// 在点击时立刻保存当前的滚动条位置,防止局部刷新后丢失
|
||
document.addEventListener('click', function (e) {
|
||
if (e.target.closest('#userList .menu__link')) {
|
||
var userList = document.getElementById('userList');
|
||
if (userList) {
|
||
sessionStorage.setItem(scrollKey, userList.scrollTop);
|
||
}
|
||
}
|
||
});
|
||
|
||
// 监听 HydroOJ 原生 PJAX 成功事件(页面局部刷新后恢复展开状态和列表位置)
|
||
if (window.$) {
|
||
$(document).on('pjax:success pjax:end', function () {
|
||
initExpanded();
|
||
restoreScroll();
|
||
});
|
||
} else {
|
||
document.addEventListener('pjax:success', function () {
|
||
initExpanded();
|
||
restoreScroll();
|
||
});
|
||
}
|
||
|
||
// 使用事件代理绑定展开/收缩点击事件 (这样即使 DOM 被 PJAX 替换,事件依然有效)
|
||
document.addEventListener('click', function (e) {
|
||
var header = e.target.closest('.period-header');
|
||
if (!header) return;
|
||
if (e.target.tagName === 'A' || e.target.closest('a')) return;
|
||
|
||
var card = header.closest('.period-card');
|
||
if (!card || card.classList.contains('locked')) return;
|
||
|
||
var id = card.dataset.id;
|
||
var exp = getExpanded();
|
||
card.classList.toggle('expanded');
|
||
exp[id] = card.classList.contains('expanded');
|
||
saveExpanded(exp);
|
||
});
|
||
|
||
// ========== 用户组筛选和搜索功能 (纯前端 DOM 过滤) ==========
|
||
var groupFilter = document.getElementById('groupFilter');
|
||
var userSearch = document.getElementById('userSearch');
|
||
|
||
// ========== 保存 / 恢复筛选状态 ==========
|
||
var savedSearchKey = 'course_user_search_' + courseId;
|
||
var savedGroupKey = 'course_group_filter_' + courseId;
|
||
|
||
if (userSearch && sessionStorage.getItem(savedSearchKey) !== null) {
|
||
userSearch.value = sessionStorage.getItem(savedSearchKey);
|
||
}
|
||
if (groupFilter && sessionStorage.getItem(savedGroupKey) !== null) {
|
||
groupFilter.value = sessionStorage.getItem(savedGroupKey);
|
||
}
|
||
|
||
function filterUsers() {
|
||
var userList = document.getElementById('userList');
|
||
if (!userList) return;
|
||
var selectedGroup = groupFilter ? groupFilter.value : '';
|
||
var searchText = userSearch ? userSearch.value.toLowerCase().trim() : '';
|
||
var items = userList.querySelectorAll('.menu__item');
|
||
|
||
items.forEach(function (item) {
|
||
var groups = item.dataset.groups ? item.dataset.groups.split(',') : [];
|
||
var uname = item.dataset.uname || '';
|
||
var displayname = item.dataset.displayname || '';
|
||
var uid = item.dataset.uid || '';
|
||
|
||
var groupMatch = !selectedGroup || groups.indexOf(selectedGroup) !== -1;
|
||
var searchMatch = !searchText ||
|
||
uname.indexOf(searchText) !== -1 ||
|
||
displayname.indexOf(searchText) !== -1 ||
|
||
uid.indexOf(searchText) !== -1;
|
||
|
||
if (groupMatch && searchMatch) {
|
||
item.style.display = '';
|
||
} else {
|
||
item.style.display = 'none';
|
||
}
|
||
});
|
||
}
|
||
|
||
if (groupFilter) {
|
||
groupFilter.addEventListener('change', function () {
|
||
sessionStorage.setItem(savedGroupKey, this.value);
|
||
filterUsers();
|
||
});
|
||
}
|
||
if (userSearch) {
|
||
userSearch.addEventListener('input', function () {
|
||
sessionStorage.setItem(savedSearchKey, this.value);
|
||
filterUsers();
|
||
});
|
||
}
|
||
|
||
// ========== 初始化时进行一次过滤以确保恢复了状态 ==========
|
||
filterUsers();
|
||
|
||
// 监听左侧边栏高亮状态更新
|
||
document.addEventListener('click', function (e) {
|
||
var link = e.target.closest('#userList .menu__link');
|
||
if (!link) return;
|
||
var userList = document.getElementById('userList');
|
||
if (userList) {
|
||
userList.querySelectorAll('.menu__item').forEach(function (item) {
|
||
item.classList.remove('menu__item--active');
|
||
});
|
||
link.closest('.menu__item').classList.add('menu__item--active');
|
||
}
|
||
});
|
||
|
||
});
|
||
|
||
// 注入全局可用的成绩查询逻辑
|
||
window.CourseGradeViewer = {
|
||
overlay: null,
|
||
currentHomeworks: [],
|
||
rawRows: [],
|
||
loaded: false,
|
||
sectionName: '',
|
||
|
||
// 注入用户UID到所在小组的映射
|
||
userGroups: {
|
||
"5": ["教师团队", "5", ],
|
||
"6": ["教师团队", "6", ],
|
||
"7": ["教师团队", "7", ],
|
||
"8": ["教师团队", "8", ],
|
||
"18": ["教师团队", "18", ],
|
||
"20": ["克力周六1630CSP06", "20", ],
|
||
"23": ["23", ],
|
||
"29": ["杰森周日1045CSP06", "29", ],
|
||
"30": ["克力周六1630CSP06", "30", ],
|
||
"35": ["克力周六1630CSP06", "35", ],
|
||
"44": ["克力周六1630CSP06", "44", ],
|
||
"47": ["克力周六1630CSP06", "47", ],
|
||
"65": ["克力周六1630CSP06", "65", ],
|
||
"97": ["邓子周日0830CSP05", "97", ],
|
||
"99": ["邓子周日1400CSP05", "99", ],
|
||
"114": ["邓子周日0830CSP05", "114", ],
|
||
"117": ["邓子周日0830CSP05", "117", ],
|
||
"143": ["克力周六1630CSP06", "143", ],
|
||
"147": ["邓子周日1400CSP05", "147", ],
|
||
"148": ["148", ],
|
||
"161": ["克力周六1630CSP06", "161", ],
|
||
"210": ["邓子周日0830CSP05", "210", ],
|
||
"269": ["邓子周日1400CSP05", "269", ],
|
||
"306": ["教师团队", "306", ],
|
||
"419": ["克力周六1630CSP06", "419", ],
|
||
"508": ["教师团队", "508", ],
|
||
},
|
||
|
||
// 注入已报名用户信息,确保没有成绩的学生也显示0分
|
||
enrolledUsers: {
|
||
"5": "邓子老师",
|
||
"6": "克力老师",
|
||
"7": "六六老师",
|
||
"8": "茄子老师",
|
||
"18": "菠萝老师",
|
||
"20": "徐纯熙",
|
||
"23": "李宝桢",
|
||
"29": "李伯贤",
|
||
"30": "梁睿朗",
|
||
"35": "陆闻汐",
|
||
"44": "柯欣贝",
|
||
"47": "刘毅潇",
|
||
"65": "刘浩宇",
|
||
"97": "忧郁刘鹏",
|
||
"99": "袁中和",
|
||
"114": "旷家昊",
|
||
"117": "崔诺徽",
|
||
"143": "黄振轩",
|
||
"147": "朱铠骏",
|
||
"148": "夏江南",
|
||
"161": "林汪霖",
|
||
"210": "张祺琪",
|
||
"269": "黄柏淼",
|
||
"306": "坦克老师",
|
||
"419": "邢致远",
|
||
"508": "杰森老师",
|
||
},
|
||
|
||
// 全局映射图存入全局变量以便调取
|
||
sectionHWMap: {
|
||
"69aa506a27e54d3ad7ed7aae": [
|
||
{ id: "69aa7d6d27e54d3ad7ed9098", name: "📝 课堂练习" },
|
||
{ id: "69aa7dad27e54d3ad7ed9190", name: "📋 课后作业" },
|
||
{ id: "69aa807f27e54d3ad7ed93fc", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa507a27e54d3ad7ed7aaf": [
|
||
{ id: "69ad011b27e54d3ad7ef50c9", name: "📝 课堂练习" },
|
||
{ id: "69ad011d27e54d3ad7ef50dc", name: "📋 课后作业" },
|
||
{ id: "69ad011f27e54d3ad7ef50ef", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa508227e54d3ad7ed7ab0": [
|
||
{ id: "69ad011b27e54d3ad7ef50ca", name: "📝 课堂练习" },
|
||
{ id: "69ad011d27e54d3ad7ef50dd", name: "📋 课后作业" },
|
||
{ id: "69ad012027e54d3ad7ef50f0", name: "🚀 拓展练习" },
|
||
],
|
||
"69bcf81f8f8791c6f4b1fd4b": [
|
||
{ id: "69ad011e27e54d3ad7ef50de", name: "📝 课堂练习" },
|
||
{ id: "68eb17067fc8d7332da234fd", name: "📋 课后作业" },
|
||
],
|
||
"69aa508a27e54d3ad7ed7ab1": [
|
||
{ id: "69ad011b27e54d3ad7ef50cb", name: "📝 课堂练习" },
|
||
{ id: "69ad012027e54d3ad7ef50f1", name: "📋 课后作业" },
|
||
],
|
||
"69aa509227e54d3ad7ed7ab2": [
|
||
{ id: "69ad011c27e54d3ad7ef50cc", name: "📝 课堂练习" },
|
||
{ id: "69ad011e27e54d3ad7ef50df", name: "📋 课后作业" },
|
||
{ id: "69ad012027e54d3ad7ef50f2", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa509a27e54d3ad7ed7ab3": [
|
||
{ id: "69ad011c27e54d3ad7ef50cd", name: "📝 课堂练习" },
|
||
{ id: "69ad011e27e54d3ad7ef50e0", name: "📋 课后作业" },
|
||
{ id: "69ad012027e54d3ad7ef50f3", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa50a427e54d3ad7ed7ab4": [
|
||
{ id: "69ad011c27e54d3ad7ef50ce", name: "📝 课堂练习" },
|
||
{ id: "69ad011e27e54d3ad7ef50e1", name: "📋 课后作业" },
|
||
{ id: "69ad012027e54d3ad7ef50f4", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa50b727e54d3ad7ed7ab6": [
|
||
{ id: "69ad011c27e54d3ad7ef50cf", name: "📝 课堂练习" },
|
||
{ id: "69ad011e27e54d3ad7ef50e2", name: "📋 课后作业" },
|
||
{ id: "69ad012027e54d3ad7ef50f5", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa50c127e54d3ad7ed7ab7": [
|
||
{ id: "69ad011c27e54d3ad7ef50d0", name: "📝 课堂练习" },
|
||
],
|
||
"69aa50da27e54d3ad7ed7ab8": [
|
||
{ id: "6a068f3b1b95441efeea76de", name: "📝 课堂练习" },
|
||
{ id: "6a06a2ef1b95441efeea77b3", name: "📋 课后作业" },
|
||
],
|
||
"69aa50e227e54d3ad7ed7ab9": [
|
||
{ id: "69ad011c27e54d3ad7ef50d2", name: "📝 课堂练习" },
|
||
{ id: "69ad011e27e54d3ad7ef50e5", name: "📋 课后作业" },
|
||
],
|
||
"69aa50eb27e54d3ad7ed7aba": [
|
||
{ id: "69ad011c27e54d3ad7ef50d3", name: "📝 课堂练习" },
|
||
],
|
||
"69aa510427e54d3ad7ed7abb": [
|
||
{ id: "69ad011c27e54d3ad7ef50d4", name: "📝 课堂练习" },
|
||
{ id: "69ad011f27e54d3ad7ef50e7", name: "📋 课后作业" },
|
||
{ id: "69ad012127e54d3ad7ef50fa", name: "🚀 拓展练习" },
|
||
],
|
||
"69aa511727e54d3ad7ed7abc": [
|
||
],
|
||
"69aa512027e54d3ad7ed7abd": [
|
||
],
|
||
"69f423390ba22cb8a6853e3b": [
|
||
],
|
||
"69aa512927e54d3ad7ed7abe": [
|
||
],
|
||
"69aa513227e54d3ad7ed7abf": [
|
||
],
|
||
"69aa513e27e54d3ad7ed7ac0": [
|
||
],
|
||
"69b51cc0947e4b9371843ec5": [
|
||
{ id: "69b51cee947e4b9371843f27", name: "📝 课堂练习" },
|
||
],
|
||
},
|
||
|
||
openGlobalPanel(sectionId, title) {
|
||
if (!this.overlay) {
|
||
this.overlay = document.getElementById('gv-global-overlay');
|
||
// 点击遮罩层关闭
|
||
this.overlay.addEventListener('click', (e) => {
|
||
if (e.target === this.overlay) this.close();
|
||
});
|
||
document.getElementById('gv-hide-teachers').addEventListener('change', () => {
|
||
this.renderTable();
|
||
});
|
||
document.getElementById('gv-group-filter').addEventListener('change', () => {
|
||
this.renderTable();
|
||
});
|
||
}
|
||
|
||
this.currentHomeworks = this.sectionHWMap[sectionId] || [];
|
||
this.sectionName = title;
|
||
document.getElementById('gv-global-title').innerHTML = `📊 【${title}】汇总成绩单`;
|
||
|
||
this.overlay.style.display = 'flex';
|
||
this.loadData();
|
||
},
|
||
|
||
close() {
|
||
if (this.overlay) {
|
||
this.overlay.style.display = 'none';
|
||
}
|
||
},
|
||
|
||
async loadData() {
|
||
const loading = document.getElementById('gv-loading');
|
||
const table = document.getElementById('gv-table');
|
||
const empty = document.getElementById('gv-empty');
|
||
const theadTr = document.getElementById('gv-thead-tr');
|
||
|
||
loading.style.display = 'block';
|
||
table.style.display = 'none';
|
||
empty.style.display = 'none';
|
||
this.rawRows = [];
|
||
this.loaded = false;
|
||
|
||
try {
|
||
if (this.currentHomeworks.length === 0) {
|
||
throw new Error('当前章节没有关联任何作业,无法合并成绩。');
|
||
}
|
||
|
||
let domainPrefix = '';
|
||
const match = window.location.pathname.match(/^(\/d\/[^\/]+)/);
|
||
if (match) domainPrefix = match[1];
|
||
|
||
let thHtml = '<th style="text-align:center;">序号</th><th style="text-align:center;">姓名</th>';
|
||
this.currentHomeworks.forEach(hw => {
|
||
thHtml += `<th style="text-align:center;"><a href="${domainPrefix}/homework/${hw.id}/scoreboard" target="_blank" style="color: #4285f4; text-decoration: none;" title="点击查看此作业成绩表">${hw.name}</a></th>`;
|
||
});
|
||
thHtml += '<th style="text-align:center;">总分</th>';
|
||
theadTr.innerHTML = thHtml;
|
||
|
||
const promises = this.currentHomeworks.map(hw =>
|
||
fetch(`${domainPrefix}/homework/${hw.id}/scoreboard`, {
|
||
headers: { 'Accept': 'application/json' }
|
||
}).then(async res => {
|
||
if (!res.ok) {
|
||
const fallback = await fetch(`${domainPrefix}/contest/${hw.id}/scoreboard`, {
|
||
headers: { 'Accept': 'application/json' }
|
||
});
|
||
if (!fallback.ok) return { rows: [] };
|
||
return fallback.json();
|
||
}
|
||
return res.json();
|
||
}).catch(e => ({ rows: [] }))
|
||
);
|
||
|
||
const results = await Promise.all(promises);
|
||
const userMap = {};
|
||
|
||
// 预先填充所有已加入课程的学生
|
||
Object.keys(this.enrolledUsers).forEach(uid => {
|
||
userMap[uid] = {
|
||
uid: String(uid),
|
||
name: this.enrolledUsers[uid],
|
||
scores: new Array(this.currentHomeworks.length).fill(0)
|
||
};
|
||
});
|
||
|
||
results.forEach((sbData, hwIndex) => {
|
||
const rows = sbData.rows || [];
|
||
const validRows = rows.filter(r => r && r.some(c => c && c.type === 'user' && c.raw));
|
||
|
||
validRows.forEach(r => {
|
||
const userCell = r.find(c => c.type === 'user');
|
||
const scoreCell = r.find(c => c.type === 'string' || c.type === 'total_score' || typeof c.value === 'number');
|
||
|
||
if (!userCell || !userCell.raw) return;
|
||
const uid = String(userCell.raw);
|
||
|
||
let nameAttr = userCell.value || uid;
|
||
if (typeof nameAttr === 'string') {
|
||
const tmp = document.createElement('div');
|
||
tmp.innerHTML = nameAttr;
|
||
nameAttr = tmp.textContent || tmp.innerText || uid;
|
||
}
|
||
if (nameAttr.includes('@')) nameAttr = nameAttr.split('@')[1];
|
||
|
||
if (!userMap[uid]) {
|
||
userMap[uid] = {
|
||
uid: uid,
|
||
name: nameAttr,
|
||
scores: new Array(this.currentHomeworks.length).fill(0)
|
||
};
|
||
}
|
||
|
||
let scoreVal = scoreCell ? scoreCell.value : 0;
|
||
if (typeof scoreVal !== 'number') scoreVal = parseInt(scoreVal) || 0;
|
||
userMap[uid].scores[hwIndex] = scoreVal;
|
||
});
|
||
});
|
||
|
||
this.rawRows = Object.values(userMap);
|
||
this.loaded = true;
|
||
this.renderTable();
|
||
|
||
} catch (e) {
|
||
loading.style.display = 'none';
|
||
empty.textContent = e.message || '获取成绩数据失败';
|
||
empty.style.display = 'block';
|
||
}
|
||
},
|
||
|
||
renderTable() {
|
||
const loading = document.getElementById('gv-loading');
|
||
const table = document.getElementById('gv-table');
|
||
const empty = document.getElementById('gv-empty');
|
||
const tbody = document.getElementById('gv-tbody');
|
||
const hideTeachers = document.getElementById('gv-hide-teachers').checked;
|
||
const selectedGroup = document.getElementById('gv-group-filter').value;
|
||
|
||
loading.style.display = 'none';
|
||
|
||
let displayRows = this.rawRows;
|
||
if (hideTeachers) {
|
||
displayRows = displayRows.filter(r => !r.name.includes('老师'));
|
||
}
|
||
if (selectedGroup) {
|
||
displayRows = displayRows.filter(r => {
|
||
const groups = this.userGroups[r.uid] || [];
|
||
return groups.includes(selectedGroup);
|
||
});
|
||
}
|
||
|
||
displayRows.sort((a, b) => {
|
||
const sumA = a.scores.reduce((sum, s) => sum + s, 0);
|
||
const sumB = b.scores.reduce((sum, s) => sum + s, 0);
|
||
return sumB - sumA;
|
||
});
|
||
|
||
if (displayRows.length === 0) {
|
||
table.style.display = 'none';
|
||
empty.textContent = '没有找到符合条件的成绩记录';
|
||
empty.style.display = 'block';
|
||
return;
|
||
}
|
||
|
||
empty.style.display = 'none';
|
||
table.style.display = 'table';
|
||
|
||
let html = '';
|
||
displayRows.forEach((row, idx) => {
|
||
let total = 0;
|
||
let scoresHtml = '';
|
||
row.scores.forEach(s => {
|
||
total += s;
|
||
let color = '#333';
|
||
if (s >= 100) color = '#25ad40';
|
||
else if (s === 0) color = '#999';
|
||
else if (s > 0) color = '#f39c12';
|
||
scoresHtml += `<td style="color: ${color}; font-weight: ${s > 0 ? 'bold' : 'normal'}; text-align: center;">${s}</td>`;
|
||
});
|
||
|
||
html += `<tr style="border-bottom: 1px solid #f0f0f0;">
|
||
<td style="text-align: center; padding: 10px;">${idx + 1}</td>
|
||
<td style="text-align: center; padding: 10px;">${row.name}</td>
|
||
${scoresHtml}
|
||
<td style="font-weight: bold; color: #1a1a2e; text-align: center; padding: 10px; font-size: 1.1em;">${total}</td>
|
||
</tr>`;
|
||
});
|
||
tbody.innerHTML = html;
|
||
},
|
||
|
||
exportCSV() {
|
||
if (!this.loaded || this.rawRows.length === 0) return alert('没有数据可导出');
|
||
|
||
const hideTeachers = document.getElementById('gv-hide-teachers').checked;
|
||
const selectedGroup = document.getElementById('gv-group-filter').value;
|
||
|
||
let exportRows = this.rawRows;
|
||
if (hideTeachers) {
|
||
exportRows = exportRows.filter(r => !r.name.includes('老师'));
|
||
}
|
||
if (selectedGroup) {
|
||
exportRows = exportRows.filter(r => {
|
||
const groups = this.userGroups[r.uid] || [];
|
||
return groups.includes(selectedGroup);
|
||
});
|
||
}
|
||
|
||
exportRows.sort((a, b) => {
|
||
const sumA = a.scores.reduce((sum, s) => sum + s, 0);
|
||
const sumB = b.scores.reduce((sum, s) => sum + s, 0);
|
||
return sumB - sumA;
|
||
});
|
||
|
||
let header = ['序号', '姓名'];
|
||
this.currentHomeworks.forEach(hw => header.push(hw.name));
|
||
header.push('总分');
|
||
|
||
let csvContent = "\uFEFF" + header.join(',') + '\n';
|
||
|
||
exportRows.forEach((row, idx) => {
|
||
const total = row.scores.reduce((sum, s) => sum + s, 0);
|
||
const rowData = [
|
||
idx + 1,
|
||
`"${row.name.replace(/"/g, '""')}"`,
|
||
...row.scores,
|
||
total
|
||
];
|
||
csvContent += rowData.join(',') + '\n';
|
||
});
|
||
|
||
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
|
||
const link = document.createElement("a");
|
||
const url = URL.createObjectURL(blob);
|
||
link.setAttribute("href", url);
|
||
link.setAttribute("download", `合并成绩单_${this.sectionName}.csv`);
|
||
document.body.appendChild(link);
|
||
link.click();
|
||
document.body.removeChild(link);
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<div class="row" data-sticky-parent> <!-- 管理员可见的用户筛选面板 - 复用训练模块结构 -->
|
||
<div class="small-12 medium-2 columns" data-sticky="large">
|
||
<div class="section side training__users">
|
||
<!-- 用户组下拉选择 -->
|
||
<div class="section__header" style="padding: 10px 15px;">
|
||
<select class="select" id="groupFilter" style="width: 100%;">
|
||
<option value="">全部</option>
|
||
<option value="克力周六1630CSP06">克力周六1630CSP06</option>
|
||
<option value="教师团队">教师团队</option>
|
||
<option value="杰森周日1045CSP06">杰森周日1045CSP06</option>
|
||
<option value="邓子周日0830CSP05">邓子周日0830CSP05</option>
|
||
<option value="邓子周日1400CSP05">邓子周日1400CSP05</option>
|
||
</select>
|
||
</div>
|
||
|
||
<!-- 选择用户 -->
|
||
<div class="section__header" style="padding: 10px 15px; border-top: 1px solid #eee;">
|
||
<input type="text" class="textbox search__input" id="userSearch" placeholder="选择用户" style="width: 100%;">
|
||
</div>
|
||
|
||
<!-- 用户列表 -->
|
||
<div class="section__body" style="padding: 0;">
|
||
<ul class="menu training__user-list" id="userList">
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,5"
|
||
data-uid="5" data-uname="邓子老师"
|
||
data-displayname="邓子老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=5">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/5/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
邓子老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,6"
|
||
data-uid="6" data-uname="克力老师"
|
||
data-displayname="克力老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=6">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/6/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
克力老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,7"
|
||
data-uid="7" data-uname="六六老师"
|
||
data-displayname="六六老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=7">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/ba21a5bb5a53736dcd3224f55973f66a?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
六六老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,8"
|
||
data-uid="8" data-uname="茄子老师"
|
||
data-displayname="茄子老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=8">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/8/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
茄子老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,18"
|
||
data-uid="18" data-uname="菠萝老师"
|
||
data-displayname="菠萝老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=18">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//q1.qlogo.cn/g?b=qq&nk=735311015&s=160" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
菠萝老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,20"
|
||
data-uid="20" data-uname="徐纯熙"
|
||
data-displayname="徐纯熙">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=20">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/20/.avatar.jpeg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
徐纯熙
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="23"
|
||
data-uid="23" data-uname="李宝桢"
|
||
data-displayname="李宝桢">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=23">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/23/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
李宝桢
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="杰森周日1045CSP06,29"
|
||
data-uid="29" data-uname="李伯贤"
|
||
data-displayname="李伯贤">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=29">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/29/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
李伯贤
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,30"
|
||
data-uid="30" data-uname="梁睿朗"
|
||
data-displayname="梁睿朗">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=30">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//q1.qlogo.cn/g?b=qq&nk=3982753647&s=160" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
梁睿朗
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,35"
|
||
data-uid="35" data-uname="陆闻汐"
|
||
data-displayname="陆闻汐">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=35">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/35/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
陆闻汐
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,44"
|
||
data-uid="44" data-uname="柯欣贝"
|
||
data-displayname="柯欣贝">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=44">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/44/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
柯欣贝
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,47"
|
||
data-uid="47" data-uname="刘毅潇"
|
||
data-displayname="刘毅潇">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=47">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/47/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
刘毅潇
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,65"
|
||
data-uid="65" data-uname="刘浩宇"
|
||
data-displayname="刘浩宇">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=65">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/65/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
刘浩宇
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日0830CSP05,97"
|
||
data-uid="97" data-uname="刘鹏"
|
||
data-displayname="忧郁刘鹏">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=97">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/97/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
忧郁刘鹏 (刘鹏)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日1400CSP05,99"
|
||
data-uid="99" data-uname="袁中和"
|
||
data-displayname="袁中和">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=99">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/99/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
袁中和
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日0830CSP05,114"
|
||
data-uid="114" data-uname="旷家昊"
|
||
data-displayname="旷家昊">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=114">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/114/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
旷家昊
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日0830CSP05,117"
|
||
data-uid="117" data-uname="崔诺徽"
|
||
data-displayname="崔诺徽">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=117">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/117/.avatar.jpg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
崔诺徽
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,143"
|
||
data-uid="143" data-uname="黄振轩"
|
||
data-displayname="黄振轩">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=143">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/143/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
黄振轩
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日1400CSP05,147"
|
||
data-uid="147" data-uname="朱铠骏"
|
||
data-displayname="朱铠骏">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=147">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/147/.avatar.jpeg" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
朱铠骏
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="148"
|
||
data-uid="148" data-uname="夏江南"
|
||
data-displayname="夏江南">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=148">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/3b8bf7c2a92e879629fb2d49279729cb?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
夏江南
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,161"
|
||
data-uid="161" data-uname="林汪霖"
|
||
data-displayname="林汪霖">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=161">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/4a4b345763b55eb045c6b60b58e52230?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
林汪霖
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日0830CSP05,210"
|
||
data-uid="210" data-uname="张祺琪"
|
||
data-displayname="张祺琪">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=210">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="/file/210/.avatar.png" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
张祺琪
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="邓子周日1400CSP05,269"
|
||
data-uid="269" data-uname="黄柏淼"
|
||
data-displayname="黄柏淼">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=269">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/3a3df1a864ea5ed037d5173896bcbabe?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
黄柏淼
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,306"
|
||
data-uid="306" data-uname="坦克老师"
|
||
data-displayname="坦克老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=306">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/055747f1fad5aeda179a92c345c270c1?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
坦克老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="克力周六1630CSP06,419"
|
||
data-uid="419" data-uname="邢致远"
|
||
data-displayname="邢致远">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=419">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/c102203f1c4e169b3a07e9a8a9afaba0?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
邢致远
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="menu__item enroll_user_menu_item "
|
||
data-groups="教师团队,508"
|
||
data-uid="508" data-uname="杰森老师"
|
||
data-displayname="杰森老师">
|
||
<a class="menu__link training__user-item" data-pjax="true" href="./6975984d71e15346c9e8fdc2?uid=508">
|
||
<span class="training__user-avatar">
|
||
<img class="small user-profile-avatar v-center" loading="lazy"
|
||
src="//cravatar.cn/avatar/9edc7c6e91fe98033e6e95395579eb87?d=mm&s=64" width="24" height="24">
|
||
</span>
|
||
<span class="training__user-name">
|
||
杰森老师
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="courseContent"
|
||
class="medium-7 columns">
|
||
<div data-fragment-id="course_detail">
|
||
<div class="section">
|
||
<div class="section__header">
|
||
<h1 class="section__title"><a href="/course/6975984d71e15346c9e8fdc2">课程: 2026 春季班 CSP05</a></h1>
|
||
</div>
|
||
<div class="section__body typo richmedia">
|
||
<p>2026 春季班 CSP05</p>
|
||
<p>学生版教案:<a href="https://www.wolai.com/vePMRnZWtvrn7HAgnnfK1J">https://www.wolai.com/vePMRnZWtvrn7HAgnnfK1J</a></p>
|
||
<p>高精度:
|
||
<a href="https://www.wolai.com/4BxJ7Fksn5q5FSiLotwrxs">https://www.wolai.com/4BxJ7Fksn5q5FSiLotwrxs</a></p>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section">
|
||
<div class="section__header">
|
||
<h1 class="section__title">章节</h1>
|
||
</div>
|
||
<div class="section__body" style="padding-top: 0;">
|
||
<div class="notice-box">
|
||
💡 请先加入课程后查看详细题目列表
|
||
</div>
|
||
|
||
<ul class="periods">
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa506a27e54d3ad7ed7aae">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa506a27e54d3ad7ed7aae', 'CSP05-01 知识回顾');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa506a27e54d3ad7ed7aae/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-01 知识回顾</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202512C3T3</span>
|
||
<span class="lesson-name">密码强度</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202512C3T4</span>
|
||
<span class="lesson-name">小杨的智慧购物</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202512C4T3</span>
|
||
<span class="lesson-name">建造</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202512C4T4</span>
|
||
<span class="lesson-name">优先购买</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202509C4T3</span>
|
||
<span class="lesson-name">排兵布阵</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202509C3T3</span>
|
||
<span class="lesson-name">数组清零</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202506C3T3</span>
|
||
<span class="lesson-name">奇偶校验</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202509C4T4</span>
|
||
<span class="lesson-name">最长连续段</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202506C3T4</span>
|
||
<span class="lesson-name">分糖果</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202503C3T3</span>
|
||
<span class="lesson-name">2025</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202503C3T4</span>
|
||
<span class="lesson-name">词频统计</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202506C4T3</span>
|
||
<span class="lesson-name">画布裁剪</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202506C4T4</span>
|
||
<span class="lesson-name">排序</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202503C4T3</span>
|
||
<span class="lesson-name">荒地开垦</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202503C4T4</span>
|
||
<span class="lesson-name">二阶矩阵</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa507a27e54d3ad7ed7aaf">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa507a27e54d3ad7ed7aaf', 'CSP05-02 递归改造循环');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa507a27e54d3ad7ed7aaf/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-02 递归改造循环</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1696</span>
|
||
<span class="lesson-name">请输出 1~n 之间所有的整数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1002</span>
|
||
<span class="lesson-name">编程求解1+2+3+...+n</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1058</span>
|
||
<span class="lesson-name">求出100至999范围内的所有水仙花数。</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1083</span>
|
||
<span class="lesson-name">回文数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1082</span>
|
||
<span class="lesson-name">猴子吃桃子</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1697</span>
|
||
<span class="lesson-name">请输出 n~1 之间所有的整数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1244</span>
|
||
<span class="lesson-name">请问一个正整数能够整除几次2</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1265</span>
|
||
<span class="lesson-name">爱因斯坦的数学题</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1053</span>
|
||
<span class="lesson-name">求100+97+……+4+1的值。</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1241</span>
|
||
<span class="lesson-name">角谷猜想</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1261</span>
|
||
<span class="lesson-name">韩信点兵</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1078</span>
|
||
<span class="lesson-name">求恰好使s=1+1/2+1/3+…+1/n的值大于X时n的值。</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1108</span>
|
||
<span class="lesson-name">正整数N转换成一个二进制数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1395</span>
|
||
<span class="lesson-name">小丽找数?</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa508227e54d3ad7ed7ab0">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa508227e54d3ad7ed7ab0', 'CSP05-03 递归基础');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa508227e54d3ad7ed7ab0/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-03 递归基础</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1238</span>
|
||
<span class="lesson-name">统计每个月兔子的总数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C302A2</span>
|
||
<span class="lesson-name">递归求反 </span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1165</span>
|
||
<span class="lesson-name">Hermite多项式</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1088</span>
|
||
<span class="lesson-name">求两个数M和N的最大公约数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1514</span>
|
||
<span class="lesson-name">数根</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C305B2</span>
|
||
<span class="lesson-name">求阶乘</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1087</span>
|
||
<span class="lesson-name">两个数M和N的最小公倍数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C305B3</span>
|
||
<span class="lesson-name">阿克曼(Ackmann)函数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1164</span>
|
||
<span class="lesson-name">digit函数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C303A2</span>
|
||
<span class="lesson-name">母牛养殖 </span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C303A5</span>
|
||
<span class="lesson-name">爬楼梯</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C303A4</span>
|
||
<span class="lesson-name">爬楼梯</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1562</span>
|
||
<span class="lesson-name">加数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1208</span>
|
||
<span class="lesson-name">螺旋方阵</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1209</span>
|
||
<span class="lesson-name">分数求和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69bcf81f8f8791c6f4b1fd4b">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69bcf81f8f8791c6f4b1fd4b', 'CSP05-04 递归与进制转换');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69bcf81f8f8791c6f4b1fd4b/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-04 递归与进制转换</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1108</span>
|
||
<span class="lesson-name">正整数N转换成一个二进制数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1289</span>
|
||
<span class="lesson-name">正整数n转换为16进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1290</span>
|
||
<span class="lesson-name">二进制转换十进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1288</span>
|
||
<span class="lesson-name">正整数n转换为8进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1291</span>
|
||
<span class="lesson-name">八进制转十进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1293</span>
|
||
<span class="lesson-name">二进制转换八进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1294</span>
|
||
<span class="lesson-name">二进制转十六进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1359</span>
|
||
<span class="lesson-name">八进制转换二进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1306</span>
|
||
<span class="lesson-name">十六进制转二进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1547</span>
|
||
<span class="lesson-name">小X转进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1415</span>
|
||
<span class="lesson-name">10进制转D进制</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1295</span>
|
||
<span class="lesson-name">十六进制转换</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa508a27e54d3ad7ed7ab1">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa508a27e54d3ad7ed7ab1', 'CSP05-05 递归应用');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa508a27e54d3ad7ed7ab1/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-05 递归应用</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1222</span>
|
||
<span class="lesson-name">汉诺塔(1)(T)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1223</span>
|
||
<span class="lesson-name">汉诺塔的移动次数(T)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2417</span>
|
||
<span class="lesson-name">汉诺塔(2)(T)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2419</span>
|
||
<span class="lesson-name">汉诺塔(3)(T)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2420</span>
|
||
<span class="lesson-name">汉诺塔(4)(F)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1209</span>
|
||
<span class="lesson-name">分数求和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1210</span>
|
||
<span class="lesson-name">因子分解</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1211</span>
|
||
<span class="lesson-name">判断元素是否存在</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1316</span>
|
||
<span class="lesson-name">数的计数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1200</span>
|
||
<span class="lesson-name">分解因数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">K1198</span>
|
||
<span class="lesson-name">逆波兰表达式</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa509227e54d3ad7ed7ab2">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa509227e54d3ad7ed7ab2', 'CSP05-06 初等数论1');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa509227e54d3ad7ed7ab2/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-06 初等数论1</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0504A1</span>
|
||
<span class="lesson-name">最大公约数与最小公倍数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0504A2</span>
|
||
<span class="lesson-name">判断素数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0504A3</span>
|
||
<span class="lesson-name">质因数分解</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0504A4</span>
|
||
<span class="lesson-name">区间互质对数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0504A5</span>
|
||
<span class="lesson-name">最简分数化简</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">A002</span>
|
||
<span class="lesson-name">求因数和、因数个数2</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1080</span>
|
||
<span class="lesson-name">质因子</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202309C5T3</span>
|
||
<span class="lesson-name">因数分解(F)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1664</span>
|
||
<span class="lesson-name">质因数分解</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2140</span>
|
||
<span class="lesson-name">质因子3</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2138</span>
|
||
<span class="lesson-name">乘积的约数个数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2139</span>
|
||
<span class="lesson-name">乘积的约数和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2578</span>
|
||
<span class="lesson-name">约数求和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202312C5T3</span>
|
||
<span class="lesson-name">小杨的幸运数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa509a27e54d3ad7ed7ab3">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa509a27e54d3ad7ed7ab3', 'CSP05-07 初等数论2');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa509a27e54d3ad7ed7ab3/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-07 初等数论2</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505A1</span>
|
||
<span class="lesson-name">筛出指定范围质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505A2</span>
|
||
<span class="lesson-name">质数计数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505A3</span>
|
||
<span class="lesson-name">第k个质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505A4</span>
|
||
<span class="lesson-name">孪生质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505A5</span>
|
||
<span class="lesson-name">利用最小质因数快速分解</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505B1</span>
|
||
<span class="lesson-name">哥德巴赫猜想验证</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505B2</span>
|
||
<span class="lesson-name">质数筛统计偶数与奇数质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505B3</span>
|
||
<span class="lesson-name">相邻质数间隔</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C1</span>
|
||
<span class="lesson-name">欧拉函数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C2</span>
|
||
<span class="lesson-name">莫比乌斯函数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C3</span>
|
||
<span class="lesson-name">整数分块</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C4</span>
|
||
<span class="lesson-name">区间筛</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C5</span>
|
||
<span class="lesson-name">最大质因数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C6</span>
|
||
<span class="lesson-name">质数密度分析</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0505C7</span>
|
||
<span class="lesson-name">梅森质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2071</span>
|
||
<span class="lesson-name">素数个数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2136</span>
|
||
<span class="lesson-name">筛素数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1838</span>
|
||
<span class="lesson-name">分解质因数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1942</span>
|
||
<span class="lesson-name">回文质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2007</span>
|
||
<span class="lesson-name">半质数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50a427e54d3ad7ed7ab4">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50a427e54d3ad7ed7ab4', 'CSP05-08 初等数论3');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50a427e54d3ad7ed7ab4/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-08 初等数论3</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C5T3</span>
|
||
<span class="lesson-name">有限不循环小数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202309C5T3</span>
|
||
<span class="lesson-name">因数分解(F)</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202406C5T4</span>
|
||
<span class="lesson-name">小杨的幸运数字</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202412C5T3</span>
|
||
<span class="lesson-name">奇妙数字</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202312C5T3</span>
|
||
<span class="lesson-name">小杨的幸运数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202403C5T4</span>
|
||
<span class="lesson-name">B-smooth数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202506C5T4</span>
|
||
<span class="lesson-name">最大公因数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506B1</span>
|
||
<span class="lesson-name">丑数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506B2</span>
|
||
<span class="lesson-name">整除个数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506B3</span>
|
||
<span class="lesson-name">约数比较</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506A1</span>
|
||
<span class="lesson-name">求因数个数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506A2</span>
|
||
<span class="lesson-name">求因数之和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506A3</span>
|
||
<span class="lesson-name">完全数判断</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506A4</span>
|
||
<span class="lesson-name">因数个数最多的数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506A5</span>
|
||
<span class="lesson-name">最长连续整除子序列</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C1</span>
|
||
<span class="lesson-name">亲和数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C2</span>
|
||
<span class="lesson-name">高度合成数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C3</span>
|
||
<span class="lesson-name">整除分块</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C4</span>
|
||
<span class="lesson-name">数论分组</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C5</span>
|
||
<span class="lesson-name">因子链</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C6</span>
|
||
<span class="lesson-name">欧拉函数求和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">CSP0506C7</span>
|
||
<span class="lesson-name">拓展欧几里得求逆元</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50b727e54d3ad7ed7ab6">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50b727e54d3ad7ed7ab6', 'CSP05-09 二分查找');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50b727e54d3ad7ed7ab6/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-09 二分查找</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1236</span>
|
||
<span class="lesson-name">二分查找</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1894</span>
|
||
<span class="lesson-name">二分查找左侧边界</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1895</span>
|
||
<span class="lesson-name">二分查找右侧边界</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1898</span>
|
||
<span class="lesson-name">同时出现的数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1899</span>
|
||
<span class="lesson-name">最满意的方案</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C5T4</span>
|
||
<span class="lesson-name">找数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1896</span>
|
||
<span class="lesson-name">二分查找满足条件的数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2078</span>
|
||
<span class="lesson-name">起止位置</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1542</span>
|
||
<span class="lesson-name">小X算排名</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1902</span>
|
||
<span class="lesson-name">最少的修改次数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50c127e54d3ad7ed7ab7">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50c127e54d3ad7ed7ab7', 'CSP05-10 二分答案');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50c127e54d3ad7ed7ab7/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-10 二分答案</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1908</span>
|
||
<span class="lesson-name">伐木工</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1909</span>
|
||
<span class="lesson-name">跳石头</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202512C5T3</span>
|
||
<span class="lesson-name">数字移动</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50da27e54d3ad7ed7ab8">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50da27e54d3ad7ed7ab8', 'CSP05-11 二分综合');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50da27e54d3ad7ed7ab8/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-11 二分综合</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">KH202512T8</span>
|
||
<span class="lesson-name">两数之和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1561</span>
|
||
<span class="lesson-name">买木头</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1912</span>
|
||
<span class="lesson-name">最小的空旷指数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2217</span>
|
||
<span class="lesson-name">找数字的位置</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2662</span>
|
||
<span class="lesson-name">指定数出现的次数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2240</span>
|
||
<span class="lesson-name">和为给定数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50e227e54d3ad7ed7ab9">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50e227e54d3ad7ed7ab9', 'CSP05-12 高精度加减');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50e227e54d3ad7ed7ab9/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-12 高精度加减</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906A1</span>
|
||
<span class="lesson-name">高精度算法一 - 黑店一</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906A2</span>
|
||
<span class="lesson-name">高精度算法一 - 黑店二</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906A3</span>
|
||
<span class="lesson-name">高精度算法一 - 不是黑店一</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906A4</span>
|
||
<span class="lesson-name">高精度算法一 - 不是黑店二</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906B1</span>
|
||
<span class="lesson-name">高精度算法一-大数加法</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906B2</span>
|
||
<span class="lesson-name">高精度算法一 - A+B+C</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C906B3</span>
|
||
<span class="lesson-name">高精度算法一 - 大数减法</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa50eb27e54d3ad7ed7aba">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa50eb27e54d3ad7ed7aba', 'CSP05-13 高精度乘除');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa50eb27e54d3ad7ed7aba/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-13 高精度乘除</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907A1</span>
|
||
<span class="lesson-name">超级黑店一</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907A2</span>
|
||
<span class="lesson-name">超级黑店二</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907B1</span>
|
||
<span class="lesson-name">9的余数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907B2</span>
|
||
<span class="lesson-name">计算2的N次方</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907B3</span>
|
||
<span class="lesson-name">求10000以内n的阶乘</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">C907B4</span>
|
||
<span class="lesson-name">[NOIP1998]阶乘之和</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa510427e54d3ad7ed7abb">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa510427e54d3ad7ed7abb', 'CSP05-14 贪心算法');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa510427e54d3ad7ed7abb/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-14 贪心算法</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 0%;">
|
||
<span class="progress-bar-text">0%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2735</span>
|
||
<span class="lesson-name">贪心算法一 - 小天买辣条</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2736</span>
|
||
<span class="lesson-name">贪心算法一 - 书架</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2737</span>
|
||
<span class="lesson-name">贪心算法一 - 最小距离字符串</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2738</span>
|
||
<span class="lesson-name">贪心算法一 - 组队</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2739</span>
|
||
<span class="lesson-name">贪心算法一 - 采购奖品</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📋 课后作业
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2740</span>
|
||
<span class="lesson-name">贪心算法一 - 压缩歌曲</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2741</span>
|
||
<span class="lesson-name">贪心算法一 - 奶酪工厂</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P2742</span>
|
||
<span class="lesson-name">贪心算法一 - 图书管理员</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
🚀 拓展练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">P1001</span>
|
||
<span class="lesson-name">熟悉一下Online Judge的环境</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa511727e54d3ad7ed7abc">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa511727e54d3ad7ed7abc', 'CSP05-15 分治算法基础');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa511727e54d3ad7ed7abc/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-15 分治算法基础</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa512027e54d3ad7ed7abd">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa512027e54d3ad7ed7abd', 'CSP05-16 分治算法应用');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa512027e54d3ad7ed7abd/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-16 分治算法应用</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69f423390ba22cb8a6853e3b">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69f423390ba22cb8a6853e3b', 'CSP05-17 链表');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69f423390ba22cb8a6853e3b/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-17 链表</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa512927e54d3ad7ed7abe">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa512927e54d3ad7ed7abe', 'CSP05-18 五级真题训练1');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa512927e54d3ad7ed7abe/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-18 五级真题训练1</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa513227e54d3ad7ed7abf">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa513227e54d3ad7ed7abf', 'CSP05-19 五级真题训练2');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa513227e54d3ad7ed7abf/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-19 五级真题训练2</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69aa513e27e54d3ad7ed7ac0">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69aa513e27e54d3ad7ed7ac0', 'CSP05-20 阶段测试');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69aa513e27e54d3ad7ed7ac0/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-20 阶段测试</h2>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li>
|
||
<div class="period-card locked" data-id="69b51cc0947e4b9371843ec5">
|
||
<div class="period-header">
|
||
<span class="period-toggle">▶</span>
|
||
|
||
<div class="period-actions">
|
||
<a href="javascript:;" class="btn-edit"
|
||
onclick="event.stopPropagation(); window.CourseGradeViewer.openGlobalPanel('69b51cc0947e4b9371843ec5', 'CSP05-02 克力班级单独检测');"
|
||
style="margin-right: 8px;">📊 成绩</a>
|
||
<a href="/course/6975984d71e15346c9e8fdc2/s/69b51cc0947e4b9371843ec5/edit" class="btn-edit"
|
||
onclick="event.stopPropagation();">编辑</a>
|
||
</div>
|
||
|
||
<div class="period-metadata">
|
||
<h2 class="period-title">CSP05-02 克力班级单独检测</h2>
|
||
<div class="period-progress">
|
||
<div class="progress-bar-outer">
|
||
<div class="progress-bar-inner" style="width: 50%;">
|
||
<span class="progress-bar-text">50%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="period-body">
|
||
<div class="period-divider"></div>
|
||
|
||
<ol class="chapter-list">
|
||
<li class="chapter-item">
|
||
|
||
<div class="hw-group">
|
||
<h4 class="hw-group__title">
|
||
📝 课堂练习
|
||
</h4>
|
||
<ol class="lesson-list">
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C1T3</span>
|
||
<span class="lesson-name">交朋友</span>
|
||
</span>
|
||
|
||
<a href="/record/69bb94bc8f8791c6f4b1c30c" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C1T4</span>
|
||
<span class="lesson-name">数字替换</span>
|
||
</span>
|
||
|
||
<a href="/record/69bb94d88f8791c6f4b1c329" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C2T3</span>
|
||
<span class="lesson-name">数数</span>
|
||
</span>
|
||
|
||
<a href="/record/69bb963a8f8791c6f4b1c395" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C2T4</span>
|
||
<span class="lesson-name">画画</span>
|
||
</span>
|
||
|
||
<a href="/record/69bb96ee8f8791c6f4b1c3f8" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C3T3</span>
|
||
<span class="lesson-name">二进制回文串</span>
|
||
</span>
|
||
|
||
<a href="/record/69bb985c8f8791c6f4b1c47e" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C3T4</span>
|
||
<span class="lesson-name">凯撒密码</span>
|
||
</span>
|
||
|
||
<a href="/record/69bbbb258f8791c6f4b1cf6c" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C4T3</span>
|
||
<span class="lesson-name">山之谷</span>
|
||
</span>
|
||
|
||
<a href="/record/69bbbdfe8f8791c6f4b1cfb4" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C4T4</span>
|
||
<span class="lesson-name">礼盒排序</span>
|
||
</span>
|
||
|
||
<a href="/record/69bbc4aa8f8791c6f4b1d01c" target="_blank"
|
||
onclick="event.stopPropagation();" class="lesson-status status-ac"
|
||
title="完全正确 (Accepted)">✓</a>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C5T3</span>
|
||
<span class="lesson-name">有限不循环小数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C5T4</span>
|
||
<span class="lesson-name">找数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C6T3</span>
|
||
<span class="lesson-name">选数</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C6T4</span>
|
||
<span class="lesson-name">完全二叉树</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C7T3</span>
|
||
<span class="lesson-name">拆分</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C7T4</span>
|
||
<span class="lesson-name">物流网络</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C8T3</span>
|
||
<span class="lesson-name">消息查找</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
<li class="lesson-item">
|
||
<span style="flex: 1; display: flex; align-items: center; gap: 10px;">
|
||
<span class="lesson-type">GESP202603C8T4</span>
|
||
<span class="lesson-name">子图最短路</span>
|
||
</span>
|
||
|
||
<span class="lesson-status status-pending">○</span>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
|
||
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</div> </div>
|
||
|
||
<div class="medium-3 columns" data-sticky="large">
|
||
<div class="section side">
|
||
<ol class="menu">
|
||
<li class="menu__item">
|
||
<form action="" method="POST">
|
||
<input type="hidden" name="operation" value="enroll">
|
||
<button class="menu__link" type="submit">
|
||
<span class="icon icon-add"></span> 参加课程
|
||
</button>
|
||
</form>
|
||
</li>
|
||
<li class="menu__item"><a class="menu__link" href="/course/6975984d71e15346c9e8fdc2/edit">
|
||
<span class="icon icon-edit"></span> 编辑
|
||
</a></li>
|
||
<li class="menu__item"><a class="menu__link" href="/course/6975984d71e15346c9e8fdc2/s/create">
|
||
<span class="icon icon-add"></span> 添加章
|
||
</a></li>
|
||
<li class="menu__seperator"></li>
|
||
</ol>
|
||
<div class="section__body typo">
|
||
<dl class="large horizontal">
|
||
<dt>状态</dt>
|
||
<dd>未参加</dd>
|
||
<dt>参加人数</dt>
|
||
<dd>26</dd>
|
||
<dt>创建人</dt>
|
||
<dd><span class="user-profile-link">
|
||
<img class="small user-profile-avatar v-center" loading="lazy" src="/file/6/.avatar.jpg" width="20" height="20">
|
||
<a class="user-profile-name uname--lv0" href="/user/6">
|
||
克力老师
|
||
</a>
|
||
</span>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="footer">
|
||
<div class="row">
|
||
<div class="columns">
|
||
<div class="footer__extra-link clearfix">
|
||
<div class="footer__extra-left">
|
||
<ol class="clearfix">
|
||
<li class="footer__extra-link-item"><a href="/record">评测队列</a></li>
|
||
<li class="footer__extra-link-item"><a href="/status">服务状态</a></li>
|
||
<li class="footer__extra-link-item">
|
||
<a href="/legacy?legacy=true">兼容模式</a>
|
||
</li>
|
||
<li class="footer__extra-link-item nojs--hide" data-dropdown-target="#menu-footer-theme">
|
||
<span><span class="icon icon-global"></span> 主题 <span
|
||
class="icon icon-expand_less"></span></span>
|
||
<ol class="dropdown-target menu" id="menu-footer-theme">
|
||
<li class="menu__item"><a class="menu__link" href="/set_theme/light">亮色</a></li>
|
||
<li class="menu__item"><a class="menu__link" href="/set_theme/dark">暗色</a></li>
|
||
</ol>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="footer__extra-right">
|
||
<ol class="clearfix"><li class="footer__extra-link-item"></li><li class="footer__extra-link-item"></li><li class="footer__extra-link-item">Worker 0, 175ms</li>
|
||
<!-- Prepare 2ms -->
|
||
<!-- Method 160ms -->
|
||
<li class="footer__extra-link-item">Powered by <a href="https://hydro.js.org">Hydro v5.0.0-beta.16</a> </li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></div>
|
||
<script>
|
||
var UiContextNew = '{"cid":"6975984d71e15346c9e8fdc2"}';
|
||
var UserContextNew = '{}';
|
||
</script>
|
||
</body>
|
||
</html>
|