### 依赖环境 * node \>=16.0.0 * npm \>=6.14.13 * vue 2.0 * jquery ^3.6.3 * xe-utils ^3.5.6 * element-ui ^2.15.9 ### 阅读器对接流程 1. 部署数字教材包 2. 解析数字教材包中的localViewData.js文件 3. 将教材目录信息入库 6. 添加授课资源 7. 查询授课资源列表 ### 分工(包含学生PC端、学生移动端、教师PC端) #### 斯麦尔 1. 数字教材包的加解密 2. 数字教材包离线阅读解密 3. 数字教材内容展示 4. 数字教材页面交互,包括:目录、书签、笔记、高亮、授课资源。(业务平台提供数据接口) 6. 数字教材授课资源交互,包括:资源上传、教师笔记添加、资源展示、资源与教材关联。(业务平台提供数据接口,业务平台提供教师资源阅读服务) 7. 多类数字教材阅读行为回传。(业务平台提供数据接口) #### 业务方 1. 数字教材包上传、解密 2. 将教材目录信息入库 3. 解析数字教材包中的localViewData.js文件 4. 教师资源阅读服务(图片、音频、视频、WORD、EXCEL、PPT、PDF) 5. 教师资源文件上传、数据存储 6. 阅读器与业务系统[交互接口](#所需接口) ### 所需接口 1. 笔记添加、编辑、删除、列表查询(学生) 2. 授课资源添加、编辑、删除、列表查询(教师) 3. 高亮添加、删除、列表查询(可根据教材内容排序) 4. 书签添加、删除、列表查询 5. 文件上传 7. 授课资源列表查询 14. 教师资源下载 15. 授课资源阅读服务(WORD、EXCEL、PPT、PDF) 16. 更新用户学习次数、学习时长 ### 引入组件 ##### 1.组件包形式引用 ![image-20230110174057846](C:\Users\FYF\AppData\Roaming\Typora\typora-user-images\image-20230110174057846.png) ~~~ 在src文件夹中新建plugin文件夹,将组件包解压到plugin文件夹 ~~~ 在 main.js 中写入以下内容: ~~~javascript import Vue from 'vue' import XML from "./plugin/xml-digital-teaching/lib/index"; import "./plugin/xml-digital-teaching/lib/theme/index.css"; import App from './App.vue' Vue.use(XML) new Vue({ render: h => h(App), }).$mount('#app') ~~~ ### 组件 #### xmlDigitalTeaching 数字教材阅读器组件,用于渲染数字教材 ##### 代码示例 ~~~vue ~~~ ##### 参数说明 | 参数 | 说明 | 类型 | 默认值 | | ------------------------------------ | ------------------------------------------------------------ | ------- | ------------ | | systemEnvId | 使用阅读器系统ID,由斯麦尔提供 | String | 无 | | navBarHeight | 业务系统导航栏高度 | Number | 0 | | classId | 班级唯一标识 | String | 无 | | gradesName | 班级名称 | String | 无 | | userType | 用户类型,可选teacher、student | String | student | | isShowTeacherResource | 是否显示教师资源 | Boolean | false | | learningDuration | 已学习总时长 | Number | 0 | | [textBookData](#textBookData.json) | 教材详细信息 | Object | 无 | | [catalogList](#catalogList.json) | 教材目录列表 | Array | 无 | | [looseLeafData](#looseLeafData.json) | 所有活页信息 | Object | 无 | | basisPath | 资源文件在服务器基础路径 | String | 无 | | location | 阅读开始位置 | String | 无 | | [notesList](#notesList) | 笔记列表 | Array | 无 | | highlightList | 高亮列表 | Array | 无 | | [bookmarkList](#bookmarkList) | 书签列表 | Array | 无 | | [highlightList](#highlightList) | 高亮列表 | Array | 无 | | [resourcesList](#resourcesList) | 授课资源列表 | Array | 无 | | pageType | 页面类型 h5、pc、pad | String | h5 | | isTrial | 是否为试读模式 | Boolean | false | | isTrialIndex | 试读百分比 | Number | 10 | | chapterId | 打开教材指定章节,章节ID | String | 无 | | continueReading | 是否以弹窗形式提示用户继续阅读,chapterId为空时生效 | Boolean | false | | downloadType | 下载资源方式 pop-up:弹窗提示,click:下载回调 | String | pop-up | | officePreviewPath | ffice 在线预览路径 格式:地址加参数名:https:www.xxx.com?src= | String | 微软在线预览 | | trialText | 试读结束提示语,富文本格式 | String | 试读结束 | | action | 文件上传地址,上传教师资源时必传 | String | 无 | | headers | 设置上传的请求头部 | Object | 无 | | data | 上传时附带的额外参数 | Object | 无 | ##### 事件 | 事件名 | 说明 | 回调参数 | | ------------------ | ------------ | ------------------------------------------------ | | updateReadLocation | 更新阅读进度 | [newLocation](#newLocation):当前阅读位置信息 | | addNote | 确认添加笔记 | [notesInfo](#notesInfo):添加笔记信息 | | editNote | 更新笔记 | [notesInfo](#notesInfo):更新笔记信息 | | deleteNote | 删除笔记 | [notesInfo](#notesInfo):删除笔记信息 | | addBookmark | 添加书签 | [bookmarkInfo](#bookmarkInfo):添加书签信息 | | deleteBookmark | 删除书签 | [bookmarkInfo](#bookmarkInfo):删除书签信息 | | addHighlight | 添加高亮 | [highlightInfo](#highlightInfo):添加高亮信息 | | deleteHighlight | 删除高亮 | [highlightInfo](#highlightInfo):删除高亮信息 | | addTestPaper | 添加试卷 | [testPaperInfo](#testPaperInfo):添加试卷信息 | | deleteTestPaper | 删除试卷 | [testPaperInfo](#testPaperInfo):删除试卷信息 | | addResources | 添加授课资源 | [resourcesInfo](#resourcesInfo):添加授课资源信息 | | editResources | 编辑授课资源 | [resourcesInfo](#resourcesInfo):添加授课资源信息 | | deleteResource | 删除授课资源 | [resourcesInfo](#resourcesInfo):删除授课资源信息 | | addTeacherNote | 添加教师笔记 | [notesInfo](#notesInfo):笔记信息 | | editTeacherNote | 修改教师笔记 | [notesInfo](#notesInfo):笔记信息 | | deleteTeacherNote | 删除教师笔记 | [notesInfo](#notesInfo):笔记信息 | | downloadFile | 下载资源 | [fileInfo](#fileInfo):资源信息 | | settingChange | 阅读设置 | | ##### 保存阅读进度 > updateReadLocation监听实时更新当前阅读位置信息,下次进入将位置信息传入组件 ##### 添加笔记 > addNote确认添加笔记事件返回笔记Id,对应的位置信息,选择内容,笔记内容,==添加成功更新笔记列表数据== > > editNote更新笔记事件返回笔记Id,笔记内容等信息 > > deleteNote删除笔记事件返回笔记Id等信息,==删除成功更新笔记列表数据== ##### 添加书签 > addBookmark添加书签事件返回图书位置等信息,==添加成功更新书签列表数据== > > deleteBookmark删除书签事件返回书签ID等信息,==删除成功更新书签列表数据== ##### 添加高亮 > addHighlight添加高亮事件返回图书位置等信息,==添加成功更新高亮列表数据== > > deleteHighlight删除高亮事件返回高亮ID等信息,==删除成功更新高亮列表数据== ##### 教师端添加试题 > addTestPaper添加试题事件返回图书位置等信息,==添加成功更新资源列表数据== > > deleteTestPaper删除试题事件返回试题ID等信息,==删除成功更新资源列表数据== ##### 教师端添加资源 > addResources添加资源事件返回图书位置等信息,==添加成功更新资源列表数据== > > deleteResources删除资源事件返回资源ID等信息,==删除成功更新资源列表数据== ##### 下载资源 > downloadFile 下载资源事件,返回资源文件信息 ##### 组件内部方法 | 方法名 | 说明 | 参数 | | --------- | ------ | ------------------------------------------------ | | showToast | 提示框 | text:提示的文字 , type : warning、success、error | ##### 数据格式 ###### textBookData.json ~~~json { "createBy":null, "createByName":null, "createTime":"2023-01-10 22:44:25", "delFlag":null, "delTime":null, "examineDesc":null, "examineStatus":"0", "id":"1612822675944177664", "isbn":null, "params":{}, "remark":null, "searchValue":null, "submitTime":null, "textBooksAuthor":null, "textBooksDesc":null, "textBooksFileUrl":"", "textBooksName":"测试所有组件", "textBooksType":null, "updateBy":null, "updateByName":null, "updateTime":"2023-01-12 13:56:07" } ~~~ ###### catalogList.json ~~~json { "data": [ { "children": [], "id": "1612822676606877696", "label": "章节1", "level": null, "orderNum": null, "parentId": null } ] } ~~~ ###### looseLeafData.json ~~~json { "1612822676606877696":{ "createBy":"admin", "createByName":null, "createTime":"2023-01-10 22:44:26", "delFlag":"0", "delTime":null, "examineDesc":null, "examineStatus":"0", "id":"1612822676606877696", "looseLeafDesc":null, "looseLeafFileUrl":"", "looseLeafInfo":"[{\"data\": {\"pGroupData\": {\"textData\": {\"html\": \"暂无内容
这是文本

