Browse Source

Merge branch 'develop3.0' into develop3.0-tmd

CrazyIter_Bin 4 năm trước cách đây
mục cha
commit
8957dbb514
26 tập tin đã thay đổi với 21 bổ sung4731 xóa
  1. 2 1
      TEAMModelFunction/TriggerVote.cs
  2. 0 201
      TEAMModelOS/ClientApp/src/components/smartclassdashboard/ClassBar.vue
  3. 0 175
      TEAMModelOS/ClientApp/src/components/smartclassdashboard/ClassLine.vue
  4. 0 169
      TEAMModelOS/ClientApp/src/components/smartclassdashboard/FloorPlan.vue
  5. 0 89
      TEAMModelOS/ClientApp/src/components/smartclassdashboard/LegendPie.vue
  6. 0 208
      TEAMModelOS/ClientApp/src/components/smartclassdashboard/RingPie.vue
  7. 0 206
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/AccountLine.vue
  8. 0 133
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/ClassResourceBar.vue
  9. 0 138
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/ClasstypePie.vue
  10. 0 142
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/CourseBar.vue
  11. 0 176
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/FinishPercentPie.vue
  12. 0 172
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/RingPie.vue
  13. 0 151
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/TeachScienceBar.vue
  14. 0 242
      TEAMModelOS/ClientApp/src/components/smartschooldashboard/TotalLine.vue
  15. 0 15
      TEAMModelOS/ClientApp/src/router/routes.js
  16. 0 2
      TEAMModelOS/ClientApp/src/store/index.js
  17. 0 82
      TEAMModelOS/ClientApp/src/store/module/classMgmt.js
  18. 0 464
      TEAMModelOS/ClientApp/src/view/smartclassdashboard/Index.less
  19. 0 899
      TEAMModelOS/ClientApp/src/view/smartclassdashboard/Index.vue
  20. 0 418
      TEAMModelOS/ClientApp/src/view/smartschooldashboard/Index.less
  21. 0 577
      TEAMModelOS/ClientApp/src/view/smartschooldashboard/Index.vue
  22. 0 0
      TEAMModelOS/ClientApp/src/view/smartschooldashboard/menu/Create.vue
  23. 0 0
      TEAMModelOS/ClientApp/src/view/smartschooldashboard/menu/Detail.vue
  24. 17 14
      TEAMModelOS/Controllers/Client/HiTeachController.cs
  25. 0 55
      TEAMModelOS/Controllers/IoT/IoTController.cs
  26. 2 2
      TEAMModelOS/TEAMModelOS.csproj

+ 2 - 1
TEAMModelFunction/TriggerVote.cs

@@ -197,7 +197,8 @@ namespace TEAMModelFunction
                         {
                             await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<ActivityData>(data, data.id, new Azure.Cosmos.PartitionKey(data.code));
                         }
-                        
+                        //_azureRedis.GetRedisClient(8).KeyDelete($"Vote:Record:{vote.id}");
+                        //_azureRedis.GetRedisClient(8).KeyDelete($"Vote:Count:{vote.id}");
                         break;
                 }
             }

+ 0 - 201
TEAMModelOS/ClientApp/src/components/smartclassdashboard/ClassBar.vue

