Ver Fonte

学生报告添加知识点分层展示

liurongli há 4 meses atrás
pai
commit
ec2e5f56e8

+ 2 - 2
src/App.vue

@@ -18,8 +18,8 @@ export default {
     },
     methods: {
         SubmitLogin() {
-            const username = '99704718048515';
-            const password = '997047@18048515';
+            const username = '99689820200090';
+            const password = '996898@20200090';
             // const type = '1';
             const schoolType = sessionStorage.getItem('schoolType');
             if(getToken() && schoolType){

+ 186 - 10
src/views/analysisReport/studentPage/downloadPdf/studentReport.vue

@@ -5,7 +5,7 @@
         <!-- 自定义每页内容 -->
         <template #default="slotProps">
             <template v-if="slotProps.type == 'web_mode'">
-                <div class="area_page" style="position: absolute;top: -9999999px;z-index: -10;">
+                <div class="area_page" style="position: absolute;top: -9999999px;z-index: -10;height: auto;min-height: 1285px;">
                     <!-- 用于获取div的高度 默认隐藏不显示 -->
                     <div class="area_title" ref="areaReportTitle">
                         <p>{{ reportTitle }}</p>
@@ -28,6 +28,38 @@
                             <div class="pring_jg"></div>
                         </div>
                     </template>
+                    <!-- 知识点分层 -->
+                    <template v-for="know in knowLedgeLayeringData">
+                        <div class="area_module" :ref="`knowLedgeLayering_${know.subjectCode}`">
+                            <div class="area_module_title">{{know.groupName}}分层分析</div>
+                            <div class="area_module_table">
+                                <ul class="student_know_paper">
+                                    <li>
+                                        <div class="li_left">
+                                            <span>满分区</span>
+                                            <span>(得满分的知识点)</span>
+                                        </div>
+                                        <div class="li_know">{{ know.knowLedgeLayering.fullScore }}{{ know.knowLedgeLayering.fullScore ? '。':'' }}</div>
+                                    </li>
+                                    <li>
+                                        <div class="li_left">
+                                            <span>突破升级区</span>
+                                            <span>(得分率高于同层次,但低于上一层次平均水平的知识点)</span>
+                                        </div>
+                                        <div class="li_know">{{ know.knowLedgeLayering.breakThrough }}{{ know.knowLedgeLayering.breakThrough ? '。':'' }}</div>
+                                    </li>
+                                    <li>
+                                        <div class="li_left">
+                                            <span>就近发展区</span>
+                                            <span>(得分率低于同层次平均水平的知识点)</span>
+                                        </div>
+                                        <div class="li_know">{{ know.knowLedgeLayering.develop }}{{ know.knowLedgeLayering.develop ? '。':'' }}</div>
+                                    </li>
+                                </ul>
+                            </div>
+                            <div class="pring_jg"></div>
+                        </div>
+                    </template>
                 </div>
                 <div class="area_page web_area_page" v-for="page in pageCount" :key="`${pageKey}_${page}`">
                     <template v-if="page == 1">
@@ -216,6 +248,35 @@
                                     </template>
                                 </template>
                             </template>
+                            <div class="area_module" v-if="group.type=='knowledgePointQuestionData' && group?.knowLedgeLayering && page == knowLedgeLayeringPageNum[subKey]">
+                                <div class="area_module_title">{{group.groupName}}分层分析</div>
+                                <div class="area_module_table">
+                                    <ul class="student_know_paper">
+                                        <li>
+                                            <div class="li_left">
+                                                <span>满分区</span>
+                                                <span>(得满分的知识点)</span>
+                                            </div>
+                                            <div class="li_know">{{ group.knowLedgeLayering.fullScore }}{{ group.knowLedgeLayering.fullScore ? '。':'' }}</div>
+                                        </li>
+                                        <li>
+                                            <div class="li_left">
+                                                <span>突破升级区</span>
+                                                <span>(得分率高于同层次,但低于上一层次平均水平的知识点)</span>
+                                            </div>
+                                            <div class="li_know">{{ group.knowLedgeLayering.breakThrough }}{{ group.knowLedgeLayering.breakThrough ? '。':'' }}</div>
+                                        </li>
+                                        <li>
+                                            <div class="li_left">
+                                                <span>就近发展区</span>
+                                                <span>(得分率低于同层次平均水平的知识点)</span>
+                                            </div>
+                                            <div class="li_know">{{ group.knowLedgeLayering.develop }}{{ group.knowLedgeLayering.develop ? '。':'' }}</div>
+                                        </li>
+                                    </ul>
+                                </div>
+                                <div class="pring_jg"></div>
+                            </div>
                         </template>
                         <!-- 历次 -->
                         <!-- <div class="area_module" v-if="singleSubjectData?.[subKey]?.historyExamData?.pageNum==page && singleSubjectData[subKey].historyExamData.chartData.length > 0">
@@ -303,6 +364,8 @@ export default {
             suggestionHtml: null,//总结建议
             multiSuggestionPageNum:'',//总分 总结建议
             singleSubjectData:[],//单科数据
+            knowLedgeLayeringData:[],//知识点分层
+            knowLedgeLayeringPageNum:[],//知识点分层分页
             bookPageImages:[],//生成的图片地址
             // showReportLoading:false,
             targetProgress:0,
@@ -405,6 +468,8 @@ export default {
             this.modulePageData = [1];
             this.multiSuggestionPageNum = '';//总分 总结建议
             this.singleSubjectData = [];//单科数据
+            this.knowLedgeLayeringData = [];//知识点分层
+            this.knowLedgeLayeringPageNum = [];//知识点分层分页
             this.pageKey += 1;
             //多科成绩总览 科目标准分分析
             await this.QueryMultiSubjectData();
@@ -810,7 +875,7 @@ export default {
                     const tableData = res.data.tableData || [];
                     const titleData = res.data.titleData || [];
                     const studentOpenness = res.data?.studentOpenness ?? '';//控制得分显示对错或值
-                    this.TableChartData(tableData, titleData, studentOpenness, index,'smallQuestionData','小题');
+                    this.TableChartData(tableData, titleData, studentOpenness, index,'smallQuestionData','小题',subjectCode);
                 }
             })
         },
@@ -821,26 +886,35 @@ export default {
                 subjectGroupType: 0, // 科目是否为组合
                 isTotal: 0, //是否为总分科目 1为总分 0为非总分
                 subjectCode:subjectCode
-            }).then(res => {
+            }).then(async res => {
                 if (res.code == 200 && res.data) {
                     const { bigQuestion, knowledgePointQuestion, abilityQuestion } = res.data
                     if (bigQuestion && bigQuestion?.tableData?.length > 0) {
                         const tableData = bigQuestion.tableData || [];
                         const titleData = bigQuestion.titleData || [];
                         const studentOpenness = bigQuestion?.studentOpenness ?? '';
-                        this.TableChartData(tableData, titleData, studentOpenness, index,'bigQuestionData','大题');
+                        this.TableChartData(tableData, titleData, studentOpenness, index,'bigQuestionData','大题',subjectCode);
                     }
                     if (knowledgePointQuestion && knowledgePointQuestion?.tableData?.length > 0) {
                         const tableData = knowledgePointQuestion.tableData || [];
                         const titleData = knowledgePointQuestion.titleData || [];
                         const studentOpenness = knowledgePointQuestion?.studentOpenness ?? '';
-                        this.TableChartData(tableData, titleData, studentOpenness, index,'knowledgePointQuestionData','知识点');
+                        this.TableChartData(tableData, titleData, studentOpenness, index,'knowledgePointQuestionData','知识点',subjectCode);
+                        if(this.schoolType == 2){
+                            // 等待 DOM 更新完成后获取高度
+                            await this.$nextTick();
+                            await new Promise(resolve => setTimeout(resolve, 2000)); // 额外延迟确保浏览器挂载
+                            //处理知识点分层分页
+                            const refName = `knowLedgeLayering_${subjectCode}`;
+                            const domHeight = this.$refs[refName]?.[0]?.offsetHeight || 0;
+                            this.knowLedgeLayeringPageNum.push(this.SingleChartPage(domHeight));
+                        }
                     }
                     if (abilityQuestion && abilityQuestion?.tableData?.length > 0) {
                         const tableData = abilityQuestion.tableData || [];
                         const titleData = abilityQuestion.titleData || [];
                         const studentOpenness = abilityQuestion?.studentOpenness ?? '';
-                        this.TableChartData(tableData, titleData, studentOpenness, index,'abilityQuestionData','能力要素');
+                        this.TableChartData(tableData, titleData, studentOpenness, index,'abilityQuestionData','能力要素',subjectCode);
                     }
                 }
             })
@@ -860,7 +934,7 @@ export default {
                             const tableData = item?.questionData?.tableData || []
                             const titleData = item?.questionData?.titleData || []
                             const studentOpenness = res.data?.studentOpenness ?? ''
-                            this.TableChartData(tableData, titleData, studentOpenness, index,`customQuestionData${key}`,item.customName);
+                            this.TableChartData(tableData, titleData, studentOpenness, index,`customQuestionData${key}`,item.customName,subjectCode);
                         })
                     }
                 }
