瀏覽代碼

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

zengyicheng 1 年之前
父節點
當前提交
a93f85bcba

+ 1 - 1
dist/index.html

@@ -25,7 +25,7 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.9988a895e41209522734a10fb722e58d.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.f4313154be2b51e16fef.js></script><script type=text/javascript src=./static/js/app.8389caeab5cf44cb3e6f.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.9244599b68c016c3199a8545e5d7ff1a.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.f4313154be2b51e16fef.js></script><script type=text/javascript src=./static/js/app.a30f9a1747dde9fe2ba0.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.9244599b68c016c3199a8545e5d7ff1a.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.9244599b68c016c3199a8545e5d7ff1a.css.map


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.9988a895e41209522734a10fb722e58d.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.9988a895e41209522734a10fb722e58d.css.map


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.a30f9a1747dde9fe2ba0.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.a30f9a1747dde9fe2ba0.js.map


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/manifest.3512a67a6213c2df4180.js.map


+ 5 - 0
src/App.vue

@@ -12,6 +12,7 @@
         $route.path != '/courseGM' &&
         $route.path != '/course/addCourseGM' &&
         $route.path != '/dataGM',
+      testBg: $route.path == '/test'
     }"
   >
     <!-- <div class="app_head" :class="{stuWidth:$route.path == '/student'}"> -->
@@ -399,6 +400,10 @@ html::-webkit-scrollbar-thumb {
   background: rgb(184, 181, 202) !important;
 }
 
+.testBg{
+  background: #f0f2f5;
+}
+
 .cancelbtnGM:focus,
 .cancelbtnGM:hover {
   color: rgb(92, 84, 159) !important;

二進制
src/assets/icon/test/test_list.png


二進制
src/assets/icon/test/test_list_active.png


二進制
src/assets/icon/test/test_search.png


二進制
src/assets/icon/test/test_table.png


二進制
src/assets/icon/test/test_table_active.png


+ 25 - 3
src/components/pages/EnglishVoice/component/component/testRole.vue

@@ -1,7 +1,7 @@
 <template>
     <el-dialog title="对话测试" width="400px" :visible.sync="dataDialog" :append-to-body="true" :before-close="handleClose"
         class="dialog_diy">
-        <div v-loading="isloading">
+        <div>
             <div class="dialog_content">
                 <div class="dialog" v-for="(item, index) in answerArray" :key="index" :class="{ dialog_right: item.isY }">
                     <div class="d_img">
@@ -17,9 +17,11 @@
                     </div>
                 </div>
             </div>
-            <div class="dialog_answer">
+            <div class="dialog_answer" v-loading="isloading">
                 <span v-if="isRecord">正在录音中,再次点击话筒停止录音...</span>
-                <img @click="startRecorder" src="../../../../../assets/icon/englishVoice/icon_voice.png" alt="">
+                <!-- -->
+                <img src="../../../../../assets/icon/englishVoice/icon_voice.png" alt=""  @click="startRecorder">
+                <input type="file" style="display: none;" @change="fileChange">
             </div>
             <iframe allow="camera *; microphone *;display-capture;midi;encrypted-media;"
                 src="https://beta.cloud.cocorobo.cn/browser/public/index.html" ref="iiframe"></iframe>
@@ -168,7 +170,27 @@ export default {
                 console.log("onplayend");
             };
         },
+        addImg(e) {
+            var el = e.currentTarget.parentElement;
+            el.getElementsByTagName("input")[0].click();
+            e.target.value = "";
+        },
+        fileChange(event) {
+            let audioFile = event.target
+            console.log(audioFile.files[0]);
+            let iiframe = this.$refs['iiframe']
+            // iiframe.contentWindow.doPronunciationAssessmentOnceAsync('', { files: [audioFile] })
+            let _this = this
+            window.onRecognizing = function (e) {
+                console.log('onRecognizedResult', e);
+                let privText = e.privText
+                // e.privText 
+                // JSON.parse(e.privJson).NBest[0].PronunciationAssessment
 
+                _this.beforeUpload1(audioFile.files[0], 3, privText);
+            }
+            iiframe.contentWindow.doContinuousPronunciationAssessment('', audioFile)
+        },
         /**
          * 文件格式转换 wav-map3
          * */