@@ -1,201 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-      return {
-        myChart: ''
-      }
-    },
-    props: {
-      id: {
-        type: String
-      },
-      todayData: {
-      },
-      lastWeekData: {
-      },
-      callBack: {
-        type: String
-      }
-    },
-    watch: {
-      todayData(val) {
-        if (val != null) { this.drawLine() }
-      }
-    },
-    methods: {
-      drawLine() {
-          let _this = this
-          if (this.todayData == null) return false
-
-          let lastWeekKeys = Object.keys(this.lastWeekData)
-          let todayKeys = Object.keys(this.todayData)
-          let yLabel = []
-
-          // 取得Y軸Label
-          function my_unique(a) {
-            var a = a.concat()// 使用concat()再複製一份陣列,避免影響原陣列
-            for (var i = 0; i < a.length; ++i) {
-                for (var j = i + 1; j < a.length; ++j) {
-                    if (a[i] === a[j]) { a.splice(j, 1) }
-                }
-            }
-
-            return a
-          };
-          let temp = my_unique(lastWeekKeys.concat(todayKeys))
-          temp.sort(function(a, b) {
-            return a - b
-          })
-
-          temp.forEach(function(item) {
-            yLabel.push(_this.$t('classMgmt.grade' + item))
-          })
-
-          let todayDataArray = []
-          let lastWeekDataArray = []
-
-          Object.keys(this.lastWeekData).forEach(function(item) {
-            if (_this.isInteger(item)) {
-              let newKey = _this.$t('classMgmt.grade' + item)
-              _this.lastWeekData[newKey] = _this.lastWeekData[item]
-              delete _this.lastWeekData[item]
-            }
-          })
-
-          Object.keys(this.todayData).forEach(function(item) {
-            if (_this.isInteger(item)) {
-              let newKey = _this.$t('classMgmt.grade' + item)
-              _this.todayData[newKey] = _this.todayData[item]
-              delete _this.todayData[item]
-            }
-          })
-
-          // 今日資料
-          yLabel.map(function(key) {
-            todayDataArray.push(_this.todayData[key])
-          })
-          // 上週資料
-          yLabel.map(function(key) {
-            lastWeekDataArray.push(_this.lastWeekData[key])
-          })
-
-          // 基于准备好的dom,初始化echarts实例
-          this.myChart = this.$echarts.init(document.getElementById(this.id))
-          this.myChart.setOption({
-            backgroundColor: '#343a4073',
-            tooltip: {
-              trigger: 'axis',
-              axisPointer: {
-                type: 'shadow'
-              }
-              // formatter: function(params){
-              //   // 故意開啟 但不設定使ToolTip 沒有彈跳的作用 但有Hover 功能
-              // }
-            },
-            grid: {
-              left: '5%',
-              right: '0',
-              bottom: '0',
-              top: '0',
-              containLabel: true
-            },
-            xAxis: {
-              type: 'value',
-              boundaryGap: false,
-              axisLabel: {
-                  inside: true,
-                  textStyle: {
-                      color: 'transparent'
-                  }
-              },
-              splitLine: {
-                  show: true,
-                  lineStyle: {
-                      color: 'rgba(185, 193, 173, 0.63)'
-                  }
-              }
-            },
-            yAxis: {
-              type: 'category',
-              axisLabel: {
-                textStyle: {
-                  fontSize: 12,
-                  color: '#94998a'
-                }
-              },
-              splitLine: {
-                lineStyle: {
-                  color: 'rgba(185, 193, 173, 0.63)'
-                },
-                show: true
-              },
-              axisLine: {
-                lineStyle: {
-                  color: 'rgba(185, 193, 173, 0.63)',
-                  width: 1
-                }
-              },
-              data: yLabel
-            },
-            series: [
-              {
-                name: _this.$t('classMgmt.today'),
-                type: 'bar',
-                data: todayDataArray,
-                barWidth: 13, // 柱子宽度
-                itemStyle: {
-                  normal: { // 渐变色
-                    color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                      offset: 0,
-                      color: 'rgba(28, 208, 161, 1)' // 0% 处的颜色
-                    }, {
-                      offset: 1,
-                      color: 'rgba(28, 208, 161, 0.5)' // 100% 处的颜色
-                    }], false)
-                  }
-                }
-              },
-              {
-                name: _this.$t('classMgmt.lastweek'),
-                type: 'bar',
-                data: lastWeekDataArray,
-                barWidth: 13, // 柱子宽度
-                itemStyle: {
-                  normal: { // 渐变色
-                    color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                      offset: 0,
-                      color: 'rgba(228, 233, 220, 1)' // 0% 处的颜色
-                    }, {
-                      offset: 1,
-                      color: 'rgba(228, 233, 220, 0.5)' // 100% 处的颜色
-                    }], false)
-                  }
-                }
-              }
-            ]
-          })
-          // highlight觸發項
-          this.myChart.on('highlight', function(params) {
-            _this.$emit('highLightInfo', { 'id': yLabel[params.batch[0].dataIndex], 'today': todayDataArray[params.batch[0].dataIndex], 'lastWeek': lastWeekDataArray[params.batch[1].dataIndex] })
-          })
-          this.myChart.on('downplay', function(params) {
-            _this.$emit('downplay', yLabel[params.batch[0].dataIndex])
-          })
-      },
-      isInteger(obj) {
-        return Math.floor(obj) === obj
-      }
-    },
-    mounted() {
-      this.drawLine()
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 175
TEAMModelOS/ClientApp/src/components/smartclassdashboard/ClassLine.vue

@@ -1,175 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {}
-    },
-    props: {
-        id: {
-            type: String
-        },
-        time: {
-            type: Array,
-             default: function() {
-                return ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00']
-            }
-        },
-        data: {
-            type: Array
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    watch: {
-        data() {
-            this.drawLine()
-        }
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            let myChart = this.$echarts.init(document.getElementById(this.id))
-            let arrlabel = this.time
-            let arrTotal = this.data
-            myChart.setOption({
-                backgroundColor: 'rgba(17, 17, 17, 0.14)',
-                tooltip: {
-                    trigger: 'axis',
-                    borderRadius: 0
-                    // backgroundColor:'#7AD1A8',
-                    // formatter: function(pm) {
-                    //     var param = pm[0];
-                    //     var pht = '<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:rgba(166,154,228);"></span>';
-                    //     console.log(param.marker);
-                    //     var prm = "星期" + "日一二三四五六 ".charAt(new Date(param.name).getDay());
-                    //     return param.name + ":&nbsp;&nbsp;" + prm + "<br>" +
-                    //         pht + param.seriesName + ":&nbsp;&nbsp;" + param.value + "&nbsp;&nbsp;|&nbsp;&nbsp;80.33ttt%";
-                    // },
-                    //   axisPointer: { // 坐标轴指示器,坐标轴触发有效
-                    //         type: 'none' // 默认为直线,可选为:'line' | 'shadow'
-                    //     },
-                },
-                grid: {
-                    left: '0',
-                    right: '0',
-                    bottom: '5%',
-                    top: '0',
-                    containLabel: true
-                },
-                xAxis: [{
-                    axisTick: {
-                        show: false
-                    },
-                    type: 'category',
-                    axisLabel: {
-                        // show: false,
-                        margin: 10,
-                        textStyle: {
-                            fontSize: 12,
-                            color: '#94998a'
-                        }
-                    },
-                    boundaryGap: true,
-                    splitLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        },
-                        show: true
-                    },
-                    axisLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)',
-                            width: 1
-                        }
-                    },
-                    data: arrlabel
-                }],
-                yAxis: [{
-                    position: 'right',
-                    type: 'value',
-                    // name: '单 位(%)',
-                    axisTick: {
-                        show: false
-                    },
-                    axisLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    },
-                    axisLabel: {
-                        margin: 10,
-                        inside: true,
-                        textStyle: {
-                            fontSize: 14,
-                            color: 'transparent'
-                        }
-                    },
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    }
-                }],
-                series: [{
-                    // name: '实名率',
-                    type: 'line',
-                    // symbol: 'circle',
-                    // symbolSize: 5,
-                    // showSymbol: false,
-                    // markPoint: { // markLine 也是同理
-                    //   data: [{
-                    //     coord: [0,1,2,3,4], // 其中 5 表示 xAxis.data[5],即 '33' 这个元素。
-                    //     // coord: ['5', 33.4] // 其中 '5' 表示 xAxis.data中的 '5' 这个元素。
-                    //     // 注意,使用这种方式时,xAxis.data 不能写成 [number, number, ...]
-                    //     // 而只能写成 [string, string, ...]
-                    //   }]
-                    // },
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(28, 208, 161, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(28, 208, 161, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#1CD0A1'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal
-                }]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 169
TEAMModelOS/ClientApp/src/components/smartclassdashboard/FloorPlan.vue

@@ -1,169 +0,0 @@
-<template>
-    <div style="height: 100%;text-align: center;width: 100%;">
-        <img id="floorplanImg" style="width: 100%;height: 100%;display: none;" src="@/assets/image/floorplan.png" />
-        <img id="redriangle" style="display: none;" src="@/assets/redpin.svg" />
-        <img id="wihiteriangle" style="display: none;" src="@/assets/pin.svg" />
-        <img id="greenriangle" style="display: none;" src="@/assets/greenpin.svg" />
-        <canvas id="canvasBOX" width="1800" height="800" style="display: block;background: #D6F8FF;">
-            当前浏览器不支持canvas
-        </canvas>
-    </div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-
-        }
-    },
-    mounted() {
-        this.$nextTick(() => {
-            var redpin = document.getElementById('redriangle')
-            var pin = document.getElementById('wihiteriangle')
-            var greenpin = document.getElementById('greenriangle')
-
-            var canvas = document.getElementById('canvasBOX')
-                var graphs = []
-                var graphAttr = [
-                    { id: 1, x: 60, y: 60, w: 35, h: 35, canvasObj: canvas, pin: pin },
-                    { id: 2, x: 350, y: 120, w: 35, h: 35, canvasObj: canvas, pin: redpin },
-                    { id: 3, x: 200, y: 130, w: 35, h: 35, canvasObj: canvas, pin: greenpin }
-                ]
-                var tempGraphArr = []
-
-                // sessionStorage.classPlan = [
-                //     {id:1, x:60 , y :60 , w:35 , h:35 , canvasObj:canvas,  pin: pin},
-                //     {id:2, x:350 , y :120 , w:35 , h:35 , canvasObj:canvas ,  pin: redpin},
-                //     {id:3, x:200 , y :130 , w:35 , h:35 , canvasObj:canvas ,  pin: greenpin}
-                // ];
-                // graphAttr = sessionStorage.classPlan;
-
-            var img = document.getElementById('floorplanImg')
-            var ctx = canvas.getContext('2d')
-            ctx.drawImage(img, 0, 0)
-            var dragGraph = function(x, y, w, h, canvas, pin, id) {
-                this.id = id
-                this.x = x
-                this.y = y
-                this.w = w
-                this.h = h
-                this.pin = pin
-                this.canvas = canvas
-                this.context = canvas.getContext('2d')
-                this.canvasPos = canvas.getBoundingClientRect()
-            }
-
-            dragGraph.prototype = {
-                paint: function() {
-                    this.context.drawImage(this.pin, this.x, this.y, this.w, this.h)
-                },
-                isMouseInGraph: function(mouse) {
-                    this.context.beginPath()
-                    this.shapeDraw()
-                    return this.context.isPointInPath(mouse.x, mouse.y)
-                },
-                shapeDraw: function() {
-                    this.context.rect(this.x, this.y, this.w, this.h)
-                },
-                erase: function() {
-                    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)
-                }
-            }
-
-            canvas.addEventListener('mousedown', function(e) {
-                var mouse = {
-                    x: e.clientX - canvas.getBoundingClientRect().left,
-                    y: e.clientY - canvas.getBoundingClientRect().top
-                }
-                graphs.forEach(function(shape, index, array) {
-                    var offset = {
-                        x: mouse.x - shape.x,
-                        y: mouse.y - shape.y
-                    }
-                    if (shape.isMouseInGraph(mouse)) {
-                        tempGraphArr.push(shape)
-                        canvas.addEventListener('mousemove', function(e) {
-                            mouse = {
-                                x: e.clientX - canvas.getBoundingClientRect().left,
-                                y: e.clientY - canvas.getBoundingClientRect().top
-                            }
-
-                            if (shape === tempGraphArr[tempGraphArr.length - 1]) {
-                                shape.x = mouse.x - offset.x
-                                shape.y = mouse.y - offset.y
-
-                                shape.erase()
-                                drawGraph(shape.id)
-                            }
-                        }, false)
-                        canvas.addEventListener('mouseup', function() {
-                            let xPecent = shape.x / this.width
-                            console.log(xPecent.toFixed(3))
-                            tempGraphArr = []
-                        }, false)
-                    }
-                })
-                e.preventDefault()
-            }, false)
-
-            for (var i = 0; i < graphAttr.length; i++) {
-                var graph = new dragGraph(graphAttr[i].x, graphAttr[i].y, graphAttr[i].w, graphAttr[i].h,
-                                        graphAttr[i].canvasObj, graphAttr[i].pin, graphAttr[i].id)
-                graphs.push(graph)
-            }
-
-            var test
-            function drawGraph(id) {
-                ctx.drawImage(img, 0, 0)
-                for (var i = 0; i < graphAttr.length; i++) {
-                    if (!isNaN(id) && graphs[i].id == id) {
-                        test = graphs[i]
-                    } else {
-                        graphs[i].paint()
-                    }
-                }
-
-                if (id) {
-                    test.paint()
-                }
-            }
-            drawGraph()
-        })
-        // var c=document.getElementById("canvasBOX");
-        // var ctx=c.getContext("2d");
-        // var img=document.getElementById("floorplanImg");
-        // var pin=document.getElementById("wihiteriangle");
-        // var greenpin=document.getElementById("greenriangle");
-        // var redpin=document.getElementById("redriangle");
-        // c.width = img.width;
-        // c.height = img.height
-        // var pinW = 35;
-        // var pinH = 35;
-        // ctx.clearRect(0, 0, img.width, img.height);
-        // ctx.drawImage(img,0,0);
-        // ctx.drawImage(redpin, (c.width*0.595) ,(c.height * 0.67) , pinW, pinH);
-        // ctx.drawImage(greenpin, (c.width*0.45) ,(c.height * 0.23) , pinW, pinH);
-        // ctx.drawImage(greenpin, (c.width*0.455) ,(c.height * 0.79) , pinW, pinH);
-        // ctx.drawImage(greenpin, (c.width*0.595) ,(c.height * 0.79) , pinW, pinH);
-        // ctx.drawImage(greenpin, (c.width*0.245) ,(c.height * 0.79) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.52) ,(c.height * 0.23) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.59) ,(c.height * 0.23) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.595) ,(c.height * 0.73) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.525) ,(c.height * 0.73) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.525) ,(c.height * 0.79) , pinW, pinH);
-        // ctx.drawImage(pin, (c.width*0.455) ,(c.height * 0.73) , pinW, pinH);
-    },
-    created() {
-    },
-    watch: {
-
-    },
-    methods: {
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 89
TEAMModelOS/ClientApp/src/components/smartclassdashboard/LegendPie.vue

@@ -1,89 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {}
-    },
-    props: {
-        id: {
-            type: String
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            let myChart = this.$echarts.init(document.getElementById(this.id))
-            myChart.setOption({
-                tooltip: {
-                    trigger: 'item',
-                    formatter: '{a} <br/>{b}: {c} ({d}%)'
-                },
-                series: [
-                    {
-                        name: '访问来源',
-                        type: 'pie',
-                        radius: ['50%', '70%'],
-                        avoidLabelOverlap: false,
-                        label: {
-                            normal: {
-                                show: false,
-                                position: 'center',
-                                formatter: '{text|{b}}\n{value|{d}%}',
-                                rich: {
-                                    text: {
-                                        color: '#fefefe',
-                                        // fontSize: 14,
-                                        align: 'center',
-                                        verticalAlign: 'middle',
-                                        padding: 5
-                                    },
-                                    value: {
-                                        color: '#fefefe',
-                                        // fontSize: 24,
-                                        align: 'center',
-                                        verticalAlign: 'middle'
-                                    }
-                                }
-                            },
-                            emphasis: {
-                                show: true,
-                                textStyle: {
-                                    fontSize: 46
-                                }
-                            }
-                        },
-                        labelLine: {
-                            normal: {
-                                show: false
-                            }
-                        },
-                        data: [
-                            { value: 335, name: '直接访问' },
-                            { value: 310, name: '邮件营销' },
-                            { value: 234, name: '联盟广告' },
-                            { value: 135, name: '视频广告' },
-                            { value: 1548, name: '搜索引擎' }
-                        ]
-                    }
-                ]
-            })
-            myChart.dispatchAction({
-                type: 'highlight',
-                // seriesIndex: 1,
-                dataIndex: 2
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 208
TEAMModelOS/ClientApp/src/components/smartclassdashboard/RingPie.vue

@@ -1,208 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            mychat: '',
-            total: 0,
-            heightlightIndex: 0,
-            data: []
-        }
-    },
-    props: {
-        id: {
-            type: String
-        },
-        pieData: {
-            type: Object,
-            default: function() {
-                return {
-                    '1': 0, // 一年級
-                    '2': 0, // 二年級
-                    '3': 0,
-                    '4': 0,
-                    '5': 0
-                }
-            }
-        },
-        defaultActive: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        },
-        singleColor: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        },
-        title: {
-            type: String
-        },
-        tooltip: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    created() {
-    },
-    watch: {
-        pieData() {
-            this.drawLine()
-        }
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            this.data = []
-            Object.keys(this.pieData).forEach(function(key) {
-                _this.data.push({ 'name': key, 'value': _this.pieData[key] })
-            })
-            this.data.forEach(item => {
-                _this.total += item.value
-            })
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            let color = ['#FF6B6A', '#FF9FF4', '#48DBFC', '#1CD0A1', '#FDC958', '#FFAD76', '#b682f8'] // 大於2
-            let color2 = ['#FF6B6A', '#48DBFC'] // 小於2
-            if (Object.keys(this.pieData).length <= 2) {
-                color = color2
-            }
-            this.myChart.setOption({
-                title: {
-                    show: !!_this.title,
-                    text: _this.title ? _this.title : '',
-                    left: 'center',
-                    top: 'middle',
-                    textStyle: {
-                        color: '#fafafa',
-                        fontWeight: 100
-                    }
-                },
-                color: _this.singleColor ? 'rgba(228, 233, 220, 0.9)' : color,
-                tooltip: {
-                    show: _this.tooltip,
-                    trigger: 'item'
-                    // formatter: function(p){
-                    //     // 故意不填可用來觸發HighLight
-                    // }
-                },
-                series: [
-                    {
-                        type: 'pie',
-                        hoverOffset: 5,
-                        radius: _this.singleColor ? ['30%', '70%'] : ['50%', '70%'],
-                        avoidLabelOverlap: false,
-                        label: {
-                            normal: {
-                                show: false
-                            },
-                            emphasis: {
-                                show: false
-                            }
-                        },
-                        labelLine: {
-                            normal: {
-                                show: false
-                            }
-                        },
-                        data: _this.data,
-                        itemStyle: _this.singleColor ? {
-                            emphasis: {
-                                color: '#1CD0A1'
-                            }
-                        } : ''
-                    }
-                ]
-            })
-            // mouseover觸發項
-            this.myChart.on('mouseover', function(params) {
-                if (_this.data[_this.heightlightIndex].name != params.name) {
-                    _this.myChart.dispatchAction({
-                        type: 'downplay',
-                        dataIndex: _this.heightlightIndex
-                    })
-                }
-                params.name = _this.resName(params.name)
-                _this.$emit('highLightInfo', params)
-            })
-            if (this.defaultActive) {
-                if (this.data.length == 0) return false
-                // 預設先給第一筆初始值
-                let now = this.data[0].value
-                let name = this.resName(this.data[0].name)
-                let params = { 'value': this.data[0].value, 'name': name, 'percent': Number((now / this.total) * 100).toFixed(2) }
-                this.$emit('extraInfo', params)
-                this.$emit('highLightInfo', params)
-                // 預設第一個
-                this.myChart.dispatchAction({
-                    type: 'highlight',
-                    dataIndex: _this.heightlightIndex
-                })
-            }
-        },
-        // 供外部呼叫用
-        heightlight: function(dName) {
-            let _this = this
-            if (this.data[this.heightlightIndex].name != dName) {
-                this.myChart.dispatchAction({
-                    type: 'downplay',
-                    dataIndex: _this.heightlightIndex
-                })
-            }
-
-            this.myChart.dispatchAction({
-                type: 'highlight',
-                name: dName
-            })
-            let now = 0
-            this.data.forEach(item => {
-                if (item.name == dName) {
-                    now = item.value
-                }
-            })
-            let params = { 'percent': Number((now / this.total) * 100).toFixed(2) }
-
-            this.$emit('extraInfo', params)
-        },
-        downplay: function(dname) {
-            this.myChart.dispatchAction({
-                type: 'downplay',
-                name: dname
-            })
-        },
-        resName: function(name) {
-            switch (name) {
-                case 'Orther':
-                    return this.$t('classMgmt.Other')
-                    break
-                case 'UnKnown':
-                    return this.$t('classMgmt.Other')
-                    break
-                case 'smartClass':
-                    return this.$t('classMgmt.smartClass')
-                    break
-                case 'sokratesClass':
-                    return this.$t('classMgmt.sokratesClass')
-                    break
-                default:
-                    return name
-                    break
-            }
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 206
TEAMModelOS/ClientApp/src/components/smartschooldashboard/AccountLine.vue

@@ -1,206 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {}
-    },
-    props: {
-        id: {
-            type: String
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            let myChart = this.$echarts.init(document.getElementById(this.id))
-            let arrlabel = ['3/15', '3/16', '3/17', '3/18', '3/19', '3/20', '3/21', '3/22', '3/23', '3/24', 'TODAY']
-            let arrTotal1 = ['22', '17', '0', '26', '22', '24', '18', '30', '15', '10', '30']
-            let arrTotal2 = ['26', '20', '2', '18', '27', '22', '26', '33', '9', '0', '40']
-            myChart.setOption({
-                backgroundColor: 'rgba(17, 17, 17, 0.14)',
-                tooltip: {
-                    trigger: 'axis',
-                    borderRadius: 0
-                    // backgroundColor:'#7AD1A8',
-                    // formatter: function(pm) {
-                    //     var param = pm[0];
-                    //     var pht = '<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:rgba(166,154,228);"></span>';
-                    //     console.log(param.marker);
-                    //     var prm = "星期" + "日一二三四五六 ".charAt(new Date(param.name).getDay());
-                    //     return param.name + ":&nbsp;&nbsp;" + prm + "<br>" +
-                    //         pht + param.seriesName + ":&nbsp;&nbsp;" + param.value + "&nbsp;&nbsp;|&nbsp;&nbsp;80.33ttt%";
-                    // },
-                    //   axisPointer: { // 坐标轴指示器,坐标轴触发有效
-                    //         type: 'none' // 默认为直线,可选为:'line' | 'shadow'
-                    //     },
-                },
-                grid: {
-                    left: '0',
-                    right: '0',
-                    bottom: '0',
-                    top: '0',
-                    containLabel: true
-                },
-                xAxis: [{
-                    axisTick: {
-                        show: false
-                    },
-                    type: 'category',
-                    axisLabel: {
-                        margin: 10,
-                        textStyle: {
-                            fontSize: 11,
-                            color: '#94998a'
-                        },
-                        interval: 0,
-                        formatter: function(val) {
-                            let firstOne = arrlabel[0]
-                            let labellength = arrlabel.length
-                            let lastOne = arrlabel[labellength - 1]
-                            if (firstOne != val && lastOne != val) {
-                                return val
-                            }
-                        }
-                    },
-                    boundaryGap: false,
-                    splitLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        },
-                        show: true
-                    },
-                    axisLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)',
-                            width: 1
-                        }
-                    },
-                    data: arrlabel
-                }],
-                yAxis: [{
-                    position: 'right',
-                    type: 'value',
-                    // name: '单 位(%)',
-                    axisTick: {
-                        show: false
-                    },
-                    axisLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    },
-                    axisLabel: {
-                        margin: 10,
-                        inside: true,
-                        textStyle: {
-                            fontSize: 14,
-                            color: 'transparent'
-                        }
-                    },
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    }
-                }],
-                series: [{
-                    // name: '实名率',
-                    type: 'line',
-                    // symbol: 'circle',
-                    // symbolSize: 5,
-                    // showSymbol: false,
-                    // markPoint: { // markLine 也是同理
-                    //   data: [{
-                    //     coord: [0,1,2,3,4], // 其中 5 表示 xAxis.data[5],即 '33' 这个元素。
-                    //     // coord: ['5', 33.4] // 其中 '5' 表示 xAxis.data中的 '5' 这个元素。
-                    //     // 注意,使用这种方式时,xAxis.data 不能写成 [number, number, ...]
-                    //     // 而只能写成 [string, string, ...]
-                    //   }]
-                    // },
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(28, 208, 161, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(28, 208, 161, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#1CD0A1'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal1
-                },
-                {
-                    type: 'line',
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(72, 219, 252, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(72, 219, 252, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#48DBFC'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal2
-                }
-                ]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 133
TEAMModelOS/ClientApp/src/components/smartschooldashboard/ClassResourceBar.vue

@@ -1,133 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-      return {
-        myChart: ''
-      }
-    },
-    props: {
-      id: {
-        type: String
-      },
-      todayData: {
-        type: Object,
-        default: function() {
-          let demo = {}
-          demo[this.$t('schoolMgmt.text44')] = 9
-          demo[this.$t('schoolMgmt.text45')] = 11
-          demo[this.$t('schoolMgmt.text46')] = 16
-          demo[this.$t('schoolMgmt.text47')] = 6
-          demo[this.$t('schoolMgmt.text48')] = 13
-          demo[this.$t('schoolMgmt.text49')] = 22
-          return demo
-        }
-      },
-      callBack: {
-        type: String
-      }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 取得Y軸Label
-            let yLabel = Object.keys(this.todayData)
-            let todayDataArray = []
-
-            // 今日資料
-            yLabel.map(function(key) {
-              todayDataArray.push(_this.todayData[key])
-            })
-
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            this.myChart.setOption({
-              backgroundColor: '#343a4073',
-              tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                  type: 'shadow'
-                }
-                // formatter: function(params){
-                //   // 故意開啟 但不設定使ToolTip 沒有彈跳的作用 但有Hover 功能
-                // }
-              },
-              grid: {
-                left: '5%',
-                right: '0',
-                bottom: '0',
-                top: '0',
-                containLabel: true
-              },
-              xAxis: {
-                type: 'value',
-                boundaryGap: false,
-                axisLabel: {
-                    inside: true,
-                    textStyle: {
-                        color: 'transparent'
-                    }
-                },
-                splitLine: {
-                    show: true,
-                    lineStyle: {
-                        color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                }
-              },
-              yAxis: {
-                type: 'category',
-                axisLabel: {
-                  textStyle: {
-                    fontSize: 12,
-                    color: '#94998a'
-                  }
-                },
-                splitLine: {
-                  lineStyle: {
-                    color: 'rgba(185, 193, 173, 0.63)'
-                  },
-                  show: true
-                },
-                axisLine: {
-                  lineStyle: {
-                    color: 'rgba(185, 193, 173, 0.63)',
-                    width: 1
-                  }
-                },
-                data: yLabel
-              },
-              series: [
-                {
-                  name: 'today',
-                  type: 'bar',
-                  data: todayDataArray,
-                  barWidth: 15, // 柱子宽度
-                  itemStyle: {
-                    normal: { // 渐变色
-                      color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                        offset: 0,
-                        color: 'rgba(228, 233, 220, 1)' // 0% 处的颜色
-                      }, {
-                        offset: 1,
-                        color: 'rgba(228, 233, 220, 0.5)' // 100% 处的颜色
-                      }], false)
-                    }
-                  }
-                }
-              ]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 138
TEAMModelOS/ClientApp/src/components/smartschooldashboard/ClasstypePie.vue

@@ -1,138 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {}
-    },
-    props: {
-        id: {
-            type: String
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            let rich = {
-                b: {
-                    color: '#94998a',
-                    fontSize: 10,
-                    align: 'left',
-                    padding: [3, 0]
-                },
-                c: {
-                    color: '#FAFAFA',
-                    fontSize: 10,
-                    fontWeight: 100
-                },
-                d: {
-                    color: '#FAFAFA',
-                    fontSize: 15,
-                    fontWeight: 100
-                }
-            }
-            let color = ['#FF6B6A', '#48DBFC', '#1CD0A1', '#FDC958']
-            // 基于准备好的dom,初始化echarts实例
-            let myChart = this.$echarts.init(document.getElementById(this.id))
-            myChart.setOption({
-                tooltip: {
-                    formatter: function(p) {
-
-                    }
-                },
-    series: [
-        {
-            // name:'访问来源',
-            type: 'pie',
-            selectedMode: 'single',
-            radius: [0, '46%'],
-            center: ['50%', '50%'],
-            itemStyle: {
-                color: function(p) {
-                    return color[p.data.type]
-                }
-            },
-            label: {
-                normal: {
-                    position: 'inner',
-                    formatter: function(p) {
-                        let percent = Math.round(p.percent)
-                        return '{title|' + p.name + '}\n{num|' + percent + '%}'
-                    },
-                    rich: {
-                        title: {
-                            color: '#fafafa',
-                            fontSize: 10
-                        },
-                        num: {
-                            color: '#fafafa',
-                            fontSize: 10
-                        }
-                    }
-                }
-            },
-            labelLine: {
-                normal: {
-                    show: false
-                }
-            },
-            data: [
-                { value: 300, name: _this.$t('schoolMgmt.text17'), type: 0 },
-                { value: 500, name: _this.$t('schoolMgmt.text18'), type: 1 },
-                { value: 270, name: _this.$t('schoolMgmt.text19'), type: 2 },
-                { value: 250, name: _this.$t('schoolMgmt.text20'), type: 3 }
-            ]
-        },
-        {
-            color: ['#FF6B6A', '#48DBFC', '#1CD0A1', '#FDC958'],
-            name: '访问来源',
-            type: 'pie',
-            radius: ['55%', '69%'],
-            center: ['50%', '50%'],
-            itemStyle: {
-                color: function(p) {
-                    return color[p.data.type]
-    	        }
-            },
-            label: {
-                normal: {
-                    formatter: function(p) {
-                        let percent = Math.round(p.percent).toFixed(1)
-                        return '{b|' + p.name + '}\n{d|' + percent + '% }{c|(' + p.value + ')}'
-                    },
-                    rich: rich
-                },
-                emphasis: {
-                    show: true,
-                    textStyle: {
-                    }
-                }
-            },
-            data: [
-                { value: 200, name: _this.$t('schoolMgmt.text21'), type: 0 },
-                { value: 100, name: _this.$t('schoolMgmt.text22'), type: 0 },
-                { value: 100, name: _this.$t('schoolMgmt.text23'), type: 1 },
-                { value: 140, name: _this.$t('schoolMgmt.text24'), type: 1 },
-                { value: 70, name: _this.$t('schoolMgmt.text25'), type: 1 },
-                { value: 190, name: _this.$t('schoolMgmt.text26'), type: 1 },
-                { value: 190, name: _this.$t('schoolMgmt.text27'), type: 2 },
-                { value: 80, name: _this.$t('schoolMgmt.text28'), type: 2 },
-                { value: 125, name: _this.$t('schoolMgmt.text29'), type: 3 },
-                { value: 125, name: _this.$t('schoolMgmt.text30'), type: 3 }
-            ]
-        }
-    ]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 142
TEAMModelOS/ClientApp/src/components/smartschooldashboard/CourseBar.vue

@@ -1,142 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-      return {
-        myChart: ''
-      }
-    },
-    props: {
-      id: {
-        type: String
-      },
-      data: {
-        type: Object,
-        default: function() {
-          return { '模擬測驗': 0, '成績登錄': 5, '線上測驗': 16, 'HiTeach': 150, '合併活動': 6, '班級競賽': 23, '網路閱卷': 21 }
-        }
-      },
-      callBack: {
-        type: String
-      }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 取得x軸Label
-            let xLabel = Object.keys(this.data)
-            let courseDataArray = []
-            let max
-            // 資料統整
-            xLabel.map(function(key) {
-              courseDataArray.push(_this.data[key])
-            })
-
-            max = Math.max(...courseDataArray) + 20
-
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            this.myChart.setOption({
-              backgroundColor: '#343a4073',
-              tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                  type: 'shadow'
-                },
-                formatter: function(params) {
-                  // 故意開啟 但不設定使ToolTip 沒有彈跳的作用 但有Hover 功能
-                }
-              },
-              grid: {
-                left: '0',
-                right: '2%',
-                bottom: '1px',
-                top: '0',
-                containLabel: true
-              },
-              xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: xLabel,
-                boundaryGap: ['20%', '20%'],
-                axisLabel: {
-                    inside: true,
-                    textStyle: {
-                        color: 'transparent'
-                    }
-                },
-                axisLine: {
-                  show: true,
-                    lineStyle: {
-                      width: 1,
-                      color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                },
-                splitLine: {
-                    show: true,
-                    lineStyle: {
-                      width: 1,
-                      color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                }
-              },
-              yAxis: {
-                type: 'value',
-                max: max,
-                minInterval: 1,
-                axisLabel: {
-                  inside: true,
-                  textStyle: {
-                      color: 'transparent'
-                  }
-                },
-                axisLine: {
-                  show: true,
-                    lineStyle: {
-                      width: 1,
-                      color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                },
-                splitLine: {
-                    show: true,
-                    lineStyle: {
-                      width: 1,
-                      color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                }
-              },
-              series: [
-                {
-                  // name: 'today',
-                  type: 'bar',
-                  data: courseDataArray,
-                  barWidth: 10, // 柱子宽度
-                  barGap: 1, // 柱子之间间距
-                  itemStyle: {
-                    normal: { // 渐变色
-                      color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                        offset: 0,
-                        color: 'rgba(228, 233, 220, 1)' // 0% 处的颜色
-                      }, {
-                        offset: 1,
-                        color: 'rgba(228, 233, 220, 0.5)' // 100% 处的颜色
-                      }], false)
-                    }
-                  }
-                }
-              ]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 176
TEAMModelOS/ClientApp/src/components/smartschooldashboard/FinishPercentPie.vue

@@ -1,176 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            mychat: '',
-            realPercent: 100,
-            pieFinishPercent: 75
-        }
-    },
-    props: {
-        id: {
-            type: String
-        },
-        pieData: {
-            type: Object,
-            default: function() {
-                return { total: 175, value: 128 }
-            }
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    created() {
-        this.realPercent = Math.round((this.pieData.value / this.pieData.total) * 100)
-        this.pieFinishPercent = (this.realPercent / 100.00) * 75
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            this.myChart.setOption({
-                title: {
-                    'text': _this.$t('schoolMgmt.text50') + ' : ' + _this.pieData.total + '\n' + _this.$t('schoolMgmt.text51') + ' : ' + _this.pieData.value,
-                    'x': '50%',
-                    'y': '75%',
-                    'textAlign': 'center',
-                    'textStyle': {
-                        'fontWeight': 'lighter',
-                        'fontSize': 11,
-                        'color': '#A9B2B8'
-                    }
-                },
-                series: [{
-                  'name': ' ',
-                  'type': 'pie',
-                  'radius': ['50%', '68.1%'],
-                  'avoidLabelOverlap': false,
-                  'startAngle': 225,
-                  'color': ['#fff', 'transparent'],
-                  'hoverAnimation': false,
-                  'legendHoverLink': false,
-                  'label': {
-                      'normal': {
-                          'show': false,
-                          'position': 'center'
-                      },
-                      'emphasis': {
-                          'show': true,
-                          'textStyle': {
-                              'fontSize': '30',
-                              'fontWeight': 'bold'
-                          }
-                      }
-                  },
-                  'labelLine': {
-                      'normal': {
-                          'show': false
-                      }
-                  },
-                  'data': [{
-                      'value': 75,
-                      'name': '',
-                      'itemStyle': {
-                        normal: {
-                                color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(228, 233, 220, 0.14)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(228, 233, 220, 0.14)' // 100% 处的颜色
-                            }], false),
-                            label: {
-                                show: false
-                            },
-                            labelLine: {
-                                show: false
-                            }
-                        }
-                      }
-                  }, {
-                      'value': 25,
-                      'name': '',
-                      'itemStyle': {
-                          'normal': {
-                              color: 'rgba(0,0,0,0)'
-                          }
-                      }
-                  }]
-              }, {
-                  'name': '',
-                  'type': 'pie',
-                  'radius': ['50%', '68.1%'],
-                  'avoidLabelOverlap': false,
-                  'startAngle': 225,
-                  'color': ['#fff', 'transparent'],
-                  'hoverAnimation': false,
-                  'legendHoverLink': false,
-                  'z': 10,
-                  'label': {
-                      'normal': {
-                          'show': false,
-                          'position': 'center'
-                      }
-                  },
-                  'labelLine': {
-                      'normal': {
-                          'show': false
-                      }
-                  },
-                  'data': [{
-                      'name': _this.realPercent.toString(), // 完成数实际值
-                      'value': _this.pieFinishPercent, // PIE完成数
-                      'label': {
-                          'normal': {
-                              'show': true,
-                              'formatter': '{b} %',
-                              'textStyle': {
-                                  'fontSize': 20,
-                                  'fontWeight': '100',
-                                  'color': '#ffffff'
-                              },
-                              'position': 'center'
-                          }
-                      },
-                      'itemStyle': {
-                        normal: {
-                        color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                        offset: 0,
-                        color: 'rgba(228, 233, 220, 1)' // 0% 处的颜色
-                      }, {
-                        offset: 1,
-                        color: 'rgba(228, 233, 220, 0.5)' // 100% 处的颜色
-                      }], false),
-                            label: {
-                                show: false
-                            },
-                            labelLine: {
-                                show: false
-                            }
-                        }
-                      }
-                  }, {
-                      'name': '',
-                      'value': (100 - _this.pieFinishPercent), // PIE未完成数 100% 是75
-                      'itemStyle': {
-                          'normal': {
-                              color: 'rgba(0,0,0,0)'
-                          }
-                      }
-                  }]
-              }]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 172
TEAMModelOS/ClientApp/src/components/smartschooldashboard/RingPie.vue

@@ -1,172 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            mychat: '',
-            total: 0,
-            heightlightIndex: 0
-        }
-    },
-    props: {
-        id: {
-            type: String
-        },
-        pieData: {
-            type: Array,
-            default: function() {
-                return [
-                    { value: 335, name: '新增檔案' },
-                    { value: 310, name: '書面問答' },
-                    { value: 234, name: '匯入.pptx' },
-                    { value: 135, name: 'PowerClick' },
-                    { value: 1548, name: '開啟.hte' },
-                    { value: 123, name: '其他' }
-                ]
-            }
-        },
-        defaultActive: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        },
-        singleColor: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        },
-        title: {
-            type: String
-        },
-        tooltip: {
-            type: Boolean,
-            default: function() {
-                return false
-            }
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    created() {
-        this.pieData.forEach(item => {
-            this.total += item.value
-        })
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            this.myChart.setOption({
-                title: {
-                    show: !!_this.title,
-                    text: _this.title ? _this.title : '',
-                    left: 'center',
-                    top: 'middle',
-                    textStyle: {
-                        color: '#fafafa',
-                        fontWeight: 100
-                    }
-                },
-                color: _this.singleColor ? 'rgba(228, 233, 220, 0.9)' : ['#FF6B6A', '#FF9FF4', '#48DBFC', '#1CD0A1', '#FDC958', '#FFAD76'],
-                tooltip: {
-                    show: _this.tooltip,
-                    trigger: 'item'
-                    // formatter: function(p){
-                    //     // 故意不填可用來觸發HighLight
-                    // }
-                },
-                series: [
-                    {
-                        type: 'pie',
-                        hoverOffset: 5,
-                        radius: _this.singleColor ? ['30%', '70%'] : ['50%', '70%'],
-                        avoidLabelOverlap: false,
-                        label: {
-                            normal: {
-                                show: false
-                            },
-                            emphasis: {
-                                show: false
-                            }
-                        },
-                        labelLine: {
-                            normal: {
-                                show: false
-                            }
-                        },
-                        data: _this.pieData,
-                        itemStyle: _this.singleColor ? {
-                            emphasis: {
-                                color: '#1CD0A1'
-                            }
-                        } : ''
-                    }
-                ]
-            })
-            // mouseover觸發項
-            this.myChart.on('mouseover', function(params) {
-                if (_this.pieData[_this.heightlightIndex].name != params.name) {
-                    _this.myChart.dispatchAction({
-                        type: 'downplay',
-                        dataIndex: _this.heightlightIndex
-                    })
-                }
-                _this.$emit('highLightInfo', params)
-            })
-            if (this.defaultActive) {
-                // 預設先給第一筆初始值
-                let now = this.pieData[0].value
-                let params = { 'value': this.pieData[0].value, 'name': this.pieData[0].name, 'percent': Number((now / this.total) * 100).toFixed(2) }
-                this.$emit('extraInfo', params)
-                this.$emit('highLightInfo', params)
-                // 預設第一個
-                this.myChart.dispatchAction({
-                    type: 'highlight',
-                    dataIndex: _this.heightlightIndex
-                })
-            }
-        },
-        // 供外部呼叫用
-        heightlight: function(dName) {
-            let _this = this
-            if (this.pieData[this.heightlightIndex].name != dName) {
-                this.myChart.dispatchAction({
-                    type: 'downplay',
-                    dataIndex: _this.heightlightIndex
-                })
-            }
-
-            this.myChart.dispatchAction({
-                type: 'highlight',
-                name: dName
-            })
-            let now = 0
-            this.pieData.forEach(item => {
-                if (item.name == dName) {
-                    now = item.value
-                }
-            })
-            let params = { 'percent': Number((now / this.total) * 100).toFixed(2) }
-
-            this.$emit('extraInfo', params)
-        },
-        downplay: function(dname) {
-            this.myChart.dispatchAction({
-                type: 'downplay',
-                name: dname
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 151
TEAMModelOS/ClientApp/src/components/smartschooldashboard/TeachScienceBar.vue

@@ -1,151 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-      return {
-        myChart: ''
-      }
-    },
-    props: {
-      id: {
-        type: String
-      },
-      data: {
-        type: Object,
-        default: function() {
-          return { '挑人': 9,
-'计时器': 11,
-'计分板': 16,
-'I R S': 14,
-'即问即答': 9,
-'二次作答': 5,
-'翻牌': 3,
-'统计图': 10,
-                  '抢权': 11,
-'飞讯处理': 3,
-'推送': 6,
-'L I V E': 13,
-'微影片': 7,
-'播放影片': 10,
-'作品观摩': 7,
-'作品点评': 6 }
-        }
-      },
-      callBack: {
-        type: String
-      }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 取得Y軸Label
-            let yLabel = Object.keys(this.data)
-            let todayDataArray = []
-
-            // 今日資料
-            yLabel.map(function(key) {
-              todayDataArray.push(_this.data[key])
-            })
-
-            // 基于准备好的dom,初始化echarts实例
-            this.myChart = this.$echarts.init(document.getElementById(this.id))
-            this.myChart.setOption({
-              backgroundColor: '#343a4073',
-              tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                  type: 'shadow'
-                },
-                formatter: function(params) {
-                  // 故意開啟 但不設定使ToolTip 沒有彈跳的作用 但有Hover 功能
-                }
-              },
-              grid: {
-                left: '5%',
-                right: '0',
-                bottom: '0',
-                top: '0',
-                containLabel: true
-              },
-              xAxis: {
-                type: 'value',
-                boundaryGap: false,
-                axisLabel: {
-                    inside: true,
-                    textStyle: {
-                        color: 'transparent'
-                    }
-                },
-                splitLine: {
-                    show: true,
-                    lineStyle: {
-                        color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                }
-              },
-              yAxis: {
-                type: 'category',
-                axisLabel: {
-                    textStyle: {
-                      fontSize: '13px',
-                      color: '#94998a'
-                    }
-                },
-                splitLine: {
-                    show: true,
-                    lineStyle: {
-                        color: 'rgba(185, 193, 173, 0.63)'
-                    }
-                },
-                data: yLabel
-              },
-              series: [
-                {
-                  // name: 'today',
-                  type: 'bar',
-                  data: todayDataArray,
-                  barWidth: 7, // 柱子宽度
-                  barGap: 1, // 柱子之间间距
-                  itemStyle: {
-                    normal: { // 渐变色
-                      color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                        offset: 0,
-                        color: 'rgba(228, 233, 220, 1)' // 0% 处的颜色
-                      }, {
-                        offset: 1,
-                        color: 'rgba(228, 233, 220, 0)' // 100% 处的颜色
-                      }], false)
-                    }
-                  }
-                }
-              ]
-            })
-            // //highlight觸發項
-            // this.myChart.on('highlight', function (params) {
-            //   _this.$emit('highLightInfo', {'id': yLabel[params.batch[0].dataIndex], 'today': todayDataArray[params.batch[0].dataIndex], 'lastWeek': lastWeekDataArray[params.batch[1].dataIndex]});
-            // });
-            // this.myChart.on('downplay', function (params) {
-            //   _this.$emit('downplay', yLabel[params.batch[0].dataIndex])
-            // });
-            // //預設顯示第一個
-            // this.myChart.dispatchAction({
-            //     type: 'showTip',
-            //     seriesIndex: 1,
-            //     dataIndex: 0,
-            // });
-            // // 預設先給值
-            // this.$emit('highLightInfo', {'id': yLabel[0], 'today': todayDataArray[0], 'lastWeek': lastWeekDataArray[0]});
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 242
TEAMModelOS/ClientApp/src/components/smartschooldashboard/TotalLine.vue

