|
@@ -2,79 +2,115 @@ export interface MarkStore {
|
|
setting: Setting;
|
|
setting: Setting;
|
|
groups: Array<Group>;
|
|
groups: Array<Group>;
|
|
status: {
|
|
status: {
|
|
- valid: boolean; // 为false时不更新以下字段
|
|
|
|
- personCount: number; //个人评卷数量
|
|
|
|
- markedCount: number; //总评卷数量
|
|
|
|
- totalCount: number; //总数量
|
|
|
|
- problemCount: number; //问题卷数量
|
|
|
|
- arbitrateCount: number; //待仲裁卷数量
|
|
|
|
-
|
|
|
|
- personCountTweenedNumber: number; // 已评数量(动画用)
|
|
|
|
- todoMarkCountTweenedNumber: number; // 待评数量(动画用)
|
|
|
|
|
|
+ /** 为false时不更新以下count字段 */
|
|
|
|
+ valid: boolean;
|
|
|
|
+ /** 个人评卷数量 */
|
|
|
|
+ personCount: number;
|
|
|
|
+ /** 总评卷数量 */
|
|
|
|
+ markedCount: number;
|
|
|
|
+ /** 总数量 */
|
|
|
|
+ totalCount: number;
|
|
|
|
+ /** 问题卷数量 */
|
|
|
|
+ problemCount: number;
|
|
|
|
+ /** 待仲裁卷数量 */
|
|
|
|
+ arbitrateCount: number;
|
|
};
|
|
};
|
|
- tasks: Array<Task>; // 保持数量为3
|
|
|
|
- currentTask?: Task; // 用来切换task,还有回看
|
|
|
|
|
|
+ /** 保持数量为3(prefetchCount) */
|
|
|
|
+ tasks: Array<Task>;
|
|
|
|
+ /** 用来切换task,还有回看 */
|
|
|
|
+ currentTask?: Task;
|
|
currentQuestion?: Question;
|
|
currentQuestion?: Question;
|
|
currentScore?: number;
|
|
currentScore?: number;
|
|
currentSpecialTag?: string;
|
|
currentSpecialTag?: string;
|
|
- historyOpen: boolean; // 是否打开回评侧边栏
|
|
|
|
|
|
+ /** 是否打开回评侧边栏 */
|
|
|
|
+ historyOpen: boolean;
|
|
historyTasks: Array<Task>;
|
|
historyTasks: Array<Task>;
|
|
|
|
+ /** 删除这些轨迹 */
|
|
removeScoreTracks: Array<Track>;
|
|
removeScoreTracks: Array<Track>;
|
|
- focusTracks: Array<Track>; // 暂时无用
|
|
|
|
|
|
+ /** 聚焦这些tracks */
|
|
|
|
+ focusTracks: Array<Track>;
|
|
message: string | null;
|
|
message: string | null;
|
|
maxModalZIndex: number;
|
|
maxModalZIndex: number;
|
|
- minimapScrollToX?: number; // 宽度的百分比
|
|
|
|
- minimapScrollToY?: number; // 高度的百分比
|
|
|
|
- allPaperModal: boolean; // 是否显示全卷
|
|
|
|
- sheetViewModal: boolean; // 是否显示原卷
|
|
|
|
- globalMask: boolean; // 是否全局遮盖
|
|
|
|
|
|
+ /** 缩略图设置滚动到宽度的百分比 */
|
|
|
|
+ minimapScrollToX?: number;
|
|
|
|
+ /** 缩略图设置滚动到高度的百分比 */
|
|
|
|
+ minimapScrollToY?: number;
|
|
|
|
+ /** 是否显示全卷 */
|
|
|
|
+ allPaperModal: boolean;
|
|
|
|
+ /** 是否显示原卷 */
|
|
|
|
+ sheetViewModal: boolean;
|
|
|
|
+ /** 是否全局遮盖 */
|
|
|
|
+ globalMask: boolean;
|
|
}
|
|
}
|
|
|
|
|
|
export interface Setting {
|
|
export interface Setting {
|
|
- examType: "SCAN_IMAGE" | "MULTI_MEDIA"; // 扫描图片或者多媒体,多媒体只允许 common mode
|
|
|
|
- mode: ModeEnum; //模式 TRACK/COMMON
|
|
|
|
- forceMode: boolean; //强制模式切换
|
|
|
|
- sheetView: boolean; //是否显示原图功能
|
|
|
|
- sheetConfig: Array<SingleSheetConfig>; //原图遮盖规则
|
|
|
|
- enableAllZero: boolean; // 是否开启全零分
|
|
|
|
- fileServer: string; //图片服务地址
|
|
|
|
- userName: string; //评卷员姓名
|
|
|
|
|
|
+ /** 扫描图片或者多媒体,多媒体只允许 common mode */
|
|
|
|
+ examType: "SCAN_IMAGE" | "MULTI_MEDIA";
|
|
|
|
+ /** 阅卷模式 TRACK | COMMON */
|
|
|
|
+ mode: "TRACK" | "COMMON";
|
|
|
|
+ /** 是否允许模式切换,true为不允许 */
|
|
|
|
+ forceMode: boolean;
|
|
|
|
+ /** 是否显示原图功能 */
|
|
|
|
+ sheetView: boolean;
|
|
|
|
+ /** 原图遮盖规则 */
|
|
|
|
+ sheetConfig: Array<SingleSheetConfig>;
|
|
|
|
+ /** 是否开启全零分 */
|
|
|
|
+ enableAllZero: boolean;
|
|
|
|
+ /** 图片服务地址 */
|
|
|
|
+ fileServer: string;
|
|
|
|
+ /** 评卷员姓名 */
|
|
|
|
+ userName: string;
|
|
subject: {
|
|
subject: {
|
|
- //科目信息(试卷和答案功能)
|
|
|
|
|
|
+ /** 科目信息(试卷和答案功能)*/
|
|
name: string;
|
|
name: string;
|
|
code: string;
|
|
code: string;
|
|
answerUrl: string;
|
|
answerUrl: string;
|
|
paperUrl: string;
|
|
paperUrl: string;
|
|
questions: Array<RichTextQuestion>;
|
|
questions: Array<RichTextQuestion>;
|
|
};
|
|
};
|
|
- forceSpecialTag: boolean; //强制标记是否开启 forceTag
|
|
|
|
|
|
+ /** 强制标记是否开启 */
|
|
|
|
+ forceSpecialTag: boolean;
|
|
uiSetting: UISetting;
|
|
uiSetting: UISetting;
|
|
- statusValue: "TRIAL" | "FORMAL" | "FINISH"; //只显示试评名称 TRIAL("试评"), FORMAL("正评"), FINISH("结束")
|
|
|
|
- problemTypes: Array<{ id: number; name: string }> | []; //问题卷类型
|
|
|
|
- groupNumber: number; //评卷分组
|
|
|
|
- groupTitle: string; //评卷分组名称
|
|
|
|
- topCount: number; //限制提示数量
|
|
|
|
- splitConfig: Array<number>; //使用裁切整图时的裁切配置 [0,1]|[0,0.3,0.25,0.55],
|
|
|
|
- prefetchCount: number; //预加载任务数量
|
|
|
|
- startTime: number; //评卷开始时间
|
|
|
|
- endTime: number; //评卷结束时间
|
|
|
|
- selective: boolean; // 是否是未选做类型
|
|
|
|
|
|
+ /** 只显示试评名称 TRIAL("试评"), FORMAL("正评"), FINISH("结束") */
|
|
|
|
+ statusValue: "TRIAL" | "FORMAL" | "FINISH";
|
|
|
|
+ /** 问题卷类型 */
|
|
|
|
+ problemTypes: Array<{ id: number; name: string }> | [];
|
|
|
|
+ /** 当前评卷分组号 */
|
|
|
|
+ groupNumber: number;
|
|
|
|
+ /** 当前评卷分组名称 */
|
|
|
|
+ groupTitle: string;
|
|
|
|
+ /** 推荐老师评卷的数量,到达这个数量提示老师 */
|
|
|
|
+ topCount: number;
|
|
|
|
+ /** 使用裁切整图时的裁切配置 [0,1]|[0,0.3,0.25,0.55], */
|
|
|
|
+ splitConfig: Array<number>;
|
|
|
|
+ /** 预加载任务数量 */
|
|
|
|
+ prefetchCount: number;
|
|
|
|
+ /** 评卷开始时间 */
|
|
|
|
+ startTime: number;
|
|
|
|
+ /** 评卷结束时间 */
|
|
|
|
+ endTime: number;
|
|
|
|
+ /** 是否是未选做类型 */
|
|
|
|
+ selective: boolean;
|
|
}
|
|
}
|
|
|
|
|
|
// setting for admin page
|
|
// setting for admin page
|
|
export interface AdminPageSetting {
|
|
export interface AdminPageSetting {
|
|
- examType: "SCAN_IMAGE" | "MULTI_MEDIA"; // 扫描图片或者多媒体,多媒体只允许 common mode
|
|
|
|
- fileServer: string; //图片服务地址
|
|
|
|
- userName: string; //管理员姓名
|
|
|
|
|
|
+ /** 扫描图片或者多媒体,多媒体只允许 common mode */
|
|
|
|
+ examType: "SCAN_IMAGE" | "MULTI_MEDIA";
|
|
|
|
+ /** 图片服务地址 */
|
|
|
|
+ fileServer: string;
|
|
|
|
+ /** 管理员姓名 */
|
|
|
|
+ userName: string;
|
|
subject: {
|
|
subject: {
|
|
- //科目信息(试卷和答案功能)
|
|
|
|
|
|
+ /** 科目信息(试卷和答案功能) */
|
|
name: string;
|
|
name: string;
|
|
code: string;
|
|
code: string;
|
|
answerUrl: string;
|
|
answerUrl: string;
|
|
paperUrl: string;
|
|
paperUrl: string;
|
|
questions: Array<RichTextQuestion>;
|
|
questions: Array<RichTextQuestion>;
|
|
};
|
|
};
|
|
- splitConfig: Array<number>; //使用裁切整图时的裁切配置 [0,1]|[0,0.3,0.25,0.55],
|
|
|
|
|
|
+ /** 使用裁切整图时的裁切配置 [0,1]|[0,0.3,0.25,0.55], */
|
|
|
|
+ splitConfig: Array<number>;
|
|
}
|
|
}
|
|
|
|
|
|
export interface AdminPageSettingForImport extends AdminPageSetting {
|
|
export interface AdminPageSettingForImport extends AdminPageSetting {
|
|
@@ -84,101 +120,135 @@ export interface AdminPageSettingForImport extends AdminPageSetting {
|
|
message: string;
|
|
message: string;
|
|
}
|
|
}
|
|
|
|
|
|
-export enum ModeEnum {
|
|
|
|
- TRACK = "TRACK",
|
|
|
|
- COMMON = "COMMON",
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
interface SingleSheetConfig {
|
|
interface SingleSheetConfig {
|
|
- i: number; // index of sheets
|
|
|
|
- w: number; // width
|
|
|
|
- h: number; // height
|
|
|
|
- x: number; // x 左上角为 (0, 0)
|
|
|
|
- y: number; // y 左上角为 (0, 0)
|
|
|
|
|
|
+ /** index of sheets */
|
|
|
|
+ i: number;
|
|
|
|
+ /** 覆盖区域的width */
|
|
|
|
+ w: number;
|
|
|
|
+ /** 覆盖区域的height */
|
|
|
|
+ h: number;
|
|
|
|
+ /** 从哪里开始覆盖 左上角为 (0, 0) */
|
|
|
|
+ x: number;
|
|
|
|
+ /** 从哪里开始覆盖 左上角为 (0, 0) */
|
|
|
|
+ y: number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface Group {
|
|
export interface Group {
|
|
markerId: number;
|
|
markerId: number;
|
|
number: number;
|
|
number: number;
|
|
title: string;
|
|
title: string;
|
|
- markedCount: number; //总评卷数量
|
|
|
|
- totalCount: number; //总数量
|
|
|
|
|
|
+ /** 总评卷数量 */
|
|
|
|
+ markedCount: number;
|
|
|
|
+ /** 总数量 */
|
|
|
|
+ totalCount: number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface Task {
|
|
export interface Task {
|
|
libraryId: number;
|
|
libraryId: number;
|
|
studentId: number;
|
|
studentId: number;
|
|
secretNumber: string;
|
|
secretNumber: string;
|
|
- studentName: string; //后端处理是否显示
|
|
|
|
|
|
+ /** 后端处理是否显示 */
|
|
|
|
+ studentName: string;
|
|
studentCode: string;
|
|
studentCode: string;
|
|
examNumber: string;
|
|
examNumber: string;
|
|
subject?: {
|
|
subject?: {
|
|
- // 一般不要用此处的subject,优先用setting.subject
|
|
|
|
|
|
+ /** 一般不要用此处的subject,优先用setting.subject */
|
|
name: string;
|
|
name: string;
|
|
code: string;
|
|
code: string;
|
|
answerUrl: string;
|
|
answerUrl: string;
|
|
paperUrl: string;
|
|
paperUrl: string;
|
|
questions: Array<RichTextQuestion>;
|
|
questions: Array<RichTextQuestion>;
|
|
};
|
|
};
|
|
- sliceUrls: Array<string>; //裁切图url
|
|
|
|
- sliceConfig: Array<PictureSlice>; //最高显示优先级
|
|
|
|
- jsonUrl: string; // sliceUrls为空,则是多媒体阅卷,显示JSON
|
|
|
|
|
|
+ /** 裁切图url */
|
|
|
|
+ sliceUrls: Array<string>;
|
|
|
|
+ /** 最高显示优先级,有sliceConfig就用sliceConfig,否则使用sheetConfig */
|
|
|
|
+ sliceConfig: Array<PictureSlice>;
|
|
|
|
+ /** sliceUrls为空,则是多媒体阅卷,显示JSON */
|
|
|
|
+ jsonUrl: string;
|
|
questionList: Array<Question>;
|
|
questionList: Array<Question>;
|
|
specialTagList: Array<SpecialTag>;
|
|
specialTagList: Array<SpecialTag>;
|
|
|
|
|
|
- sheetUrls: Array<string>; //原图url
|
|
|
|
- objectiveScore: number; //客观分 复核也用到
|
|
|
|
|
|
+ /** 原图url */
|
|
|
|
+ sheetUrls: Array<string>;
|
|
|
|
+ /** 客观分 复核也用到 */
|
|
|
|
+ objectiveScore: number;
|
|
|
|
|
|
- markerScore: number; // 评卷总分
|
|
|
|
- markerTime: number; //评卷时间
|
|
|
|
- inspectTime?: number; // 复核有用
|
|
|
|
- self: boolean; // 是否自评,暂时用不着
|
|
|
|
- previous: boolean; // 是否回评
|
|
|
|
- rejected: boolean; // 是否是打回
|
|
|
|
|
|
+ /** 评卷总分 */
|
|
|
|
+ markerScore: number;
|
|
|
|
+ /** 评卷时间 */
|
|
|
|
+ markerTime: number;
|
|
|
|
+ /** 复核有用 */
|
|
|
|
+ inspectTime?: number;
|
|
|
|
+ /** 是否自评,暂时用不着 */
|
|
|
|
+ self: boolean;
|
|
|
|
+ /** 是否回评 */
|
|
|
|
+ previous: boolean;
|
|
|
|
+ /** 是否是打回 */
|
|
|
|
+ rejected: boolean;
|
|
message: string | null;
|
|
message: string | null;
|
|
|
|
|
|
- // 评卷结果,在task第一次被访问时自动添加,watch currentTask
|
|
|
|
|
|
+ /** 评卷结果,在task第一次被访问时自动添加,watch currentTask */
|
|
markResult: MarkResult;
|
|
markResult: MarkResult;
|
|
- __markStartTime: number; // 前端自用,用于标记阅卷开始时间和计算spent
|
|
|
|
|
|
+ /** 前端自用,用于标记阅卷开始时间和计算spent */
|
|
|
|
+ __markStartTime: number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface Question {
|
|
export interface Question {
|
|
- groupNumber: number; // 分组序号
|
|
|
|
- mainNumber: number; // 大题号
|
|
|
|
- subNumber: string; // 小题号
|
|
|
|
- intervalScore: number; // 分数间隔
|
|
|
|
|
|
+ /** 分组序号 */
|
|
|
|
+ groupNumber: number;
|
|
|
|
+ /** 大题号 */
|
|
|
|
+ mainNumber: number;
|
|
|
|
+ /** 小题号 */
|
|
|
|
+ subNumber: string;
|
|
|
|
+ /** 分数间隔 */
|
|
|
|
+ intervalScore: number;
|
|
defaultScore: number;
|
|
defaultScore: number;
|
|
minScore: number;
|
|
minScore: number;
|
|
maxScore: number;
|
|
maxScore: number;
|
|
- title: string; // 题目名称
|
|
|
|
- trackList: Array<Track>; // 轨迹列表
|
|
|
|
- score: number | null; //得分;null的值时是为打回时可以被评卷修改的;null也是从未评分过的情况,要通过rejected来判断
|
|
|
|
- __index: number; // question 在 task 里面的 index ,用来对应 scoreList 的 score
|
|
|
|
|
|
+ /** 题目名称 */
|
|
|
|
+ title: string;
|
|
|
|
+ /** 轨迹列表 */
|
|
|
|
+ trackList: Array<Track>;
|
|
|
|
+ /** 得分;null的值时是为打回时可以被评卷修改的;null也是从未评分过的情况,要通过rejected来判断 */
|
|
|
|
+ score: number | null;
|
|
|
|
+ /** question 在 task 里面的 index ,用来对应 scoreList 的 score */
|
|
|
|
+ __index: number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface Track {
|
|
export interface Track {
|
|
- mainNumber: number; // 大题号
|
|
|
|
- subNumber: string; // 小题号,当前api中只有number // 特殊标记中没有
|
|
|
|
- number: number; // 前端使用,暂时用不着,赋0
|
|
|
|
- offsetIndex: number; // 第几张图
|
|
|
|
- offsetX: number; // 左上角为原点
|
|
|
|
|
|
+ /** 大题号 */
|
|
|
|
+ mainNumber: number;
|
|
|
|
+ /** 小题号,当前api中只有number // 特殊标记中没有 */
|
|
|
|
+ subNumber: string;
|
|
|
|
+ /** 前端使用,暂时用不着,赋0 */
|
|
|
|
+ number: number;
|
|
|
|
+ /** 第几张图 */
|
|
|
|
+ offsetIndex: number;
|
|
|
|
+ /** 左上角为原点 */
|
|
|
|
+ offsetX: number;
|
|
offsetY: number;
|
|
offsetY: number;
|
|
- positionX: number; // 相对slice的位置比例
|
|
|
|
|
|
+ /** 相对slice的位置比例 */
|
|
|
|
+ positionX: number;
|
|
positionY: number;
|
|
positionY: number;
|
|
score: number;
|
|
score: number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface SpecialTag {
|
|
export interface SpecialTag {
|
|
- offsetIndex: number; // 第几张图
|
|
|
|
- offsetX: number; // 左上角为原点
|
|
|
|
|
|
+ /** 第几张图 */
|
|
|
|
+ offsetIndex: number;
|
|
|
|
+ /** 左上角为原点 */
|
|
|
|
+ offsetX: number;
|
|
offsetY: number;
|
|
offsetY: number;
|
|
- positionX: number; // 相对slice的位置比例
|
|
|
|
|
|
+ /** 相对slice的位置比例 */
|
|
|
|
+ positionX: number;
|
|
positionY: number;
|
|
positionY: number;
|
|
- tagName: string; // 特殊标记的字符串,勾叉
|
|
|
|
|
|
+ /** 特殊标记的字符串,勾叉 */
|
|
|
|
+ tagName: string;
|
|
}
|
|
}
|
|
|
|
|
|
export interface PictureSlice {
|
|
export interface PictureSlice {
|
|
- i: number; // 从1开始
|
|
|
|
|
|
+ /** 从1开始 */
|
|
|
|
+ i: number;
|
|
w: number;
|
|
w: number;
|
|
h: number;
|
|
h: number;
|
|
x: number;
|
|
x: number;
|
|
@@ -187,37 +257,43 @@ export interface PictureSlice {
|
|
|
|
|
|
export interface UISetting {
|
|
export interface UISetting {
|
|
"score.board.collapse": boolean;
|
|
"score.board.collapse": boolean;
|
|
- "answer.paper.scale": number; // 0.2 gap
|
|
|
|
|
|
+ /** 0.2 gap */
|
|
|
|
+ "answer.paper.scale": number;
|
|
"normal.mode": "keyboard" | "mouse";
|
|
"normal.mode": "keyboard" | "mouse";
|
|
"paper.modal": boolean;
|
|
"paper.modal": boolean;
|
|
"answer.modal": boolean;
|
|
"answer.modal": boolean;
|
|
"minimap.modal": boolean;
|
|
"minimap.modal": boolean;
|
|
"specialTag.modal": boolean;
|
|
"specialTag.modal": boolean;
|
|
"shortCut.modal": boolean;
|
|
"shortCut.modal": boolean;
|
|
- "score.fontSize.scale": number; // 0.1 gap
|
|
|
|
|
|
+ /** 0.1 gap */
|
|
|
|
+ "score.fontSize.scale": number;
|
|
}
|
|
}
|
|
|
|
|
|
export interface MarkResult {
|
|
export interface MarkResult {
|
|
libraryId: number;
|
|
libraryId: number;
|
|
studentId: number;
|
|
studentId: number;
|
|
statusValue: string;
|
|
statusValue: string;
|
|
- spent: number; // 毫秒单位
|
|
|
|
|
|
+ /** 毫秒单位 */
|
|
|
|
+ spent: number;
|
|
|
|
|
|
// 轨迹 or 键盘
|
|
// 轨迹 or 键盘
|
|
markerScore: number | null;
|
|
markerScore: number | null;
|
|
trackList: Array<Track>;
|
|
trackList: Array<Track>;
|
|
scoreList: Array<number | null>;
|
|
scoreList: Array<number | null>;
|
|
- specialTagList: Array<SpecialTag>; // 轨迹和键盘都需要
|
|
|
|
|
|
+ /** 轨迹和键盘都需要 */
|
|
|
|
+ specialTagList: Array<SpecialTag>;
|
|
|
|
|
|
- // 问题卷
|
|
|
|
|
|
+ /** 问题卷 */
|
|
problem: boolean;
|
|
problem: boolean;
|
|
problemTypeId: number;
|
|
problemTypeId: number;
|
|
- unselective: boolean; // 当前task是否为学生未选做
|
|
|
|
|
|
+ /** 当前task是否为学生未选做 */
|
|
|
|
+ unselective: boolean;
|
|
}
|
|
}
|
|
|
|
|
|
-// 前端自用,用来渲染裁切图
|
|
|
|
|
|
+/** 前端自用,用来渲染裁切图 */
|
|
export interface SliceImage {
|
|
export interface SliceImage {
|
|
- url: string; // 当前是 ObjectURL , 因为 DataURL 性能太差
|
|
|
|
|
|
+ /** 当前是 ObjectURL , 因为 DataURL 性能太差 */
|
|
|
|
+ url: string;
|
|
indexInSliceUrls: number;
|
|
indexInSliceUrls: number;
|
|
trackList: Array<Track>;
|
|
trackList: Array<Track>;
|
|
tagList: Array<SpecialTag>;
|
|
tagList: Array<SpecialTag>;
|
|
@@ -225,9 +301,14 @@ export interface SliceImage {
|
|
// originalImageHeight: number; // 为了兼容原图还原轨迹而添加的属性,当前CommonMarkBody用不到
|
|
// originalImageHeight: number; // 为了兼容原图还原轨迹而添加的属性,当前CommonMarkBody用不到
|
|
sliceImageWidth: number;
|
|
sliceImageWidth: number;
|
|
sliceImageHeight: number;
|
|
sliceImageHeight: number;
|
|
- dx: number; // 裁切图在原图中的左上角的x偏移量
|
|
|
|
- dy: number; // 裁切图在原图中的左上角的y偏移量
|
|
|
|
- accumTopHeight: number; // 在多个图片从高至低排列中中累积的高度
|
|
|
|
|
|
+ /** 裁切图在原图中的左上角的x偏移量 */
|
|
|
|
+ dx: number;
|
|
|
|
+ /** 裁切图在原图中的左上角的y偏移量 */
|
|
|
|
+ dy: number;
|
|
|
|
+ /** 在多个图片从高至低排列中累积的高度 */
|
|
|
|
+ accumTopHeight: number;
|
|
|
|
+ /** 当前裁切图有效宽度,大小不一的裁切图时有用。
|
|
|
|
+ * 为了能让多张图统一比例的缩放,所以将所有的图的宽度设为一样了。 */
|
|
effectiveWidth: number;
|
|
effectiveWidth: number;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -240,7 +321,8 @@ export type MarkHistoryOrderBy =
|
|
export type MarkHistorySortField = "ASC" | "DESC" | undefined;
|
|
export type MarkHistorySortField = "ASC" | "DESC" | undefined;
|
|
|
|
|
|
export interface HistoryQueryParams {
|
|
export interface HistoryQueryParams {
|
|
- pageNumber?: number; // 从1开始
|
|
|
|
|
|
+ /** 从1开始 */
|
|
|
|
+ pageNumber?: number;
|
|
pageSize?: number;
|
|
pageSize?: number;
|
|
order?: MarkHistoryOrderBy;
|
|
order?: MarkHistoryOrderBy;
|
|
sort?: MarkHistorySortField;
|
|
sort?: MarkHistorySortField;
|
|
@@ -256,11 +338,13 @@ export interface GetHistory {
|
|
}
|
|
}
|
|
|
|
|
|
export interface CommonResponse {
|
|
export interface CommonResponse {
|
|
- success: boolean; // 请求是否成功
|
|
|
|
- message: string; // 错误消息
|
|
|
|
|
|
+ /** 请求是否成功 */
|
|
|
|
+ success: boolean;
|
|
|
|
+ /** 错误消息 */
|
|
|
|
+ message: string;
|
|
}
|
|
}
|
|
|
|
|
|
-// 仲裁用:评卷明细
|
|
|
|
|
|
+/** 仲裁用:评卷明细 */
|
|
export interface MarkDetail {
|
|
export interface MarkDetail {
|
|
markerName: string;
|
|
markerName: string;
|
|
markerTime: number;
|
|
markerTime: number;
|
|
@@ -268,9 +352,10 @@ export interface MarkDetail {
|
|
scoreList: string;
|
|
scoreList: string;
|
|
}
|
|
}
|
|
|
|
|
|
-// 多媒体评卷 start
|
|
|
|
|
|
+//#region 多媒体评卷
|
|
export interface RichTextQuestion {
|
|
export interface RichTextQuestion {
|
|
- unionOrder: string; // 题目的综合题号 1-2-4
|
|
|
|
|
|
+ /** 题目的综合题号 1-2-4 */
|
|
|
|
+ unionOrder: string;
|
|
body: RichTextJSON;
|
|
body: RichTextJSON;
|
|
parentBody: RichTextJSON | null;
|
|
parentBody: RichTextJSON | null;
|
|
answer: Array<RichTextJSON> | null;
|
|
answer: Array<RichTextJSON> | null;
|
|
@@ -302,7 +387,7 @@ export interface StudentAnswer {
|
|
answer: Array<RichTextJSON> | null;
|
|
answer: Array<RichTextJSON> | null;
|
|
}
|
|
}
|
|
|
|
|
|
-// 云平台试卷格式
|
|
|
|
|
|
+/** 云平台试卷格式 */
|
|
export type ECSPaperJSON = {
|
|
export type ECSPaperJSON = {
|
|
mainNumber: number;
|
|
mainNumber: number;
|
|
subNumber: string;
|
|
subNumber: string;
|
|
@@ -311,11 +396,12 @@ export type ECSPaperJSON = {
|
|
answer: RichTextJSON;
|
|
answer: RichTextJSON;
|
|
}[];
|
|
}[];
|
|
|
|
|
|
-// 在线考试平台试卷格式
|
|
|
|
|
|
+/** 在线考试平台试卷格式 */
|
|
export type OExamPaperJSON = OExamPaperJSONQuestionList[];
|
|
export type OExamPaperJSON = OExamPaperJSONQuestionList[];
|
|
|
|
|
|
interface OExamPaperJSONQuestionList {
|
|
interface OExamPaperJSONQuestionList {
|
|
- number: number; // 大题号
|
|
|
|
|
|
+ /** 大题号 */
|
|
|
|
+ number: number;
|
|
questions: OExamPaperJSONQuestion[];
|
|
questions: OExamPaperJSONQuestion[];
|
|
}
|
|
}
|
|
interface OExamPaperJSONQuestion {
|
|
interface OExamPaperJSONQuestion {
|
|
@@ -326,4 +412,4 @@ interface OExamPaperJSONQuestion {
|
|
options: Array<{ number: number; body: RichTextJSON }>;
|
|
options: Array<{ number: number; body: RichTextJSON }>;
|
|
subQuestions: OExamPaperJSONQuestion[] | null;
|
|
subQuestions: OExamPaperJSONQuestion[] | null;
|
|
}
|
|
}
|
|
-// 多媒体评卷 end
|
|
|
|
|
|
+//#endregion
|