<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>