ソースを参照

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

zengyicheng 1 年間 前
コミット
15e695db27
49 ファイル変更1468 行追加245 行削除
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.4dff62363374b542f581dd8f59f66cc7.css
  3. 0 0
      dist/static/css/app.4dff62363374b542f581dd8f59f66cc7.css.map
  4. 0 0
      dist/static/css/app.86137d31cce6bbfcbe50156560913c05.css
  5. 0 0
      dist/static/css/app.86137d31cce6bbfcbe50156560913c05.css.map
  6. 0 0
      dist/static/js/app.2a339f70df75a328f1c8.js
  7. 0 0
      dist/static/js/app.2a339f70df75a328f1c8.js.map
  8. 0 0
      dist/static/js/manifest.3512a67a6213c2df4180.js.map
  9. 1 1
      src/App.vue
  10. 5 0
      src/assets/css/button.css
  11. BIN
      src/assets/icon/englishVoice/icon_check_addUser.png
  12. BIN
      src/assets/icon/englishVoice/icon_check_none.png
  13. BIN
      src/assets/icon/englishVoice/icon_check_qa.png
  14. BIN
      src/assets/icon/englishVoice/icon_check_sentence.png
  15. BIN
      src/assets/icon/englishVoice/icon_check_theme.png
  16. BIN
      src/assets/icon/englishVoice/icon_check_user.png
  17. BIN
      src/assets/icon/englishVoice/icon_check_word.png
  18. BIN
      src/assets/icon/new/test_hf.png
  19. BIN
      src/assets/icon/new/test_jy.png
  20. BIN
      src/assets/icon/new/test_pl.png
  21. BIN
      src/assets/icon/thirdToolList/englishVoice.png
  22. 202 0
      src/components/pages/EnglishVoice/component/check.vue
  23. 82 0
      src/components/pages/EnglishVoice/component/order.vue
  24. 241 0
      src/components/pages/EnglishVoice/index.vue
  25. 23 0
      src/components/pages/EnglishVoice/minxins/minxin.js
  26. 68 15
      src/components/pages/addCourse.vue
  27. 15 1
      src/components/pages/dataBoardNew/course/chartList/subjuect.vue
  28. 12 1
      src/components/pages/dataBoardNew/project/chartList/cateRank.vue
  29. 26 10
      src/components/pages/dataBoardNew/project/chartList/courseNum.vue
  30. 1 1
      src/components/pages/dataBoardNew/project/chartList/subjuect.vue
  31. 59 10
      src/components/pages/dataBoardNew/project/index.vue
  32. 15 1
      src/components/pages/dataBoardNew/school/cateRank/index.vue
  33. 3 2
      src/components/pages/dataBoardNew/school/index.vue
  34. 1 0
      src/components/pages/dataBoardNew/school/teacherInfo/index.vue
  35. 3 3
      src/components/pages/dataBoardNew/student/cateRank/index.vue
  36. 1 1
      src/components/pages/dataBoardNew/student/index.vue
  37. 15 1
      src/components/pages/dataBoardTest/course/chartList/subjuect.vue
  38. 128 98
      src/components/pages/dataBoardTest/course/index.vue
  39. 202 0
      src/components/pages/evaBox/index.vue
  40. 1 1
      src/components/pages/synergyCourse/addCourse.vue
  41. 85 53
      src/components/pages/synergyCourse/group/group.vue
  42. 1 1
      src/components/pages/test/add/setInfo/index.vue
  43. 17 6
      src/components/pages/test/index.vue
  44. 21 2
      src/components/pages/testPerson/panel/index.vue
  45. 2 2
      src/components/pages/testPerson/test/index.vue
  46. 7 7
      src/components/pages/testPerson/test/test.vue
  47. 224 22
      src/components/pages/testPerson/test/trActivity.vue
  48. 4 5
      src/components/pages/testStudent/index.vue
  49. 2 0
      src/router/index.js

+ 1 - 1
dist/index.html

@@ -25,7 +25,7 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.4dff62363374b542f581dd8f59f66cc7.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.358f93b64303eebf4bad.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.86137d31cce6bbfcbe50156560913c05.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.2a339f70df75a328f1c8.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/css/app.4dff62363374b542f581dd8f59f66cc7.css


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/css/app.4dff62363374b542f581dd8f59f66cc7.css.map


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/css/app.86137d31cce6bbfcbe50156560913c05.css


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/css/app.86137d31cce6bbfcbe50156560913c05.css.map


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/js/app.2a339f70df75a328f1c8.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/js/app.2a339f70df75a328f1c8.js.map


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/js/manifest.3512a67a6213c2df4180.js.map


+ 1 - 1
src/App.vue

@@ -46,7 +46,7 @@
       :style="{ overflow: $route.path == '/liveRoom' ? 'hidden' : '' }"
     >
       <!-- main 内容 -->
-      <keep-alive v-if="$route.meta.keepAlive">
+      <keep-alive>
         <!-- 这里是会被缓存的视图组件 -->
         <router-view
           v-if="$route.meta.keepAlive"

+ 5 - 0
src/assets/css/button.css

@@ -120,6 +120,7 @@
 .pub_btn_template_img::before,
 .pub_btn_add_img2::before,
 .pub_btn_eval_img::before,
+.pub_btn_eval_source_img::before,
 .pub_btn_tool_img::before,
 .pub_btn_add_task_img::before,
 .pub_btn_finish_img::before,
@@ -192,6 +193,10 @@
   background-image: url(../icon/new/icon_setting.png);
 }
 
