Pārlūkot izejas kodu

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

jeff 1 gadu atpakaļ
vecāks
revīzija
6b54927bba

+ 8 - 6
TEAMModelBI/ClientApp/src/view/userInquire/details.vue

@@ -216,11 +216,11 @@
                                 </el-carousel-item>
                             </el-carousel> -->
                             <div class="prodlist">
-                                <div v-if="powerList.length >0">
+                                <div v-show="powerList.length >0">
                                     <div class="prodlist-item" v-for="item in powerList" :key="item">
                                     <div class="rightsbox-item">
                                         <div class="rightsbox-item-title">
-                                            <p>[ID授权] {{item.name}}</p>
+                                            <!-- <p>[ID授权] {{item.name}}</p> -->
                                         </div>
                                         <div class="rightsbox-item-time">
                                             <p>
@@ -228,7 +228,7 @@
                                                 <span class="rightsbox-item-time-num">{{item.startDateText}}~{{item.endDateText}}</span>
                                                 <span>共<span class="rightsbox-item-timenums">{{item.intervalTime}}</span>天</span>
                                             </p>
-                                            <p v-show="item.aprule.schoolinfo">
+                                            <p  v-if="item.aprule.hasOwnProperty('schoolinfo')">
                                                 <span>学校:</span>
                                                 <span class="rightsbox-item-timenums">{{item.aprule.schoolinfo.name}}</span>
                                             </p>
@@ -252,7 +252,7 @@
                                     <el-divider /> 
                                 </div>
                                 </div>
-                                <div class="power-notdata" v-else>暂无权益内容</div>
+                                <div class="power-notdata" v-show =" powerList.length ==0">暂无权益内容</div>
                                    <!--HiTeach 附加功能-->
                                 <div class="subjoin">
                                     <div class="subjoin-item" >
@@ -745,6 +745,7 @@ const backClick = () => {
     console.log('back init')
         emits('parentClick','default') // 使用方式和 vue2 this.$emit 一样
 }
