试用前走查的修改:报错看得见、学生找得到作业、运行区和设计器的若干体验问题
- 运行区:编译错误、运行异常、控制台输出和保存的图片移到窗体下面,不再被实训台挤成 0 高;缩放和放大按钮移到桌面上方,不压窗体的关闭按钮;放大后也能停止程序;点停止后清掉窗体 - 运行异常:常见 .NET 异常配中文说明,显示出错的文件、行号和方法,点击跳到代码 - 运行中的下拉列表挂到页面最外层,能伸出窗体和分组框(小窗体也能选到 COM4、COM5) - 学生登录后进"我的作业";任务面板从工具栏下面开始,不挡导航;记住上次做的实验,从数据库页面返回、恢复数据时默认用它 - 代码页和设计页左栏都占 3/5,文件标签放不下时换行;实验选择框加宽;关闭粘性滚动 - 设计器:双击生成的事件方法带缩进;双击工具箱放进选中控件所在的容器并错开位置;新控件比容器宽时按比例缩小;无边框窗体不画标题栏 - 中文界面:代码编辑器(查找替换等)、属性窗口的颜色选项 - SQL:DATEADD、DATEDIFF、DATEPART 的日期单位(day、hour)解析成 IdentifierLiteral 时报"不支持",补上 - 项目 8 的预置环境数据改成建库那天之前的 7 天;p6-t3 评分项改为"按日期查询环境数据" - 没有 AI 建议时不显示"全部采纳 AI 建议"和相关说明;导出 CSV 只给纯数字的文字加制表符 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
da623fa648
commit
f6024dc113
30 files changed
+537
-255
No files matched your search
@@ -30,7 +30,7 @@ import { createRunSession } from '../run/session'
|
||||
import GradeResultView from '../grading/GradeResultView.vue'
|
||||
import TaskPanel from '../grading/TaskPanel.vue'
|
||||
import { captureForms } from '../grading/screenshots'
|
||||
import { renderSampleTag, sampleOptions } from '../samples'
|
||||
import { lastSample, rememberSample, renderSampleTag, sampleOptions } from '../samples'
|
||||
|
||||
const props = defineProps<{ assignmentId?: string; submissionId?: string }>()
|
||||
|
||||
@@ -128,8 +128,8 @@ onMounted(async () => {
|
||||
}
|
||||
const list = await api<{ id: string; title: string }[]>('GET', '/api/samples')
|
||||
samples.value = sampleOptions(list)
|
||||
// 网址里带 ?sample=示例编号 时直接打开该示例(便于老师把链接发给学生)
|
||||
const initial = list.find((s) => s.id === route.query.sample) ?? list[0]
|
||||
// 网址里带 ?sample=示例编号 时直接打开该示例(便于老师把链接发给学生),否则打开上次做的实验
|
||||
const initial = list.find((s) => s.id === route.query.sample) ?? list.find((s) => s.id === lastSample()) ?? list[0]
|
||||
if (initial) await loadSample(initial.id)
|
||||
})
|
||||
|
||||
@@ -150,6 +150,7 @@ async function openProject(key: string, original: () => Promise<SourceFile[]>, d
|
||||
async function loadSample(id: string, discardWork = false) {
|
||||
sampleId.value = id
|
||||
void router.replace({ query: { sample: id } })
|
||||
rememberSample(id)
|
||||
sampleChecks.value = []
|
||||
sampleTask.value = null
|
||||
void api<string[]>('GET', `/api/samples/${encodeURIComponent(id)}/checks`)
|
||||
@@ -596,7 +597,7 @@ function run() {
|
||||
:before-start="flushSave"
|
||||
/>
|
||||
|
||||
<main class="workspace" :class="{ designing: activeForm, 'run-collapsed': runCollapsed }">
|
||||
<main class="workspace" :class="{ 'run-collapsed': runCollapsed }">
|
||||
<section class="editor">
|
||||
<div class="tab-row">
|
||||
<NTabs v-model:value="activeTab" type="card" size="small" class="file-tabs">
|
||||
@@ -698,7 +699,7 @@ function run() {
|
||||
}
|
||||
|
||||
.sample-select {
|
||||
width: 240px;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.metrics {
|
||||
@@ -758,16 +759,12 @@ function run() {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* 设计页要放工具箱、窗体和属性窗口,代码页要放得下长代码行,左栏都放宽;切换标签页时布局不跳 */
|
||||
.workspace {
|
||||
flex: 1;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(360px, 2fr) 14px 3fr;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* 设计器需要工具箱、窗体和属性窗口,左栏放宽 */
|
||||
.workspace.designing {
|
||||
grid-template-columns: minmax(0, 3fr) 14px minmax(360px, 2fr);
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.workspace.run-collapsed {
|
||||
@@ -815,6 +812,11 @@ function run() {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* 文件多时(项目 8 有十来个)标签换行显示,不藏在看不到滚动条的横向滚动里 */
|
||||
.file-tabs :deep(.n-tabs-wrapper) {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.new-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
Reference in new issue
Block a user