Ver código fonte

Merge branch 'beta'

lsc 4 meses atrás
pai
commit
7ea4acf9d8

+ 1 - 1
dist/index.html

@@ -27,7 +27,7 @@
     html,
     body{
       font-family: '黑体';
-    }</style><link href=./static/css/app.93052de68e1c8698105b48c506d2d895.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.acbd8cb5870df69e0141.js></script><script type=text/javascript src=./static/js/app.688076fe4c02981052b2.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.f9e19d1e37e573253b5230c7d5721dec.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.acbd8cb5870df69e0141.js></script><script type=text/javascript src=./static/js/app.eb050e9360d1be05745f.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/app.f9e19d1e37e573253b5230c7d5721dec.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/app.f9e19d1e37e573253b5230c7d5721dec.css.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.eb050e9360d1be05745f.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.eb050e9360d1be05745f.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


+ 3 - 3
package-lock.json

@@ -2110,7 +2110,7 @@
     },
     "node_modules/@microsoft/fetch-event-source": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
       "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="
     },
     "node_modules/@mrmlnc/readdir-enhanced": {
@@ -25636,7 +25636,7 @@
     },
     "@microsoft/fetch-event-source": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
       "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="
     },
     "@mrmlnc/readdir-enhanced": {
@@ -38861,7 +38861,7 @@
         },
         "@microsoft/fetch-event-source": {
           "version": "2.0.1",
-          "resolved": "https://registry.npmmirror.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
           "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="
         },
         "@mrmlnc/readdir-enhanced": {

+ 31 - 24
src/components/classRoomHelper/index.vue

@@ -42,7 +42,7 @@
         :taskCount="taskCount"
       />
 
-      <workFlowIframe v-if="itemType == 6 && iframeSrc.length" :iframeSrc="iframeSrc"></workFlowIframe>
+      <workFlowIframe v-show="itemType == 6 && iframeSrc.length" :iframeSrc="iframeSrc"></workFlowIframe>
       <!-- <dialogArea
         :courseDetail="courseDetail"
 				:openMegaphone="openMegaphone"
@@ -61,6 +61,7 @@
         >
           <div class="ch_nav_box_topFixed_popover">
             <div
+            v-if="IsLookOpen"
               class="ch_nav_box_topFixed_popover_item"
               @click="$emit('studentFreePreview', !IsLookOpen)"
             >
@@ -275,7 +276,7 @@
           <div>对话</div>
         </div>
         <div
-          v-if="iframeSrc.length  && canUseCourseId.includes(courseId)"
+          v-if="iframeSrc.length  && (canUseCourseId.includes(courseId) || oid == '91796dfb-8791-11ef-9b30-005056b86db5')"
           :class="[
             'ch_nav_box_middle_item',
             itemType == 6 ? 'ch_nav_box_middle_item_active' : ''
@@ -557,6 +558,7 @@ export default {
   data() {
     return {
       userid: this.$route.query.userid,
+      oid: this.$route.query.oid,
       courseId: this.$route.query.courseId,
       tcid2: this.$route.query.tcid,
       type: 0,
@@ -825,28 +827,33 @@ ${_textData}
       });
     },
     setIframeSrc() {
-      const array = [
-        { index: 0, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/6c5e785f-d1b0-11ef-b730-12e77c4cb76b', name:'赛规者'}] },
-        { index: 1, src:
-          [
-            {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/45ab8600-d1b3-11ef-b730-12e77c4cb76b', name:'共情者'},
-            {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/9645d16d-d1b7-11ef-b855-12e77c4cb76b', name:'解析者'},
-            {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/1f8ee1b8-d258-11ef-8b75-12e77c4cb76b', name:'构想者'},
-          ]
-        },
-        { index: 2, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/2bf156bc-d1ae-11ef-b730-12e77c4cb76b', name:'建模者'}] },
-        { index: 3, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/2bf156bc-d1ae-11ef-b730-12e77c4cb76b', name:'建模者'}] },
-        { index: 4, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
-        { index: 5, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
-        { index: 6, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
-        { index: 7, src: [
-          {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/cd01ace0-d259-11ef-8b75-12e77c4cb76b', name:'项目书编者'},
-          {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/a2f4c70a-d1b0-11ef-b730-12e77c4cb76b', name:'答辩者'},
-          ]
-        },
-      ];
-      const matched = array.find(el => el.index === this.courseType);
-      this.iframeSrc = matched ? matched.src : [];
+      if(this.oid == '91796dfb-8791-11ef-9b30-005056b86db5'){
+        this.iframeSrc = [{src:'https://knowledge.cocorobo.hk/zh-HK/story-telling/44c84575-962a-41c6-9aa4-6f90bcd5f5d1',name:'学习助手'}]
+      }else {
+        const array = [
+          { index: 0, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/6c5e785f-d1b0-11ef-b730-12e77c4cb76b', name:'赛规者'}] },
+          { index: 1, src:
+            [
+              {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/45ab8600-d1b3-11ef-b730-12e77c4cb76b', name:'共情者'},
+              {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/9645d16d-d1b7-11ef-b855-12e77c4cb76b', name:'解析者'},
+              {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/1f8ee1b8-d258-11ef-8b75-12e77c4cb76b', name:'构想者'},
+            ]
+          },
+          { index: 2, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/2bf156bc-d1ae-11ef-b730-12e77c4cb76b', name:'建模者'}] },
+          { index: 3, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/2bf156bc-d1ae-11ef-b730-12e77c4cb76b', name:'建模者'}] },
+          { index: 4, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
+          { index: 5, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
+          { index: 6, src: [{src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/73371371-d1a8-11ef-b730-12e77c4cb76b', name:'编码者'}] },
+          { index: 7, src: [
+            {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/cd01ace0-d259-11ef-8b75-12e77c4cb76b', name:'项目书编者'},
+            {src:'https://beta.knowledge.cocorobo.cn/zh-CN/story-telling/a2f4c70a-d1b0-11ef-b730-12e77c4cb76b', name:'答辩者'},
+            ]
+          },
+        ];
+        const matched = array.find(el => el.index === this.courseType);
+        this.iframeSrc = matched ? matched.src : [];
+      }
+
     },
     //计时
     startTime(time) {

+ 116 - 0
src/components/components/appStoreC.vue

@@ -0,0 +1,116 @@
+<template>
+    <div>
+        <el-dialog
+            :visible.sync="appDialogVisible"
+            :append-to-body="true"
+            width="100%"
+            fullscreen
+            :before-close="handleClose"
+            :show-close="false"
+            class="dialog_diyCopy "
+            >
+            <iframe
+                allow= "camera *; microphone *;display-capture;midi;encrypted-media;"
+                allowfullscreen
+                frameborder
+                border= "0"
+                scrolling = "no"
+                :src="urlData"
+                ref="appStore"
+                style="width: 100%;height: 90%;"
+            ></iframe>
+            <div style="display: flex;justify-content: flex-end;padding: 0 30px;box-sizing: border-box;">
+                <el-button type="primary" style="margin-right: 20px;" size="medium" @click="handleClose">关闭</el-button>
+                <el-button type="primary" @click="uploadWork" size="medium">提交作业</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+    export default {
+        props: ["sStudent","courseType","taskCount","toolindex"],
+        data() {
+            return {
+                urlData:"",
+                userId: '',
+                appDialogVisible: false,
+                id: this.$route.query.courseId,
+            }
+        },
+        methods: {
+            getData(val,uid){
+                this.urlData = val
+                this.userId = uid
+                this.appDialogVisible = true
+            },
+            handleClose() {
+                this.urlData = ''
+                this.userId = ''
+                if (document.fullscreenElement) {
+                    this.exitFullScreen();
+                } 
+                this.appDialogVisible = false
+            },
+            exitFullScreen() {
+                if (document.exitFullscreen) {
+                    document.exitFullscreen();
+                } else if (document.mozCancelFullScreen) { /* Firefox */
+                    document.mozCancelFullScreen();
+                } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
+                    document.webkitExitFullscreen();
+                } else if (document.msExitFullscreen) { /* IE/Edge */
+                    document.msExitFullscreen();
+                }
+            },
+            uploadWork(){
+                // console.log('window.exposed_outputs',window.exposed_outputs);
+                let _iframe = this.$refs.appStore;
+                console.log('sStudent',this.userId);
+                
+                // window.exposed_outputs
+                let Cow = JSON.stringify(_iframe.contentWindow.exposed_outputs)
+
+                let params = [
+                    {
+                    uid: this.userId,
+                    cid: this.id,
+                    stage: this.courseType,
+                    task: this.taskCount,
+                    tool: this.toolindex,
+                    content: Cow,
+                    type: 20,
+                    atool:72
+                    }
+                ];
+                this.ajax
+                    .post(this.$store.state.api + "addCourseWorks3-2", params)
+                    .then(res => {
+                    this.$message({
+                        message: "提交成功",
+                        type: "success"
+                    });
+                        this.dialogVisibleSelectTeacher = false;
+                        // this.selectAnswer = {};
+                        this.$emit('selectSWorks');
+                        this.$emit('selectStudent');
+                    })
+                    .catch(err => {
+                        this.$message.error("提交失败");
+                        console.error(err);
+                    });
+            }
+        },  
+    }
+</script>
+
+<style scoped>
+.dialog_diyCopy >>> .el-dialog__header {
+  display: none !important;
+  /* position: relative; */
+}
+.dialog_diyCopy >>> .el-dialog__body {
+  padding: 0 !important;
+  height: 100% !important;
+}
+</style>

+ 2 - 1
src/components/components/askStatic2.vue

@@ -112,7 +112,7 @@
                         cursor: pointer;
                       "
                     >
-                      <span>{{ item.checkList[checkIndex] }}</span>
+                      <span>{{ optionTypeList[checkIndex] }}.{{ item.checkList[checkIndex] }}</span>
                     </div>
                   </el-tooltip>
                 </span>
@@ -189,6 +189,7 @@ export default {
   props: ["askJSON", "checkJson"],
   data() {
     return {
+      optionTypeList:['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
       askJSONC: {},
       dialogVisible: false,
       person: [],

+ 116 - 16
src/components/components/choseWorksDetailDialog.vue

@@ -32,7 +32,7 @@
                 <div class="s_b_m_b_i_m_title" v-if="testData">
                   <div style="display: flex;justify-content: space-between;align-items: center;">
                     <div class="titTop">
-                      <img :src="toolList.find(item=>item.value===toolType).img" alt/>
+                      <img style="border-radius: 5px;" :src="toolList.find(item=>item.value===toolType).img" alt/>
                       <span>{{ toolList.find(item=>item.value===toolType).label }}</span>
                     </div>
 
@@ -51,6 +51,10 @@
                       v-if="[57].includes(toolType)"
                     @click="upLoadCocoPi">作业提交</el-button>
 
+                    <el-button type="primary"
+                      size="small"
+                      v-if="[72].includes(toolType)"
+                    @click="upLoadApp">作业提交</el-button>
                   </div>
 
                   <span v-if="testData.toolDetail">{{ testData.toolDetail }}</span>
@@ -382,7 +386,7 @@
                   </div>
                 </div>
                 <!-- 思维网格 电子白板 思维导图 -->
-                <div id="loadLi_JieE" v-if="[7,1,3,57,18,21,71,23,24,32,63,28,31,39,66].includes(toolType)" style="position: relative; " class="s_b_m_b_i_m_iframe">
+                <div id="loadLi_JieE" v-if="[7,1,3,57,18,21,71,23,24,32,63,28,31,39,66,72].includes(toolType)" style="position: relative;min-height: 850px; " class="s_b_m_b_i_m_iframe">
                   <div style="display: none;
                   position: absolute;
                   height: 100%;
@@ -547,6 +551,19 @@
                         >
                     </iframe>
                   </div>
+                  <!-- 公式编辑 -->
+                  <div v-if="[72].includes(toolType)" class="s_b_m_b_i_m_evaluation">
+                    <iframe 
+                        allow= "camera *; microphone *;display-capture;midi;encrypted-media;"
+                        frameborder="no" 
+                        border="0" 
+                        scrolling="no" 
+                        style="border:0;width:100%;height:100%;" 
+                        :src="appStoreUrl" 
+                        ref="appStore"
+                        >
+                    </iframe>
+                  </div>
                   <!-- 时间轴 -->
                   <!-- <div v-if="[68].includes(toolType)" class="s_b_m_b_i_m_evaluation">
                     <iframe 
@@ -1035,6 +1052,7 @@
                     <el-table :data="item.optionsList" style="width: 800px">
                       <el-table-column prop="label" label="选项">
 												<template slot-scope="scope">
+                          <span>{{ optionTypeList[scope.$index] }}</span>
 													<img  @click.stop="$hevueImgPreview(scope.row.label.src)" class="tableImage" v-if="scope.row.label.imgType && scope.row.label.imgType === 1" :src="scope.row.label.src"></img>
 													<span v-else>{{ scope.row.label }}</span>
 												</template>
@@ -1136,7 +1154,7 @@
                   >
                     <div
                       class="s_b_b_i_ws_b_i_s_i_t_top"
-                      :style="`cursor: ${[45,7,52,48].includes(toolType)?'pointer':'default'};padding: ${[7,52,48].includes(toolType)?'0px':'10px'};`"
+                      :style="`cursor: ${[45,7,52,48].includes(toolType)?'pointer':'default'};padding: ${[7,52,48,72].includes(toolType)?'0px':'10px'};`"
                       @click="StudentWork(item)"
                       >
 
@@ -1204,11 +1222,11 @@
 														<img :src="item.works" alt="" @click.stop="$hevueImgPreview(item.works)">
 												</div> -->
 
-												<div class="imageWorks" v-if="[52,48].includes(toolType)">
+												<div class="imageWorks" v-if="[52,48,72].includes(toolType)">
 													<img :src="require('../../assets/icon/isWord.png')" alt="">
 													<!-- <img v-if="[48].includes(toolType)" :src="require('../../assets/icon/isTxt.png')" alt=""> -->
 												</div>
-
+                    
 												<!-- <span>{{ worksCheckAnswer(item) }}</span> -->
 											</div>
                     </div>
@@ -1384,6 +1402,7 @@ export default {
   },
   data() {
     return {
+      appStoreUrl:'',
       chapInfoListData2:[],
       radioS:[], //提交作业数组容器
       questionsData:'', //提交作业字符串容器
@@ -1429,9 +1448,9 @@ export default {
         worksPreview: false
       },
       dialogTypeList: [
-        { label: "作业详细", value: 0,showType:[1,7,15,40,41,45,47,48,49,52,3,4,57,18,21,71,69,70,23,24,32,63,28,31,39,66], loading: false },
+        { label: "作业详细", value: 0,showType:[1,7,15,40,41,45,47,48,49,52,3,4,57,18,21,71,69,70,23,24,32,63,28,31,39,66,72], loading: false },
         { label: "题目统计", value: 1,showType:[45,15], loading: false },
-        { label: "学生统计", value: 2,showType:[1,7,15,40,41,45,47,48,52,3,4,57], loading: false }
+        { label: "学生统计", value: 2,showType:[1,7,15,40,41,45,47,48,52,3,4,57,72], loading: false }
       ],
 			toolList:[
 				{label:"选择题",value:45,img:require("../../assets/icon/thirdToolList/choose.png")},
@@ -1459,7 +1478,8 @@ export default {
 				{label:"选择匹配",value:41,img:require("../../assets/icon/thirdToolList/select.png")},
 				{label:"排序",value:47,img:require("../../assets/icon/fourthToolList/conSentences.png")},
 				{label:"个人评价",value:40,img:require("../../assets/icon/secondToolList/eval.png")},
-				{label:"思维网格",value:7,img:require("../../assets/icon/secondToolList/mindNetwork.png")}
+				{label:"思维网格",value:7,img:require("../../assets/icon/secondToolList/mindNetwork.png")},
+				{label:"应用中心",value:72,img:require("../../assets/icon/firstToolList/appStore.png")}
 			],
 			statisticsTypeList:[
 				{label:"准确率",value:0},
@@ -1816,6 +1836,53 @@ export default {
   },
   methods: {
 
+    // 提交应用中心作业
+    upLoadApp(){
+      let _iframe = this.$refs.appStore;
+      document.getElementById('loadLi_JieE').children[0].style.display = "block"
+
+        
+        // window.exposed_outputs
+        let Cow = JSON.stringify(_iframe.contentWindow.exposed_outputs)
+      
+        // uid: this.userId,
+        //       cid: this.id,
+        //       stage: this.courseType,
+        //       task: this.taskCount,
+        //       tool: this.toolIndex,
+        //       content: answerData,
+        //       type: answerType,
+        //       atool: 52
+        let params = [
+            {
+            uid: this.userId,
+            cid: this.id,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolIndex,
+            content: Cow,
+            type: 20,
+            atool: 72
+            }
+        ];
+        this.ajax
+            .post(this.$store.state.api + "addCourseWorks3-2", params)
+            .then(res => {
+            this.$message({
+                message: "提交成功",
+                type: "success"
+            });
+                this.$emit('selectSWorks');
+                this.$emit('selectStudent');
+                document.getElementById('loadLi_JieE').children[0].style.display = "none"
+            })
+            .catch(err => {
+               document.getElementById('loadLi_JieE').children[0].style.display = "none"
+
+                this.$message.error("提交失败");
+                console.error(err);
+            });
+    },
     // 设置分组
     updateGroupJson(){
       for (var i = 0; i < this.groupStudentUid[this.toolIndex].length; i++) {
@@ -2462,7 +2529,7 @@ export default {
 				this.changeShowType(this.dialogTypeList.findIndex(i=>i.showType.includes(this.toolType)))
 			}
       this.setData();
-			if([3,1,7,57,71].includes(this.toolType)){
+			if([3,1,7,57,71,72].includes(this.toolType)){
         this.$nextTick(() => {
           this.getIframeWorksData();
         });
@@ -2791,6 +2858,8 @@ export default {
           // if (res.data[0].length > 0) {
             if(_data.length > 0){
               _iframe.contentWindow.editor.minder.importData('json',_data[0].text)
+            }else{
+                this.getdefaultMind()
             }
           // }
 
@@ -2897,8 +2966,39 @@ export default {
          this.AIUrl=`https://cloud.cocorobo.cn/aigpt/?userid=${this.userId}&oid=${this.oid}&org=${this.org}&role=0#/AgentVue`
         console.log("AI智能体iframe加载数据👈")
 
-			}
+			}else if([72].includes(this.toolType)){ //AI智能体
+        for (let index = 0; index < this.toolList.length; index++) {
+          if (this.toolList[index].value == 72) {
+            console.log('666',this.chapInfoListData[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex].appJson.url);
+            
+            this.toolList[index].label = this.chapInfoListData[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex].appJson.name
+            this.toolList[index].img = this.chapInfoListData[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex].appJson.json.icon
+            this.appStoreUrl = this.chapInfoListData[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex].appJson.url
+          }
+        }
+
+      }
 		},
+    getdefaultMind(){
+      let _iframe = this.$refs.iframeMainMapRef;
+
+      let params = {
+        uid:this.userId,
+        cid:this.courseId,
+        s:this.courseType,
+        task:this.taskCount,
+        t:this.toolIndex,
+        type:"2"
+      }
+      this.ajax.get(this.$store.state.api+"selectWordsY",params).then(res=>{
+        console.log('res',res);
+        let data = res.data[0]
+
+        if(data.length > 0){
+          _iframe.contentWindow.editor.minder.importData('json',data[0].text)
+        }
+      })
+    }
   }
 };
 </script>
@@ -3005,7 +3105,7 @@ export default {
 }
 
 .s_b_m_b_i_main {
-  width: 80%;
+  width: 90%;
   margin: 0 auto;
   min-width: 1000px;
   padding: 10px 0 30px 0;
@@ -3018,7 +3118,7 @@ export default {
   font-size: 26px;
   font-weight: bold;
   display: block;
-  margin: 30px 0 40px 20px;
+  margin: 20px 0 ;
 
 }
 
@@ -3043,7 +3143,7 @@ export default {
   width: 50px;
   height: 50px;
 	margin: 5px;
-  margin-right: 5px;
+  margin-right: 5px 0;
 }
 
 .titTop > span {
@@ -3052,13 +3152,13 @@ export default {
 }
 
 .s_b_m_b_i_m_title > span {
-  width: calc(100% - 50px);
+  width: 100%;
   padding: 20px;
   display: block;
-  margin: 0 10px;
   background-color: #f3f7fd;
   border-radius: 5px;
   font-size: 16px;
+  box-sizing: border-box;
 }
 
 .s_b_m_b_i_m_choseList {
@@ -3953,7 +4053,7 @@ ol {
   width: 100%;
   height: 100%;
 	box-sizing: border-box;
-	padding-left: 10px;
+	padding-left: 0px;
 }
 
 .s_b_m_b_i_m_iframe>div>iframe{

+ 173 - 0
src/components/components/cocoFlowDia.vue

@@ -0,0 +1,173 @@
+<template>
+    <div>
+        <el-dialog
+            title="查看作业"
+            :visible.sync="FlowVisible"
+            width="1200px"
+            class="dialog_diy"
+            :close-on-click-modal="false"
+            :before-close="handleClose">
+            <div  style="margin-bottom: 20px;" v-for="(item,index) in listData" :key="index">
+                <div style="margin-bottom: 15px;font-size: 20px;font-weight: 600;color: #000;">第{{ index + 1}}阶段</div>
+                <div v-for="po in item.messages" :key="item">
+                    <div class="left" v-if="po.role == 'assistant'">
+                            <div class="TName">小可ai助手</div>:
+                            <div class="con" v-html="MarkdownT(po.content)"></div>
+                    </div>
+
+                    <div class="left" v-if="po.role == 'user'">
+                            <div class="TName">{{ username }}</div>:
+                            <div class="con" v-html="po.content"></div>
+                    </div>
+                </div>
+            </div>
+        </el-dialog>
+
+    </div>
+</template>
+
+<script>
+import MarkdownIt from "markdown-it";
+
+    export default {
+        data() {
+            return {
+                username:'',
+                FlowVisible:false,
+                listData:[
+                    // {
+                    //     id: "c8fd3e4c-d39a-4aa9-a9b9-6d0b9b7139c5",
+                    //     messages: [
+                    //         {
+                    //             role: "assistant",
+                    //             type: "md",
+                    //             sender: "AI助手",
+                    //             content: "Hi~",
+                    //             createdAt: "2025-03-25T11:40:05.359Z"
+                    //         }
+                    //     ]
+                    // },
+                    // {
+                    //     id: "8e724dbe-04e6-48f5-b8b8-de4cfd3a1608",
+                    //     messages: [
+                    //         {
+                    //             role: "assistant",
+                    //             type: "md",
+                    //             sender: "课程描述",
+                    //             content: "**主题**:cs\n\n**授课年级**:cscc\n\n**关联学科**:scsc\n\n**驱动性问题**:  \n   - 如何利用科学与技术的知识设计一个解决实际问题的创新方案?  \n\n**课程概况**:  \n   - 本课程以\"cs\"为主题,结合科学与技术的知识,鼓励学生通过跨学科的视角解决实际问题。  \n   - 学生将学习如何运用科学原理、技术工具和工程方法,设计和开发创新的解决方案。课程将围绕驱动性问题展开,培养学生的批判性思维和问题解决能力。  \n\n**课程目标**:  \n   - 理解科学与技术在解决实际问题中的重要性。  \n   - 掌握科学研究方法和技术工具的基本使用。  \n   - 培养团队合作和创新能力,通过跨学科的方式解决复杂问题。  \n\n**预期成果**:  \n   - 学生将完成一个创新设计方案,可能包括模型、报告或演示文稿,展示他们如何结合科学与技术的知识解决实际问题。  \n\n<Q>\n\n---\n\n对我生成的内容满意吗?如果满意,可以点击【采纳】将内容置于工作区进行编辑,然后点击“下一步”按钮;也可以说出你的修改建议,我会按照你的想法重新生成。\n\n</Q>",
+                    //             createdAt: "2025-03-26T07:21:59.304Z",
+                    //             isLoading: false
+                    //         }
+                    //     ]
+                    // },
+                    // {
+                    //     id: "3e903e41-dd01-46ad-ac6a-9f4bbd5d48a6",
+                    //     messages: [
+                    //         {
+                    //             role: "assistant",
+                    //             type: "md",
+                    //             sender: "AI助手",
+                    //             content: "Hi~",
+                    //             createdAt: "2025-03-26T07:22:00.557Z"
+                    //         },
+                    //         {
+                    //             role: "user",
+                    //             type: "md",
+                    //             sender: "袁",
+                    //             content: "ccscs",
+                    //             createdAt: "2025-03-26T07:24:36.153Z"
+                    //         },
+                    //         {
+                    //             role: "assistant",
+                    //             type: "md",
+                    //             sender: "AI助手",
+                    //             content: "It seems that there are no direct matches for \"ccscs\" in the document you provided. Could you please provide more context or details about what you are looking for? This will help me assist you better.",
+                    //             createdAt: "2025-03-26T07:24:36.153Z",
+                    //             isLoading: false
+                    //         }
+                    //     ]
+                    // }
+                ]
+            }
+        },
+        computed: {
+            MarkdownT() {
+                return function (c) {
+                    let md = new MarkdownIt();
+                    return c
+                    ? md.render(c) : "";
+                };
+            }
+        },
+        methods: {
+            openAppWork(val){
+                console.log(val);
+                this.username = val.sName
+                this.listData = JSON.parse(val.works)
+                this.FlowVisible = true;
+            },
+            handleClose(){
+                this.listData = []
+                this.FlowVisible = false;
+            },
+        },
+    }
+</script>
+
+<style scoped>
+    .TName{
+        font-size: 14px;
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+        width: 80px;
+        flex-shrink: 0;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+    .con{
+        margin-left: 10px;
+        font-size: 14px;
+        color: #000;
+    }
+    .left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+        line-height: 25px;
+        flex: 1;
+        border-bottom: 1px  #e7e7e7 solid;
+    }
+
+    .dialog_diy >>> .el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+    }
+
+    .dialog_diy >>> .el-dialog__title{
+    color: #fff;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn {
+    top: 19px;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close{
+    color: #fff;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+    }
+
+
+
+    .dialog_diy >>> .el-dialog__body,
+    .dialog_diy >>> .el-dialog__footer{
+    background: #fafafa;
+    max-height: 850px;
+    overflow: auto;
+    }
+    
+</style>

+ 52 - 1
src/components/components/studentWorkPreviewDialog.vue

@@ -17,7 +17,7 @@
           </div>
           <div
             class="s_b_m_content"
-            v-if="[45, 48, 52, 15, 41, 47,40,4].includes(tool)"
+            v-if="[45, 48, 52, 15, 41, 47,40,4,72].includes(tool)"
           >
             <div class="s_b_m_tool45" v-if="[45].includes(tool)">
               <div class="s_b_m_toolItem" v-for="(item, index) in testJson">
@@ -265,6 +265,22 @@
                 {{ userAnswer.eBzText }}
               </div>
             </div>
+            <div class="s_b_m_tool40" v-if="[72].includes(tool)">
+              <div  style="margin-bottom: 20px;" v-for="(item,index) in JSON.parse(studentWork.works)" :key="index">
+                <div style="margin-bottom: 15px;font-size: 20px;font-weight: 600;color: #000;">第{{ index + 1}}阶段</div>
+                <div v-for="po in item.messages" :key="item">
+                    <div class="left" v-if="po.role == 'assistant'">
+                            <div class="TName">小可ai助手</div>:
+                            <div class="con"  v-html="MarkdownT(po.content)"></div>
+                    </div>
+
+                    <div class="left" v-if="po.role == 'user'">
+                            <div class="TName">{{ studentWork.sName }}</div>:
+                            <div class="con" v-html="po.content"></div>
+                    </div>
+                </div>
+            </div>
+            </div>
           </div>
         </div>
       </div>
@@ -273,6 +289,8 @@
 </template>
 
 <script>
+import MarkdownIt from "markdown-it";
+
 export default {
   components: {},
   data() {
@@ -364,6 +382,13 @@ export default {
     }
   },
   computed: {
+    MarkdownT() {
+      return function (c) {
+        let md = new MarkdownIt();
+        return c
+          ? md.render(c) : "";
+      };
+    },
     userAnswer() {
       let _result = [];
 
@@ -774,4 +799,30 @@ export default {
 .redioStyle >>> .el-checkbox__label {
   font-size: 18px;
 }
+.TName{
+        font-size: 14px;
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+        width: 80px;
+        flex-shrink: 0;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+    .con{
+        margin-left: 10px;
+        font-size: 14px;
+        color: #000;
+    }
+    .left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+        line-height: 25px;
+        flex: 1;
+        border-bottom: 1px  #e7e7e7 solid;
+    }
+
+
 </style>

+ 409 - 13
src/components/easy2/studyStudent.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="pb_content" style="height: 100%;overflow: unset;">
+    <!-- ai模式 -->
     <div
       class="pb_content_body"
       style="
@@ -1485,11 +1486,28 @@
                           </div>
                           <div v-if="tooC == 72">
                             <img
+                            style="height: 85px;object-fit: cover;"
+                              v-if="tool.appJson && tool.appJson.json && tool.appJson.json.icon"
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              :src="tool.appJson.json.icon"
+                              alt
+                            />
+                            <img
+                              v-else
                               @click="addTools(tooC, toolIndex, taskCount)"
                               src="../../assets/icon/firstToolList/appStore.png"
                               alt
                             />
-                            <div style="margin: 5px 0">AI智能体</div>
+                            <el-tooltip :content="tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'" placement="top" effect="dark">
+                              <!-- content to trigger tooltip here -->
+                              <div class="Ovh">
+                              {{tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'}}
+                            </div>
+                            </el-tooltip>
+                            <div class="upload_toolBtn"  @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
+                              style="position: absolute;right: 33px;top: -30px;">
+                              投影
+                            </div>
                           </div>
                           <div v-if="tooC == 65">
                             <img
@@ -4809,6 +4827,282 @@
                       </div>
                     </div>
                   </div>
+                  <div
+                    v-if="
+                      tType &&
+                        ((tType == 2 && sIsOpen == true) ||
+                          tType == 1 ||
+                          tType == 4) &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div class="worksTop">
+                        <div>作业预览</div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="
+                            isCloseList[toolIndex].isCloseBoolean &&
+                              isCloseList[toolIndex].isClose == 0
+                          "
+                        >
+                          折叠
+                        </div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="isCloseList[toolIndex].isClose == 1"
+                        >
+                          展开
+                        </div>
+                      </div>
+                    </div>
+                    <div
+                      :id="'tool-' + toolIndex"
+                      :style="{
+                        height:
+                          isCloseList[toolIndex].isClose == 1
+                            ? retrnToolHeight('tool-' + toolIndex)
+                            : 'auto',
+                        overflow:
+                          isCloseList[toolIndex].isClose == 1
+                            ? 'hidden'
+                            : 'unset'
+                      }"
+                      class="worksDetailBox"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          border-radius: 15px;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in worksStudent[toolIndex]"
+                        :key="wIndex"
+                        :class="w.type == 1 ? 'isTypeOne' : ''"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="
+                              courseDetail.userid == userid &&
+                                courseDetail.state != 5 &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList.length
+                            "
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            评分
+                          </div>
+
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="comment" style="min-width: 200px">
+                          <div class="worksName">
+                            <div>{{ w.sName }}</div>
+                          </div>
+                          <div class="commentList">
+                            <div class="commentList">
+                              <div
+                                class="commentImg"
+                                @click="
+                                  isLikes(
+                                    w.wid,
+                                    userid,
+                                    1,
+                                    null,
+                                    w.isLikes,
+                                    w.sName
+                                  )
+                                "
+                              >
+                                <img
+                                  :src="w.isLikes == true ? likes : noLikes"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.likesCount }}</div>
+                            </div>
+                            <div class="commentList" style="margin-right: 15px">
+                              <div
+                                class="commentImg"
+                                @click="commentOther(w, toolIndex, wIndex)"
+                              >
+                                <img
+                                  src="../../assets/icon/comment/comment.png"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.commentCount }}</div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">
+                      未提交
+                    </div>
+                    <div
+                      class="noWorksS"
+                      v-if="noWorksS && noWorksS[toolIndex].length"
+                    >
+                      <div
+                        v-for="(s, sIndex) in noWorksS[toolIndex]"
+                        :key="sIndex"
+                        class="noWorksName"
+                        @click="teacherWorkSubmit(72, toolIndex, taskCount, s)"
+                      >
+                        <el-tooltip
+                          effect="dark"
+                          :content="s.student"
+                          placement="top"
+                        >
+                          <span>{{ s.student }}</span>
+                        </el-tooltip>
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    v-if="
+                      tType &&
+                        tType == 2 &&
+                        !sIsOpen &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <span class="worksTitle">作业预览</span>
+                    </div>
+                    <div
+                      class="worksDetailBox"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in workStudent[toolIndex]"
+                        :key="wIndex"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="courseDetail.userid == userid"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            评分
+                          </div>
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="worksName">
+                          <div>{{ w.sName }}</div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
                   <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
                     <div
                       style="display: flex;justify-content: space-between;align-items: center;"
@@ -12904,9 +13198,9 @@
           <div
             class="switch_box"
             v-if="
-              courseDetail.userid == userid ||
+              (courseDetail.userid == userid ||
                 (courseDetail.course_teacher &&
-                  courseDetail.course_teacher.indexOf(userid) != -1)
+                  courseDetail.course_teacher.indexOf(userid) != -1)) && !splitScreenData.isOpen
             "
           >
             <!-- v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1" -->
@@ -15603,6 +15897,18 @@
       </div>
    
     </el-dialog>
+
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -15646,6 +15952,10 @@ import evaTable from "./commpont/evaTable";
 import { v4 as uuidv4 } from "uuid";
 import statisticalAnalysis from "../components/statisticalAnalysis.vue";
 import choseWorksDetailDialog from "../components/choseWorksDetailDialog.vue";
+import appStoreC from "../components/appStoreC.vue";
+import cocoFlowDia from "../components/cocoFlowDia.vue";
+
+
 import choseWordCloud from '../components/choseWordCloud.vue'
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
@@ -15733,7 +16043,9 @@ export default {
     markDialog,
     evaTable,
     statisticalAnalysis,
-    choseWorksDetailDialog
+    choseWorksDetailDialog,
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -16162,7 +16474,10 @@ export default {
         this.oidArray = oidArray;
       });
     },
-
+    //查看应用中心作业
+    openCocoFlow(w){
+      this.$refs.cocoFlowDiaRef.openAppWork(w)
+    },
     // 评分弹框全屏
     markFullScreenBtn() {
       this.markfullscreen = !this.markfullscreen;
@@ -18285,6 +18600,17 @@ export default {
                     userid: b[j].userid,
                     wid: b[j].id
                   });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  this.workStudent[i].push({
+                    works: b[j].content,
+                    sName: b[j].name,
+                    score: b[j].score,
+                    img: b[j].img,
+                    type: 20,
+                    time: b[j].time,
+                    userid: b[j].userid,
+                    wid: b[j].id
+                  });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   this.workStudent[i].push({
@@ -19531,6 +19857,49 @@ export default {
                   }
                   _worksStudent2[i].push(_works);
                   this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  let _works = {
+                    userid: b[j].userid,
+                    ateacher: b[j].ateacher,
+                    wid: b[j].id,
+                    works: b[j].content,
+                    sName: b[j].name,
+                    type: 20,
+                    ttype: b[j].ttype,
+                    time: b[j].time,
+                    score: b[j].score,
+                    img: b[j].img,
+                    likesCount: likesCount,
+                    commentCount: commentCount,
+                    isLikes: isLikes,
+                    commentJson: commentJson,
+                    likeJson: likeJson
+                  };
+                  if (this.isGroup) {
+                    let isGw = 1;
+                    for (
+                      var groupI = 0;
+                      groupI < this.courseGroup.group.length;
+                      groupI++
+                    ) {
+                      let gid = this.courseGroup.group[groupI].id;
+                      if (
+                        this.courseGroupStudentUid[gid].indexOf(b[j].userid) !=
+                        -1
+                      ) {
+                        isGw = 2;
+                        this.courseGroup.group[groupI].works[i].push(_works);
+                        break;
+                      }
+                    }
+                    if (isGw == 1) {
+                      _worksStudent[i].push(_works);
+                    }
+                  } else {
+                    _worksStudent[i].push(_works);
+                  }
+                  _worksStudent2[i].push(_works);
+                  this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   let _work = {
@@ -20531,6 +20900,7 @@ export default {
     allScrell() {
       window.parent.postMessage({ allScreen: this.screenType }, "*");
     },
+    // 0上一步  1下一步
     nextOrpreSteps(t) {
       if (this.IsFollow && this.tType == 2) {
         this.$message.error("已经开启跟随模式,请认真跟堂听讲");
@@ -21965,18 +22335,19 @@ export default {
       this.ajax
         .get(this.$store.state.api + "getCourseState", params)
         .then(res => {
-          if (res.data[0].length > 0) {
+          // if (res.data[0].length > 0) {
+          //   this.chapInfoList = JSON.parse(res.data[0][0].state);
+          // }
+          if (res.data[0].length > 0 && type == 1) {
             this.chapInfoList = JSON.parse(res.data[0][0].state);
-          }
-          if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
-            // this.chapInfoList = JSON.parse(res.data[0][0].state);
             console.log("this.chapInfoList", this.chapInfoList);
             this.setNavList();
             this.$forceUpdate();
-          } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
+          } else if (res.data[0].length > 0 && type == 2) {
             this.addCourseState(2);
           } else {
-            this.addCourseState(1);
+            // this.addCourseState(1);
+            console.log('99999')
           }
         })
         .catch(err => {
@@ -22940,11 +23311,20 @@ export default {
           ? this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index]
               .toolChoose[i].appJson
           : "";
+          console.log('item.url',item.url);
+          
+
         if(!item || !item.url){
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        window.open(item.url, "_blank");
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        this.$refs.appStoreC.getData(item.url,this.userid) 
+
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
           for (var k = 0; k < this.worksStudent[i].length; k++) {
@@ -23381,6 +23761,12 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url,this.sStudent.userid) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -24832,7 +25218,7 @@ export default {
 
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           this.changeSplitScreenBehavior({form:{}})
           // this.followingMode(true);
@@ -24886,6 +25272,7 @@ export default {
       this.timer2 = setInterval(()=> {
         this.getSplitScreenData();//获取分屏数据
       }, 1000);
+      this.IsLookOpen = flase
       this.$message.success("分屏模式已开启");
     },
     getSplitScreenData() {
@@ -29907,4 +30294,13 @@ div::-webkit-scrollbar {
     width: 10px;
     height: 6px;
 }
+.Ovh{
+  margin: 5px 0;
+  width: 4em;
+  -webkit-line-clamp: 2;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;           
+}
 </style>

+ 404 - 13
src/components/easy3/studyStudent.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="pb_content" style="height: 100%;overflow: unset;">
+    <!-- 极简模式 -->
     <div
       class="pb_content_body"
       style="
@@ -1418,11 +1419,28 @@
                           </div>
                           <div v-if="tooC == 72">
                             <img
+                            style="height: 85px;object-fit: cover;"
+                              v-if="tool.appJson && tool.appJson.json && tool.appJson.json.icon"
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              :src="tool.appJson.json.icon"
+                              alt
+                            />
+                            <img
+                              v-else
                               @click="addTools(tooC, toolIndex, taskCount)"
                               src="../../assets/icon/firstToolList/appStore.png"
                               alt
                             />
-                            <div style="margin: 5px 0">应用中心</div>
+                            <el-tooltip :content="tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'" placement="top" effect="dark">
+                              <!-- content to trigger tooltip here -->
+                              <div class="Ovh">
+                                {{tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'}}
+                              </div>
+                            </el-tooltip>
+                            <div class="upload_toolBtn"  @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
+                              style="position: absolute;right: 33px;top: -30px;">
+                              投影
+                            </div>
                           </div>
                           <div v-if="tooC == 65">
                             <img
@@ -3651,6 +3669,282 @@
                       </div>
                     </div>
                   </div>
+                  <div
+                    v-if="
+                      tType &&
+                        ((tType == 2 && sIsOpen == true) ||
+                          tType == 1 ||
+                          tType == 4) &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div class="worksTop">
+                        <div>作业预览</div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="
+                            isCloseList[toolIndex].isCloseBoolean &&
+                              isCloseList[toolIndex].isClose == 0
+                          "
+                        >
+                          折叠
+                        </div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="isCloseList[toolIndex].isClose == 1"
+                        >
+                          展开
+                        </div>
+                      </div>
+                    </div>
+                    <div
+                      :id="'tool-' + toolIndex"
+                      :style="{
+                        height:
+                          isCloseList[toolIndex].isClose == 1
+                            ? retrnToolHeight('tool-' + toolIndex)
+                            : 'auto',
+                        overflow:
+                          isCloseList[toolIndex].isClose == 1
+                            ? 'hidden'
+                            : 'unset'
+                      }"
+                      class="worksDetailBox"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          border-radius: 15px;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in worksStudent[toolIndex]"
+                        :key="wIndex"
+                        :class="w.type == 1 ? 'isTypeOne' : ''"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="
+                              courseDetail.userid == userid &&
+                                courseDetail.state != 5 &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList.length
+                            "
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            评分
+                          </div>
+
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="comment" style="min-width: 200px">
+                          <div class="worksName">
+                            <div>{{ w.sName }}</div>
+                          </div>
+                          <div class="commentList">
+                            <div class="commentList">
+                              <div
+                                class="commentImg"
+                                @click="
+                                  isLikes(
+                                    w.wid,
+                                    userid,
+                                    1,
+                                    null,
+                                    w.isLikes,
+                                    w.sName
+                                  )
+                                "
+                              >
+                                <img
+                                  :src="w.isLikes == true ? likes : noLikes"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.likesCount }}</div>
+                            </div>
+                            <div class="commentList" style="margin-right: 15px">
+                              <div
+                                class="commentImg"
+                                @click="commentOther(w, toolIndex, wIndex)"
+                              >
+                                <img
+                                  src="../../assets/icon/comment/comment.png"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.commentCount }}</div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">
+                      未提交
+                    </div>
+                    <div
+                      class="noWorksS"
+                      v-if="noWorksS && noWorksS[toolIndex].length"
+                    >
+                      <div
+                        v-for="(s, sIndex) in noWorksS[toolIndex]"
+                        :key="sIndex"
+                        class="noWorksName"
+                        @click="teacherWorkSubmit(72, toolIndex, taskCount, s)"
+                      >
+                        <el-tooltip
+                          effect="dark"
+                          :content="s.student"
+                          placement="top"
+                        >
+                          <span>{{ s.student }}</span>
+                        </el-tooltip>
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    v-if="
+                      tType &&
+                        tType == 2 &&
+                        !sIsOpen &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <span class="worksTitle">作业预览</span>
+                    </div>
+                    <div
+                      class="worksDetailBox"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in workStudent[toolIndex]"
+                        :key="wIndex"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="courseDetail.userid == userid"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            评分
+                          </div>
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="worksName">
+                          <div>{{ w.sName }}</div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
                   <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
                     <div
                       class="zuoyeYulan"
@@ -9731,9 +10025,9 @@
           <div
             class="switch_box"
             v-if="
-              courseDetail.userid == userid ||
+              (courseDetail.userid == userid ||
               (courseDetail.course_teacher &&
-                courseDetail.course_teacher.indexOf(userid) != -1)
+                courseDetail.course_teacher.indexOf(userid) != -1)) && !splitScreenData.isOpen
             "
           >
             <!-- v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1" -->
@@ -12151,6 +12445,17 @@
       </div>
    
     </el-dialog>
+
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -12194,6 +12499,8 @@ import choseWorksDetailDialog from '../components/choseWorksDetailDialog.vue'
 import { v4 as uuidv4 } from "uuid";
 var OpenCC = require("opencc-js");
 import choseWordCloud from '../components/choseWordCloud.vue'
+import appStoreC from "../components/appStoreC.vue";
+import cocoFlowDia from "../components/cocoFlowDia.vue";
 
 let converter = OpenCC.Converter({
   from: "hk",
@@ -12276,7 +12583,9 @@ export default {
 		classRoomHelper,
     scoreZong,
 		statisticalAnalysis,
-		choseWorksDetailDialog
+		choseWorksDetailDialog,
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -12660,6 +12969,10 @@ export default {
     };
   },
   methods: {
+    //查看应用中心作业
+    openCocoFlow(w){
+      this.$refs.cocoFlowDiaRef.openAppWork(w)
+    },
 		getAIJ(){
 			this.ajax.get(this.$store.state.api+"getAIJ","").then(res=>{
 				let oid = res.data[0];
@@ -14181,6 +14494,17 @@ export default {
                     userid: b[j].userid,
                     wid: b[j].id,
                   });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  this.workStudent[i].push({
+                    works: b[j].content,
+                    sName: b[j].name,
+                    score: b[j].score,
+                    img: b[j].img,
+                    type: 20,
+                    time: b[j].time,
+                    userid: b[j].userid,
+                    wid: b[j].id,
+                  });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   this.workStudent[i].push({
@@ -15335,6 +15659,49 @@ export default {
                   }
                   _worksStudent2[i].push(_works);
                   this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  let _works = {
+                    userid: b[j].userid,
+                    ateacher: b[j].ateacher,
+                    wid: b[j].id,
+                    works: b[j].content,
+                    sName: b[j].name,
+                    type: 20,
+										ttype:b[j].ttype,
+                    time: b[j].time,
+                    score: b[j].score,
+                    img: b[j].img,
+                    likesCount: likesCount,
+                    commentCount: commentCount,
+                    isLikes: isLikes,
+                    commentJson: commentJson,
+										likeJson:likeJson
+                  };
+                  if (this.isGroup) {
+                    let isGw = 1;
+                    for (
+                      var groupI = 0;
+                      groupI < this.courseGroup.group.length;
+                      groupI++
+                    ) {
+                      let gid = this.courseGroup.group[groupI].id;
+                      if (
+                        this.courseGroupStudentUid[gid].indexOf(b[j].userid) !=
+                        -1
+                      ) {
+                        isGw = 2;
+                        this.courseGroup.group[groupI].works[i].push(_works);
+                        break;
+                      }
+                    }
+                    if (isGw == 1) {
+                      _worksStudent[i].push(_works);
+                    }
+                  } else {
+                    _worksStudent[i].push(_works);
+                  }
+                  _worksStudent2[i].push(_works);
+                  this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   let _work = {
@@ -17661,17 +18028,17 @@ export default {
       this.ajax
         .get(this.$store.state.api + "getCourseState", params)
         .then((res) => {
-          if (res.data[0].length > 0) {
-          this.chapInfoList = JSON.parse(res.data[0][0].state);
-          }
-          if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
-            // this.chapInfoList = JSON.parse(res.data[0][0].state);
+          // if (res.data[0].length > 0) {
+          // this.chapInfoList = JSON.parse(res.data[0][0].state);
+          // }
+          if (res.data[0].length > 0 && type == 1) {
+            this.chapInfoList = JSON.parse(res.data[0][0].state);
             this.setNavList();
             this.$forceUpdate();
-          } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
+          } else if (res.data[0].length > 0 && type == 2) {
             this.addCourseState(2);
           } else {
-            this.addCourseState(1);
+            // this.addCourseState(1);
           }
         })
         .catch((err) => {
@@ -18621,7 +18988,14 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        window.open(item.url, "_blank");
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        this.$refs.appStoreC.getData(item.url,this.userid) 
+
+
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
           for (var k = 0; k < this.worksStudent[i].length; k++) {
@@ -19059,6 +19433,12 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url,this.sStudent.userid) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -20463,7 +20843,7 @@ export default {
         this.changeSplitScreenBehavior({form:{}})
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           // this.followingMode(true);
         } else {
@@ -20514,6 +20894,7 @@ export default {
       this.timer2 = setInterval(()=> {
         this.getSplitScreenData();//获取分屏数据
       }, 1000);
+
       this.$message.success("分屏模式已开启");
     },
     getSplitScreenData() {
@@ -25442,4 +25823,14 @@ div::-webkit-scrollbar {
     width: 10px;
     height: 6px;
 }
+.Ovh{
+  margin: 5px 0;
+  width: 4em;
+  -webkit-line-clamp: 2;
+  display: -webkit-box;
+
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;           
+}
 </style>

+ 1 - 1
src/components/index.vue

@@ -30,7 +30,7 @@
             </div>
           </el-radio-group>
         </div>
-        <div class="choose">
+        <div class="choose" v-if="oid != '91796dfb-8791-11ef-9b30-005056b86db5'">
           <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index"
             :style="{ margin: !CourseTypeJson[item.id].length && 0 }">
             <span v-if="CourseTypeJson[item.id].length &&

+ 561 - 12
src/components/studyStudent.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="pb_content" style="height: 100%;overflow: unset;">
+    <!-- 阶段模式 -->
     <div
       class="pb_content_body"
       style="
@@ -1379,11 +1380,28 @@
                           </div>
                           <div v-if="tooC == 72">
                             <img
+                             style="height: 85px;object-fit: cover;"
+                              v-if="tool.appJson && tool.appJson.json && tool.appJson.json.icon"
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              :src="tool.appJson.json.icon"
+                              alt
+                            />
+                            <img
+                              v-else
                               @click="addTools(tooC, toolIndex, taskCount)"
                               src="../assets/icon/firstToolList/appStore.png"
                               alt
                             />
-                            <div style="margin: 5px 0">应用中心</div>
+                            <el-tooltip :content="tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'" placement="top" effect="dark">
+                              <!-- content to trigger tooltip here -->
+                              <div class="Ovh">
+                                {{tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'}}
+                              </div>
+                              <div class="upload_toolBtn"  @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
+                              style="position: absolute;right: 33px;top: -30px;">
+                              投影
+                            </div>
+                            </el-tooltip>
                           </div>
                           <div v-if="tooC == 65">
                             <img
@@ -3612,6 +3630,282 @@
                       </div>
                     </div>
                   </div>
+                  <div
+                    v-if="
+                      tType &&
+                        ((tType == 2 && sIsOpen == true) ||
+                          tType == 1 ||
+                          tType == 4) &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div class="worksTop">
+                        <div>作业预览</div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="
+                            isCloseList[toolIndex].isCloseBoolean &&
+                              isCloseList[toolIndex].isClose == 0
+                          "
+                        >
+                          折叠
+                        </div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="isCloseList[toolIndex].isClose == 1"
+                        >
+                          展开
+                        </div>
+                      </div>
+                    </div>
+                    <div
+                      :id="'tool-' + toolIndex"
+                      :style="{
+                        height:
+                          isCloseList[toolIndex].isClose == 1
+                            ? retrnToolHeight('tool-' + toolIndex)
+                            : 'auto',
+                        overflow:
+                          isCloseList[toolIndex].isClose == 1
+                            ? 'hidden'
+                            : 'unset'
+                      }"
+                      class="worksDetailBox"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          border-radius: 15px;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in worksStudent[toolIndex]"
+                        :key="wIndex"
+                        :class="w.type == 1 ? 'isTypeOne' : ''"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="
+                              courseDetail.userid == userid &&
+                                courseDetail.state != 5 &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList.length
+                            "
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            评分
+                          </div>
+
+                          <img
+                            class="deleteImg"
+                            src="../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="comment" style="min-width: 200px">
+                          <div class="worksName">
+                            <div>{{ w.sName }}</div>
+                          </div>
+                          <div class="commentList">
+                            <div class="commentList">
+                              <div
+                                class="commentImg"
+                                @click="
+                                  isLikes(
+                                    w.wid,
+                                    userid,
+                                    1,
+                                    null,
+                                    w.isLikes,
+                                    w.sName
+                                  )
+                                "
+                              >
+                                <img
+                                  :src="w.isLikes == true ? likes : noLikes"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.likesCount }}</div>
+                            </div>
+                            <div class="commentList" style="margin-right: 15px">
+                              <div
+                                class="commentImg"
+                                @click="commentOther(w, toolIndex, wIndex)"
+                              >
+                                <img
+                                  src="../assets/icon/comment/comment.png"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.commentCount }}</div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">
+                      未提交
+                    </div>
+                    <div
+                      class="noWorksS"
+                      v-if="noWorksS && noWorksS[toolIndex].length"
+                    >
+                      <div
+                        v-for="(s, sIndex) in noWorksS[toolIndex]"
+                        :key="sIndex"
+                        class="noWorksName"
+                        @click="teacherWorkSubmit(72, toolIndex, taskCount, s)"
+                      >
+                        <el-tooltip
+                          effect="dark"
+                          :content="s.student"
+                          placement="top"
+                        >
+                          <span>{{ s.student }}</span>
+                        </el-tooltip>
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    v-if="
+                      tType &&
+                        tType == 2 &&
+                        !sIsOpen &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <span class="worksTitle">作业预览</span>
+                    </div>
+                    <div
+                      class="worksDetailBox"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in workStudent[toolIndex]"
+                        :key="wIndex"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="courseDetail.userid == userid"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            评分
+                          </div>
+                          <img
+                            class="deleteImg"
+                            src="../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="worksName">
+                          <div>{{ w.sName }}</div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
                   <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
                     <div
                       class="zuoyeYulan"
@@ -6803,6 +7097,166 @@
                       </div>
                     </div>
                   </div>
+                  <div
+                    v-if="
+                      tType &&
+                      ((tType == 2 && sIsOpen == true) ||
+                        tType == 1 ||
+                        tType == 4) &&
+                      tool.tool.indexOf(52) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="
+                        worksStudent.length &&
+                        worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div class="worksTop">
+                        <div>作业预览</div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="
+                            (isCloseList[toolIndex].isCloseBoolean) &&
+                            isCloseList[toolIndex].isClose == 0
+                          "
+                        >
+                          折叠
+                        </div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="isCloseList[toolIndex].isClose == 1"
+                        >
+                          展开
+                        </div>
+                      </div>
+                      <!-- <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button> -->
+                    </div>
+                    <div
+                      :id="'tool-' + toolIndex"
+                      :style="{
+                          height:isCloseList[toolIndex].isClose == 1 ? retrnToolHeight('tool-' + toolIndex) : 'auto',
+                          overflow: isCloseList[toolIndex].isClose == 1 ? 'hidden' : 'unset'
+                        }"
+                      class="worksDetailBox"
+                      v-if="
+                        worksStudent.length &&
+                        worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          border-radius: 15px;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in worksStudent[toolIndex]"
+                        :key="wIndex"
+                        :class="w.type == 1 ? 'isTypeOne' : ''"
+                      >
+                        <div class="workImg">
+                          <img :src="word" @click="openWord(w)" alt />
+                          <!-- @click="openFile(w.works)" -->
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid,
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="courseDetail.userid == userid"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid,
+                            }"
+                          >
+                            评分
+                          </div>
+                          <img
+                            class="deleteImg"
+                            src="../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+
+                        <div class="comment" style="min-width: 200px">
+                          <div class="worksName">
+                            <div>{{ w.sName }}</div>
+                          </div>
+                          <div class="commentList">
+                            <div class="commentList">
+                              <div
+                                class="commentImg"
+                                @click="
+                                  isLikes(w.wid, userid, 1, null, w.isLikes,w.sName)
+                                "
+                              >
+                                <img
+                                  :src="w.isLikes == true ? likes : noLikes"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.likesCount }}</div>
+                            </div>
+                            <div class="commentList" style="margin-right: 15px">
+                              <div
+                                class="commentImg"
+                                @click="commentOther(w, toolIndex, wIndex)"
+                              >
+                                <img
+                                  src="../assets/icon/comment/comment.png"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.commentCount }}</div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">
+                      未提交
+                    </div>
+                    <div
+                      class="noWorksS"
+                      v-if="noWorksS && noWorksS[toolIndex].length"
+                    >
+                      <div
+                        v-for="(s, sIndex) in noWorksS[toolIndex]"
+                        :key="sIndex"
+                        class="noWorksName"
+                        @click="teacherWorkSubmit(72, toolIndex, taskCount, s)"
+                      >
+                        <el-tooltip effect="dark" :content="s.student" placement="top">
+                            <span>{{ s.student }}</span>
+                        </el-tooltip>
+                      </div>
+                    </div>
+                  </div>
                   <div
                     v-if="
                       tType &&
@@ -9668,9 +10122,9 @@
           <div
             class="switch_box"
             v-if="
-              courseDetail.userid == userid ||
+              (courseDetail.userid == userid ||
               (courseDetail.course_teacher &&
-                courseDetail.course_teacher.indexOf(userid) != -1)
+                courseDetail.course_teacher.indexOf(userid) != -1)) && !splitScreenData.isOpen
             "
           >
             <!-- v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1" -->
@@ -12084,6 +12538,17 @@
       </div>
 
     </el-dialog>
+
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -12126,6 +12591,8 @@ import choseWorksDetailDialog from './components/choseWorksDetailDialog.vue';
 import { v4 as uuidv4 } from "uuid";
 var OpenCC = require("opencc-js");
 import choseWordCloud from './components/choseWordCloud.vue'
+import appStoreC from "./components/appStoreC.vue";
+import cocoFlowDia from "./components/cocoFlowDia.vue";
 
 let converter = OpenCC.Converter({
   from: "hk",
@@ -12208,7 +12675,9 @@ export default {
     classRoomHelper,
     scoreZong,
 		statisticalAnalysis,
-		choseWorksDetailDialog
+		choseWorksDetailDialog,
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -12631,6 +13100,10 @@ export default {
     };
   },
   methods: {
+    //查看应用中心作业
+    openCocoFlow(w){
+      this.$refs.cocoFlowDiaRef.openAppWork(w)
+    },
 		getAIJ(){
 			this.ajax.get(this.$store.state.api+"getAIJ","").then(res=>{
 				let oid = res.data[0];
@@ -14151,6 +14624,17 @@ export default {
                     userid: b[j].userid,
                     wid: b[j].id,
                   });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  this.workStudent[i].push({
+                    works: b[j].content,
+                    sName: b[j].name,
+                    score: b[j].score,
+                    img: b[j].img,
+                    type: 20,
+                    time: b[j].time,
+                    userid: b[j].userid,
+                    wid: b[j].id,
+                  });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   this.workStudent[i].push({
@@ -15311,6 +15795,49 @@ export default {
                   }
                   _worksStudent2[i].push(_works);
                   this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  let _works = {
+                    userid: b[j].userid,
+                    ateacher: b[j].ateacher,
+                    wid: b[j].id,
+                    works: b[j].content,
+                    sName: b[j].name,
+                    type: 20,
+										ttype:b[j].ttype,
+                    time: b[j].time,
+                    score: b[j].score,
+                    img: b[j].img,
+                    likesCount: likesCount,
+                    commentCount: commentCount,
+                    isLikes: isLikes,
+                    commentJson: commentJson,
+										likeJson:likeJson
+                  };
+                  if (this.isGroup) {
+                    let isGw = 1;
+                    for (
+                      var groupI = 0;
+                      groupI < this.courseGroup.group.length;
+                      groupI++
+                    ) {
+                      let gid = this.courseGroup.group[groupI].id;
+                      if (
+                        this.courseGroupStudentUid[gid].indexOf(b[j].userid) !=
+                        -1
+                      ) {
+                        isGw = 2;
+                        this.courseGroup.group[groupI].works[i].push(_works);
+                        break;
+                      }
+                    }
+                    if (isGw == 1) {
+                      _worksStudent[i].push(_works);
+                    }
+                  } else {
+                    _worksStudent[i].push(_works);
+                  }
+                  _worksStudent2[i].push(_works);
+                  this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   let _work = {
@@ -17645,17 +18172,17 @@ export default {
       this.ajax
         .get(this.$store.state.api + "getCourseState", params)
         .then((res) => {
-          if (res.data[0].length > 0) {
+          // if (res.data[0].length > 0) {
+          //   this.chapInfoList = JSON.parse(res.data[0][0].state);
+          // }
+          if (res.data[0].length > 0 && type == 1) {
             this.chapInfoList = JSON.parse(res.data[0][0].state);
-          }
-          if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
-            // this.chapInfoList = JSON.parse(res.data[0][0].state);
             this.setNavList();
             this.$forceUpdate();
-          } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
+          } else if (res.data[0].length > 0 && type == 2) {
             this.addCourseState(2);
           } else {
-            this.addCourseState(1);
+            // this.addCourseState(1);
           }
         })
         .catch((err) => {
@@ -18606,7 +19133,13 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        window.open(item.url, "_blank");
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        this.$refs.appStoreC.getData(item.url,this.userid) 
+
+        // window.open(item.url, "_blank");
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
           for (var k = 0; k < this.worksStudent[i].length; k++) {
@@ -19044,6 +19577,12 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url,this.sStudent.userid) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -20447,7 +20986,7 @@ export default {
         this.changeSplitScreenBehavior({form:{}})
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           // this.followingMode(true);
         } else {
@@ -25459,4 +25998,14 @@ div::-webkit-scrollbar {
     width: 10px;
     height: 6px;
 }
+.Ovh{
+  margin: 5px 0;
+  width: 4em;
+  -webkit-line-clamp: 2;
+  display: -webkit-box;
+
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;           
+}
 </style>

+ 402 - 12
src/components/studySutdentClass/studyStudent.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="pb_content" style="height: 100%;overflow: unset;">
+    <!-- 上课模式 -->
     <div
       class="pb_content_body"
       style="
@@ -1434,11 +1435,28 @@
                           </div>
                           <div v-if="tooC == 72">
                             <img
+                            style="height: 85px;object-fit: cover;"
+                              v-if="tool.appJson && tool.appJson.json && tool.appJson.json.icon"
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              :src="tool.appJson.json.icon"
+                              alt
+                            />
+                            <img
+                              v-else
                               @click="addTools(tooC, toolIndex, taskCount)"
                               src="../../assets/icon/firstToolList/appStore.png"
                               alt
                             />
-                            <div style="margin: 5px 0">AI智能体</div>
+                            <el-tooltip :content="tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'" placement="top" effect="dark">
+                              <!-- content to trigger tooltip here -->
+                              <div class="Ovh">
+                                {{tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'}}
+                              </div>
+                            </el-tooltip>
+                            <div class="upload_toolBtn"  @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
+                              style="position: absolute;right: 33px;top: -30px;">
+                              投影
+                            </div>
                           </div>
                           <div v-if="tooC == 65">
                             <img
@@ -4758,6 +4776,282 @@
                       </div>
                     </div>
                   </div>
+                  <div
+                    v-if="
+                      tType &&
+                        ((tType == 2 && sIsOpen == true) ||
+                          tType == 1 ||
+                          tType == 4) &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div class="worksTop">
+                        <div>作业预览</div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="
+                            isCloseList[toolIndex].isCloseBoolean &&
+                              isCloseList[toolIndex].isClose == 0
+                          "
+                        >
+                          折叠
+                        </div>
+                        <div
+                          class="corOpen"
+                          @click="contract(toolIndex)"
+                          v-if="isCloseList[toolIndex].isClose == 1"
+                        >
+                          展开
+                        </div>
+                      </div>
+                    </div>
+                    <div
+                      :id="'tool-' + toolIndex"
+                      :style="{
+                        height:
+                          isCloseList[toolIndex].isClose == 1
+                            ? retrnToolHeight('tool-' + toolIndex)
+                            : 'auto',
+                        overflow:
+                          isCloseList[toolIndex].isClose == 1
+                            ? 'hidden'
+                            : 'unset'
+                      }"
+                      class="worksDetailBox"
+                      v-if="
+                        worksStudent.length &&
+                          worksStudent[toolIndex].length > 0
+                      "
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          border-radius: 15px;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in worksStudent[toolIndex]"
+                        :key="wIndex"
+                        :class="w.type == 1 ? 'isTypeOne' : ''"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="
+                              courseDetail.userid == userid &&
+                                courseDetail.state != 5 &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList &&
+                                chapInfoList[courseType].chapterInfo[0]
+                                  .taskJson[taskCount].eList.length
+                            "
+                            :class="{
+                              rightW:
+                                w.userid == userid ||
+                                tType == 1 ||
+                                tType == 4 ||
+                                w.ateacher == userid
+                            }"
+                          >
+                            评分
+                          </div>
+
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="comment" style="min-width: 200px">
+                          <div class="worksName">
+                            <div>{{ w.sName }}</div>
+                          </div>
+                          <div class="commentList">
+                            <div class="commentList">
+                              <div
+                                class="commentImg"
+                                @click="
+                                  isLikes(
+                                    w.wid,
+                                    userid,
+                                    1,
+                                    null,
+                                    w.isLikes,
+                                    w.sName
+                                  )
+                                "
+                              >
+                                <img
+                                  :src="w.isLikes == true ? likes : noLikes"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.likesCount }}</div>
+                            </div>
+                            <div class="commentList" style="margin-right: 15px">
+                              <div
+                                class="commentImg"
+                                @click="commentOther(w, toolIndex, wIndex)"
+                              >
+                                <img
+                                  src="../../assets/icon/comment/comment.png"
+                                  alt=""
+                                />
+                              </div>
+                              <div>{{ w.commentCount }}</div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">
+                      未提交
+                    </div>
+                    <div
+                      class="noWorksS"
+                      v-if="noWorksS && noWorksS[toolIndex].length"
+                    >
+                      <div
+                        v-for="(s, sIndex) in noWorksS[toolIndex]"
+                        :key="sIndex"
+                        class="noWorksName"
+                        @click="teacherWorkSubmit(72, toolIndex, taskCount, s)"
+                      >
+                        <el-tooltip
+                          effect="dark"
+                          :content="s.student"
+                          placement="top"
+                        >
+                          <span>{{ s.student }}</span>
+                        </el-tooltip>
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    v-if="
+                      tType &&
+                        tType == 2 &&
+                        !sIsOpen &&
+                        tool.tool.indexOf(72) != -1
+                    "
+                    class="worksBox"
+                  >
+                    <div
+                      class="zuoyeYulan"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <span class="worksTitle">作业预览</span>
+                    </div>
+                    <div
+                      class="worksDetailBox"
+                      v-if="workStudent[toolIndex].length > 0"
+                    >
+                      <div
+                        class="works"
+                        style="
+                          width: 200px;
+                          height: 140px;
+                          margin: 10px 10px 10px 0;
+                          box-shadow: 0 0 6px 1px #dfdada;
+                        "
+                        v-for="(w, wIndex) in workStudent[toolIndex]"
+                        :key="wIndex"
+                      >
+                        <div class="workImg">
+                          <!-- <img
+                            :src="word2"
+                            @click="downloadFile(w.works)"
+                            v-if="w.type == 12"
+                            alt
+                          /> -->
+                          <img
+                            :src="word2"
+                            @click="
+                              openCocoFlow(w)
+                            "
+                            alt
+                          />
+                          <div
+                            class="answerScore"
+                            v-if="w.score"
+                            @click.stop="openScore(w)"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            {{ JSON.parse(w.score).wScore }}分
+                          </div>
+                          <div
+                            class="answerScore"
+                            @click.stop="openScore(w)"
+                            v-else-if="courseDetail.userid == userid"
+                            :class="{
+                              rightW:
+                                w.userid == userid || tType == 1 || tType == 4
+                            }"
+                          >
+                            评分
+                          </div>
+                          <img
+                            class="deleteImg"
+                            src="../../assets/deleteworks.png"
+                            v-if="
+                              w.userid == userid || tType == 1 || tType == 4
+                            "
+                            @click.stop="deleteWorks(w.wid)"
+                            alt
+                          />
+                        </div>
+                        <div class="worksName">
+                          <div>{{ w.sName }}</div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
                   <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
                     <div
                       style="display: flex;justify-content: space-between;align-items: center;"
@@ -12670,9 +12964,9 @@
           <div
             class="switch_box"
             v-if="
-              courseDetail.userid == userid ||
+              (courseDetail.userid == userid ||
               (courseDetail.course_teacher &&
-                courseDetail.course_teacher.indexOf(userid) != -1)
+                courseDetail.course_teacher.indexOf(userid) != -1)) && !splitScreenData.isOpen
             "
           >
             <!-- v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1" -->
@@ -15153,8 +15447,18 @@
       <div style="text-align: center;">
         <el-button type="primary" style="width: 95%;" @click="confirmOpen">开始学习</el-button>
       </div>
-   
+
     </el-dialog>
+    <appStoreC ref="appStoreC" 
+        :sStudent="sStudent"
+        :courseType="courseType"
+        :taskCount="taskCount"
+        :toolindex="toolindex"
+        @selectSWorks="selectSWorks"
+        @selectStudent="selectStudent"
+      ></appStoreC>
+      
+      <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
   </div>
 </template>
 
@@ -15200,6 +15504,9 @@ import markScore from "./commpont/markScore";
 import markDialog from "./commpont/markDialog";
 import evaTable from "./commpont/evaTable";
 import choseWordCloud from '../components/choseWordCloud.vue'
+import appStoreC from "../components/appStoreC.vue";
+import cocoFlowDia from "../components/cocoFlowDia.vue";
+
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
   from: "hk",
@@ -15286,6 +15593,8 @@ export default {
     evaTable,
 		statisticalAnalysis,
 		choseWorksDetailDialog,
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -15688,6 +15997,10 @@ export default {
     };
   },
   methods: {
+    //查看应用中心作业
+    openCocoFlow(w){
+      this.$refs.cocoFlowDiaRef.openAppWork(w)
+    },
     getAIJ() {
       this.ajax.get(this.$store.state.api + "getAIJ", "").then(res => {
         let oid = res.data[0];
@@ -17793,6 +18106,17 @@ export default {
                     userid: b[j].userid,
                     wid: b[j].id,
                   });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  this.workStudent[i].push({
+                    works: b[j].content,
+                    sName: b[j].name,
+                    score: b[j].score,
+                    img: b[j].img,
+                    type: 20,
+                    time: b[j].time,
+                    userid: b[j].userid,
+                    wid: b[j].id,
+                  });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   this.workStudent[i].push({
@@ -18971,6 +19295,49 @@ export default {
                   }
                   _worksStudent2[i].push(_works);
                   this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
+                } else if (b[j].type == 20 && a[i].tool[0] == 72) {
+                  let _works = {
+                    userid: b[j].userid,
+                    ateacher: b[j].ateacher,
+                    wid: b[j].id,
+                    works: b[j].content,
+                    sName: b[j].name,
+                    type: 20,
+                    ttype: b[j].ttype,
+                    time: b[j].time,
+                    score: b[j].score,
+                    img: b[j].img,
+                    likesCount: likesCount,
+                    commentCount: commentCount,
+                    isLikes: isLikes,
+                    commentJson: commentJson,
+                    likeJson: likeJson
+                  };
+                  if (this.isGroup) {
+                    let isGw = 1;
+                    for (
+                      var groupI = 0;
+                      groupI < this.courseGroup.group.length;
+                      groupI++
+                    ) {
+                      let gid = this.courseGroup.group[groupI].id;
+                      if (
+                        this.courseGroupStudentUid[gid].indexOf(b[j].userid) !=
+                        -1
+                      ) {
+                        isGw = 2;
+                        this.courseGroup.group[groupI].works[i].push(_works);
+                        break;
+                      }
+                    }
+                    if (isGw == 1) {
+                      _worksStudent[i].push(_works);
+                    }
+                  } else {
+                    _worksStudent[i].push(_works);
+                  }
+                  _worksStudent2[i].push(_works);
+                  this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
                 } else if (b[j].type == 2 && a[i].tool[0] == 4) {
                   //问卷
                   let _work = {
@@ -21393,17 +21760,17 @@ export default {
       this.ajax
         .get(this.$store.state.api + "getCourseState", params)
         .then((res) => {
-          if (res.data[0].length > 0) {
+          // if (res.data[0].length > 0) {
+          //   this.chapInfoList = JSON.parse(res.data[0][0].state);
+          // }
+          if (res.data[0].length > 0 && type == 1) {
             this.chapInfoList = JSON.parse(res.data[0][0].state);
-          }
-          if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
-            // this.chapInfoList = JSON.parse(res.data[0][0].state);
             this.setNavList();
             this.$forceUpdate();
-          } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
+          } else if (res.data[0].length > 0 && type == 2) {
             this.addCourseState(2);
           } else {
-            this.addCourseState(1);
+            // this.addCourseState(1);
           }
         })
         .catch((err) => {
@@ -22353,7 +22720,14 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        window.open(item.url, "_blank");
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        this.$refs.appStoreC.getData(item.url,this.userid) 
+
+
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
           for (var k = 0; k < this.worksStudent[i].length; k++) {
@@ -22791,6 +23165,12 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        if (!document.fullscreenElement) {
+          this.enterFullScreen();
+        } 
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url,this.sStudent.userid) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -24202,7 +24582,7 @@ export default {
 
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           // this.followingMode(true);
         } else {
@@ -29227,4 +29607,14 @@ div::-webkit-scrollbar {
     width: 10px;
     height: 6px;
 }
+.Ovh{
+  margin: 5px 0;
+  width: 4em;
+  -webkit-line-clamp: 2;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+
+  text-overflow: ellipsis;           
+}
 </style>

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff