CrazyIter_Bin 4 роки тому
батько
коміт
02fa3309a8

+ 16 - 5
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue

@@ -94,7 +94,7 @@
                 <svg-icon icon-class="AnsWerDetail" :class="{ ansDetail: !closeAnsDetail, closeAnsDetail: closeAnsDetail,}" />
             </div>
             <br style="clear:both" />
-            <div class="qcontent" v-if="paperData.length">
+            <div class="qcontent" ref="qcontent" v-if="paperData.length">
                     <div class="qcol"
                          v-for="(question, index) in paperData"
                          v-show="checkedAnsFilter(index)"
@@ -149,14 +149,19 @@
                                     </div>
                                     <div class="TitleRec1"><span style="margin:5px;color:#1472c7">作答结果:</span></div>
                                     <br />
-                                    <div v-if="ansData[index]" style="margin-left:10px" v-html="ansData[index][0]"></div>
+                                    <div v-if="ansData[index]" style="margin-left:10px" v-html="ansData[index].length > 0 ? ansData[index][0] : '未作答'">32131{{ansData[index][0]}}</div>
                                 </div>
                             </div>
                             <!--<br />-->
                             <div class="rightAnalys">
+                                <div class="TitleRec2"><span style="margin-left:5px">参考答案:</span></div>
+                                <br />
+                                <div style="display:flex">
+                                    <div v-for="(item,iundex) in question.answer" v-html="item" style="margin-left:10px;"></div>
+                                </div>
                                 <div class="TitleRec2"><span style="margin-left:5px">解析:</span></div>
                                 <br />
-                                <div v-html="question.explain"></div>
+                                <div style="margin-left:10px;" v-html="question.explain != '' ?  question.explain : '暂无解析' "></div>
                             </div>
                         </div>
                     </div>
@@ -323,10 +328,16 @@
                     }
                 }
                this.paperData = [...paper]
-               console.log(this.paperData)
                if (this.paperData.length) {
                    this.ansData = await this.getItem(this.examInfo.stuAns[0])
-                }
+               }
+               this.$nextTick(() => {
+                   window.MathJax.Hub.Queue([
+                       "Typeset",
+                       MathJax.Hub,
+                       this.$refs.qcontent,
+                   ]);
+               });
             },
             getCurrentLang() {
                 return localStorage.getItem('lang');

+ 110 - 481
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue

@@ -137,106 +137,61 @@
                 </ul>
             </div>
             <div class="score-table">
-                <table class="gridtable">
+                <table class="gridtable" v-if="stuScore.length">
                     <tr>
                         <th>科目</th>
                         <th>题号</th>
                         <th>客观题</th>
                         <th>主观题</th>
                     </tr>
-                    <tr>
-                        <td rowspan="4">语文</td>
-                    </tr>
-                    <tr>
-                        <td>题号</td>
-                        <td>
-                            <div class="score-box">
-                                <span>1</span>
-                                <span>2</span>
-                                <span>3</span>
-                                <span>4</span>
-                                <span>5</span>
-                                <span>6</span>
-                                <span>7</span>
-                            </div>
-                        </td>
-                        <td>
-                            <div class="score-box">
-                                <span>1</span>
-                                <span>2</span>
-                                <span>3</span>
-                                <span>4</span>
-                                <span>5</span>
-                                <span>6</span>
-                                <span>7</span>
-                            </div>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>标准答案/配分</td>
-                        <td>
-                            <div class="score-box">
-                                <span> A </span>
-                                <span> B </span>
-                                <span> C </span>
-                                <span> B </span>
-                                <span> D </span>
-                                <span> B </span>
-                                <span> A </span>
-                            </div>
-                        </td>
-                        <td>
-                            <div class="score-box">
-                                <span> A </span>
-                                <span> B </span>
-                                <span> C </span>
-                                <span> B </span>
-                                <span> D </span>
-                                <span> B </span>
-                                <span> A </span>
-                            </div>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>学生作答/得分</td>
-                        <td>
-                            <div class="score-box">
-                                <span> - </span>
-                                <span> - </span>
-                                <span> - </span>
-                                <span> B </span>
-                                <span> - </span>
-                                <span> - </span>
-                                <span> - </span>
-                            </div>
-                        </td>
-                        <td>
-                            <div class="score-box">
-                                <span> - </span>
-                                <span> - </span>
-                                <span> - </span>
-                                <span> B </span>
-                                <span> - </span>
-                                <span> - </span>
-                                <span> - </span>
-                            </div>
-                        </td>
-                    </tr>
+                    <tbody v-for="(que,index) in stuScore" :key="index">
+                        <tr>
+                            <td  width="4%" rowspan="4">{{que.name}}</td>
+                        </tr>
+                        <tr>
+                            <td   width="8%">题号</td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(objQue,obj) in que.item.objItem" :key="obj">{{objQue.paperIndex}}</span>
+                                </div>
+                            </td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(subQue,sub) in que.item.subItem" :key="sub">{{subQue.paperIndex}}</span>
+                                </div>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td  width="8%">标准答案/配分</td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(objAns,obja) in que.item.objItem" :key="obja">{{objAns.answer.length > 1 ? '[?]': objAns.answer[0]}}</span>
+                                </div>
+                            </td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(subAns,suba) in que.item.subItem" :key="suba">{{subAns.score}}</span>
+                                </div>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td width="8%">学生作答/得分</td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(objScore,objs) in que.item.objItem" :key="objs">{{objScore.stuScore == 0 ? objScore.stuAns[0] : '-'}}</span>
+                                </div>
+                            </td>
+                            <td>
+                                <div class="score-box">
+                                    <span v-for="(subScore,subs) in que.item.subItem" :key="subs">{{subScore.stuScore}}</span>
+                                </div>
+                            </td>
+                        </tr>
+                    </tbody>
                 </table>
-                <!--<Table :columns="tableColumn"
-                       :data="data10"
-                       :span-method="handleSpan"
-                       border>
-                    <template slot-scope="{ row,index }" :slot="'qu'+qIndex+1" v-for="(item,qIndex) in testData">
-                        <strong>12</strong>
-                    </template>
-                </Table>
-
-                <Table :columns="tableColumn"
-                       :data="data10"
-                       :show-header="test"
-                       :span-method="handleSpan"
-                       border></Table>-->
+            </div>
+            <div class="score-table">
+                <p style="color:#24b880">【-】--答对,【#】--未作答,【?】--多选题</p>
             </div>
         </div>
     </div>
@@ -244,9 +199,16 @@
 <script>
 
     export default {
+        props: {
+            stuData: {
+                type: Object,
+                default: () => {
+                    return {}
+                }
+            }
+        },
         data() {
             return {
-                test: false,
                 data: {
                     "paperInfo": {
                         "personScore": 483,
@@ -303,329 +265,29 @@
                         }
                     ]
                 },
-                stuData: {
-                    "papers": [
-                        {
-                            "id": "6536240e-09c7-470e-b673-5df58eb52357",
-                            "code": "Exam-hbcn",
-                            "paperId": "79582039-8b71-8daf-4830-0ad48f33c70b",
-                            "paperCode": "Paper-hbcn",
-                            "paperName": "手动挑题测试卷-语文",
-                            "multipleRule": 1,
-                            "scope": "school",
-                            "blob": "/exam/6536240e-09c7-470e-b673-5df58eb52357/paper/79582039-8b71-8daf-4830-0ad48f33c70b"
-                        },
-                        {
-                            "id": "6536240e-09c7-470e-b673-5df58eb52357",
-                            "code": "Exam-hbcn",
-                            "paperId": "df6a8a44-5e85-f6fe-70d3-cb8772374153",
-                            "paperCode": "Paper-hbcn",
-                            "paperName": "手动挑题测试卷-数学",
-                            "multipleRule": 1,
-                            "scope": "school",
-                            "blob": "/exam/6536240e-09c7-470e-b673-5df58eb52357/paper/df6a8a44-5e85-f6fe-70d3-cb8772374153"
-                        }
-                    ],
-                    "subjects": [
-                        {
-                            "id": "4bda9093-ecb2-4bec-a846-1dd04ca0c923",
-                            "name": "语文"
-                        },
-                        {
-                            "id": "ac73f07d-2cc8-4174-85ae-b39cc5b6beef",
-                            "name": "数学"
-                        }
-                    ],
-                    "stuScore": [
-                        [
-                            0,
-                            20,
-                            20,
-                            15,
-                            20
-                        ],
-                        [
-                            0,
-                            0,
-                            0,
-                            -1,
-                            -1,
-                            -1,
-                            -1,
-                            -1
-                        ]
-                    ],
-                    "stuAns": [
-                        [
-                            "https://teammodelstorage.blob.core.chinacloudapi.cn/hbcn/exam%2F6536240e-09c7-470e-b673-5df58eb52357%2F4bda9093-ecb2-4bec-a846-1dd04ca0c923%2Fhabook01%2Fans.json"
-                        ],
-                        [
-                            "https://teammodelstorage.blob.core.chinacloudapi.cn/hbcn/exam%2F6536240e-09c7-470e-b673-5df58eb52357%2Fac73f07d-2cc8-4174-85ae-b39cc5b6beef%2Fhabook01%2Fans.json"
-                        ]
-                    ],
-                    "total": [
-                        1,
-                        2,
-                        2,
-                        0,
-                        0,
-                        5,
-                        0,
-                        0,
-                        0,
-                        0
-                    ]
-                },
-                tableColumn: [],
-                columns: [
-                    {
-                        title: "科目",
-                        key: "name",
-                        align: "center",
-                        width: 100,
-                        fixed: 'left',
-                    },
-                    {
-                        title: "题目",
-                        align: "center",
-                        children: [
-                            {
-                                title: "题号",
-                                key: "age",
-                                align: "center",
-                                width: 150,
-                                fixed: 'left',
-                            },
-                            {
-                                title: "客观题",
-                                align: "center",
-                                children: [],
-                            },
-                            {
-                                title: "主观题",
-                                align: "center",
-                                children: [],
-                            },
-                        ],
-                    },
-                ],
-                columns11: [
-                    {
-                        title: "科目",
-                        key: "name",
-                        align: "center",
-                        width: 100,
-                        fixed: 'left',
-                    },
-                    {
-                        title: "题目",
-                        align: "center",
-                        children: [
-                            {
-                                title: "题号",
-                                key: "age",
-                                align: "center",
-                                width: 150,
-                                sortable: true,
-                            },
-                            {
-                                title: "客观题",
-                                align: "center",
-                                children: [
-                                    {
-                                        title: "1",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "2",
-                                        width: 60,
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "3",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "4",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "5",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "6",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "7",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "8",
-                                        width: 60,
-
-                                        align: "center",
-                                    }, {
-                                        title: "4",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "5",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "6",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "7",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "8",
-                                        width: 60,
-
-                                        align: "center",
-                                    }, {
-                                        title: "4",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "5",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "6",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "7",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                    {
-                                        title: "8",
-                                        width: 60,
-
-                                        align: "center",
-                                    },
-                                ],
-                            },
-                            {
-                                title: "主观题",
-                                align: "center",
-                                children: [
-                                    {
-                                        title: "19",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "19",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    }, {
-                                        title: "9",
-                                        key: "street",
-                                        width: 60,
-                                        align: "center",
-                                    },
-
-                                ],
-                            },
-                        ],
-                    },
-                ],
                 data10: [],
-                mergeLineArr: [],
-                mergeLineIndex: 0,
-                testData: []
+                testData: [],
+                stuScore:[]
             }
         },
-        created() {
-        },
-
         methods: {
-            getPaperData() {
-                if (this.stuData) {
-                    this.getStudentData(this.stuData.papers[0])
+            async getPaperData() {
+                this.stuScore = []
+                if (this.stuData.papers) {
                     for (let i = 0; i < this.stuData.papers.length; i++) {
                         let subData = {}
                         subData.name = this.stuData.subjects[i].name
-                        subData.title = '标准答案/配分'
-
-
+                        subData.item = await this.getStudentData(this.stuData.papers[i], this.stuData.stuScore[i], this.stuData.stuAns[i])
+                        this.stuScore.push(subData)
                     }
                 }
             },
-            async getStudentData(data) {
-
+            async getStudentData(data,score,ans) {
                 let paper = []
-                this.tableColumn = [...this.columns]
+                let item = {
+                    objItem: [],
+                    subItem: [],
+                }
                 if (data !== undefined) {
                     let key = data.code.split('-')
                     let code = {
@@ -634,26 +296,36 @@
                         blob: data.blob
                     }
                     let papers = await this.$evTools.getStuPaper(code)
+                    let answer = await this.getItem(ans)
                     paper = await this.formPaper(papers)
                     this.testData = paper
-                    //for (let i = 0; i < 2; i++) {
-                    //    //let que = {
-                    //    //    title: paper[i].paperIndex,
-                    //    //    slot: "qu" + i,
-                    //    //    align: "center",
-                    //    //    width: 280,
-                    //    //};
-                    //    //if (paper[i].type == 'single' || paper[i].type == 'judge' || paper[i].type == 'multiple') {
-                    //    //    this.tableColumn[1].children[1].children.push(que)
-                    //    //} else {
-                    //        this.tableColumn[1].children[1].children.push(que)
-                    //    //}
-                    //}
-                    console.log('54564564564564564')
-                    console.log(paper)
-                    console.log(this.tableColumn)
+                    for (let i = 0; i < paper.length; i++) {
+                        paper[i].stuScore = score[i]
+                        paper[i].stuAns = answer[i]
+                        if (paper[i].type == 'single' || paper[i].type == 'judge' || paper[i].type == 'multiple') {
+                            item.objItem.push(paper[i])
+                        } else {
+                            item.subItem.push(paper[i])
+                        }
+                    }
+                }
+                return item
+            },
+            //获取学生作答数据
+            async getItem(data) {
+                let datas = []
+                if (data !== undefined) {
+                    let key = this.stuData.papers[0].code.split('-')
+                    let code = {
+                        scope: this.stuData.papers[0].scope,
+                        code: key[(key.length - 1)],
+                        blob: data
+                    }
+                    datas = await this.$evTools.getComposeItem(code)
+                    return datas
+                } else {
+                    return []
                 }
-                //return paper
             },
             //格式化作题目数据
             async formPaper(data) {
@@ -682,71 +354,25 @@
                 }
                 return []
             },
-            mergeLineMethod() {//处理合并表格数据
-                //console.log(this.data10)
-                let mergeLine = this.data10
-                mergeLine.forEach((res, i) => {
-                    if (i === 0) {
-                        this.mergeLineArr.push(1);
-                        this.mergeLineIndex = 0
-                    } else {
-                        // 判断当前元素与上一个元素是否相同,是就给之前相同的第一个+1,并且数组添加一个0
-                        if (mergeLine[i].name == mergeLine[i - 1].name) {
-                            this.mergeLineArr[this.mergeLineIndex] += 1;
-                            this.mergeLineArr.push(0);
-                        } else {//如果与前一个不相同,则追加一个新从1开始的数字,此时更新mergeLineIndex的值
-                            this.mergeLineArr.push(1);
-                            this.mergeLineIndex = i;
-                        }
-                    }
-                });
-                //console.log(this.mergeLineArr, this.mergeLineIndex)
-            },
-            handleSpan({ row, column, rowIndex, columnIndex }) {
-                console.log(row, column)
-                if (columnIndex === 0) {
-                    const _row = this.mergeLineArr[rowIndex];
-                    const _col = _row > 0 ? 1 : 0;
-                    return {
-                        rowspan: _row,
-                        colspan: _col
-                    }
-                }
-            },
-
         },
         mounted() {
-            const data = [];
-            let sub = ["语文", "语文", "语文"]
-            let type = ["题号", "标准答案/配分", "学生作答/得分"]
-            let k = 0
-            for (let i = 0; i < sub.length; i++) {
-
-                data.push({
-                    key: i,
-                    name: sub[i],
-                    age: type[k],
-                    street: "ABC",
-                    building: "C",
-                    door: 2035,
-                    caddress: "Lake Street 42",
-                    cname: "SoftLake Co",
-                    gender: "M",
-                });
-                k++
-                if (k == 3) {
-                    k = 0
+            this.getPaperData()
+        },
+        watch: {
+            stuData() {
+                if (this.stuData.papers) {
+                    this.stuScore = []
+                    this.getPaperData()
                 }
+                deep:true
             }
-            this.data10 = data;
-            this.mergeLineMethod()
-            this.getPaperData()
         }
     }
 </script>
 <style lang="less" scoped>
     .stu-analyse table.gridtable {
         /*font-family: verdana,arial,sans-serif;*/
+        width: calc(100% - 10px);
         font-size: 11px;
         color: #333333;
         border-width: 1px;
@@ -773,7 +399,8 @@
     .stu-analyse .score-table .gridtable span {
         display: block;
         /*height:100%;*/
-        width: 20px;
+        text-align:center;
+        width:30px;
         /*border-right:1px solid #666666;*/
     }
 
@@ -781,7 +408,9 @@
         text-align: left;
         display: flex;
     }
-
+/*    .stu-analyse .stu-score .item-title td{
+        width:80px;
+    }*/
 
 
     .stu-analyse {
@@ -957,7 +586,7 @@
         }
 
         .stu-analyse .score-table {
-            margin-left: 3%;
+            margin-left: 10px;
             width: calc(100% - 10px);
             padding-bottom: 10px;
         }

+ 18 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue

@@ -62,7 +62,7 @@
                    :sm="24"
                    :md="12"
                    :lg="20">
-                <div class="questionContent">
+                <div class="questionContent" ref="questionBox">
                     <span class="hintwrap">
                         <Tooltip :content="'提示'" theme="light" placement="left">
                             <span class="hintIcon">
@@ -107,7 +107,7 @@
                         <div class="questionNo">我的作答:</div>
                         <div class="answers-box">
                             <!--问答题-->
-                            <div class="compose-content" v-if="getQue(queNo).type == 'subjective' || getQue(queNo).type == 'complete'">
+                            <div class="compose-content" v-if="getQue(queNo).type != 'judge' && getQue(queNo).type != 'single'  && getQue(queNo).type != 'multiple'">
                                 <Compose ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
                             </div>
                             <!--判断题选项-->
@@ -257,9 +257,18 @@
                         label: "综合题",
                         value: "compose"
                     },
+                    {
+                        label: "改错题",
+                        value: "correct"
+                    },
+                    {
+                        label: "连线题",
+                        value: "connector"
+                    },
                 ],
                 examInfo: [],
                 judgeSelect: "",
+
                 imgPreview: {
                     img: "",
                     show: false
@@ -324,6 +333,13 @@
             getQue(index) {
                 if (this.examInfo.length) {
                     if (this.examInfo[index]) {
+                        this.$nextTick(() => {
+                            window.MathJax.Hub.Queue([
+                                "Typeset",
+                                MathJax.Hub,
+                                this.$refs.questionBox,
+                            ]);
+                        });
                         return this.examInfo[index];
                     } else {
                         return {

+ 73 - 45
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -1,53 +1,59 @@
 <template>
     <div class="lesson-test">
         <br />
-        <PaperTest :papers="selectData" v-if="this.$store.getters.getisOpenLessonTestPopNow"  />
+        <PaperTest :papers="selectData" v-if="this.$store.getters.getisOpenLessonTestPopNow" /> 
         <div>
-            <EventBasicInfo :paper="paperData" />
-            <div class="title-rect-group">
-                <div class="title-rect" />
-                <h2 class="title-rect-name">试卷链接</h2>
+            <div class="load-box">
+                <load :active.sync="isLoad"
+                      background-color="#000">
+                    <template slot="default">
+                        <svg-icon icon-class="loader" class="loader-icon" />
+                    </template>
+                </load>
             </div>
-            <!--多學科試卷-->
-            <div v-if="paperData.length > 0 ">
-                <div class="item-box">
-                    <div v-for="(item, index) in paperData"
-                         :key="index"
-                         :class="['paper-item',item.paperId == chooseData.paperId ? 'paper-choose' : '']"
-                         @click="opentestWithSubject(item)">
-                        <svg-icon icon-class="test" class="title-icon" />
-                        <span style="margin-top:5px">{{ item.subject.name }}{{$store.getters.getItemTitle.scope == 'school' ? '科试卷':''}}</span>
-                        <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
-                            <Icon style="margin-top:-10px;margin-left:-8px;" type="ios-checkmark" size="36" />
+            <EventBasicInfo :paper="paperData" />
+            <Tabs value="test">
+                <TabPane label="评测内容" name="test">
+                    <div class="title-rect-group">
+                        <div class="title-rect" />
+                        <h2 class="title-rect-name">试卷链接</h2>
+                    </div>
+                    <!--多學科試卷-->
+                    <div v-if="paperData.length > 0 ">
+                        <div class="item-box">
+                            <div v-for="(item, index) in paperData"
+                                 :key="index"
+                                 :class="['paper-item',item.paperId == chooseData.paperId ? 'paper-choose' : '']"
+                                 @click="opentestWithSubject(item)">
+                                <svg-icon icon-class="test" class="title-icon" />
+                                <span style="margin-top:5px">{{ item.subject.name }}{{$store.getters.getItemTitle.scope == 'school' ? '科试卷':''}}</span>
+                                <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
+                                    <Icon style="margin-top:-10px;margin-left:-8px;" type="ios-checkmark" size="36" />
+                                </div>
+                            </div>
                         </div>
                     </div>
-                </div>
-            </div>
-            <div class="title-rect-group" style="display:none">
-                <div class="title-rect" />
-                <h2 class="title-rect-name">评测分析</h2>
-            </div>
-            <div style="display:none">
-                <StudentScore></StudentScore>
-            </div>
-            <div class="title-rect-group">
-                <div v-if="chooseData.subject !== undefined">
-                    <div class="title-rect" />
-                    <h2 class="title-rect-name">当前科目:{{chooseData.subject.name}}</h2>
-                    <!--<span v-show="isExamDown" @click="showTest" style="margin-left: 25px;color: #03966a;cursor:pointer">--><!--试卷详情--><!--</span>-->
-                    <LessonTestReport :paperInfo="selectData" :examInfo="chooseData" />
-                </div>
-                <div class="load-box">
-                    <load :active.sync="isLoad"
-                          background-color="#000">
-                        <template slot="default">
-                            <svg-icon icon-class="loader" class="loader-icon" />
-                        </template>
-                    </load>
-                </div>
-            </div>
+                    <div class="title-rect-group">
+                        <div v-if="chooseData.subject !== undefined">
+                            <div class="title-rect" />
+                            <h2 class="title-rect-name">当前科目:{{chooseData.subject.name}}</h2>
+                            <!--<span v-show="isExamDown" @click="showTest" style="margin-left: 25px;color: #03966a;cursor:pointer">--><!--试卷详情--><!--</span>-->
+                            <LessonTestReport :paperInfo="selectData" :examInfo="chooseData" />
+                        </div>
+                    </div>
+                </TabPane>
+                <TabPane label="成绩报告" v-if="isTestOver" name="analyse">
+                    <div class="title-rect-group">
+                        <div class="title-rect" />
+                        <h2 class="title-rect-name">评测分析</h2>
+                    </div>
+                    <div>
+                        <StudentScore :stuData="stuData"></StudentScore>
+                    </div>
+                </TabPane>
+            </Tabs>
         </div>
-    </div>
+</div>
 </template>
 
 <script>
@@ -86,24 +92,31 @@
                 isExamDown: false, 
                 chooseData: {},
                 examData: [],
-                isLoad: false
+                isLoad: false,
+                stuData: {},
+                isTestOver: false,
+                selectTab:""
             };
         },
         methods: {
             getPaperData() {
                 this.paperData = []
+                this.stuData = {}
                 this.chooseData = {}
-                console.log(this.$store.getters.getItemTitle)
+                this.isTestOver = false
+                //this.selectTab = "test"
+                console.log(this.selectTab)
                 if (this.$store.getters.getItemTitle.name !== undefined) {
                     let paper = this.$store.getters.getItemTitle
                     let codes = this.$store.getters.getItemTitle.code.split('-')
                     let req = {
                         id: paper.id,
-                        //code: paper.code,
                         studentId: this.$store.state.userInfo.sub,
                         code: codes[1]
                     }
+                    let isTest = 0
                     this.$api.studentWeb.FindStudentPaper(req).then(res => {
+                        this.stuData = res
                         let resData = res
                         for (let item of resData.papers) {
                             if (item.scope) {
@@ -111,6 +124,7 @@
                             } 
                         }
                         for (let i = 0; i < this.paperData.length; i++) {
+                            console.log()
                             this.paperData[i].subject = resData.subjects[i]
                             if (resData.stuAns[i] == undefined) {
                                 this.paperData[i].stuAns = []
@@ -118,8 +132,22 @@
                             } else {
                                 this.paperData[i].stuAns = resData.stuAns[i]
                                 this.paperData[i].stuScore = resData.stuScore[i]
+                                if (resData.stuAns[i][0] !== undefined) {
+                                    let k = 0
+                                    for (let item of resData.stuScore[i]) {
+                                        if (item == -1) {   //有未打分
+                                            k++
+                                        }
+                                    }
+                                    if (k == 0) {
+                                        isTest++
+                                    }
+                                }
                             }
                         }
+                        if (isTest == this.paperData.length) {
+                            this.isTestOver = true
+                        }
                         this.opentestWithSubject(this.paperData[0])
                     })
                 }

+ 5 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventList.vue

@@ -226,14 +226,17 @@
                     }
                     this.eventList = []
                     this.$api.studentWeb.FindExamPaper(params).then(res => {
-                        console.log(res)
+                        let data = []
                         for (let item of res.props) {
                             let code = item.code.split('-')
                             if (code[0] == 'Exam') {
                                 item.eventType = 'exam'
-                                this.eventList.push(item)
+                                data.push(item)
                             }
                         }
+                        this.eventList = data.sort(function (a, b) {
+                            return b.startTime - a.startTime //时间正序
+                        });
                         this.isListNoItem = false
                     })
                 }

+ 14 - 4
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventView.vue

@@ -1,9 +1,8 @@
 <template>
     <div class="event-view">
-        <EventList :class="{ 'hide-sidebar': this.$store.getters.getSidebarisOpen == false }"></EventList>
-        <EventContentArea :class="{'eventContentArea-Span': this.$store.getters.getSidebarisOpen == false,
-                          'eventContentArea-left':this.$store.getters.getOpenCommentList == true && this.$store.getters.getSidebarisOpen == false,}"></EventContentArea>
-        <CommentList v-if="this.$store.getters.getOpenCommentList == true &&this.$store.getters.getSidebarisOpen == false" />
+        <EventList :class="{ 'hide-sidebars': $store.getters.getSidebarisOpen == false}"></EventList>
+        <EventContentArea :class="{'eventContentArea-Span': $store.getters.getSidebarisOpen == false,}"></EventContentArea>
+        <!--<CommentList v-if=" $store.getters.getOpenCommentList == true && $store.getters.getSidebarisOpen == false" />-->
     </div>
 </template>
 
@@ -117,6 +116,17 @@
     };
 </script>
 <style scoped>
+    .hide-sidebars {
+        /*width: 0%;*/
+        transition: ease-out 0.3s;
+        display:none;
+    }
+
+/*    .hide-sidebar .list-title,
+    .hide-sidebar .search,
+    .hide-sidebar .icon-selector {
+        display: none;
+    }*/
       .eventContentArea-view {
           float: right;
           width: 75%;

+ 9 - 4
TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue

@@ -8,8 +8,9 @@
             <Scroll class="list-block"
                     :style="{'max-height':listblockHeight+'px'}"
                     :on-reach-bottom="handleReachBottom"
-                    :loading-text=" testData.length == 10  ? $t('studentWeb.missionListCardReachBottom') : $t('studentWeb.missionListCardLoading') ">
-                <li :id="`event${item.eventID}`"
+                    :loading-text=" testData.length == 5  ? $t('studentWeb.missionListCardReachBottom') : $t('studentWeb.missionListCardLoading') "
+                    >
+                <div :id="`event${item.eventID}`"
                     class="list-item"
                     @click="sentSelectedEventTitle(item)"
                     v-for="(item, index) in testData" :key="index">
@@ -50,7 +51,7 @@
                                         v-if=" item.eventType == '評量' && item.eventSubject == '綜合學科' && item.endTime > '2020.02.10' "></PreviewProgressPie>
                 </li>
                 </ul>
-                </li>
+                </div>
             </Scroll>
             <div class="list-end"></div>
         </Card>
@@ -106,13 +107,17 @@
                         'studentId': this.$store.state.userInfo.sub
                     }
                     this.$api.studentWeb.FindExamPaper(params).then(res => {
+                        let data = []
                         for (let item of res.props) {
                             let code = item.code.split('-')
                             if (code[0] == 'Exam') {
                                 item.eventType = 'exam'
-                                this.testData.push(item)
+                                data.push(item)
                             }
                         }
+                        this.testData = data.sort(function (a, b) {
+                            return b.startTime - a.startTime //时间正序
+                        });
                     })
                 }
             },

+ 0 - 2
TEAMModelOS/ClientApp/src/store/module/studentWeb.js

@@ -176,8 +176,6 @@ export default {
             } else {
                 state.sideBarIsOpen = !state.sideBarIsOpen;
             }
-
-            console.log(state.sideBarIsOpen);
         },
 
         //**存放活動相關的函式

+ 3 - 14
TEAMModelOS/ClientApp/src/view/student-web/App.vue

@@ -4,7 +4,7 @@
         <div class="myNav">
             <Menu mode="horizontal" :active-name="MyNo" class="menubar">
                 <span @click="clickSidebarToggle()"
-                      v-if="MyNo != '1' && MyName != '近期活動' && MyNo != 'X'"
+                      v-if="MyNo != '1' && MyNo != 'X'"
                       class="sidebar-toggle">
                     <Icon class="menu-icon"
                           type="md-menu"
@@ -282,17 +282,13 @@
         },
         created() {
             this.getUsers();
-            //this.createMockdataOriginal();
-            //this.createMockdata();
         },
         mounted() {
-            //console.log(this.$store.state)
             this.getStudentData()
             this.$nextTick(() => {
                 window.addEventListener("resize", this.onResize);
             });
         },
-
         beforeDestroy() {
             window.removeEventListener("resize", this.onResize);
         },
@@ -360,7 +356,6 @@
             },
             mouseOver: function () {
                 this.active = !this.active;
-                //console.log(this.active);
             },
             clickSidebarToggle() {
                 this.$store.commit("ToggleSidebar");
@@ -384,7 +379,8 @@
             },
             getNavName: function (MyName) {
                 this.MyName = MyName;
-                //console.log("目前在:" + MyName);
+                console.log('myname', this.MyName)
+                console.log('myname', this.MyNo)
             },
             gotoTargetItemPage(item) {
                 this.$store.commit("ChangeItemName", item);
@@ -411,22 +407,15 @@
             getUsers() {
                 this.users = JSON.parse(decodeURIComponent(localStorage.userInfo, "utf-8"));
                 let data = jwtDecode(localStorage.getItem('auth_token'))
-                //console.log(data)
                 if (data.name !== "") {
                     this.$store.commit("setUserInfo", data)
                 }
                 if (this.users.roles.length) {
-                    //console.log(this.user)
                     this.curRole = localStorage.getItem('identity')
-                    console.log('role...............')
-                    console.log(this.$store.getters.getUsers)
-                    console.log(this.curRole)
-                    console.log(this.$store)
                 }
             },
             getStudentData() {
                 this.userInfo = this.$store.state.studentWeb.userInfo
-                console.log(this.userInfo)
             },
             onRoleSelect(val) {
                 if (localStorage.getItem('identity') != val) {

+ 2 - 2
TEAMModelOS/Controllers/Analysis/AnalysisController.cs

@@ -264,6 +264,7 @@ namespace TEAMModelOS.Controllers.Analysis
                     //计算标准差
                     //总平均分
                     double totalAverage = 0;
+                    totalAverage = classTotal / stuCount;
                     //获取整个班级 科目的分数情况
                     List<KeyValuePair<string, double>> keyValues = new List<KeyValuePair<string, double>>();
                     List<string> studentIds = new List<string>();
@@ -297,8 +298,7 @@ namespace TEAMModelOS.Controllers.Analysis
                             //按科目获取一个班的分数
                             keyValues.Add(new KeyValuePair<string, double>(y.id, y.score)); 
                         });
-                    });
-                    totalAverage = classTotal / stuCount;
+                    });                   
                     var pow = Math.Pow(powSum / stuCount, 0.5);
                     ClassAys classAys = new ClassAys
                     {

+ 15 - 13
TEAMModelOS/Controllers/Core/ImportController.cs

@@ -73,13 +73,13 @@ namespace TEAMModelOS.Controllers
 
 
         /// <summary>
-        /// {"url":"https://***.blob.core.cn/xxx/1.pptx"}
+        ///  {"file":"www....xxxx.pptx","scope":"private/school"}
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("parse-doc")]
         //[RequestSizeLimit(102_400_000_00)] //最大10000m左右
