多考试块表:每场考试改为单列并修正第几次列合并
- ny_assemble_block_sheet() 中每场考试由 2 列改为 1 列,删除历史遗留的 「是否最佳」空白列,消除每场右侧多余空白窄列 - 删除「第几次」列的纵向合并,改为逐行显示 1/2/3…,不再被吞成 1 - 合格次数行同步改为每场 1 列;未考合并加 $end > $start 跨行守卫, 规避单行学生产生的非法 1x1 合并(Excel 修复提示) - 列宽按考试名估算(CJK 记 2 半角宽),clamp 8~18 - 同步更新 test-multi-export.php(95 项含 4 条防回归断言)、 make-samples.php(李四数学改为真正整场未考)、导出/接口/测试文档 及样例预览文件;全量回归 404 项 0 失败
This commit is contained in:
+1
-1
@@ -90,7 +90,7 @@ _cache { cached, at }
|
||||
| `scoreMode=best` | `export` | 缺省 | 每人一行的代表成绩改取**最高成绩**(默认 `latest` = 最近一次真实提交);`mode=all` 不生效 |
|
||||
| `noAbsent=1` | `export`、`export_multi` | 缺省 | 不附缺考名单工作表(`export_multi` 口径:所选考试全都没交的人) |
|
||||
| `skipTemp=1` | `export` | 缺省 | `mode=all` 时排除暂存草稿;`includeTemp=1` 可强制保留 |
|
||||
| `mode=block` | `export_multi` | **默认** | 两行表头的「每次考试」块表:一列「第几次」被所有考试共用,每场考试占 2 列(考试名横跨 2 列 + 第二行「成绩」小标题),学生块末尾一行「合格次数」,学号·姓名纵向合并,没考的考试合并成「未考」(旧值 `merged` / `attempts` 等价) |
|
||||
| `mode=block` | `export_multi` | **默认** | 两行表头的「每次考试」块表:一列「第几次」被所有考试共用(逐行 1、2、3…,不合并),每场考试占 **1 列**(第 1 行考试名 + 第 2 行「成绩」小标题),学生块末尾一行「合格次数」,学号·姓名纵向合并,没考的考试合并成「未考」(旧值 `merged` / `attempts` 等价) |
|
||||
| `wide=1` | `export_multi` | — | 只传 1 个 `projectId` 时改用宽表:每人一行、第几次直接做列名(`学号 / 姓名 / 第1次…第N次 / [合格次数]`),由 `ny_assemble_attempt_wide_sheet()` 生成 |
|
||||
| `passTimes` | `export_multi` | 1 | 「合格次数」达标阈值:该场达到合格线的次数 ≥ 此值才标绿(默认 1) |
|
||||
| `markBest=0` | `export_multi` | 开 | `=0` 取消「最高分标红」 |
|
||||
|
||||
+1
-1
@@ -123,7 +123,7 @@ git status data/ # data/ 已被 gitignore,需手工核对
|
||||
- [ ] 导入正常 `.xlsx` → 成功,且 `data/uploads/` 为空
|
||||
- [ ] 工具栏「导出」只一个按钮 → 弹窗里四种内容都能出表,学号不是科学计数法
|
||||
- [ ] 成绩明细「每人成绩」切 最高 / 最新 → 成绩列跟着变,文件名带 `_最高成绩` / `_最新成绩`
|
||||
- [ ] 每次考试导出 → 最高分红字、合格次数达标绿底、未达标留白、整场未考合并成「未考」;每场考试占 2 列,成绩不串列
|
||||
- [ ] 每次考试导出 → 最高分红字、合格次数达标绿底、未达标留白、整场未考合并成「未考」;每场考试只占 1 列,「第几次」逐行 1/2/3 不被合并
|
||||
- [ ] 多考试打印 → 版式与导出的 Excel 一致,「合格次数」标签没被合并吞掉
|
||||
- [ ] 打印预览 → 默认成绩降序,没有教师签字栏、没有站点域名页脚;**绿底 / 红字真的印出来了**
|
||||
(打印样式带 `print-color-adjust: exact`,不需要在对话框里勾「背景图形」)
|
||||
|
||||
+15
-14
@@ -40,25 +40,26 @@
|
||||
|
||||
## 「每次考试」块表(多场对比,主推格式)
|
||||
|
||||
勾选多场考试,选 **两行表头** 形态。**一列「第几次」被所有考试共用**,每场考试占 2 列,
|
||||
学生块末尾多一行 **合格次数**。
|
||||
勾选多场考试,选 **两行表头** 形态。**一列「第几次」被所有考试共用**(逐行写 1、2、3…,不合并),
|
||||
每场考试占 **1 列**,学生块末尾多一行 **合格次数**。
|
||||
|
||||
| 学号 | 姓名 | 第几次 | 第一次月考·数学 | | 第一次月考·英语 | |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| | | | 成绩 | | 成绩 | |
|
||||
| (合并) | (合并) | 1 | 112 | 112 | 130 | |
|
||||
| (合并) | (合并) | 2 | 100 | | 129 | |
|
||||
| (合并) | (合并) | 3 | **136** | | **133** | |
|
||||
| (合并) | (合并) | **合格次数** | 3 | | 3 | |
|
||||
| 356002 | 李四 | 1 | (合并)**未考** | | 128 | |
|
||||
| (合并) | (合并) | **合格次数** | | | 1 | |
|
||||
| 学号 | 姓名 | 第几次 | 第一次月考·数学 | 第一次月考·英语 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| | | | 成绩 | 成绩 |
|
||||
| (合并) | (合并) | 1 | 112 | 130 |
|
||||
| (合并) | (合并) | 2 | 100 | 129 |
|
||||
| (合并) | (合并) | 3 | **136** | **133** |
|
||||
| (合并) | (合并) | **合格次数** | 3 | 3 |
|
||||
| 356002 | 李四 | 1 | (合并)**未考** | 128 |
|
||||
| (合并) | (合并) | **合格次数** | | 1 |
|
||||
|
||||
规则:
|
||||
|
||||
- **学生块高度** = 该生在所有勾选考试里最多的那次次数 + 1(末行是合格次数);
|
||||
- **学号 / 姓名**按学生块纵向合并;**第几次**只合并到最后一次考试行,末行留给「合格次数」标签;
|
||||
- **考试名称横跨 2 列**,第二行是 `成绩` 小标题;
|
||||
- **没考的考试**(整场没有该生记录)→ 该场 2 列 × 学生块高合并成一个 **`未考`** 格子;
|
||||
- **学号 / 姓名**按学生块纵向合并;**第几次**逐行写各自的次序号(1、2、3…),**不合并**
|
||||
——合并会把 2、3 吞掉只剩 1;
|
||||
- **每场考试占 1 列**:第 1 行是考试名、第 2 行是 `成绩` 小标题;
|
||||
- **没考的考试**(整场没有该生记录)→ 该列 × 学生块高合并成一个 **`未考`** 格子;
|
||||
- **排序**:学生按学号升序(出现班级 / 组别列时按 班级 → 组别 → 学号);
|
||||
- **暂存草稿**:默认不导出、也不占「第几次」编号。
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
|
||||
<title>多考试导出 · 每次考试(两行表头)(预览)</title><style>body{font-family:"Microsoft YaHei","PingFang SC",sans-serif;color:#222;background:#f7f7f7;margin:0;padding:24px}.page{background:#fff;border:1px solid #e3e3e3;border-radius:6px;padding:20px 22px;margin:0 auto 20px;max-width:1100px}.page h2{font-size:16px;margin:0 0 4px}.page .sub{font-size:12px;color:#777;margin:0 0 14px}table.bt{border-collapse:collapse;border:1px solid #999;width:100%;background:#fff;font-size:11px}table.bt td,table.bt th{border:1px solid #999;text-align:center;padding:3px 5px}table.bt th,table.bt thead td{background:#eaeaea;font-weight:700}table.bt thead tr:first-child td{background:#eaeaea}table.bt td.absent{color:#888}table.bt td.max{color:#d0021b;font-weight:700}table.bt td.pass{background:#63c384;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}html,body,.pass,.absent,.max{-webkit-print-color-adjust:exact;print-color-adjust:exact}.legend{margin:10px 0 0;font-size:12px;color:#555}.legend i{display:inline-block;width:11px;height:11px;vertical-align:-1px;margin:0 4px 0 12px}.legend .r{color:#d0021b;font-weight:700}.legend .g{background:#63c384;font-weight:700}.sign{margin-top:16px;font-size:12px}</style></head><body>
|
||||
<div class="page"><h2>多考试导出 · 每次考试(两行表头)</h2><p class="sub">合格线 110 分,达 1 次标绿</p>
|
||||
<table class="bt"><thead><tr><td rowspan="2">学号</td><td rowspan="2">姓名</td><td rowspan="2">第几次</td><td colspan="2">第一次月考·数学</td><td colspan="2">第一次月考·英语</td></tr><tr><td>成绩</td><td></td><td>成绩</td><td></td></tr></thead><tbody><tr><td rowspan="5">356001</td><td rowspan="5">张三</td><td rowspan="4">1</td><td>112</td><td></td><td class="max">112</td><td></td></tr><tr><td>100</td><td></td><td>99</td><td></td></tr><tr><td class="max">136</td><td></td><td></td><td></td></tr><tr><td>127</td><td></td><td></td><td></td></tr><tr><td>合格次数</td><td class="pass">3</td><td></td><td class="pass">1</td><td></td></tr><tr><td rowspan="4">356002</td><td rowspan="4">李四</td><td rowspan="3">1</td><td></td><td></td><td>130</td><td></td></tr><tr><td></td><td></td><td>129</td><td></td></tr><tr><td></td><td></td><td class="max">133</td><td></td></tr><tr><td>合格次数</td><td>0</td><td></td><td class="pass">3</td><td></td></tr><tr><td rowspan="2">356003</td><td rowspan="2">王五</td><td>1</td><td class="max">95</td><td></td><td colspan="2" class="absent">未考</td></tr><tr><td>合格次数</td><td>0</td><td></td><td></td><td></td></tr></tbody></table>
|
||||
<table class="bt"><thead><tr><td rowspan="2">学号</td><td rowspan="2">姓名</td><td rowspan="2">第几次</td><td>第一次月考·数学</td><td>第一次月考·英语</td></tr><tr><td>成绩</td><td>成绩</td></tr></thead><tbody><tr><td rowspan="5">356001</td><td rowspan="5">张三</td><td>1</td><td>112</td><td class="max">112</td></tr><tr><td>2</td><td>100</td><td>99</td></tr><tr><td>3</td><td class="max">136</td><td></td></tr><tr><td>4</td><td>127</td><td></td></tr><tr><td>合格次数</td><td class="pass">3</td><td class="pass">1</td></tr><tr><td rowspan="4">356002</td><td rowspan="4">李四</td><td>1</td><td rowspan="3" class="absent">未考</td><td>130</td></tr><tr><td>2</td><td>129</td></tr><tr><td>3</td><td class="max">133</td></tr><tr><td>合格次数</td><td></td><td class="pass">3</td></tr><tr><td rowspan="2">356003</td><td rowspan="2">王五</td><td>1</td><td class="max">95</td><td class="absent">未考</td></tr><tr><td>合格次数</td><td>0</td><td></td></tr></tbody></table>
|
||||
<p class="legend">标记说明:<span class="r">最高分</span> 标红、<i class="r">红字</i>;<span class="g">合格次数</span> 始终显示(含 0 次),达 1 次标绿、<i class="g">绿底</i>;未达标显示次数、不标绿。
|
||||
<p class="sign">教师签字:______________ 教研组长签字:______________ 日期:____________</p>
|
||||
</div></body></html>
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
|
||||
<title>单场导出 · 每次考试(每人一行的宽表)(预览)</title><style>body{font-family:"Microsoft YaHei","PingFang SC",sans-serif;color:#222;background:#f7f7f7;margin:0;padding:24px}.page{background:#fff;border:1px solid #e3e3e3;border-radius:6px;padding:20px 22px;margin:0 auto 20px;max-width:1100px}.page h2{font-size:16px;margin:0 0 4px}.page .sub{font-size:12px;color:#777;margin:0 0 14px}table.bt{border-collapse:collapse;border:1px solid #999;width:100%;background:#fff;font-size:11px}table.bt td,table.bt th{border:1px solid #999;text-align:center;padding:3px 5px}table.bt th,table.bt thead td{background:#eaeaea;font-weight:700}table.bt thead tr:first-child td{background:#eaeaea}table.bt td.absent{color:#888}table.bt td.max{color:#d0021b;font-weight:700}table.bt td.pass{background:#63c384;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}html,body,.pass,.absent,.max{-webkit-print-color-adjust:exact;print-color-adjust:exact}.legend{margin:10px 0 0;font-size:12px;color:#555}.legend i{display:inline-block;width:11px;height:11px;vertical-align:-1px;margin:0 4px 0 12px}.legend .r{color:#d0021b;font-weight:700}.legend .g{background:#63c384;font-weight:700}.sign{margin-top:16px;font-size:12px}</style></head><body>
|
||||
<div class="page"><h2>单场导出 · 每次考试(每人一行的宽表)</h2><p class="sub">第一次月考·数学 · 合格线 110 分,达 1 次标绿</p>
|
||||
<table class="bt"><thead><tr><td>学号</td><td>姓名</td><td>第1次</td><td>第2次</td><td>第3次</td><td>第4次</td><td>合格次数</td></tr></thead><tbody><tr><td>356001</td><td>张三</td><td>112</td><td>100</td><td class="max">136</td><td>127</td><td class="pass">3</td></tr><tr><td>356002</td><td>李四</td><td></td><td></td><td></td><td></td><td>0</td></tr><tr><td>356003</td><td>王五</td><td class="max">95</td><td></td><td></td><td></td><td>0</td></tr></tbody></table>
|
||||
<table class="bt"><thead><tr><td>学号</td><td>姓名</td><td>第1次</td><td>第2次</td><td>第3次</td><td>第4次</td><td>合格次数</td></tr></thead><tbody><tr><td>356001</td><td>张三</td><td>112</td><td>100</td><td class="max">136</td><td>127</td><td class="pass">3</td></tr><tr><td>356003</td><td>王五</td><td class="max">95</td><td></td><td></td><td></td><td>0</td></tr></tbody></table>
|
||||
<p class="legend">标记说明:<span class="r">最高分</span> 标红、<i class="r">红字</i>;<span class="g">合格次数</span> 始终显示(含 0 次),达 1 次标绿、<i class="g">绿底</i>;未达标显示次数、不标绿。
|
||||
<p class="sign">教师签字:______________ 教研组长签字:______________ 日期:____________</p>
|
||||
</div></body></html>
|
||||
+39
-104
@@ -8,44 +8,34 @@
|
||||
"姓名",
|
||||
"第几次",
|
||||
"第一次月考·数学",
|
||||
"",
|
||||
"第一次月考·英语",
|
||||
""
|
||||
"第一次月考·英语"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"成绩",
|
||||
"",
|
||||
"成绩",
|
||||
""
|
||||
"成绩"
|
||||
],
|
||||
[
|
||||
"356001",
|
||||
"张三",
|
||||
"1",
|
||||
"112",
|
||||
"",
|
||||
"112",
|
||||
""
|
||||
"112"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"2",
|
||||
"100",
|
||||
"",
|
||||
"99",
|
||||
""
|
||||
"99"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"3",
|
||||
"136",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
[
|
||||
@@ -53,8 +43,6 @@
|
||||
"",
|
||||
"4",
|
||||
"127",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
[
|
||||
@@ -62,62 +50,48 @@
|
||||
"",
|
||||
"合格次数",
|
||||
"3",
|
||||
"",
|
||||
"1",
|
||||
""
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"356002",
|
||||
"李四",
|
||||
"1",
|
||||
"",
|
||||
"",
|
||||
"130",
|
||||
""
|
||||
"未考",
|
||||
"130"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"2",
|
||||
"",
|
||||
"",
|
||||
"129",
|
||||
""
|
||||
"129"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"3",
|
||||
"",
|
||||
"",
|
||||
"133",
|
||||
""
|
||||
"133"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"合格次数",
|
||||
"0",
|
||||
"",
|
||||
"3",
|
||||
""
|
||||
"3"
|
||||
],
|
||||
[
|
||||
"356003",
|
||||
"王五",
|
||||
"1",
|
||||
"95",
|
||||
"",
|
||||
"未考",
|
||||
""
|
||||
"未考"
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"合格次数",
|
||||
"0",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
]
|
||||
],
|
||||
@@ -141,58 +115,34 @@
|
||||
3
|
||||
],
|
||||
[
|
||||
3,
|
||||
1,
|
||||
7,
|
||||
1
|
||||
],
|
||||
[
|
||||
3,
|
||||
2,
|
||||
7,
|
||||
2
|
||||
],
|
||||
[
|
||||
8,
|
||||
4,
|
||||
1,
|
||||
5
|
||||
],
|
||||
[
|
||||
1,
|
||||
6,
|
||||
1,
|
||||
7
|
||||
],
|
||||
[
|
||||
3,
|
||||
1,
|
||||
7,
|
||||
1
|
||||
],
|
||||
[
|
||||
3,
|
||||
2,
|
||||
7,
|
||||
2
|
||||
],
|
||||
[
|
||||
3,
|
||||
3,
|
||||
6,
|
||||
3
|
||||
],
|
||||
[
|
||||
8,
|
||||
1,
|
||||
11,
|
||||
1
|
||||
],
|
||||
[
|
||||
8,
|
||||
2,
|
||||
11,
|
||||
2
|
||||
],
|
||||
[
|
||||
8,
|
||||
3,
|
||||
10,
|
||||
3
|
||||
4
|
||||
],
|
||||
[
|
||||
12,
|
||||
6,
|
||||
12,
|
||||
7
|
||||
8,
|
||||
1,
|
||||
11,
|
||||
1
|
||||
],
|
||||
[
|
||||
8,
|
||||
2,
|
||||
11,
|
||||
2
|
||||
],
|
||||
[
|
||||
12,
|
||||
@@ -205,22 +155,16 @@
|
||||
2,
|
||||
13,
|
||||
2
|
||||
],
|
||||
[
|
||||
12,
|
||||
3,
|
||||
12,
|
||||
3
|
||||
]
|
||||
],
|
||||
"header_rows": 2,
|
||||
"cell_styles": {
|
||||
"3,6": "red",
|
||||
"3,5": "red",
|
||||
"5,4": "red",
|
||||
"7,4": "green",
|
||||
"7,6": "green",
|
||||
"10,6": "red",
|
||||
"11,6": "green",
|
||||
"7,5": "green",
|
||||
"10,5": "red",
|
||||
"11,5": "green",
|
||||
"12,4": "red"
|
||||
}
|
||||
},
|
||||
@@ -251,15 +195,6 @@
|
||||
"127",
|
||||
"3"
|
||||
],
|
||||
[
|
||||
"356002",
|
||||
"李四",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"356003",
|
||||
"王五",
|
||||
@@ -275,7 +210,7 @@
|
||||
"cell_styles": {
|
||||
"2,5": "red",
|
||||
"2,7": "green",
|
||||
"4,3": "red"
|
||||
"3,3": "red"
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
|
||||
Reference in New Issue
Block a user