+// initdata()
 function initdata() {
     console.log(detailsData.value,'进入方法查看')
     let transmitData = detailsData.value[transferNum.value]
@@ -865,8 +866,8 @@ function initdata() {
     console.log(transitionUsed,transitionSuplus,transitionTeach,transitionTotal,'结果')
 
     //处理上下一个
-    advancevalue.value.next=detailsData.value[transferNum.value+1]
-    loading.value=false
+    // advancevalue.value.next=detailsData.value[transferNum.value+1]
+    
 }
 function bytesToGB(bytes) {
   const gb = bytes / (1024 * 1024 * 1024);
@@ -888,6 +889,7 @@ function init(){
     detailsData.value[transferNum.value].iot.hiteach.day ? (buttonSelect.value[0].disabled=false):(buttonSelect.value[0].disabled=true,buttonSelect.value[0].click=false)
     detailsData.value[transferNum.value].iot.hiteach.month ? (buttonSelect.value[1].disabled=false):(buttonSelect.value[1].disabled=true,buttonSelect.value[1].click=false)
     detailsData.value[transferNum.value].iot.hiteach.year  ? (buttonSelect.value[2].disabled=false):(buttonSelect.value[2].disabled=true,buttonSelect.value[2].click=false)
+    loading.value=false
 }
 function selectTime(value){
     console.log(value,'值')

+ 1 - 1
TEAMModelBI/ClientApp/src/view/userInquire/userdetail.vue

@@ -206,7 +206,7 @@ function inidatas(){
     userdata.value.country=lang ==='zh-cn' ? '中文简体':lang ==='zh-tw' ?'中文繁体':'英语'
     userdata.value.company=unitName
     userdata.value.type =unitType == '1'? '基礎教育機構':
-    unitType =='2' ? 中等教育機構:unitType=='3' ? '高等教育機構':unitType=='4' ? '政府單位機構':unitType=='5' ? 'NGO機構':
+    unitType =='2' ? '中等教育機構':unitType=='3' ? '高等教育機構':unitType=='4' ? '政府單位機構':unitType=='5' ? 'NGO機構':
     unitType =='6' ? '企業機構':unitType=='7' ? '其他':unitType=='8' ? '學前教育':unitType=='9' ? '特殊教育':''
     userdata.value.professional=jobTitle
 }

+ 4 - 4
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -52,7 +52,7 @@
 										</span>
 									</MenuItem>
 								</Submenu>
-								<MenuItem :name="item.menuName" v-if="$access.ability(item.role, item.permission).validateAll && !item.child.length && item.isShow" :to="item.router">
+								<MenuItem :name="item.menuName" @click.native.capture="menuClick(item)" v-if="$access.ability(item.role, item.permission).validateAll && !item.child.length && item.isShow" :to="item.router">
 									<!-- <Tooltip :content="item.name" placement="right" transfer v-show="isCollapsed"> -->
 									<Icon v-show="isCollapsed" :custom="item.icon" style="width: 55px; text-align: left" :class="isCollapsed ? 'collapse-icon-size' : ''" size="16" />
 									<!-- </Tooltip> -->
@@ -387,6 +387,7 @@
 					});
 			},
 			menuClick(menu) {
+				console.error(menu)
 				if (menu.router == "#") {
 					if (menu.to === "privSokrate") {
 						this.toPrivSokrate();
@@ -725,8 +726,8 @@
 									permission: "dashboard-read",
 									menuName: "TeacherDashboard",
 									child: [],
-                                    isShow: this.isGlobalSite
-									//isShow:true,
+                                    //isShow: this.isGlobalSite
+									isShow:true,
 								},
 								// 教学看板(国际站单独)
 								{
@@ -1246,7 +1247,6 @@
 									tag: "",
 									child:[],
 									role: "admin",
-									menuName: "TeacherDashboard",
 									permission: "research-read|research-upd",
 									menuName: "schoolSokrate",
 									isShow: true

+ 4 - 4
TEAMModelOS/ClientApp/src/components/student-web/WrongQusetion/Index.vue

@@ -50,12 +50,12 @@ export default {
             }
             // 先判断大陆站还是国际站,再判断test/product/rc,test和rc共用一个地址
             if(this.$store.state.config.srvAdr === 'China') {
-                if(this.$store.state.config.srvAdrType === 'product') {
-                    url.name = 'https://malearn.teammodel.cn'
-                    url.key = '2BcXFR_hvzG1pZjqIkaM7Dx74Hcu6m0PwwOacFpDpq44AzFuHJBRXA=='
-                } else {
+                if(this.$store.state.config.srvAdrType === 'test') {
                     url.name = 'https://malearn-rc.teammodel.cn'
                     url.key = 'lghWhJduNiAlo-e8isqEoROjdR7DAC-50XNtanIwHKYlAzFu1aog_A=='
+                } else {
+                    url.name = 'https://malearn.teammodel.cn'
+                    url.key = '2BcXFR_hvzG1pZjqIkaM7Dx74Hcu6m0PwwOacFpDpq44AzFuHJBRXA=='
                 }
             } else { //國際站:正式站、RC站 呼叫malearn正式站
                 if (this.$store.state.config.srvAdrType === 'product' || this.$store.state.config.srvAdrType === 'rc') {

+ 83 - 82
TEAMModelOS/ClientApp/src/view/areaMgmt/AreaLayout.vue

@@ -295,6 +295,89 @@ export default {
           //isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain() && this.isGlobalSite()
           isShow:true,
         },
+        
+        // 苏格拉底
+        {
+          icon: 'iconfont icon-course-videos',
+          name: this.$t('system.menu.toSokrates'),
+          router: '#',
+          tag: '',
+          role: '',
+          child: [],
+          permission: '',
+          menuName: 'privSokrate',
+          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain(),
+          to: 'privSokrate'
+        },
+        // 活动报名
+        {
+          icon: "iconfont icon-yishu",
+          name: '活动平台',
+          router: "",
+          tag: "",
+          role: "admin",
+          permission: "art-read|art-upd",
+          subName: "activitySystem",
+          menuName: "activitySystem",
+          isShow: this.isShowActi,
+          child: [
+            /* {
+              icon: "iconfont icon-data-count",
+              name: '活动管理',
+              router: "/area/areaActivityManage",
+              tag: "",
+              role: "admin",
+              permission: "art-read|art-upd",
+              menuName: "areaActivityManage",
+              isShow: true,
+            }, */
+            {
+              icon: "iconfont icon-test",
+              name: '活动管理',
+              router: "/area/areaActivityProcess",
+              tag: "",
+              role: "admin",
+              permission: "art-read|art-upd",
+              menuName: "areaActivityProcess",
+              isShow: true,
+            },
+            {
+              icon: "iconfont icon-assess",
+              name: '基础设置',
+              router: "/area/areaActivitySet",
+              tag: "",
+              role: "admin",
+              permission: "art-read|art-upd",
+              menuName: "areaActivitySet",
+              isShow: true,
+            },
+          ],
+        },
+        // 活动系统
+        {
+          icon: 'iconfont icon-myNote',
+          name: this.$t('system.menu.activity'),
+          router: '#',
+          tag: '',
+          role: 'admin|teacher',
+          child: [],
+          permission: '',
+          menuName: 'activity',
+          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain(),
+          to: 'activity'
+        },
+        // 资源平台
+        {
+          icon: 'iconfont icon-app',
+          name: this.$t('system.menu.platform'),
+          router: '/area/mgtPlatform',
+          tag: '',
+          role: '',
+          permission: '',
+          menuName: 'mgtPlatform',
+          child: [],
+          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain()
+        },
         // 研修平台
         {
           icon: 'iconfont icon-basic-setting',
@@ -386,88 +469,6 @@ export default {
           ],
           isShow: this.$store.state.config.srvAdr == 'China'
         },
-        // 苏格拉底
-        {
-          icon: 'iconfont icon-course-videos',
-          name: this.$t('system.menu.toSokrates'),
-          router: '#',
-          tag: '',
-          role: '',
-          child: [],
-          permission: '',
-          menuName: 'privSokrate',
-          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain(),
-          to: 'privSokrate'
-        },
-        // 活动报名
-        {
-          icon: "iconfont icon-yishu",
-          name: '活动平台',
-          router: "",
-          tag: "",
-          role: "admin",
-          permission: "art-read|art-upd",
-          subName: "activitySystem",
-          menuName: "activitySystem",
-          isShow: this.isShowActi,
-          child: [
-            /* {
-              icon: "iconfont icon-data-count",
-              name: '活动管理',
-              router: "/area/areaActivityManage",
-              tag: "",
-              role: "admin",
-              permission: "art-read|art-upd",
-              menuName: "areaActivityManage",
-              isShow: true,
-            }, */
-            {
-              icon: "iconfont icon-test",
-              name: '活动管理',
-              router: "/area/areaActivityProcess",
-              tag: "",
-              role: "admin",
-              permission: "art-read|art-upd",
-              menuName: "areaActivityProcess",
-              isShow: true,
-            },
-            {
-              icon: "iconfont icon-assess",
-              name: '基础设置',
-              router: "/area/areaActivitySet",
-              tag: "",
-              role: "admin",
-              permission: "art-read|art-upd",
-              menuName: "areaActivitySet",
-              isShow: true,
-            },
-          ],
-        },
-        // 活动系统
-        {
-          icon: 'iconfont icon-myNote',
-          name: this.$t('system.menu.activity'),
-          router: '#',
-          tag: '',
-          role: 'admin|teacher',
-          child: [],
-          permission: '',
-          menuName: 'activity',
-          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain(),
-          to: 'activity'
-        },
-        // 资源平台
-        {
-          icon: 'iconfont icon-app',
-          name: this.$t('system.menu.platform'),
-          router: '/area/mgtPlatform',
-          tag: '',
-          role: '',
-          permission: '',
-          menuName: 'mgtPlatform',
-          child: [],
-          isShow: !this.$jsFn.checkJinNiu() && !this.$jsFn.checkTrain()
-        },
       ]
     },
     studentMenu () {

+ 12 - 2
TEAMModelOS/ClientApp/src/view/dashboardCenter/DashboardCenter.vue

@@ -54,10 +54,20 @@
 						}
 						break;
 					case "teacher":
-						this.$router.push("researchDashboard");
+						let hasTeacherAuth = localStorage.edition === 'standard' || localStorage.edition === 'pro'
+						if(hasTeacherAuth){
+							this.$router.push("researchDashboard");
+						}else{
+							this.$Message.warning(this.$t('schoolBaseInfo.authWarning'))
+						}
 						break;
 					case "student":
-						this.$router.push("fiveEdu");
+						let hasStuAuth = localStorage.edition === 'pro'
+						if(hasStuAuth){
+							this.$router.push("fiveEdu");
+						}else{
+							this.$Message.warning(this.$t('schoolBaseInfo.authWarning'))
+						}
 						break;
 					default:
 						break;

+ 1 - 0
TEAMModelOS/ClientApp/src/view/iot/echarts/barandLine/barandLine.vue

@@ -417,6 +417,7 @@
       },
       baldata: {
           handler(newData) {
+            console.log(newData,'baldata是否触发')
             newData.length !==0 ? (this.transferJson=newData,this.init()):''
           },
           immediate: true,

+ 435 - 0
TEAMModelOS/ClientApp/src/view/iot/echarts/barandLine/specialBarline.vue

@@ -0,0 +1,435 @@
+<template>
+    <div style="height: 100%;">
+      <Echart :options="options" id="bottomLeftChart" ref="myEcharts" height="100%" width="100%"></Echart>
+    </div>
+  </template>
+  <script>
+  import Echart from '@/common/echart'
+  export default {
+    data() {
+      return {
+        options: {},
+        myEcharts:'',
+        trendData: {
+          rooms: [],
+          teachs: [],
+          students: [],
+          classinfo: [],
+          classtimes: [],
+          classstudenttimes:[],
+          xdatas:[],
+        },
+        transferJson:{}
+      };
+    },
+    components: {
+      Echart,
+    },
+    props: {
+      cdata: {
+        type: Object,
+        default: () => ({})
+      },
+        basics:{
+         type: Object,
+         default: () => ({})
+        },
+    },
+    created() {
+      // 获取课例趋势图数据
+    //   let trendJson = this.$store.state.dashboard.researchDashboard.trend
+     let trendJson=[
+        // {name:1,value:[43,5,3,7]},
+        // {name:2,value:[15,0,2,5]},
+        // {name:3,value:[77,15,30,48]},
+        // {name:4,value:[62,15,21,45]},
+        // {name:5,value:[33,11,13,27]},
+        // {name:6,value:[105,35,43,87]},
+        // {name:7,value:[80,30,33,57]},
+        // {name:8,value:[70,25,23,62]},
+        // {name:9,value:[23,5,13,27]},
+        // {name:10,value:[66,18,23,47]},
+        // {name:11,value:[55,15,13,37]},
+        // {name:12,value:[43,5,3,7]},
+        // {name:13,value:[43,5,3,7]},
+        // {name:14,value:[43,5,3,7]},
+        // {name:15,value:[43,5,3,7]},
+        // {name:16,value:[43,5,3,7]},
+      ]
+      // trendJson=this.transferJson
+      // if (trendJson) {
+      //   trendJson.forEach(i => {
+      //     this.trendData.xData.push(`${this.$t('lessonRecord.echarts.weekUtil')}${i.name}${this.$t('lessonRecord.echarts.week')}`)
+      //     this.trendData.line1.push(i.value[0])
+      //     this.trendData.line2.push(i.value[1])
+      //     this.trendData.line3.push(i.value[2])
+      //     this.trendData.line4.push(i.value[3])
+      //   })
+      // }
+      
+    },
+    mounted(){
+        this.myEcharts=this.$refs.myEcharts
+    },
+    methods: {
+      init() {
+        let trendJson={}
+        trendJson=this.transferJson
+        console.log(trendJson,'数据进入')
+        // if (trendJson) {
+        //   trendJson.forEach(i => {
+        //     this.trendData.xData.push(`${this.$t('lessonRecord.echarts.weekUtil')}${i.name}${this.$t('lessonRecord.echarts.week')}`)
+        //     this.trendData.line1.push(i.value[0])
+        //     this.trendData.line2.push(i.value[1])
+        //     this.trendData.line3.push(i.value[2])
+        //     this.trendData.line4.push(i.value[3])
+        //   })
+        // }
+        let weekNum=trendJson.weekNums
+            for(let i=1;i<=weekNum;i++){
+                this.trendData.xdatas.push(`${this.$t('lessonRecord.echarts.weekUtil')}${i}${this.$t('lessonRecord.echarts.week')}`)
+        }
+        this.trendData.rooms=trendJson.rooms
+        this.trendData.teachs=trendJson.teachs
+        this.trendData.students=trendJson.students
+        this.trendData.classinfo=trendJson.classInfo
+        this.trendData.classtimes=trendJson.classTimes
+        this.trendData.classstudenttimes=trendJson.classstudenttimes
+
+        this.options.xAxis[0].data=this.trendData.xdatas
+        this.options.series[0].data=trendJson.rooms
+        this.options.series[1].data=trendJson.teachs
+        this.options.series[2].data=trendJson.students
+        this.options.series[3].data=trendJson.classInfo
+        this.options.series[4].data=trendJson.classTimes
+        this.options.series[5].data=trendJson.classStudenttimes
+      }
+    },
+    watch: {
+        basic: {
+        handler(newData) {
+          console.log(newData,'传输特殊的值2')
+          this.options = {
+            tooltip: {
+              trigger: "axis",
+              axisPointer: {
+                type: "shadow",
+                textStyle: {
+                  color: "#fff"
+                }
+                
+              },
+            },
+            grid: {
+              width: '88%',
+			  left:'5%',
+			  right:'15%',
+			  bottom:'13%',
+              borderWidth: 0,
+              textStyle: {
+                color: "#fff"
+              }
+            },
+            legend: {
+              x: 'center',
+              textStyle: {
+                color: '#90979c',
+              },
+              data: ['教室数','教师数','学生参与人数','课堂总数','课堂总时数','学生参与总时数']
+            },
+            calculable: true,
+            xAxis: [{
+              type: "category",
+              axisLine: {
+                lineStyle: {
+                  color: "rgba(204,187,225,0.5)",
+                }
+              },
+              splitLine: {
+                show: false
+              },
+              axisTick: {
+                show: true
+              },
+              data:this.trendData.xdatas,
+            }],
+  
+            yAxis: [
+                {
+              type: "value",
+              name: '次量',
+              minInterval: 1,
+              nameTextStyle: {
+                color: '#cecece',
+                padding: [0, 0, 0, -40],
+              },
+              splitLine: {
+                show: false
+              },
+              axisLine: {
+                lineStyle: {
+                  color: "rgba(204,187,225,0.5)",
+                }
+              },
+              axisLabel: {
+                show: true,
+                textStyle: {
+                    color: "rgba(204,187,225,0.5)",
+                }
+            },
+            },
+            {
+                type: "value",
+                name: '时间',
+                minInterval: 1,
+                nameTextStyle: {
+                color: '#cecece',
+                padding: [0, 0, 0, -40],
+              },
+                splitLine: {show: false},
+                axisLine: {
+                    lineStyle: {
+                        color: '#B4B4B4',
+                    }
+                },
+                axisLine: {
+                lineStyle: {
+                  color: "rgba(204,187,225,0.5)",
+                }
+              },
+              axisLabel: {
+                show: true,
+                formatter: "{value}Min", //右侧Y轴文字显示
+                textStyle: {
+                    color: "rgba(204,187,225,0.5)",
+                    fontSize: 12
+                }
+            }
+            }
+        ],
+            dataZoom: [{
+              show: true,
+              height: 10,
+              xAxisIndex: [0],
+              bottom: 20,
+              handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
+              handleSize: '110%',
+              handleStyle: {
+                color: "#0090ff",
+              },
+              textStyle: {
+                color: "rgba(204,187,225,0.5)",
+              },
+              fillerColor: "rgba(67,55,160,0.4)",
+              borderColor: "rgba(204,187,225,0.5)",
+  
+            }, {
+              type: "inside",
+              show: true,
+              height: 15,
+              start: 1,
+              end: 35
+            }],
+            series: [
+            {
+                name:'教室数',
+                type:'bar',
+                barWidth: 10,
+                symbol: 'circle',
+                itemStyle: {
+                    color: "#4693EC",
+                    normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: "#00FFE3"
+                        },
+                        {
+                            offset: 1,
+                            color: "#4693EC"
+                        }
+                    ])
+                }
+                },
+                data:this.trendData.rooms
+            },
+            {
+                name:'教师数',
+                type:'bar',
+                barWidth: 10,
+                symbol: 'circle',
+                // stack: '教师数',
+                itemStyle: {
+                    color: "#8EC5FC",
+                    normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: "#E0C3FC"
+                        },
+                        {
+                            offset: 1,
+                            color: "#8EC5FC"
+                        }
+                    ])
+                }
+                },
+                data:this.transferJson.rooms
+            },
+            {
+                name:'学生参与人数',
+                type:'bar',
+                // stack: '参与人数',
+                barWidth: 10,
+                symbol: 'circle',
+                itemStyle: {
+                    color: "#85FFBD",
+                    normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: "#FFFB7D"
+                        },
+                        {
+                            offset: 1,
+                            color: "#85FFBD"
+                        }
+                    ])
+                }
+                },
+                data:this.transferJson.students
+            },
+            {
+                name:'课堂总数',
+                type:'bar',
+                // stack: '参与人数',
+                barWidth: 10,
+                symbol: 'circle',
+                itemStyle: {
+                    color: "#FA709A",
+                    normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: "#FEE140"
+                        },
+                        {
+                            offset: 1,
+                            color: "#FA709A"
+                        }
+                    ])
+                }
+                },
+                data:this.transferJson.class
+            },
+            { //作品数量
+            name: '课堂总时数',
+            type: 'line',
+            yAxisIndex: 1,
+            // smooth: true, //是否平滑曲线显示
+            // 			symbol:'circle',  // 默认是空心圆(中间是白色的),改成实心圆
+            showAllSymbol: true,
+            symbol: 'circle',
+            symbolSize: 5,
+            lineStyle: {
+                normal: {
+                    color: "rgb(40,255,179,.5)", // 线条颜色
+                },
+                borderColor: '#f0f'
+            },
+            label: {
+                show: true,
+                position: 'top',
+                textStyle: {
+                    color: 'rgb(40,255,179,.9)',
+                }
+            },
+            itemStyle: {
+                normal: {
+                    color: "rgb(40,255,179,.5)",
+                }
+            },
+            tooltip: {
+                show: false
+            },
+            areaStyle: { //区域填充样式
+                normal: {
+                    //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: 'rgb(40,255,179,.5)'
+                        },
+                        {
+                            offset: 1,
+                            color: 'rgba(0,0,0, 0)'
+                        }
+                    ], false),
+                    shadowColor: 'rgba(53,142,215, 0.9)', //阴影颜色
+                    shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
+                }
+            },
+            data:this.transferJson.classtimes
+            },
+            { //作品数量
+            name: '学生参与总时数',
+            type: 'line',
+            yAxisIndex: 1,
+            // smooth: true, //是否平滑曲线显示
+            // 			symbol:'circle',  // 默认是空心圆(中间是白色的),改成实心圆
+            showAllSymbol: true,
+            symbol: 'circle',
+            symbolSize: 5,
+            lineStyle: {
+                normal: {
+                    color: "#058cff", // 线条颜色
+                },
+                borderColor: '#f0f'
+            },
+            label: {
+                show: true,
+                position: 'top',
+                textStyle: {
+                    color: "#058cff",
+                }
+            },
+            itemStyle: {
+                normal: {
+                    color:"#058cff",
+                }
+            },
+            tooltip: {
+                show: false
+            },
+            areaStyle: { //区域填充样式
+                normal: {
+                    //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: 'rgb(40,255,179,.5)'
+                        },
+                        {
+                            offset: 1,
+                            color: 'rgba(0,0,0, 0)'
+                        }
+                    ], false),
+                    shadowColor: 'rgba(53,142,215, 0.9)', //阴影颜色
+                    shadowBlur: 10 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
+                }
+            },
+            data:this.transferJson.classstudenttimes
+            },
+         ]
+          }
+        },
+        immediate: true,
+        deep: true
+      },
+      basics:{
+        handler(newData) {
+             console.log(newData,'触发')
+             console.log(this.options)
+             newData.weekNums !==0 ? (this.transferJson=newData,this.init()):''
+          },
+          immediate: true,
+          deep: true
+      },
+    },
+  }
+  </script>
+  

