浏览代码

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/pbl-teacher-table into beta

SanHQin 3 月之前
父节点
当前提交
98ce416a87

+ 18 - 5
src/components/pages/aiEasy/addCourse.vue

@@ -2553,7 +2553,7 @@
                     <span>一键生成</span>
                     <div class="buttonBox">
                       <div @click="openAiDialog(2, 'aiTaskName'), addCourseBehavior('courseBehavior2', `点击学历案-生成所有任务名`)" v-if="panTaskName() == 0">生成所有任务名</div>
-                      <div @click="openAiDialog2(2, 'aiTaskName'), addCourseBehavior('courseBehavior2', `点击学历案-生成所有任务名`)" v-else-if="panTask() == 0">重新生成所有任务名</div>
+                      <div @click="openAiDialog2(2, 'aiTaskName'), addCourseBehavior('courseBehavior2', `点击学历案-生成所有任务名`)" v-else>重新生成所有任务名</div>
                       <div @click="openAiDialog2(2, 'aiTask3','all', ''), addCourseBehavior('courseBehavior2', `点击学历案-重新生成所有任务`)" v-if="panTaskName() > 0 && panTask() > 0">重新生成所有任务</div>
                       <div @click="openAiDialog(2, 'aiTask3','all', ''), addCourseBehavior('courseBehavior2', `点击学历案-生成所有任务按钮`)" v-else-if="panTaskName() > 0">生成所有任务</div>
                       <div @click="openAiDialog(2, 'aiTaskG2', 'all'), addCourseBehavior('courseBehavior2', `点击学历案-一键生成所有工具按钮`)" v-if="panTask() > 0 && panTool() == 0">一键生成所有工具</div>
@@ -5389,7 +5389,7 @@
           @setAiJson="setAiJson" /> -->
         <!-- <aiTips ttitle="生成教案" title="教案描述优化" :detail="aiJson.teacherDetail2" pan="teacherDetail2"
           @setAiJson="setAiJson" /> -->
-        <aiTips ttitle="生成教案" title="生成任务按钮" :detail="aiJson.aiTask" pan="aiTask" @setAiJson="setAiJson" />
+        <!-- <aiTips ttitle="生成教案" title="生成任务按钮" :detail="aiJson.aiTask" pan="aiTask" @setAiJson="setAiJson" /> -->
         <aiTips ttitle="任务详情" title="生成任务" :detail="aiJson.aiTaskName" pan="aiTaskName" @setAiJson="setAiJson" />
         <aiTips ttitle="任务详情" title="任务描述" :detail="aiJson.aiTaskG1" pan="aiTaskG1" @setAiJson="setAiJson" />
         <aiTips ttitle="任务详情" title="工具列表" :detail="aiJson.aiTaskG2" pan="aiTaskG2" @setAiJson="setAiJson" />
@@ -14899,7 +14899,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
               }
             }
 
-            if(this.courseText){
+            if(this.courseText || this.courseTextE){
               this.courseTextB = false
             }
             if(this.teacherCourseText){
@@ -17722,6 +17722,8 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
           })
           return;
         }
+        this.$message.success("正在生成中...")
+
         this.aitype = type
         this.aiText = this.aiJson.aiTaskG1
         this.aiText2 = this.aiJson.aiTaskG2
@@ -17739,6 +17741,8 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
           this.$message.error("请生成学习任务后再生成任务");
           return;
         }
+        this.$message.success("正在生成中...")
+
         this.aitype = type
         this.aiText = this.aiJson.aiTaskName
         this.aiCallBack = callback
@@ -17768,6 +17772,8 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         //   });
         //   return;
         // }
+        this.$message.success("正在生成中...")
+
         this.aitype = type
         this.aiText = this.aiJson.aiTaskG2
         this.aiCallBack = callback
@@ -18314,6 +18320,7 @@ ${(this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" || this.templateid
           let _this = this
           function processNext() {
             if (ij < _this.unitJson[0].chapterInfo[0].taskJson.length) {
+              let _task = _this.unitJson[0].chapterInfo[0].taskJson[ij]
               if(!_this.taskGLoading[ij][0]){
                 ij++;
                 processNext();
@@ -18330,6 +18337,7 @@ ${msg}
 
 ## 参考资料
 学习任务内容:${_this.courseTextE}
+你所在的活动:教学活动${ij+1}:${_task.task} 活动描述:${_task.taskDetail}
 
 # 输出格式与要求
 任务描述(告诉学生他们需要做什么):
@@ -18355,6 +18363,8 @@ ${msg}
           this.aiCallBack[1] ? this.aiCallBack[1]() : ''
 
         }else{
+          let _task = _this.unitJson[0].chapterInfo[0].taskJson[this.aiCallBack[0]]
+
           let message1 = `NOTICE
 Role: 你是一名教师,你正在使用一个在线学习平台来教授学生,你已经完成了教案,你现在需要将教案变为学生上课用的任务单(work sheet)。该在线学习平台为每个任务提供了资源区(视频,ppt,阅读资料将放在这里),多种互动工具(学生点击工具即可上传他们的作业或者回答,这些互动工具类似kahoot一样允许教师轻松收集,统计,追踪学生作业),以及和任务绑定的目标和评价系统。
 Language: ${this.getLang()}
@@ -18366,6 +18376,7 @@ ${msg}
 
 ## 参考资料
 学习任务内容:${this.courseTextE}
+你所在的活动:教学活动${this.aiCallBack[0]+1}:${_task.task} 活动描述:${_task.taskDetail}
 
 # 输出格式与要求
 任务描述(告诉学生他们需要做什么):
@@ -18535,7 +18546,7 @@ ${msg}
 学习任务内容:${this.courseTextE}
 
 # Format example
-[{"task": "任务1的名字"}, {"task": "任务2的名字"}, {"task": "任务3的名字"}, {"task": "任务n的名字"}]`
+[{"task":"活动名/任务名/环节名","taskDetail":"活动描述/任务描述/环节描述"},{"task":"活动名/任务名/环节名","taskDetail":"活动描述/任务描述/环节描述"},{"task":"活动名/任务名/环节名","taskDetail":"活动描述/任务描述/环节描述"},{"task":"活动名/任务名/环节名","taskDetail":"活动描述/任务描述/环节描述"}]`
         this.loading = true
         this.aiGetTaskName(message, this.aiCallBack)
       } else if (this.aitype == "aiDetail1") {
@@ -20338,18 +20349,20 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
 
             for(var i = 0; i < _this.unitJson[0].chapterInfo[0].taskJson.length; i++){
               _this.unitJson[0].chapterInfo[0].taskJson[i].task = ""
+              _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail = ""
             }
             for (var i = 0; i < dArray.length; i++) {
               let _task = dArray[i]
               if(_this.unitJson[0].chapterInfo[0].taskJson[i]){
                 _this.unitJson[0].chapterInfo[0].taskJson[i].task = _task.task
+                _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail = _task.taskDetail
                 // .replaceAll('任务'+(i+1),'').replaceAll('任务'+_this.numberToChinese(i+1),'').replaceAll(':','').replaceAll(':','')
                 _this.unitJson[0].chapterInfo[0].taskJson[i].isFold = 0
               }else {
                 _this.unitJson[0].chapterInfo[0].taskJson.push({
                   task: _task.task,
                   // .replaceAll('任务'+(i+1),'').replaceAll('任务'+_this.numberToChinese(i+1),'').replaceAll(':','').replaceAll(':',''),
-                  taskDetail: "",
+                  taskDetail: _task.taskDetail,
                   taskDetail2: "",
                   taskDetail3: "",
                   chapterData: [],

+ 4 - 4
src/components/pages/components/exjsmind.vue

@@ -69,7 +69,7 @@ export default {
 
       let elements = this.$refs.jsm.getElementsByClassName("jsmind-inner")[0];
 
-      let sw = (815 / jm.view.size.w).toFixed(2);
+      let sw = (715 / jm.view.size.w).toFixed(2);
 
       elements.style.height = `${jm.view.size.h * sw}px`;
 
@@ -90,9 +90,9 @@ export default {
   /* align-items: center; */
   /* justify-content: center; */
   /* min-width: 20px; */
-  max-width: 250px;
-  overflow: hidden;
-  letter-spacing: 3px;
+  /* max-width: 250px; */
+  /* overflow: hidden; */
+  letter-spacing: 5px;
   font-size: 12px !important;
   /* flex-wrap: wrap; */
   /* white-space: wrap; */

文件差异内容过多而无法显示
+ 385 - 389
src/components/pages/components/exportDataDialog.vue


+ 267 - 277
src/components/pages/components/exportWorksDialog.vue

@@ -280,51 +280,90 @@
                   </div>
                 </div>
                 <div v-if="l.tool[0] == 45">
-                    <div class="toolBlk">
-                      <img
-                        src="../../../assets/icon/thirdToolList/choose.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:选择题</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
-                        </div>
+                  <div class="toolBlk">
+                    <img
+                      src="../../../assets/icon/thirdToolList/choose.png"
+                      alt=""
+                    />
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:选择题</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
+                  </div>
+                  <div
+                    v-for="(i, index) in l.content[0].testJson"
+                    :key="index + 'm'"
+                  >
+                    <div>
+                      题目:{{ i.teststitle }}
+                      <span
+                        v-if="
+                          JSON.stringify(l.content[0].radio[index]) ==
+                            JSON.stringify(i.answer)
+                        "
+                        style="color: #868ce4"
+                        >回答正确</span
+                      >
+                      <span v-else style="color: red">回答错误</span>
+                    </div>
                     <div
-                      v-for="(i, index) in l.content[0].testJson"
-                      :key="index + 'm'"
+                      v-if="i.type == 1"
+                      style="display: flex; flex-direction: column"
                     >
-                      <div>
-                        题目:{{ i.teststitle }}
-                        <span
-                          v-if="
-                            JSON.stringify(l.content[0].radio[index]) ==
-                              JSON.stringify(i.answer)
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
-                      </div>
-                      <div
-                        v-if="i.type == 1"
-                        style="display: flex; flex-direction: column"
-                      >
-                        <el-radio-group v-model="l.content[0].radio[index]">
-                          <div class="radioBox">
-                            <el-radio
-                              v-for="(item2, checkIndex) in i.checkList"
-                              :key="checkIndex + 'b'"
-                              :label="checkIndex"
-                              disabled
-                              :class="[
-                                i.answer == checkIndex
-                                  ? 'redioStyle5'
-                                  : 'redioStyle2'
-                              ]"
+                      <el-radio-group v-model="l.content[0].radio[index]">
+                        <div class="radioBox">
+                          <el-radio
+                            v-for="(item2, checkIndex) in i.checkList"
+                            :key="checkIndex + 'b'"
+                            :label="checkIndex"
+                            disabled
+                            :class="[
+                              i.answer == checkIndex
+                                ? 'redioStyle5'
+                                : 'redioStyle2'
+                            ]"
+                          >
+                            <div
+                              v-if="
+                                item2 && item2.imgType && item2.imgType == 1
+                              "
                             >
+                              <div
+                                class="inImg"
+                                @click.stop="previewImg(item2.src)"
+                              >
+                                <img
+                                  style="display: block"
+                                  :src="item2.src"
+                                  alt=""
+                                />
+                              </div>
+                            </div>
+                            <span v-else v-html="item2"></span>
+                          </el-radio>
+                        </div>
+                      </el-radio-group>
+                    </div>
+                    <div class="radioBox">
+                      <el-checkbox-group
+                        v-model="l.content[0].radio[index]"
+                        v-if="i.type == '2'"
+                      >
+                        <div class="radioBox">
+                          <el-checkbox
+                            v-for="(item2, checkIndex) in i.checkList"
+                            :key="checkIndex + 'c'"
+                            :label="checkIndex"
+                            disabled
+                            :class="[
+                              i.answer.includes(checkIndex)
+                                ? 'redioStyle3'
+                                : 'redioStyle4'
+                            ]"
+                          >
+                            <div style="display: flex">
                               <div
                                 v-if="
                                   item2 && item2.imgType && item2.imgType == 1
@@ -342,115 +381,74 @@
                                 </div>
                               </div>
                               <span v-else v-html="item2"></span>
-                            </el-radio>
-                          </div>
-                        </el-radio-group>
-                      </div>
-                      <div class="radioBox">
-                        <el-checkbox-group
-                          v-model="l.content[0].radio[index]"
-                          v-if="i.type == '2'"
-                        >
-                          <div class="radioBox">
-                            <el-checkbox
-                              v-for="(item2, checkIndex) in i.checkList"
-                              :key="checkIndex + 'c'"
-                              :label="checkIndex"
-                              disabled
-                              :class="[
-                                i.answer.includes(checkIndex)
-                                  ? 'redioStyle3'
-                                  : 'redioStyle4'
-                              ]"
-                            >
-                              <div style="display: flex">
-                                <div
-                                  v-if="
-                                    item2 && item2.imgType && item2.imgType == 1
-                                  "
-                                >
-                                  <div
-                                    class="inImg"
-                                    @click.stop="previewImg(item2.src)"
-                                  >
-                                    <img
-                                      style="display: block"
-                                      :src="item2.src"
-                                      alt=""
-                                    />
-                                  </div>
-                                </div>
-                                <span v-else v-html="item2"></span>
-                              </div>
-                            </el-checkbox>
-                          </div>
-                        </el-checkbox-group>
-                      </div>
-                    </div>
-                  </div>
-                  <!-- 选择匹配 -->
-                  <div v-if="l.tool[0] == 41">
-                    <div class="toolBlk">
-                      <img
-                        class="toolImg"
-                        src="../../../assets/icon/thirdToolList/select.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:选择匹配</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                            </div>
+                          </el-checkbox>
                         </div>
-                      </div>
+                      </el-checkbox-group>
                     </div>
+                  </div>
+                </div>
+                <!-- 选择匹配 -->
+                <div v-if="l.tool[0] == 41">
+                  <div class="toolBlk">
                     <img
-                      @click.stop="previewImg(l.selectJson.url)"
-                      style="max-width: 200px"
-                      :src="l.selectJson.url"
+                      class="toolImg"
+                      src="../../../assets/icon/thirdToolList/select.png"
                       alt=""
                     />
-                    <div>
-                      <span style="margin-right: 10px">选项:</span
-                      ><span
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.selectJson.select"
-                        :key="itInd"
-                        >{{ item }}</span
-                      >
-                    </div>
-                    <div style="margin: 10px 0;">
-                      <span style="margin-right: 10px">回答:</span>
-
-                      <div
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.content[0]"
-                        :key="itInd"
-                      >
-                        选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
-                        <span
-                          v-if="
-                            l.selectJson.answer[itInd] == l.content[0][itInd]
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:选择匹配</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
-                    <div>
-                      <span style="margin-right: 10px">答案:</span>
+                  </div>
+                  <img
+                    @click.stop="previewImg(l.selectJson.url)"
+                    style="max-width: 200px"
+                    :src="l.selectJson.url"
+                    alt=""
+                  />
+                  <div>
+                    <span style="margin-right: 10px">选项:</span
+                    ><span
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.selectJson.select"
+                      :key="itInd"
+                      >{{ item }}</span
+                    >
+                  </div>
+                  <div style="margin: 10px 0;">
+                    <span style="margin-right: 10px">回答:</span>
 
+                    <div
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.content[0]"
+                      :key="itInd"
+                    >
+                      选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
                       <span
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.selectJson.answer"
-                        :key="itInd"
-                        >选项{{ itInd + 1 }}:{{
-                          l.selectJson.select[item]
-                        }}</span
+                        v-if="l.selectJson.answer[itInd] == l.content[0][itInd]"
+                        style="color: #868ce4"
+                        >回答正确</span
                       >
+                      <span v-else style="color: red">回答错误</span>
                     </div>
                   </div>
-                  <!-- <div v-if="l.tool[0] == 41">
+                  <div>
+                    <span style="margin-right: 10px">答案:</span>
+
+                    <span
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.selectJson.answer"
+                      :key="itInd"
+                      >选项{{ itInd + 1 }}:{{
+                        l.selectJson.select[item]
+                      }}</span
+                    >
+                  </div>
+                </div>
+                <!-- <div v-if="l.tool[0] == 41">
                     <div class="toolBlk">
                       <img
                         src="../../../assets/icon/thirdToolList/select.png"
@@ -489,76 +487,76 @@
                     </div>
                   </div> -->
 
-                  <!-- 排序 -->
-                  <div v-if="l.tool[0] == 47">
-                    <div class="toolBlk">
-                      <img
-                        src="../../../assets/icon/fourthToolList/conSentences.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:排序</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
-                        </div>
+                <!-- 排序 -->
+                <div v-if="l.tool[0] == 47">
+                  <div class="toolBlk">
+                    <img
+                      src="../../../assets/icon/fourthToolList/conSentences.png"
+                      alt=""
+                    />
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:排序</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
+                  </div>
+                  <div
+                    v-for="(i, index) in l.content[0]"
+                    :key="index"
+                    style="margin-bottom: 10px"
+                  >
                     <div
-                      v-for="(i, index) in l.content[0]"
-                      :key="index"
-                      style="margin-bottom: 10px"
-                    >
-                      <div
-                        style="
+                      style="
                             height: 20px;
                             display: flex;
                             align-items: center;
                             flex-wrap: wrap;
                           "
+                    >
+                      题目:
+                      <div
+                        class="sortTool"
+                        v-for="(i, index) in i.addSentence"
+                        :key="index"
                       >
-                        题目:
-                        <div
-                          class="sortTool"
-                          v-for="(i, index) in i.addSentence"
-                          :key="index"
-                        >
-                          {{ i }}
-                        </div>
-                        <span
-                          v-if="
-                            JSON.stringify(i.chooseSenList) ==
-                              JSON.stringify(i.addSentence)
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
+                        {{ i }}
                       </div>
-                      <div
-                        style="
+                      <span
+                        v-if="
+                          JSON.stringify(i.chooseSenList) ==
+                            JSON.stringify(i.addSentence)
+                        "
+                        style="color: #868ce4"
+                        >回答正确</span
+                      >
+                      <span v-else style="color: red">回答错误</span>
+                    </div>
+                    <div
+                      style="
                             margin: 10px 0;
                             display: flex;
                             align-items: center;
                             flex-wrap: wrap;
                           "
+                    >
+                      学生回答:
+                      <div
+                        class="sortTool"
+                        v-for="(i, index) in i.chooseSenList"
+                        :key="index"
                       >
-                        学生回答:
-                        <div
-                          class="sortTool"
-                          v-for="(i, index) in i.chooseSenList"
-                          :key="index"
-                        >
-                          {{ i }}
-                        </div>
-                      </div>
-                      <div>
-                        答案:
-                        <span style="margin: 0 5px">{{
-                          i.addSentence.join(",")
-                        }}</span>
+                        {{ i }}
                       </div>
                     </div>
+                    <div>
+                      答案:
+                      <span style="margin: 0 5px">{{
+                        i.addSentence.join(",")
+                      }}</span>
+                    </div>
                   </div>
+                </div>
               </div>
 
               <!-- ai作业得分  -->
@@ -586,7 +584,7 @@
                 <div class="taskScoCon">
                   <!-- 分数详情与素养 -->
                   <div style="flex: 1; display: flex; flex-wrap: wrap">
-                    <div style="width: 375px; margin:0 20px 10px 0">
+                    <div style="width: 315px; margin:0 20px 10px 0">
                       <div class="taskScoConTit">分数详情</div>
                       <div
                         v-for="(wItem, ind) in l.eList"
@@ -655,14 +653,14 @@
                   </div>
                 </div>
               </div>
-             
+
               <!-- 阶段  -->
               <div
                 v-if="
-                    l.eList &&
+                  l.eList &&
                     l.eList.length &&
-                    CState != 5 && 
-                    CState != 6 && 
+                    CState != 5 &&
+                    CState != 6 &&
                     lind == k.toolEList.length - 1
                 "
                 class="taskSco"
@@ -681,7 +679,7 @@
                 <div class="taskScoCon">
                   <!-- 分数详情与素养 -->
                   <div style="flex: 1; display: flex; flex-wrap: wrap">
-                    <div style="width: 375px; margin:0 20px 10px 0">
+                    <div style="width: 315px; margin:0 20px 10px 0">
                       <div class="taskScoConTit">分数详情</div>
                       <div
                         v-for="(wItem, ind) in l.eList"
@@ -723,10 +721,12 @@
                             :content="wItem.target[wItem.target.length - 1]"
                             placement="top-start"
                           > -->
-                            <div class="RootImgBlockSy">
-                              <span v-if="wItem.target && wItem.target.length"> {{ wItem.target[wItem.target.length - 1] }}</span>
-                              <span v-else> {{ wItem.target }}</span>
-                            </div>
+                          <div class="RootImgBlockSy">
+                            <span v-if="wItem.target && wItem.target.length">
+                              {{ wItem.target[wItem.target.length - 1] }}</span
+                            >
+                            <span v-else> {{ wItem.target }}</span>
+                          </div>
                           <!-- </el-tooltip> -->
                         </div>
                       </div>
@@ -751,9 +751,8 @@
                   </div>
                 </div>
               </div>
-
             </div>
-          
+
             <!-- 思维导图 -->
             <div v-if="CState == 5 || CState == 6" class="taskTitInd">
               <div></div>
@@ -860,15 +859,15 @@ export default {
     totalScore() {
       return function(val) {
         let valT = JSON.parse(JSON.stringify(val));
-        
+
         if (!valT) return "0.0";
 
         delete valT.content;
         delete valT.comment;
-        console.log('valT',JSON.parse(JSON.stringify(val)));
+        console.log("valT", JSON.parse(JSON.stringify(val)));
 
         let data = Object.values(valT);
-        console.log('data',JSON.parse(JSON.stringify(data)));
+        console.log("data", JSON.parse(JSON.stringify(data)));
 
         let new1 = data.reduce(function(pre, next, index) {
           return pre + next * 1;
@@ -879,22 +878,21 @@ export default {
         return (new1 / data.length).toFixed(1);
       };
     },
-    workTime(){
+    workTime() {
       return function(val) {
-        if (!val.length) return ''
-        let TimeList = []
-        val.forEach(e=>{
+        if (!val.length) return "";
+        let TimeList = [];
+        val.forEach(e => {
           if (e.time) {
             const timestamp = new Date(e.time).getTime();
-            TimeList.push(timestamp)
+            TimeList.push(timestamp);
           }
-        })
-
-        console.log('TimeList',TimeList);
-        TimeList.sort(function(a,b){
-          return a-b;//从小到大排序
-        })
+        });
 
+        console.log("TimeList", TimeList);
+        TimeList.sort(function(a, b) {
+          return a - b; //从小到大排序
+        });
 
         return this.convertToTimestamp(TimeList[0]);
       };
@@ -902,52 +900,43 @@ export default {
   },
 
   methods: {
-      // 时间戳转时间
-      convertToTimestamp(val) {
+    // 时间戳转时间
+    convertToTimestamp(val) {
       const date = new Date(val);
 
       // 使用Date对象的方法获取年、月、日、时、分、秒
       const year = date.getFullYear();
-      const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1
-      const day = String(date.getDate()).padStart(2, '0');
-      const hours = String(date.getHours()).padStart(2, '0');
-      const minutes = String(date.getMinutes()).padStart(2, '0');
-      const seconds = String(date.getSeconds()).padStart(2, '0');
+      const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,需要加1
+      const day = String(date.getDate()).padStart(2, "0");
+      const hours = String(date.getHours()).padStart(2, "0");
+      const minutes = String(date.getMinutes()).padStart(2, "0");
+      const seconds = String(date.getSeconds()).padStart(2, "0");
 
       // 格式化后的日期时间字符串
       const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
-      
-      return formattedDateTime
+
+      return formattedDateTime;
     },
     // 下载pdf文件
     getPdf() {
       const content = this.$refs.reportPdf;
-
-      html2canvas(content).then(canvas => {
-
+      const dpi = 300;
+      html2canvas(content, {
+        dpi: dpi, // 设置截图的分辨率
+        scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
+      }).then(canvas => {
         var contentWidth = canvas.width;
         var contentHeight = canvas.height;
 
-      
-          //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
-          var imgWidth = 595.28;
-          var imgHeight = (592.28 / contentWidth) * contentHeight;
-
-          var imgData = canvas.toDataURL("image/jpeg", 1.0);
-
-        const pdf = new jspdf("p", "pt", [
-            imgWidth,
-            imgHeight
-        ]);
-
-        pdf.addImage(
-          imgData,
-          "PNG",
-          0,
-          0,
-          imgWidth,
-          imgHeight
-        );
+        //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
+        var imgWidth = 595.28;
+        var imgHeight = (592.28 / contentWidth) * contentHeight;
+
+        var imgData = canvas.toDataURL("image/jpeg", 1.0);
+
+        const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
+
+        pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
         pdf.save(
           this.worksDialogCon2.course +
             "-作业集-" +
@@ -955,42 +944,31 @@ export default {
             ".pdf"
         );
       });
-
-  
     },
 
     // 压缩pdf
     async getPdf2() {
-  
       const content = this.$refs.reportPdf;
 
       return new Promise((resolve, reject) => {
-        html2canvas(content)
+        const dpi = 300;
+        html2canvas(content, {
+          dpi: dpi, // 设置截图的分辨率
+          scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
+        })
           .then(canvas => {
-
             var contentWidth = canvas.width;
             var contentHeight = canvas.height;
 
-      
             //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
             var imgWidth = 595.28;
             var imgHeight = (592.28 / contentWidth) * contentHeight;
 
             var imgData = canvas.toDataURL("image/jpeg", 1.0);
-          
-            const pdf = new jspdf("p", "pt", [
-              imgWidth,
-              imgHeight
-            ]);
-
-            pdf.addImage(
-              imgData,
-              "PNG",
-              0,
-              0,
-              imgWidth,
-              imgHeight
-            );
+
+            const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
+
+            pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
             var pdfData = {
               pdfName:
                 this.worksDialogCon2.course +
@@ -1162,16 +1140,27 @@ export default {
                     }
                   });
                   // 将没有提交作业,但是有评分标准的数据填上数据,防止报错
-                  if (!l.rate && l.eList && l.eList.length && (this.CState == 5 || this.CState == 6)) {
+                  if (
+                    !l.rate &&
+                    l.eList &&
+                    l.eList.length &&
+                    (this.CState == 5 || this.CState == 6)
+                  ) {
                     l.rate = { content: "" };
                     l.eList.forEach(elp => {
                       l.rate[elp.detail] = 0;
                     });
-                  }else if ((!l.rate && l.eList && l.eList.length && this.CState != 5 && this.CState != 6)) {
-                      l.rate = { content: "" };
-                      l.eList.forEach(elp => {
-                        l.rate[elp.value] = 0;
-                      });
+                  } else if (
+                    !l.rate &&
+                    l.eList &&
+                    l.eList.length &&
+                    this.CState != 5 &&
+                    this.CState != 6
+                  ) {
+                    l.rate = { content: "" };
+                    l.eList.forEach(elp => {
+                      l.rate[elp.value] = 0;
+                    });
                   }
                   // 将素养添加进treeData中
                   if (l.eList && l.eList.length) {
@@ -1211,7 +1200,7 @@ export default {
                               children: [
                                 {
                                   id: kind + "+" + elind + "+" + stind + "b",
-                                  topic: `工具${elind}`
+                                  topic: `工具${elind * 1 + 1}`
                                 }
                               ]
                             });
@@ -1220,7 +1209,7 @@ export default {
                               if (lc.topic == st.detail) {
                                 lc.children.push({
                                   id: kind + "+" + elind + "+" + stind + "b",
-                                  topic: `工具${elind}`
+                                  topic: `工具${elind * 1 + 1}`
                                 });
                               }
                             });
@@ -1384,7 +1373,7 @@ export default {
   position: relative;
 }
 .pdfCon {
-  width: 810pt;
+  width: 220mm;
   margin: auto;
   position: relative;
 }
@@ -1420,8 +1409,9 @@ export default {
 }
 .coverPage {
   /* height: 840pt; */
-  padding: 185px 8% 0;
+  padding: 150px 8% 0;
   background-color: #ccc;
+  box-sizing: border-box;
   position: relative;
   background-image: url("../../../assets/icon/exportPdfworks/bcg1.svg"),
     url("../../../assets/icon/exportPdfworks/bcg2.svg");
@@ -1494,7 +1484,7 @@ export default {
   background-color: #e3edfe;
   display: flex;
   flex-direction: column;
-  padding: 0 110px;
+  padding: 0 60px;
   padding-bottom: 100px;
   box-sizing: border-box;
   font-family: PingFang SC;

+ 511 - 66
src/components/pages/test/smarter.vue

@@ -16,7 +16,7 @@
                         )
                         ">表单管理</span>
                     <!-- v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'" -->
-                    <span class="subClick"  @click="
+                    <span class="subClick" @click="
                         goTo(
                             '/trainCourse?userid=' +
                             userid +
@@ -42,7 +42,7 @@
                         ">数据看板</span>
                     <span class="sub_head">智能助手</span>
                 </div>
-                <div class="pb_head_t_right">
+                <!-- <div class="pb_head_t_right">
                     <el-tooltip class="item" effect="dark" content="预览" placement="bottom">
                         <span class="preview_icon"></span>
                     </el-tooltip>
@@ -52,58 +52,155 @@
                     <el-tooltip class="item" effect="dark" content="问题" placement="bottom">
                         <span class="problem_icon"></span>
                     </el-tooltip>
-                </div>
+                </div> -->
             </div>
         </div>
         <div class="cc_bottom">
-            <smartMenu></smartMenu>
-            <div class="cc_b_middle">
-                <div  style="width:100%;height: 100%;">
-                    <aiLeader :courseId="aiBoxRightCid" :worksArray="courseInfoList" ref="aiChat"
-                        @pushFileData="pushFileData" @clearFileData="clearFileData"></aiLeader>
+            <div class="cc_b_left">
+                <div class="menu_container">
+                    <div :class="['cc_b_l_menu', { active: activeMenu === 1 }]" @click="activeMenu = 1">
+                        <span :class="['session_icon', { active: activeMenu === 1 }]"></span>
+                        <div style="margin-left: 10px;margin-top: 1px;font-size: 15px;">当前会话</div>
+                    </div>
+                    <div :class="['cc_b_l_menu', { active: activeMenu === 2 }]" @click="activeMenu = 2">
+                        <span :class="['history_icon', { active: activeMenu === 2 }]"></span>
+                        <div style="margin-left: 10px;margin-top: 1px;font-size: 15px;">历史会话</div>
+                    </div>
+                    <!--<div :class="['cc_b_l_menu', { active: activeMenu === 3 }]" @click="activeMenu = 3">
+                            <span :class="['mysql_icon', { active: activeMenu === 3 }]"></span>
+                            <div style="margin-left: 10px;margin-top: 1px;font-size: 15px;">数据库管理</div>
+                        </div> -->
+                </div>
+                <div class="fold_btn">
+                    <span class="more_icon"></span>
                 </div>
             </div>
-            <div class="cc_b_right">
-                <div v-if="showFileUrl">
-                    <div class="cc_b_r_menu">
-                        <div v-for="(item, index) in menuList" @click="changeMenuIndex(index)" :key="index"
-                            :class="{ 'cc_b_r_menu_active': menuIndex == index }">
-                            <el-tooltip class="item" effect="dark" :content="item.name" placement="top">
-                                <span>{{ item.name }}</span>
-                            </el-tooltip>
-                            <!-- <div class="cc_b_r_btn"> -->
-                                <span class="close_icon" :class="{ active: menuIndex == index }" @click="deleteMenuItem(index)"></span>
-                            <!-- </div> -->
+            <div v-if="activeMenu == 1" style="width:100%;display: flex;">
+                <div class="cc_b_middle">
+                    <div style="width:100%;height: 100%;">
+                        <aiLeader :courseId="aiBoxRightCid" :worksArray="courseInfoList" ref="aiChat"
+                            @pushFileData="pushFileData" @clearFileData="clearFileData"></aiLeader>
+                    </div>
+                </div>
+                <div class="cc_b_right">
+                    <div v-if="showFileUrl">
+                        <div style="display: flex;">
+                            <div :class="['preview_file', { active: fileMenu === 1 }]" @click="fileMenu = 1">文档预览</div>
+                            <div :class="['bianji_file', { active: fileMenu === 2 }]" @click="fileMenu = 2">文档编辑</div>
+                        </div>
+                        <div v-if="fileMenu == 1" style="margin:10px;">
+                            <div class="cc_b_r_menu">
+                                <div v-for="(item, index) in menuList" @click="changeMenuIndex(index)" :key="index"
+                                    :class="{ 'cc_b_r_menu_active': menuIndex == index }">
+                                    <el-tooltip class="item" effect="dark" :content="item.name" placement="top">
+                                        <span>{{ item.name }}</span>
+                                    </el-tooltip>
+                                    <!-- <div class="cc_b_r_btn"> -->
+                                    <span class="close_icon" :class="{ active: menuIndex == index }"
+                                        @click="deleteMenuItem(index)"></span>
+                                    <!-- </div> -->
+                                </div>
+                            </div>
+                            <div class="cc_b_r_content" style="max-height: 700px; overflow-y: auto;">
+                                <csvTableView v-if="showFileUrl" :url="showFileUrl" />
+                            </div>
                         </div>
+                        <div v-if="fileMenu == 2">
+                            <div class="bianji_area">
+                                <span></span>
+                            </div>
+
+                        </div>
+
                     </div>
-                    <div class="cc_b_r_content">
-                        <csvTableView v-if="showFileUrl" :url="showFileUrl" />
+                    <div v-else style="margin: 40px 0px 0px 20px">
+                        <div>--官方能力演示--</div>
+                        <div class="b_r_menu">
+                            <div class="b_r_menu_content">
+                                <div class="m_c_title">数据处理</div>
+                                <div class="m_c_item">缺失值处理</div>
+                                <div class="m_c_item">无效样本处理</div>
+                                <div class="m_c_item">数据降维</div>
+                            </div>
+                            <div class="b_r_menu_content">
+                                <div class="m_c_title">数据分析</div>
+                                <div class="m_c_item">线性回归</div>
+                                <div class="m_c_item">相关性分析</div>
+                                <div class="m_c_item">关联分心</div>
+                            </div>
+                            <div class="b_r_menu_content">
+                                <div class="m_c_title">图标生成</div>
+                                <div class="m_c_item">箱线图</div>
+                                <div class="m_c_item">雷达图</div>
+                            </div>
+                        </div>
                     </div>
                 </div>
-                <div v-else  style="margin: 40px 0px 0px 20px">
-                    <div>--官方能力演示--</div>
-                    <div class="b_r_menu">
-                        <div class="b_r_menu_content">
-                            <div class="m_c_title">数据处理</div>
-                            <div class="m_c_item">缺失值处理</div>
-                            <div class="m_c_item">无效样本处理</div>
-                            <div class="m_c_item">数据降维</div>
-                        </div>
-                        <div class="b_r_menu_content">
-                            <div class="m_c_title">数据分析</div>
-                            <div class="m_c_item">线性回归</div>
-                            <div class="m_c_item">相关性分析</div>
-                            <div class="m_c_item">关联分心</div>
+            </div>
+            <div v-if="activeMenu == 2" style="width:100%;">
+                <div class="history_talk">
+                    <div class="h_t_head">
+                        <div class="t_h_left">
+                            <span style="font-weight: bold;font-size: 18px;">历史回溯</span>
+                            <span>共计{{ tableData.length }}个会话</span>
                         </div>
-                        <div class="b_r_menu_content">
-                            <div class="m_c_title">图标生成</div>
-                            <div class="m_c_item">箱线图</div>
-                            <div class="m_c_item">雷达图</div>
+                        <div class="t_h_right">
+                            <div style="margin-right: 10px;position: relative;">
+                                <el-input v-model="talkName" class="student_input" placeholder="检索会话名称"></el-input>
+                                <span class="serach_icon" @click="historyTalk()"></span>
+                            </div>
                         </div>
                     </div>
+                    <div class="h_t_table">
+                        <el-table :data="tableData" style="width: 100%">
+                            <el-table-column prop="name" label="会话名称" width="180">
+                            </el-table-column>
+                            <el-table-column prop="create_at" label="创建时间" width="180">
+                            </el-table-column>
+                            <el-table-column prop="update_at" label="更新时间">
+                            </el-table-column>
+                            <el-table-column prop="control" label="操作">
+                                <template slot-scope="scope">
+                                    <div style="display: flex;">
+                                        <div class="bianji">
+                                            <i class="el-icon-edit"></i>
+                                            <span @click="openUpdate(scope.row.name, scope.row.id)">重命名</span>
+                                        </div>
+                                        <div class="bianji">
+                                            <i class="el-icon-delete"></i>
+                                            <span @click="delete_talk(scope.row.id)">删除</span>
+                                        </div>
+                                    </div>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </div>
+                    <div class="h_t_bottom">
+                        <span>共{{ tableData.length }}条</span>
+                        <el-pagination background layout="prev, pager, next" :page-size="pageSize" :current-page="page"
+                            :total="total" @current-change="handleCurrentChange"></el-pagination>
+                        <!-- <el-select v-model="value" placeholder="请选择页数" size="mini" class="el_select">
+                            <el-option v-for="item in options" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select> -->
+                    </div>
+
                 </div>
             </div>
         </div>
+        <el-dialog title="修改会话名称" :visible.sync="dialogVisibleUpdate" :append-to-body="true" :before-close="handleClose"
+            class="dialog_diy">
+            <el-form>
+                <el-form-item label="会话名称" :label-width="formLabelWidth">
+                    <el-input v-model="talkName1" auto-complete="off" placeholder="请输入会话名称..."></el-input>
+                </el-form-item>
+            </el-form>
+            <span class="rename_btn">
+                <el-button @click="dialogVisibleUpdate = false">取 消</el-button>
+                <el-button type="primary" @click="UpdateTalkName()">确 定</el-button>
+            </span>
+        </el-dialog>
     </div>
 </template>
 
@@ -119,7 +216,7 @@ import radarTeacher from "./dataCom/radarTeacher.vue";
 import aiLeader from "./checkAi/aiLeader.vue";
 import txtView from "./choseCheck/txtView.vue";
 import Cascader from "./dataCom/cascader.vue";
-import smartMenu from "./smartBox/smartMenu.vue";
+// import smartMenu from "./smartBox/smartMenu.vue";
 import csvTableView from "./choseCheck/csvTableView.vue";
 
 
@@ -127,7 +224,7 @@ export default {
     name: 'smarter',
     components: {
         radarZong, radarTeacher, Cascader,
-        aiLeader, txtView, smartMenu, csvTableView
+        aiLeader, txtView, csvTableView
     },
     data() {
         return {
@@ -140,12 +237,97 @@ export default {
             menuList: [],
             menuIndex: 0,
             courseInfoList: [],
+            page: 1,
+            total: 0,
+            talkName: '',
+            talkName1: '',
+            chatId: '',
+            formLabelWidth: "100px",
+            pageSize: 9,
             loading: true,
             activeMenu: 1, // 默认激活第一个
-            examineData:[]
+            fileMenu: 1,
+            cutNumber: 1,
+            dialogVisibleUpdate: false,
+            examineData: [],
+            tableData: [],
+            options: [{
+                value: '1',
+                label: '20条/页'
+            }, {
+                value: '2',
+                label: '双皮奶'
+            }],
+            value: '1'
+
         };
     },
     methods: {
+        openUpdate(name, id) {
+            this.talkName1 = name;
+            this.chatId = id;
+            this.dialogVisibleUpdate = true;
+        },
+        UpdateTalkName() {
+            let params = [{
+                id: this.chatId,
+                name: this.talkName1,
+            }];
+            this.ajax
+                .post(this.$store.state.api + "updateChat", params)
+                .then(res => {
+                    if (this.talkName1 == '') {
+                        this.$message({
+                            message: "不能为空",
+                            type: "error",
+                        });
+                    } else {
+                        this.$message({
+                            message: "修改成功",
+                            type: "success",
+                        });
+                        this.dialogVisibleUpdate = false;
+                        this.historyTalk();
+                        this.talkName1 = '';
+                    }
+                })
+                .catch((err) => {
+                    console.error(err);
+                })
+        },
+        delete_talk(id) {
+            let params = [{
+                id: id
+            }]
+            this.$confirm("确定删除此会话吗?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    this.ajax
+                        .post(this.$store.state.api + "deleteChat", params)
+                        .then((res) => {
+                            this.$message({
+                                message: "删除成功",
+                                type: "success",
+                            });
+                            this.historyTalk();
+                        })
+                        .catch((err) => {
+                            this.$message.error("删除失败");
+                            console.error(err);
+                        });
+                })
+                .catch(() => { });
+        },
+        handleCurrentChange(newPage) {
+            this.page = newPage;
+            this.historyTalk();
+        },
+        handleClose(done) {
+            done();
+        },
         // 获取基础页面数据
         getPageBase() {
             let params = {
@@ -157,11 +339,11 @@ export default {
             this.ajax
                 .get(this.$store.state.api + "selectTestExamineBase", params)
                 .then(res => {
-                    console.log('selectTestExamineBase',res.data[0]);
-                    this.examineData=res.data[0]
+                    console.log('selectTestExamineBase', res.data[0]);
+                    this.examineData = res.data[0]
                 })
                 .catch(error => {
-                console.log(error);
+                    console.log(error);
                 });
         },
         deleteMenuItem(index) {
@@ -169,13 +351,36 @@ export default {
             this.menuIndex = 0
             this.$refs.aiChat.delFileList(index)
             this.$forceUpdate()
-            console.log('menuList',this.menuList);
-            
+            console.log('menuList', this.menuList);
+
+        },
+
+        historyTalk() {
+            let params = {
+                uid: this.userid,
+                n: this.talkName,
+                page: this.page,
+                num: this.pageSize
+            };
+            this.ajax
+                .get(this.$store.state.api + "getChatHistory", params)
+                .then((res) => {
+                    this.tableData = res.data[0]
+                    console.log("tableData", this.tableData);
+                    this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
+                    console.log("111111", this.total);
+
+
+                })
+                .catch((err) => {
+                    console.error(err);
+                });
         },
         pushFileData(data) {
             this.menuList.push(data)
             console.log("menuList", this.menuList);
 
+
         },
         clearFileData() {
             this.menuList = []
@@ -195,10 +400,13 @@ export default {
                     promiseList.push(this.getCourseData(el))
                 })
                 Promise.all(promiseList).then(res => {
-                    console.log("courseInfoList", this.courseInfoList)
                     this.courseInfoList = res
+                    console.log("courseInfoList", this.courseInfoList)
                     this.loading = false
-                })
+                }).catch(err => {
+                    console.error("Error occurred:", err);
+                    this.loading = false;  // 如果有错误,也要停止loading
+                });
             }
         },
         getCourseData(courseId) {
@@ -294,6 +502,7 @@ export default {
                     });
             })
         },
+
     },
     computed: {
         showFileUrl() {
@@ -311,15 +520,27 @@ export default {
                 _cidList.sort((a, b) => parseInt(b) - parseInt(a));
                 _result = _cidList.join(',');
             }
+            console.log("我是cid", _result);
 
             return _result
         }
     },
     mounted() {
         this.getData();
-        this.getPageBase()
+        this.getPageBase();
+        this.historyTalk();
+
+    },
+    watch: {
+        activeMenu(newValue) {
+            if (newValue === 2) {
+                console.log("HelloWorld");
+                this.historyTalk();
+            }
+        },
     }
 
+
 };
 </script>
 
@@ -531,6 +752,31 @@ export default {
     -moz-osx-font-smoothing: grayscale;
 }
 
+.dialog_diy>>>.el-dialog__header {
+    background: #3d67bc !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__title {
+    color: #fff;
+}
+
+.student_table>>>.el-table--border td {
+    border-right: 0px !important;
+}
+
+.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;
+}
+
 .cc_bottom {
     width: 100%;
     height: calc(100% - 66px - 10px);
@@ -551,12 +797,125 @@ export default {
     height: 100%;
 }
 
+.cc_b_left {
+    border-right: 1px solid #E4E7ED;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    height: 100%;
+    width: 13%;
+}
+
+.menu_container {
+    flex: 1;
+    /* 占据除折叠按钮外的所有空间 */
+}
+
+.cc_b_l_menu {
+    padding: 10px;
+    margin: 17px;
+    border-radius: 7px;
+    color: #828282;
+    cursor: pointer;
+    display: flex;
+}
+
+.cc_b_l_menu.active {
+    background-color: #3681fc;
+    color: #fff;
+
+}
+
+.session_icon {
+    background: url('../../../assets/icon/test/test_session.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+}
+
+.session_icon.active {
+    background: url('../../../assets/icon/test/test_session_active.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+}
+
+.history_icon {
+    background: url('../../../assets/icon/test/test_history.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+}
+
+.history_icon.active {
+    background: url('../../../assets/icon/test/test_history_active.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+}
+
+/* .mysql_icon{
+    background:url('../../../../assets/icon/test/test_mysql.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+}
+.mysql_icon.active{
+    background:url('../../../../assets/icon/test/test_mysql_active.png') no-repeat;
+    width: 18px;
+    height: 18px;
+    display: inline-block;
+    background-size: contain;
+} */
+.fold_btn {
+    padding: 27px 20px;
+    cursor: pointer;
+    border-top: 1px solid #E4E7ED;
+    margin-top: auto;
+    /* 确保折叠按钮在底部 */
+}
+
+.more_icon {
+    background: url('../../../assets/icon/test/test_more.png') no-repeat;
+    width: 14px;
+    height: 14px;
+    display: inline-block;
+    background-size: contain;
+    cursor: pointer;
+}
+
 .cc_b_right {
     width: 50%;
     height: 100%;
     box-sizing: border-box;
 }
 
+.preview_file,
+.bianji_file {
+    margin: 10px;
+    width: 65px;
+    cursor: pointer;
+}
+
+.preview_file.active {
+    border-bottom: 2px solid blue;
+}
+
+.bianji_file.active {
+    border-bottom: 2px solid blue;
+}
+
+.bianji_area {
+    background-color: #e5e4e4;
+    height: 600px;
+    margin: 10px;
+}
+
 .cc_b_r_menu {
     width: 100%;
     height: 50px;
@@ -569,15 +928,15 @@ export default {
 
 .cc_b_r_menu>div {
     height: 100%;
-	max-width: 100px;
-	padding: 0 15px;
-	display: flex;
-	text-align: center;
-	/* justify-content: center; */
-	align-items: center;
-	cursor: pointer;
-	transition: all 0.3s;
-	/* text-overflow: ellipsis;
+    max-width: 100px;
+    padding: 0 15px;
+    display: flex;
+    text-align: center;
+    /* justify-content: center; */
+    align-items: center;
+    cursor: pointer;
+    transition: all 0.3s;
+    /* text-overflow: ellipsis;
 	overflow: hidden;
 	white-space: nowrap; */
 }
@@ -602,18 +961,21 @@ export default {
     width: 100%;
     height: calc(100% - 50px);
 }
-.cc_b_r_btn{
+
+.cc_b_r_btn {
     display: flex;
     align-items: center;
 }
-.close_icon{
+
+.close_icon {
     width: 0 !important;
     height: 22px;
     display: inline-block;
     background-size: contain;
     cursor: pointer;
 }
-.close_icon.active{
+
+.close_icon.active {
     background: url('../../../assets/icon/test/test_close_active.png') no-repeat;
     width: 40px !important;
     height: 22px;
@@ -621,11 +983,13 @@ export default {
     background-size: contain;
     cursor: pointer;
 }
-.b_r_menu{
+
+.b_r_menu {
     display: flex;
     justify-content: space-around;
 }
-.b_r_menu_content{
+
+.b_r_menu_content {
     display: flex;
     flex-direction: column;
     background: linear-gradient(to bottom, #dfeaff, #ffffff, #f6f9ff);
@@ -634,15 +998,96 @@ export default {
     width: 50%;
     margin-right: 14px
 }
-.m_c_title{
+
+.m_c_title {
     margin: 10px 7px 7px 21px;
     font-size: 16px;
     font-weight: bold;
 }
-.m_c_item{
+
+.m_c_item {
     border-radius: 5px;
     padding: 8px 8px 8px 13px;
     margin: 7px;
     border: 1px solid #E4E7ED;
 }
+
+.history_talk {
+    background: linear-gradient(to bottom, #dfeaff, #ffffff, #f6f9ff);
+    margin: 10px;
+    padding: 10px;
+}
+
+.h_t_head {
+    display: flex;
+    justify-content: space-between;
+}
+
+.t_h_left {
+    margin-left: 13px;
+    font-size: 13px;
+}
+
+.h_t_table {
+    margin: 10px;
+    box-shadow: 0px 0px 12px rgb(190 193 199);
+}
+
+.bianji {
+    display: flex;
+    align-items: center;
+    margin-right: 10px;
+}
+
+.bianji:hover {
+    color: rgb(14, 173, 236);
+    cursor: pointer;
+}
+
+.rename_btn {
+    display: flex;
+    justify-content: flex-end;
+}
+
+.h_t_bottom {
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
+    margin-right: 9px;
+}
+
+.el_select {
+    width: 89px;
+}
+
+
+.table_title {
+    background-color: gray;
+}
+
+.student_input>>>.el-input__inner {
+    height: 30px;
+    width: 179px;
+    font-size: 13px;
+    padding: 0 10px;
+}
+
+.serach_icon {
+    position: absolute;
+    right: 12px;
+    top: 50%;
+    transform: translateY(-50%);
+    width: 13px;
+    height: 13px;
+    background: url("../../../assets/icon/test/test_search.png") no-repeat;
+    background-size: 100% 100%;
+    cursor: pointer;
+}
+
+.el-input {
+    position: relative;
+    font-size: 14px;
+    display: inline-block;
+    width: 100%;
+}
 </style>

部分文件因为文件数量过多而无法显示