11wqe1 преди 5 месеца
родител
ревизия
f9807ac138

+ 40 - 2
src/components/components/appStoreC.vue

@@ -16,11 +16,12 @@
                 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" size="medium">提交作业</el-button>
+                <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>
@@ -28,11 +29,13 @@
 
 <script>
     export default {
+        props: ["sStudent","courseType","taskCount","toolindex"],
         data() {
             return {
                 urlData:"",
                 userId: this.$route.query.userid,
                 appDialogVisible: false,
+                id: this.$route.query.courseId
             }
         },
         methods: {
@@ -44,6 +47,41 @@
                 this.urlData = ''
                 this.appDialogVisible = false
             },
+            uploadWork(){
+                // console.log('window.exposed_outputs',window.exposed_outputs);
+                let _iframe = this.$refs.appStore;
+                
+                // window.exposed_outputs
+                let Cow = JSON.stringify(_iframe.contentWindow.exposed_outputs)
+
+                let params = [
+                    {
+                    uid: this.sStudent.userid,
+                    cid: this.id,
+                    stage: this.courseType,
+                    task: this.taskCount,
+                    tool: this.toolindex,
+                    content: Cow,
+                    type: 20
+                    }
+                ];
+                this.ajax
+                    .post(this.$store.state.api + "addCourseWorks", 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>

+ 78 - 8
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; " 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 
@@ -1209,7 +1226,9 @@
 													<img :src="require('../../assets/icon/isWord.png')" alt="">
 													<!-- <img v-if="[48].includes(toolType)" :src="require('../../assets/icon/isTxt.png')" alt=""> -->
 												</div>
-
+                        <div class="imageWorks" v-if="[72].includes(toolType)">
+													<img :src="require('../../assets/icon/isWord.png')" alt="">
+												</div>
 												<!-- <span>{{ worksCheckAnswer(item) }}</span> -->
 											</div>
                     </div>
@@ -1385,6 +1404,7 @@ export default {
   },
   data() {
     return {
+      appStoreUrl:'',
       chapInfoListData2:[],
       radioS:[], //提交作业数组容器
       questionsData:'', //提交作业字符串容器
@@ -1430,9 +1450,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")},
@@ -1460,7 +1480,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},
@@ -1817,6 +1838,44 @@ 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)
+      
+        let params = [
+            {
+            uid: this.userId,
+            cid: this.id,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolIndex,
+            content: Cow,
+            type: 20
+            }
+        ];
+        this.ajax
+            .post(this.$store.state.api + "addCourseWorks", 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++) {
@@ -2463,7 +2522,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();
         });
@@ -2900,7 +2959,18 @@ 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;

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

@@ -0,0 +1,165 @@
+<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: x-large;">第{{ index + 1}}阶段</div>
+                <div v-for="po in item.messages" :key="item">
+                    <div class="left" v-if="po.role == 'assistant'">
+                        <div>
+                            <div class="TName">小可ai助手:</div>
+                            <div class="con" v-html="po.content"></div>
+                        </div>
+                      
+                    </div>
+
+                    <div class="right" v-if="po.role == 'user'">
+                        <div>
+                            <div class="TName">:{{ po.sender }}</div>
+                            <div class="con" v-html="po.content"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </el-dialog>
+
+    </div>
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                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
+                    //         }
+                    //     ]
+                    // }
+                ]
+            }
+        },
+        methods: {
+            openAppWork(val){
+                console.log(val);
+                this.listData = JSON.parse(val.works)
+                this.FlowVisible = true;
+            },
+            handleClose(){
+                this.FlowVisible = false;
+            }
+        },
+    }
+</script>
+
+<style scoped>
+    .TName{
+        font-size: large;
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+    }
+    .con{
+        font-size: 14px;
+        color: #000;
+    }
+    .left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 15px;
+    }
+    .right{
+        display: flex;
+        justify-content: flex-end;
+        margin-bottom: 15px;
+    }
+    .dialog_diy >>> .el-dialog__header,
+    .dialog_diy1 >>> .el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+    }
+
+    .dialog_diy >>> .el-dialog__title,
+    .dialog_diy1 >>> .el-dialog__title {
+    color: #fff;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn,
+    .dialog_diy1 >>> .el-dialog__headerbtn {
+    top: 19px;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close,
+    .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+    }
+
+    .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover,
+    .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+    }
+
+    .dialog_diy1 >>> .el-dialog__body {
+    padding: 0;
+    }
+
+    .dialog_diy >>> .el-dialog__body,
+    .dialog_diy >>> .el-dialog__footer,
+    .dialog_diy1 >>> .el-dialog__footer {
+    background: #fafafa;
+    }
+    
+</style>

+ 314 - 12
src/components/easy2/studyStudent.vue