+ 67 - 31
TEAMModelOS/ClientApp/src/view/iot/schooliot.vue

@@ -118,36 +118,17 @@
              <!--bottom-->
              <div class="bottombox">
                 <div class="bottombox-left">
+                      
                     <dv-border-box-12>
                         <div class="innerbox">
                             <p class="boxtitles">
-                                <span>{{$t('schoolIot.lessons.title')}}</span>
+                                <span>基础数据</span>
                                 <dv-decoration-3 style="width:200px;height:20px;"/>
                             </p>
-                            <div class="innerbox-inside">
-                                <!-- <div class="data-left">
-                                <BaseCircle  circleId="hiteach" chatName="HiTeach" :percent="45" subTitle="45" totalNum="158"></BaseCircle>
-                                </div>
-                                <div class="data-left">
-                                    <BaseCircle  circleId="hita" chatName="HiTA" :percent="20" subTitle="15" totalNum="60"></BaseCircle>
-                                </div>
-                                <div class="data-left">
-                                    <BaseCircle  circleId="hitachcc" chatName="HiTeach CC" :percent="10" subTitle="23" totalNum="80"></BaseCircle>
-                                </div>
-                                <div class="data-left">
-                                    <BaseCircle  circleId="webirs" chatName="WebIRS" :percent="40" subTitle="45" totalNum="77"></BaseCircle>
-                                </div> -->
-                                <barandLine :baldata="baldatas"></barandLine>
+                            <div class="barbox">
+                                <!-- <specialBarline  :rooms="rooms"  :teachs="teachs" :students="students" :classinfo="classInfo" :classtimes="classTimes" :classstudenttimes="classStudenttimes"></specialBarline> -->
+                                <specialBarline  :basics="basicsData"></specialBarline>
                             </div>