@@ -1,242 +0,0 @@
-<template>
-    <div :id="id" style="height: 100%;width:100%;"></div>
-</template>
-
-<script>
-export default {
-    data() {
-        return {}
-    },
-    props: {
-        id: {
-            type: String
-        }
-    },
-    mounted() {
-        this.drawLine()
-    },
-    methods: {
-        drawLine() {
-            let _this = this
-            // 基于准备好的dom,初始化echarts实例
-            let myChart = this.$echarts.init(document.getElementById(this.id))
-            let arrlabel = ['3/15', '3/16', '3/17', '3/18', '3/19', '3/20', '3/21', '3/22', '3/23', '3/24', 'TODAY']
-            let arrTotal1 = ['22', '17', '0', '26', '22', '24', '18', '30', '15', '10', '30']
-            let arrTotal2 = ['26', '20', '2', '18', '27', '22', '26', '33', '9', '0', '40']
-            let arrTotal3 = ['40', '26', '8', '1', '34', '8', '54', '16', '16', '25', '20']
-            myChart.setOption({
-                backgroundColor: 'rgba(17, 17, 17, 0.14)',
-                tooltip: {
-                    trigger: 'axis',
-                    borderRadius: 0
-                    // backgroundColor:'#7AD1A8',
-                    // formatter: function(pm) {
-                    //     var param = pm[0];
-                    //     var pht = '<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:rgba(166,154,228);"></span>';
-                    //     console.log(param.marker);
-                    //     var prm = "星期" + "日一二三四五六 ".charAt(new Date(param.name).getDay());
-                    //     return param.name + ":&nbsp;&nbsp;" + prm + "<br>" +
-                    //         pht + param.seriesName + ":&nbsp;&nbsp;" + param.value + "&nbsp;&nbsp;|&nbsp;&nbsp;80.33ttt%";
-                    // },
-                    //   axisPointer: { // 坐标轴指示器,坐标轴触发有效
-                    //         type: 'none' // 默认为直线,可选为:'line' | 'shadow'
-                    //     },
-                },
-                grid: {
-                    left: '0',
-                    right: '0',
-                    bottom: '5%',
-                    top: '0',
-                    containLabel: true
-                },
-                xAxis: [{
-                    axisTick: {
-                        show: false
-                    },
-                    type: 'category',
-                    axisLabel: {
-                        margin: 10,
-                        textStyle: {
-                            fontSize: 11,
-                            color: '#94998a'
-                        },
-                        interval: 0,
-                        formatter: function(val) {
-                            let firstOne = arrlabel[0]
-                            let labellength = arrlabel.length
-                            let lastOne = arrlabel[labellength - 1]
-                            if (firstOne != val && lastOne != val) {
-                                return val
-                            }
-                        }
-                    },
-                    boundaryGap: false,
-                    splitLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        },
-                        show: true
-                    },
-                    axisLine: {
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)',
-                            width: 1
-                        }
-                    },
-                    data: arrlabel
-                }],
-                yAxis: [{
-                    position: 'right',
-                    type: 'value',
-                    // name: '单 位(%)',
-                    axisTick: {
-                        show: false
-                    },
-                    axisLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    },
-                    axisLabel: {
-                        margin: 10,
-                        inside: true,
-                        textStyle: {
-                            fontSize: 14,
-                            color: 'transparent'
-                        }
-                    },
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: 'rgba(185, 193, 173, 0.63)'
-                        }
-                    }
-                }],
-                series: [{
-                    // name: '实名率',
-                    type: 'line',
-                    // symbol: 'circle',
-                    // symbolSize: 5,
-                    // showSymbol: false,
-                    // markPoint: { // markLine 也是同理
-                    //   data: [{
-                    //     coord: [0,1,2,3,4], // 其中 5 表示 xAxis.data[5],即 '33' 这个元素。
-                    //     // coord: ['5', 33.4] // 其中 '5' 表示 xAxis.data中的 '5' 这个元素。
-                    //     // 注意,使用这种方式时,xAxis.data 不能写成 [number, number, ...]
-                    //     // 而只能写成 [string, string, ...]
-                    //   }]
-                    // },
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(28, 208, 161, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(28, 208, 161, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#1CD0A1'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal1
-                },
-                {
-                    type: 'line',
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(255, 107, 106, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(255, 107, 106, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#FF6B6A'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal2
-                },
-                {
-                    type: 'line',
-                    lineStyle: {
-                        normal: {
-                            width: 2
-                        }
-                    },
-                    areaStyle: {
-                        normal: {
-                            // 渐变色
-                            color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                                offset: 0,
-                                color: 'rgba(72, 219, 252, 1)' // 0% 处的颜色
-                            }, {
-                                offset: 1,
-                                color: 'rgba(72, 219, 252, 0.5)' // 100% 处的颜色
-                            }], false)
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            areaStyle: {
-                                type: 'default'
-                            },
-                            color: '#48DBFC'
-                        },
-                        emphasis: {
-                            // color: 'rgb(0,196,132)',
-                            borderColor: 'rgba(0,196,132,0.2)',
-                            extraCssText: 'box-shadow: 8px 8px 8px rgba(0, 0, 0, 1);'
-                            // borderWidth: 10
-                        }
-                    },
-                    data: arrTotal3
-                }
-                ]
-            })
-        }
-    }
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 15
TEAMModelOS/ClientApp/src/router/routes.js

@@ -78,21 +78,6 @@ export const routes = [
 		path: '/serverside/login',
 		component: ServerSideLogin
 	},
