123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599 |
- <template>
- <div class="exam-invigilation">
- <div class="invigilation-analysis">
- <div class="part-box-head">
- <div class="part-box-head-left"><h1>考情监控</h1></div>
- <div class="part-box-head-right" @click="exitFullscreen">
- <i class="icon icon-full-screen"></i>退出全屏
- </div>
- </div>
- <div class="invigilation-summary">
- <div class="invigilation-summary-item">
- <div class="part-box">
- <h5>
- <span>在线(人)</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h5>
- <p>26000</p>
- </div>
- </div>
- <div class="invigilation-summary-item">
- <div class="part-box">
- <h5>
- <span>待考(人)</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h5>
- <p>170</p>
- </div>
- </div>
- <div class="invigilation-summary-item">
- <div class="part-box">
- <h5>
- <span>考试中(人)</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h5>
- <p>2560</p>
- </div>
- </div>
- <div class="invigilation-summary-item">
- <div class="part-box">
- <h5>
- <span>通讯故障(人)</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h5>
- <p>26000</p>
- </div>
- </div>
- <div class="invigilation-summary-item">
- <div class="part-box">
- <h5>
- <span>预警(人)</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h5>
- <p>15</p>
- </div>
- </div>
- </div>
- <div class="invigilation-online part-box">
- <h3 class="invigilation-part-title">
- <span>各机构在线考试人数分布</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h3>
- <echart-render
- :chart-data="onlineData"
- chart-type="bar"
- v-if="chartDataReady"
- ></echart-render>
- </div>
- <div class="invigilation-warning">
- <el-row :gutter="20">
- <el-col :span="12">
- <div class="part-box">
- <h3 class="invigilation-part-title">
- <span>机构预警分布</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h3>
- <echart-render
- :chart-data="orgWarningData"
- chart-type="pie"
- v-if="chartDataReady"
- ></echart-render>
- </div>
- </el-col>
- <el-col :span="12">
- <div class="part-box">
- <h3 class="invigilation-part-title">
- <span>预警类型分布</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h3>
- <echart-render
- :chart-data="typeWarningData"
- chart-type="pie"
- v-if="chartDataReady"
- ></echart-render>
- </div>
- </el-col>
- </el-row>
- </div>
- <div class="invigilation-trend part-box">
- <h3 class="invigilation-part-title">
- <span>预警时间趋势</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h3>
- <echart-render
- :chart-data="warningTrendData"
- chart-type="line"
- v-if="chartDataReady"
- ></echart-render>
- </div>
- <div class="invigilation-message part-box">
- <h3 class="invigilation-part-title">
- <span>预警消息</span>
- <el-popover
- placement="top-start"
- width="200"
- trigger="hover"
- content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
- >
- <i class="el-icon-question" slot="reference"></i>
- </el-popover>
- </h3>
- <div class="message-list">
- <div class="message-item">
- <span><i class="el-icon-warning"></i></span>
- <span>2020-7-1 08:23</span>
- <span
- >张三(证件号:1001001)陌生人入境,系统已提示李四(账号:lisi)进行人工干预</span
- >
- </div>
- <div class="message-item">
- <span><i class="el-icon-warning"></i></span>
- <span>2020-7-1 08:23</span>
- <span
- >张三(证件号:1001001)陌生人入境,系统已提示李四(账号:lisi)进行人工干预</span
- >
- </div>
- </div>
- </div>
- </div>
- <div class="invigilation-list">
- <h3>实时监控台</h3>
- <invigilation-student
- v-for="item in students"
- :key="item.examStudentId"
- :data="item"
- ></invigilation-student>
- <div class="invigilation-student invigilation-student-warning">
- <div class="student-video"></div>
- <div class="student-info">
- <h6><span>刘西西</span><i class="icon icon-net-break"></i></h6>
- <p><span>证件号:</span><span>000000000000000008</span></p>
- <p><span>答题进度:</span><span>20%</span></p>
- <div class="student-time">
- <i class="el-icon-alarm-clock"></i>
- <span>50:32:15</span>
- </div>
- </div>
- </div>
- <div class="invigilation-student invigilation-student-netbreak">
- <div class="student-video"></div>
- <div class="student-info">
- <h6><span>刘西西</span><i class="icon icon-net-break"></i></h6>
- <p><span>证件号:</span><span>000000000000000008</span></p>
- <p><span>答题进度:</span><span>20%</span></p>
- <div class="student-time">
- <i class="el-icon-alarm-clock"></i>
- <span>50:32:15</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import EchartRender from "../common/EchartRender";
- import InvigilationStudent from "../common/InvigilationStudent";
- export default {
- name: "exam-invigilation",
- components: { EchartRender, InvigilationStudent },
- data() {
- return {
- onlineData: {
- dataList: [
- {
- name: "数学学院",
- count: 500,
- },
- {
- name: "物理学院",
- count: 700,
- },
- {
- name: "计算机学院",
- count: 300,
- },
- {
- name: "外语学院",
- count: 400,
- },
- ],
- type: "light", // light or dark
- },
- orgWarningData: {
- dataList: [
- {
- name: "数学学院",
- count: 50,
- },
- {
- name: "物理学院",
- count: 5,
- },
- {
- name: "计算机学院",
- count: 20,
- },
- {
- name: "外语学院",
- count: 25,
- },
- ],
- type: "light",
- },
- typeWarningData: {
- dataList: [
- {
- name: "频繁离开座位",
- count: 50,
- },
- {
- name: "身份验证不通过",
- count: 5,
- },
- {
- name: "陌生人入境",
- count: 20,
- },
- {
- name: "疑似:开启虚拟摄像头",
- count: 25,
- },
- ],
- type: "light",
- },
- warningTrendData: {
- dataList: [
- {
- name: "8:00",
- count: 13,
- },
- {
- name: "9:00",
- count: 16,
- },
- {
- name: "10:00",
- count: 20,
- },
- {
- name: "11:00",
- count: 16,
- },
- {
- name: "12:00",
- count: 10,
- },
- {
- name: "13:00",
- count: 16,
- },
- {
- name: "14:00",
- count: 25,
- },
- {
- name: "15:00",
- count: 30,
- },
- {
- name: "16:00",
- count: 22,
- },
- {
- name: "17:00",
- count: 15,
- },
- {
- name: "18:00",
- count: 12,
- },
- {
- name: "19:00",
- count: 20,
- },
- ],
- type: "light",
- },
- chartDataReady: false,
- students: [],
- };
- },
- computed: {
- isFullScreen() {
- return this.$store.state.isFullScreen;
- },
- },
- watch: {
- isFullScreen(val) {
- this.fullScreenChange(val);
- },
- },
- mounted() {
- this.chartDataReady = true;
- },
- methods: {
- exitFullscreen() {
- const exitFullscreen =
- document.exitFullscreen ||
- document.mozCancelFullScreen ||
- document.webkitCancelFullScreen;
- exitFullscreen.call(document);
- },
- checkDocIsFullscreen() {
- return (
- document.fullscreenElement ||
- document.msFullscreenElement ||
- document.mozFullscreenElement ||
- document.webkitFullscreenElement
- );
- },
- fullScreenChange(isFullScreen) {
- this.chartDataReady = false;
- this.$nextTick(() => {
- const colorType = isFullScreen ? "dark" : "light";
- this.onlineData.type = colorType;
- this.orgWarningData.type = colorType;
- this.typeWarningData.type = colorType;
- this.warningTrendData.type = colorType;
- this.chartDataReady = true;
- });
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .exam-invigilation {
- position: relative;
- padding-right: 310px;
- .part-box-head-right {
- display: none;
- }
- .part-box {
- position: relative;
- }
- .invigilation-part-title {
- position: absolute;
- top: 20px;
- left: 20px;
- font-size: 16px;
- font-weight: 500;
- z-index: 9;
- }
- .el-icon-question {
- margin-left: 5px;
- color: #bdc8da;
- }
- }
- .invigilation-list {
- position: absolute;
- top: 0;
- right: 0;
- width: 280px;
- height: 100%;
- background: #fff;
- border-radius: 6px;
- padding: 20px;
- z-index: 9;
- overflow-y: auto;
- overflow-x: hidden;
- > h3 {
- font-size: 18px;
- font-weight: 600;
- line-height: 25px;
- margin-bottom: 20px;
- }
- }
- .invigilation-analysis {
- .part-box-head-left h1 {
- line-height: 25px;
- }
- }
- .invigilation-summary {
- margin: 0 -10px;
- font-size: 0;
- &-item {
- display: inline-block;
- vertical-align: top;
- width: 20%;
- padding: 0 10px;
- font-size: 14px;
- h5 {
- font-size: 14px;
- height: 20px;
- color: #626a82;
- margin: 0;
- }
- p {
- font-size: 32px;
- line-height: 51px;
- font-weight: 600;
- color: #202b4b;
- margin: 0;
- }
- &:first-child {
- .part-box {
- background-color: #3a93fb;
- }
- h5 {
- color: #fff;
- }
- p {
- color: #fff;
- font-weight: 900;
- font-size: 36px;
- }
- }
- }
- }
- .invigilation-online {
- height: 360px;
- }
- .invigilation-warning {
- .part-box {
- height: 282px;
- padding-top: 50px;
- padding-bottom: 10px;
- }
- }
- .invigilation-trend {
- height: 327px;
- }
- .invigilation-message {
- min-height: 160px;
- padding-top: 70px;
- .message-item {
- margin-bottom: 15px;
- span {
- display: inline-block;
- vertical-align: middle;
- line-height: 20px;
- &:first-child {
- color: #fe5863;
- }
- &:nth-of-type(2) {
- margin: 0 20px 0 12px;
- color: #8c94ac;
- }
- }
- }
- }
- </style>
- <style lang="scss">
- // fullscreen style
- .app-fullscreen {
- .part-box {
- background: #2d325a;
- }
- .exam-invigilation {
- margin: -30px;
- padding-right: 280px;
- color: #fff;
- .part-box-head-right {
- display: block;
- cursor: pointer;
- color: #737aae;
- > i {
- margin-right: 8px;
- margin-top: -2px;
- }
- }
- .part-box-head-left > h1 {
- color: #fff;
- }
- .el-icon-question {
- color: #737aae;
- }
- }
- .invigilation-analysis {
- padding: 30px;
- background: #25294a;
- }
- .invigilation-list {
- background: #202442;
- border-radius: 0;
- .invigilation-student {
- background: #2d325a;
- border-radius: 10px;
- }
- .student-info {
- .student-time {
- background: #353c70;
- }
- > p {
- color: #737aae;
- }
- }
- }
- .invigilation-summary {
- &-item {
- h5 {
- color: #737aae;
- }
- p {
- color: #fff;
- }
- &:first-child {
- .el-icon-question {
- color: #fff;
- }
- }
- }
- }
- }
- </style>
|