-                            <!-- <dv-decoration-2 :reverse="true" style="width:5px;height:95%;" :dur="5" /> -->
-                            <!-- <div class="data-right">
-                                <div class="data-right-top">
-                                    <YPie title="本月" :pieData="monthData"></YPie>
-                                </div>
-                                <div class="data-right-bottom">
-                                    <YPie title="学期" :pieData="semesterData"></YPie>
-                                </div>
-                            </div> -->
                         </div>
                     </dv-border-box-12>    
                 </div>
@@ -155,14 +136,14 @@
                     <dv-border-box-12>
                         <div class="innerbox">
                             <p class="boxtitles">
-                                <span>{{$t('schoolIot.morphologyClass.title')}}</span>
+                                <span>{{$t('schoolIot.lessons.title')}}</span>
                                 <dv-decoration-3 style="width:200px;height:20px;"/>
                             </p>
-                            <div class="barbox">
-                                <Bar title="学期" :cdata="bars"></Bar>
+                            <div class="innerbox-inside">
+                                <barandLine :baldata="baldatas"></barandLine>
                             </div>
                         </div>
-                    </dv-border-box-12>    
+                    </dv-border-box-12>  
                 </div>
              </div>
              <!--bottom end-->
@@ -178,6 +159,7 @@ import Bar from './echarts/bar/bar';
 import barandLine from './echarts/barandLine/barandLine';
 import BaseCircle from "./echarts/circle/index";
 import YPie from './echarts/pie/index';
+import specialBarline from './echarts/barandLine/specialBarline.vue';
 export default {
    name:'schooliot',
    components: {
@@ -186,7 +168,8 @@ export default {
     YPie,
     Bar,
     BaseCircle,
-    barandLine
+    barandLine,
+    specialBarline
   },
    data(){
     return{
@@ -276,6 +259,21 @@ export default {
         },
       locals: '',
       baldatas: [],
+      basicsData:{
+         rooms:[],
+         teachs:[],
+         students:[],
+         classInfo:[],
+         classTimes:[],
+         classStudenttimes:[],
+         weekNums:0,
+      },
+      rooms:[],
+      teachs:[],
+      students:[],
+      classInfo:[],
+      classTimes:[],
+      classStudenttimes:[],
       loading:false,
     }
    },
@@ -385,6 +383,44 @@ export default {
             ultimatelyData.push({name:item.week,value:valueData})
           })
           console.log(ultimatelyData, '最终数据')
+
+          //处理基础数据
+          let basicsTotal=[]
+          for (let i = 1; i <= weekNum; i++){
+            basicsTotal.push({week:i,room:0,teach:0,student:0,class:0,classTime:0,classStudenttime:0,deviceList:[],tmidList:[]})
+          }
+          res.iotData.forEach((item)=>{
+            let times = new Date(item.year + '-' + item.month + '-' + item.day)
+            let returnWeek = this.calculateWeekNumber(startime, times)
+            let reresultIndex = basicsTotal.findIndex((item) => { return item.week === returnWeek })
+            item.deviceList.forEach((itemA)=>{ basicsTotal[reresultIndex].deviceList.push(itemA)})
+            item.tmidList.forEach((itemS)=>{basicsTotal[reresultIndex].tmidList.push(itemS)})
+            basicsTotal[reresultIndex].student +=item.stuShow
+            basicsTotal[reresultIndex].class +=item.lessonRecord
+            basicsTotal[reresultIndex].classTime +=item.lessonLengMin
+            basicsTotal[reresultIndex].classStudenttime +=item.stuLessonLengMin
+          })
+          basicsTotal.forEach((item)=>{
+            item.deviceList=[...new Set(item.deviceList)]
+            item.room=item.deviceList.length
+            item.tmidList=[...new Set(item.tmidList)]
+            item.teach=item.tmidList.length
+          })
+           this.basicsData.rooms= basicsTotal.map(item =>item.room)
+           this.basicsData.teachs=basicsTotal.map(item=>item.teach)
+           this.basicsData.students=basicsTotal.map(item=>item.student)
+           this.basicsData.classInfo=basicsTotal.map(item=>item.class)
+           this.basicsData.classTimes=basicsTotal.map(item=>item.classTime)
+           this.basicsData.classStudenttimes=basicsTotal.map(item=>item.classStudenttime)
+           this.basicsData.weekNums=this.basicsData.rooms.length
+        //   this.rooms=basicsTotal.map(item => item.room)
+        //   this.teachs=basicsTotal.map(item=>item.teach)
+        //   this.students=basicsTotal.map(item=>item.student)
+        //   this.classInfo=basicsTotal.map(item=>item.class)
+        //   this.classTimes=basicsTotal.map(item=>item.classTime)
+        //   this.classStudenttimes=basicsTotal.map(item=>item.classStudenttime)
+          console.log(basicsTotal,'处理过后的')
+          console.log(this.basicsData,'对应')
           this.baldatas = ultimatelyData
           this.loading=false
         })
@@ -682,7 +718,7 @@ export default {
     height:44vh;
 }
 .bottombox-left{
-    width:55%;
+    width:50%;
     display: flex;
 }
 .innerbox{
@@ -708,7 +744,7 @@ export default {
     margin-top:5.5%;
 }
 .bottombox-right{
-    width:45%;
+    width:50%;
 }
 .data-left,.data-right{
     width:50%;

+ 3 - 1
TEAMModelOS/ClientApp/src/view/teachermgmt/components/mgt/TeacherMgt.vue

@@ -720,7 +720,6 @@ export default {
     },
     tableColumns() {
       let column = []
-      console.log(this.activePanel,'4444')
       this.columns.forEach(item => {
         if (this.activePanel) {
           if (!item.panelHide || item.panelHide == this.activePanel) {
@@ -1070,6 +1069,9 @@ export default {
     openSpaceAuth(panel) {
       this.updTeachers = []
       this.activePanel = panel
+      if(this.sltTeachers.length >1 && panel=='space'){
+        this.setSpaceRule.rule='select'
+      }
     },
     //打开批量授权面板
     openBatchAuth(panel) {

+ 2 - 2
TEAMModelOS/Controllers/Student/StudentController.cs

@@ -979,8 +979,8 @@ namespace TEAMModelOS.Controllers
                 }
                 //2.將OpenID放入學生Base
                 student.openId = openId;
-                await studentClient.ReplaceItemAsync(student, student.id);
-                //3.學生登入流程
+                //await studentClient.ReplaceItemAsync(student, student.id);
+                //3.學生登入流程(包含學生資料更新)
                 (string ip, string region) = await LoginService.LoginIp(HttpContext, _searcher);
                 (string auth_token, string blob_uri, string blob_sas, object classinfo, List<object> courses, AuthenticationResult token) = await StudentCheck(school, $"{student.id}", $"{student.classId}", $"{schoolCode}", $"{student.picture}", $"{student.name}", schoolClient, teacherClient, school.areaId, ip, client, student);
                 int countAuthorized = await GetStudentAuthNumByScale($"{schoolCode}", school);