+ 131 - 0
src/components/pages/test/data/pie1.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="data_body">
+        <div style="width: 100%; height: 100%">
+            <div id="charts_canvas" class="echart" style="width: 100%; height: 100%"></div>
+        </div>
+    </div>
+</template>
+  
+<script>
+export default {
+    props: {
+        loginArray: {
+            type: Array
+        },
+    },
+    data() {
+        return {
+            chartObj: null,
+            ooption: {
+                xdata: [],
+                type: [],
+            },
+            option: {
+                tooltip: {
+                    trigger: 'item'
+                },
+                series: [
+                    {
+                        type: 'pie',
+                        radius: ['80%', '100%'],
+                        avoidLabelOverlap: false,
+                        itemStyle: {
+                            borderRadius: 10,
+                            borderColor: '#fff',
+                            borderWidth: 2
+                        },
+                        label: {
+                            show: false,
+                            position: 'center',
+                            formatter: '{b}\n{c}'
+                        },
+                        emphasis: {
+                            label: {
+                                show: true,
+                                fontSize: 25,
+                                formatter: '{c}'
+                            }
+                        },
+                        labelLine: {
+                            show: false
+                        },
+                        hoverOffset: 0, // 设置鼠标悬停时不放大
+                        data: [
+                            { value: 10, name: '进行中', itemStyle: { normal: { color: '#3673e8' } } },
+                            { value: 8, name: '未发布', itemStyle: { normal: { color: '#61b8ff' } } },
+                            { value: 6, name: '已完成', itemStyle: { normal: { color: '#96d8a8' } } },
+                            { value: 7, name: '逾期', itemStyle: { normal: { color: '#f5b763' } } },
+                        ]
+                    }
+                ]
+            },
+        };
+    },
+    methods: {
+        setChart(array) {
+            // 雷达图显示的标签
+            let newPromise = new Promise((resolve) => {
+                resolve();
+            });
+            //然后异步执行echarts的初始化函数
+            newPromise.then(() => {
+                const chartObj = this.$echarts.init(
+                    this.$el.querySelector("#charts_canvas")
+                );
+                //   this.option.series[0].data = array;
+                // 初始化雷达图
+                this.chartObj = chartObj;
+                this.chartObj.setOption(this.option);
+            });
+        },
+        setJson(array) {
+            this.ooption = {
+                xdata: [],
+                sdata: [],
+                max: 0
+            }
+
+            if (!this.chartObj) {
+                this.setChart(array);
+            } else {
+                this.option.series[0].data = array;
+                this.chartObj.setOption(this.option);
+            }
+        }
+    },
+    watch: {
+        loginArray: {
+            immediate: true,
+            deep: true,
+            handler(newValue, oldValue) {
+                this.setJson(newValue)
+                this.$forceUpdate();
+            },
+        },
+    },
+    mounted() {
+        this.setJson(this.loginArray)
+        var _this = this;
+        window.addEventListener("resize", () => {
+            if (_this.chartObj) {
+                _this.chartObj.resize();
+            }
+        });
+    },
+};
+</script>
+  
+<style scoped>
+.data_body {
+    height: 100%;
+    /* display: flex; */
+    position: relative;
+    border-radius: 5px;
+    /* border: 1px solid #eee; */
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 0;
+    width: 100%;
+    /* background: #fff; */
+}
+</style>

+ 131 - 0
src/components/pages/test/data/pie2.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="data_body">
+        <div style="width: 100%; height: 100%">
+            <div id="charts_canvas" class="echart" style="width: 100%; height: 100%"></div>
+        </div>
+    </div>
+</template>
+  
+<script>
+export default {
+    props: {
+        loginArray: {
+            type: Array
+        },
+    },
+    data() {
+        return {
+            chartObj: null,
+            ooption: {
+                xdata: [],
+                type: [],
+            },
+            option: {
+                tooltip: {
+                    trigger: 'item'
+                },
+                series: [
+                    {
+                        type: 'pie',
+                        radius: ['80%', '100%'],
+                        avoidLabelOverlap: false,
+                        itemStyle: {
+                            borderRadius: 10,
+                            borderColor: '#fff',
+                            borderWidth: 2
+                        },
+                        label: {
+                            show: false,
+                            position: 'center',
+                            formatter: '{b}\n{c}'
+                        },
+                        emphasis: {
+                            label: {
+                                show: true,
+                                fontSize: 25,
+                                formatter: '{c}'
+                            }
+                        },
+                        labelLine: {
+                            show: false
+                        },
+                        hoverOffset: 0, // 设置鼠标悬停时不放大
+                        data: [
+                            { value: 10, name: '未完成', itemStyle: { normal: { color: '#3673e8' } } },
+                            { value: 8, name: '进行中', itemStyle: { normal: { color: '#61b8ff' } } },
+                            { value: 6, name: '已完成', itemStyle: { normal: { color: '#96d8a8' } } },
+                            { value: 7, name: '逾期', itemStyle: { normal: { color: '#f5b763' } } },
+                        ]
+                    }
+                ]
+            },
+        };
+    },
+    methods: {
+        setChart(array) {
+            // 雷达图显示的标签
+            let newPromise = new Promise((resolve) => {
+                resolve();
+            });
+            //然后异步执行echarts的初始化函数
+            newPromise.then(() => {
+                const chartObj = this.$echarts.init(
+                    this.$el.querySelector("#charts_canvas")
+                );
+                //   this.option.series[0].data = array;
+                // 初始化雷达图
+                this.chartObj = chartObj;
+                this.chartObj.setOption(this.option);
+            });
+        },
+        setJson(array) {
+            this.ooption = {
+                xdata: [],
+                sdata: [],
+                max: 0
+            }
+
+            if (!this.chartObj) {
+                this.setChart(array);
+            } else {
+                this.option.series[0].data = array;
+                this.chartObj.setOption(this.option);
+            }
+        }
+    },
+    watch: {
+        loginArray: {
+            immediate: true,
+            deep: true,
+            handler(newValue, oldValue) {
+                this.setJson(newValue)
+                this.$forceUpdate();
+            },
+        },
+    },
+    mounted() {
+        this.setJson(this.loginArray)
+        var _this = this;
+        window.addEventListener("resize", () => {
+            if (_this.chartObj) {
+                _this.chartObj.resize();
+            }
+        });
+    },
+};
+</script>
+  
+<style scoped>
+.data_body {
+    height: 100%;
+    /* display: flex; */
+    position: relative;
+    border-radius: 5px;
+    /* border: 1px solid #eee; */
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 0;
+    width: 100%;
+    /* background: #fff; */
+}
+</style>

+ 135 - 0
src/components/pages/test/data/randar1.vue

@@ -0,0 +1,135 @@
+<template>
+    <div class="data_body">
+        <div style="width: 100%; height: 100%">
+            <div id="charts_canvas" class="echart" style="width: 100%; height: 100%"></div>
+        </div>
+    </div>
+</template>
+  
+<script>
+export default {
+    props: {
+        loginArray: {
+            type: Array
+        },
+    },
+    data() {
+        return {
+            chartObj: null,
+            ooption: {
+                xdata: [],
+                type: [],
+            },
+            option: {
+                tooltip: {},
+                radar: {
+                    indicator: [
+                        { name: '煜煜星光', max: 100 },
+                        { name: '个人写真', max: 100 },
+                        { name: '明灯导航', max: 100 },
+                        { name: '教师耕耘', max: 100 },
+                        { name: '其他', max: 100 }
+                    ],
+                    axisName: {
+                        color: '#000',
+                        fontSize: 12
+                    },
+                    radius: ['0%', '70%'],
+                    center: ['50%', '55%'],
+                    nameGap: 5,
+                },
+                series: [
+                    {
+                        name: '综合平均分',
+                        type: 'radar',
+                        data: [
+                            {
+                                value: [86, 76, 35, 85, 80, 86],
+                                itemStyle: {
+                                    color: '#3673E8' // 设置数据点的颜色
+                                },
+                                lineStyle: {
+                                    normal: {
+                                        color: '#3673E8' // 
+                                    }
+                                },
+                                areaStyle: {
+                                    normal: {
+                                        color: '#3673E833' // 
+                                    }
+                                }
+                            }
+                        ]
+                    }
+                ]
+            },
+        };
+    },
+    methods: {
+        setChart(array) {
+            // 雷达图显示的标签
+            let newPromise = new Promise((resolve) => {
+                resolve();
+            });
+            //然后异步执行echarts的初始化函数
+            newPromise.then(() => {
+                const chartObj = this.$echarts.init(
+                    this.$el.querySelector("#charts_canvas")
+                );
+                //   this.option.series[0].data = array;
+                // 初始化雷达图
+                this.chartObj = chartObj;
+                this.chartObj.setOption(this.option);
+            });
+        },
+        setJson(array) {
+            this.ooption = {
+                xdata: [],
+                sdata: [],
+                max: 0
+            }
+
+            if (!this.chartObj) {
+                this.setChart(array);
+            } else {
+                this.option.series[0].data = array;
+                this.chartObj.setOption(this.option);
+            }
+        }
+    },
+    watch: {
+        loginArray: {
+            immediate: true,
+            deep: true,
+            handler(newValue, oldValue) {
+                this.setJson(newValue)
+                this.$forceUpdate();
+            },
+        },
+    },
+    mounted() {
+        this.setJson(this.loginArray)
+        var _this = this;
+        window.addEventListener("resize", () => {
+            if (_this.chartObj) {
+                _this.chartObj.resize();
+            }
+        });
+    },
+};
+</script>
+  
+<style scoped>
+.data_body {
+    height: 100%;
+    /* display: flex; */
+    position: relative;
+    border-radius: 5px;
+    /* border: 1px solid #eee; */
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 0;
+    width: 100%;
+    /* background: #fff; */
+}
+</style>

+ 138 - 0
src/components/pages/test/data/randar2.vue