+.pub_btn_eval_source_img::before{
+  background-image: url(../icon/new/icon_setting.png);
+}
+
 .r_pub_button_retrun {
   color: #0061FF;
   font-size: 14px;

BIN
src/assets/icon/englishVoice/icon_check_addUser.png


BIN
src/assets/icon/englishVoice/icon_check_none.png


BIN
src/assets/icon/englishVoice/icon_check_qa.png


BIN
src/assets/icon/englishVoice/icon_check_sentence.png


BIN
src/assets/icon/englishVoice/icon_check_theme.png


BIN
src/assets/icon/englishVoice/icon_check_user.png


BIN
src/assets/icon/englishVoice/icon_check_word.png


BIN
src/assets/icon/new/test_hf.png


BIN
src/assets/icon/new/test_jy.png


BIN
src/assets/icon/new/test_pl.png


BIN
src/assets/icon/thirdToolList/englishVoice.png


+ 202 - 0
src/components/pages/EnglishVoice/component/check.vue

@@ -0,0 +1,202 @@
+<template>
+    <div class="check_box">
+        <div class="check_div" v-for="(item, index) in checkData" :key="index">
+            <div class="check_div_title">
+                <div class="check_div_open" :class="{ active: item.open}" @click="openC(index)"></div>
+                <div class="check_div_name">{{ item.name }}</div>
+            </div>
+            <div class="check_div_children" v-show="item.open">
+                <div class="check_div_child" v-for="(item2) in item.children" :key="item2.type" @click="addCheck(item2)">
+                    <div class="check_icon">
+                        <img :src="item2.icon" alt="">
+                    </div>
+                    <div class="check_div_child_name">{{ item2.name }}</div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+// import u_arrow from '../../../../assets/icon/new/u_arrow.png'
+import icon_check_addUser from '../../../../assets/icon/englishVoice/icon_check_addUser.png'
+import icon_check_qa from '../../../../assets/icon/englishVoice/icon_check_qa.png'
+import icon_check_sentence from '../../../../assets/icon/englishVoice/icon_check_sentence.png'
+import icon_check_theme from '../../../../assets/icon/englishVoice/icon_check_theme.png'
+import icon_check_user from '../../../../assets/icon/englishVoice/icon_check_user.png'
+import icon_check_word from '../../../../assets/icon/englishVoice/icon_check_word.png'
+import minxin from '../minxins/minxin'
+export default {
+    mixins: [minxin],
+    props: {
+        checkJson: {
+            type: Array,
+        },
+    },
+    data() {
+        return {
+            checkData:[
+                {
+                    name:'朗读',
+                    open: true,
+                    children:[
+                        {
+                            icon:icon_check_word,
+                            name:'单词/词组',
+                            type:'word'
+                        },
+                        {
+                            icon:icon_check_sentence,
+                            name:'句子/短文',
+                            type:'sentence'
+                        }
+                    ]
+                },
+                {
+                    name:'回答',
+                    open: true,
+                    children:[
+                        {
+                            icon:icon_check_qa,
+                            name:'题目',
+                            type:'QA'
+                        }
+                    ]
+                },
+                // {
+                //     name:'对话',
+                //     open: false,
+                //     children:[
+                //         {
+                //             icon:icon_check_addUser,
+                //             name:'创建角色',
+                //             type:'createRole'
+                //         }
+                //     ]
+                // },
+                // {
+                //     name:'主题陈述',
+                //     open: false,
+                //     children:[
+                //         {
+                //             icon:icon_check_theme,
+                //             name:'新建主题',
+                //             type:'theme'
+                //         }
+                //     ]
+                // }
+            ],
+            checkArray:[]
+        }
+    },
+    methods: {
+        openC(index) {
+            this.checkData[index].open = !this.checkData[index].open
+            this.$forceUpdate()
+        },
+        addCheck(item){
+            if(item.type == 'word'){
+                this.checkArray.push({
+                    type:'word',
+                    title:'',
+                    img:'',
+                    content:'单词/词组'  
+                })
+            }else if(item.type == 'sentence'){
+                this.checkArray.push({
+                    type:'sentence',
+                    title:'',
+                    img:'',
+                    content:'句子/短文'  
+                })
+            }else if(item.type == 'QA'){
+                this.checkArray.push({
+                    type:'QA',
+                    title:'',
+                    img:'',
+                    content:'题目'  
+                })
+            }
+            this.$forceUpdate()
+            this.$emit('setJson', this.checkArray)
+        }
+    },
+    watch: {
+        checkJson: {
+        handler: function (newVal, oldVal) {
+            this.checkArray = this.depthCopy(newVal);
+        },
+        deep: true,
+        },
+    },
+    mounted(){
+        this.checkArray = this.depthCopy(this.checkJson);
+    }
+}
+</script>
+
+<style scoped>
+    .check_box{
+        width: 100%;
+    }
+
+    .check_div{
+        width: 100%;
+    }
+    .check_div + .check_div{
+        margin-top: 16px;
+    }
+    .check_div_title{
+        width: 100%;
+        display: flex;
+        align-items: center;
+        margin-bottom: 8px;
+    }
+    .check_div_open{
+        width: 11px;
+        height: 11px;
+        background-image: url('../../../../assets/icon/new/u_arrow.png');
+        background-size: 100% 100%;
+        margin-right: 7px;
+        cursor: pointer;
+        transition: all 0.3s;
+        transform: rotate(-90deg);
+    }
+    .check_div_open.active{
+        transform: rotate(0deg);
+    }
+    .check_div_name{
+        font-size: 14px;
+        color: #000;
+        font-weight: bold;
+    }
+    .check_div_children{}
+    .check_div_child{
+        cursor: pointer;
+        display: flex;
+        width: 100%;
+        padding: 8px 8px;
+        box-sizing: border-box;
+        background: rgb(240, 242, 245);
+        border-radius: 4px;
+        align-items: center;
+    }
+    .check_div_child+ .check_div_child{
+        margin-top: 8px;
+    }
+    .check_icon{
+        display: flex;
+        width: 16px;
+        height: 16px;
+        align-items: center;
+        justify-content: center;
+        margin-right: 5px;
+    }
+
+    .check_icon > img{
+        width: 100%;
+        height: 100%;
+        object-fit: contain;
+    }
+    .check_div_child_name{}
+</style>

+ 82 - 0
src/components/pages/EnglishVoice/component/order.vue

@@ -0,0 +1,82 @@
+<template>
+  <div class="o_box">
+    <div class="o_none_box" v-if="!checkArray.length">
+      <img src="../../../../assets/icon/englishVoice/icon_check_none.png" alt="">
+      <span>暂无内容,请添加题目</span>
+    </div>
+    <div class="o_check_box" v-else>
+      <div class="o_child" v-for="(item, index) in checkArray" :key="index">
+        <div class="o_child_title">
+          <span class="drag"></span>
+          <span class="title">{{item.content}}</span>
+          <div class="edit_btn">
+            <span class="edit"></span>
+            <span class="delete"></span>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import minxin from '../minxins/minxin'
+export default {
+  mixins: [minxin],
+  props: {
+    checkJson: {
+      type: Array,
+    },
+    editType:{
+      type: Number,
+      default: 1
+    }
+  },
+  data() {
+    return {
+      checkArray: []
+    }
+  },
+  watch: {
+    checkJson: {
+      handler: function (newVal, oldVal) {
+        this.checkArray = this.depthCopy(newVal);
+      },
+      deep: true,
+    },
+  },
+  mounted(){
+    this.checkArray = this.depthCopy(this.checkJson);
+  }
+}
+</script>
+
+<style scoped>
+.o_box {
+  width: 100%;
+  height: auto;
+}
+
+.o_none_box{
+  width: 100%;
+  height: 500px;
+  background: #fff;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+}
+
+.o_none_box > img{
+  width: 120px;
+  height: 120px;
+  object-fit: contain;
+}
+
+.o_none_box > span{
+  font-size: 12px;
+  color: #00000066;
+  margin-top: 15px;
+}
+
+</style>

+ 241 - 0
src/components/pages/EnglishVoice/index.vue

@@ -0,0 +1,241 @@
+<template>
+      <el-dialog title="英语口语" :visible.sync="EnglishVoiceDialog" :append-to-body="true" width="100%"
+        :before-close="handleClose" class="dialog_diy">
+        <div class="ev_box">
+            <div class="ev_info_box">
+                <div class="title">设置英语口语信息</div>
+                <div class="ev_info_input_box">
+                    <div class="box"> 
+                        <span class="title bi">标题</span>
+                        <el-input v-model="title" placeholder="请输入标题" class="input"/>
+                    </div>
+                    <div class="box"> 
+                        <span class="title">说明</span>
+                        <el-input v-model="detail" placeholder="请输入对该问题的描述" class="input"/>
+                    </div>
+                </div>
+            </div>
+            <div class="ev_info_box">
+                <div class="title">设置英语口语题目</div>
+                <div class="ev_create_box">
+                    <div class="left">
+                        <div class="title">题目类型选择</div>
+                        <check :checkJson="checkJson" @setJson="setJson"></check>
+                    </div>
+                    <div class="center">
+                        <div class="title">评测题目</div>
+                        <order :checkJson="checkJson" @setJson="setJson" :editType="2"></order>
+                    </div>
+                    <div class="right">
+                        <div class="title">评测大纲</div>
+                        <order :checkJson="checkJson" @setJson="setJson" :editType="1"></order>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="confirm()">确 认</el-button>
+            <el-button @click="close()">关 闭</el-button>
+        </span>
+    </el-dialog>
+</template>
+
+<script>
+import order from './component/order'
+import check from './component/check'
+export default {
+    components: {
+        check,
+        order
+    },
+    props: {
+        EnglishVoiceDialog: {
+            type: Boolean,
+            default: false
+        },
+        oid: {
+            type: String
+        }
+    },
+    data() {
+        return {
+            checkJson: [],
+            title:'',
+            detail:'',
+        }
+    },
+    methods: {
+        handleClose(done) {
+            this.close();
+            done();
+        },
+        close() {
+            this.$emit("update:EnglishVoiceDialog", false);
+        },
+        confirm() {
+            this.close();
+        },
+        setJson(val){
+            debugger
+            this.checkJson = val;
+            this.$forceUpdate()
+        }
+    },
+}
+</script>
+
+<style scoped>
+.dialog_diy>>>.el-dialog {
+    height: 100%;
+    margin: 0vh auto !important;
+}
+
+.dialog_diy>>>.el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__body {
+    height: calc(100% - 124px);
+    box-sizing: border-box;
+    padding: 0px;
+}
+
+.dialog_diy>>>.el-dialog__title {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__body,
+.dialog_diy>>>.el-dialog__footer {
+    background: rgb(rgb(240, 242, 245));
+    overflow: hidden;
+}
+
+.ev_box{
+    width: calc(100% - 20px);
+    height: calc(100% - 20px);
+    overflow: auto;
+    background: #fff;
+    margin: 10px auto;
+    border-radius: 5px;
+}
+
+.ev_info_box{
+    
+}
+.ev_info_box + .ev_info_box{
+    margin-top: 14px;
+}
+.ev_info_box > .title {
+    padding: 15px 0 15px 0;
+    font-size: 16px;
+    font-weight: bold;
+    margin: 0 0 0 20px;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+    line-height: 20px;
+    color: #000;
+}
+
+.ev_info_box > .title::before {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 20px;
+    background: #0061FF;
+    border-radius: 3px;
+    margin: 0 5px 0 0;
+}
+
+.ev_info_input_box{
+    width: 100%;
+    box-sizing: border-box;
+    padding: 0 20px;
+}
+.ev_info_input_box > .box{
+    display: flex;
+    align-items: center;
+}
+.ev_info_input_box > .box + .box{
+    margin-top: 12px;
+}
+.ev_info_input_box > .box > .title{
+    min-width: fit-content;
+    font-size: 14px;
+    margin:0 10px;
+    position: relative;
+}
+.ev_info_input_box > .box > .title.bi::before{
+    content: '*';
+    color: rgb(238, 62, 62);
+    display: block;
+    font-size: 18px;
+    position: absolute;
+    left: -10px;
+}
+.ev_info_input_box > .box > .input{
+    width: 100%;
+    max-width: 750px;
+}
+
+.ev_create_box{
+    width: 100%;
+    width: calc(100% - 40px);
+    border-radius: 5px;
+    border: 1px solid #E7E7E7;
+    margin: 0 auto 10px;
+    display: flex;
+    justify-content: space-between;
+    min-height: 500px;
+}
+.ev_create_box > .left{
+    width: 250px;
+    border-right: 1px solid #e7e7e7;
+    box-sizing: border-box;
+    padding: 0 16px;
+}
+.ev_create_box > .center{
+    width: calc(100% - 500px);
+}
+.ev_create_box > .right{
+    width: 250px;
+    border-left: 1px solid #e7e7e7;
+    box-sizing: border-box;
+    padding: 0 16px;
+}
+
+.ev_create_box > .left > .title{
+    font-size: 16px;
+    font-weight: 700;
+    color: #000;
+    text-align: center;
+    margin: 20px 0;
+}
+.ev_create_box > .center > .title{
+    font-size: 24px;
+    font-weight: 700;
+    color: #000;
+    text-align: center;
+    margin: 16px 0;
+}
+.ev_create_box > .right > .title{
+    font-size: 16px;
+    font-weight: 700;
+    color: #000;
+    text-align: center;
+    margin: 20px 0;
+}
+</style>

+ 23 - 0
src/components/pages/EnglishVoice/minxins/minxin.js

@@ -0,0 +1,23 @@
+const minxin = {
+  data() {
+    return {
+      options2: {
+        word:"单词/词组",
+        sentence:"句子/短文",
+        QA:"题目",
+        createRole:"创建角色",
+        theme:"新建主题",
+      },
+    };
+  },
+  computed: {},
+  mounted() {},
+  activated() {},
+  methods: {
+    depthCopy(s) {
+      return s ? JSON.parse(JSON.stringify(s)) : '';
+    }
+  }
+};
+
+export default minxin;

+ 68 - 15
src/components/pages/addCourse.vue

@@ -650,7 +650,7 @@
                     <!-- v-if="steps == 3 && (userid == courseUserid || role == '1')" -->
                     <button class="c_pub_button_add" @click="openStageBox" v-show="false"
                       style="margin: 0 0 0 auto;">阶段顺序</button>
-                    <button class="c_pub_button_add pub_btn_paste_img" @click="pasteTask" v-if="steps == 3 && isPasteTask"
+                    <button class="c_pub_button_add pub_btn_paste_img" @click="pasteTask()" v-if="steps == 3 && isPasteTask"
                       style="margin: 0 0 0 auto;">智能粘贴</button>
                     <button class="c_pub_button_confirm pub_btn_template_img" @click="openTemplate"
                       :style="{margin: isPasteTask ? '0 0 0 20px' : '0 0 0 auto'}" style="padding:0 12px">选择课程模板</button>
@@ -2085,6 +2085,16 @@
                                       </div>
                                     </div> -->
                                   </div>
+                                  <!-- <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(70) != -1 }"
+                                    @click="addTools(70, itemTaskIndex, toolIndex)">
+                                    <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 70, toolIndex)">
+                                      <img src="../../assets/icon/thirdToolList/englishVoice.png" alt />
+                                      <div style="margin: 5px 0">英语口语</div>
+                                    </div>
+                                    <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
+                                    <div class="isCTool" v-if="itemTool.tool.indexOf(70) != -1"><img
+                                        src="../../assets/icon/new/isToolC.png" alt="" /></div>
+                                  </div> -->
                                   <!-- <div class="tool">
                                   <div class="whiteBIcon" @click="addTools(28, itemTaskIndex, toolIndex)">
                                     <img src="../../assets/icon/secondToolList/translation.png" alt />
@@ -2517,9 +2527,14 @@
                                 </div>
                                 <div>添加</div>
                               </div> -->
-                              <button class="c_pub_button_add pub_btn_eval_img" @click="addEList(unitIndex, itemTaskIndex)" style="margin: 20px 35px 0 0">
-                                  添加
-                              </button>
+                              <div class="eva_btn_box">
+                                <button class="c_pub_button_add pub_btn_eval_img" @click="addEList(unitIndex, itemTaskIndex)">
+                                    添加
+                                </button>
+                                <button class="c_pub_button_add pub_btn_eval_source_img" @click="openEList(unitIndex, itemTaskIndex)">
+                                    资源
+                                </button>
+                              </div>
                             </div>
                             <div v-if="evalua" style="
                           border: 1px solid #e5e5e5;
@@ -3892,6 +3907,8 @@
         <el-button type="primary" @click="updateChange">确定</el-button>
       </span>
     </el-dialog>
+    <evaBox :oid='oid' :org="org" :dialogVisibleEva.sync="evaBoxDialog" @updateEvaJson="updateEvaJson"></evaBox>
+    <EnglishVoice :oid='oid' :org="org" :EnglishVoiceDialog.sync="EnglishVoiceDialog"></EnglishVoice>
 </div>
 </template>
 
@@ -3910,6 +3927,8 @@ import weilaiData from "./components/weilai.js";
 import sourceDialog from "./teacherSource/dialog.vue";
 import interVideo from "./interVideo/index.vue";
 import englishRight from "./components/englishRight.vue";
+import evaBox from './evaBox/index.vue'
+import EnglishVoice from './EnglishVoice/index.vue'
 
 export default {
   components: {
@@ -3922,6 +3941,8 @@ export default {
     sourceDialog,
     interVideo,
     englishRight,
+    evaBox,
+    EnglishVoice
   },
   data() {
     return {
@@ -4189,6 +4210,10 @@ export default {
                   ],
         checkUnitIndex: 0,
         isdrag: '',
+        evaIndex: '',
+        evatIndex: '',
+        evaBoxDialog: false,
+        EnglishVoiceDialog: false,
     };
   },
   directives: {
@@ -7007,19 +7032,22 @@ export default {
           ];
           this.updateCourseState(1)
       }else if(res.id == 2){
+        let stageData = []
         let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
-        if (!iframe) {
+        let iframe2 = top.document.querySelectorAll("#AIChat aigpt")[0];
+        if (!iframe && !iframe2) {
           this.$message.error("请使用AI共创生成");
           return;
         }
-        let copyData = iframe.contentWindow.copyData;
-        if (!copyData || !copyData.stageData || !copyData.stageData.length) {
+        let copyData = iframe ? iframe.contentWindow.copyData : false;
+        let copyData2 = iframe2 ? iframe2.contentWindow.copyData : false;
+        if ((!copyData || !copyData.stageData || !copyData.stageData.length) && (!copyData2 || !copyData2.stageData || !copyData2.stageData.length)) {
           this.$message.error("请使用AI共创生成");
           return;
         }
-        let stageData = copyData.stageData;
+        stageData = copyData ? copyData.stageData : copyData2 ? copyData2.stageData : [''];
         for (var i = 0; i < stageData.length; i++) {
-          res.push({
+          _res.push({
             dyName: stageData[i], //单元标题
             chapterInfo: [
               {
@@ -7671,6 +7699,9 @@ export default {
           : {  };
         this.$forceUpdate();
         this.englishDialogVisible = true;
+      }else if(i == 70){
+        this.$forceUpdate();
+        this.EnglishVoiceDialog = true;
       }
     },
     chapAddTools(i) {
@@ -7794,6 +7825,15 @@ export default {
           return;
         }
       }
+      if(i == 70){
+        // if (
+        //   !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
+        //     .toolChoose[toolIndex].englishList
+        // ) {
+          this.openTools(itemTaskIndex, 70, toolIndex);
+          return;
+        // }
+      }
       // if (i == 48) {
       //   if (
       //     !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
@@ -8351,8 +8391,8 @@ export default {
           this.$message.error("请使用AI共创生成");
           return;
         }
-        let copyData = iframe ? iframe.contentWindow.copyData : '';
-        let copyData2 = iframe2 ? iframe2.contentWindow.copyData : '';
+        let copyData = iframe ? iframe.contentWindow.copyData : false;
+        let copyData2 = iframe2 ? iframe2.contentWindow.copyData : false;
         if ((!copyData || !copyData.tasksData || !copyData.tasksData.length) && (!copyData2 || !copyData2.tasksData || !copyData2.tasksData.length)) {
           this.$message.error("请使用AI共创生成");
           return;
@@ -8402,8 +8442,8 @@ export default {
           this.$message.error("请使用AI共创生成");
           return;
         }
-        let copyData = iframe ? iframe.contentWindow.copyData : '';
-        let copyData2 = iframe2 ? iframe2.contentWindow.copyData : '';
+        let copyData = iframe ? iframe.contentWindow.copyData : false;
+        let copyData2 = iframe2 ? iframe2.contentWindow.copyData : false;
         if ((!copyData || !copyData.stageData || !copyData.stageData.length) && (!copyData2 || !copyData2.stageData || !copyData2.stageData.length)) {
           this.$message.error("请使用AI共创生成");
           return;
@@ -9316,6 +9356,14 @@ export default {
         ]);
       this.$forceUpdate();
     },
+    openEList(index, tIndex){
+      this.evaIndex = index
+      this.evatIndex = tIndex
+      this.evaBoxDialog = true
+    },
+    updateEvaJson(array){
+      this.unitJson[this.evaIndex].chapterInfo[0].taskJson[this.evatIndex].eList = array
+    },
     forceUpdate() {
       this.$forceUpdate();
     },
@@ -9959,8 +10007,8 @@ export default {
       if (!iframe && !iframe2) {
         return;
       }
-      let copyData =  iframe ? iframe.contentWindow.copyData : '';
-      let copyData2 =  iframe2 ? iframe2.contentWindow.copyData : '';
+      let copyData =  iframe ? iframe.contentWindow.copyData : false;
+      let copyData2 =  iframe2 ? iframe2.contentWindow.copyData : false;
       if (copyData && copyData.stageData && copyData.stageData.length) {
         this.isPasteStage = true
       }
@@ -14391,4 +14439,9 @@ ol {
   left: 0;
   margin: 15px 0 0;
 }
+
+.eva_btn_box{
+  margin: 20px 0px 0 0;
+  display: flex;
+}
 </style>

+ 15 - 1
src/components/pages/dataBoardNew/course/chartList/subjuect.vue

@@ -38,6 +38,20 @@ export default {
         credits: {
             enabled: false//不显示LOGO
         },
+        tooltip: {
+          formatter: function() {
+            // 自定义弹窗内容的回调函数
+            var point = this.point;
+            if(point.from){
+              var tooltipText = '<b>' + point.from + '</b> - <b>' + point.to + '</b>: ' + point.weight;
+              return tooltipText;
+            }else{
+              var tooltipText = '<b>' + point.name + '</b>: ' + point.sum;
+              return tooltipText;
+            }
+
+          }
+        },
         series: [{
           keys: ['from', 'to', 'weight'],
           data: [
@@ -90,7 +104,7 @@ export default {
             // ['Japan', 'Brazil', 1]
           ],
           type: 'dependencywheel',
-          name: 'Dependency wheel series',
+          name: '',
           dataLabels: {
             color: '#333',
             textPath: {

+ 12 - 1
src/components/pages/dataBoardNew/project/chartList/cateRank.vue

@@ -1,6 +1,7 @@
 <template>
     <div class="data_body">
-        <div style="width: 100%; height: 100%" :style="{ minWidth: ooption.hours.length * 75 + 'px' }">
+        <div v-if="!show" class="box">暂无数据</div>
+        <div style="width: 100%; height: 100%" :style="{ minWidth: ooption.hours.length * 75 + 'px' }" v-else>
             <div id="charts_canvas" class="echart" style="width: 100%; height: 100%; "></div>
         </div>
     </div>
@@ -15,6 +16,7 @@ export default {
     },
     data() {
         return {
+            show: true,
             chartObj: null,
             ooption: {
                 hours: [],
@@ -248,6 +250,7 @@ export default {
                 // newValue = newValue.filter(item => {
                 //     return ['一年级','二年级','三年级','四年级','五年级','六年级','七年级'].indexOf(item.name) !== -1
                 // })
+                this.show = newValue.length > 0
                 this.setJson(newValue)
                 this.$forceUpdate();
             },
@@ -258,6 +261,7 @@ export default {
         //     return ['一年级','二年级','三年级','四年级','五年级','六年级','七年级'].indexOf(item.name) !== -1
         // })
         this.setJson(this.courseArray)
+        this.show = this.courseArray.length > 0
         var _this = this;
         window.addEventListener("resize", () => {
             if (_this.chartObj) {
@@ -280,5 +284,12 @@ export default {
     background: #fff;
     overflow: auto;
 }
+
+.box{
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
 </style>
   

+ 26 - 10
src/components/pages/dataBoardNew/project/chartList/courseNum.vue

@@ -72,13 +72,20 @@ export default {
               enabled: true,  //显示数量提示
               color: '#000000',
               formatter : function() {
-                var employee = this.point.series.chart.series[0].yData[this.point.index];
-                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
+                var employee = this.point.series.chart.series[0].yData[this.point.index]; //上个月
+                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index]; //这个月
                 var employeePercentage = 0;
-                if(optimizedEmployee > employee){
-                  employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
+                console.log(employee, optimizedEmployee);
+                if(optimizedEmployee < employee){
+                  employeePercentage = ((optimizedEmployee - employee) / employee) * 100
+                }else if(optimizedEmployee == 0 && employee == 0){
+                  employeePercentage = 0
+                }else if(optimizedEmployee > 0 && employee == 0){
+                  employeePercentage = (optimizedEmployee) * 100
+                }else {
+                  employeePercentage = ((optimizedEmployee - employee) / employee) * 100
                 }
-                if (this.series.name === '本月课程总数') {
+                if (this.series.name === '本月项目总数') {
                   return  employeePercentage.toFixed(1) + '%';
                 } else {
                   return '';
@@ -88,13 +95,13 @@ export default {
           }
         },
         series: [{
-          name: '上月课程总数',
+          name: '上月项目总数',
           color: 'rgba(165,170,217,1)',
           data: [],
           pointPadding: 0.3, // 通过 pointPadding 和 pointPlacement 控制柱子位置
           // pointPlacement: -0.2
         }, {
-          name: '本月课程总数',
+          name: '本月项目总数',
           color: 'rgba(126,86,134,.9)',
           data: [],
           pointPadding: 0.4,
@@ -138,9 +145,18 @@ export default {
       this.option.series[0].data = []
       this.option.series[1].data = []
       for (var i = 0; i < array.length; i++) {
-        this.option.xAxis.categories.push(array[i].name)
-        this.option.series[0].data.push(array[i].lastWeekCouseCount)
-        this.option.series[1].data.push(array[i].toWeekCouseCount)
+        // this.option.xAxis.categories.push(array[i].name)
+        // this.option.series[0].data.push(array[i].lastWeekCouseCount)
+        // this.option.series[1].data.push(array[i].toWeekCouseCount)
+        this.option.xAxis.categories.push('师生主导')
+        this.option.series[0].data.push(array[i].tslastWeekCouseCount)
+        this.option.series[1].data.push(array[i].tstoWeekCouseCount)
+        this.option.xAxis.categories.push('老师主导')
+        this.option.series[0].data.push(array[i].ttlastWeekCouseCount)
+        this.option.series[1].data.push(array[i].tttoWeekCouseCount)
+        this.option.xAxis.categories.push('学生主导')
+        this.option.series[0].data.push(array[i].sslastWeekCouseCount)
+        this.option.series[1].data.push(array[i].sstoWeekCouseCount)
       }
     }
   },

+ 1 - 1
src/components/pages/dataBoardNew/project/chartList/subjuect.vue

@@ -85,7 +85,7 @@ export default {
             ['Japan', 'Brazil', 1]
           ],
           type: 'dependencywheel',
-          name: 'Dependency wheel series',
+          name: '',
           dataLabels: {
             color: '#333',
             textPath: {

+ 59 - 10
src/components/pages/dataBoardNew/project/index.vue

@@ -206,16 +206,16 @@
               flex-wrap: nowrap;
               align-items: center;
             ">
-            <div class="title" :class="{ isClick: toolType == 0 }" @click="toolType = 0"
-              style="cursor: pointer; padding: 0 0 5px 0">
-              项目占比
-            </div>
             <div class="title" :class="{ isClick: toolType == 1 }" @click="toolType = 1"
               style="cursor: pointer; padding: 0 0 5px 0">
               工具使用
             </div>
+            <div class="title" :class="{ isClick: toolType == 0 }" @click="toolType = 0"
+              style="cursor: pointer; padding: 0 0 5px 0">
+              项目占比
+            </div>
           </div>
-          <el-select v-model="cType4" class="selectBox" style="width: 110px" v-if="toolType == 0 && courseNumberArray.length"  @change="typeChange">
+          <el-select v-model="cType4" class="selectBox" style="width: 110px" v-if="toolType == 0 && (gradeCourseList.length || subjectCourseList.length)"  @change="typeChange">
             <el-option label="赛道" value="box"></el-option>
             <el-option label="主题" value="theme"></el-option>
           </el-select>
@@ -317,7 +317,7 @@ export default {
       cType7: "全部课程",
       cType8: "全部年级",
       cType9: "全部学科",
-      toolType: 0,
+      toolType: 1,
       tType: 0,
       skType:  1,
       courseType: 0,
@@ -339,6 +339,7 @@ export default {
       gradeCourseList:[],
       subjectCourseList:[],
       courseNumberArray:[],
+      pCourseList:[],
       courseArray: []
     };
   },
@@ -534,7 +535,13 @@ export default {
           let weekCourse = [{
             name: '项目数量',
             lastWeekCouseCount: 0,
-            toWeekCouseCount: 0
+            toWeekCouseCount: 0,
+            ttlastWeekCouseCount: 0,
+            tttoWeekCouseCount: 0,
+            tslastWeekCouseCount: 0,
+            tstoWeekCouseCount: 0,
+            sslastWeekCouseCount: 0,
+            sstoWeekCouseCount: 0,
           }]
           // for (var i = 0; i < 14; i++) {
           //   let time = JSON.parse(JSON.stringify(lastDayOfWeek))
@@ -548,9 +555,9 @@ export default {
           // }
           weekArray = this.getMonth()
           var _tsArray = {
-            tt: 0,
-            ts: 0,
-            ss: 0,
+            tt: 0, // 老师
+            ts: 0, //师生
+            ss: 0,//学生
           } //记录项目的师生分工
 
           for (var i = 0; i < _workCourse.length; i++) {
@@ -565,15 +572,53 @@ export default {
                   weekCourse[0].toWeekCouseCount++
                 }
               }
+              
               if ((_workCourse[i].type == _workCourse[i].type2 == 1) || (!_workCourse[i].type2 && _workCourse[i].type == 1)) {
                 _tsArray.tt++
+                if (new Date(_workCourse[i].create_at) > _date) {
+                  var a = new Date(_workCourse[i].create_at)
+                  var string = a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate()
+                  if (weekArray.lastWeek.indexOf(string) != -1) {
+                    weekCourse[0].ttlastWeekCouseCount++
+                  } else {
+                    weekCourse[0].tttoWeekCouseCount++
+                  }
+                }
               } else if ((_workCourse[i].type == 2 && _workCourse[i].type2 == 1) || (_workCourse[i].type == 1 && _workCourse[i].type2 == 2)) {
                 _tsArray.ts++
+                if (new Date(_workCourse[i].create_at) > _date) {
+                  var a = new Date(_workCourse[i].create_at)
+                  var string = a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate()
+                  if (weekArray.lastWeek.indexOf(string) != -1) {
+                    weekCourse[0].tslastWeekCouseCount++
+                  } else {
+                    weekCourse[0].tstoWeekCouseCount++
+                  }
+                }
               } else if ((_workCourse[i].type == _workCourse[i].type2 == 2) || (!_workCourse[i].type2 && _workCourse[i].type == 2)) {
                 _tsArray.ss++
+                if (new Date(_workCourse[i].create_at) > _date) {
+                  var a = new Date(_workCourse[i].create_at)
+                  var string = a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate()
+                  if (weekArray.lastWeek.indexOf(string) != -1) {
+                    weekCourse[0].sslastWeekCouseCount++
+                  } else {
+                    weekCourse[0].sstoWeekCouseCount++
+                  }
+                }
               } else {
                 _tsArray.ts++
+                if (new Date(_workCourse[i].create_at) > _date) {
+                  var a = new Date(_workCourse[i].create_at)
+                  var string = a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate()
+                  if (weekArray.lastWeek.indexOf(string) != -1) {
+                    weekCourse[0].tslastWeekCouseCount++
+                  } else {
+                    weekCourse[0].tstoWeekCouseCount++
+                  }
+                }
               }
+
               wList[_workCourse[i].courseId] = {
                 cid: _workCourse[i].courseId,
                 title: _workCourse[i].title,
@@ -695,6 +740,7 @@ export default {
           }
           this.gradeCourseList = _gradeCourseList
           this.subjectCourseList = _subjectCourseList
+          this.pCourseList = [{name:'未分类',typeid:0,course:res.data[2][0].count}]
           this.typeChange()
 
 
@@ -760,6 +806,9 @@ export default {
       } else if (this.cType4 === 'theme') {
         this.courseNumberArray = this.subjectCourseList
       }
+      if(!this.gradeCourseList.length && !this.subjectCourseList.length){
+        this.courseNumberArray = this.pCourseList
+      }
       this.$forceUpdate();
     },
   },

+ 15 - 1
src/components/pages/dataBoardNew/school/cateRank/index.vue

@@ -38,6 +38,20 @@ export default {
         credits: {
             enabled: false//不显示LOGO
         },
+        tooltip: {
+          formatter: function() {
+            // 自定义弹窗内容的回调函数
+            var point = this.point;
+            if(point.from){
+              var tooltipText = '<b>' + point.from + '</b> - <b>' + point.to + '</b>: ' + point.weight;
+              return tooltipText;
+            }else{
+              var tooltipText = '<b>' + point.name + '</b>: ' + point.sum;
+              return tooltipText;
+            }
+
+          }
+        },
         series: [{
           keys: ['from', 'to', 'weight'],
           data: [
@@ -90,7 +104,7 @@ export default {
             // ['Japan', 'Brazil', 1]
           ],
           type: 'dependencywheel',
-          name: 'Dependency wheel series',
+          name: '',
           dataLabels: {
             color: '#333',
             textPath: {

+ 3 - 2
src/components/pages/dataBoardNew/school/index.vue

@@ -524,12 +524,13 @@ export default {
           }
           loginCountMonthArray = loginCountMonthArray.reverse()
           for (var i = 0; i < _loginCount.length; i++) {
-            let _date = new Date(_loginCount[i].create_at)
+            let _date = new Date(_loginCount[i].time)
             var _month = _date.getMonth() + 1
             var _year = _date.getFullYear()
             for (var j = 0; j < loginCountMonthArray.length; j++) {
               if (_month == loginCountMonthArray[j].Month && _year == loginCountMonthArray[j].Year) {
-                loginCountMonthArray[j].user++
+                // loginCountMonthArray[j].user++
+                loginCountMonthArray[j].user+=_loginCount[i].usernum
                 break;
               }
             }

+ 1 - 0
src/components/pages/dataBoardNew/school/teacherInfo/index.vue

@@ -24,6 +24,7 @@ export default {
             option: {
                 tooltip: {
                     position: 'top',
+                    // confine: true,
                     formatter: function (params) {
                         // console.log(params);
                         return params.marker + params.name + ' ' + params.data[2];//params.seriesName + '<br>' + params.

+ 3 - 3
src/components/pages/dataBoardNew/student/cateRank/index.vue

@@ -8,11 +8,11 @@
         </el-table-column>
         <el-table-column prop="name" label="姓名" min-width="80" align="center">
         </el-table-column>
-        <el-table-column prop="courseCount" label="参与课程数量" min-width="80" align="center">
+        <el-table-column prop="courseCount" label="参与课程数" min-width="90" align="center">
         </el-table-column>
-        <el-table-column prop="scourseCount" label="参与项目数量" min-width="80" align="center">
+        <el-table-column prop="scourseCount" label="参与项目数" min-width="90" align="center">
         </el-table-column>
-        <el-table-column prop="worksCount" label="提交作业数量" min-width="80" align="center">
+        <el-table-column prop="worksCount" label="提交作业数" min-width="90" align="center">
         </el-table-column>
         <el-table-column prop="exchangeCount" label="互动交流" min-width="80" align="center">
         </el-table-column>

+ 1 - 1
src/components/pages/dataBoardNew/student/index.vue

@@ -1063,7 +1063,7 @@ export default {
       let _scourseNum = 0;
       let uArray = [];
       for (var i = 0; i < _userArray.length; i++) {
-        if (_userArray[i].classid.indexOf(this.cType9) != -1 || !this.cType9) {
+        if (_userArray[i].classid && _userArray[i].classid.indexOf(this.cType9) != -1 || !this.cType9) {
           uArray.push({
             userid: _userArray[i].userid,
             name: _userArray[i].name,

+ 15 - 1
src/components/pages/dataBoardTest/course/chartList/subjuect.vue

@@ -38,6 +38,20 @@ export default {
         credits: {
             enabled: false//不显示LOGO
         },
+        tooltip: {
+          formatter: function() {
+            // 自定义弹窗内容的回调函数
+            var point = this.point;
+            if(point.from){
+              var tooltipText = '<b>' + point.from + '</b> - <b>' + point.to + '</b>: ' + point.weight;
+              return tooltipText;
+            }else{
+              var tooltipText = '<b>' + point.name + '</b>: ' + point.sum;
+              return tooltipText;
+            }
+
+          }
+        },
         series: [{
           keys: ['from', 'to', 'weight'],
           data: [
@@ -90,7 +104,7 @@ export default {
             // ['Japan', 'Brazil', 1]
           ],
           type: 'dependencywheel',
-          name: 'Dependency wheel series',
+          name: '',
           dataLabels: {
             color: '#333',
             textPath: {

+ 128 - 98
src/components/pages/dataBoardTest/course/index.vue

@@ -29,13 +29,17 @@
             <div class="depth">
               <span>考核项目完成率</span>
               <div>
-                <el-progress :width="100" type="circle" :percentage="subPersent ? parseInt((subPersent / teacherCount * 100).toFixed(0)) : 0" :stroke-width="15" :format="format" color="#106BFF"></el-progress>
+                <el-progress :width="100" type="circle"
+                  :percentage="subPersent ? parseInt((subPersent / teacherCount * 100).toFixed(0)) : 0" :stroke-width="15"
+                  :format="format" color="#106BFF"></el-progress>
               </div>
             </div>
             <div class="depth">
               <span>教师项目提交率</span>
               <div>
-                <el-progress :width="100" type="circle" :percentage="subPersent2 ? parseInt((subPersent2 / teacherCount * 100).toFixed(0)) : 0" :stroke-width="15" :format="format" color="#106BFF"></el-progress>
+                <el-progress :width="100" type="circle"
+                  :percentage="subPersent2 ? parseInt((subPersent2 / teacherCount * 100).toFixed(0)) : 0"
+                  :stroke-width="15" :format="format" color="#106BFF"></el-progress>
               </div>
             </div>
           </div>
@@ -46,20 +50,20 @@
       </div>
       <div class="bottom">
         <div class="titleBox">
-          <div class="title" >
+          <div class="title">
             培训心得
           </div>
         </div>
 
         <div class="dataBox">
-          <div class="info_box" style="width: 96%" >
+          <div class="info_box" style="width: 96%">
             <div class="info blueBG">
               <span>提交总数</span>
               <span>{{ xindeCount }}</span>
             </div>
             <div class="info blueBG">
               <span>人均提交次数</span>
-              <span>{{ xindeCount ? (xindeCount / teacherCount ).toFixed(0) : 0 }}</span>
+              <span>{{ xindeCount ? (xindeCount / teacherCount).toFixed(0) : 0 }}</span>
             </div>
           </div>
           <Bar style="height: calc(100% - 70px)" :workList="tedurArray"></Bar>
@@ -73,12 +77,12 @@
             教学设计
           </div>
           <el-select v-model="cType" @change="typeChange1" class="selectBox" style="width:205px">
-            <!-- <el-option label="全部" value=""></el-option> -->
+            <el-option label="全部" value=""></el-option>
             <el-option v-for="item in shejiTime" :key="item" :label="item" :value="item"></el-option>
           </el-select>
         </div>
         <div class="dataBox">
-          <div class="info_box" style="width: 96%" >
+          <div class="info_box" style="width: 96%">
             <div class="info blueBG">
               <span>提交总数</span>
               <span>{{ shejiCount }}</span>
@@ -110,7 +114,7 @@
               <span>{{ guanshuArray.length }}</span>
             </div>
           </div>
-          <WorkNum style="height: calc(100% - 70px)" :workNumList="workNumList" >
+          <WorkNum style="height: calc(100% - 70px)" :workNumList="workNumList">
           </WorkNum>
         </div>
       </div>
@@ -134,11 +138,11 @@
             </div>
           </div>
           <el-select v-model="cType2" @change="typeChange2" class="selectBox" v-if="toolType == 0" style="width:205px">
-            <!-- <el-option label="全部" value=""></el-option> -->
+            <el-option label="全部" value=""></el-option>
             <el-option v-for="item in timeXuan" :key="item" :label="item" :value="item"></el-option>
           </el-select>
           <el-select v-model="cType3" @change="typeChange3" class="selectBox" v-if="toolType == 1" style="width:205px">
-            <!-- <el-option label="全部" value=""></el-option> -->
+            <el-option label="全部" value=""></el-option>
             <el-option v-for="item in timeXuan" :key="item" :label="item" :value="item"></el-option>
           </el-select>
         </div>
@@ -153,7 +157,8 @@
               <span>{{ huojiangPCont }}</span>
             </div>
           </div>
-          <CourseAna style="height: calc(100% - 70px)" :courseNumberArray="courseNumberArray" v-if="toolType == 0"></CourseAna>
+          <CourseAna style="height: calc(100% - 70px)" :courseNumberArray="courseNumberArray" v-if="toolType == 0">
+          </CourseAna>
           <ToolChart style="height: calc(100%)" :toolArray="toolList" v-if="toolType == 1"></ToolChart>
         </div>
       </div>
@@ -161,7 +166,7 @@
         <div class="titleBox" style="justify-content: space-between">
           <div class="title">德育获奖</div>
           <el-select v-model="cType4" @change="typeChange4" class="selectBox" style="width:205px">
-            <!-- <el-option label="全部" value=""></el-option> -->
+            <el-option label="全部" value=""></el-option>
             <el-option v-for="item in deyuTimeXuan" :key="item" :label="item" :value="item"></el-option>
           </el-select>
         </div>
@@ -260,28 +265,28 @@ export default {
       personList: {},
       workNumList: {},
       courseArray: {},
-      subPersent:0,
-      subPersent2:0,
+      subPersent: 0,
+      subPersent2: 0,
       xindeCount: 0,
-      shejiCount:0,
-      shejiPCount:0,
+      shejiCount: 0,
+      shejiPCount: 0,
       shejiArray: [],
-      shejiTime:[],
-      shejiXuan:[],
-      shejiTong:{},
-      guihuaArray:[],
-      guanshuArray:[],
-      huojiangArray:[],
-      timeXuan:[],
-      jibieXuan:[],
-      mingciXuan:[],
-      deyuArray:[],
-      deyuTimeXuan:[],
-      deyuJibieXuan:[],
-      huojiangCont:0,
-      huojiangPCont:0,
-      deyuCont:0,
-      deyuPCont:0,
+      shejiTime: [],
+      shejiXuan: [],
+      shejiTong: {},
+      guihuaArray: [],
+      guanshuArray: [],
+      huojiangArray: [],
+      timeXuan: [],
+      jibieXuan: [],
+      mingciXuan: [],
+      deyuArray: [],
+      deyuTimeXuan: [],
+      deyuJibieXuan: [],
+      huojiangCont: 0,
+      huojiangPCont: 0,
+      deyuCont: 0,
+      deyuPCont: 0,
     };
   },
   mounted() {
@@ -353,57 +358,78 @@ export default {
     typeChange1() {
       let shejiArray = this.shejiArray;
       var shejiTong = {};
-      for(var i = 0; i < this.shejiTime.length; i++){
-          shejiTong[this.shejiTime[i]] = {}
-          for(var j = 0; j < this.shejiXuan.length; j++){
-            shejiTong[this.shejiTime[i]][this.shejiXuan[j]] = 0
-          }
+      let shejiCount = {}
+      let shejiPCount = {}
+      shejiTong[''] = {}
+      shejiCount[''] = 0
+      shejiPCount[''] = []
+      for (var i = 0; i < this.shejiTime.length; i++) {
+        shejiTong[this.shejiTime[i]] = {}
+        shejiCount[this.shejiTime[i]] = 0
+        shejiPCount[this.shejiTime[i]] = []
+        for (var j = 0; j < this.shejiXuan.length; j++) {
+          shejiTong[this.shejiTime[i]][this.shejiXuan[j]] = 0
+          shejiTong[''][this.shejiXuan[j]] = 0
+        }
       }
-
-      for(var i = 0; i < shejiArray.length; i++){
+      for (var i = 0; i < shejiArray.length; i++) {
         let shejiJson = JSON.parse(shejiArray[i].courseJson)
         let xuanTime = shejiJson[1].json.answer2
         let xuanXuan = shejiJson[2].json.answer2
-        for(var j = 0; j < xuanTime.length; j++){
-
-          for(var z = 0; z < xuanXuan.length; z++){
+        for (var j = 0; j < xuanTime.length; j++) {
+          shejiCount[this.shejiTime[xuanTime[j]]]++
+          shejiPCount[this.shejiTime[xuanTime[j]]].indexOf(shejiArray[i].userid) == -1 ? shejiPCount[this.shejiTime[xuanTime[j]]].push(shejiArray[i].userid) : ''
+          for (var z = 0; z < xuanXuan.length; z++) {
             shejiTong[this.shejiTime[xuanTime[j]]][this.shejiXuan[xuanXuan[z]]]++
+            shejiTong[''][this.shejiXuan[xuanXuan[z]]]++
           }
         }
+
+        shejiCount['']++
+        shejiPCount[''].indexOf(shejiArray[i].userid) == -1 ? shejiPCount[''].push(shejiArray[i].userid) : ''
       }
       this.courseArray = shejiTong[this.cType]
+      this.shejiCount = shejiCount[this.cType];
+      this.shejiPCount = shejiPCount[this.cType].length;
       this.$forceUpdate();
     },
     typeChange2() {
       let huojiangArray = this.huojiangArray;
       var jibieTong = {};
       var personTong = {};
-      for(var i = 0; i < this.timeXuan.length; i++){
-          jibieTong[this.timeXuan[i]] = {}
-          personTong[this.timeXuan[i]] = []
-          for(var j = 0; j < this.jibieXuan.length; j++){
-            jibieTong[this.timeXuan[i]][this.jibieXuan[j]] = 0
-          }
+      jibieTong[''] = {};
+      personTong[''] = [];
+      for (var i = 0; i < this.timeXuan.length; i++) {
+        jibieTong[this.timeXuan[i]] = {}
+        personTong[this.timeXuan[i]] = []
+        for (var j = 0; j < this.jibieXuan.length; j++) {
+          jibieTong[this.timeXuan[i]][this.jibieXuan[j]] = 0
+          jibieTong[''][this.jibieXuan[j]] = 0
+        }
       }
-      for(var i = 0; i < huojiangArray.length; i++){
+      for (var i = 0; i < huojiangArray.length; i++) {
         let Json = JSON.parse(huojiangArray[i].courseJson)
         let xuanTime = Json[0].json.answer2
         let xuanXuan = Json[2].json.answer2
         console.log(xuanXuan);
-        for(var j = 0; j < xuanTime.length; j++){
-          if(personTong[this.timeXuan[xuanTime[j]]].indexOf(huojiangArray[i].userid) == -1){
+        for (var j = 0; j < xuanTime.length; j++) {
+          if (personTong[this.timeXuan[xuanTime[j]]].indexOf(huojiangArray[i].userid) == -1) {
             personTong[this.timeXuan[xuanTime[j]]].push(huojiangArray[i].userid)
           }
-          for(var z = 0; z < xuanXuan.length; z++){
+          for (var z = 0; z < xuanXuan.length; z++) {
             jibieTong[this.timeXuan[xuanTime[j]]][this.jibieXuan[xuanXuan[z]]]++
+            jibieTong[''][this.jibieXuan[xuanXuan[z]]]++
           }
         }
+        if (personTong[''].indexOf(huojiangArray[i].userid) == -1) {
+          personTong[''].push(huojiangArray[i].userid)
+        }
       }
       var a = Object.keys(jibieTong[this.cType2])
       let huojiangCont = 0
       let huojiangPCont = personTong[this.cType2].length
-      for(var i = 0; i < a.length; i++){
-        huojiangCont+= jibieTong[this.cType2][a[i]]
+      for (var i = 0; i < a.length; i++) {
+        huojiangCont += jibieTong[this.cType2][a[i]]
       }
       this.huojiangCont = huojiangCont
       this.huojiangPCont = huojiangPCont
@@ -413,22 +439,25 @@ export default {
     typeChange3() {
       let huojiangArray = this.huojiangArray;
       var jibieTong = {};
-      for(var i = 0; i < this.timeXuan.length; i++){
+      jibieTong[''] = {}
+      for (var i = 0; i < this.timeXuan.length; i++) {
         jibieTong[this.timeXuan[i]] = {}
-          for(var j = 0; j < this.mingciXuan.length; j++){
-            jibieTong[this.timeXuan[i]][this.mingciXuan[j]] = 0
-          }
+        for (var j = 0; j < this.mingciXuan.length; j++) {
+          jibieTong[this.timeXuan[i]][this.mingciXuan[j]] = 0
+          jibieTong[''][this.mingciXuan[j]] = 0
+        }
       }
 
-      for(var i = 0; i < huojiangArray.length; i++){
+      for (var i = 0; i < huojiangArray.length; i++) {
         let Json = JSON.parse(huojiangArray[i].courseJson)
         let xuanTime = Json[0].json.answer2
         let xuanXuan = Json[3].json.answer2
         console.log(xuanXuan);
 
-        for(var j = 0; j < xuanTime.length; j++){
-          for(var z = 0; z < xuanXuan.length; z++){
+        for (var j = 0; j < xuanTime.length; j++) {
+          for (var z = 0; z < xuanXuan.length; z++) {
             jibieTong[this.timeXuan[xuanTime[j]]][this.mingciXuan[xuanXuan[z]]]++
+            jibieTong[''][this.mingciXuan[xuanXuan[z]]]++
           }
         }
       }
@@ -439,35 +468,42 @@ export default {
       let deyuArray = this.deyuArray;
       var jibieTong = {};
       var personTong = {};
-      for(var i = 0; i < this.deyuTimeXuan.length; i++){
+      jibieTong[''] = {}
+      personTong[''] = []
+      for (var i = 0; i < this.deyuTimeXuan.length; i++) {
         jibieTong[this.deyuTimeXuan[i]] = {}
-          personTong[this.deyuTimeXuan[i]] = []
-          for(var j = 0; j < this.deyuJibieXuan.length; j++){
-            jibieTong[this.deyuTimeXuan[i]][this.deyuJibieXuan[j]] = 0
-          }
+        personTong[this.deyuTimeXuan[i]] = []
+        for (var j = 0; j < this.deyuJibieXuan.length; j++) {
+          jibieTong[this.deyuTimeXuan[i]][this.deyuJibieXuan[j]] = 0
+          jibieTong[''][this.deyuJibieXuan[j]] = 0
+        }
       }
 
-      for(var i = 0; i < deyuArray.length; i++){
+      for (var i = 0; i < deyuArray.length; i++) {
         let Json = JSON.parse(deyuArray[i].courseJson)
         let xuanTime = Json[0].json.answer2
         let xuanXuan = Json[3].json.answer2
         console.log(xuanXuan);
 
-        for(var j = 0; j < xuanTime.length; j++){
-          if(personTong[this.deyuTimeXuan[xuanTime[j]]].indexOf(deyuArray[i].userid) == -1){
+        for (var j = 0; j < xuanTime.length; j++) {
+          if (personTong[this.deyuTimeXuan[xuanTime[j]]].indexOf(deyuArray[i].userid) == -1) {
             personTong[this.deyuTimeXuan[xuanTime[j]]].push(deyuArray[i].userid)
           }
-          for(var z = 0; z < xuanXuan.length; z++){
+          for (var z = 0; z < xuanXuan.length; z++) {
             jibieTong[this.deyuTimeXuan[xuanTime[j]]][this.deyuJibieXuan[xuanXuan[z]]]++
+            jibieTong[''][this.deyuJibieXuan[xuanXuan[z]]]++
           }
         }
+        if (personTong[''].indexOf(deyuArray[i].userid) == -1) {
+          personTong[''].push(deyuArray[i].userid)
+        }
       }
 
       var a = Object.keys(jibieTong[this.cType4])
       let huojiangCont = 0
       let huojiangPCont = personTong[this.cType4].length
-      for(var i = 0; i < a.length; i++){
-        huojiangCont+= jibieTong[this.cType4][a[i]]
+      for (var i = 0; i < a.length; i++) {
+        huojiangCont += jibieTong[this.cType4][a[i]]
       }
       this.deyuCont = huojiangCont
       this.deyuPCont = huojiangPCont
@@ -490,7 +526,7 @@ export default {
       this.ajax
         .post(this.$store.state.api + "selectDataBoardTest", params)
         .then((res) => {
-          
+
           this.isLoading = false;
           let _cid1 = 'bf08fbbb-8a84-11ee-b98c-005056b86db5'; //个人发展规划
           let _cid2 = '90017320-8a9a-11ee-b98c-005056b86db5'; //教育观树
@@ -523,15 +559,9 @@ export default {
           let allTests = res.data[8]
 
           let shejiArray = allTests.filter(item => item.courseid == _cid6) // 我的教学设计
-          let shejiCount = 0
-          let shejiPCount = []
-          shejiArray.forEach(element => {
-            shejiCount++
-            shejiPCount.indexOf(element.userid) == -1 ? shejiPCount.push(element.userid) : ''
-          });
-          this.shejiCount = shejiCount;
-          this.shejiPCount = shejiPCount.length;
-          
+
+
+
           let shejiJson = JSON.parse(shejiArray[0].chapters)
           let shejiTimeArray = shejiJson[1].json.array
           let shejiXuanArray = shejiJson[2].json.array
@@ -543,31 +573,31 @@ export default {
           shejiXuanArray.forEach(el => {
             shejiXuan.push(el.option)
           })
-          
+
           this.shejiArray = shejiArray
           this.shejiTime = shejiTime
-          this.shejiXuan = shejiXuan  
-          this.cType = shejiTime[0]
+          this.shejiXuan = shejiXuan
+          // this.cType = shejiTime[0]
           this.typeChange1()
 
           let guihuaArray = allTests.filter(item => item.courseid == _cid1) // 发展规划
           let guanshuArray = allTests.filter(item => item.courseid == _cid2) // 教育观树
           this.guihuaArray = guihuaArray
           this.guanshuArray = guanshuArray
-          let huodongArray = [...guihuaArray,...guanshuArray]
+          let huodongArray = [...guihuaArray, ...guanshuArray]
           let huodongJson = {}
-          for(var i = 0;i<huodongArray.length;i++){
-            if(!huodongJson[huodongArray[i].userid]){
+          for (var i = 0; i < huodongArray.length; i++) {
+            if (!huodongJson[huodongArray[i].userid]) {
               huodongJson[huodongArray[i].userid] = {
-                name:huodongArray[i].username,
-                guihua:0,
-                guanshu:0
+                name: huodongArray[i].username,
+                guihua: 0,
+                guanshu: 0
               }
             }
-            if(huodongArray[i].courseid == _cid1){
+            if (huodongArray[i].courseid == _cid1) {
               huodongJson[huodongArray[i].userid].guihua++
             }
-            if(huodongArray[i].courseid == _cid2){
+            if (huodongArray[i].courseid == _cid2) {
               huodongJson[huodongArray[i].userid].guanshu++
             }
           }
@@ -593,10 +623,10 @@ export default {
 
           this.huojiangArray = huojiangArray
           this.timeXuan = timeXuan
-          this.jibieXuan = jibieXuan  
-          this.mingciXuan = mingciXuan  
-          this.cType2 = timeXuan[0]
-          this.cType3 = timeXuan[0]
+          this.jibieXuan = jibieXuan
+          this.mingciXuan = mingciXuan
+          // this.cType2 = timeXuan[0]
+          // this.cType3 = timeXuan[0]
           this.typeChange2()
           this.typeChange3()
 
@@ -616,7 +646,7 @@ export default {
           this.deyuArray = deyuArray
           this.deyuTimeXuan = deyuTimeXuan
           this.deyuJibieXuan = deyuJibieXuan
-          this.cType4 = deyuTimeXuan[0]
+          // this.cType4 = deyuTimeXuan[0]
           this.typeChange4()
           this.$forceUpdate();
         })

+ 202 - 0
src/components/pages/evaBox/index.vue

@@ -0,0 +1,202 @@
+<template>
+    <el-dialog title="选择模板" :visible.sync="dialogVisibleEva" :append-to-body="true" width="600px"
+        :before-close="handleClose" class="addNewPP2">
+        <div class="check_classBox">
+            <div class="check_class_right">
+                <el-tooltip placement="top" :content="item.name" v-for="(item, index) in evaList" :key="index">
+                    <div class="check_class" :class="{ activeX: gradeId == item.id }" @click="check(item)">
+                        {{ item.name }}
+                    </div>
+                </el-tooltip>
+            </div>
+            <div class="check_class_left">
+                <div v-if="gradeId" class="elist_input">
+                    <div v-for="(eItem, eIndex) in array" :key="eIndex" class="elist_input_box">
+                        <div class="elist_inptu_text">
+                            <span>评价名称:</span>
+                            <span>{{ eItem.value }}</span>
+                        </div>
+                        <div class="elist_inptu_text">
+                            <span>评价描述:</span>
+                            <span>{{ eItem.detail }}</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="confirm()">确 认</el-button>
+            <el-button @click="close()">关 闭</el-button>
+        </span>
+    </el-dialog>
+</template>
+  
+<script>
+export default {
+    props: {
+        dialogVisibleEva: {
+            type: Boolean,
+            default: false
+        },
+        oid: {
+            type: String
+        },
+        org: {
+            type: String
+        }
+    },
+    watch: {
+        dialogVisibleEva(newVal) {
+            if (newVal) {
+                this.getData();
+            }
+        }
+    },
+    directives: {
+
+    },
+    data() {
+        return {
+            evaList: [],
+            gradeId: '',
+            array:[]
+        };
+    },
+    methods: {
+        handleClose(done) {
+            this.close();
+            done();
+        },
+        close() {
+            this.$emit("update:dialogVisibleEva", false);
+        },
+        confirm() {
+            if(this.array.length == 0){
+                this.$message.error("请选择评价模板!");
+            }
+            this
+            .$confirm("是否使用此评价模板?将会覆盖掉现有的评价!", "提示", {
+                confirmButtonText: "保存",
+                cancelButtonText: "不保存",
+                type: "warning",
+            })
+            .then(() => {
+                this.$emit('updateEvaJson',this.array)
+                this.close()
+            });
+        },
+        getData() {
+
+            let params = {
+                oir: this.oid,
+                org: this.org,
+                n: '',
+            };
+            this.ajax
+                .get(this.$store.state.api + "getCourseEvaTemplate", params)
+                .then((res) => {
+                    let t1 = res.data[0];
+                    let t2 = res.data[1];
+                    let t3 = res.data[2];
+                    this.evaList = [...t1, ...t2, ...t3]
+                })
+                .catch((err) => {
+                    console.error(err);
+                });
+        },
+        check(item){
+            this.gradeId = item.id
+            this.array = JSON.parse(item.json)
+        }
+    }
+};
+</script>
+  
+<style scoped>
+.addNewPP2>>>.el-dialog__body {
+    padding: 5px 0;
+}
+
+.addNewPP2>>>.el-dialog {
+    margin-top: 5vh !important;
+}
+
+
+.check_classBox {
+    height: 400px;
+    display: flex;
+    border-top: 1.5px solid #E7EBF1;
+    border-bottom: 1.5px solid #E7EBF1;
+}
+
+.check_class_right {
+    width: 130px;
+    border-right: 1px solid #E7EBF1;
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    height: 100%;
+    overflow: auto;
+    padding: 15px 0;
+    box-sizing: border-box;
+}
+
+.check_class {
+    width: 85%;
+    border-radius: 5px;
+    height: 30px;
+    line-height: 30px;
+    text-align: center;
+    padding: 0 10px;
+    box-sizing: border-box;
+    cursor: pointer;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.check_class.activeX {
+    background: #E0EAFB;
+    color: #3681FC;
+    font-weight: 700;
+}
+
+.check_class+.check_class {
+    margin-top: 15px;
+}
+
+.check_class_left {
+    background: #FAFAFA;
+    width: calc(100% - 130px);
+    padding: 15px;
+    box-sizing: border-box;
+}
+
+.elist_input{
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    box-sizing: border-box;
+}
+.elist_input_box{
+    margin: 0 0 10px 0;
+    width:100%;
+}
+.elist_input_box + .elist_input_box{
+    padding-top: 10px;
+    border-top: 1px solid #E7EBF1;
+}
+.elist_inptu_text{
+    font-size: 15px;
+    display: flex;
+    align-items: flex-start;
+}
+.elist_inptu_text + .elist_inptu_text{
+    margin-top: 5px;
+}
+.elist_inptu_text > span:nth-child(1){
+    min-width: fit-content;
+    font-weight: 600;
+}
+</style>
+  

+ 1 - 1
src/components/pages/synergyCourse/addCourse.vue

@@ -1773,7 +1773,7 @@
           <span>学校</span>
         </div>
         <div style="margin-left:25px;">
-          <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
+          <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="display: flex;align-items: center;">全选</el-checkbox>
         </div>
         <el-checkbox-group v-model="checkboxList3" @change="handleCheckedTeacherJuriChange" class="people_name" v-if="teacherJuri.length">
           <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">

+ 85 - 53
src/components/pages/synergyCourse/group/group.vue

@@ -14,8 +14,7 @@
                 </div> -->
                 <div></div>
                 <!-- || (courseDetail.course_teacher && courseDetail.course_teacher.indexOf(userid) != -1) -->
-                <div class="btn_right"
-                    v-if="courseDetail.userid == userid">
+                <div class="btn_right" v-if="courseDetail.userid == userid">
                     <div style="color: rgb(171 171 171); margin: 0 10px 0 0" v-show="false">
                         提示:开启【开放选座】,能够自由加入和退出小组。
                     </div>
@@ -39,18 +38,18 @@
                     <div type="primary" @click="updateGroup" class="returnBtn" style="background-color: #225bc7">
                         添加分组
                     </div>
-                    <div type="primary" @click="deleteCourseGroup" class="returnBtn" style="background-color: #225bc7" >
+                    <div type="primary" @click="deleteCourseGroup" class="returnBtn" style="background-color: #225bc7">
                         删除分组
                     </div>
                 </div>
-                <div class="btn_right"
-                    v-else>
+                <div class="btn_right" v-else>
                     <div style="color: rgb(171 171 171); margin: 0 10px 0 0">
                         提示:开启【开放选座】,能够自由加入和退出小组。
                     </div>
                     <div class="group_switch">
                         <span>开放选座</span>
-                        <el-switch v-model="islock" active-text="" class="switchCss" @change="lockChair" disabled></el-switch>
+                        <el-switch v-model="islock" active-text="" class="switchCss" @change="lockChair"
+                            disabled></el-switch>
                     </div>
                 </div>
             </div>
@@ -158,8 +157,7 @@
                                 </div>
                                 <div>
                                     <!-- && groupJson.islock == 2 -->
-                                    <div v-if="courseDetail.userid == userid"
-                                        @click="deleteGroupChair(g.id, gindex)">
+                                    <div v-if="courseDetail.userid == userid" @click="deleteGroupChair(g.id, gindex)">
                                         移除组员
                                     </div>
                                     <div @click="selectGroup(g.id)"
@@ -171,12 +169,11 @@
                                             groupStudent[g.id][
                                                 groupStudentUid[g.id].indexOf(userid)
                                             ].id)
-                                        "
-                                        v-else-if="groupStudentUid && groupStudentUid[g.id].indexOf(userid) != -1">
+                                        " v-else-if="groupStudentUid && groupStudentUid[g.id].indexOf(userid) != -1">
                                         退出分组
                                     </div>
                                     <div style="margin-top:10px"
-                                        v-if="(courseDetail.userid == userid ) && groupStudent[g.id].length < groupJson.number"
+                                        v-if="(courseDetail.userid == userid) && groupStudent[g.id].length < groupJson.number"
                                         @click="addGroupStudent(g.id)">
                                         添加组员
                                         <!-- || (courseDetail.course_teacher && courseDetail.course_teacher.indexOf(userid) != -1) -->
@@ -304,11 +301,9 @@
                     </div>
                     <div class="batch_add_group">
                         <span>批量添加小组:</span>
-                        <el-input-number v-model="addGroupNum" 
-                        :min="0"
-                        label="批量添加小组"></el-input-number>
+                        <el-input-number v-model="addGroupNum" :min="0" label="批量添加小组"></el-input-number>
                         <el-button style="margin-left:5px" type="primary" size="small" @click="handleAddGroupNumChange()">
-                                批量添加</el-button>
+                            批量添加</el-button>
                     </div>
                 </div>
                 <div class="groupContent">
@@ -318,7 +313,7 @@
                 </div>
             </div>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="dialogVisibleGroup2 = false;addGroupNum=0;">取 消</el-button>
+                <el-button @click="dialogVisibleGroup2 = false; addGroupNum = 0;">取 消</el-button>
                 <el-button type="primary" @click="updateGroupJson(2)">确定</el-button>
             </span>
         </el-dialog>
@@ -397,9 +392,10 @@
                 <div class="i_box_login2" v-if="classJuri.length">
                     <div :class="{ active: checkboxList3.indexOf(item.userid) != -1 }" v-for="item in classJuri"
                         :key="item.userid" :label="item.userid" @click="addGroupUser(item.userid)">
-                        <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
+                        <el-tooltip placement="top" :content="`${item.name ? item.name : '暂无姓名'}${item.group.length > 0 ? '在'+item.group.join('、') : ''}`">
                             <span>{{ item.name ? item.name : "暂无姓名" }}</span>
                         </el-tooltip>
+                        <div class="grouplBox" v-if="item.group.length">{{ item.group.length }}</div>
                     </div>
                 </div>
                 <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
@@ -422,7 +418,7 @@ export default {
     props: ['cid', 'classList', 'courseDetail', 'userid', "type", "classId", "oid", "people"],
     data() {
         return {
-            addGroupNum:0,
+            addGroupNum: 0,
             groupJson2: {},
             classid: "1",
             groupid: "",
@@ -458,20 +454,20 @@ export default {
         }
     },
     methods: {
-        handleAddGroupNumChange(){
-            for(let i=0;i<this.addGroupNum;i++){
+        handleAddGroupNumChange() {
+            for (let i = 0; i < this.addGroupNum; i++) {
                 this.groupJson2.group.push({
                     name: "第" + (this.groupJson2.group.length + 1) + "组",
                     id: this.guid()
                 });
-             }
+            }
         },
         handleClose2(done) {
             this.$emit('update:dialogVisibleGroup', false)
             done();
         },
         handleClose(done) {
-            this.addGroupNum=0;
+            this.addGroupNum = 0;
             done();
         },
         getStudent() {
@@ -508,26 +504,45 @@ export default {
             // if(_user.indexOf(this.courseDetail.userid) == -1){
             //     _user.push(this.courseDetail.userid);
             // }
-            if(_user.indexOf(this.courseDetail.userid) !== -1){
+            if (_user.indexOf(this.courseDetail.userid) !== -1) {
                 _user.splice(_user.indexOf(this.courseDetail.userid), 1);
             }
             let params = {
                 uid: _user.join(","),
             };
             this.ajax
-            .get(this.$store.state.api + "getAllUserById", params)
-            .then((res) => {
-            this.loading = false
+                .get(this.$store.state.api + "getAllUserById", params)
+                .then((res) => {
+                    this.loading = false
                     if (res.data && res.data[0].length) {
-                        this.classJuri = res.data[0].filter((el) => {
-                            return this.allGroupStudentUid.indexOf(el.userid) == -1
+                        let students = res.data[0].filter((el) => {
+                            return this.groupStudentUid[this.gid].indexOf(el.userid) == -1
+                            // return el
                         });
+                        let studentsJson = {}
+                        for(var i = 0; i < students.length; i++){
+                            studentsJson[students[i].userid] = students[i]
+                            students[i].group = []
+                            let groupk = Object.keys(this.groupStudentUid)
+                            for(var j = 0; j < groupk.length; j++){
+                                let uid = this.groupStudentUid[groupk[j]]
+                                if(uid.indexOf(students[i].userid) !== -1){
+                                    for(var k = 0; k < this.groupJson.group.length; k++){
+                                        if(this.groupJson.group[k].id == groupk[j]){
+                                            students[i].group.push(this.groupJson.group[k].name)
+                                        }
+                                    }
+                                }
+                                
+                            }
+                        }
+                        this.classJuri = Object.values(studentsJson)
                     }
-            })
+                })
                 .catch((err) => {
-            this.loading = false
-                console.error(err);
-            });
+                    this.loading = false
+                    console.error(err);
+                });
         },
         setClassid(cid) {
             this.classid = cid
@@ -931,36 +946,37 @@ export default {
     },
     mounted() {
         if (this.classList.length) {
-                if (this.type == 2) {
-                    this.classList = this.classList.filter(el => {
-                        return this.classId.indexOf(el.id) != -1
-                    })
-                    this.classid = this.classList[0].id
-                } else {
-                    this.classid = this.classList[0].id
-                }
+            if (this.type == 2) {
+                this.classList = this.classList.filter(el => {
+                    return this.classId.indexOf(el.id) != -1
+                })
+                this.classid = this.classList[0].id
             } else {
-                this.classid = '1'
+                this.classid = this.classList[0].id
             }
-            this.setClassid(this.classid)
+        } else {
+            this.classid = '1'
+        }
+        this.setClassid(this.classid)
+        this.getCourseGroup();
+        // if (this.dialogVisibleGroup) {
+        //     this.getCourseGroup();
+        this.timer = setInterval(() => {
             this.getCourseGroup();
-            // if (this.dialogVisibleGroup) {
-            //     this.getCourseGroup();
-                this.timer = setInterval(() => {
-                    this.getCourseGroup();
-                }, 5000)
-            // } else {
-            //     clearInterval(this.timer)
-            //     this.timer = null
-            // }
+        }, 5000)
+        // } else {
+        //     clearInterval(this.timer)
+        //     this.timer = null
+        // }
     }
 }
 </script>
 
 <style scoped>
-.batch_add_group{
+.batch_add_group {
     margin-top: 15px;
 }
+
 .dialog_diy>>>.el-dialog {
     margin-top: 10vh !important;
 }
@@ -1336,12 +1352,13 @@ export default {
     height: 30px;
     line-height: 30px;
     padding: 0 5px;
-    overflow: hidden;
+    /* overflow: hidden; */
     background: rgb(225, 237, 255);
     margin: 10px calc((100% - (80px*5)) / 4) 0 0;
     color: rgb(37 124 255);
     border-radius: 5px;
     box-sizing: border-box;
+    position: relative;
 }
 
 .i_box_login2>div:nth-child(5n) {
@@ -1371,4 +1388,19 @@ export default {
 .group_switch>span {
     margin-right: 5px;
 }
+
+.grouplBox{
+    position: absolute;
+    top: -5px;
+    right: -5px;
+    background: rgb(225, 237, 255);
+    border: 1px solid #3281f7;
+    border-radius: 50%;
+    height: 15px;
+    width: 15px;
+    text-align: center;
+    line-height: 15px;
+    font-size: 12px;
+    color: rgb(37 124 255);
+}
 </style>

+ 1 - 1
src/components/pages/test/add/setInfo/index.vue

@@ -277,7 +277,7 @@ export default {
         this.courseText = this.depthCopy(this.brief)
         this.sJuri = this.depthCopy(this.juri)
         this.$forceUpdate()
-        this.selectAllType();
+        // this.selectAllType();
         this.selectType();
     }
 }

+ 17 - 6
src/components/pages/test/index.vue

@@ -4,7 +4,7 @@
             <div class="pb_head top">
                 <div style="display: flex;align-items: center;">
                     <span class="sub_head">资料管理</span>
-                    <span class="subClick" @click="
+                    <span class="subClick" v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'" @click="
                         goTo(
                         '/trainCourse?userid=' +
                         userid +
@@ -18,6 +18,7 @@
                         ">培训管理</span>
                 </div>
                 <div class="student_button">
+                    <el-button type="primary" class="bgColor" @click="openTestDataBoard()" v-if="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'">评测看板</el-button>
                     <el-button type="primary" class="bgColor" @click="goToCourse()">新建评测</el-button>
                 </div>
 
@@ -123,19 +124,18 @@
                         <div class="test_time">
                             <span><span>修改日期</span></span><span>{{ item.utime }}</span>
                         </div>
-                        <div class="test_time tset_type">
+                        <div class="test_time tset_type" v-if="typeArray.length">
                         <span><span>类型</span></span>
                         <span v-if="!item.typeN">未设置类型</span>
                         <span v-else>{{ item.typeN }}</span>
                         </div>
-                        <div class="test_time">
+                        <!-- <div class="test_time">
                             <span><span>分类</span></span>
                             <span v-if="!item.typename">未设置分类</span>
                             <el-tooltip :content="item.typename" placement="top" effect="dark" v-else>
-                                <!-- content to trigger tooltip here -->
                                 <span>{{ item.typename }}</span>
                             </el-tooltip>
-                        </div>
+                        </div> -->
                         <div class="test_btn">
                             <div class="test_o_btn">
                                 <el-tooltip content="编辑" placement="top" effect="dark">
@@ -231,6 +231,7 @@ import "../../../common/aws-sdk-2.235.1.min";
 import EditorBar from "../../../components/tools/wangEnduit";
 import CourseProblem from "../components/courseProblem";
 export default {
+    name:'test',
     components: { EditorBar, CourseProblem },
     data() {
         return {
@@ -387,6 +388,9 @@ export default {
         get(cid) {
             window.parent.postMessage({ cid: cid, screenType: "3s" }, "*");
         },
+        openTestDataBoard(){
+            window.parent.postMessage({ tools: "dataBoardTest" }, "*");
+        },
         getA(cid) {
             this.$router.push("/courseProgress?cid=" + cid + "&userid=" +
                 this.userid +
@@ -784,7 +788,14 @@ export default {
                 });
         }
     },
-    created() {
+    activated(){
+        console.log(1);
+        this.selectAllType();
+        this.getCourse();
+        this.selectTestType();
+    },
+    mounted() {
+        console.log(2);
         if (this.role == '1') {
             this.groupA = '0'
         }

+ 21 - 2
src/components/pages/testPerson/panel/index.vue

@@ -29,7 +29,7 @@
         <div>资料提交数</div>
       </div>
     </div>
-    <div class="i_body_panel">
+    <div class="i_body_panel" v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'">
       <div class="i_icon"><span></span></div>
       <div class="i_detail">
         <div><span>{{count2}}</span><span>个</span></div>
@@ -43,6 +43,13 @@
         <div>教学活动数</div>
       </div>
     </div>
+    <div class="i_body_panel">
+      <div class="i_icon"><span></span></div>
+      <div class="i_detail">
+        <div><span>{{count4}}</span><span>个</span></div>
+        <div>教研活动数</div>
+      </div>
+    </div>
   </div>
 </template>
 
@@ -66,6 +73,7 @@ export default {
       count1: 0,
       count2: 0,
       count3: 0,
+      count4: 0,
     }
   },
   methods: {
@@ -84,6 +92,7 @@ export default {
           this.count1 = res.data[2].length // 资料提交数
           this.count2 = res.data[3].length //培训活动数
           this.count3 = res.data[4].length //教学活动数
+          this.count4 = res.data[5].length //教研活动数
 
         })
         .catch((err) => {
@@ -123,7 +132,7 @@ export default {
       background: rgb(252, 252, 252);
     }
     .i_body_panel + .i_body_panel{
-      margin-top: 15px;
+      margin-top: 10px;
     }
     .i_body_panel > .i_icon{
       width: 40px;
@@ -165,6 +174,16 @@ export default {
       background-size:100% 100%;
       background-image: url('../../../../assets/icon/test/zong_3.png');
     }
+    .i_body_panel:nth-child(5) > .i_icon{
+      background: rgb(54, 192, 230);
+    }
+    .i_body_panel:nth-child(5) > .i_icon > span{
+      display: block;
+      width: 20px;
+      height: 20px;
+      background-size:100% 100%;
+      background-image: url('../../../../assets/icon/new/test_jy.png');
+    }
     .i_body_panel > .i_detail{
       width: clac(100% - 50px);
     }

+ 2 - 2
src/components/pages/testPerson/test/index.vue

@@ -3,9 +3,9 @@
     <div class="i_body_title">
       <div class="title_box">
         <span @click="checkType(1)" :class="{active:type == 1}">资料提交</span>
-        <span @click="checkType(2)" :class="{active:type == 2}">培训活动</span>
+        <span @click="checkType(2)" :class="{active:type == 2}"  v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'">培训活动</span>
         <span @click="checkType(3)" :class="{active:type == 3}">教学活动</span>
-        <!-- <span @click="checkType(4)" :class="{active:type == 4}">教研活动</span> -->
+        <span @click="checkType(4)" :class="{active:type == 4}">教研活动</span>
       </div>
       <div>
         <el-button type="primary" class="bgColor" @click="returnA()">评测中心</el-button>

+ 7 - 7
src/components/pages/testPerson/test/test.vue

@@ -211,11 +211,11 @@ export default {
                 s: for (var j = 0; j < _array.length; j++) {
                     let el = _array[j];
                     if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
-                        for (var k = 0; k < el.array.length; k++) {
-                            let item = el.array[k];
+                        for (var k2 = 0; k2 < el.array.length; k2++) {
+                            let item = el.array[k2];
                             if (item.ttype == 2 && item.array.length > 0) {
                                 for (var z = 0; z < item.array.length; z++) {
-                                    let item2 = item.array[k];
+                                    let item2 = item.array[k2];
                                     if (
                                         item2.ttype == 1 &&
                                         item2.type == 5 &&
@@ -223,8 +223,8 @@ export default {
                                         item2.json.file &&
                                         item2.json.file.length > 0
                                     ) {
-                                        for (var k = 0; k < item2.json.file.length; k++) {
-                                            let ik = item2.json.file[k];
+                                        for (var k4 = 0; k4 < item2.json.file.length; k4++) {
+                                            let ik = item2.json.file[k4];
                                             if (ik.type == 3) {
                                                 _img = ik.url;
                                                 break s;
@@ -239,8 +239,8 @@ export default {
                                 item.json.file &&
                                 item.json.file.length > 0
                             ) {
-                                for (var k = 0; k < item.json.file.length; k++) {
-                                    let ik = item.json.file[k];
+                                for (var k3 = 0; k3 < item.json.file.length; k3++) {
+                                    let ik = item.json.file[k3];
                                     if (ik.type == 3) {
                                         _img = ik.url;
                                         break s;

+ 224 - 22
src/components/pages/testPerson/test/trActivity.vue

@@ -1,60 +1,74 @@
 <template>
-    <div class="i_body_box">
+    <div class="i_body_box" v-loading="isLoading">
         <div class="i_header">
             <div class="i_header_box">
                 <div class="i_header_span">
-                    <span>25</span>
+                    <span>{{ count1 }}</span>
                     <span>节</span>
                 </div>
                 <div class="i_header_content">评论课程数</div>
             </div>
             <div class="i_header_box">
                 <div class="i_header_span">
-                    <span>25</span>
+                    <span>{{ count2 }}</span>
                     <span>条</span>
                 </div>
                 <div class="i_header_content">评论总数</div>
             </div>
             <div class="i_header_box">
                 <div class="i_header_span">
-                    <span>25</span>
+                    <span>{{ count3 }}</span>
                     <span>字</span>
                 </div>
                 <div class="i_header_content">评论总字数</div>
             </div>
             <div class="i_header_box">
                 <div class="i_header_span">
-                    <span>25</span>
+                    <span>{{ count4 }}</span>
                     <span>条</span>
                 </div>
                 <div class="i_header_content">评论录音数</div>
             </div>
         </div>
         <div class="i_body">
-            <div class="i_course_box">
+            <div style="text-align: center;" v-if="!courseArray.length">暂无数据</div>
+            <div class="i_course_box" v-for="(item, index) in courseArray" :key="index">
                 <div class="i_course_header">
-                    <span :class="{ active: bool }" @click="bool = !bool"></span>
-                    <span>课程名称</span>
-                    <span>课程创建者</span>
-                    <span>课程分类</span>
+                    <span :class="{ active: item.bool }" @click="checkBool(index)"></span>
+                    <el-tooltip :content="item.title" placement="top" effect="dark">
+                        <span>{{ item.title }}</span>
+                    </el-tooltip>
+                    <el-tooltip :content="item.name" placement="top" effect="dark">
+                        <span>{{ item.name }}</span>
+                    </el-tooltip>
+                    <el-tooltip :content="item.type" placement="top" effect="dark">
+                        <span>{{ item.type }}</span>
+                    </el-tooltip>
+                    <span style="margin-left: auto;text-align: right;"  v-show="!item.bool">{{ item.array[0].time }}</span>
                 </div>
-                <div class="i_course_content" v-show="bool">
-                    <div class="i_course_c_box">
-                        <div class="i_course_c_img"></div>
-                        <div class="i_course_c_body"></div>
+                <div class="i_course_content" v-show="item.bool">
+                    <div class="i_course_c_box" v-for="(item2, index2) in item.array" :key="`${index}-${index2}`">
+                        <div class="i_course_c_img" :class="{ hf: item2.ctype == 2, pl: item2.ctype == 1 }"></div>
+                        <div class="i_course_c_body cont" @click="checkImg(getImgList(item2.content))" v-if="item2.type == 1"
+                            v-html="item2.content"></div>
+                        <div class="i_course_c_body" v-if="item2.type == 2">
+                            <audio :src="item2.content" controls="controls" ref="audio" class="pzAudioClass">
+                                Your browser does not support the audio element.
+                            </audio>
+                        </div>
                         <div class="i_course_c_type">
-                            <span>2023.11.12 17.09</span>
-                            <span>发表个人评论</span>
+                            <span>{{ item2.time }}</span>
+                            <span>{{ item2.ctype == 2 ? `回复了${item2.hfPerson}` : "发表个人评论" }}</span>
                         </div>
                     </div>
-                    <div class="i_course_c_box">
+                    <!-- <div class="i_course_c_box">
                         <div class="i_course_c_img"></div>
                         <div class="i_course_c_body"></div>
                         <div class="i_course_c_type">
                             <span>2023.11.12 17.09</span>
                             <span>回复了刘雨桐</span>
                         </div>
-                    </div>
+                    </div> -->
                 </div>
             </div>
         </div>
@@ -73,9 +87,98 @@ export default {
     },
     data() {
         return {
-            bool: false
+            bool: false,
+            isLoading: false,
+            count1: 0,
+            count2: 0,
+            count3: 0,
+            count4: 0,
+            courseArray: []
         }
     },
+    computed: {
+        getImgList() {
+            return function (val) {
+                let srcList = []; // 定义一个数组用来接收后面的img地址
+
+                val.replace(
+                    /<img [^>]*src=['"]([^'"]+)[^>]*>/g,
+                    function (match, capture) {
+                        // 查找匹配的元素   match为整个img标签  capture为src中的内容
+                        srcList.push(capture);
+                    }
+                );
+                return srcList;
+            };
+        },
+    },
+    methods: {
+        getData() {
+            this.isLoading = true
+            let params = {
+                uid: this.userid,
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectPostilByUid", params)
+                .then((res) => {
+                    this.isLoading = false
+                    let array = res.data[0]
+                    let countCourse = []
+                    let wordCount = 0
+                    let audioCount = 0
+                    let courseArray = {}
+                    array.forEach(element => {
+                        if (!courseArray[element.courseId]) {
+                            courseArray[element.courseId] = {
+                                bool: false,
+                                title: element.title,
+                                type: element.type2,
+                                name: element.creator,
+                                array: []
+                            }
+                        }
+                        courseArray[element.courseId].array.push(element)
+                        if (countCourse.indexOf(element.courseId) == -1) {
+                            countCourse.push(element.courseId)
+                        }
+                        if (element.type == 1) {
+                            wordCount += element.content.replace(/<[^>]+>/g, '').length;
+                        }
+                        if (element.type == 2) {
+                            audioCount++
+                        }
+                    });
+                    this.count1 = countCourse.length
+                    this.count2 = array.length
+
+                    this.count3 = wordCount
+                    this.count4 = audioCount
+                    this.courseArray = Object.values(courseArray)
+                    console.log(courseArray);
+                    console.log(this.courseArray);
+                })
+                .catch((err) => {
+                    this.isLoading = false
+                    console.error(err);
+                });
+        },
+        checkBool(index) {
+            this.courseArray[index].bool = !this.courseArray[index].bool
+            this.$forceUpdate()
+        },
+        checkImg(list) {
+            if (!list.length) {
+                return;
+            }
+            this.$hevueImgPreview({
+                multiple: true, // 开启多图预览模式
+                imgList: list, // 需要预览的多图数组
+            });
+        },
+    },
+    mounted() {
+        this.getData();
+    },
 }
 </script>
 
@@ -132,6 +235,7 @@ export default {
 .i_body {
     margin-top: 20px;
     width: 100%;
+    padding-bottom: 5px;
 }
 
 .i_course_box {
@@ -142,6 +246,10 @@ export default {
     border-radius: 5px;
 }
 
+.i_course_box+.i_course_box {
+    margin-top: 15px;
+}
+
 .i_course_header {
     height: 50px;
     display: flex;
@@ -152,6 +260,10 @@ export default {
 
 .i_course_header>span {
     margin: 0 20px 0 0;
+    width: 220px;
+    word-break: break-all;
+    overflow: hidden;
+    text-overflow: ellipsis;
 }
 
 .i_course_header>span:nth-child(1) {
@@ -190,10 +302,30 @@ export default {
     width: 40px;
     background: #3760af;
     border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.i_course_c_img.hf::before,
+.i_course_c_img.pl::before {
+    content: '';
+    width: 20px;
+    height: 20px;
+    background-size: 100% 100%;
+    display: block;
+}
+
+.i_course_c_img.hf::before {
+    background-image: url(../../../../assets/icon/new/test_hf.png);
+}
+
+.i_course_c_img.pl::before {
+    background-image: url(../../../../assets/icon/new/test_pl.png);
 }
 
 .i_course_c_body {
-    width: calc(100% - 40px - 120px - 20px);
+    width: calc(100% - 40px - 140px - 20px);
     word-break: break-all;
 }
 
@@ -202,7 +334,7 @@ export default {
     flex-direction: column;
     align-items: flex-end;
     height: 40px;
-    width: 120px;
+    width: 140px;
     font-size: 14px;
     justify-content: space-between;
     color: #7d7d7d;
@@ -214,4 +346,74 @@ export default {
     word-break: break-all;
     white-space: nowrap;
     text-overflow: ellipsis;
-}</style>
+}
+
+.pzAudioClass {
+    /* margin: 15px 14px; */
+    background: #fff;
+    height: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+/* table 样式 */
+.cont>>>table {
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #ccc;
+}
+
+.cont>>>table td,
+.cont>>>table th {
+    border-bottom: 1px solid #ccc;
+    border-right: 1px solid #ccc;
+    /* padding: 20px 5px; */
+    padding: 5px 10px;
+    max-width: 0px;
+    height: 30px;
+    vertical-align: baseline;
+    box-sizing: border-box;
+}
+
+.cont>>>table th {
+    border-bottom: 2px solid #ccc;
+    text-align: center;
+}
+
+/* blockquote 样式 */
+.cont>>>blockquote {
+    display: block;
+    border-left: 8px solid #d0e5f2;
+    padding: 5px 10px;
+    margin: 10px 0;
+    line-height: 1.4;
+    font-size: 100%;
+    background-color: #f1f1f1;
+}
+
+/* code 样式 */
+.cont>>>code {
+    display: inline-block;
+    /* *display: inline; */
+    zoom: 1;
+    background-color: #f1f1f1;
+    border-radius: 3px;
+    padding: 3px 5px;
+    margin: 0 3px;
+}
+
+.cont>>>pre code {
+    display: block;
+}
+
+/* ul ol 样式 */
+.cont>>>ul,
+ol {
+    margin: 10px 0 10px 20px;
+}
+
+
+.i_course_c_body>>>img {
+    max-width: 100%;
+}
+</style>

+ 4 - 5
src/components/pages/testStudent/index.vue

@@ -96,19 +96,18 @@
             <div class="test_time">
               <span><span>修改日期</span></span><span>{{ item.utime }}</span>
             </div>
-            <div class="test_time tset_type">
+            <div class="test_time tset_type" v-if="typeArray.length">
               <span><span>类型</span></span>
               <span v-if="!item.typeN">未设置类型</span>
               <span v-else>{{ item.typeN }}</span>
             </div>
-            <div class="test_time tset_type">
+            <!-- <div class="test_time tset_type">
               <span><span>分类</span></span>
               <span v-if="!item.typename">未设置分类</span>
               <el-tooltip :content="item.typename" placement="top" effect="dark" v-else>
-                <!-- content to trigger tooltip here -->
                 <span>{{ item.typename }}</span>
               </el-tooltip>
-            </div>
+            </div> -->
             <div class="test_btn">
               <div class="test_o_btn">
               </div>
@@ -772,7 +771,7 @@ export default {
   },
   created() {
     this.page = 1;
-    this.selectAllType();
+    // this.selectAllType();
     this.getCourse();
     this.selectTestType();
   },

+ 2 - 0
src/router/index.js

@@ -865,8 +865,10 @@ export default new Router({
         },
         {
             path: '/test',
+            name: 'test',
             component: test,
             meta: {
+                keepAlive: true,
                 requireAuth: '' // 是否需要判断是否登录,这里是需要判断
             }
         },

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません