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