@@ -0,0 +1,138 @@
+<template>
+    <div class="data_body">
+        <div style="width: 100%; height: 100%">
+            <div id="charts_canvas" class="echart" style="width: 100%; height: 100%"></div>
+        </div>
+    </div>
+</template>
+  
+<script>
+export default {
+    props: {
+        loginArray: {
+            type: Array
+        },
+    },
+    data() {
+        return {
+            chartObj: null,
+            ooption: {
+                xdata: [],
+                type: [],
+            },
+            option: {
+                tooltip: {},
+                radar: {
+                    indicator: [
+                        { name: '煜煜星光', max: 100 },
+                        { name: '个人写真', max: 100 },
+                        { name: '明灯导航', max: 100 },
+                        { name: '教师耕耘', max: 100 },
+                        { name: '其他', max: 100 }
+                    ],
+                    axisName: {
+                        color: '#000'
+                    },
+                    axisName: {
+                        color: '#000',
+                        fontSize: 12
+                    },
+                    radius: ['0%', '70%'],
+                    center: ['50%', '55%'],
+                    nameGap: 5,
+                },
+                series: [
+                    {
+                        name: '综合平均分',
+                        type: 'radar',
+                        data: [
+                            {
+                                value: [86, 76, 35, 85, 80, 86],
+                                itemStyle: {
+                                    color: '#F5B763' // 设置数据点的颜色
+                                },
+                                lineStyle: {
+                                    normal: {
+                                        color: '#F5B763' // 
+                                    }
+                                },
+                                areaStyle: {
+                                    normal: {
+                                        color: '#F5B76333' // 
+                                    }
+                                }
+                            }
+                        ]
+                    }
+                ]
+            },
+        };
+    },
+    methods: {
+        setChart(array) {
+            // 雷达图显示的标签
+            let newPromise = new Promise((resolve) => {
+                resolve();
+            });
+            //然后异步执行echarts的初始化函数
+            newPromise.then(() => {
+                const chartObj = this.$echarts.init(
+                    this.$el.querySelector("#charts_canvas")
+                );
+                //   this.option.series[0].data = array;
+                // 初始化雷达图
+                this.chartObj = chartObj;
+                this.chartObj.setOption(this.option);
+            });
+        },
+        setJson(array) {
+            this.ooption = {
+                xdata: [],
+                sdata: [],
+                max: 0
+            }
+
+            if (!this.chartObj) {
+                this.setChart(array);
+            } else {
+                this.option.series[0].data = array;
+                this.chartObj.setOption(this.option);
+            }
+        }
+    },
+    watch: {
+        loginArray: {
+            immediate: true,
+            deep: true,
+            handler(newValue, oldValue) {
+                this.setJson(newValue)
+                this.$forceUpdate();
+            },
+        },
+    },
+    mounted() {
+        this.setJson(this.loginArray)
+        var _this = this;
+        window.addEventListener("resize", () => {
+            if (_this.chartObj) {
+                _this.chartObj.resize();
+            }
+        });
+    },
+};
+</script>
+  
+<style scoped>
+.data_body {
+    height: 100%;
+    /* display: flex; */
+    position: relative;
+    border-radius: 5px;
+    /* border: 1px solid #eee; */
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 0;
+    width: 100%;
+    /* background: #fff; */
+}
+</style>

+ 404 - 164
src/components/pages/test/index.vue

@@ -1,170 +1,193 @@
 <template>
-    <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
-        <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
+    <div class="pb_content" style="height: auto; width: calc(100% - 40px); margin: 0 auto;background: unset;">
+        <div style="width:100%;padding:0;box-sizing: border-box;">
             <div class="pb_head top">
                 <div style="display: flex;align-items: center;">
                     <span class="sub_head">表单管理</span>
+                    <!--  -->
                     <span class="subClick" v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'" @click="
                         goTo(
-                        '/trainCourse?userid=' +
-                        userid +
-                        '&oid=' +
-                        oid +
-                        '&org=' +
-                        org +
-                        '&role=' +
-                        role
+                            '/trainCourse?userid=' +
+                            userid +
+                            '&oid=' +
+                            oid +
+                            '&org=' +
+                            org +
+                            '&role=' +
+                            role
                         )
                         ">培训管理</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>
-
             </div>
-            <div class="student_head">
-                <div class="choose">
-                    <!-- <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
-                        <span v-if="CourseTypeJson[item.id].length">{{ item.name }}</span>
-                        <el-select v-if="CourseTypeJson[item.id].length" v-model="courseTypeId[item.id]" placeholder="请选择"
-                            @change="getTypeName">
-                            <el-option label="全部" value="1">全部</el-option>
-                            <el-option v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.name"
-                                :value="item1.id">
-                            </el-option>
-                        </el-select>
-                    </div> -->
-                    <div class="student_search" v-if="typeArray.length">
-                        <span>类型</span>
-                        <el-select v-model="typeCheck" placeholder="请选择" clearable @change="search">
-                            <el-option v-for="(item, index) in typeArray" :key="index" :label="item.name"
-                                :value="item.id"></el-option>
-                        </el-select>
+        </div>
+        <div class="bbox_nav">
+            <span class="active">个人总览</span>
+        </div>
+        <div class="bbox">
+            <div class="test_data_box">
+                <div class="data_box">
+                    <div class="left">
+                        <div class="title">表单状态总览</div>
+                        <div class="box">
+                            <span class="color1">{{ 10 }}个进行中</span>
+                            <span class="color2">{{ 8 }}个未发布</span>
+                            <span class="color3">{{ 6 }}个已完成</span>
+                            <span class="color4">{{ 7 }}个逾期</span>
+                        </div>
                     </div>
