index.vue 6.98 KB
<template>
  <div class="index">
    <el-form ref="searchFrom" :model="searchFrom" label-width="100px">
      <el-row>
        <el-col :span="12">
          <el-form-item label="时间">
            <el-date-picker
              v-model="searchFrom.watchTime"
              type="daterange"
              range-separator="至"
              start-placeholder="开始日期"
              value-format="yyyy-MM-dd"
              end-placeholder="结束日期">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6" :offset="6">
          <el-form-item style="float: right">
            <el-button type="primary" @click="getList">搜索</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <el-table
      :data="tableData"
      border
      style="width: 100%">
      <el-table-column
        v-for="(data, index) in tableHead"
        :key="data"
        :label="data"
      >
        <template slot-scope="scope">
          <div @click="toDetail(scope.row.cur_date,index,scope.row[index])" v-if="index!=='cur_date'" class="link">
            {{ scope.row[index]}}
          </div>
          <span v-if="index==='cur_date'"> {{ scope.row[index]}}</span>
        </template>
      </el-table-column>
    </el-table>
    <el-dialog title="详情"
               :visible.sync="dialogVisible"
               width="80%">
      <div v-loading="dialogLoading">
        <el-row class="dialog-tips">
          <el-col :span="5" class="text-r">
            时间:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.time">
              {{dialog.time}}
            </div>
          </el-col>
          <el-col :span="5" class="text-r">
            状态:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.name">
              {{dialog.name}}
            </div>
          </el-col>
          <el-col :span="5" class="text-r">
            总数:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.total">
              {{dialog.total}}
            </div>
          </el-col>
          <el-col :span="5" class="text-r">
            进系统人数:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.inNum">
              {{dialog.inNum}}
            </div>
          </el-col>
          <el-col :span="5" class="text-r">
            注册数:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.register">
              {{dialog.register}}
            </div>
          </el-col>
          <el-col :span="5" class="text-r">
            有课人数:
          </el-col>
          <el-col :span="3" class="">
            <div :title="dialog.course">
              {{dialog.course}}
            </div>
          </el-col>
          <div v-for="(data,index) in dialog.code" :key="data.source_name">
            <el-col :span="5" class="text-r">
              <div :title="data.source_name">
                {{data.source_name}}:
              </div>
            </el-col>
            <el-col :span="3" class="" >
              {{data.source_num}}
            </el-col>
          </div>
          <div v-for="(data,index) in dialog.coursesList" :key="data.courses_name">
            <el-col :span="5" class="text-r">
              <div :title="data.courses_name">
                {{data.courses_name}}:
              </div>
            </el-col>
            <el-col :span="3" class="">
              {{data.courses_num}}
            </el-col>
          </div>
        </el-row>
        <el-table
          :data="dialog.list"
          style="width: 100%">
          <el-table-column
            prop="nickname"
            label="昵称">
          </el-table-column>
          <el-table-column
            prop="user_id"
            label="老系统用户ID">
          </el-table-column>
          <el-table-column
            prop="title"
            label="课程名称">
          </el-table-column>
          <el-table-column
            prop="instructor"
            label="开课日期">
          </el-table-column>
          <el-table-column
            prop="source_title"
            label="来源名称">
          </el-table-column>
          <el-table-column
            prop="created_at"
            label="注册时间">
          </el-table-column>
        </el-table>
      </div>
    </el-dialog>
  </div>
</template>

<script>
  import {getWatchListApi,getStatisticsDetailApi} from "../../service/api";
  export default {
    name: "index",

    data(){
      return {
        searchFrom: {
          watchTime: []
        },
        dialogLoading:false,
        dialogVisible:false,
        tableData: [],
        dialog:{
          list:[],
          total:0,
          register:0,
          coursesList:[],
          course:0,
          time:'',
          name:'',
          codeList:[],
          inNum:0
        },
        tableHead:{}
      }
    },
    methods: {
      defaultTime(){
        let date = new Date();
        let year = date.getFullYear();
        let Month = date.getMonth()+1;
        if(Month < 10){
          Month = `0${Month}`
        }
        let Day = date.getDate();
        if(Day<10)Day = `0${Day}`
        let star = `${year}-${Month}-01`;
        let end = `${year}-${Month}-${Day}`
        this.searchFrom.watchTime = [star,end]
      },
      toDetail(data,b,c){
        this.dialogLoading = true;
        this.dialogVisible=true;
        let json = {
          cur_date:data,
          code:b
        };
        getStatisticsDetailApi(json).then(res=>{
          this.dialog.name = this.tableHead[b];
          this.dialog.time = data;
          this.dialog.inNum = res.total;
          this.dialog.list = res.list;
          this.dialog.register = res.register;
          this.dialog.course = res.course;
          this.dialog.code = res.source
          this.dialog.total = c;
          this.dialog.coursesList = res.courses;
          this.dialogLoading = false;
        })
      },
      getList(){
        let json = {
        };
        if(this.searchFrom.watchTime && this.searchFrom.watchTime.length > 0){
          json.start_at = this.searchFrom.watchTime[0];
          json.end_at = this.searchFrom.watchTime[1]
        }
        getWatchListApi(json).then((res)=>{
          this.tableHead = res[0];
          this.tableData = res.slice(1);
        })
      },
    },
    mounted(){
      this.defaultTime();
      this.getList();
    }
  }
</script>

<style scoped lang="less">
  @import "../../util/public";
  .index {
    padding: 20px 0;
  }
  .dialog-tips{
    margin-bottom: 20px;
    border-top: 1px solid #eee;
    border-left: 1px solid #eee;
    .el-col{
      border-bottom: 1px solid #eee;
      border-right: 1px solid #eee;
      padding: 10px;
      min-height: 40px;
      div{
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
    }
  }
  .link{
    color: blue;
    text-decoration:underline;
    cursor: pointer;
  }
</style>