-        [AuthToken (Roles ="admin,teacher")]
+        [AuthToken(Roles = "admin,teacher")]
         public async Task<IActionResult> ParseDoc(JsonElement request)
         {
             //string id_token = HttpContext.GetXAuth("IdToken");
@@ -89,7 +89,8 @@ namespace TEAMModelOS.Controllers
             //var id = jwt.Payload.Sub;
             var (id, _, _, school) = HttpContext.GetAuthTokenInfo();
             var containerid = id;
-            if (request.TryGetProperty("scope", out JsonElement jscope)) {
+            if (request.TryGetProperty("scope", out JsonElement jscope))
+            {
                 if (jscope.GetString().Equals("school"))
                 {
                     containerid = school;
@@ -152,7 +153,7 @@ namespace TEAMModelOS.Controllers
         [RequestSizeLimit(102_400_000_00)] //最大10000m左右
         public async Task<IActionResult> UploadPPTX([FromForm] IFormFile file)
         {
-            var (id,_, _, school) = HttpContext.GetAuthTokenInfo();
+            var (id, _, _, school) = HttpContext.GetAuthTokenInfo();
             if (FileType.GetExtention(file.FileName).ToLower().Equals("pptx") || FileType.GetExtention(file.FileName).ToLower().Equals("xml"))
             {
                 string FileName = file.FileName.Split(".")[0];
@@ -222,11 +223,12 @@ namespace TEAMModelOS.Controllers
 
         private async Task<string> PPTXTranslator(string containerid, string FileName, Stream streamFile)
         {
-            if (string.IsNullOrWhiteSpace(containerid)) {
+            if (string.IsNullOrWhiteSpace(containerid))
+            {
                 containerid = "teammodelos";
             }
             var status = await _azureStorage.GetBlobServiceClient().DelectBlobs(containerid, $"res/{FileName}");
-            
+
             string shaCode = Guid.NewGuid().ToString();
             HTEXLib.Htex htex = _PPTX2HTEXTranslator.Translate(streamFile);
             htex.name = FileName;
@@ -245,10 +247,10 @@ namespace TEAMModelOS.Controllers
             foreach (var key in blobslidenames)
             {
                 slds.Add(new Sld { type = "normal", url = $"{key.Key}.json", scoring = null }); ;
-                tasks.Add(_azureStorage.UploadFileByContainer(containerid, key.Value, "res", $"{FileName}/{key.Key}.json" ,  false));
+                tasks.Add(_azureStorage.UploadFileByContainer(containerid, key.Value, "res", $"{FileName}/{key.Key}.json", false));
             }
             await Task.WhenAll(tasks);
-           // Dictionary<string, Store> dict = new Dictionary<string, Store>();
+            // Dictionary<string, Store> dict = new Dictionary<string, Store>();
             List<Task> tasksFiles = new List<Task>();
             foreach (var key in htex.stores.Keys)
             {
@@ -263,8 +265,8 @@ namespace TEAMModelOS.Controllers
                 {
                     string[] strs = store.url.Split(',');
                     Stream stream = new MemoryStream(Convert.FromBase64String(strs[1]));
-                   // var urlstrs = key.Split("/");
-                    var name = key.Replace("/","");
+                    // var urlstrs = key.Split("/");
+                    var name = key.Replace("/", "");
                     str.url = $"{name}";
                     tasksFiles.Add(_azureStorage.UploadFileByContainer(containerid, stream, "res", $"{FileName}/{name}", false));
                 }
@@ -272,10 +274,10 @@ namespace TEAMModelOS.Controllers
                 {
                     str.url = System.Web.HttpUtility.UrlDecode(store.url, Encoding.UTF8);
                 }
-               // dict.TryAdd(key, str);
+                // dict.TryAdd(key, str);
             }
             await Task.WhenAll(tasksFiles);
-           // index.stores = dict;
+            // index.stores = dict;
             index.slides = slds;
             var BlobUrl = await _azureStorage.UploadFileByContainer(containerid, JsonHelper.ToJson(index, ignoreNullValue: false), "res", FileName + "/" + "index.json", false);
             return System.Web.HttpUtility.UrlDecode(BlobUrl, Encoding.UTF8);
@@ -292,7 +294,7 @@ namespace TEAMModelOS.Controllers
         //缩略图
         public string thumbnail { get; set; }
         //  public int page { get; set; }
-       // public Dictionary<string, Store> stores { get; set; }
+        // public Dictionary<string, Store> stores { get; set; }
         public List<string> points { get; set; }
         public string periodId { get; set; }
         public List<string> gradeIds { get; set; }