\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-text-group0.9220515733715631\", \"componentsName\": \"xml-single-text-group\"}, {\"data\": {\"pGroupData\": {\"titleTextData\": {\"html\": \"

这是标题

\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"titleFirst0.15542352103317736\", \"componentsName\": \"titleFirst\"}, {\"data\": {\"pGroupData\": {\"imageData\": {\"imageList\": [{\"link\": \"\", \"title\": \"开发-2-背景\", \"source\": \"upload\", \"content\": \"说明\", \"uploadFileUrl\": \"./image/5fdb8395-fc66-44e3-91e6-e6167af9677c.jpg\"}], \"imageMode\": \"dan-tu\", \"showEffect\": \"hua-lang\", \"clickEffect\": \"dian-ji-fang-da\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-image-group0.9871052058974397\", \"componentsName\": \"xml-single-image-group\"}, {\"data\": {\"pGroupData\": {\"musicData\": {\"playMode\": \"dan-ci\", \"playStyle\": \"yuan-wen\", \"musicSetList\": [{\"link\": \"\", \"title\": \"周杰伦-红尘客栈\", \"source\": \"upload\", \"content\": \"内容\", \"materialId\": \"\", \"coverFileUrl\": \"./defaultCover/audio-player.png\", \"uploadFileUrl\": \"./audio/c69259f3-7bd0-4ab8-ba33-6ff626811829.mp3\"}], \"scheduleControl\": \"yes\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-music-group0.4729416469673975\", \"componentsName\": \"xml-single-music-group\"}, {\"data\": {\"pGroupData\": {\"videoData\": {\"link\": \"\", \"playMode\": \"xun-huan\", \"playStyle\": \"yuan-wen\", \"videoSetList\": [{\"link\": \"\", \"title\": \"1659943488674121\", \"source\": \"upload\", \"content\": \"内容\", \"materialId\": \"\", \"coverFileUrl\": \"\", \"uploadFileUrl\": \"./video/2d4e8a72-ab40-4e54-b213-41bc3a17e055.mp4\"}], \"scheduleControl\": \"yes\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-video-group0.9655721950423428\", \"componentsName\": \"xml-single-video-group\"}, {\"data\": {\"pGroupData\": {\"resourceData\": {\"resourceType\": \"zhan-nei\", \"resourceSetList\": [{\"link\": \"\", \"title\": \"java\", \"source\": \"upload\", \"content\": \"内容\", \"fileSize\": 26163, \"fileFormat\": \"zip\", \"materialId\": \"\", \"coverFileUrl\": \"./defaultCover/pdf-resource.png\", \"uploadFileUrl\": \"./resource/f76b7c64-57dc-4d6f-9fc2-88fc189def15.zip\"}]}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-resource-group0.6167344288655028\", \"componentsName\": \"xml-single-resource-group\"}, {\"data\": {\"pGroupData\": {\"ebookData\": {\"ebookSetList\": [{\"isbn\": \"isbn\", \"link\": \"\", \"name\": \"新冠诊疗方案-第9版\", \"author\": \"作者\", \"source\": \"upload\", \"content\": \"内容\", \"publisher\": \"出版社\", \"fileFormat\": \"pdf\", \"materialId\": \"\", \"coverFileUrl\": \"./defaultCover/epub.png\", \"uploadFileUrl\": \"./ebook/dbb05383-520c-4ff4-801c-c3bdd219c271.pdf\"}], \"resourceType\": \"inside\"}}, \"extendParams\": {}}, \"xmlCompRef\": \"xml-single-ebook-group0.12258282282201893\", \"componentsName\": \"xml-single-ebook-group\"}]", "looseLeafModule":"1", "looseLeafName":null, "looseLeafType":null, "params":{}, "remark":null, "searchValue":null, "submitTime":null, "tmpLooseId":null, "updateBy":"1", "updateByName":null, "updateTime":"2023-01-12 13:55:38" } } ~~~ ###### newLocation ~~~json { location: '', //当前阅读位置 schedule: '', //当前阅读进度 learningTime: '', //本次学习时长 learningDuration: '' //总学习时长 } ~~~ ###### notesInfo ~~~json { blockIndex: 6, //选中内容块在教材中的索引 chapterOrderNum: 2, //章排序字段 id: 1717740841473, //主键 location: 'xml-digital-teaching/1780053976781262849/paragraphRedtheme50.4890346943653967', //所在块的位置信息(章id+块id+段id) locationChapterId: '1780053976781262849', //所在章节id markEfiCode: 'mark(0/0:112,0/0:125)', //选中内容 markId: 'mark__2f63d588-f672-4a07-9541-c964b292e9a6', //笔记标记id noteContent: '输入的笔记内容', selectionText: '理论与实践、智能车竞赛任务', styleType: 'mk-underline__dashed', textOrderNum: '6000000000112',//选中内容排序字段 topChapterId: '1780053976781262849', //所在章节一级目录id topChapterLabel: '内容简介', type: 'note__student' } ~~~ ###### notesList ~~~json [{ blockIndex: 6, chapterOrderNum: 2, id: 1717740841473, location: 'xml-digital-teaching/1780053976781262849/paragraphRedtheme50.4890346943653967', locationChapterId: '1780053976781262849', markEfiCode: 'mark(0/0:112,0/0:125)', markId: 'mark__2f63d588-f672-4a07-9541-c964b292e9a6', noteContent: '输入的笔记内容', selectionText: '理论与实践、智能车竞赛任务', styleType: 'mk-underline__dashed', textOrderNum: '6000000000112', topChapterId: '1780053976781262849', topChapterLabel: '内容简介', type: 'note__student' }, { blockIndex: 6, chapterOrderNum: 2, id: 1717740841473, location: 'xml-digital-teaching/1780053976781262849/paragraphRedtheme50.4890346943653967', locationChapterId: '1780053976781262849', markEfiCode: 'mark(0/0:112,0/0:125)', markId: 'mark__2f63d588-f672-4a07-9541-c964b292e9a6', noteContent: '输入的笔记内容', selectionText: '理论与实践、智能车竞赛任务', styleType: 'mk-underline__dashed', textOrderNum: '6000000000112', topChapterId: '1780053976781262849', topChapterLabel: '内容简介', type: 'note__student' }] ~~~ ###### bookmarkInfo ~~~json { bookmarkId: 1717740959575, bookmarkText: '版权信息', chapterId: '1780053976143728640', chapterOrderNum: 2, classId: '', creationTime: '2024-06-07T06:15:59.575Z', firstLevelId: '1780053976143728640', firstLevelLabel: '版权信息', id: 1717740959575, location: 'xml-digital-teaching/1780053976143728640/splitlineTwentythreeLibrary0.5093659374044828', locationChapterId: '1780053976781262849', orderNum: 2, type: 'bookmark' } ~~~ ###### bookmarkList ~~~json [{ bookmarkId: 1717740959575, bookmarkText: '版权信息', chapterId: '1780053976143728640', chapterOrderNum: 2, classId: '', creationTime: '2024-06-07T06:15:59.575Z', firstLevelId: '1780053976143728640', firstLevelLabel: '版权信息', id: 1717740959575, location: 'xml-digital-teaching/1780053976143728640/splitlineTwentythreeLibrary0.5093659374044828', locationChapterId: '1780053976781262849', orderNum: 2, type: 'bookmark' },{ bookmarkId: 1717740959575, bookmarkText: '版权信息', chapterId: '1780053976143728640', chapterOrderNum: 2, classId: '', creationTime: '2024-06-07T06:15:59.575Z', firstLevelId: '1780053976143728640', firstLevelLabel: '版权信息', id: 1717740959575, location: 'xml-digital-teaching/1780053976143728640/splitlineTwentythreeLibrary0.5093659374044828', locationChapterId: '1780053976781262849', orderNum: 2, type: 'bookmark' }] ~~~ ###### highlightInfo ~~~json { blockIndex: 8, chapterOrderNum: 3, id: 1717741063393, location: 'xml-digital-teaching/1780053977133584385/xml-single-text-group0.3489658035103893', locationChapterId: '1780053977133584385', markEfiCode: 'mark(1/0:104,1/0:120)', markId: 'mark__ab53333b-07a7-4318-bd7c-b20d492103cf', selectionText: '汽车为研究对象的创意性科技竞赛,', styleType: 'mk-hightlight__default', textOrderNum: '8000001000104', topChapterId: '1780053977133584385', topChapterLabel: '前言', type: 'highlight__student' } ~~~ ###### highlightList ~~~json [{ blockIndex: 8, chapterOrderNum: 3, id: 1717741063393, location: 'xml-digital-teaching/1780053977133584385/xml-single-text-group0.3489658035103893', locationChapterId: '1780053977133584385', markEfiCode: 'mark(1/0:104,1/0:120)', markId: 'mark__ab53333b-07a7-4318-bd7c-b20d492103cf', selectionText: '汽车为研究对象的创意性科技竞赛,', styleType: 'mk-hightlight__default', textOrderNum: '8000001000104', topChapterId: '1780053977133584385', topChapterLabel: '前言', type: 'highlight__student' },{ blockIndex: 8, chapterOrderNum: 3, id: 1717741063393, location: 'xml-digital-teaching/1780053977133584385/xml-single-text-group0.3489658035103893', locationChapterId: '1780053977133584385', markEfiCode: 'mark(1/0:104,1/0:120)', markId: 'mark__ab53333b-07a7-4318-bd7c-b20d492103cf', selectionText: '汽车为研究对象的创意性科技竞赛,', styleType: 'mk-hightlight__default', textOrderNum: '8000001000104', topChapterId: '1780053977133584385', topChapterLabel: '前言', type: 'highlight__student' }] ~~~ ###### testPaperInfo ~~~json { paperName: "试卷名称", resourcesType:"paper", location: "添加资源的位置信息", textBookId: "教材Id", chapterId:"章节Id", orderNum:"排序字段" questionList: [{ //单选题 "data": { "pGroupData": { "questionData": { "showAnswer": "true", "showAnalysis": "true", "showRecommend": "true", "questionSetList": [{ "id": //试题id, "stem": { "content": 题干, "fileInfo": { "fileUrl": //题干的文件路径, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileUrl": //文件地址, "analysis": { "content": //解析内容, "fileInfo": { "fileUrl": //解析文件路径 "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "duration": //音频时长, "fileName": //文件名, "fileType": //文件类型, "subjectId": "", "fileSuffix": //文件后缀, "includeAudio": "1", "questionType": "2", "answerSequence": "", "questionOption": [{ "title": "A", "content": 选项内容, "fileInfo": { "fileUrl": 文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "B", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "C", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "D", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }], "standardAnswer": [{ "title": "A", "content": 标答内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }], "playbackControl": "0", "knowledgePointVoList": [] }] } }, "extendParams": {} }, }, { //多选题 "data": { "pGroupData": { "questionData": { "showAnswer": "true", "showAnalysis": "true", "showRecommend": "true", "questionSetList": [{ "id": //试题id, "stem": { "content": 题干, "fileInfo": { "fileUrl": //题干的文件路径, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileUrl": //文件地址, "analysis": { "content": //解析内容, "fileInfo": { "fileUrl": //解析文件路径 "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "duration": //音频时长, "fileName": //文件名, "fileType": //文件类型, "subjectId": "", "fileSuffix": //文件后缀, "includeAudio": "1", "questionType": "2", "answerSequence": "", "questionOption": [{ "title": "A", "content": 选项内容, "fileInfo": { "fileUrl": 文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "B", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "C", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "D", "content": 选项内容, "fileInfo": { "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }], "standardAnswer": [{ "title": "A", "content": 标答内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "C", "content": //标答内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, { "title": "D", "content": //标答内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }], "playbackControl": "0", "knowledgePointVoList": [] }] } }, "extendParams": {} }, }, { //判断题 "data": { "pGroupData": { "questionData": { "showAnswer": "true", "showAnalysis": "true", "showRecommend": "true", "questionSetList": [{ "id": //试题id, "stem": { "content": //题干内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileUrl": 文件路径, "analysis": { "content": 解析内容, "fileInfo": { "fileUrl": //解析文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileType": //类型, "subjectId": "", "fileSuffix": //文件后缀, "includeAudio": "1", "questionType": "3", "answerSequence": "", "questionOption": "[]", "standardAnswer": ["正确"] //标答, "playbackControl": "0", "knowledgePointVoList": [] }] } }, "extendParams": {} }, }, { //简答题 "data": { "pGroupData": { "questionData": { "showAnswer": "true", "showAnalysis": "true", "showRecommend": "true", "questionSetList": [{ "id": //试题id, "stem": { "content": 题干内容, "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileUrl": //文件地址, "analysis": { "content": //解析内容, "fileInfo": { "fileUrl": //解析文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": //文件类型, "subjectId": "", "fileSuffix": //后缀, "includeAudio": "1", "questionType": "13", "answerSequence": "", "questionOption": "[]", "standardAnswer": { "content": 标答内容 "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "playbackControl": "0", "knowledgePointVoList": [] }] } }, "extendParams": {} }, }, { //填空题 "data": { "pGroupData": { "questionData": { "showAnswer": "true", "showAnalysis": "true", "showRecommend": "true", "questionSetList": [{ "id": 试题id, "stem": { "content": 题干 ", "fileInfo": { "fileUrl": //文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "fileUrl": //文件地址, "analysis": { "content": 解析内容, "fileInfo": { "fileUrl": //解析文件地址, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "fileSuffix": "mp4" //文件后缀 } }, "duration": //音频或者视频的时长, "fileName": //文件名, "fileType": "video/mp4" //文件类型, "subjectId": "", "fileSuffix": "mp4" //文件后缀, "includeAudio": "1", "questionType": "10", "answerSequence": "A,B;", "questionOption": "[]", "standardAnswer": [{ "title": "A", "content": //选项内容, "fileInfo": {} }, { "title": "B", "content": //选项内容, "fileInfo": {} }], "playbackControl": "0", "knowledgePointVoList": [] }] } }, "extendParams": {} }, } ] } ~~~ ###### resourcesInfo ~~~json { blockIndex: 28, chapterId: '7038441430792015872', chapterOrderNum: 4, creationTime: '2024-06-07T06:20:11.119Z', duration: 0, fileExt: 'jpg', fileUrl: 'https://cmp-uploadfile-dev.oss-cn-beijing.aliyuncs.com/teaching_material/16574/7027199990597632.jpg', firstLevelId: '1607971683998171136', firstLevelLabel: '项目一 工业机器人概述', id: 1717741211119, isDownload: 0, isStudentShow: 0, location: 'xml-digital-teaching/7038441430792015872/xml-single-text-group0.7097987508783292', locationChapterId: '1607971683998171136', markEfiCode: 'mark(2/0/0:56,2/0/0:71)', markId: 'mark__96d6b7b0-0c25-42cd-8244-c2a4a997b964', noteContent: '', orderNum: 0, resourcesName: '40.jpg', resourcesType: 'image', selectionText: '美国机器人协会给机器人下的定义', textBookId: '1607971683880730624', textOrderNum: '28000002000056', type: 'note__teacher' } ~~~ ###### resourcesList ~~~json [{ blockIndex: 28, chapterId: '7038441430792015872', chapterOrderNum: 4, creationTime: '2024-06-07T06:20:11.119Z', duration: 0, fileExt: 'jpg', fileUrl: 'https://cmp-uploadfile-dev.oss-cn-beijing.aliyuncs.com/teaching_material/16574/7027199990597632.jpg', firstLevelId: '1607971683998171136', firstLevelLabel: '项目一 工业机器人概述', id: 1717741211119, isDownload: 0, isStudentShow: 0, location: 'xml-digital-teaching/7038441430792015872/xml-single-text-group0.7097987508783292', locationChapterId: '1607971683998171136', markEfiCode: 'mark(2/0/0:56,2/0/0:71)', markId: 'mark__96d6b7b0-0c25-42cd-8244-c2a4a997b964', noteContent: '', orderNum: 0, resourcesName: '40.jpg', resourcesType: 'image', selectionText: '美国机器人协会给机器人下的定义', textBookId: '1607971683880730624', textOrderNum: '28000002000056', type: 'note__teacher' },{ blockIndex: 28, chapterId: '7038441430792015872', chapterOrderNum: 4, creationTime: '2024-06-07T06:20:11.119Z', duration: 0, fileExt: 'jpg', fileUrl: 'https://cmp-uploadfile-dev.oss-cn-beijing.aliyuncs.com/teaching_material/16574/7027199990597632.jpg', firstLevelId: '1607971683998171136', firstLevelLabel: '项目一 工业机器人概述', id: 1717741211119, isDownload: 0, isStudentShow: 0, location: 'xml-digital-teaching/7038441430792015872/xml-single-text-group0.7097987508783292', locationChapterId: '1607971683998171136', markEfiCode: 'mark(2/0/0:56,2/0/0:71)', markId: 'mark__96d6b7b0-0c25-42cd-8244-c2a4a997b964', noteContent: '', orderNum: 0, resourcesName: '40.jpg', resourcesType: 'image', selectionText: '美国机器人协会给机器人下的定义', textBookId: '1607971683880730624', textOrderNum: '28000002000056', type: 'note__teacher' } ] ~~~ ###### fileInfo: ~~~json { content:'', coverFileUrl:'', fileFormat:'', fileSize:'', link:'', materialId:'', source:'', title:'', uploadFileUrl:'' } ~~~