@@ -1504,6 +1504,10 @@
                               {{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
@@ -4823,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;"
@@ -15618,7 +15898,17 @@
    
     </el-dialog>
 
-    <appStoreC ref="appStoreC"></appStoreC>
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -15663,6 +15953,8 @@ 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");
@@ -15752,7 +16044,8 @@ export default {
     evaTable,
     statisticalAnalysis,
     choseWorksDetailDialog,
-    appStoreC
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -16181,7 +16474,10 @@ export default {
         this.oidArray = oidArray;
       });
     },
-
+    //查看应用中心作业
+    openCocoFlow(w){
+      this.$refs.cocoFlowDiaRef.openAppWork(w)
+    },
     // 评分弹框全屏
     markFullScreenBtn() {
       this.markfullscreen = !this.markfullscreen;
@@ -20550,6 +20846,7 @@ export default {
     allScrell() {
       window.parent.postMessage({ allScreen: this.screenType }, "*");
     },
+    // 0上一步  1下一步
     nextOrpreSteps(t) {
       if (this.IsFollow && this.tType == 2) {
         this.$message.error("已经开启跟随模式,请认真跟堂听讲");
@@ -21984,18 +22281,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 => {
@@ -22966,9 +23264,9 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        // return this.$refs.appStoreC.getData(item.url) 
+        this.$refs.appStoreC.getData(item.url) 
 
-        window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
         // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
@@ -23406,6 +23704,9 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -24857,7 +25158,7 @@ export default {
 
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           this.changeSplitScreenBehavior({form:{}})
           // this.followingMode(true);
@@ -24911,6 +25212,7 @@ export default {
       this.timer2 = setInterval(()=> {
         this.getSplitScreenData();//获取分屏数据
       }, 1000);
+      this.IsLookOpen = flase
       this.$message.success("分屏模式已开启");
     },
     getSplitScreenData() {

+ 311 - 12
src/components/easy3/studyStudent.vue

@@ -1437,6 +1437,10 @@
                                 {{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
@@ -3665,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"
@@ -12166,7 +12446,16 @@
    
     </el-dialog>
 
-    <appStoreC ref="appStoreC"></appStoreC>
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -12211,6 +12500,7 @@ 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",
@@ -12294,7 +12584,8 @@ export default {
     scoreZong,
 		statisticalAnalysis,
 		choseWorksDetailDialog,
-    appStoreC
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -12678,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];
@@ -17679,17 +17974,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) => {
@@ -18639,9 +18934,9 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        // this.$refs.appStoreC.getData(item.url) 
+        this.$refs.appStoreC.getData(item.url) 
 
-        window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
         // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
@@ -19080,6 +19375,9 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -20484,7 +20782,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 {
@@ -20535,6 +20833,7 @@ export default {
       this.timer2 = setInterval(()=> {
         this.getSplitScreenData();//获取分屏数据
       }, 1000);
+
       this.$message.success("分屏模式已开启");
     },
     getSplitScreenData() {

+ 469 - 11
src/components/studyStudent.vue

@@ -1397,6 +1397,10 @@
                               <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">
@@ -3626,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"
@@ -6817,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 &&
@@ -12099,7 +12539,16 @@
 
     </el-dialog>
 
-    <appStoreC ref="appStoreC"></appStoreC>
+    <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+    <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
   </div>
 </template>
 
@@ -12143,6 +12592,7 @@ 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",
@@ -12226,7 +12676,8 @@ export default {
     scoreZong,
 		statisticalAnalysis,
 		choseWorksDetailDialog,
-    appStoreC
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -12649,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];
@@ -17663,17 +18118,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) => {
@@ -18624,9 +19079,9 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        // this.$refs.appStoreC.getData(item.url) 
+        this.$refs.appStoreC.getData(item.url) 
         // window.open(item.url, "_blank");
-        window.parent.postMessage({ tools: "72", data: item }, "*");
+        // 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++) {
@@ -19064,6 +19519,9 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -20467,7 +20925,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 {

+ 309 - 11
src/components/studySutdentClass/studyStudent.vue

@@ -1453,6 +1453,10 @@
                                 {{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
@@ -4772,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;"
@@ -15168,7 +15448,16 @@
         <el-button type="primary" style="width: 95%;" @click="confirmOpen">开始学习</el-button>
       </div>
 
-      <appStoreC ref="appStoreC"></appStoreC>
+      <appStoreC ref="appStoreC" 
+      :sStudent="sStudent"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      @selectSWorks="selectSWorks"
+      @selectStudent="selectStudent"
+    ></appStoreC>
+      <cocoFlowDia ref="cocoFlowDiaRef"></cocoFlowDia>
+
     </el-dialog>
   </div>
 </template>
@@ -15216,6 +15505,7 @@ 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({
@@ -15303,7 +15593,8 @@ export default {
     evaTable,
 		statisticalAnalysis,
 		choseWorksDetailDialog,
-    appStoreC
+    appStoreC,
+    cocoFlowDia
   },
   data() {
     return {
@@ -15706,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];
@@ -21411,17 +21706,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) => {
@@ -22371,9 +22666,9 @@ export default {
           this.$message.error("应用连接为空, 请到课程管理中添加");
           return;
         }
-        // this.$refs.appStoreC.getData(item.url) 
+        this.$refs.appStoreC.getData(item.url) 
 
-        window.parent.postMessage({ tools: "72", data: item }, "*");
+        // window.parent.postMessage({ tools: "72", data: item }, "*");
         // window.open(item.url, "_blank");
       } else if (t == 69) {
         if (this.worksStudent[i].length) {
@@ -22812,6 +23107,9 @@ export default {
           },
           "*"
         );
+      }else if (t == 72) {
+        let url = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index].toolChoose[i].appJson.url
+        this.$refs.appStoreC.getData(url) 
       }
     },
     openCocoPi(tool, i, uid, uname) {
@@ -24223,7 +24521,7 @@ export default {
 
         if (status == 1) {
           this.$message.success("已开启分屏");
-          this.studentFreePreview(true);
+          this.studentFreePreview(false);
           this.OpenJobPreview(true);
           // this.followingMode(true);
         } else {