-                    <div class="student_search" style="width:100px">
-                        <!-- <span></span> -->
-                        <el-select v-model="groupA" @change="search">
-                            <el-option value="0" label="我的"></el-option>
-                            <el-option value="2" label="他人"></el-option>
-                            <el-option value="4" label="所有人"></el-option>
-                        </el-select>
+                    <div class="right">
+                        <pie-1></pie-1>
                     </div>
-                    <div @click="clear" class="clear" v-if="CourseType.length">重置</div>
                 </div>
-
-                <div class="student_right" >
-                    <div class="head_left">
-                        <el-input v-model="courseName" class="student_input" placeholder="请输入项目名称"></el-input>
-                        <el-button class="course_button" @click="searchCourse">查询</el-button>
+                <div class="data_box">
+                    <div class="left">
+                        <div class="title">教师完成情况</div>
+                        <div class="box">
+                            <span class="color1">{{ 10 }}个未完成</span>
+                            <span class="color2">{{ 8 }}个进行中</span>
+                            <span class="color3">{{ 6 }}个已完成</span>
+                            <span class="color4">{{ 7 }}个逾期</span>
+                        </div>
+                    </div>
+                    <div class="right">
+                        <pie-2></pie-2>
+                    </div>
+                </div>
+                <div class="data_box">
+                    <div class="left">
+                        <div class="title">综合平均分</div>
+                        <div class="box2">
+                            <span>{{ 85 }}</span>
+                        </div>
+                    </div>
+                    <div class="right">
+                        <randar-1></randar-1>
+                    </div>
+                </div>
+                <div class="data_box">
+                    <div class="left">
+                        <div class="title">逾期情况</div>
+                        <div class="box2">
+                            <span>{{ 12 }}%</span>
+                        </div>
+                    </div>
+                    <div class="right">
+                        <randar-2></randar-2>
                     </div>
                 </div>
             </div>
-        </div>
-
-        <div class="pb_content_body" style="height: 100%;width: 100%;">
-            <div class="student_table" v-loading="isLoading">
-                <div class="course_box">
-                    <!-- <div class="out_box" v-for="(item, index) in course" :key="index">
-                        <div class="myCourse" v-if="item.userid == userid">
-                            我的项目
+            <div class="search_nav">
+                <div class="right">
+                    <span :class="{active: stype == 1}">按问卷查看</span>
+                    <!-- <span :class="{active: stype == 2}">按人员查看</span> -->
+                </div>
+                <div class="left">
+                    <span class="list" :class="{active: stype == 1}"></span>
+                    <!-- <span class="table" :class="{active: stype == 2}"></span> -->
+                </div>
+            </div>
+            <div style="width: calc(100% - 20px);margin: 0 auto;">
+                <div class="student_head">
+                    <div class="choose">
+                        <div class="student_search" v-if="typeArray.length">
+                            <el-select v-model="typeCheck" placeholder="请选择类型" clearable @change="search">
+                                <el-option v-for="(item, index) in typeArray" :key="index" :label="item.name"
+                                    :value="item.id"></el-option>
+                            </el-select>
                         </div>
-                        <div class="myCourse" style="background:#4187f0" v-else-if="!item.course_teacher ||
-                            (item.course_teacher &&
-                                item.course_teacher.indexOf(userid) == -1)">
-                            他人项目
+                        <div class="student_search" style="width:100px">
+                            <!-- <span></span> -->
+                            <el-select v-model="groupA" @change="search">
+                                <el-option value="0" label="我的"></el-option>
+                                <el-option value="2" label="他人"></el-option>
+                                <el-option value="4" label="所有人"></el-option>
+                            </el-select>
                         </div>
-                        <div class="xtCourse" v-else>协同项目</div>
-                       
-                        <div class="bottom_box">
-                            <div>
-                                <el-tooltip :content="item.title" placement="top" effect="dark">
-                                    <span>{{ item.title }}</span>
+                        <div @click="clear" class="clear" v-if="CourseType.length">重置</div>
+                    </div>
+
+                    <div class="student_right">
+                        <div class="head_left">
+                            <div style="margin-right: 10px;position: relative;">
+                                <el-input v-model="courseName" class="student_input" placeholder="请输入项目名称"></el-input>
+                                <span class="serach_icon" @click="searchCourse"></span>
+                            </div>
+                            <!-- <el-button type="primary" @click="searchCourse">查询</el-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>
+                    </div>
+                </div>
+            </div>
+            <div class="pb_content_body" style="height: 100%;width: 100%;">
+                <div class="student_table" v-loading="isLoading">
+                    <div class="course_box">
+                        <div class="test_box" v-for="(item, index) in course" :key="index">
+                            <div class="test_top">
+                                <div class="test_top_img" v-if="!item.typeN"></div>
+                                <el-tooltip :content="item.typeN" placement="top" effect="dark" v-else>
+                                    <div class="test_top_img"
+                                        :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', js: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223', bj: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355c' }">
+                                    </div>
                                 </el-tooltip>
-                                <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
+                                <div class="test_top_title">
+                                    <span>{{ item.title }}</span>
+                                    <!-- <span>创建人:{{ item.uname }}</span> -->
+                                    <span>提交数量:{{ item.worksCount }}</span>
+                                </div>
                             </div>