-	{
-		name: 'smartschooldashboard',
-		path: '/smartschooldashboard',
-		component: resolve => require(['@/view/smartschooldashboard/Index.vue'], resolve)
-	},
-	{
-		name: 'smartclassdashboard',
-		path: '/smartclassdashboard',
-		component: resolve => require(['@/view/smartclassdashboard/Index.vue'], resolve)
-	},
-	{
-		name: 'embedschooldashboard',
-		path: '/embedclassdashboard/:schoolshortcode',
-		component: resolve => require(['@/view/smartclassdashboard/Index.vue'], resolve)
-	}, // IES 呼叫專用
 
 	// 教师端
 	{

+ 0 - 2
TEAMModelOS/ClientApp/src/store/index.js

@@ -1,6 +1,5 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
-import classMgmt from './module/classMgmt'
 import courseMgmt from './module/courseMgmt'
 import talMgmt from './module/talMgmt'
 import authorization from './module/authorization'
@@ -93,7 +92,6 @@ export default new Vuex.Store({
         }
     },
     modules: {
-        classMgmt,
         talMgmt,
         authorization,
         totalAnalysis,

+ 0 - 82
TEAMModelOS/ClientApp/src/store/module/classMgmt.js

@@ -1,82 +0,0 @@
-export default {
-    state: {
-       data: {
-        classCount: { // 教室總數
-            activeCount: 0, // 當前啟動教室
-            failCount: 0, // 今日故障教室數
-            updateCount: 0, // 待更新教室數
-            loginCount: 0, // 帳號登入啟動課堂數
-            total: 0 // 總教室數
-        },
-        classInfo: [ // 開啟教室資訊
-        ],
-        hiTeachACT: {		// 教室開機數
-            today: 0,			// 今天總和
-            yesterday: 0,		// 昨天總和
-            weekAgoAVG: 0, 		// 前七天平均
-            mounthAgoAVG: 0,	// 前30天平均
-            semesterAVG: 0		// 學期平均
-        },
-        courseACT: {		// 課堂開機數
-            today: 0,			// 今天總和
-            yesterday: 0,		// 昨天總和
-            weekAgoAVG: 0, 		// 前七天平均
-            mounthAgoAVG: 0,		// 前30天平均
-            semesterAVG: 0		// 學期平均
-        },
-        participants: {	// 課堂參與人數
-            today: 0,			// 今天總和
-            yesterday: 0,		// 昨天總和
-            weekAgoAVG: 0, 		// 前七天平均
-            mounthAgoAVG: 0,		// 前30天平均
-            semesterAVG: 0		// 學期平均
-        },
-        immediateData: { // 今日課堂數量變化
-        },
-        gradeClassPer: { // 今日各年級課堂百分比
-
-        },
-        hiteachType: { // 今日智慧教室啟用類型
-            'selfpace': 0,
-            'powerclick': 0,
-            'pptImport': 0,
-            'hteOpen': 0,
-            'blankPageAdd': 0
-        },
-        hiteachStatus: { // 今日各版本教室開課狀態
-        },
-        sokratesStates: { // 蘇格拉底議課APP授權狀態
-        },
-        operatingSystems: { // 課堂作業系統
-        },
-        gradeUseStatus: { // 各年級開課狀態
-        },
-        cumMin:	0, // 累計教堂時數
-        mostClassUser: [	// 最多課堂使用者
-
-        ],
-        mostMinUser: { // 最長時數使用者
-            id:	'',
-            name: '',
-            avatar: '',
-            mostClassMin: 0, // 最長課堂時數
-            cumMin: 0 // 累計課堂時數
-        },
-        mostEffUser: { // 最高效率課堂使用者
-            id:	'',
-            name: '',
-            avatar: '',
-            mostEff: 0, // 最高單堂效率值:
-            effAvg: 0 // 平均課堂效率值
-        }
-    }
-    },
-    getters: {
-
-    },
-    mutations: {
-    },
-    actions: {
-
-    }
-}

+ 0 - 464
TEAMModelOS/ClientApp/src/view/smartclassdashboard/Index.less

@@ -1,464 +0,0 @@
-#smart-dashboard{
-  .maskIcon{
-    width: 15px;
-    height: 15px;
-    background-color:#90A3AC;
-    display: inline-block;
-    margin-right: 5px;
-    vertical-align: middle;
-    &.disabled{
-      background-color: #2e485a!important;
-    }
-    &.sokratesIcon{
-      -webkit-mask: url(../../assets/icon/product_sokrates.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/product_sokrates.svg) no-repeat 50% 50%;
-    }
-    &.ezstationIcon{
-      -webkit-mask: url(../../assets/icon/product_ezstation.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/product_ezstation.svg) no-repeat 50% 50%;
-    }
-    &.irsIcon{
-      -webkit-mask: url(../../assets/icon/product_irs.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/product_irs.svg) no-repeat 50% 50%;
-    }
-    &.boardIcon{
-      -webkit-mask: url(../../assets/icon/product_board.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/product_board.svg) no-repeat 50% 50%;
-    }
-    &.infinity{
-      -webkit-mask: url(../../assets/icon/infinity-icon.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/infinity-icon.svg) no-repeat 50% 50%;
-    }
-    &.clockOutline{
-      -webkit-mask: url(../../assets/icon/clock-outline.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/clock-outline.svg) no-repeat 50% 50%;
-    }
-    &.lightMalfunction{
-      background-color:#f8ba38;
-      -webkit-mask: url(../../assets/icon/lightbulb.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/lightbulb.svg) no-repeat 50% 50%;
-    }
-    &.teach{
-      background-color: #6DE4C6;
-      -webkit-mask: url(../../assets/icon/teach.svg) no-repeat 50% 50%;
-      mask: url(../../assets/icon/teach.svg) no-repeat 50% 50%;
-    }
-  }  
-  
-
-  .Header{
-      width: 100%;
-      position: fixed;
-      padding: 0 20px;
-      z-index: 1;
-      // background-color: #fff;
-      .smart-mark{
-        letter-spacing: 3px;
-        color: #94998a;
-      }
-      .smart-markD{
-        letter-spacing: 3px;
-        color: #94998a;
-        font-size: 15px;
-        vertical-align: middle;
-      }
-      .menu{
-        float: right;
-        height: initial;
-        background-color: transparent;
-        li{
-            color: #94998a;
-            line-height: initial;
-        }
-      }
-  }
-  .content{
-    padding-top: 40px;
-    height: 100%;
-    overflow: auto;
-    .dashBoardBtn{
-      background-color: transparent;
-      border-color: #94998a;
-      color: #94998a;
-      &:hover, &.select{
-        background-color: #94998a;
-        color: #333;
-      }
-    }
-    .box{
-      padding: 10px 0px 0px 0;
-      height: 94%;
-      margin: 0;
-      .block-1{
-        // margin: 0 10px;
-        background-color: rgba(217, 217, 217, 0.14);
-        .classInfo{
-          padding: 15px 0 0 25px;
-          background-color: rgba(17, 17, 17, 0.14);
-          font-size: 12px;
-          h5{
-            color: #A9B2B8;
-            font-size: 1.4em;
-            font-weight: 500;
-          }
-          .subtitle{
-            display: block;
-            padding-right: 20px;
-            color: #90A3AC;
-          }
-          .teacherName{
-            color: #90A3AC;
-            max-width: 90px;
-            display: inline-block;
-            vertical-align: bottom;
-          }
-          .teachIcon{
-            color: #90A3AC;
-            display: inline-block;
-            margin-right: 4px;
-            margin-left: 2px;
-          }
-          .processing{
-            padding: 0 0 0 7px;
-            color: #1CD0A1
-          }
-          .unopen{
-            padding: 0 0 0 7px;
-            color: #90A3AC
-          }
-          .maintain{
-            padding: 0 0 0 7px;
-            color: #f8ba38
-          }
-          cursor: pointer;
-          &:hover{
-            .maskIcon{
-              background-color: #ffffff;
-              &.ightMalfunction{
-                background-color:#f8ba38;
-              }
-              &.teach{
-                background-color: #6DE4C6;
-              }
-            }
-            .teacherName, .teachIcon{
-              color: #ffffff;
-            }
-            h5{
-              color: #FFFFFF;
-            }
-            .subtitle{
-              color: #DCDCDC;
-            }
-            .processing{
-              color: #6DE4C6
-            }
-            .unopen{
-              color: #DCDCDC
-            }
-            .maintain{
-              color: #f8ba38
-            }
-            background: -webkit-linear-gradient(right, rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: -o-linear-gradient(right,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: -moz-linear-gradient(right,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: linear-gradient(to right,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-          }
-        }
-      }
-      .block-2{
-        // margin: 0 10px;
-        height: 100%;
-        .info-row{
-          background-color: rgba(217, 217, 217, 0.14);
-          height: 100%;
-          font-size: 14px;
-          .info-col-main{
-            border-right: solid 1px #94998a;
-            position: relative;
-            // background-color: rgba(217, 217, 217, 0.14);
-            .info-col-content{
-              h5{
-                font-size: 2.5em;
-                font-weight: 100;
-                color: #fafafa;
-              }
-              color: #94998a;
-              padding: 0 0 17px 25px;
-              font-size: 0.82em;
-              position: absolute;
-              bottom:0;
-            }
-          }
-          .info-col-secondary{
-            background-color: rgba(17, 17, 17, 0.14);
-            position: relative;
-            .info-col-content{
-              padding: 0 0 17px 10px;
-              font-size: 0.82em;
-              color: #94998a;
-              position: absolute;
-              bottom:0;
-              width: 100%;
-              h5{
-                font-size: 2em;
-                font-weight: 100;
-                color: #fafafa;
-              }
-              &.border-right{
-                border-right: solid 1px #94998a;
-              }
-            }
-          }
-        }
-        .classPercent{
-          height: 80%;
-          &-row{
-            height: 100%;
-            .left{
-              height: 100%;
-            }
-            .right{
-              height: 100%;
-              &-title{
-                font-size: 1.2em;
-                color: #DCDCDC;
-                margin-bottom: 5px;
-                span{
-                  color: #ffffff;
-                }
-              }
-              &-detail{
-                cursor: pointer;
-                padding: 3px 0;
-                &-title{
-                  display: block;
-                  color: #94998a;
-                  padding-left: 5px;
-                  border-left: 2px solid #333;
-                }
-                &-num{
-                  font-size: 1.25em;
-                  font-weight: 100;
-                  padding-left: 5px;
-                  color: #fafafa;
-                }
-              }
-
-            }
-          }
-
-        }
-      }
-      .block-3{
-        // margin: 0 10px;
-        height: 100%;
-        .today-class-content{
-          height: 100%;
-          background-color: rgba(217, 217, 217, 0.14);
-          &-title{
-            height: 20%;
-            font-size: 1.25em;
-            color:#E4E9DC;
-            padding: 15px 0 15px 15px;
-            font-weight: 100;
-          }
-          &-contents{
-            height: 80%;
-            .chart{
-              height: 100%;
-            }
-            .detail{
-              height: 100%;
-              .detail-row{
-                height: 100%;
-                padding: 5px 0;
-                .detail-col{
-                  cursor: pointer;
-                  height:32.3333%;
-                  color: #fafafa;
-                  .detail-title{
-                    display: block;
-                    color: #94998a;
-                    padding-left: 5px;
-                    border-left: 2px solid #333;
-                    font-size: 12px;
-                  }
-                  .detail-amount{
-                    font-size: 1.4em;
-                    font-weight: 100;
-                    padding-left: 5px;
-                  }
-                }
-              }
-
-            }
-          }
-        }
-        .classCum{
-          height: 100%;
-          background-color: rgba(217, 217, 217, 0.14);
-          &-title-Box{
-            height: 13%;
-            border-bottom: 1px solid #94998a;
-            padding: 15px 0 0 15px;
-            .titleName{
-              font-size: 1.25em;
-              color:#E4E9DC;
-              font-weight: 100;
-              display: inline-block;
-              width: 60%;
-            }
-            .leangedDiv{
-              display: inline-block;
-              vertical-align: middle;
-              .circle{
-                width: 13px;
-                height: 13px;
-                display:inline-block;
-                border-radius: 10px;
-                vertical-align: middle;                
-              }
-              .seleted{
-                background: -webkit-radial-gradient(circle,rgba(28, 208, 161, 1),rgba(28, 208, 161, 0.5))!important;
-                background: -o-radial-gradient(circle,rgba(28, 208, 161, 1),rgba(28, 208, 161, 0.5))!important;
-                background: -moz-radial-gradient(circle,rgba(28, 208, 161, 1),rgba(28, 208, 161, 0.5))!important;
-                background: radial-gradient(circle,rgba(28, 208, 161, 1),rgba(28, 208, 161, 0.5))!important;
-              }
-              .default{
-                background: -webkit-radial-gradient(circle,rgba(228, 233, 220, 1),rgba(228, 233, 220, 0.5));
-                background: -o-radial-gradient(circle,rgba(228, 233, 220, 1),rgba(228, 233, 220, 0.5));
-                background: -moz-radial-gradient(circle,rgba(228, 233, 220, 1),rgba(228, 233, 220, 0.5));
-                background: radial-gradient(circle,rgba(228, 233, 220, 1),rgba(228, 233, 220, 0.5));
-              }
-            }
-          }
-          &-chat{
-            height: 87%;
-            border-bottom: 1px solid #94998a;
-            overflow: auto;
-            padding: 0 15px;
-            .title{
-              font-size: 1.1em;
-              color: #fafafa;
-              padding: 3px 0;              
-            }
-            .detailBox{
-              .b{
-                color: #ccc;
-                padding: 5px 0;
-              }
-            }
-          }
-        }
-      }
-      .block-4{
-        // margin: 0 10px;
-        height: 100%;
-        .hours{
-          padding: 15px 0 0 25px;
-          .hours-title{
-            color: #94998a;
-            font-size: 1.1em;
-          }
-          h5{
-            color: #dcdcdc;
-            font-size: 1em;
-            span{
-              padding:0 5px;
-              color: #ffffff;
-              font-size: 2em;
-              font-weight: 300;
-            }
-          }
-        }
-        .rank{
-          height: 100%;
-          &-block{
-            // height: 30%;
-            &-row{
-              // height: 100%;
-              border-bottom: 1px solid #94998a;
-              margin-left: 20px;
-              .sticker{
-                img{
-                  display: block;
-                  margin: auto; 
-                  width: 48px;
-                  border-radius: 30px;
-                }
-              }
-              .conect{
-                // height: 100%;
-                padding: 10px;
-                &-title{
-                  color: #00B96A;
-                  display: block;
-                }
-                &-name{
-                  max-width: 180px;
-                  font-size: 1.25em;
-                  color: #fafafa;
-                  display: inline-block;
-                  vertical-align: middle;
-                }
-                &-icon{
-                  vertical-align: middle;
-                  color: #fafafa;
-                }
-                &-val{
-                  .number{
-                    color: #fafafa;
-                  }
-                  color: #dcdcdc;
-                  display: block;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
-.border-letf-color-0{
-  border-left-color: #FF6B6A!important;
-}
-.border-letf-color-1{
-  border-left-color: #FF9FF4!important;
-}
-.border-letf-color-2{
-  border-left-color: #48DBFC!important;
-}
-.border-letf-color-3{
-  border-left-color: #1CD0A1!important;
-}
-.border-letf-color-4{
-  border-left-color: #FDC958!important;
-}
-.border-letf-color-5{
-  border-left-color: #FFAD76!important;
-}
-.border-letf-color-6{
-  border-left-color: #b682f8!important;
-}
-.block-border{
-  border: 0.11px solid rgba(148, 153, 138, 0.63);
-}
-.scrollstyle::-webkit-scrollbar {
-    width: 5px;
-}
-.scrollstyle::-webkit-scrollbar-track {
-  margin: 6px;
-  background: transparent;
-}
-.scrollstyle::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  background: #94998a;
-}
-.scrollstyle::-webkit-scrollbar-thumb:hover {
-  // background: #555;
-}
-.scrollstyle::-webkit-scrollbar-button {
-  display: none;
-}

+ 0 - 899
TEAMModelOS/ClientApp/src/view/smartclassdashboard/Index.vue

@@ -1,899 +0,0 @@
-<style lang="less" scoped>
-  @import './Index.less';
-</style>
-
-<template>
-    <div id="smart-dashboard" class="backdrop-dark">
-      <div v-if="!isExistShortCode" class="Header">
-        <Row type="flex" justify="center" align="middle">
-          <Col :span="3" style="font-size: 14px;">
-            <h1 style="color: #d0b772;font-size: 1.3em;">{{classData.schoolName}}</h1>
-          </Col>
-          <Col :span="8">
-            <Icon size="20" type="md-pin" style="vertical-align: middle;color: #94998a" /><span class="smart-markD">{{ $t('menu.breadcrumbs')}}</span>
-          </Col>
-          <Col :span="11">
-            <Menu class="menu" mode="horizontal" theme="dark">
-              <MenuItem name="1">
-                  <Icon type="ios-paper" />
-                  {{ $t('menu.menu1')}}
-              </MenuItem>
-              <MenuItem name="2">
-                  <Icon type="ios-people" />
-                  {{ $t('menu.menu2')}}
-              </MenuItem>
-              <MenuItem name="3">
-                  <Icon type="ios-people" />
-                  {{ $t('menu.menu3')}}
-              </MenuItem>
-              <MenuItem name="4">
-                  <Icon type="ios-construct" />
-                  {{ $t('menu.menu4')}}
-              </MenuItem>
-          </Menu>
-          </Col>
-          <Col :span="2" style="text-align: center;">
-            <img style="width: 35px;margin-top: 4px;" src="@/assets/image/touxiang.png">
-          </Col>
-        </Row>
-      </div>
-      <div class="content">
-        <div style="padding-top: 5px;height: 5%;text-align: center;position: relative;">
-          <div style="width: 310px;position: absolute;bottom: -4px;left: 10px;color: #fafafa;text-align: left;">
-             {{ $t('classMgmt.restText1') }}
-            <Dropdown trigger="click" @on-click="setRestTime">
-              <a href="javascript:void(0)">
-                  {{ countDownBySec/60 }} {{ $t('classMgmt.Min') }}
-                  <Icon type="ios-arrow-down"></Icon>
-              </a>
-              <DropdownMenu slot="list">
-                  <DropdownItem name="5" >5 {{ $t('classMgmt.Min') }}</DropdownItem>
-                  <DropdownItem name="10">10 {{ $t('classMgmt.Min') }}</DropdownItem>
-                  <DropdownItem name="30">30 {{ $t('classMgmt.Min') }}</DropdownItem>
-              </DropdownMenu>
-            </Dropdown>
-            {{ $t('classMgmt.restText2') }}
-            <span style="font-size: 15px;"> ({{ reciprocalTimebySec | secToMS }})</span>
-          </div>
-          <div v-if="!isExistShortCode" style="text-align: center;">
-            <Button class="dashBoardBtn select">{{ $t('classMgmt.pageButton1') }}</Button>
-            <Button to="/smartschooldashboard" class="dashBoardBtn">{{ $t('classMgmt.pageButton2') }}</Button>
-          </div>          
-        </div>
-        <Row class="box" type="flex" justify="space-around">
-          <Col  :span="9"  class="block-1 block-border">
-            <!-- block-1 -->
-            <!-- 边角设计 start -->
-            <div class="image-border image-border-left-top" ></div>
-            <div class="image-border image-border-right-top" ></div>
-            <div class="image-border image-border-left-bottom" ></div>
-            <div class="image-border image-border-lright-bottom" ></div>
-            <!-- 边角设计 end-->
-            <div style="height: 100%;">
-              <div style="height: 15%;width:100%;">
-                <div style="height: 100%;">
-                  <div style="height: 100%;padding: 5% 5%;border-bottom: 1px solid #94998a;font-size:14px;">
-                     <Row type="flex" justify="center" align="bottom">
-                      <Col :span="5" style="text-align: center;">
-                        <span style="color: #94998a;">{{$t('classMgmt.block1Title1')}}</span>
-                        <h5 style="font-size: 2em;color: #FAFAFA;font-weight: 100;">{{classCount.activeCount}} <small>({{classCount.activeCount/classCount.total | percentFormat(0)}}%)</small></h5>
-                      </Col>
-                      <Col :span="5" style="text-align: center;">
-                      <span style="color: #94998a;">{{$t('classMgmt.block1Title2')}}</span>
-                        <h5 style="font-size: 2em;color: #FAFAFA;font-weight: 100;">{{classCount.failCount}} <small>({{classCount.failCount/classCount.total | percentFormat(0)}}%)</small></h5>
-                      </Col>
-                      <Col :span="5" style="text-align: center;">
-                      <span style="color: #94998a;">{{$t('classMgmt.block1Title3')}}</span>
-                        <h5 style="font-size: 2em;color: #FAFAFA;font-weight: 100;">{{classCount.updateCount}} <small>({{classCount.updateCount/classCount.total | percentFormat(0)}}%)</small></h5>
-                      </Col>
-                      <Col :span="5" style="text-align: center;">
-                      <span style="color: #94998a;">{{$t('classMgmt.block1Title4')}}</span>
-                        <h5 style="font-size: 2em;color: #FAFAFA;font-weight: 100;">{{classCount.loginCount}} <small>({{classCount.loginCount/courseACT.today | percentFormat(0)}}%)</small></h5>
-                      </Col>
-                      <Col :span="4"  style="text-align: center;">
-                        <span style="color: #94998a;">{{$t('classMgmt.block1Title5')}}</span>
-                        <h5 style="font-size: 2em;color: #FAFAFA;font-weight: 100;">{{classCount.total}}</h5>
-                      </Col>
-                    </Row>
-                  </div>
-                </div>
-              </div>
-              <div style="height: 85%;width:100%;position: relative;overflow: auto;">
-                <div class="scrollstyle" style="position: absolute;right: 0px;left: 0;top: 0;bottom: 0;overflow-x: hidden;overflow-y: auto;">
-                  <div class="classInfo" v-for="(item, index) in classInfo" :key="index">
-                    <Row type="flex" justify="center" align="bottom" style="border-bottom: solid 1px #94998a;padding-bottom: 7px;">
-                      <Col :span="14">
-                        <h5 class="ellipsis" style="padding-right: 20px;">                          
-                              <Icon v-if="!item.classNum || item.className=='UnKnown' || !item.ver" style="color: #ffe24e;" type="md-warning" />                          
-                              {{item.className != 'UnKnown' ? item.className : 'No Name'}}
-                        </h5>                        
-                        <span class="ellipsis subtitle">
-                          <b v-if="item.SN" style="font-size: 13px;color: #1CD0A1;">Hi</b>
-                          {{ item.classNum ? item.classNum :  $t('classMgmt.text5') }},
-                          {{ item.ver ? item.ver : 'ver.0.0.0'}}&nbsp;&nbsp;|&nbsp;&nbsp;
-                          <template v-if="!item.serialExp">
-                            <div class="maskIcon infinity"></div>
-                            <div style="display: inline-block">{{$t('classMgmt.text4')}}</div>  
-                          </template>
-                          <template v-else>
-                            <div class="maskIcon clockOutline"></div>
-                            <div style="display: inline-block">{{item.serialExp}}</div>  
-                          </template>,
-                          {{ item.classTotal ? item.classTotal : 0 }}{{ $t('unit.text7')}}
-                        </span>
-                      </Col>
-                      <Col :span="9">
-                        <Row type="flex" justify="center" align="middle">                          
-                          <Col :span="12">
-                            <div v-if="!item.hardware.board.isEnable" class="maskIcon boardIcon" v-bind:class="{disabled: !item.hardware.board.isEnable}"></div>
-                            <Tooltip v-else :transfer="true" placement="top-start">
-                                <div class="maskIcon boardIcon"></div>
-                                <div slot="content">
-                                   <p>{{$t('classMgmt.className')+ ': ' +item.hardware.board.classNo}}</p>
-                                   <p>{{$t('classMgmt.deviceName')+ ': ' +item.hardware.board.deviceName}}</p>
-                                   <p>{{$t('classMgmt.ip')+ ': ' +item.hardware.board.IP}}</p>
-                                   <p>{{$t('classMgmt.SN')+ ': ' +item.hardware.board.serialNo}}</p>
-                                </div>
-                            </Tooltip>                            
-                            <div class="maskIcon irsIcon" v-bind:class="{disabled: !item.hardware.irs.isEnable}"></div>
-                            <div class="maskIcon ezstationIcon" v-bind:class="{disabled: !item.hardware.ezstation.isEnable}"></div>
-                            <div class="maskIcon sokratesIcon" v-bind:class="{disabled: !item.hardware.sokrates.isEnable}" ></div>
-                          </Col>
-                          <Col :span="12" style="padding-left: 5px;">
-                            <Icon v-if="item.teacher.name" size="15" type="md-person" class="teachIcon" /><span class="ellipsis teacherName">{{item.teacher.name}}</span>
-                          </Col>
-                        </Row>
-                        <Row  style="display: block;">
-                          <Col :span="12" style="color: #48DBFC;">
-                            {{$t('classMgmt.hotclass')}}&nbsp;&nbsp;|&nbsp;&nbsp;{{item.hot}} {{$t('unit.text1')}}
-                          </Col>
-                          <Col :span="12" :class="classModeClass(item.mode)">
-                            <Tooltip :transfer="true" placement="top-start">
-                              <div v-if="item.mode == 0" class="maskIcon teach disabled"></div>
-                              <div v-else-if="item.mode == 1" class="maskIcon teach "></div>
-                              <div v-else-if="item.mode == 2" class="maskIcon lightMalfunction"></div>
-                              <div slot="content">
-                                {{ classModeStr(item.mode) }}
-                              </div>
-                              <div style="display: inline-block">&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; {{item.usetime}}</div>
-                            </Tooltip>  
-                          </Col>
-                        </Row>
-                      </Col>
-                      <Col :span="1">                        
-                          <Tooltip max-width="350" :transfer="true" placement="top-start">
-                            <Icon style="margin-bottom: 50%" size="20" type="ios-information-circle-outline" class="teachIcon" />
-                            <div slot="content">
-                                <p v-if="item.localIp">{{$t('classMgmt.ip')+ ': ' +item.localIp}}</p>
-                                <p>{{$t('classMgmt.SN')+ ': ' +item.SN}}</p>
-                                <p v-if="item.osVer">{{$t('classMgmt.OS')+ ': ' +item.osVer}}</p>
-                                <p>{{$t('classMgmt.productVer')+ ': ' +item.ver}}</p>                                
-                                <p>{{$t('classMgmt.EXP')+ ': '}}{{!item.serialExp ? $t('classMgmt.text4') :  $t('classMgmt.text2') +' '+item.serialExp}}</p>
-                                <p>{{$t('classMgmt.pcName')+ ': ' +item.pcName}}</p>
-                            </div>
-                          </Tooltip>
-                      </Col>
-                    </Row>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </Col>
-          <Col  :span="5" class="block-2">
-            <!-- block-2 -->
-            <div class="block-border" style="height: 12%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <Row type="flex" justify="center" class="info-row">
-                <Col :span="9" class="info-col-main">
-                  <div class="info-col-content">
-                    <span>{{ $t('classMgmt.block2Title1')}}</span><br/><small>{{ $t('classMgmt.block2SubTitle1')}}</small>
-                    <h5>{{hiTeachACT.today}}<small>/{{hiTeachACT.yesterday}}</small></h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle6')}}</small>
-                    <h5>{{hiTeachACT.weekAgo}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle7')}}</small>
-                    <h5>{{hiTeachACT.monthAgo}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle8')}}</small>
-                    <h5>{{hiTeachACT.semester}}</h5>
-                  </div>
-                </Col>
-              </Row>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 12%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <Row type="flex" justify="center" class="info-row">
-                <Col :span="9" class="info-col-main">
-                  <div class="info-col-content">
-                    <span>{{ $t('classMgmt.block2Title2')}}</span><br/><small>{{ $t('classMgmt.block2SubTitle1')}}</small>
-                    <h5>{{courseACT.today}}<small>/{{courseACT.yesterday}}</small></h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle6')}}</small>
-                    <h5>{{courseACT.weekAgo}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle7')}}</small>
-                    <h5>{{courseACT.monthAgo}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle8')}}</small>
-                    <h5>{{courseACT.semester}}</h5>
-                  </div>
-                </Col>
-              </Row>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 12%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <Row type="flex" justify="center" class="info-row">
-                <Col :span="9" class="info-col-main">
-                  <div class="info-col-content">
-                    <span>{{ $t('classMgmt.block2Title3')}}</span><br/><small>{{ $t('classMgmt.block2SubTitle1')}}</small>
-                    <h5>{{gradeClassAccount}}<small>/{{participants.yesterday}}</small></h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle2')}}</small>
-                    <h5>{{participants.weekAgoAVG ? participants.weekAgoAVG : 0}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content border-right">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle3')}}</small>
-                    <h5>{{participants.monthAgoAVG ? participants.monthAgoAVG : 0}}</h5>
-                  </div>
-                </Col>
-                <Col :span="5"  class="info-col-secondary">
-                  <div class="info-col-content">
-                    <br/><small>{{ $t('classMgmt.block2SubTitle4')}}</small>
-                    <h5>{{participants.semesterAVG ? participants.semesterAVG : 0}}</h5>
-                  </div>
-                </Col>
-              </Row>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 29%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div style="height:20%;">
-                <h5 style="font-size: 1.25em;color:#E4E9DC;padding: 15px 0 15px 15px;font-weight: 100;">{{$t('classMgmt.block2Title4')}}</h5>
-              </div>
-              <div style="height: 80%;">
-                <ClassLine :data="immediateData" :id="'classline1'"></ClassLine>
-              </div>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 29%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div style="height: 20%;padding: 15px 0 15px 15px;">
-                <h5 style="font-size: 1.25em;color:#E4E9DC;font-weight: 100;">{{$t('classMgmt.block2Title5')}}</h5>
-              </div>
-              <div class="classPercent">
-                <Row type="flex" justify="center" align="middle" class="classPercent-row">
-                  <Col class="left" :span="12" style="">
-                    <div style="height: 100%;">
-                      <RingPie ref="ringpie5" :pieData="gradeClassPer" :id="'ringpie5'"></RingPie>
-                    </div>
-                  </Col>
-                  <Col class="right" :span="12">
-                    <Row style="height: 15%;">
-                      <Col>
-                        <div class="right-title">{{$t('classMgmt.block2Title3')}} : <span>{{gradeClassAccount}}</span></div>
-                      </Col>
-                    </Row>
-                    <div style="height: 85%;width:100%;position: relative;overflow: auto;">
-                      <Row class="scrollstyle" style="position: absolute;right: 0px;left: 0;top: 0;bottom: 0;overflow-x: hidden;overflow-y: auto;">
-                        <Col v-for="(item, key, index) in gradeClassPer" :key="index" :span="24">
-                          <div class="right-detail" @mouseleave="pieDownPlay('course', key)" @mouseenter="pieHeightLight('course', key)">
-                            <span class="right-detail-title" :class="'border-letf-color-' + index">{{ $t('classMgmt.' + key)}}</span>
-                            <h5 class="right-detail-num">{{item}} <small>({{item/gradeClassAccount | percentFormat(1)}}%)</small></h5>
-                          </div>
-                        </Col>
-                      </Row>
-                    </div>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-          </Col>
-          <Col  :span="5" class="block-3">
-            <div class="block-border" style="height: 23.91%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="today-class-content">
-                <h5 class="today-class-content-title">{{$t('classMgmt.block3.title1')}}</h5>
-                <Row class="today-class-content-contents">
-                  <Col :span="12" class="chart">
-                    <RingPie :pieData="hiteachActMode" ref="ringpie1" :id="'ringPie1'"></RingPie>
-                  </Col>
-                  <Col :span="12" class="detail">
-                    <Row class="detail-row">
-                      <Col v-for="(item, key, index) in hiteachActMode" :key="index"  :span="12" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class', key)" @mouseenter="pieHeightLight('class', key)">
-                          <span class="detail-title" :class="'border-letf-color-' + index">{{$t('classMgmt.' + key)}}</span>
-                          <h5 class="detail-amount">{{item}} <small>({{item/hiteachActModeAccount | percentFormat(1)}}%)</small></h5>
-                        </div>
-                      </Col>
-                    </Row>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-            <div style="height: 2.17%;"></div>
-            <div class="block-border" style="height: 23.91%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="today-class-content">
-                <h5 class="today-class-content-title">{{$t('classMgmt.block3.title2')}}</h5>
-                <Row class="today-class-content-contents">
-                  <Col :span="12" class="chart">
-                    <RingPie :pieData="hiteachStatus" ref="ringpie2" :id="'ringPie2'"></RingPie>
-                  </Col>
-                  <Col :span="12" class="detail">
-                    <Row class="detail-row">
-                      <Col  v-for="(item, key, index) in hiteachStatus" :key="index" :span="12" class="detail-col">
-                        <div @mouseleave="pieDownPlay('system',key)" @mouseenter="pieHeightLight('system', key)">
-                          <span class="detail-title" :class="'border-letf-color-' + index">
-                            {{ (key == 'unKnown') || (key == 'unauthorization')  ?  $t('classMgmt.' + key) : key}}
-                          </span>
-                          <h5 class="detail-amount">{{item}} <small>({{item/hiteachStatusAccount | percentFormat(1)}}%)</small></h5>
-                        </div>
-                      </Col>
-                    </Row>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-            <div style="height: 2.17%;"></div>
-            <div class="block-border" style="height: 47.84%;position: relative;">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="classCum">
-                <div class="classCum-title-Box">
-                  <h5 class="titleName">{{ $t('classMgmt.block3.title3')}}</h5>
-                    <!-- <div class="leangedDiv">
-                      <span class="circle default" :class="{seleted: authInfoType == 'hiteach'}"></span>
-                      <h5 style="vertical-align: middle;display:inline-block;color: #ffffff;margin-right: 15px;cursor: pointer;" @click="authInfoType = 'hiteach'">Hiteach</h5>
-                      <span class="circle default" :class="{seleted: authInfoType == 'service'}"></span>
-                      <h5 style="vertical-align: middle;display:inline-block;color: #ffffff;cursor: pointer;"  @click="authInfoType = 'service'">服務</h5>
-                  </div> -->
-                </div>
-                <div class="classCum-chat scrollstyle">
-                    <div class="title">
-                      {{ authInfo.serial ? $t('classMgmt.block3.subTitle1') : ''}}
-                    </div>
-                    <div class="detailBox">
-                      <div class="b" v-for="(item, key ) in authInfo.serial" :key = key>
-                        <p>{{ $t('classMgmt.block3.text1') }}: {{item.SN}}</p>
-                        <p>{{ $t('classMgmt.block3.text2') }}: {{item.serialType == 0 ? $t('classMgmt.block3.text3') :  $t('classMgmt.block3.text4') }}</p>
-                        <p>{{ $t('classMgmt.block3.text5') }}: {{item.serialExp == null ? $t('classMgmt.block3.text6') : item.serialExp}}</p>
-                        <p>{{ $t('classMgmt.block3.text7') }}: {{item.classTotal}}</p>
-                        <p>{{ $t('classMgmt.block3.text8') }}: HiTeach {{item.system}}</p>
-                        <div>
-                          <span>{{ $t('classMgmt.block3.text9') }}: </span>
-                          <div class="maskIcon sokratesIcon" v-bind:class="{disabled: !item.hardware.sokrates.isEnable}" ></div>
-                          <div class="maskIcon ezstationIcon" v-bind:class="{disabled: !item.hardware.ezstation.isEnable}"></div>
-                        </div>
-                        <hr/>
-                      </div>
-                    </div>
-                    <div class="title">                      
-                      {{ authInfo.service ? $t('classMgmt.block3.subTitle2') : ''}}
-                    </div>
-                    <div class="detailBox">
-                      <div class="b" v-for="(item, key ) in authInfo.service" :key = key>
-                        <p>{{ $t('classMgmt.block3.text10') }}: {{$t('classMgmt.' + item.system)}}</p>
-                        <p>{{ $t('classMgmt.block3.text11') }}: {{item.startDate}}</p>
-                        <p>{{ $t('classMgmt.block3.text12') }}: {{item.endDate}}</p>
-                        <hr/>
-                      </div>
-                    </div>
-                </div>
-              </div>
-            </div>
-          </Col>
-          <Col  :span="4" class="block-4">
-            <div class="block-border" style="height: 10.43%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="hours">
-                <span class="hours-title">{{$t('classMgmt.block4Title1')}}</span>
-                <h5><span>{{ cumMin | minToHM('h')}}</span>h<span>{{cumMin | minToHM('m')}}</span>m</h5>
-              </div>
-            </div>
-            <!-- <div style="height: 2.17%"></div> -->
-            <!-- <div class="block-border" style="height: 23.48%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <div style="height: 100%;">
-                <h5 style="height: 20%;font-size: 1.25em;color: #E4E9DC;padding: 10px 0 0 10px;font-weight: 100;">{{$t('classMgmt.block4Title2')}}</h5>
-                <Row type="flex" justify="center" align="middle" style="height: 80%;">
-                  <Col style="height: 100%;" :span="12">
-                    <RingPie :pieData="sokratesStates" @highLightInfo="classVersionByPie" :defaultActive="true" :id="'ringPie3'"></RingPie>
-                  </Col>
-                  <Col :span="12" style="padding-left: 7px;color: #94998a;">
-                    <span>{{ classVersion.name }}</span>
-                    <h5 style="font-weight: 100;font-size: 2.2em;color: #fafafa;">{{ classVersion.percent +$t('unit.text2')}}</h5>
-                    <span>{{$t('classMgmt.block4SubTitle1') + ' ' + classVersion.val + ' ' +$t('unit.text3')}}</span>
-                  </Col>
-                </Row>
-              </div>
-            </div> -->
-            <div style="height: 2.17%"></div>
-            <div class="block-border" style="height: 23.48%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div style="height: 100%;">
-                <h5 style="height: 20%;font-size: 1.25em;color: #E4E9DC;padding: 10px 0 0 10px;font-weight: 100;">{{$t('classMgmt.block4Title3')}}</h5>
-                <Row type="flex" justify="center" align="middle" style="height: 80%;">
-                  <Col style="height: 100%;" :span="12">
-                    <RingPie :pieData="operatingSystems" @highLightInfo="homeworkByPie" :defaultActive="true" :id="'ringPie4'"></RingPie>
-                  </Col>
-                  <Col :span="12" style="padding-left: 7px;color: #94998a;">
-                    <span>{{ homework.name }}</span>
-                    <h5 style="font-weight: 100;font-size: 2.2em;color: #fafafa;">{{ homework.percent +$t('unit.text2')}}</h5>
-                    <span>{{$t('classMgmt.block4SubTitle1') + ' ' + homework.val + ' ' +$t('unit.text9')}}</span>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-            <div style="height: 2.17%"></div>
-            <div class="block-border" style="height: 61.6%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="rank">
-                <h5 style="height: 10%;font-size: 1.25em;color: #E4E9DC;padding: 10px 0 0 10px;font-weight: 100;">{{$t('classMgmt.block4SubTitle3')}}</h5>
-                <div style="height: 90%;width:100%;position: relative;overflow: auto;">
-                  <div class="scrollstyle" style="position: absolute;right: 0px;left: 0;top: 0;bottom: 0;overflow-x: hidden;overflow-y: auto;">
-                    <div class="rank-block" v-for="(item, index) in mostClassUser" :key="index">
-                      <Row type="flex" justify="center" align="middle" class="rank-block-row">
-                        <Col class="sticker" :span="6">
-                          <img v-if="item.avatar" :src="item.avatar">
-                          <img v-else src="@/assets/image/touxiang.png">
-                        </Col>
-                        <Col class="conect" :span="18">
-                          <!-- <span class="conect-title">{{$t('classMgmt.block4SubTitle3')}}</span> -->
-                          <Tooltip :transfer="true" placement="top-start">
-                              <h5 class="conect-name ellipsis">{{item.name}}</h5>
-                              <div slot="content">
-                                  <p>{{item.id}}</p>
-                              </div>
-                          </Tooltip>
-                          <span class="conect-val">{{$t('classMgmt.block4SubTitle6')}}: <span class="number">{{item.today}}</span> {{$t('unit.text1')}}</span>
-                          <span class="conect-val">{{$t('classMgmt.block4SubTitle7')}}: <span class="number">{{item.cumClass}}</span> {{$t('unit.text1')}}</span>
-                        </Col>
-                      </Row>
-                    </div>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </Col>
-        </Row>
-      </div>      
-    </div>
-</template>
-
-<script>
-import RingPie from '@/components/smartclassdashboard/RingPie.vue'
-import LegendPie from '@/components/smartclassdashboard/LegendPie.vue'
-import ClassLine from '@/components/smartclassdashboard/ClassLine.vue'
-import ClassBar from '@/components/smartclassdashboard/ClassBar.vue'
-import FloorPlan from '@/components/smartclassdashboard/FloorPlan.vue'
-import { mapState } from 'vuex'
-
-export default {
-  name: 'smart-dashboard',
-  data() {
-    return {
-      isExistShortCode: !!this.$route.params.schoolshortcode,
-      gradeClassAccount: 0,
-      hiteachTypeAccount: 0,
-      hiteachActModeAccount: 0,      
-      hiteachStatusAccount: 0,
-      classVersion: {
-        percent: '',
-        name: '',
-        val: 0
-      },
-      homework: {
-        percent: '',
-        name: '',
-        val: 0
-      },
-      resetTimebySec: 300,  // 預設至少要經過此時間才可重新問API
-      countDownBySec: 300, // 可被設定的重置時間
-      reciprocalTimebySec: 0,
-      authInfoType: 'hiteach'
-    }
-  },
-  computed: {
-    ...mapState({
-      classData: state => state.classMgmt.data
-    }),
-    classCount() { // 班级總數    
-      let mode1Data =  this.classData.classInfo.filter(function(item, key) {
-        return item.mode == 1
-      })
-      let mode2Data =  this.classData.classInfo.filter(function(item, key) {
-        return item.mode == 2
-      })
-      let hotData =  0;
-      this.classData.classInfo.forEach(function(item, key) {
-        hotData += item.hot
-      })
-      this.classData.classCount.activeCount = mode1Data.length
-      this.classData.classCount.failCount = mode2Data.length
-      this.classData.classCount.loginCount = hotData
-      return this.classData.classCount
-    },
-    classInfo() { // 開啟班级資訊
-      this.classData.classInfo.forEach(function(item, key) {
-        item['id'] = key + 1
-      })
-
-      this.classData.classInfo.sort(function(a,b) { 
-        let aName = a.className ? a.className : 'null'
-        let bName = b.className ? b.className : 'null'
-
-        return bName.localeCompare(aName); });
-
-      this.classData.classInfo.sort(function(a, b) {
-        let aNum
-        let bNum
-        if (!a.classNum || a.className == 'UnKnown' || !a.ver) {
-          aNum = 2
-        } else if (a.mode == 1) {
-          aNum = 0
-        } else {
-          aNum = 1
-        }
-        if (!b.classNum || b.className == 'UnKnown' || !b.ver) {
-          bNum = 2
-        } else if (b.mode == 1) {
-          bNum = 0
-        } else {
-          bNum = 1
-        }
-        return aNum > bNum ? 1 : -1
-      })
-      return this.classData.classInfo
-    },
-    hiTeachACT() { // 班级開機數
-      let todayACTData =  this.classData.classInfo.filter(function(item, key) {
-        return item.todayACT == true
-      })
-      this.classData.hiTeachACT.today = todayACTData.length
-      return this.classData.hiTeachACT
-    },
-    courseACT() { // 課堂數
-      let hotData = 0;
-      this.classData.classInfo.forEach(function(item, key) {
-        hotData += item.hot
-      })
-      this.classData.courseACT.today = hotData
-      return this.classData.courseACT
-    },
-    participants() { // 課堂參與人數
-      return this.classData.participants
-    },
-    immediateData() { // 今日課堂數量變化
-      return this.classData.immediateData
-    },
-    gradeClassPer() { // 今日各年級課堂百分比
-      this.gradeClassAccount = 0
-
-      let stdClient = this.classData.stdClient
-      for (let g in stdClient) {
-        this.gradeClassAccount += stdClient[g]
-      }
-
-      return stdClient
-    },
-    hiteachType() { // 今日智慧班级啟用類型
-      this.hiteachTypeAccount = 0
-      for (let g in this.classData.hiteachType) {
-        this.hiteachTypeAccount += this.classData.hiteachType[g]
-      }
-      return this.classData.hiteachType
-    },
-    hiteachActMode() {
-      this.hiteachActModeAccount = 0
-      for (let g in this.classData.hiteachActMode) {
-        this.hiteachActModeAccount += this.classData.hiteachActMode[g]
-      }
-      return this.classData.hiteachActMode
-    },
-    hiteachStatus() { // 今日各版本班级開課狀態
-      this.hiteachStatusAccount = 0
-      for (let g in this.classData.hiteachStatus) {
-        this.hiteachStatusAccount += this.classData.hiteachStatus[g]
-      }
-      return this.classData.hiteachStatus
-    },
-    gradeUseStatus() { // 各年級開課狀態
-      return this.classData.gradeUseStatus
-    },
-    cumMin() { // 累計課堂時數
-      return this.classData.cumMin
-    },
-    sokratesStates() { // 蘇格拉底議課APP授權狀態
-      return this.classData.sokratesStates
-    },
-    operatingSystems() { // 課堂作業系統
-      return this.classData.operatingSystems
-    },
-    mostClassUser() { // 最多課堂使用者
-      this.classData.mostClassUser.sort(function(a, b) {
-          return a.cumClass > b.cumClass ? -1 : 1
-      })
-      return this.classData.mostClassUser
-    },
-    mostMinUser() {
-      return this.classData.mostMinUser
-    },
-    mostEffUser() {
-      return this.classData.mostEffUser
-    },
-    authInfo(){
-      return this.classData.authInfo
-    }
-  },
-  methods: {
-    pieHeightLight: function(type, value) {
-      switch (type) {
-        case 'class':
-          this.$refs.ringpie1.heightlight(value)
-          break
-        case 'system':
-          this.$refs.ringpie2.heightlight(value)
-          break
-        case 'course':
-          this.$refs.ringpie5.heightlight(value)
-          break
-      }
-    },
-    pieDownPlay: function(type, value) {
-      switch (type) {
-        case 'class':
-          this.$refs.ringpie1.downplay(value)
-          break
-        case 'system':
-          this.$refs.ringpie2.downplay(value)
-          break
-        case 'course':
-          this.$refs.ringpie5.downplay(value)
-          break
-      }
-    },
-    classVersionByPie: function(val) {
-      this.classVersion.percent = val.percent
-      this.classVersion.name = val.name
-      this.classVersion.val = val.value
-    },
-    homeworkByPie: function(val) {
-      this.homework.percent = val.percent
-      this.homework.name = val.name
-      this.homework.val = val.value
-    },
-    classModeStr: function(val) {
-      switch (val) {
-        case 0:
-          return this.$t('classMgmt.notInitiated')
-          break
-        case 1:
-          return this.$t('classMgmt.runing')
-          break
-        case 2:
-          return this.$t('classMgmt.repair')
-          break
-      }
-    },
-    classModeClass: function(val) {
-      switch (val) {
-        case 0:
-          return 'unopen'
-          break
-        case 1:
-          return 'processing'
-          break
-        case 2:
-          return 'maintain'
-          break
-      }
-    },
-    buildDefaultFloorplan() {
-      this.$nextTick(() => {
-        var c = document.getElementById('floorplan')
-        var ctx = c.getContext('2d')
-        var img = document.getElementById('planImg')
-        var pin = document.getElementById('pin')
-        var greenpin = document.getElementById('greenpin')
-        var redpin = document.getElementById('redpin')
-        c.width = img.width
-        c.height = img.height
-        var pinW = 35
-        var pinH = 35
-        ctx.clearRect(0, 0, img.width, img.height)
-        ctx.drawImage(img, 0, 0)
-        ctx.drawImage(redpin, (c.width * 0.595), (c.height * 0.67), pinW, pinH)
-        ctx.drawImage(greenpin, (c.width * 0.45), (c.height * 0.23), pinW, pinH)
-        ctx.drawImage(greenpin, (c.width * 0.455), (c.height * 0.79), pinW, pinH)
-        ctx.drawImage(greenpin, (c.width * 0.595), (c.height * 0.79), pinW, pinH)
-        ctx.drawImage(greenpin, (c.width * 0.245), (c.height * 0.79), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.52), (c.height * 0.23), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.59), (c.height * 0.23), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.595), (c.height * 0.73), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.525), (c.height * 0.73), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.525), (c.height * 0.79), pinW, pinH)
-        ctx.drawImage(pin, (c.width * 0.455), (c.height * 0.73), pinW, pinH)
-      })
-    },
-    getDataAndSetCookie(schoolCode) {
-      return new Promise((resolve, reject) => {
-        this.$api.ClassMgmt.GetTestIoTData({ schoolshortcode: schoolCode}).then(res => {
-          let ClassMgmtData = {
-            timestempbySec: Math.floor((new Date().getTime() / 1000)),
-            schoolCode: schoolCode,
-            data: res.result.data
-          }
-          localStorage.setItem('ClassMgmtData', JSON.stringify(ClassMgmtData))
-          resolve(ClassMgmtData)
-        })
-      })
-    },
-    reciprocal () { //倒數計時器
-      this.reciprocalTimebySec -=1;
-      if(this.reciprocalTimebySec <= 0){
-          this.setClassMgmtData()
-          this.reciprocalTimebySec = this.countDownBySec;
-          this.reciprocal()
-      } else{
-          //每秒執行一次,showTime()
-          setTimeout(this.reciprocal,1000);
-      }
-    },
-    setRestTime (val) {
-      this.countDownBySec = val * 60
-    },
-    setClassMgmtData() {
-      let resetDataFlag = false
-      let schoolCode = this.isExistShortCode ? this.$route.params.schoolshortcode : 'habook'
-      let classMgmtData = localStorage.getItem('ClassMgmtData')
-      if(classMgmtData){  // ClassMgmtData是否存在
-        classMgmtData = JSON.parse(classMgmtData)
-        if(classMgmtData.schoolCode === schoolCode) { // schoolCode 是否相等
-          let TimebyNow = Math.floor((new Date().getTime() / 1000)) // 現在Timestamp(秒)
-          let overTimebySec = TimebyNow - classMgmtData.timestempbySec
-          if(overTimebySec >= this.resetTimebySec){ // 是否超過設定的時間
-            resetDataFlag = true  
-          } else {  // 沒超過給予原資料
-            this.$store.state.classMgmt.data = classMgmtData.data
-          }
-        } else {
-          resetDataFlag = true
-        }
-      } else {
-        resetDataFlag = true
-      }
-      // 重新賦值
-      if(resetDataFlag){
-        this.getDataAndSetCookie(schoolCode).then(res=>{
-          this.$store.state.classMgmt.data = res.data
-          console.log(res.data)
-        })
-      }    
-    }
-  },
-  filters: {
-    commaFormat: function(value) { // 加上千分位符號
-      return value.toString().replace(/^(-?\d+?)((?:\d{3})+)(?=\.\d+$|$)/, function(all, pre, groupOf3Digital) {
-        return pre + groupOf3Digital.replace(/\d{3}/g, ',$&')
-      })
-    },
-    percentFormat: function(num, pos) {
-      if (!num || !isFinite(num)) return 0
-      return (num * 100).toFixed(pos)
-    },
-    minToHM: function(min, type) {
-      switch (type) {
-        case 'h':
-          return Math.floor(min / 60)
-          break
-        case 'm':
-          return min % 60
-          break
-      }
-    },
-    secToMS: function(val){
-      let m = Math.floor(val / 60)
-      let s = val % 60
-      if(m < 10) m = '0'+m      
-      if(s < 10) s = '0'+s
-      return m + ':' + s
-    }
-  },
-  components: {
-    LegendPie,
-    RingPie,
-    ClassBar,
-    ClassLine,
-    FloorPlan
-  },
-  created() {
-    // 倒數計時
-    this.reciprocal()
-  },
-  mounted() {
-  }
-}
-</script>

+ 0 - 418
TEAMModelOS/ClientApp/src/view/smartschooldashboard/Index.less

@@ -1,418 +0,0 @@
-#smart-dashboard{
-  // width: 100%;
-  // height: 100%;
-  // background-image: url('../../assets/image/bak_dark.jpg');
-  // background-repeat: no-repeat;
-  // background-attachment: fixed;
-  // background-position: center;
-  // background-size: cover;
-  .Header{
-      width: 100%;
-      position: fixed;
-      padding: 0px 20px;
-      z-index: 1;
-      // background-color: #fff;
-      .smart-mark{
-          letter-spacing: 3px;
-          color: #94998a;
-      }
-      .smart-markD{
-          letter-spacing: 3px;
-          color: #94998a;
-          font-size: 15px;
-          vertical-align: middle;
-      }
-      .menu{
-          float: right;
-          height: initial;
-          background-color: transparent;
-          li{
-              color: #94998a;
-              line-height: initial;
-          }
-      }
-  }
-  .content{
-    padding-top: 40px;
-    height: 100%;
-    overflow: auto;
-    .dashBoardBtn{
-      background-color: transparent;
-      border-color: #94998a;
-      color: #94998a;
-      &:hover, &.select{
-        background-color: #94998a;
-        color: #333;
-      }
-    }
-    .box{
-      padding: 10px 0px 0px 0;
-      height: 93%;
-      margin: 0;
-      .block-1{
-        height: 100%;
-        .total{
-          height: 100%;
-          padding: 3.5% 0;
-          &-box{
-            height: 100%;
-            text-align: center;
-            border-top:1px solid #94998a;
-            border-bottom:1px solid #94998a;
-            padding: 11% 0;
-            position: relative;
-            border-radius: 5px;
-            &-border {
-              position: absolute;
-              width: 30px;
-              height: 30px;
-            }        
-            &-left-top {
-              top: -1px;
-              left: -1px;
-              border-left: 1px solid #94998a;
-              border-top: 1px solid #94998a;
-              border-top-left-radius: 5px;
-            }
-            &-right-top {
-              top: -1px;
-              right: -1px;
-              border-right: 1px solid #94998a;
-              border-top: 1px solid #94998a;
-              border-top-right-radius: 5px;
-            }
-            &-left-bottom {
-              bottom: -1px;
-              left: -1px;
-              border-left: 1px solid #94998a;
-              border-bottom: 1px solid #94998a;
-              border-bottom-left-radius: 5px;
-            }
-            &-right-bottom {
-              bottom: -1px;
-              right: -1px;
-              border-right: 1px solid #94998a;
-              border-bottom: 1px solid #94998a;
-              border-bottom-right-radius: 5px;
-            }
-            &-title{
-              color: #94998a;
-              font-size: 1.1em;
-            }
-            &-number{
-              font-size: 2em;
-              color: #FAFAFA;
-              font-weight: 100;
-            }
-            &-subtitle{
-              color: #e3e3e3;
-            }
-          }
-        }
-        .course{
-          padding: 15px 7px 0 0;
-          margin-left: 25px;
-          border-bottom: solid 1px #94998a;
-          &-Row{
-            padding-bottom: 7px;
-          }
-          &-className{
-            font-size: 1.1em;
-            font-weight: 100;
-            color: #fafafa
-          }
-          &-user{
-            max-width: 220px;
-            color: #A9B2B8;
-            display: inline-block;
-            vertical-align: middle;
-            font-size: 1em;
-          }
-          &-icon{
-            color: #A9B2B8;
-            display: inline-block;
-            vertical-align: middle;
-          }
-          &-text{
-            color: rgba(228, 233, 220, 0.63);
-          }
-        }
-      }
-      .block-2{
-        height: 100%;
-        .classroom{
-          padding-bottom:7px;
-          text-align: center;
-          &-title{
-            display: block;
-            color:#94998a;
-            font-size: 1em;
-          }
-          &-number{
-            color: #fafafa;
-            font-size: 2em;
-            font-weight: 100;
-          }
-          &:hover{
-            background: -webkit-linear-gradient(bottom, rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: -o-linear-gradient(bottom,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: -moz-linear-gradient(bottom,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-            background: linear-gradient(to bottom,rgba(147, 166, 150, 0), rgba(147, 166, 150, 0.42));
-          }
-        }
-        .today-class-content{
-          height: 100%;
-          &-title{
-            height: 12%;
-            font-size: 1.25em;
-            color:#E4E9DC;
-            padding: 15px 0 15px 15px;
-            font-weight: 100;
-          }
-          &-contents{
-            height: 88%;
-            .chart{
-              height: 100%;
-            }
-            .detail{
-              height: 100%;
-              .detail-row{
-                height: 100%;
-                padding: 5px 0;
-                .detail-col{
-                  cursor: pointer;
-                  height:33.33333%;
-                  color: #fafafa;
-                  .detail-title{
-                    display: block;
-                    color: #94998a;
-                    padding-left: 5px;
-                    border-left: 2px solid #333;
-                    font-size: 1.1em;
-                    &-border-red{
-                      border-left-color: #FF6B6A;
-                    }
-                    &-border-green{
-                      border-left-color: #1CD0A1;
-                    }
-                    &-border-pink{
-                      border-left-color: #FF9FF4;
-                    }
-                    &-border-yellow{
-                      border-left-color: #FDC958;
-                    }
-                    &-border-blue{
-                      border-left-color: #48DBFC;
-                    }
-                    &-border-orange{
-                      border-left-color: #FFAD76;
-                    }
-                  }
-                  .detail-amount{
-                    font-size: 1.4em;
-                    font-weight: 100;
-                    padding-left: 5px;
-                  }
-                }
-              }
-
-            }
-          }
-        }
-        .course-content{
-          height: 100%;
-          &-title{
-            height: 14%;
-            h5{
-              border-bottom: 1px solid #94998a;
-              font-size: 1.25em;
-              color: #E4E9DC;
-              font-weight: 100;
-              height: 100%;
-              padding: 1.5%;
-            }
-          }
-          &-contents{
-            height: 86%;
-            &-left{
-              border-right: 1px solid #94998a;
-              height: 100%;
-              &-row{
-                height: 100%;
-                padding: 5px 0;
-                &-col{
-                  height: 24%;
-                  .contents-box{
-                    width: 77px;
-                    margin: auto;
-                    &-title{
-                      display: block;
-                      color: #94998a;
-                      padding-left: 5px;
-                      border-left: 2px solid #333;
-                      font-size: 1.1em;
-                    }
-                    &-num{
-                      font-size: 1.4em;
-                      color: #fafafa;
-                      font-weight: 100;
-                      padding-left: 5px;
-                    }
-                    &-subtitle{
-                      display: block;
-                      color: #A9B2B8;
-                      padding-left: 5px;
-                      font-size: 0.9em;
-                    }
-                    &-border-red{
-                      border-left-color: #FF6B6A;
-                    }
-                    &-border-green{
-                      border-left-color: #1CD0A1;
-                    }
-                    &-border-pink{
-                      border-left-color: #FF9FF4;
-                    }
-                    &-border-yellow{
-                      border-left-color: #FDC958;
-                    }
-                    &-border-blue{
-                      border-left-color: #48DBFC;
-                    }
-                    &-border-orange{
-                      border-left-color: #FFAD76;
-                    }
-                    &-border-purple{
-                      border-left-color: rgb(182,130,248);
-                    }
-                  }
-                }
-              }
-            }
-            &-right{
-              height: 100%;
-            }
-          }
-        }
-      }
-      .block-3{
-        height: 100%;
-        .today-class-content{
-          height: 100%;
-          &-title{
-            height: 10%;
-            font-size: 1.25em;
-            color:#E4E9DC;
-            padding: 10px 0 15px 15px;
-            font-weight: 100;
-          }
-          &-contents{
-            height: 90%;
-            .chart{
-              height: 100%;
-            }
-            .detail{
-              .detail-row{
-                height: 100%;
-                padding: 5px 0;
-                .detail-col{
-                  cursor: pointer;
-                  color: #fafafa;
-                  width: 110px;
-                  margin: auto;
-                  padding-bottom: 10px;
-                  .detail-title{
-                    display: block;
-                    color: #94998a;
-                    padding-left: 5px;
-                    border-left: 2px solid #333;
-                    font-size: 1.1em;
-                    &-border-red{
-                      border-left-color: #FF6B6A;
-                    }
-                    &-border-green{
-                      border-left-color: #1CD0A1;
-                    }
-                    &-border-pink{
-                      border-left-color: #FF9FF4;
-                    }
-                    &-border-yellow{
-                      border-left-color: #FDC958;
-                    }
-                    &-border-blue{
-                      border-left-color: #48DBFC;
-                    }
-                    &-border-orange{
-                      border-left-color: #FFAD76;
-                    }
-                  }
-                  .detail-amount{
-                    font-size: 1.3em;
-                    font-weight: 100;
-                    padding-left: 5px;
-                  }
-                }
-              }
-
-            }
-          }
-        }
-      }
-      .block-4{
-        height: 100%;
-        .teachingEvent{
-          height: 80%;
-          &-row{
-            height: 100%;
-            &-col{
-              height:100%;
-              .teachContent{
-                height: 100%;
-                &-box{
-                  text-align: center;
-                  &-title{
-                    font-size: 1.2em;
-                    display: block;
-                    color: #94998a;
-                  }
-                  &-num{
-                    display: block;
-                    color: #fafafa;
-                    font-weight: 100;
-                    font-size: 2.5em;
-                  }
-                  &-subnum{
-                    font-size: 1em;
-                    display: block;
-                    color: #fafafa;
-                  }
-                }
-              }
-            }
-          }
-
-        }
-      }
-    }
-  }
-}
-.block-border{
-  border: 0.11px solid rgba(148, 153, 138, 0.63);
-}
-.scrollstyle::-webkit-scrollbar {
-    width: 5px;
-}
-.scrollstyle::-webkit-scrollbar-track {
-  margin: 6px;
-  background: transparent;
-}
-.scrollstyle::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  background: #94998a;
-}
-.scrollstyle::-webkit-scrollbar-thumb:hover {
-  // background: #555;
-}
-.scrollstyle::-webkit-scrollbar-button {
-  display: none;
-}

+ 0 - 577
TEAMModelOS/ClientApp/src/view/smartschooldashboard/Index.vue

@@ -1,577 +0,0 @@
-<style lang="less" scoped>
-  @import './Index.less';
-</style>
-
-<template>
-    <div id="smart-dashboard" class="backdrop-dark">
-      <div class="Header">
-        <Row type="flex" justify="center" align="middle">
-          <Col :span="3">
-            <img style="height: 20px;" src="@/assets/mark.svg"/>
-          </Col>
-          <Col :span="8">
-            <Icon size="20" type="md-pin" style="vertical-align: middle;color: #94998a" /><span class="smart-markD">{{ $t('menu.breadcrumbs')}}</span>
-          </Col>
-          <Col :span="11">
-            <Menu class="menu" mode="horizontal" theme="dark">
-              <MenuItem name="1">
-                  <Icon type="ios-paper" />
-                  {{ $t('menu.menu1')}}
-              </MenuItem>
-              <MenuItem name="2">
-                  <Icon type="ios-people" />
-                  {{ $t('menu.menu2')}}
-              </MenuItem>
-              <MenuItem name="3">
-                  <Icon type="ios-people" />
-                  {{ $t('menu.menu3')}}
-              </MenuItem>
-              <MenuItem name="4">
-                  <Icon type="ios-construct" />
-                  {{ $t('menu.menu4')}}
-              </MenuItem>
-          </Menu>
-          </Col>
-          <Col :span="2" style="text-align: center;">
-            <!-- <Icon style="font-size: 24px; color: #FAFAFA;" type="md-person" /> -->
-            <img style="width: 35px;margin-top: 4px;" src="@/assets/image/touxiang.png">
-          </Col>
-        </Row>
-      </div>
-      <div class="content">
-        <div style="text-align: center;padding-top: 5px;height: 5%;">
-          <Button to="/smartclassdashboard" class="dashBoardBtn">{{$t('schoolMgmt.pageButton1')}}</Button>
-          <Button class="dashBoardBtn select">{{$t('schoolMgmt.pageButton2')}}</Button>
-        </div>
-        <Row class="box" type="flex" justify="space-around">
-          <Col :span="5"  class="block-1">
-            <div style="height: 100%;">
-              <div class="block-border" style="height: 19%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                <!-- 边角设计 start-->
-                <div class="image-border image-border-left-top" ></div>
-                <div class="image-border image-border-right-top" ></div>
-                <div class="image-border image-border-left-bottom" ></div>
-                <div class="image-border image-border-lright-bottom" ></div>
-                <!-- 边角设计 end-->
-                <Row class="total" type="flex" align="middle" justify="space-around">
-                  <Col :span="10">
-                    <div class="total-box">
-                      <div class="total-box-border total-box-left-top" ></div>
-                      <div class="total-box-border total-box-right-top" ></div>
-                      <div class="total-box-border total-box-left-bottom" ></div>
-                      <div class="total-box-border total-box-right-bottom" ></div>
-                      <span class="total-box-title">{{$t('schoolMgmt.block1SubTitle1')}}</span>
-                      <h5 class="total-box-number">2,056</h5>
-                      <span class="total-box-subtitle">{{$t('schoolMgmt.block1SubTitle3')}}: <span class="total-box-subtitle-num">38</span></span>
-                    </div>
-                  </Col>
-                  <Col :span="10">
-                    <div class="total-box" style="height: 100%;text-align: center;">
-                      <div class="total-box-border total-box-left-top" ></div>
-                      <div class="total-box-border total-box-right-top" ></div>
-                      <div class="total-box-border total-box-left-bottom" ></div>
-                      <div class="total-box-border total-box-right-bottom" ></div>
-                      <span class="total-box-title">{{$t('schoolMgmt.block1SubTitle2')}}</span>
-                      <h5 class="total-box-number">81,762</h5>
-                      <span class="total-box-subtitle">{{$t('schoolMgmt.block1SubTitle3')}}: <span class="total-box-subtitle-num">183</span></span>
-                    </div>
-                  </Col>
-                </Row>
-              </div>
-              <div style="height: 1.5%"></div>
-              <div class="block-border" style="height: 30%;position: relative;background-color: rgba(217, 217, 217, 0.14);padding-right: 1%;">
-                <!-- 边角设计 start-->
-                <div class="image-border image-border-left-top" ></div>
-                <div class="image-border image-border-right-top" ></div>
-                <div class="image-border image-border-left-bottom" ></div>
-                <div class="image-border image-border-lright-bottom" ></div>
-                <!-- 边角设计 end-->
-                <div style="height: 20%;position: relative">
-                  <h5 style="height: 100%;padding: 3% 4%;font-size: 1.25em;color: rgb(228, 233, 220);font-weight: 100;">{{$t('schoolMgmt.block1Title1')}}</h5>
-                </div>
-                <div style="height: 70%;position: relative">
-                  <AccountLine style="position: absolute;" :id="'accountline1'"></AccountLine>
-                </div>
-              </div>
-              <div style="height: 1.5%"></div>
-              <div class="block-border" style="height: 48%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                <!-- 边角设计 start-->
-                <div class="image-border image-border-left-top" ></div>
-                <div class="image-border image-border-right-top" ></div>
-                <div class="image-border image-border-left-bottom" ></div>
-                <div class="image-border image-border-lright-bottom" ></div>
-                <!-- 边角设计 end-->
-                <div style="height: 13%;">
-                  <h5 style="height: 100%;padding: 3% 4%;font-size: 1.25em;color: #E4E9DC;border-bottom: solid 1px #94998a;font-weight: 100;">{{$t('schoolMgmt.block1Title2')}}</h5>
-                </div>
-                <div style="height: 87%;width:100%;position: relative;overflow: auto;">
-                  <div class="scrollstyle" style="position: absolute;right: 0px;left: 0;top: 0;bottom: 0;overflow-x: hidden;overflow-y: auto;;background-color: rgba(17, 17, 17, 0.14);">
-                      <div class="course" v-for="(item, index) in courseList" :key="index">
-                          <Row type="flex" justify="center" align="middle" class="course-Row">
-                            <Col :span="16">
-                              <h5 class="ellipsis course-className">{{ $t(item.className) }}</h5>
-                              <span class="ellipsis course-user">{{item.user }}</span><Icon class="course-icon" :size="15" type="ios-information-circle" />
-                            </Col>
-                            <Col :span="8">
-                              <div class="course-text" style="margin-bottom: 3px;">{{$t('schoolMgmt.block1SubTitle4')}} | {{ item.courses }}</div>
-                              <div class="course-text">{{$t('schoolMgmt.block1SubTitle5')}} | {{ item.students }}</div>
-                            </Col>
-                          </Row>
-                      </div>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </Col>
-          <Col :span="7" class="block-2">
-            <!-- block-2 -->
-            <div class="block-border" style="height: 38%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div style="height: 77%">
-                <ClassTypePie :id="'classtypepie'"></ClassTypePie>
-              </div>
-              <div style="height: 23%;padding-top: 10px;">
-                 <Row type="flex" justify="space-around" align="middle">
-                  <Col :span="6" style="padding: 0 10px;">
-                    <div class="classroom">
-                      <span class="classroom-title">{{$t('schoolMgmt.block2SubTitle1')}}</span>
-                      <h5 class="classroom-number">521</h5>
-                    </div>
-                  </Col>
-                  <Col :span="6" style="padding: 0 10px;">
-                    <div class="classroom">
-                      <span class="classroom-title">{{$t('schoolMgmt.block2SubTitle2')}}</span>
-                      <h5 class="classroom-number">857</h5>
-                    </div>
-                  </Col>
-                  <Col :span="6" style="padding: 0 10px;">
-                    <div class="classroom">
-                      <span class="classroom-title">{{$t('schoolMgmt.block2SubTitle3')}}</span>
-                      <h5 class="classroom-number">410</h5>
-                    </div>
-                  </Col>
-                  <Col :span="6" style="padding: 0 10px;">
-                    <div class="classroom">
-                      <span class="classroom-title">{{$t('schoolMgmt.block2SubTitle4')}}</span>
-                      <h5 class="classroom-number">242</h5>
-                    </div>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 25%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="today-class-content">
-                <h5 class="today-class-content-title">{{$t('schoolMgmt.block3Title1')}}</h5>
-                <Row class="today-class-content-contents" type="flex" justify="center" align="middle">
-                  <Col :span="10" class="chart">
-                    <RingPie :id="'ringPie1'"></RingPie>
-                  </Col>
-                  <Col :span="14" class="detail">
-                    <Row class="detail-row" type="flex" justify="center" align="middle">
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','苏格拉底')" @mouseenter="pieHeightLight('class','苏格拉底')">
-                          <span class="detail-title detail-title-border-red">{{$t('schoolMgmt.text11')}}</span>
-                          <h5 class="detail-amount">33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','电子笔记')" @mouseenter="pieHeightLight('class','电子笔记')">
-                          <span  class="detail-title detail-title-border-pink" >{{$t('schoolMgmt.text12')}}</span>
-                          <h5 class="detail-amount" >33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','上传影片')" @mouseenter="pieHeightLight('class','上传影片')">
-                          <span  class="detail-title detail-title-border-blue" >{{$t('schoolMgmt.text13')}}</span>
-                          <h5 class="detail-amount" >33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','作业作品')" @mouseenter="pieHeightLight('class','作业作品')">
-                          <span  class="detail-title detail-title-border-green">{{$t('schoolMgmt.text14')}}</span>
-                          <h5 class="detail-amount" >33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','翻转课堂')" @mouseenter="pieHeightLight('class','翻转课堂')">
-                          <span  class="detail-title detail-title-border-yellow" >{{$t('schoolMgmt.text15')}}</span>
-                          <h5 class="detail-amount" >33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                      <Col :span="8" class="detail-col">
-                        <div @mouseleave="pieDownPlay('class','线上测验')" @mouseenter="pieHeightLight('class','线上测验')">
-                          <span  class="detail-title detail-title-border-orange" >{{$t('schoolMgmt.text16')}}</span>
-                          <h5 class="detail-amount" >33% <small>(168)</small></h5>
-                        </div>
-                      </Col>
-                    </Row>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-            <div style="height: 1.5%"></div>
-            <div class="block-border" style="height: 34%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-              <!-- 边角设计 start-->
-              <div class="image-border image-border-left-top" ></div>
-              <div class="image-border image-border-right-top" ></div>
-              <div class="image-border image-border-left-bottom" ></div>
-              <div class="image-border image-border-lright-bottom" ></div>
-              <!-- 边角设计 end-->
-              <div class="course-content">
-                <div class="course-content-title">
-                  <h5>{{$t('schoolMgmt.block3Title2')}}</h5>
-                </div>
-                <Row class="course-content-contents" type="flex" justify="center" align="middle">
-                  <Col class="course-content-contents-left" :span="11">
-                    <Row class="course-content-contents-left-row" type="flex"  justify="center" align="middle">
-                      <Col class="course-content-contents-left-row-col" :span="12">
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-red">{{$t('schoolMgmt.text31')}}</span>
-                          <h5 class="contents-box-num">0.0%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 0</span>
-                        </div>
-                      </Col>
-                      <Col class="course-content-contents-left-row-col" :span="12">
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-green">{{$t('schoolMgmt.text32')}}</span>
-                          <h5 class="contents-box-num">0.5%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 28</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col">
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-pink">{{$t('schoolMgmt.text33')}}</span>
-                          <h5 class="contents-box-num">1.5%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}:77</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col" >
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-yellow">{{$t('schoolMgmt.text34')}}</span>
-                          <h5 class="contents-box-num">0.4%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 20</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col">
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-purple">{{$t('schoolMgmt.text35')}}</span>
-                          <h5 class="contents-box-num">4.6%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 227</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col" >
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-orange">{{$t('schoolMgmt.text36')}}</span>
-                          <h5 class="contents-box-num">4.1%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 214</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col" >
-                        <div class="contents-box">
-                          <span class="contents-box-title contents-box-border-blue">{{$t('schoolMgmt.text37')}}</span>
-                          <h5 class="contents-box-num">88.9%</h5>
-                          <span class="contents-box-subtitle">{{$t('schoolMgmt.text38')}}: 4531</span>
-                        </div>
-                      </Col>
-                      <Col :span="12" class="course-content-contents-left-row-col" >
-
-                      </Col>
-                    </Row>
-                  </Col>
-                  <Col :span="13" style="height: 100%;">
-                    <div style="height:65%">
-                      <CourseBar :id="'coursebar1'"></CourseBar>
-                    </div>
-                    <div style="height:35%">
-                      <Row type="flex" justify="center" align="middle" >
-                        <Col :span="11">
-                          <RingPie :singleColor="true" :id="'ringPie3'"></RingPie>
-                        </Col>
-                        <Col :span="13">
-                            <div style="color: #A9B2B8">{{$t('schoolMgmt.block3SubTitle1')}} : <span style="color: #fafafa;">54</span></div>
-                            <div style="color: #A9B2B8">{{$t('schoolMgmt.block3SubTitle2')}} : <span style="color: #fafafa;">48</span></div>
-                            <div style="color: #A9B2B8">{{$t('schoolMgmt.block3SubTitle3')}} : <span style="color: #fafafa;">49</span></div>
-                        </Col>
-                      </Row>
-                    </div>
-                  </Col>
-                </Row>
-              </div>
-            </div>
-          </Col>
-          <Col :span="11">
-            <Row style="height: 64.5%">
-              <Col :span="8" class="block-3">
-                <div class="block-border" style="height: 47.5%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                  <!-- 边角设计 start-->
-                  <div class="image-border image-border-left-top" ></div>
-                  <div class="image-border image-border-right-top" ></div>
-                  <div class="image-border image-border-left-bottom" ></div>
-                  <div class="image-border image-border-lright-bottom" ></div>
-                  <!-- 边角设计 end-->
-                  <div class="today-class-content">
-                    <h5 class="today-class-content-title">{{$t('schoolMgmt.block3Title3')}}</h5>
-                    <Row type="flex" justify="center" align="middle" class="today-class-content-contents">
-                      <Col :span="13" class="chart">
-                        <RingPie  style="height: 60%" :tooltip="true" :pieData="[{value:3719, name:$t('schoolMgmt.text39')}, {value:0, name:$t('schoolMgmt.text41')},{value:251, name:$t('schoolMgmt.text40')}, {value:0, name:$t('schoolMgmt.text42')}]" :id="'ringPie2'"></RingPie>
-                        <div style="height: 30%;text-align: center;" >
-                          <span style="color: #94998a;">{{$t('schoolMgmt.block3SubTitle4')}}</span>
-                          <h5 style="font-size: 2em;color: #fafafa;font-weight: 100;">7,689</h5>
-                        </div>
-                      </Col>
-                      <Col :span="11" class="detail">
-                        <Row class="detail-row" >
-                          <Col  class="detail-col">
-                            <div @mouseleave="pieDownPlay('class','题目数')" @mouseenter="pieHeightLight('class','题目数')">
-                              <span class="detail-title detail-title-border-red">{{$t('schoolMgmt.text39')}}</span>
-                              <h5 class="detail-amount">3,719 <small>(48.36%)</small></small></h5>
-                            </div>
-                          </Col>
-                          <Col  class="detail-col">
-                            <div @mouseleave="pieDownPlay('class','教材数')" @mouseenter="pieHeightLight('class','教材数')">
-                              <span  class="detail-title detail-title-border-blue" >{{$t('schoolMgmt.text40')}}</span>
-                              <h5 class="detail-amount" >251 <small>(3.26%)</small></h5>
-                            </div>
-                          </Col>
-                          <Col  class="detail-col">
-                            <div @mouseleave="pieDownPlay('class','分享课例数')" @mouseenter="pieHeightLight('class','分享课例数')">
-                              <span  class="detail-title detail-title-border-pink" >{{$t('schoolMgmt.text41')}}</span>
-                              <h5 class="detail-amount" >3,104 <small>(0%)</small></h5>
-                            </div>
-                          </Col>
-                          <Col  class="detail-col">
-                            <div @mouseleave="pieDownPlay('class','校本课纲数')" @mouseenter="pieHeightLight('class','校本课纲数')">
-                              <span  class="detail-title detail-title-border-yellow" >{{$t('schoolMgmt.text42')}}</span>
-                              <h5 class="detail-amount" >615 <small>(0%)</small></h5>
-                            </div>
-                          </Col>
-                        </Row>
-                      </Col>
-                    </Row>
-                  </div>
-                </div>
-                <div style="height: 1.5%"></div>
-                <div class="block-border" style="height: 51%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                  <!-- 边角设计 start-->
-                  <div class="image-border image-border-left-top" ></div>
-                  <div class="image-border image-border-right-top" ></div>
-                  <div class="image-border image-border-left-bottom" ></div>
-                  <div class="image-border image-border-lright-bottom" ></div>
-                  <!-- 边角设计 end-->
-                  <h5 style="border-bottom: 1px solid #94998a;font-size: 1.25em;color: #E4E9DC;font-weight: 100;height: 15%;padding: 10px;">{{$t('schoolMgmt.text43')}}</h5>
-                  <div style="height: 85%;">
-                    <ClassResourceBar :id="'classresourcebar1'"></ClassResourceBar>
-                  </div>
-                </div>
-              </Col>
-              <Col style="padding-left: 14px;" :span="16" class="block-4">
-                <div class="block-border" style="height: 31.5%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                  <!-- 边角设计 start-->
-                  <div class="image-border image-border-left-top" ></div>
-                  <div class="image-border image-border-right-top" ></div>
-                  <div class="image-border image-border-left-bottom" ></div>
-                  <div class="image-border image-border-lright-bottom" ></div>
-                  <!-- 边角设计 end-->
-                  <div style="height: 100%">
-                    <div style="height: 20%;">
-                      <h5 style="font-size: 1.25em;color: #E4E9DC;padding: 10px 0 15px 15px;font-weight: 100;">{{$t('schoolMgmt.block4Title1')}}</h5>
-                    </div>
-                    <div class="teachingEvent">
-                      <Row type="flex" justify="center" align="middle" class="teachingEvent-row">
-                        <Col class="teachingEvent-row-col" :span="17">
-                          <Row type="flex" justify="space-around" align="middle" class="teachContent">
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle1')}}</span>
-                              <span class="teachContent-box-num">175</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle2')}}</span>
-                              <span class="teachContent-box-num">537</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle3')}}</span>
-                              <span class="teachContent-box-num">643</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                          </Row>
-                        </Col>
-                        <Col :span="7" style="height:100%">
-                          <RingPie :pieData="[{value:175, name:$t('schoolMgmt.text39')}, {value:537, name:$t('schoolMgmt.text41')},{value:643, name:$t('schoolMgmt.text40')}]" :id="'ringPie4'"></RingPie>
-                        </Col>
-                      </Row>
-                    </div>
-                  </div>
-                </div>
-                <div style="height: 2.3%"></div>
-                <div class="block-border" style="height: 31.5%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                  <!-- 边角设计 start-->
-                  <div class="image-border image-border-left-top" ></div>
-                  <div class="image-border image-border-right-top" ></div>
-                  <div class="image-border image-border-left-bottom" ></div>
-                  <div class="image-border image-border-lright-bottom" ></div>
-                  <!-- 边角设计 end-->
-                  <div style="height: 100%">
-                    <div style="height: 20%;">
-                      <h5 style="font-size: 1.25em;color: #E4E9DC;padding: 10px 0 15px 15px;font-weight: 100;">{{$t('schoolMgmt.block4Title2')}}</h5>
-                    </div>
-                    <div class="teachingEvent">
-                      <Row type="flex" justify="center" align="middle" class="teachingEvent-row">
-                        <Col class="teachingEvent-row-col" :span="17">
-                          <Row type="flex" justify="space-around" align="middle" class="teachContent">
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle5')}}</span>
-                              <span class="teachContent-box-num">519</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle6')}}</span>
-                              <span class="teachContent-box-num">410</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                            <Col class="teachContent-box" :span="6">
-                              <span class="teachContent-box-title">{{$t('schoolMgmt.block4SubTitle7')}}</span>
-                              <span class="teachContent-box-num">426</span>
-                              <span class="teachContent-box-subnum">{{$t('schoolMgmt.block4SubTitle4')}} : 11</span>
-                            </Col>
-                          </Row>
-                        </Col>
-                        <Col :span="7" style="height:100%">
-                          <RingPie :pieData="[{value:519, name:$t('schoolMgmt.text39')}, {value:410, name:$t('schoolMgmt.text41')},{value:426, name:$t('schoolMgmt.text40')}]" :id="'ringPie5'"></RingPie>
-                        </Col>
-                      </Row>
-                    </div>
-                  </div>
-                </div>
-                <div style="height: 2.3%"></div>
-                <div style="height: 32.5%;">
-                  <Row style="height: 100%;">
-                    <Col :span="8" style="height: 100%;padding-right:1.5%;">
-                      <div class="block-border" style="height: 100%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                        <!-- 边角设计 start-->
-                        <div class="image-border image-border-left-top" ></div>
-                        <div class="image-border image-border-right-top" ></div>
-                        <div class="image-border image-border-left-bottom" ></div>
-                        <div class="image-border image-border-lright-bottom" ></div>
-                        <!-- 边角设计 end-->
-                        <h5 style="height: 15%;font-size: 1.25em;color: #E4E9DC;padding-top: 10px;font-weight: 100;text-align: center;">{{$t('schoolMgmt.block4Title3')}}</h5>
-                        <div style="height: 85%">
-                          <FinishPercentPie :id="'finishpercentpie1'"></FinishPercentPie>
-                        </div>
-                      </div>
-                    </Col>
-                    <Col :span="8" style="height: 100%;padding:0 1%;">
-                      <div class="block-border" style="height: 100%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                        <!-- 边角设计 start-->
-                        <div class="image-border image-border-left-top" ></div>
-                        <div class="image-border image-border-right-top" ></div>
-                        <div class="image-border image-border-left-bottom" ></div>
-                        <div class="image-border image-border-lright-bottom" ></div>
-                        <!-- 边角设计 end-->
-                        <h5 style="height: 15%;font-size: 1.25em;color: #E4E9DC;padding-top: 10px;font-weight: 100;text-align: center;">{{$t('schoolMgmt.block4Title4')}}</h5>
-                        <div style="height: 85%">
-                          <FinishPercentPie :pieData="{total: 537, value: 354}" :id="'finishpercentpie2'"></FinishPercentPie>
-                        </div>
-                      </div>
-                    </Col>
-                    <Col  :span="8" style="height: 100%;padding-left: 1.5%;">
-                      <div class="block-border"  style="height: 100%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                        <!-- 边角设计 start-->
-                        <div class="image-border image-border-left-top" ></div>
-                        <div class="image-border image-border-right-top" ></div>
-                        <div class="image-border image-border-left-bottom" ></div>
-                        <div class="image-border image-border-lright-bottom" ></div>
-                        <!-- 边角设计 end-->
-                        <h5 style="height: 15%;font-size: 1.25em;color: #E4E9DC;padding-top: 10px;font-weight: 100;text-align: center;">{{$t('schoolMgmt.block4Title5')}}</h5>
-                        <div style="height: 85%">
-                          <FinishPercentPie :pieData="{total: 643, value:379}" :id="'finishpercentpie3'"></FinishPercentPie>
-                        </div>
-                      </div>
-                    </Col>
-                  </Row>
-                </div>
-              </Col>
-            </Row>
-            <div style="height: 1.5%"></div>
-            <Row style="height: 34%;">
-              <Col style="height: 100%;">
-                <div class="block-border" style="height: 100%;position: relative;background-color: rgba(217, 217, 217, 0.14);">
-                  <!-- 边角设计 start-->
-                  <div class="image-border image-border-left-top" ></div>
-                  <div class="image-border image-border-right-top" ></div>
-                  <div class="image-border image-border-left-bottom" ></div>
-                  <div class="image-border image-border-lright-bottom" ></div>
-                  <!-- 边角设计 end-->
-                  <div style="height: 20%">
-                    <h5 style="font-size: 1.25em;color: #E4E9DC;padding: 15px 0 0 15px;font-weight: 100;">{{$t('schoolMgmt.block4Title6')}}</h5>
-                  </div>
-                  <div style="height: 80%">
-                    <TotalLine :id="'totalLine1'"></TotalLine>
-                  </div>
-                </div>
-              </Col>
-            </Row>
-          </Col>
-        </Row>
-      </div>
-    </div>
-</template>
-
-<script>
-import AccountLine from '@/components/smartschooldashboard/AccountLine.vue'
-import TeachScienceBar from '@/components/smartschooldashboard/TeachScienceBar.vue'
-import ClassTypePie from '@/components/smartschooldashboard/ClasstypePie.vue'
-import RingPie from '@/components/smartschooldashboard/RingPie.vue'
-import CourseBar from '@/components/smartschooldashboard/CourseBar.vue'
-import FinishPercentPie from '@/components/smartschooldashboard/FinishPercentPie.vue'
-import TotalLine from '@/components/smartschooldashboard/TotalLine.vue'
-import ClassResourceBar from '@/components/smartschooldashboard/ClassResourceBar.vue'
-import { mapState } from 'vuex'
-
-export default {
-  name: 'smart-dashboard',
-  data() {
-    return {
-      courseList: [
-        { className: 'schoolMgmt.text1', user: 'Bruse', students: 42, courses: 62 },
-        { className: 'schoolMgmt.text2', user: 'Picc', students: 30, courses: 51 },
-        { className: 'schoolMgmt.text3', user: 'Willa', students: 25, courses: 45 },
-        { className: 'schoolMgmt.text4', user: 'Dr.Liang', students: 42, courses: 27 },
-        { className: 'schoolMgmt.text5', user: 'Justin', students: 32, courses: 14 },
-        { className: 'schoolMgmt.text6', user: 'Mr.Chang', students: 33, courses: 34 },
-        { className: 'schoolMgmt.text7', user: 'Zac', students: 25, courses: 52 },
-        { className: 'schoolMgmt.text8', user: 'Mr.Wang', students: 37, courses: 32 },
-        { className: 'schoolMgmt.text9', user: 'Leo', students: 42, courses: 52 },
-        { className: 'schoolMgmt.text10', user: 'Daphne', students: 30, courses: 30 }
-      ]
-    }
-  },
-  components: {
-    AccountLine,
-    TeachScienceBar,
-    ClassTypePie,
-    RingPie,
-    CourseBar,
-    FinishPercentPie,
-    TotalLine,
-    ClassResourceBar
-  },
-  methods: {
-  },
-  created() {    
-  }
-}
-</script>

+ 0 - 0
TEAMModelOS/ClientApp/src/view/smartschooldashboard/menu/Create.vue


+ 0 - 0
TEAMModelOS/ClientApp/src/view/smartschooldashboard/menu/Detail.vue


+ 17 - 14
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -137,28 +137,31 @@ namespace TEAMModelOS.Controllers.Client
                                 foreach (var scheduleobj in schedule.EnumerateArray())
                                 {
                                     dynamic classExtobj = new ExpandoObject();
-                                    var classinfo = scheduleobj.GetProperty("classInfo");
-                                    classExtobj.id = classinfo.GetProperty("id");
-                                    classExtobj.name = classinfo.GetProperty("name");
-                                    classExtobj.code = id;
-                                    if (scheduleobj.TryGetProperty("teacher", out JsonElement teacher))
+                                    classExtobj.id = null;
+                                    classExtobj.code = null;
+                                    classExtobj.teacher = null;
+                                    if (scheduleobj.TryGetProperty("teacherId", out JsonElement teacherId) && !string.IsNullOrWhiteSpace(Convert.ToString(teacherId)))
                                     {
-                                        classExtobj.teacher = new ExpandoObject();
-                                        classExtobj.teacher.id = Convert.ToString(teacher.GetProperty("id"));
-                                        classExtobj.teacher.name = Convert.ToString(teacher.GetProperty("name"));
-                                    } else
-                                    {
-                                        classExtobj.teacher = null;
+                                        await foreach (var teaitem in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name FROM c WHERE c.id = '{teacherId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+                                        {
+                                            var jsontea = await JsonDocument.ParseAsync(teaitem.ContentStream);
+                                            foreach (var teaobj in jsontea.RootElement.GetProperty("Documents").EnumerateArray())
+                                            {
+                                                classExtobj.teacher = new ExpandoObject();
+                                                classExtobj.teacher = teaobj.ToObject<object>();
+                                            }
+                                        }
                                     }
                                     classExtobj.scope = "private";
                                     int stuCount = 0;
                                     string stuListId = Convert.ToString(scheduleobj.GetProperty("stulist"));
                                     classExtobj.stuListId = stuListId;
-                                    await foreach (var stuitem in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: $"SELECT ARRAY_LENGTH(c.students) as stucnt FROM c WHERE c.id = '{stuListId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("StuList") }))
+                                    await foreach (var stuitem in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, ARRAY_LENGTH(c.students) as stucnt FROM c WHERE c.id = '{stuListId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("StuList") }))
                                     {
                                         var jsonstu = await JsonDocument.ParseAsync(stuitem.ContentStream);
                                         foreach (var stuobj in jsonstu.RootElement.GetProperty("Documents").EnumerateArray())
                                         {
+                                            classExtobj.name = stuobj.GetProperty("name");
                                             stuCount = stuobj.GetProperty("stucnt").GetInt32();
                                         }
                                     }
@@ -279,7 +282,7 @@ namespace TEAMModelOS.Controllers.Client
 
                 //該老師排定的學校課程
                 List<object> courses = new List<object>();
-                var query = $"SELECT c.id, c.name, c.scope, c.subject, schedule.classId AS scheduleClassId, schedule.teacher AS scheduleTeacher, schedule.stulist AS scheduleStulist, schedule.time AS scheduleTime, schedule.notice AS scheduleNotice FROM c JOIN schedule IN c.schedule WHERE schedule.teacher.id = '{id}'";
+                var query = $"SELECT c.id, c.name, c.scope, c.subject, schedule.classId AS scheduleClassId, schedule.teacher AS scheduleTeacher, schedule.stulist AS scheduleStulist, schedule.time AS scheduleTime, schedule.notice AS scheduleNotice FROM c JOIN schedule IN c.schedule WHERE schedule.teacherId = '{id}'";
                 //var query = $"SELECT c.id, c.name, c.teacher, cc.course, c.scope FROM c JOIN cc IN c.courses JOIN cct IN cc.teachers WHERE cct.id = '{id}'";
                 await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Course-{school_code}") }))
                 {
@@ -818,7 +821,7 @@ namespace TEAMModelOS.Controllers.Client
                 }
             }
             //Case 2 取得班級固定成員
-            if(grant_type.GetString() == "school" && students.Count == 0 && !string.IsNullOrWhiteSpace(classId))
+            if(grant_type.GetString() == "school" && students.Count == 0 && !string.IsNullOrWhiteSpace(classId) && string.IsNullOrWhiteSpace(stulist))
             {
                 var query = $"SELECT c.id, c.name, c.no, c.schoolId FROM c WHERE c.classId = '{classId}'";
                 await foreach (var item in client.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{school_code}") }))

+ 0 - 55
TEAMModelOS/Controllers/IoT/IoTController.cs

@@ -1,55 +0,0 @@
-using System;
-using System.Net.Http;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
-using Newtonsoft.Json;
-using TEAMModelOS.SDK;
-using Microsoft.Extensions.Configuration;
-using System.Text.Json;
-
-namespace TEAMModelOS.Controllers.IoT
-{
-    /// <summary>
-    /// 目前IoT儀表運營使用。
-    /// </summary>
-    [Route("api/[controller]")]
-    [ApiController]
-    public class IoTController : ControllerBase
-    {
-        private readonly IConfiguration _config;
-        private readonly IHttpClientFactory _httpClientFactory;
-
-        public IoTController(IConfiguration configuration, IHttpClientFactory httpClientFactory)
-        {
-            _config = configuration;
-            _httpClientFactory = httpClientFactory;
-        }
-
-        /// <summary>
-        /// 資料表Data
-        /// </summary>
-        /// <param name="schoolShortCode"></param>
-        /// <returns></returns>
-        [HttpGet("GetTestIoTData")]
-        public async Task<BaseResponse> GetTestIoTData(string schoolShortCode)
-        {
-            try
-            {
-                var httpClient = _httpClientFactory.CreateClient();
-                var url = _config.GetValue<string>("CoreAPIUrl");
-
-                var response = await httpClient.GetAsync($"https://{url}/values/schooldashboard/{schoolShortCode}");
-
-                response.EnsureSuccessStatusCode();
-                string content = await response.Content.ReadAsStringAsync();
-                ResponseBuilder builder = ResponseBuilder.custom();
-                return builder.Data(JsonDocument.Parse(content).RootElement).build();
-            }
-            catch(Exception ex)
-            {
-                Console.WriteLine(ex.Message);
-            }
-            return null;
-        }
-    }
-}

+ 2 - 2
TEAMModelOS/TEAMModelOS.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
@@ -7,7 +7,7 @@
     <PackageReference Include="Caching.CSRedis" Version="3.6.50" />
     <PackageReference Include="CSRedisCore" Version="3.6.5" />
     <PackageReference Include="DotNetZip" Version="1.15.0" />
-    <PackageReference Include="HTEXLib" Version="2.4.9" />
+    <PackageReference Include="HTEXLib" Version="2.5.2" />
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.6" />
     <PackageReference Include="VueCliMiddleware" Version="5.0.0" />
   </ItemGroup>