瀏覽代碼

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

Li 2 年之前
父節點
當前提交
cbf5acf59c

+ 1 - 1
TEAMModelOS/ClientApp/public/lang/en-US.js

@@ -4144,7 +4144,7 @@ const LANG_EN_US = {
         sit4: 'stuYear: Required. Student enrollment year (usually the year he/she entered the school), e.g. 2022',
         sit5: "className: Required. Student's Class, e.g., 101",
         sit6: "classYear: Required. Usually the same as the enrolled year but depends on the student’s grade level, for example, classYear will not be the same as the enrollment year if the student is retained. E.g. 2020.",
-        sit7: 'classId: Required. Class ID, e.g. 20200101',
+        sit7: 'classId: Required. Class ID',
         sit8: 'Incorrect ID format',
         sit9: 'Incorrect seat number format',
         sit10: 'Incorrect class ID format',

+ 2 - 2
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -4147,7 +4147,7 @@ const LANG_ZH_CN = {
         sit4: 'stuYear: 必填,学生入学年 ex:2020',
         sit5: 'className: 必填,学生班级ex:2020级1班',
         sit6: 'classYear: 必填,班级年,通常与学生入学年相同 ex:2020',
-        sit7: 'classId: 必填,班级编号ex:20200101',
+        sit7: 'classId: 必填,班级编号',
         sit8: 'id格式错误',
         sit9: '座号格式错误',
         sit10: '班级id格式错误',
@@ -6024,7 +6024,7 @@ const LANG_ZH_CN = {
         cusType: '学校课程:学校分配的课程,不允许自行新增、修改、删除。 \n个人课程:您自己创建的课程,可以根据需要进行修改和调整。',
         semester: '您可自行设定学校的学期和入学期,如果没有设置入学期系统会默认设置第一个学期为入学期。',
         time: '可设定学校作息时间,用于设置课程表。若未设置则无法设置课表。',
-        stuModel: 'Id:学生学号(4-12位数字)\npw:密码(若不输入,预设值等于学生学号)\nname:学生姓名\nstuYear:学生入学年ex:2020\nclassName:学生班级ex:2020级1班\nclassYear :班级年,通常与学生入学年相同ex:2020\nclassId:班级编号ex:20200101',
+        stuModel: 'Id:学生学号(4-12位数字)\npw:密码(若不输入,预设值等于学生学号)\nname:学生姓名\nstuYear:学生入学年ex:2020\nclassName:学生班级ex:2020级1班\nclassYear :班级年,通常与学生入学年相同ex:2020\nclassId:班级编号',
         cusInfo: '依据学校定义的学科,建立所属归类的课程 Ex:”语文”学科下的 “阅读理解”',
         cusTea: '加入负责该类课程授课的所有授课教师',
         sCusClass: '加入教师该课程所负责的学生班级',

+ 1 - 1
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -4148,7 +4148,7 @@ const LANG_ZH_TW = {
         sit4: 'stuYear: 必填,學生入學年 ex:2020',
         sit5: 'className: 必填,學生班級ex:2020級1班',
         sit6: 'classYear: 必填,班級年,通常與學生入學年相同 ex:2020',
-        sit7: 'classId: 必填,班級編號ex:20200101',
+        sit7: 'classId: 必填,班級編號',
         sit8: 'id格式錯誤',
         sit9: '座號格式錯誤',
         sit10: '班級id格式錯誤',

+ 4 - 0
TEAMModelOS/ClientApp/src/api/areaArt.js

@@ -49,5 +49,9 @@ export default {
     /* 获取学区学校列表 */
     findAreaSchoolList: function (data) {
         return post('/school/area/find-school', data)
+    },
+    /* 区级艺术评测数据看板 */
+    areaArtAna: function (data) {
+        return post('/school/area/analysis-area-art', data)
     }
 }

二進制
TEAMModelOS/ClientApp/src/assets/image/c-import-stu-cn.png


+ 104 - 22
TEAMModelOS/ClientApp/src/view/art/AreaArt.vue

@@ -1,6 +1,7 @@
 <template>
     <div class="area-data-container">
         <vuescroll ref="art-dasboard">
+            <Loading v-show="isLoading"></Loading>
             <back-to-top @on-to-top="backToTop"></back-to-top>
             <div class="tab-box" style="padding:0px 20px 5px 20px;">
                 <span class="pane" style="line-height:30px;padding:2px;margin-right:30px" @click="tabClick('primary')" :class="{ active: periodId === 'primary' }">
@@ -85,19 +86,19 @@
                 </div>
             </div>
             <!-- 课程被挤占情况 -->
-            <div class="online-train-wrap">
+            <!-- <div class="online-train-wrap">
                 <h4 class="block-title">课程被挤占情况(音乐)</h4>
                 <div class="chart-data-wrap">
                     <OccupyCourse :schools="musicOcc"></OccupyCourse>
                 </div>
-            </div>
+            </div> -->
             <!-- 课程被挤占情况 -->
-            <div class="online-train-wrap">
+            <!-- <div class="online-train-wrap">
                 <h4 class="block-title">课程被挤占情况(美术)</h4>
                 <div class="chart-data-wrap">
                     <OccupyCourse :schools="drawOcc"></OccupyCourse>
                 </div>
-            </div>
+            </div> -->
             <!-- 学校列表 -->
             <div class="online-train-wrap">
                 <div style="height:30px">
@@ -109,10 +110,10 @@
                         <img class="school-img" :src="item.picture || defImg">
                         <div style="margin-left:10px;height:fit-content;">
                             <p class="school-name" :title="item.name">{{item.name}}</p>
-                            <p class="school-value">
+                            <!-- <p class="school-value">
                                 <span>学生人数:</span>
                                 <span>{{item.stuNum}}人</span>
-                            </p>
+                            </p> -->
                             <p class="school-value">
                                 <span>音乐及格率:</span>
                                 <span>{{item.musicPass || 0}}%</span>
@@ -148,10 +149,12 @@ export default {
     },
     data() {
         return {
+            isLoading: false,
             keyword: '',
             primaryData: {},
             middleData: {},
             periodId: 'primary',
+            allData: {}
         }
     },
     computed: {
@@ -162,35 +165,50 @@ export default {
                 return this.middleData
             }
         },
+        curPeriodData() {
+            let data = {}
+            if (this.periodId == 'primary') {
+                data.periodInfo = this.allData.pSchool || {}
+                data.overall = this.allData.psubject || []
+                data.knData = this.allData.allBlock?.find(item => item.school == '小学') || {}
+                data.examData = this.allData.pschoolScore || []
+            } else {
+                data.periodInfo = this.allData.hSchool || {}
+                data.overall = this.allData.hsubject || []
+                data.knData = this.allData.allBlock?.find(item => item.school == '初中') || {}
+                data.examData = this.allData.hschoolScore || []
+            }
+            return data
+        },
         // 头部统计数据
         topData() {
-            let { schoolNum, classNum, studentNum, subjectNum } = this.curData.periodInfo
+            let { scCount, classCount, stuCount, subjectCount } = this.curPeriodData.periodInfo
             let topData = [
                 {
                     icon: 'ios-people',
                     color: '#2d8cf0',
-                    number: schoolNum,
+                    number: scCount || 0,
                     text: '学校数量',
                     type: 'num'
                 },
                 {
                     icon: 'md-cube',
                     color: '#2db7f5',
-                    number: classNum,
+                    number: classCount || 0,
                     text: '班级数量',
                     type: 'num'
                 },
                 {
                     icon: 'md-thumbs-up',
                     color: '#ff9900',
-                    number: subjectNum,
+                    number: subjectCount || 0,
                     text: '学科数',
                     type: 'num'
                 },
                 {
                     icon: 'md-bookmark',
                     color: '#5cadff',
-                    number: studentNum,
+                    number: stuCount || 0,
                     text: '学生人数',
                     type: 'num'
                 },
@@ -206,23 +224,35 @@ export default {
         },
         //总览数据
         overallData() {
-            return this.curData.overall
+            return this.curPeriodData.overall
         },
         // 音乐知识点数据
         musicKn() {
-            return this.curData.musicKn
+            let musicKn = this.curPeriodData.knData.sub?.find(item => item.key === 'subject_music')
+            let formatData = []
+            if (musicKn && musicKn.sl) {
+                formatData = this.formatKnData(musicKn)
+            }
+            return formatData
         },
         //美术知识点数据
         drawKn() {
-            return this.curData.drawKn
+            let drawKn = this.curPeriodData.knData.sub?.find(item => item.key === 'subject_painting')
+            let formatData = []
+            if (drawKn && drawKn.sl) {
+                formatData = this.formatKnData(drawKn)
+            }
+            return formatData
         },
         //音乐评测数据
         musicExam() {
-            return this.curData.musicExam
+            let examData = this.curPeriodData.examData
+            return this.formatExamData(examData, 'subject_music')
         },
         //音乐评测数据
         drawExam() {
-            return this.curData.drawExam
+            let examData = this.curPeriodData.examData
+            return this.formatExamData(examData, 'subject_painting')
         },
         //课程被挤占情况
         musicOcc() {
@@ -239,12 +269,16 @@ export default {
             return this.curData.drawAward
         },
         schoolList() {
-            let data = this.curData.musicExam.map((item, index) => {
+            let data = this.curPeriodData.examData.map((item, index) => {
+                let music = item.scores.find(s=>s.subjectId == 'subject_music') 
+                let musicPass = music ? music.pass : 0
+                let draw = item.scores.find(s=>s.subjectId == 'subject_painting') 
+                let drawPass = draw ? draw.pass : 0
                 return {
                     name: item.name,
-                    stuNum: item.stuNum,
-                    musicPass: item.passRate,
-                    drawPass: this.curData.drawExam[index].passRate
+                    code:item.code,
+                    musicPass: musicPass,
+                    drawPass: drawPass
                 }
             })
             return data
@@ -261,13 +295,61 @@ export default {
         this.defImg = require('@/assets/image/def-school-img.png')
         this.primaryData = require('./data/primary.json')
         this.middleData = require('./data/middle.json')
+        this.getAreaArtAnalysis()
     },
     methods: {
+        formatExamData(examData, subject) {
+            if(examData && examData.length){
+                let data = examData.map(school=>{
+                    let item = {
+                        name:school.name
+                    }
+                    let resource = school.scores.find(i=>i.subjectId === subject) || {}
+                    console.log('333',resource)
+                    return Object.assign(item,resource)
+                })
+                console.log(2222,data)
+                return data
+            }
+            return []
+        },
+        formatKnData(data) {
+            return data.sl.map(item => {
+                let level2 = item.kno?.length ? item.kno[0] : ''
+                let level1 = ''
+                if (level2) {
+                    let d = data.blk.find(dim => dim.name === level2)
+                    level1 = d?.dim.length ? d.dim[0] : ''
+                }
+                return {
+                    "name": item.key,
+                    "level1": level1,
+                    "level2": level2,
+                    "val": item.scores
+                }
+            })
+        },
+        //获取区级艺术统计数据
+        getAreaArtAnalysis() {
+            this.isLoading = true
+            this.$api.areaArt.areaArtAna({
+                id: sessionStorage.getItem('areaId')
+            }).then(
+                res => {
+                    if (res) {
+                        this.allData = res
+                    }
+                }
+            ).finally(() => {
+                this.isLoading = false
+            })
+        },
         toSchoolDetail(school) {
+            let schoolInfo = this.schoolList.find(item=>item.code == school.code)
             this.$router.push({
-                name: 'schoolArt',
+                name: 'artDashboard',
                 params: {
-                    schoolInfo: school
+                    schoolInfo: schoolInfo
                 }
             })
         },

+ 1 - 1
TEAMModelOS/ClientApp/src/view/art/echart/KngLevel.vue

@@ -116,7 +116,7 @@ export default {
             deep: true,
             immediate: true,
             handler(n, o) {
-                if (n) {
+                if (n && n.length) {
                     this.$nextTick(() => {
                         let level1Arr = [...new Set(n.map(i => i.level1))]
                         let level2Arr = [...new Set(n.map(i => i.level2))]

+ 19 - 5
TEAMModelOS/ClientApp/src/view/art/echart/KngPoint.vue

@@ -135,11 +135,25 @@ export default {
             })
         }
     },
-    mounted() {
-        this.$nextTick(() => {
-            let allPoints = this.kngData
-            this.doRender(allPoints)
-        })
+    // mounted() {
+    //     this.$nextTick(() => {
+    //         let allPoints = this.kngData
+    //         this.doRender(allPoints)
+    //     })
+    // },
+    watch: {
+        kngData: {
+            deep: true,
+            immediate: true,
+            handler(n, o) {
+                if (n && n.length) {
+                    this.$nextTick(() => {
+                        let allPoints = this.kngData
+                        this.doRender(allPoints)
+                    })
+                }
+            }
+        }
     }
 }
 </script>

+ 36 - 34
TEAMModelOS/ClientApp/src/view/art/echart/Overall.vue

@@ -71,7 +71,9 @@ export default {
                 },
                 xAxis: {
                     type: 'category',
-                    data: data.map(i => i.className),
+                    data: data.map(i => {
+                        return i.name === 'subject_music' ? '音乐' : '美术'
+                    }),
                     axisLine: {
                         lineStyle: {
                             // color: '#eee'
@@ -176,7 +178,7 @@ export default {
                                 barBorderRadius: 11,
                             }
                         },
-                        data: data.map(i => i.hScore)
+                        data: data.map(i => i.max)
                     },
                     {
                         name: '最低分',
@@ -196,7 +198,7 @@ export default {
                                 barBorderRadius: 11,
                             }
                         },
-                        data: data.map(i => i.lScore)
+                        data: data.map(i => i.min)
                     },
                     {
                         name: '优秀率',
@@ -204,7 +206,6 @@ export default {
                         yAxisIndex: 1,
                         symbolSize: '10',
                         zlevel: 3,
-
                         color: '#23bcca',
                         areaStyle: {
                             normal: {
@@ -227,7 +228,7 @@ export default {
 
                             }
                         },
-                        data: data.map(i => i.excellentRate),
+                        data: data.map(i => i.excellent),
                     },
                     {
                         name: '良好率',
@@ -255,36 +256,37 @@ export default {
                                 borderWidth: 12
                             }
                         },
-                        data: data.map(i => i.goodRate),
+                        data: data.map(i => i.pass),
                     },
-                    {
-                        name: '待提高率',
-                        type: 'line',
-                        yAxisIndex: 1,
-                        symbolSize: '10',
-                        zlevel: 3,
-                        areaStyle: {
-                            normal: {
-                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                    offset: 0,
-                                    color: 'rgba(237, 64, 20, 0.1)'
-                                }, {
-                                    offset: 0.8,
-                                    color: 'rgba(237, 64, 20, 0.2)'
-                                }], false),
-                                shadowColor: 'rgba(0, 0, 0, 0.1)',
-                                shadowBlur: 10
-                            }
-                        },
-                        itemStyle: {
-                            normal: {
-                                color: 'rgb(237, 64, 20)',
-                                borderColor: 'rgba(237, 64, 20,0.17)',
-                                borderWidth: 12
-                            }
-                        },
-                        data: data.map(i => i.improveRate),
-                    }]
+                    // {
+                    //     name: '待提高率',
+                    //     type: 'line',
+                    //     yAxisIndex: 1,
+                    //     symbolSize: '10',
+                    //     zlevel: 3,
+                    //     areaStyle: {
+                    //         normal: {
+                    //             color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    //                 offset: 0,
+                    //                 color: 'rgba(237, 64, 20, 0.1)'
+                    //             }, {
+                    //                 offset: 0.8,
+                    //                 color: 'rgba(237, 64, 20, 0.2)'
+                    //             }], false),
+                    //             shadowColor: 'rgba(0, 0, 0, 0.1)',
+                    //             shadowBlur: 10
+                    //         }
+                    //     },
+                    //     itemStyle: {
+                    //         normal: {
+                    //             color: 'rgb(237, 64, 20)',
+                    //             borderColor: 'rgba(237, 64, 20,0.17)',
+                    //             borderWidth: 12
+                    //         }
+                    //     },
+                    //     data: data.map(i => i.improveRate),
+                    // }
+                ]
             };
             myChart.clear()
             myChart.setOption(this.option)

+ 3 - 3
TEAMModelOS/ClientApp/src/view/art/echart/SchoolComp.vue

@@ -235,7 +235,7 @@ export default {
                                 barBorderRadius: 11,
                             }
                         },
-                        data: data.map(i => i.hScore)
+                        data: data.map(i => i.max)
                     },
                     {
                         name: '优秀率',
@@ -265,7 +265,7 @@ export default {
 
                             }
                         },
-                        data: data.map(i => i.excellentRate),
+                        data: data.map(i => i.excellent),
                     },
                     {
                         name: '及格率',
@@ -293,7 +293,7 @@ export default {
                                 borderWidth: 12
                             }
                         },
-                        data: data.map(i => i.passRate),
+                        data: data.map(i => i.pass),
                     }
                 ]
             };

+ 1 - 1
TEAMModelOS/ClientApp/src/view/artexam/Mgt.vue

@@ -23,7 +23,7 @@
                                 <Icon type="md-time" size="16" />{{$jsFn.dateFormat(item.startTime)}}-{{$jsFn.dateFormat(item.endTime)}}
                             </p>
                         </div>
-                        <EmptyData v-show="artList.length" :top="100"></EmptyData>
+                        <EmptyData v-show="!artList.length" :top="100"></EmptyData>
                     </vuescroll>
                 </div>
             </div>

文件差異過大導致無法顯示
+ 31 - 20
TEAMModelOS/Controllers/Common/AreaController.cs