|  | @@ -1,306 +1,309 @@
 | 
	
		
			
				|  |  | -<template>
 | 
	
		
			
				|  |  | -  <div class="container main">
 | 
	
		
			
				|  |  | -    <save-form
 | 
	
		
			
				|  |  | -      inline
 | 
	
		
			
				|  |  | -      :model="search"
 | 
	
		
			
				|  |  | -      @submit="FetchDetail"
 | 
	
		
			
				|  |  | -      @reset="reset"
 | 
	
		
			
				|  |  | -      saveKey="/main/main/baseInfo"
 | 
	
		
			
				|  |  | -    >
 | 
	
		
			
				|  |  | -      <!-- <el-form-item prop="year">
 | 
	
		
			
				|  |  | -        <el-date-picker
 | 
	
		
			
				|  |  | -          v-model="search.dates"
 | 
	
		
			
				|  |  | -          type="daterange"
 | 
	
		
			
				|  |  | -          align="right"
 | 
	
		
			
				|  |  | -          unlink-panels
 | 
	
		
			
				|  |  | -          range-separator="至"
 | 
	
		
			
				|  |  | -          start-placeholder="开始日期"
 | 
	
		
			
				|  |  | -          end-placeholder="结束日期"
 | 
	
		
			
				|  |  | -          :picker-options="pickerOptions">
 | 
	
		
			
				|  |  | -        </el-date-picker>
 | 
	
		
			
				|  |  | -      </el-form-item> -->
 | 
	
		
			
				|  |  | -      <el-form-item prop="organId">
 | 
	
		
			
				|  |  | -        <el-select
 | 
	
		
			
				|  |  | -          clearable
 | 
	
		
			
				|  |  | -          filterable
 | 
	
		
			
				|  |  | -          placeholder="请选择分部"
 | 
	
		
			
				|  |  | -          v-model="search.organId"
 | 
	
		
			
				|  |  | -        >
 | 
	
		
			
				|  |  | -          <el-option
 | 
	
		
			
				|  |  | -            v-for="(item, index) in selects.branchs"
 | 
	
		
			
				|  |  | -            :key="index"
 | 
	
		
			
				|  |  | -            :label="item.name"
 | 
	
		
			
				|  |  | -            :value="item.id"
 | 
	
		
			
				|  |  | -          ></el-option>
 | 
	
		
			
				|  |  | -        </el-select>
 | 
	
		
			
				|  |  | -      </el-form-item>
 | 
	
		
			
				|  |  | -      <el-button native-type="submit" type="primary">搜索</el-button>
 | 
	
		
			
				|  |  | -      <el-button native-type="reset" type="danger">重置</el-button>
 | 
	
		
			
				|  |  | -    </save-form>
 | 
	
		
			
				|  |  | -    <!-- <el-alert type="info" :closable="false" style="margin-bottom: 20px;">
 | 
	
		
			
				|  |  | -      每日0点更新前一日数据
 | 
	
		
			
				|  |  | -    </el-alert> -->
 | 
	
		
			
				|  |  | -    <!-- 这里显示选项卡 -->
 | 
	
		
			
				|  |  | -    <empty desc="暂无统计数据" v-if="isEmpty" />
 | 
	
		
			
				|  |  | -    <el-row v-else class="rows" :gutter="20">
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
 | 
	
		
			
				|  |  | -        <studentbaseinfo :data="dataInfo" />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
 | 
	
		
			
				|  |  | -        <operate :data="dataInfo" />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="8">
 | 
	
		
			
				|  |  | -        <hrdata :data="dataInfo" />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <!-- <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 | 
	
		
			
				|  |  | -        <surplusCourse :data="dataInfo" />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 | 
	
		
			
				|  |  | -        <useCourse :data="dataInfo" />
 | 
	
		
			
				|  |  | -      </el-col> -->
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | -        <management
 | 
	
		
			
				|  |  | -          ref="management"
 | 
	
		
			
				|  |  | -          :data="dataInfo"
 | 
	
		
			
				|  |  | -          :search="search"
 | 
	
		
			
				|  |  | -          @resetDate="resetDate"
 | 
	
		
			
				|  |  | -        />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col
 | 
	
		
			
				|  |  | -        :xs="24"
 | 
	
		
			
				|  |  | -        :sm="24"
 | 
	
		
			
				|  |  | -        :md="24"
 | 
	
		
			
				|  |  | -        :lg="24"
 | 
	
		
			
				|  |  | -        :xl="24"
 | 
	
		
			
				|  |  | -        v-if="$helpers.tenantId == 1"
 | 
	
		
			
				|  |  | -      >
 | 
	
		
			
				|  |  | -        <business
 | 
	
		
			
				|  |  | -          ref="business"
 | 
	
		
			
				|  |  | -          :data="dataInfo"
 | 
	
		
			
				|  |  | -          :search="search"
 | 
	
		
			
				|  |  | -          @resetDate="resetDate"
 | 
	
		
			
				|  |  | -        />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | -        <curriculum
 | 
	
		
			
				|  |  | -          :data="dataInfo"
 | 
	
		
			
				|  |  | -          ref="curriculum"
 | 
	
		
			
				|  |  | -          :search="search"
 | 
	
		
			
				|  |  | -          @resetDate="resetDate"
 | 
	
		
			
				|  |  | -        />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | -        <student
 | 
	
		
			
				|  |  | -          :data="dataInfo"
 | 
	
		
			
				|  |  | -          ref="student"
 | 
	
		
			
				|  |  | -          :search="search"
 | 
	
		
			
				|  |  | -          @resetDate="resetDate"
 | 
	
		
			
				|  |  | -        />
 | 
	
		
			
				|  |  | -      </el-col>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      <!-- <el-col :xs="24" :sm="24" :md="12">
 | 
	
		
			
				|  |  | -        <operate :data="dataInfo"/>
 | 
	
		
			
				|  |  | -      </el-col> -->
 | 
	
		
			
				|  |  | -      <!-- <el-col :xs="24" :sm="24" :md="12">
 | 
	
		
			
				|  |  | -        <hrdata :data="dataInfo"/>
 | 
	
		
			
				|  |  | -      </el-col> -->
 | 
	
		
			
				|  |  | -    </el-row>
 | 
	
		
			
				|  |  | -  </div>
 | 
	
		
			
				|  |  | -</template>
 | 
	
		
			
				|  |  | -<script>
 | 
	
		
			
				|  |  | -import { getIndex } from "../api";
 | 
	
		
			
				|  |  | -import operate from "./operate";
 | 
	
		
			
				|  |  | -import business from "./business";
 | 
	
		
			
				|  |  | -import management from "./management";
 | 
	
		
			
				|  |  | -import hrdata from "./hr";
 | 
	
		
			
				|  |  | -import student from "./student";
 | 
	
		
			
				|  |  | -import curriculum from "./curriculum";
 | 
	
		
			
				|  |  | -import studentbaseinfo from "./studentBaseinfo";
 | 
	
		
			
				|  |  | -import surplusCourse from "./surplusCourse";
 | 
	
		
			
				|  |  | -import useCourse from "./useCourse";
 | 
	
		
			
				|  |  | -import { getTimes } from "@/utils";
 | 
	
		
			
				|  |  | -import { descs } from "../constant";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default {
 | 
	
		
			
				|  |  | -  components: {
 | 
	
		
			
				|  |  | -    operate,
 | 
	
		
			
				|  |  | -    business,
 | 
	
		
			
				|  |  | -    management,
 | 
	
		
			
				|  |  | -    hrdata,
 | 
	
		
			
				|  |  | -    student,
 | 
	
		
			
				|  |  | -    curriculum,
 | 
	
		
			
				|  |  | -    studentbaseinfo,
 | 
	
		
			
				|  |  | -    surplusCourse,
 | 
	
		
			
				|  |  | -    useCourse,
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  data() {
 | 
	
		
			
				|  |  | -    return {
 | 
	
		
			
				|  |  | -      pickerOptions: {
 | 
	
		
			
				|  |  | -        firstDayOfWeek: 1,
 | 
	
		
			
				|  |  | -        disabledDate: (a) => {
 | 
	
		
			
				|  |  | -          const { dayjs } = this.$helpers;
 | 
	
		
			
				|  |  | -          return dayjs(a).isAfter(dayjs().subtract(1, "day"));
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        shortcuts: [
 | 
	
		
			
				|  |  | -          {
 | 
	
		
			
				|  |  | -            text: "最近一周",
 | 
	
		
			
				|  |  | -            onClick(picker) {
 | 
	
		
			
				|  |  | -              const end = new Date();
 | 
	
		
			
				|  |  | -              const start = new Date();
 | 
	
		
			
				|  |  | -              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | -              start.setTime(start.getTime() - 3600 * 1000 * 24 * 8);
 | 
	
		
			
				|  |  | -              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -          },
 | 
	
		
			
				|  |  | -          {
 | 
	
		
			
				|  |  | -            text: "最近一个月",
 | 
	
		
			
				|  |  | -            onClick(picker) {
 | 
	
		
			
				|  |  | -              const end = new Date();
 | 
	
		
			
				|  |  | -              const start = new Date();
 | 
	
		
			
				|  |  | -              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | -              start.setTime(start.getTime() - 3600 * 1000 * 24 * 31);
 | 
	
		
			
				|  |  | -              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -          },
 | 
	
		
			
				|  |  | -          {
 | 
	
		
			
				|  |  | -            text: "最近三个月",
 | 
	
		
			
				|  |  | -            onClick(picker) {
 | 
	
		
			
				|  |  | -              const end = new Date();
 | 
	
		
			
				|  |  | -              const start = new Date();
 | 
	
		
			
				|  |  | -              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | -              start.setTime(start.getTime() - 3600 * 1000 * 24 * 91);
 | 
	
		
			
				|  |  | -              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -          },
 | 
	
		
			
				|  |  | -        ],
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      search: {
 | 
	
		
			
				|  |  | -        dates: [],
 | 
	
		
			
				|  |  | -        organId: null,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      dataInfo: {},
 | 
	
		
			
				|  |  | -      business: {},
 | 
	
		
			
				|  |  | -      loading: false,
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  computed: {
 | 
	
		
			
				|  |  | -    isEmpty() {
 | 
	
		
			
				|  |  | -      return !Object.keys(this.dataInfo).length;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  created() {},
 | 
	
		
			
				|  |  | -  async mounted() {
 | 
	
		
			
				|  |  | -    this.$set(this.search, "dates", this.getInitDate());
 | 
	
		
			
				|  |  | -   await this.$store.dispatch("setBranchs");
 | 
	
		
			
				|  |  | -    this.FetchDetail();
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    getInitDate() {
 | 
	
		
			
				|  |  | -      const end = this.$helpers
 | 
	
		
			
				|  |  | -        .dayjs(new Date())
 | 
	
		
			
				|  |  | -        .subtract(1, "day")
 | 
	
		
			
				|  |  | -        .format("YYYY-MM-DD");
 | 
	
		
			
				|  |  | -      const start = this.$helpers
 | 
	
		
			
				|  |  | -        .dayjs(new Date())
 | 
	
		
			
				|  |  | -        .subtract(1, "day")
 | 
	
		
			
				|  |  | -        .set("date", 1)
 | 
	
		
			
				|  |  | -        .format("YYYY-MM-DD");
 | 
	
		
			
				|  |  | -      return [start, end];
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    reset() {
 | 
	
		
			
				|  |  | -      this.$set(this.search, "dates", this.getInitDate());
 | 
	
		
			
				|  |  | -      this.$set(this.search, "organId", null);
 | 
	
		
			
				|  |  | -      this.FetchDetail();
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    async FetchDetail() {
 | 
	
		
			
				|  |  | -      // 这里改变就通知子组件重置
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      const data = {};
 | 
	
		
			
				|  |  | -      try {
 | 
	
		
			
				|  |  | -        const { dates, ...rest } = this.search;
 | 
	
		
			
				|  |  | -        const res = await getIndex({
 | 
	
		
			
				|  |  | -          ...rest,
 | 
	
		
			
				|  |  | -          ...getTimes(dates, ["startDate", "endDate"]),
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | -        for (const item of res.data) {
 | 
	
		
			
				|  |  | -          data[item.dataType] = {
 | 
	
		
			
				|  |  | -            ...item,
 | 
	
		
			
				|  |  | -            desc: descs[item.dataType],
 | 
	
		
			
				|  |  | -          };
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      } catch (error) {
 | 
	
		
			
				|  |  | -        console.log(error);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.dataInfo = data;
 | 
	
		
			
				|  |  | -      if (this.$refs.business) {
 | 
	
		
			
				|  |  | -        this.$refs["business"].init();
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if (this.$refs.management) {
 | 
	
		
			
				|  |  | -        this.$refs["management"].init();
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    resetDate(data) {
 | 
	
		
			
				|  |  | -      let arr = null;
 | 
	
		
			
				|  |  | -      for (let item in data) {
 | 
	
		
			
				|  |  | -        // console.log(item)
 | 
	
		
			
				|  |  | -        if (item == "VIP_GROUP_COURSE") {
 | 
	
		
			
				|  |  | -          arr = data[item].indexMonthData;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        this.dataInfo[item] = data[item];
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.dataInfo = { ...this.dataInfo };
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -</script>
 | 
	
		
			
				|  |  | -<style lang="less" scoped>
 | 
	
		
			
				|  |  | -.container {
 | 
	
		
			
				|  |  | -  overflow: hidden;
 | 
	
		
			
				|  |  | -  .rows {
 | 
	
		
			
				|  |  | -    > div {
 | 
	
		
			
				|  |  | -      margin-bottom: 20px;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  /deep/ .el-card__body .statistic {
 | 
	
		
			
				|  |  | -    margin-bottom: 15px;
 | 
	
		
			
				|  |  | -    padding: 0;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -/deep/.el-card__header {
 | 
	
		
			
				|  |  | -  padding: 0 20px !important;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</style>
 | 
	
		
			
				|  |  | -<style lang="scss">
 | 
	
		
			
				|  |  | -.main {
 | 
	
		
			
				|  |  | -  .statistic {
 | 
	
		
			
				|  |  | -    .statistic-content > span {
 | 
	
		
			
				|  |  | -      font-size: 22px !important;
 | 
	
		
			
				|  |  | -      &:first-child {
 | 
	
		
			
				|  |  | -        font-size: 14px !important;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.box {
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  flex-direction: row;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -  height: 55px;
 | 
	
		
			
				|  |  | -  line-height: 55px;
 | 
	
		
			
				|  |  | -  .shape {
 | 
	
		
			
				|  |  | -    margin-right: 10px;
 | 
	
		
			
				|  |  | -    height: 18px;
 | 
	
		
			
				|  |  | -    width: 4px;
 | 
	
		
			
				|  |  | -    background-color: var(--color-primary);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -.wall {
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  flex-direction: row;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -  justify-content: center;
 | 
	
		
			
				|  |  | -  color: #888;
 | 
	
		
			
				|  |  | -  font-size: 14px;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</style>
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="container main">
 | 
	
		
			
				|  |  | +    <save-form
 | 
	
		
			
				|  |  | +      inline
 | 
	
		
			
				|  |  | +      :model="search"
 | 
	
		
			
				|  |  | +      @submit="FetchDetail"
 | 
	
		
			
				|  |  | +      @reset="reset"
 | 
	
		
			
				|  |  | +      saveKey="/main/main/baseInfo"
 | 
	
		
			
				|  |  | +    >
 | 
	
		
			
				|  |  | +      <!-- <el-form-item prop="year">
 | 
	
		
			
				|  |  | +        <el-date-picker
 | 
	
		
			
				|  |  | +          v-model="search.dates"
 | 
	
		
			
				|  |  | +          type="daterange"
 | 
	
		
			
				|  |  | +          align="right"
 | 
	
		
			
				|  |  | +          unlink-panels
 | 
	
		
			
				|  |  | +          range-separator="至"
 | 
	
		
			
				|  |  | +          start-placeholder="开始日期"
 | 
	
		
			
				|  |  | +          end-placeholder="结束日期"
 | 
	
		
			
				|  |  | +          :picker-options="pickerOptions">
 | 
	
		
			
				|  |  | +        </el-date-picker>
 | 
	
		
			
				|  |  | +      </el-form-item> -->
 | 
	
		
			
				|  |  | +      <el-form-item prop="organId">
 | 
	
		
			
				|  |  | +        <el-select
 | 
	
		
			
				|  |  | +          clearable
 | 
	
		
			
				|  |  | +          filterable
 | 
	
		
			
				|  |  | +          placeholder="请选择分部"
 | 
	
		
			
				|  |  | +          v-model="search.organId"
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <el-option
 | 
	
		
			
				|  |  | +            v-for="(item, index) in selects.branchs"
 | 
	
		
			
				|  |  | +            :key="index"
 | 
	
		
			
				|  |  | +            :label="item.name"
 | 
	
		
			
				|  |  | +            :value="item.id"
 | 
	
		
			
				|  |  | +          ></el-option>
 | 
	
		
			
				|  |  | +        </el-select>
 | 
	
		
			
				|  |  | +      </el-form-item>
 | 
	
		
			
				|  |  | +      <el-button native-type="submit" type="primary">搜索</el-button>
 | 
	
		
			
				|  |  | +      <el-button native-type="reset" type="danger">重置</el-button>
 | 
	
		
			
				|  |  | +    </save-form>
 | 
	
		
			
				|  |  | +    <!-- <el-alert type="info" :closable="false" style="margin-bottom: 20px;">
 | 
	
		
			
				|  |  | +      每日0点更新前一日数据
 | 
	
		
			
				|  |  | +    </el-alert> -->
 | 
	
		
			
				|  |  | +    <!-- 这里显示选项卡 -->
 | 
	
		
			
				|  |  | +    <empty desc="暂无统计数据" v-if="isEmpty" />
 | 
	
		
			
				|  |  | +    <el-row v-else class="rows" :gutter="20">
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
 | 
	
		
			
				|  |  | +        <studentbaseinfo :data="dataInfo" />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
 | 
	
		
			
				|  |  | +        <operate :data="dataInfo" />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="8">
 | 
	
		
			
				|  |  | +        <hrdata :data="dataInfo" />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <!-- <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 | 
	
		
			
				|  |  | +        <surplusCourse :data="dataInfo" />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 | 
	
		
			
				|  |  | +        <useCourse :data="dataInfo" />
 | 
	
		
			
				|  |  | +      </el-col> -->
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | +        <management
 | 
	
		
			
				|  |  | +          ref="management"
 | 
	
		
			
				|  |  | +          :data="dataInfo"
 | 
	
		
			
				|  |  | +          :search="search"
 | 
	
		
			
				|  |  | +          @resetDate="resetDate"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col
 | 
	
		
			
				|  |  | +        :xs="24"
 | 
	
		
			
				|  |  | +        :sm="24"
 | 
	
		
			
				|  |  | +        :md="24"
 | 
	
		
			
				|  |  | +        :lg="24"
 | 
	
		
			
				|  |  | +        :xl="24"
 | 
	
		
			
				|  |  | +        v-if="$helpers.tenantId == 1"
 | 
	
		
			
				|  |  | +      >
 | 
	
		
			
				|  |  | +        <business
 | 
	
		
			
				|  |  | +          ref="business"
 | 
	
		
			
				|  |  | +          :data="dataInfo"
 | 
	
		
			
				|  |  | +          :search="search"
 | 
	
		
			
				|  |  | +          @resetDate="resetDate"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | +        <curriculum
 | 
	
		
			
				|  |  | +          :data="dataInfo"
 | 
	
		
			
				|  |  | +          ref="curriculum"
 | 
	
		
			
				|  |  | +          :search="search"
 | 
	
		
			
				|  |  | +          @resetDate="resetDate"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 | 
	
		
			
				|  |  | +        <student
 | 
	
		
			
				|  |  | +          :data="dataInfo"
 | 
	
		
			
				|  |  | +          ref="student"
 | 
	
		
			
				|  |  | +          :search="search"
 | 
	
		
			
				|  |  | +          @resetDate="resetDate"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      <!-- <el-col :xs="24" :sm="24" :md="12">
 | 
	
		
			
				|  |  | +        <operate :data="dataInfo"/>
 | 
	
		
			
				|  |  | +      </el-col> -->
 | 
	
		
			
				|  |  | +      <!-- <el-col :xs="24" :sm="24" :md="12">
 | 
	
		
			
				|  |  | +        <hrdata :data="dataInfo"/>
 | 
	
		
			
				|  |  | +      </el-col> -->
 | 
	
		
			
				|  |  | +    </el-row>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { getIndex } from "../api";
 | 
	
		
			
				|  |  | +import operate from "./operate";
 | 
	
		
			
				|  |  | +import business from "./business";
 | 
	
		
			
				|  |  | +import management from "./management";
 | 
	
		
			
				|  |  | +import hrdata from "./hr";
 | 
	
		
			
				|  |  | +import student from "./student";
 | 
	
		
			
				|  |  | +import curriculum from "./curriculum";
 | 
	
		
			
				|  |  | +import studentbaseinfo from "./studentBaseinfo";
 | 
	
		
			
				|  |  | +import surplusCourse from "./surplusCourse";
 | 
	
		
			
				|  |  | +import useCourse from "./useCourse";
 | 
	
		
			
				|  |  | +import { getTimes } from "@/utils";
 | 
	
		
			
				|  |  | +import { descs } from "../constant";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  components: {
 | 
	
		
			
				|  |  | +    operate,
 | 
	
		
			
				|  |  | +    business,
 | 
	
		
			
				|  |  | +    management,
 | 
	
		
			
				|  |  | +    hrdata,
 | 
	
		
			
				|  |  | +    student,
 | 
	
		
			
				|  |  | +    curriculum,
 | 
	
		
			
				|  |  | +    studentbaseinfo,
 | 
	
		
			
				|  |  | +    surplusCourse,
 | 
	
		
			
				|  |  | +    useCourse,
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      pickerOptions: {
 | 
	
		
			
				|  |  | +        firstDayOfWeek: 1,
 | 
	
		
			
				|  |  | +        disabledDate: (a) => {
 | 
	
		
			
				|  |  | +          const { dayjs } = this.$helpers;
 | 
	
		
			
				|  |  | +          return dayjs(a).isAfter(dayjs().subtract(1, "day"));
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        shortcuts: [
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            text: "最近一周",
 | 
	
		
			
				|  |  | +            onClick(picker) {
 | 
	
		
			
				|  |  | +              const end = new Date();
 | 
	
		
			
				|  |  | +              const start = new Date();
 | 
	
		
			
				|  |  | +              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | +              start.setTime(start.getTime() - 3600 * 1000 * 24 * 8);
 | 
	
		
			
				|  |  | +              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            text: "最近一个月",
 | 
	
		
			
				|  |  | +            onClick(picker) {
 | 
	
		
			
				|  |  | +              const end = new Date();
 | 
	
		
			
				|  |  | +              const start = new Date();
 | 
	
		
			
				|  |  | +              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | +              start.setTime(start.getTime() - 3600 * 1000 * 24 * 31);
 | 
	
		
			
				|  |  | +              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            text: "最近三个月",
 | 
	
		
			
				|  |  | +            onClick(picker) {
 | 
	
		
			
				|  |  | +              const end = new Date();
 | 
	
		
			
				|  |  | +              const start = new Date();
 | 
	
		
			
				|  |  | +              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
 | 
	
		
			
				|  |  | +              start.setTime(start.getTime() - 3600 * 1000 * 24 * 91);
 | 
	
		
			
				|  |  | +              picker.$emit("pick", [start, end]);
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      search: {
 | 
	
		
			
				|  |  | +        dates: [],
 | 
	
		
			
				|  |  | +        organId: null,
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      dataInfo: {},
 | 
	
		
			
				|  |  | +      business: {},
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  computed: {
 | 
	
		
			
				|  |  | +    isEmpty() {
 | 
	
		
			
				|  |  | +      return !Object.keys(this.dataInfo).length;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  created() {},
 | 
	
		
			
				|  |  | +  async mounted() {
 | 
	
		
			
				|  |  | +    this.$set(this.search, "dates", this.getInitDate());
 | 
	
		
			
				|  |  | +   await this.$store.dispatch("setBranchs");
 | 
	
		
			
				|  |  | +    this.FetchDetail();
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    getInitDate() {
 | 
	
		
			
				|  |  | +      const end = this.$helpers
 | 
	
		
			
				|  |  | +        .dayjs(new Date())
 | 
	
		
			
				|  |  | +        .subtract(1, "day")
 | 
	
		
			
				|  |  | +        .format("YYYY-MM-DD");
 | 
	
		
			
				|  |  | +      const start = this.$helpers
 | 
	
		
			
				|  |  | +        .dayjs(new Date())
 | 
	
		
			
				|  |  | +        .subtract(1, "day")
 | 
	
		
			
				|  |  | +        .set("date", 1)
 | 
	
		
			
				|  |  | +        .format("YYYY-MM-DD");
 | 
	
		
			
				|  |  | +      return [start, end];
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    reset() {
 | 
	
		
			
				|  |  | +      this.$set(this.search, "dates", this.getInitDate());
 | 
	
		
			
				|  |  | +      this.$set(this.search, "organId", null);
 | 
	
		
			
				|  |  | +      this.FetchDetail();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    async FetchDetail() {
 | 
	
		
			
				|  |  | +      // 这里改变就通知子组件重置
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      const data = {};
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { dates, ...rest } = this.search;
 | 
	
		
			
				|  |  | +        const res = await getIndex({
 | 
	
		
			
				|  |  | +          ...rest,
 | 
	
		
			
				|  |  | +          ...getTimes(dates, ["startDate", "endDate"]),
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        for (const item of res.data) {
 | 
	
		
			
				|  |  | +          data[item.dataType] = {
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            desc: descs[item.dataType],
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch (error) {
 | 
	
		
			
				|  |  | +        console.log(error);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.dataInfo = data;
 | 
	
		
			
				|  |  | +      if (this.$refs.business) {
 | 
	
		
			
				|  |  | +        this.$refs["business"].init();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (this.$refs.management) {
 | 
	
		
			
				|  |  | +        this.$refs["management"].init();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    resetDate(data) {
 | 
	
		
			
				|  |  | +      let arr = null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      for (let item in data) {
 | 
	
		
			
				|  |  | +        // console.log(item)
 | 
	
		
			
				|  |  | +        if (item == "VIP_GROUP_COURSE") {
 | 
	
		
			
				|  |  | +          arr = data[item].indexMonthData;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        this.dataInfo[item] = data[item];
 | 
	
		
			
				|  |  | +        // this.$set( this.dataInfo,item,data[item])
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.dataInfo = { ...this.dataInfo };
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang="less" scoped>
 | 
	
		
			
				|  |  | +.container {
 | 
	
		
			
				|  |  | +  overflow: hidden;
 | 
	
		
			
				|  |  | +  .rows {
 | 
	
		
			
				|  |  | +    > div {
 | 
	
		
			
				|  |  | +      margin-bottom: 20px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  /deep/ .el-card__body .statistic {
 | 
	
		
			
				|  |  | +    margin-bottom: 15px;
 | 
	
		
			
				|  |  | +    padding: 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/.el-card__header {
 | 
	
		
			
				|  |  | +  padding: 0 20px !important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +<style lang="scss">
 | 
	
		
			
				|  |  | +.main {
 | 
	
		
			
				|  |  | +  .statistic {
 | 
	
		
			
				|  |  | +    .statistic-content > span {
 | 
	
		
			
				|  |  | +      font-size: 22px !important;
 | 
	
		
			
				|  |  | +      &:first-child {
 | 
	
		
			
				|  |  | +        font-size: 14px !important;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.box {
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  flex-direction: row;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +  height: 55px;
 | 
	
		
			
				|  |  | +  line-height: 55px;
 | 
	
		
			
				|  |  | +  .shape {
 | 
	
		
			
				|  |  | +    margin-right: 10px;
 | 
	
		
			
				|  |  | +    height: 18px;
 | 
	
		
			
				|  |  | +    width: 4px;
 | 
	
		
			
				|  |  | +    background-color: var(--color-primary);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.wall {
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  flex-direction: row;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +  justify-content: center;
 | 
	
		
			
				|  |  | +  color: #888;
 | 
	
		
			
				|  |  | +  font-size: 14px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |