|
@@ -0,0 +1,797 @@
|
|
|
+<template>
|
|
|
+ <div class="body1" v-loading="isLoading">
|
|
|
+ <!-- 课程数据 -->
|
|
|
+ <div class="left">
|
|
|
+ <div class="top">
|
|
|
+ <div class="titleBox" style="justify-content: space-between">
|
|
|
+ <div class="title">基础概况</div>
|
|
|
+ </div>
|
|
|
+ <div class="dataBox">
|
|
|
+ <div class="info_box">
|
|
|
+ <div class="info blueBG">
|
|
|
+ <span>课程总数</span>
|
|
|
+ <span>{{ allCourse }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG">
|
|
|
+ <span>本月新增课程环比</span>
|
|
|
+ <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].course) >
|
|
|
+ 0 ? (((loginCountMonthArray[loginCountMonthArray.length - 1].course) / allCourse) * 100).toFixed(0) + '%'
|
|
|
+ : 0 }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG">
|
|
|
+ <span>模板课程总数</span>
|
|
|
+ <span>{{ 0 }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG">
|
|
|
+ <span>本月新增课程总数</span>
|
|
|
+ <span v-if="loginCountMonthArray.length">{{
|
|
|
+ loginCountMonthArray[loginCountMonthArray.length - 1].course
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <TeaFre style="height: calc(100% - 140px)" :monthArray="loginCountMonthArray"></TeaFre>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <div class="titleBox">
|
|
|
+ <div class="title" :class="{ isClick: skType == 0 }" @click="skType = 0"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 授课时长
|
|
|
+ </div>
|
|
|
+ <div class="title" :class="{ isClick: skType == 1 }" @click="skType = 1"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 作业数量
|
|
|
+ </div>
|
|
|
+ <el-select v-if="skType == 0" v-model="lType" @change="typeChange1" class="selectBox" style="margin-left: auto">
|
|
|
+ <el-option label="年级" value="grade"></el-option>
|
|
|
+ <el-option label="主题" value="theme"></el-option>
|
|
|
+ <el-option label="学科" value="subject"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <el-select v-if="skType == 1" v-model="lType1" @change="typeChange2" class="selectBox"
|
|
|
+ style="margin-left: auto">
|
|
|
+ <el-option label="年级" value="grade"></el-option>
|
|
|
+ <el-option label="主题" value="theme"></el-option>
|
|
|
+ <el-option label="学科" value="subject"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="dataBox">
|
|
|
+ <div class="info_box" style="width: 96%" v-if="skType == 0">
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>累计时长</span>
|
|
|
+ <span>{{ allTime }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>课程实施总数</span>
|
|
|
+ <span>{{ courseLength }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>课均时长</span>
|
|
|
+ <span>{{
|
|
|
+ allTime == 0 ? 0 : (allTime / courseLength).toFixed(0)
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="info_box" style="width: 96%" v-if="skType == 1">
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>作业数量</span>
|
|
|
+ <span>{{ worksCount }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>课程开展总数</span>
|
|
|
+ <span>{{ haveWorksCourse }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 3 - 10px)">
|
|
|
+ <span>课程平均作业数量</span>
|
|
|
+ <span>{{
|
|
|
+ worksCount == 0 ? 0 : (worksCount / haveWorksCourse).toFixed(0)
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <Bar style="height: calc(100% - 100px)" v-if="skType == 0 && !oType" :workList="tedurArray"></Bar>
|
|
|
+ <ToolUse2 style="height: calc(100% - 100px)" v-if="skType == 0 && oType" :yearArray="courseWorksCountYearArray2"></ToolUse2>
|
|
|
+
|
|
|
+ <ToolUse style="height: calc(100% - 100px)" v-if="skType == 1 && !oType2"
|
|
|
+ :yearArray="courseWorksCountYearArray"></ToolUse>
|
|
|
+ <Bar2 style="height: calc(100% - 100px)" v-if="skType == 1 && oType2" :workList="tedurArray2"></Bar2>
|
|
|
+ <div class="otherCss" v-if="skType == 0">
|
|
|
+ <div v-if="!oType">切换为热力图</div>
|
|
|
+ <div v-if="oType">切换为柱状图</div>
|
|
|
+ <div class="otherImg" @click="otherEchart">
|
|
|
+ <img src="../../../../assets/icon/other.png" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="otherCss" v-if="skType == 1">
|
|
|
+ <div v-if="!oType2">切换为柱状图</div>
|
|
|
+ <div v-if="oType2">切换为热力图</div>
|
|
|
+ <div class="otherImg" @click="otherEchart2">
|
|
|
+ <img src="../../../../assets/icon/other.png" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="center">
|
|
|
+ <div class="top">
|
|
|
+ <div class="titleBox">
|
|
|
+ <div class="title" :class="{ isClick: courseType == 0 }" @click="courseType = 0"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 课程分布
|
|
|
+ </div>
|
|
|
+ <div class="title" :class="{ isClick: courseType == 1 }" @click="courseType = 1"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 课程总数变化
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="dataBox">
|
|
|
+ <CateRank v-if="courseType == 0" style="height: calc(100%)" :courseArray="courseArray"></CateRank>
|
|
|
+ <CourseNum v-if="courseType == 1" style="height: calc(100%)" :weekCourse2="weekCourse2"></CourseNum>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <div class="titleBox" style="justify-content: space-between">
|
|
|
+ <div class="title">课程实施程度</div>
|
|
|
+ </div>
|
|
|
+ <div class="dataBox">
|
|
|
+ <div class="allBox" v-if="!shType" style="height: calc(100% - 30px)">
|
|
|
+ <div class="allBox_left">
|
|
|
+ <CourseTime v-if="!shType" :pusaDep="pusaDep"></CourseTime>
|
|
|
+ </div>
|
|
|
+ <div class="allBox_right">
|
|
|
+ <div class="depth">
|
|
|
+ <span>已提交作业</span>
|
|
|
+ <div>
|
|
|
+ <el-progress :width="80" type="circle" :percentage="allCourse
|
|
|
+ ? parseInt(
|
|
|
+ ((haveWorksCourse / allCourse) * 100).toFixed(0)
|
|
|
+ )
|
|
|
+ : 0
|
|
|
+ " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="depth">
|
|
|
+ <span>设置评价</span>
|
|
|
+ <div>
|
|
|
+ <el-progress :width="80" type="circle" :percentage="allCourse
|
|
|
+ ? parseInt(((evaCount / allCourse) * 100).toFixed(0))
|
|
|
+ : 0
|
|
|
+ " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="depth">
|
|
|
+ <span>已评价课程</span>
|
|
|
+ <div>
|
|
|
+ <el-progress :width="80" type="circle" :percentage="allCourse
|
|
|
+ ? parseInt(
|
|
|
+ ((evaWorksCount / allCourse) * 100).toFixed(0)
|
|
|
+ )
|
|
|
+ : 0
|
|
|
+ " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="depth">
|
|
|
+ <span>教学评一体化</span>
|
|
|
+ <div>
|
|
|
+ <el-progress :width="80" type="circle" :percentage="allCourse
|
|
|
+ ? parseInt(
|
|
|
+ ((evaWorksCount / allCourse) * 100).toFixed(0)
|
|
|
+ )
|
|
|
+ : 0
|
|
|
+ " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="info_box" v-if="shType">
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 4 - 10px)">
|
|
|
+ <span>平台实施课程总数</span>
|
|
|
+ <!-- <span>{{ count }}</span> -->
|
|
|
+ <span>{{ isCourseCount }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 4 - 10px)">
|
|
|
+ <span>平台实施课程占比</span>
|
|
|
+ <!-- <span>{{ weekCount }}</span> -->
|
|
|
+ <span>{{
|
|
|
+ isCourseCount
|
|
|
+ ? ((isCourseCount / allCourseCount) * 100).toFixed(0) + "%"
|
|
|
+ : "0%"
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 4 - 10px)">
|
|
|
+ <span>课程平均任务数量</span>
|
|
|
+ <!-- <span>{{ weekCount }}</span> -->
|
|
|
+ <span>{{
|
|
|
+ isCourseCount ? (taskCount / isCourseCount).toFixed(0) : 0
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info blueBG" style="width: calc(100% / 4 - 10px)">
|
|
|
+ <span>课程平均作业数量</span>
|
|
|
+ <!-- <span>{{ weekCount }}</span> -->
|
|
|
+ <span>{{
|
|
|
+ isCourseCount ? (workCount / isCourseCount).toFixed(0) : 0
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <WorkNum style="height: calc(100% - 95px)" :workNumList="workNumList" @openCourse="openCourse" v-if="shType">
|
|
|
+ </WorkNum>
|
|
|
+ <div class="otherCss">
|
|
|
+ <div v-if="!shType">转换为散点图</div>
|
|
|
+ <div v-if="shType">转换为漏斗图</div>
|
|
|
+ <div class="otherImg" @click="shEchart">
|
|
|
+ <img src="../../../../assets/icon/other.png" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right">
|
|
|
+ <div class="top" style="border-radius: 5px">
|
|
|
+ <div class="titleBox" style="justify-content: space-between">
|
|
|
+ <div style="
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+ ">
|
|
|
+ <div class="title" :class="{ isClick: toolType == 0 }" @click="toolType = 0"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 课程占比
|
|
|
+ </div>
|
|
|
+ <div class="title" :class="{ isClick: toolType == 1 }" @click="toolType = 1"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0">
|
|
|
+ 工具使用
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-select v-model="cType4" @change="typeChange" class="selectBox" v-if="toolType == 0">
|
|
|
+ <!-- <el-option label="全部" value=""></el-option> -->
|
|
|
+ <el-option label="年级" value="grade"></el-option>
|
|
|
+ <el-option label="主题" value="theme"></el-option>
|
|
|
+ <el-option label="学科" value="subject"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="dataBox">
|
|
|
+ <CourseAna style="height: calc(100%)" :courseNumberArray="courseNumberArray" v-if="toolType == 0"></CourseAna>
|
|
|
+ <ToolChart style="height: calc(100%)" :toolArray="toolList" v-if="toolType == 1"></ToolChart>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <div class="titleBox">
|
|
|
+ <div class="title">课程协同情况</div>
|
|
|
+ </div>
|
|
|
+ <div class="dataBox">
|
|
|
+ <WorkTime style="height: calc(100% - 25px)" :personArray="personList" v-if="xtType"></WorkTime>
|
|
|
+ <Subjuect style="height: calc(100% - 25px)" v-if="!xtType" :resultSubject="resultSubject"></Subjuect>
|
|
|
+ <div class="otherCss">
|
|
|
+ <div v-if="!xtType">转换为人员协同</div>
|
|
|
+ <div v-if="xtType">转换为学科协同</div>
|
|
|
+ <div class="otherImg" @click="xtEchart">
|
|
|
+ <img src="../../../../assets/icon/other.png" alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import TeaFre from "./chartList/teaFre.vue";
|
|
|
+import ToolUse from "./chartList/toolUse.vue";
|
|
|
+import ToolUse2 from "./chartList/toolUse2.vue";
|
|
|
+import CateRank from "./chartList/cateRank.vue";
|
|
|
+import WorkNum from "./chartList/workNum.vue";
|
|
|
+import CourseTime from "./chartList/courseTime.vue";
|
|
|
+import CourseAna from "./chartList/courseAna.vue";
|
|
|
+import WorkTime from "./chartList/workTime.vue";
|
|
|
+import Bar from "./chartList/bar.vue";
|
|
|
+import Bar2 from "./chartList/bar2.vue";
|
|
|
+import CourseNum from "./chartList/courseNum.vue";
|
|
|
+import ToolChart from "./chartList/toolChart.vue";
|
|
|
+import Subjuect from "./chartList/subjuect.vue";
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ TeaFre,
|
|
|
+ ToolUse,
|
|
|
+ ToolUse2,
|
|
|
+ CateRank,
|
|
|
+ WorkNum,
|
|
|
+ CourseTime,
|
|
|
+ CourseAna,
|
|
|
+ WorkTime,
|
|
|
+ Bar,
|
|
|
+ Bar2,
|
|
|
+ CourseNum,
|
|
|
+ ToolChart,
|
|
|
+ Subjuect,
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ oid: {
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ org: {
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ isLoading: false,
|
|
|
+ cType: "全部年级",
|
|
|
+ cType4: "grade",
|
|
|
+ cType7: "全部课程",
|
|
|
+ toolType: 0,
|
|
|
+ tType: 0,
|
|
|
+ skType: 0,
|
|
|
+ courseType: 0,
|
|
|
+ sType: 0,
|
|
|
+ oType: false,
|
|
|
+ oType2: false,
|
|
|
+ shType: true,
|
|
|
+ xtType: false,
|
|
|
+ allCourse: 0,
|
|
|
+ courseTemplate: 0,
|
|
|
+ loginCountMonthArray: [],
|
|
|
+ lType: "grade",
|
|
|
+ lType1: "grade",
|
|
|
+ allTimeList: [],
|
|
|
+ tedurArray: [],
|
|
|
+ tedurArray2: [],
|
|
|
+ classList: [],
|
|
|
+ subjectList: [],
|
|
|
+ themeList: [],
|
|
|
+ allTime: 0,
|
|
|
+ allTimeLength: 0,
|
|
|
+ gradeLength: 0,
|
|
|
+ subjectLength: 0,
|
|
|
+ themeLength: 0,
|
|
|
+ courseTList: [],
|
|
|
+ courseLength: 0,
|
|
|
+ courseWorksCountYearArray: [],
|
|
|
+ courseWorksCountYearArray2: [],
|
|
|
+ allCourseWorks: [],
|
|
|
+ gradeList: [],
|
|
|
+ subjectList2: [],
|
|
|
+ thList: [],
|
|
|
+ worksCount: 0,
|
|
|
+ haveWorksCourse: 0,
|
|
|
+ courseNumberArray: [],
|
|
|
+ gradeArray: [],
|
|
|
+ subjectArray: [],
|
|
|
+ themeArray: [],
|
|
|
+ allArray: [],
|
|
|
+ toolList: [],
|
|
|
+ personList: [],
|
|
|
+ workNumList: [],
|
|
|
+ taskCount: 0,
|
|
|
+ workCount: 0,
|
|
|
+ isCourseCount: 0,
|
|
|
+ allCourseCount: 0,
|
|
|
+ courseArray: [],
|
|
|
+ evaCount: 0,
|
|
|
+ evaWorksCount: 0,
|
|
|
+ pusaDep: [
|
|
|
+ { value: 0, name: "课程总数" },
|
|
|
+ { value: 0, name: "设置评价课程" },
|
|
|
+ { value: 0, name: "已提交作业课程" },
|
|
|
+ { value: 0, name: "已评价课程" },
|
|
|
+ { value: 0, name: "教学评一体化课程" },
|
|
|
+ ],
|
|
|
+ weekCourse2: [],
|
|
|
+ resultSubject: []
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getData();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ openCourse(cid) {
|
|
|
+ window.parent.postMessage({ cid: cid, screenType: "3" }, "*");
|
|
|
+ },
|
|
|
+ otherEchart() {
|
|
|
+ this.oType = !this.oType;
|
|
|
+ },
|
|
|
+ otherEchart2() {
|
|
|
+ this.oType2 = !this.oType2;
|
|
|
+ },
|
|
|
+ shEchart() {
|
|
|
+ this.shType = !this.shType;
|
|
|
+ },
|
|
|
+ xtEchart() {
|
|
|
+ this.xtType = !this.xtType;
|
|
|
+ },
|
|
|
+ format(percentage) {
|
|
|
+ return percentage + "%";
|
|
|
+ },
|
|
|
+ getMonth() {
|
|
|
+ // 获取当前时间
|
|
|
+ var currentDate = new Date();
|
|
|
+
|
|
|
+ // 获取本月的年份和月份
|
|
|
+ var currentYear = currentDate.getFullYear();
|
|
|
+ var currentMonth = currentDate.getMonth() + 1; // 月份从0开始,需要加1
|
|
|
+
|
|
|
+ // 获取上个月的年份和月份
|
|
|
+ var lastMonthYear, lastMonth;
|
|
|
+ if (currentMonth === 1) {
|
|
|
+ lastMonthYear = currentYear - 1;
|
|
|
+ lastMonth = 12;
|
|
|
+ } else {
|
|
|
+ lastMonthYear = currentYear;
|
|
|
+ lastMonth = currentMonth - 1;
|
|
|
+ }
|
|
|
+ // 获取本月的第一天和最后一天的日期
|
|
|
+ var firstDayOfMonth = new Date(currentYear, currentMonth - 1, 1);
|
|
|
+ var lastDayOfMonth = new Date(currentYear, currentMonth, 0);
|
|
|
+
|
|
|
+ // 获取上个月的第一天和最后一天的日期
|
|
|
+ var firstDayOfLastMonth = new Date(lastMonthYear, lastMonth - 1, 1);
|
|
|
+ var lastDayOfLastMonth = new Date(lastMonthYear, lastMonth, 0);
|
|
|
+
|
|
|
+ // 构建本月日期的数组
|
|
|
+ var currentMonthDates = [];
|
|
|
+ for (var i = 1; i <= lastDayOfMonth.getDate(); i++) {
|
|
|
+ let a = new Date(currentYear, currentMonth - 1, i)
|
|
|
+ currentMonthDates.push(a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建上个月日期的数组
|
|
|
+ var lastMonthDates = [];
|
|
|
+ for (var j = firstDayOfLastMonth.getDate(); j <= lastDayOfLastMonth.getDate(); j++) {
|
|
|
+ let a = new Date(lastMonthYear, lastMonth - 1, j)
|
|
|
+ lastMonthDates.push(a.getFullYear() + '-' + (a.getMonth() + 1) + '-' + a.getDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ lastWeek: lastMonthDates,//上月
|
|
|
+ toWeek: currentMonthDates //本月
|
|
|
+ }
|
|
|
+ },
|
|
|
+ typeChange1() {
|
|
|
+ var a = [];
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+ typeChange2() {
|
|
|
+ const date = new Date()
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+ typeChange() {
|
|
|
+
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+ getData() {
|
|
|
+ this.isLoading = true;
|
|
|
+ let params = [
|
|
|
+ {
|
|
|
+ oid: this.oid,
|
|
|
+ org: this.org,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ this.ajax
|
|
|
+ .post(this.$store.state.api + "selectDataBoardCourseNew", params)
|
|
|
+ .then((res) => {
|
|
|
+ this.isLoading = false;
|
|
|
+
|
|
|
+ this.$forceUpdate();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.isLoading = false;
|
|
|
+ this.$message.error('因加载数据量过大,服务器统计异常,请联系管理员。');
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ checkArrayInclusion(arr1, arr2) {
|
|
|
+ return arr1.every(item => arr2.includes(item));
|
|
|
+ },
|
|
|
+ hasCommonValue(arr1, arr2) {
|
|
|
+ const set1 = new Set(arr1);
|
|
|
+ for (const val of arr2) {
|
|
|
+ if (set1.has(val)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.body1 {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ padding: 20px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.left {
|
|
|
+ width: calc(100% / 4 * 1);
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.left>.top {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 2 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin: 0 0 20px 0;
|
|
|
+}
|
|
|
+
|
|
|
+.left>.bottom {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 2 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.center {
|
|
|
+ width: calc(100% / 4 * 2 - 40px);
|
|
|
+ height: 100%;
|
|
|
+ margin: 0 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.center>.top {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 5 * 3 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin: 0 0 20px 0;
|
|
|
+}
|
|
|
+
|
|
|
+.center>.bottom {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 5 * 2 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.right {
|
|
|
+ width: calc(100% / 4 * 1);
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.right>.top {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 2 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 16px;
|
|
|
+ margin: 0 0 20px 0;
|
|
|
+}
|
|
|
+
|
|
|
+.right>.bottom {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% / 2 - 10px);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.titleBox {
|
|
|
+ height: 40px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 15px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.dataBox {
|
|
|
+ height: calc(100% - 40px);
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.middleBox {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: flex-start;
|
|
|
+}
|
|
|
+
|
|
|
+.title {
|
|
|
+ color: #060e17;
|
|
|
+ margin-right: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.teaMiddle {
|
|
|
+ width: calc(100% / 2 - 10px);
|
|
|
+ height: 60px;
|
|
|
+ border-radius: 8px;
|
|
|
+ /* border: 1px solid #e0eafb; */
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: flex-start;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 0 10px;
|
|
|
+ margin: 0 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.teaMiddle {
|
|
|
+ width: calc(100% / 3 - 10px);
|
|
|
+}
|
|
|
+
|
|
|
+.cNum {
|
|
|
+ background: linear-gradient(180deg,
|
|
|
+ rgb(125, 227, 174, 0.2) 0%,
|
|
|
+ rgb(23, 196, 105, 0.3) 100%) !important;
|
|
|
+}
|
|
|
+
|
|
|
+.tNum {
|
|
|
+ background: linear-gradient(180deg,
|
|
|
+ rgb(174, 204, 254, 0.2) 0%,
|
|
|
+ rgb(54, 129, 252, 0.3) 100%) !important;
|
|
|
+}
|
|
|
+
|
|
|
+.tSum {
|
|
|
+ background: linear-gradient(180deg,
|
|
|
+ rgb(125, 227, 174, 0.2) 0%,
|
|
|
+ rgb(23, 196, 105, 0.3) 100%) !important;
|
|
|
+}
|
|
|
+
|
|
|
+.teaLeft>div:first-child,
|
|
|
+.teaMiddle>div:first-child {
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #565e6a;
|
|
|
+}
|
|
|
+
|
|
|
+.teaLeft>div:last-child,
|
|
|
+.teaMiddle>div:last-child {
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #060e17;
|
|
|
+}
|
|
|
+
|
|
|
+.halfBox {
|
|
|
+ width: 50%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.selectBox {
|
|
|
+ width: 80px;
|
|
|
+ margin-left: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.selectBox>>>.el-input__inner {
|
|
|
+ height: 30px;
|
|
|
+ line-height: 30px;
|
|
|
+}
|
|
|
+
|
|
|
+.selectBox>>>.el-input__icon {
|
|
|
+ line-height: 30px;
|
|
|
+}
|
|
|
+
|
|
|
+.timeDiv {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+ margin: 0 0 0 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.timeDiv>div {
|
|
|
+ margin-right: 10px;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+.isClick {
|
|
|
+ color: #1684fc;
|
|
|
+ border-bottom: 2px solid #1684fc;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.otherCss {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-end;
|
|
|
+}
|
|
|
+
|
|
|
+.otherImg {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ margin: 0 10px;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+.otherImg>img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.allBox {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.allBox_left {
|
|
|
+ width: 30%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.allBox_right {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ height: 100%;
|
|
|
+ width: 70%;
|
|
|
+ margin: 0 auto;
|
|
|
+ overflow: hidden;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+
|
|
|
+.depth {
|
|
|
+ width: calc(100% / 4 - 10px);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+.depth>span:nth-child(1) {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 700;
|
|
|
+ margin: 0 0 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.depth>div:nth-child(1) {}
|
|
|
+
|
|
|
+.info_box {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 90%;
|
|
|
+ margin: 0 auto;
|
|
|
+}
|
|
|
+
|
|
|
+.info_box>.info2,
|
|
|
+.info_box>.info3,
|
|
|
+.info_box>.info {
|
|
|
+ width: calc(50% - 10px);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ height: 60px;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 10px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.info_box>.info2 {
|
|
|
+ width: calc(100% / 4 - 10px);
|
|
|
+ /* align-items: flex-end; */
|
|
|
+}
|
|
|
+
|
|
|
+.info_box>.info3 {
|
|
|
+ width: 100%;
|
|
|
+ margin-bottom: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.info_box>.info2>span:nth-child(1),
|
|
|
+.info_box>.info3>span:nth-child(1),
|
|
|
+.info_box>.info>span:nth-child(1) {
|
|
|
+ font-size: 12px;
|
|
|
+ /* margin: 0 0 0 20px; */
|
|
|
+ color: #565e6a;
|
|
|
+ width: 60px;
|
|
|
+ white-space: pre-wrap;
|
|
|
+ word-break: break-all;
|
|
|
+}
|
|
|
+
|
|
|
+.info_box>.info2>span:nth-child(2),
|
|
|
+.info_box>.info3>span:nth-child(2),
|
|
|
+.info_box>.info>span:nth-child(2) {
|
|
|
+ font-size: 24px;
|
|
|
+ /* font-weight: 700; */
|
|
|
+}
|
|
|
+
|
|
|
+.blueBG {
|
|
|
+ background: rgb(243, 248, 253);
|
|
|
+ border: 2px solid rgb(234, 246, 255);
|
|
|
+}</style>
|