@@ -979,7 +1053,7 @@ export default {
             })
         },
         //处理数据
-        TableChartData(tableData, titleData, studentOpenness, index,type,groupName) {
+        async TableChartData(tableData, titleData, studentOpenness, index,type,groupName,subjectCode) {
             //柱状图
             let datax = [],datay = [],radarChart = []
             tableData.forEach(item => {
@@ -1006,7 +1080,33 @@ export default {
             const tablePagesNum = pageTableData.tablePagesNum;
             const tableList = pageTableData.tableList;
             const headerList = pageTableData.headerList;//表头
-
+            //查询单科-知识点分层分析表(联考)
+            let knowLedgeLayering = null;
+            if(type == 'knowledgePointQuestionData' && this.schoolType== 2){
+                await this.$api.reportStudent[getApiName()].queryStudentKnowLedgeLayering({
+                    ...this.reportParam,
+                    subjectGroupType: 0, // 科目是否为组合
+                    isTotal: 0, //是否为总分科目 1为总分 0为非总分
+                    subjectCode:subjectCode
+                }).then(res => {
+                    if (res.code == 200 && res.data) {
+                        const { breakThrough,develop,fullScore } = res.data;
+                        knowLedgeLayering = {
+                            breakThrough:breakThrough || '',
+                            develop:develop || '',
+                            fullScore:fullScore || ''
+                        }
+                        //知识点
+                        this.knowLedgeLayeringData.push({
+                            subjectCode:subjectCode,
+                            groupName:groupName,
+                            knowLedgeLayering:knowLedgeLayering
+                        })
+                    }else{
+                        knowLedgeLayering = null;
+                    }
+                })
+            }
             this.singleSubjectData[index].groupQuestionData.push({
                 type:type,
                 groupName:groupName,
@@ -1018,7 +1118,8 @@ export default {
                 chartPagesNum:chartPagesNum,
                 datax:datax,
                 datay:datay,
-                radarChartData:radarChartData
+                radarChartData:radarChartData,
+                knowLedgeLayering:knowLedgeLayering
             })
         },
         //按照原始顺序累加,当总和超过A4高度1285时,将当前元素放入下一组
@@ -1421,6 +1522,81 @@ export default {
                     // }
                 }
             }
+            .student_know_paper{
+                width: 100%;
+                box-sizing: border-box;
+                display: flex;
+                flex-direction: column;
+                border-radius: 6px;
+                border: 1px solid #EBEEF5;
+                li{
+                    width: 100%;
+                    border-top: 1px solid #EBEEF5;
+                    box-sizing: border-box;
+                    display: inline-flex;
+                    &:first-child{
+                        border-top: 0;
+                        .li_left{
+                            background-color: #EEF1FB;
+                            span{
+                                color: #5470C6;
+                            }
+                        }
+                    }
+                    &:nth-child(2){
+                        .li_left{
+                            background-color: #ECF6F1;
+                            span{
+                                color: #3BA272;
+                            }
+                        }
+                    }
+                    &:nth-child(3){
+                        .li_left{
+                            background-color: #FFFAEF;
+                            span{
+                                color: #FAC858;
+                            }
+                        }
+                    }
+                    .li_left{
+                        width: 300px;
+                        padding: 24px;
+                        border-right: 1px solid #EBEEF5;
+                        box-sizing: border-box;
+                        display: inline-flex;
+                        flex-direction: column;
+                        justify-content: center;
+                        flex-shrink: 0;
+                        span{
+                            font-weight: 500;
+                            font-size: 20px;
+                            line-height: 28px;
+                            display: block;
+                            text-align: center;
+                            &:nth-child(2){
+                                margin-top: 4px;
+                                line-height: 20px;
+                                font-weight: 400;
+                                font-size: 14px;
+                                color: #999999;
+                            }     
+                        }
+                    }
+                    .li_know{
+                        flex: 1;
+                        padding: 20px;
+                        box-sizing: border-box;
+                        font-weight: 400;
+                        font-size: 14px;
+                        color: #666666;
+                        line-height: 24px;
+                        text-align: justified;
+                        display: inline-flex;
+                        align-items: center;
+                    }
+                }
+            }
         }
         .difficulty {
             width: 6px;

+ 2 - 2
vue.config.js

@@ -104,8 +104,8 @@ module.exports = {
     },
     proxy: {
       "/api": {
-        // target: "https://dev3.k12100.net/student/api/",
-        target: "https://www.k12100.com/student/api/",
+        target: "https://dev3.k12100.net/student/api/",
+        // target: "https://www.k12100.com/student/api/",
         changeOrigin: true,
         pathRewrite: {
           "^/api": "/",