<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="支付时间">
<el-date-picker
v-model="searchFrom.payTime"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="{shortcuts:[today,yesterday,last7Day,last30Day]}"
:default-time="['00:00:00','23:59:59']"
@change="getChannelTransList"
></el-date-picker>
</el-form-item>
<el-form-item label="进班时间">
<el-date-picker
v-model="searchFrom.classTime"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="{shortcuts:[classToday,classYesterday,classLast7Day,classLast30Day]}"
:default-time="['00:00:00','23:59:59']"
@change="getChannelTransList"
></el-date-picker>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="searchFrom.out_trade_no" style="width: 110px"></el-input>
</el-form-item>
<el-form-item label="用户id">
<el-input v-model="searchFrom.user_id" style="width: 110px"></el-input>
</el-form-item>
<el-form-item label="期数名称" prop="periods_title">
<el-select
style="width: 480px"
placeholder="请选择"
v-model="searchFrom.periods_id"
@change="onPeriodChange"
multiple
filterable>
<el-option v-for="item in periodList" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="转化前商品">
<el-select
v-model="searchFrom.goods_id"
filterable
placeholder="请选择"
style="width: 150px"
@change="getChannelTransList"
clearable
>
<el-option
v-for="(data,index) in goodList"
:key="index"
:label="data | filterGoods"
:value="data.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="销售组别">
<el-input v-model="searchFrom.squad" style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="销售老师">
<el-select
v-model="searchFrom.teacher_id"
filterable
placeholder="请选择"
@change="changeTeacher"
clearable
style="width: 100px"
>
<el-option label="暂不分配" value="0"></el-option>
<el-option
v-for="(data,index) in teacherList"
:key="index"
:label="data.name"
:value="data.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<div class="flexRow">
<el-button type="primary" plain @click="seachData">搜索</el-button>
</div>
</el-form-item>
</el-form>
<el-table
border
:span-method="objectSpanMethod"
:data="list"
@sort-change="sortMethod"
:style="{width: width+'px'}"
fixed
>
<el-table-column prop="out_trade_no" label="订单号" ></el-table-column>
<el-table-column
label="购买人"
className="f-c"
width="150">
<template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}}
</template>
</el-table-column>
<el-table-column prop="goods_name" label="商品名称" ></el-table-column>
<el-table-column prop="periods_title" label="期数标题" ></el-table-column>
<el-table-column
prop="duration_over_at"
label="开课看课时间"
style="font-size:12px;"
width="200"
>
<template slot-scope="scope">
开课日期:{{scope.row.periods_start_at}}
<br>
结课日期:{{scope.row.periods_over_at}}
</template>
</el-table-column>
<el-table-column
label="销售老师"
className="f-c"
width="120">
<template slot-scope="scope">
{{scope.row.invite_teacher_name}}<br>(ID:{{scope.row.invite_teacher_id}})
</template>
</el-table-column>
<el-table-column
label="销售老师用户"
className="f-c"
width="150">
<template slot-scope="scope">
<img class="avatar" :src="scope.row.invite_user_avatar"/> {{scope.row.invite_user_nickname}}<br>(ID:{{scope.row.invite_user_id}})<br>手机:{{scope.row.invite_user_mobile}}
</template>
</el-table-column>
<el-table-column
label="带课老师"
className="f-c"
width="120">
<template slot-scope="scope">
{{scope.row.class_teacher_name}}<br>(ID:{{scope.row.class_teacher_id}})
</template>
</el-table-column>
<el-table-column
label="销售老师用户"
className="f-c"
width="150">
<template slot-scope="scope">
<img class="avatar" :src="scope.row.class_invite_user_avatar"/> {{scope.row.class_invite_user_nickname}}<br>(ID:{{scope.row.class_invite_user_id}})<br>手机:{{scope.row.class_invite_user_mobile}}
</template>
</el-table-column>
<el-table-column prop="money" label="实付金额" ></el-table-column>
<el-table-column prop="pay_at" label="支付时间" ></el-table-column>
<el-table-column prop="in_class_at" label="进班时间" ></el-table-column>
<el-table-column prop="status" label="支付状态" >
<template slot-scope="scope">
{{scope.row.status|orderFilter}}
</template>
</el-table-column>
</el-table>
<page
:nowPage="nowPage"
:total="total"
:limit="limit"
@pageChange="onPageChange"
@sizeChange="onSizeChange"
/>
</div>
</template>
<script>
import { getPeriodsConversionListApi, getSourceConversionListApi, getGoodsListApi, getPeriodsOtherListApi, getTeacherListApi } from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE,ORDERSTATUS } from "../../util/wordbook";
import { tipArr3 } from "../../util/tipArr";
export default {
name: "periodsConversionList",
data() {
return {
width: 0,
nowPage: 1,
total: 0,
limit: 20,
list: [],
goods_id: null,
teacherList: [],
goodsList: [],
periodList: [],
today: {
text: "今天",
onClick: () => {
this.searchFrom.payTime = [
this.formatTime(new Date()) + " 00:00:00",
this.formatTime(new Date()) + " 23:59:59"
];
}
},
yesterday: {
text: "昨天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 24 * 60 * 60 * 1000)
);
this.searchFrom.payTime = [
preDate + " 00:00:00",
preDate + " 23:59:59"
];
}
},
last30Day: {
text: "过去30天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000)
);
}
},
last7Day: {
text: "过去7天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000)
);
this.searchFrom.payTime = [
preDate + " 00:00:00",
this.formatTime(new Date()) + " 23:59:59"
];
}
},
classToday: {
text: "今天",
onClick: () => {
this.searchFrom.classTime = [
this.formatTime(new Date()) + " 00:00:00",
this.formatTime(new Date()) + " 23:59:59"
];
}
},
classYesterday: {
text: "昨天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 24 * 60 * 60 * 1000)
);
this.searchFrom.classTime = [
preDate + " 00:00:00",
preDate + " 23:59:59"
];
}
},
classLast30Day: {
text: "过去30天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000)
);
this.searchFrom.classTime = [
preDate + " 00:00:00",
this.formatTime(new Date()) + " 23:59:59"
];
}
},
classLast7Day: {
text: "过去7天",
onClick: () => {
let preDate = this.formatTime(
new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000)
);
this.searchFrom.classTime = [
preDate + " 00:00:00",
this.formatTime(new Date()) + " 23:59:59"
];
}
},
propertyList: [],
spanArr: [],
contentSpanArr: [],
searchFrom: {
payTime: [],
classTime:[],
start_at: "",
end_at: "",
invite_type: "",
invite_name: "",
watch_num: "",
periods_id: "",
squad: "",
teacher_id: "",
periods_title: ""
},
watchList: [
{ id: 0, title: 5 },
{ id: 1, title: 6 },
{ id: 2, title: 10 },
{ id: 3, title: 20 }
],
goodList: []
};
},
filters:{
orderFilter(val){
return ORDERSTATUS[val]
},
filterGoods(val) {
// console.log(val,229)
return (
"[" +
val.id +
"][" +
GOODSTYPE[val.goods_type] +
"]" +
"【" +
val.current_price / 100 +
"元】" +
val.name
);
}
},
components: { page },
methods: {
getGoodsOption() {
let json = {
page: 1,
limit: 100,
goods_type: "1,2"
};
getGoodsListApi(json).then(res => {
this.goodList = res.list;
console.log(this.goodList, 176);
});
},
rendertip(h, { column }) {
// console.log(h)
return h("span", [
h("span", column.label),
h(
"el-tooltip",
{
props: {
effect: "dark",
content: tipArr3[column.label],
placement: "top"
}
},
[
h("i", {
class: "el-icon-question",
style: "color:#409eff;display:block;"
})
]
)
]);
},
sortMethod(data){
this.searchFrom.sort_key = data.prop
if(data.order=='ascending'){
this.searchFrom.sort_value = 'asc'
}else{
this.searchFrom.sort_value = 'desc'
}
this.getChannelTransList()
},
getTeacherList() {
let json = {
page: 1,
limit: 200
};
getTeacherListApi(json).then(res => {
this.teacherList = res.list;
});
},
seachData() {
this.total = 0;
this.nowPage = 1;
this.getChannelTransList();
},
onPeriodChange(value) {
let str = "";
if (value.length > 1) {
str = value.join(",");
} else {
str = value[0];
}
this.periods_id = str;
console.log(str);
},
objectSpanMethod(data) {
},
handleItemChange(val) {
getPeriodsApi({ goods_id: val[0], limit: 100 }).then(res => {
res.list.forEach(i => {
i.name = i.title;
});
this.goodsList.find(i => {
return i.id === val[0];
}).children = res.list;
});
},
changePeriods(data) {
if (data.length > 1) {
this.goods_id = data[0];
let nowGoods = this.goodsList.find(i => {
return i.id === data[0];
});
this.periods = nowGoods.children.find(i => {
return i.id === data[1];
});
this.searchFrom.periods_id = this.periods.id;
this.getChannelTransList();
}
},
changeTeacher(value) {
this.searchFrom.teacher_id = value;
this.getChannelTransList();
},
selectChange(value) {
this.searchFrom.watch_num = this.watchList[value].title;
this.getChannelTransList();
},
formatTime(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}`;
return `${year}-${Month}-${Day}`;
},
onPageChange(val) {
this.nowPage = val;
this.getChannelTransList();
},
onSizeChange(val) {
this.nowPage = 1;
this.limit = val;
this.getChannelTransList();
},
getGoodsList() {
let json = {
page: 1,
limit: 100,
goods_type: "1,2"
};
getGoodsListApi(json).then(res => {
res.list.forEach(i => {
i.name =
"[" +
i.id +
"]" +
"[" +
GOODSTYPE[i.goods_type] +
"]" +
"[" +
i.current_price / 100 +
"元]" +
i.name;
i.children = [];
});
this.goodsList = res.list;
});
},
getPeriodsOtherList() {
let json = { limit: 1000,page:1,max_watch_num:20 };
getPeriodsOtherListApi(json).then(res => {
res.list.forEach(val=>{
val.label = `【${val.goods_id}】${val.title}${val.watch_num}课时(${val.start_at.slice(5).replace('-', '')})-d${val.has_watch_num}`
})
this.periodList = res.list;
console.log(320)
});
},
getChannelTransList() {
let json = {
limit: this.limit,
page: this.nowPage
};
// 搜索筛选
if (this.searchFrom.invite_type) {
json.invite_type = this.searchFrom.invite_type;
}
if (this.searchFrom.goods_id) {
json.goods_id = this.searchFrom.goods_id;
}
if(this.searchFrom.sort_value){
json.sort_value = this.searchFrom.sort_value;
json.sort_key = this.searchFrom.sort_key;
}
if (this.searchFrom.squad) {
json.squad = this.searchFrom.squad;
}
if (this.searchFrom.watch_num) {
json.watch_num = this.searchFrom.watch_num;
}
if (this.periods_id) {
json.periods_ids = this.periods_id;
}
if (this.searchFrom.teacher_id) {
json.teacher_id = this.searchFrom.teacher_id;
}
if (this.searchFrom.out_trade_no) {
json.out_trade_no = this.searchFrom.out_trade_no;
}
if (this.searchFrom.user_id) {
json.user_id = this.searchFrom.user_id;
}
if (this.searchFrom.payTime&&this.searchFrom.payTime.length > 0) {
if (
this.searchFrom.payTime[0] &&
this.searchFrom.payTime[0].length > 0
) {
this.searchFrom.start_at = this.searchFrom.payTime[0];
json.pay_start_at = this.searchFrom.start_at;
}
if (
this.searchFrom.payTime[1] &&
this.searchFrom.payTime[1].length > 0
) {
this.searchFrom.end_at = this.searchFrom.payTime[1];
json.pay_over_at = this.searchFrom.end_at;
}
}
if (this.searchFrom.classTime&&this.searchFrom.classTime.length > 0) {
console.log(this.searchFrom.classTime)
if (
this.searchFrom.classTime[0] &&
this.searchFrom.classTime[0].length > 0
) {
this.searchFrom.class_start_at = this.searchFrom.classTime[0];
json.in_class_start_at = this.searchFrom.class_start_at;
}
if (
this.searchFrom.classTime[1] &&
this.searchFrom.classTime[1].length > 0
) {
this.searchFrom.class_end_at = this.searchFrom.classTime[1];
json.in_class_over_at = this.searchFrom.class_end_at;
}
}
getSourceConversionListApi(json).then(res => {
if (res) {
if (res.list && res.list.length > 0) {
this.total = res.total;
this.list = res.list.map((item, index) => {
item.index = index;
if (index == 0) {
this.spanArr.push(1);
this.pos = 0;
} else {
if (item.cur_date == res.list[index - 1].cur_date) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.pos = index;
}
}
let name =
item.invite_name && item.invite_name.length > 0
? `(${item.invite_name})`
: "";
let goods_id =
item.goods_id && item.goods_id > 0
? `【${item.goods_id}】`
: "";
let watch_num =
item.watch_num && item.watch_num > 0
? `【${item.watch_num}个课时】`
: "";
item.invite_type = `${item.invite_type}${name}`;
item.goods_name = `${goods_id}${item.goods_name}${watch_num}`;
return item;
});
for (let key in this.list[0]) {
this.propertyList.push(key);
}
this.width = document.documentElement.clientWidth - 200;
}
if (res.list && res.list.length === 0) {
this.list = [];
}
} else {
this.list = [];
}
});
}
},
mounted() {
this.getChannelTransList();
// this.getPeriodsList();
this.getGoodsList();
this.getPeriodsOtherList();
this.getTeacherList()
this.getGoodsOption()
}
};
</script>
<style lang="less" scope>
.channel-trans-list {
padding: 20px 0;
}
</style>