-                            <div class="kc_t">
-                                创建人:{{ item.uname }}
+                            <div class="test_time">
+                                <span><span>创建人</span></span><span>{{ item.uname }}</span>
                             </div>
-                            <div class="kc_time">
-                                <span style="color: #4b4b4b">创建日期:</span>{{ item.time }}
+                            <div class="test_time">
+                                <span><span>创建日期</span></span><span>{{ item.time }}</span>
                             </div>
-                            <div class="kc_time">
-                                <span style="color: #4b4b4b">修改日期:</span>{{ item.utime }}
+                            <div class="test_time">
+                                <span><span>修改日期</span></span><span>{{ item.utime }}</span>
                             </div>
-                        </div>
-                        <div class="three_bottom">
-                            <div @click="goToCourse2(item.courseId)" v-if="((item.userid == userid) ||
-                                (item.course_teacher &&
-                                    item.course_teacher.indexOf(userid) !== -1) || role == '1')">编辑</div>
-                            <div @click="checkToTest(item.courseId)">查看</div>
-                            <div @click="deleteCourse(item.courseId)">删除</div>
-                        </div>
-                    </div> -->
-                    <div class="test_box" v-for="(item, index) in course" :key="index">
-                        <div class="test_top">
-                            <div class="test_top_img" v-if="!item.typeN"></div>
-                            <el-tooltip :content="item.typeN" placement="top" effect="dark" v-else>
-                                <div class="test_top_img"
-                                    :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', js: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223', bj: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355c' }">
-                                </div>
-                            </el-tooltip>
-                            <div class="test_top_title">
-                                <span>{{ item.title }}</span>
-                                <!-- <span>创建人:{{ item.uname }}</span> -->
-                                <span>提交数量:{{ item.worksCount }}</span>
+                            <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>
-                        <div class="test_time">
-                            <span><span>创建人</span></span><span>{{ item.uname }}</span>
-                        </div>
-                        <div class="test_time">
-                            <span><span>创建日期</span></span><span>{{ item.time }}</span>
-                        </div>
-                        <div class="test_time">
-                            <span><span>修改日期</span></span><span>{{ item.utime }}</span>
-                        </div>
-                        <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>
                                 <span>{{ item.typename }}</span>
                             </el-tooltip>
                         </div> -->
-                        <div class="test_btn">
-                            <div class="test_o_btn">
-                                <el-tooltip content="编辑" placement="top" effect="dark">
-                                    <span class="edit" @click="goToCourse2(item.courseId)" v-if="((item.userid == userid) ||
-                                        (item.course_teacher &&
-                                            item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
-                                </el-tooltip>
-                                <el-tooltip class="check" content="查看" placement="top" effect="dark">
-                                    <span @click="checkToTest(item.courseId)"></span>
-                                </el-tooltip>
-                                <el-tooltip class="delete" content="删除" placement="top" effect="dark">
-                                    <span @click="deleteCourse(item.courseId)" v-if="((item.userid == userid) ||
-                                        (item.course_teacher &&
-                                            item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
-                                </el-tooltip>
-                            </div>
-                            <div class="test_type" :class="{ no: item.look == '1', is: item.look == '2' }">
-                                <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
+                            <div class="test_btn">
+                                <div class="test_o_btn">
+                                    <el-tooltip content="编辑" placement="top" effect="dark">
+                                        <span class="edit" @click="goToCourse2(item.courseId)" v-if="((item.userid == userid) ||
+                                            (item.course_teacher &&
+                                                item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
+                                    </el-tooltip>
+                                    <el-tooltip class="check" content="查看" placement="top" effect="dark">
+                                        <span @click="checkToTest(item.courseId)"></span>
+                                    </el-tooltip>
+                                    <el-tooltip class="delete" content="删除" placement="top" effect="dark">
+                                        <span @click="deleteCourse(item.courseId)" v-if="((item.userid == userid) ||
+                                            (item.course_teacher &&
+                                                item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
+                                    </el-tooltip>
+                                </div>
+                                <div class="test_type" :class="{ no: item.look == '1', is: item.look == '2' }">
+                                    <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
+                                </div>
                             </div>
                         </div>
+                        <div class="course_empty" v-if="course.length == 0">暂无数据</div>
                     </div>
-                    <div class="course_empty" v-if="course.length == 0">暂无数据</div>
                 </div>
             </div>
-        </div>
-        <div class="student_page">
-            <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
-                v-if="page && course.length" style="padding-bottom: 20px"
-                @current-change="handleCurrentChange"></el-pagination>
+            <div class="student_page">
+                <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
+                    v-if="page && course.length" style="padding: 0 0 20px 0;"
+                    @current-change="handleCurrentChange"></el-pagination>
+            </div>
         </div>
         <el-dialog :visible.sync="dialogVisible1" size="tiny">
             <img width="100%" :src="dialogImageUrl" alt />
@@ -230,9 +253,13 @@
 import "../../../common/aws-sdk-2.235.1.min";
 import EditorBar from "../../../components/tools/wangEnduit";
 import CourseProblem from "../components/courseProblem";
+import pie2 from "./data/pie2.vue";
+import pie1 from "./data/pie1.vue";
+import randar1 from "./data/randar1.vue";
+import randar2 from "./data/randar2.vue";
 export default {
-    name:'test',
-    components: { EditorBar, CourseProblem },
+    name: 'test',
+    components: { EditorBar, CourseProblem, pie1, pie2, randar1, randar2 },
     data() {
         return {
             itemCount: 1,
@@ -279,6 +306,8 @@ export default {
             courseTeam: [],
             typeArray: [],
             typeCheck: "",
+            stype: 1,
+            stype2: 2,
         };
     },
     methods: {
@@ -388,7 +417,7 @@ export default {
         get(cid) {
             window.parent.postMessage({ cid: cid, screenType: "3s" }, "*");
         },
-        openTestDataBoard(){
+        openTestDataBoard() {
             window.parent.postMessage({ tools: "dataBoardTest" }, "*");
         },
         getA(cid) {
@@ -788,7 +817,7 @@ export default {
                 });
         }
     },
-    activated(){
+    activated() {
         console.log(1);
         this.selectAllType();
         this.getCourse();
@@ -878,7 +907,7 @@ export default {
     align-items: baseline;
     flex-direction: row;
     flex-wrap: wrap;
-    padding: 0 0 15px;
+    padding: 0 0 0;
 }
 
 .top {
@@ -928,6 +957,8 @@ export default {
     height: 100%;
     /* overflow: auto; */
     min-height: 360px;
+    width: calc(100% - 20px);
+    margin: 0 auto;
 }
 
 .student_empty {
@@ -988,8 +1019,10 @@ export default {
 }
 
 .student_page {
-    width: 100%;
+    width: calc(100% - 20px);
     margin: 0 auto;
+    display: flex;
+    justify-content: flex-end;
 }
 
 .course_create_box {
@@ -1217,9 +1250,13 @@ export default {
 }
 
 .choose>div {
-    margin-left: 10px;
+    /* margin-left: 10px; */
     width: 180px;
-    margin-top: 15px;
+    /* margin-top: 15px; */
+}
+
+.choose>div +div{
+    margin-left: 10px;
 }
 
 .choose>.clear {
@@ -1326,6 +1363,7 @@ export default {
     padding: 20px;
     margin: 5px 15px 10px 0;
     box-sizing: border-box;
+    border: 1px solid #e7e7e7;
 }
 
 .test_box:nth-child(5n) {
@@ -1437,14 +1475,15 @@ export default {
 }
 
 
-.test_box>.test_time>span:nth-child(1) > span{
-  width: 100%;
-  text-align-last: justify;
+.test_box>.test_time>span:nth-child(1)>span {
+    width: 100%;
+    text-align-last: justify;
 }
 
-.test_box>.test_time>span:nth-child(1)::after{
+.test_box>.test_time>span:nth-child(1)::after {
     content: ':';
 }
+
 .test_box>.test_time>span:nth-child(2) {
     width: calc(100% - 70px);
     overflow: hidden;
@@ -1506,37 +1545,238 @@ export default {
 }
 
 .sub_head {
-  position: relative;
+    position: relative;
+    font-size: 20px;
+    font-weight: bold;
+    padding: 0 15px;
 }
 
 .sub_head::after {
-  content: "";
-  width: 100%;
-  background: #5a9cea;
-  height: 2px;
-  position: absolute;
-  left: 0;
-  bottom: -10px;
+    content: "";
+    width: 100%;
+    background: #3681FC;
+    height: 2px;
+    position: absolute;
+    left: 0;
+    bottom: -8px;
 }
 
 .subClick {
-  /* font-size: 16px; */
-  font-size: 26px;
-  cursor: pointer;
-  /* margin-left: 17.5px; */
-  /* color: #ab582f; */
-  /* color: #409eff; */
-  color: #999;
+    /* font-size: 16px; */
+    font-size: 20px;
+    cursor: pointer;
+    /* margin-left: 17.5px; */
+    /* color: #ab582f; */
+    /* color: #409eff; */
+    color: #999;
+    padding: 0 15px;
 }
 
 .subClick:hover {
-  color: #000;
+    color: #000;
+}
+
+.sub_head+.subClick,
+.subClick+.subClick,
+.subClick+.sub_head {
+    margin-left: 17.5px;
+}
+.bbox_nav{
+    width: 100%;
+    display: flex;
+    align-items: center;
+    margin-top: 10px;
+}
+.bbox_nav > span{
+    height: 40px;
+    line-height: 40px;
+    text-align: center;
+    background: #e0eafb;
+    font-size: 18px;
+    color: #41506D;
+    padding: 0 35px;
+    border-radius: 5px 5px 0 0 ;
+}
+.bbox_nav > .active{
+    background: #3681fc;
+    color: #fff;
+}
+.bbox{
+    background: #fff;
+    border-radius: 0 5px 5px 5px;
+    padding: 15px 0;
+    box-sizing: border-box;
+}
+
+.search_nav{
+    border-bottom: 1px solid #E7E7E7;
+    width: 100%;
+    box-sizing: border-box;
+    padding: 0 15px;
+    display: flex;
+    align-items: center;
+}
+.search_nav > .right{
+    display: flex;
+    align-items: center;
+}
+.search_nav > .right > span{
+    height: 30px;
+    font-size: 14px;
+    color: #000;
+    cursor: pointer;
+    position: relative;
+}
+.search_nav > .right > span + span{
+    margin-left: 35px;
+}
+.search_nav > .right > span.active{
+    color: #3681FC;
+    font-weight: 600;
+}
+.search_nav > .right > span.active::before{
+    content: "";
+    position: absolute;
+    bottom: 0;
+    width: 15px;
+    height: 3px;
+    background: #3681fc;
+    left: 50%;
+    transform: translateX(-50%);
+}
+.search_nav > .left{
+    display: flex;
+    align-items: center;
+    margin-left: auto;
+}
+
+.search_nav > .left > span{
+    height: 25px;
+    width: 25px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border-radius: 5px;
+    cursor: pointer;
+}
+.search_nav > .left > span + span{
+    margin-left: 10px;
+}
+.search_nav > .left > span.active{
+    background: #E0EAFB;
+}
+.search_nav > .left > span::before{
+    content: "";
+    width: 12px;
+    height: 12px;
+    background-size: 100% 100%;
+}
+.search_nav > .left > span.list::before{
+    background-image: url("../../../assets/icon/test/test_list.png");
+}
+.search_nav > .left > span.table::before{
+    background-image: url("../../../assets/icon/test/test_table.png");
+}
+.search_nav > .left > span.table.active::before{
+    background-image: url("../../../assets/icon/test/test_table_active.png");
+}
+.search_nav > .left > span.list.active::before{
+    background-image: url("../../../assets/icon/test/test_list_active.png");
+}
+
+.serach_icon{
+    position: absolute;
+    right: 12px;
+    top: 50%;
+    transform: translateY(-50%);
+    width: 13px;
+    height: 13px;
+    background: url("../../../assets/icon/test/test_search.png") no-repeat;
+    background-size: 100% 100%;
+    cursor: pointer;
+}
+
+.student_input >>> .el-input__inner{
+    padding-right: 35px;
+}
+
+
+.test_data_box{
+    display: flex;
+    width: calc(100% - 20px);
+    margin: 0 auto 15px;
+    flex-wrap: wrap;
+}
+.test_data_box > .data_box{
+    width: calc(100% / 4 - (45px / 4));
+    height: 150px;
+    border: 1px solid #e7e7e7;
+    border-radius: 5px;
+    box-sizing: border-box;
+    padding: 10px;
+    display: flex;
+    align-items: center;
+}
+
+.test_data_box > .data_box + .data_box{
+    margin-left: 15px;
+}
+.test_data_box > .data_box > .left{
+    /* width: 110px; */
+    min-width: fit-content;
+    height: 100%;
+}
+.test_data_box > .data_box > .left > .title{
+    font-size: 16px;
+    color: #00000099;
+    margin-bottom: 10px;
+}
+.test_data_box > .data_box > .left > .box{
+    display: flex;
+    flex-direction: column;
+    font-size: 14px;
+    height: calc(100% - 30px);
+    justify-content: space-between;
+}
+.test_data_box > .data_box > .left > .box2{
+    display: flex;
+    flex-direction: column;
+    font-size: 30px;
+    font-weight: 600;
+    height: calc(100% - 60px);
+    /* align-items:center; */
+    justify-content: center;
+}
+.test_data_box > .data_box > .left > .box > span{
+    display: flex;
+    align-items: center;
+}
+.test_data_box > .data_box > .left > .box > span::before{
+    content: '';
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    /* background: #000; */
+    margin-right: 5px;
 }
 
-.sub_head + .subClick,
-.subClick + .subClick,
-.subClick + .sub_head{
-  margin-left: 17.5px;
+.test_data_box > .data_box > .left > .box > .color1::before{
+    background: #3673e8;
+}
+.test_data_box > .data_box > .left > .box > .color2::before{
+    background: #61b8ff;
 }
+.test_data_box > .data_box > .left > .box > .color3::before{
+    background: #96d8a8;
+}
+.test_data_box > .data_box > .left > .box > .color4::before{
+    background: #f5b763;
+}
+.test_data_box > .data_box > .right{
+    /* width: calc(100% - 110px); */
+    width: calc(100%);
+    height: 100%;
+}
+
 </style>
   

+ 1 - 1
src/components/pages/trainCourse/course.vue

@@ -17,7 +17,7 @@
               '&role=' +
               role
             )
-            ">资料管理</span>
+            ">表单管理</span>
           <span class="sub_head">培训管理</span>
         </div>
         <div class="student_button">

部分文件因文件數量過多而無法顯示