Files
juipvue/src/components/user/statistics.vue

429 lines
15 KiB
Vue
Raw Normal View History

2020-10-04 10:30:08 +08:00
<template>
<div v-loading="loading">
2020-11-22 11:08:44 +08:00
<el-card class="box-card">
<el-date-picker
v-model="sell_detail_month"
2020-10-04 10:30:08 +08:00
size="small"
2020-11-22 11:08:44 +08:00
type="month"
style="margin-right:5px;width:110px;float:left;"
@change="sell_detail_info"
placeholder="选择月">
</el-date-picker>
<p>
{{sell_detail.sell_percent}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.cost_percent}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.cost_register}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.cost_old_user}}&nbsp;&nbsp;<br>
{{sell_detail.com_cost}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.com_percent}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.today_new_user}}&nbsp;&nbsp;<span style="color:red">||</span>
{{sell_detail.refund}}
</p>
</el-card>
<el-card class="box-card">
<div class="heior_box">
2020-10-04 10:30:08 +08:00
<!-- <el-button size="small" type="primary" icon="el-icon-sold-out" @click="dataExport" v-if="$local.isRoot()">导出</el-button> -->
<div class="search-box">
<el-date-picker
2020-11-22 11:08:44 +08:00
v-model="last_month"
type="datetimerange"
align="right"
2020-10-04 10:30:08 +08:00
size="small"
2020-11-22 11:08:44 +08:00
style="margin-right:5px;"
2021-03-15 11:46:06 +08:00
start-placeholder="A阶段开始时间"
end-placeholder="A阶段结束时间"
2020-11-22 11:08:44 +08:00
:default-time="['00:00:00', '00:00:00']">
</el-date-picker>
2020-10-04 10:30:08 +08:00
<el-date-picker
2020-11-22 11:08:44 +08:00
v-model="new_month"
type="datetimerange"
align="right"
size="small"
style="margin-right:5px;"
2021-03-15 11:46:06 +08:00
start-placeholder="B阶段开始时间"
end-placeholder="B阶段开始时间"
2020-11-22 11:08:44 +08:00
:default-time="['00:00:00', '00:00:00']">
</el-date-picker>
<!-- <el-date-picker
v-model="searchModel.month"
2020-10-04 10:30:08 +08:00
size="small"
2020-11-22 11:08:44 +08:00
type="month"
style="margin-right:5px;width:110px"
placeholder="选择月">
</el-date-picker> -->
<el-select size="small" style="margin-right:5px;" v-model="searchModel.cost_type" placeholder="请选择">
<el-option
v-for="item in cost_types"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input
size="small"
placeholder="起始金额"
type="number"
style="margin-right:5px;width:100px"
v-model="searchModel.money1">
</el-input>
<el-input
size="small"
placeholder="截至金额"
type="number"
style="margin-right:5px;width:100px"
v-model="searchModel.money2">
</el-input>
2020-10-04 10:30:08 +08:00
<el-select
2020-11-12 16:49:54 +08:00
v-model="searchModel.profile"
2020-10-04 10:30:08 +08:00
clearable
2020-11-22 11:08:44 +08:00
style="margin-right:5px;width:160px"
2020-10-04 10:30:08 +08:00
size="small"
placeholder="状态"
>
<el-option v-for="item in types" :key="item.label" :label="item.label" :value="item.value"></el-option>
</el-select>
2020-11-22 11:08:44 +08:00
<el-input style="width:190px" v-model="searchModel.keyWord" placeholder="请输入会员号" clearable size="small">
2020-10-04 10:30:08 +08:00
<el-button slot="append" icon="el-icon-search" @click="search"></el-button>
</el-input>
</div>
</div>
2020-11-22 11:08:44 +08:00
<el-table :data="retData.Data" :height="$getHeight(200)"
2020-11-12 16:49:54 +08:00
@sort-change="sort"
2020-10-04 10:30:08 +08:00
row-key="Id" border>
2020-11-22 11:08:44 +08:00
<el-table-column prop="follow_status" label="状态">
<template slot-scope="scope">
<el-link @click="click_follow_status(scope.row)">{{scope.row.follow_status}}</el-link>
</template>
</el-table-column>
<el-table-column label="会员号">
<template slot-scope="scope">
<el-link @click="click_username(scope.row)">{{scope.row.UserName}}</el-link>
</template>
</el-table-column>
<el-table-column prop="CreateTime" label="注册时间"></el-table-column>
<el-table-column prop="last_pay_time" label="最后消费时间"></el-table-column>
<el-table-column label="总消费" sortable="all_amount">
2020-11-12 16:49:54 +08:00
<template slot-scope="scope">
2020-11-22 11:08:44 +08:00
<el-link @click="click_all_amount(scope.row,1)">{{scope.row.all_amount}}</el-link>
</template>value
</el-table-column>
2021-03-15 11:46:06 +08:00
<el-table-column label="A阶段消费" sortable="PrevMonthAmount">
2020-11-22 11:08:44 +08:00
<template slot-scope="scope">
<el-link @click="click_all_amount(scope.row,2)">{{scope.row.PrevMonthAmount}}</el-link>
2020-10-04 10:30:08 +08:00
</template>
</el-table-column>
2021-03-15 11:46:06 +08:00
<el-table-column label="B阶段消费" sortable="MonthAmount">
2020-10-04 10:30:08 +08:00
<template slot-scope="scope">
2020-11-22 11:08:44 +08:00
<el-link @click="click_all_amount(scope.row,3)">{{scope.row.MonthAmount}}</el-link>
2020-10-04 10:30:08 +08:00
</template>
</el-table-column>
2020-11-22 11:08:44 +08:00
<el-table-column prop="AddAmount" label="对比增长金额"></el-table-column>
<el-table-column prop="persent" label="对比增长百分比"></el-table-column>
<el-table-column label="账户总数" sortable="account_count">
2020-11-12 16:49:54 +08:00
<template slot-scope="scope">
2020-11-22 11:08:44 +08:00
<el-link @click="click_account(scope.row,1)">{{scope.row.account_count}}</el-link>
</template>
</el-table-column>
<el-table-column label="使用中个数" sortable="account_used">
<template slot-scope="scope">
<el-link @click="click_account(scope.row,3)">{{scope.row.account_used}}</el-link>
</template>
</el-table-column>value
<el-table-column label="过期个数" sortable="account_expire">
<template slot-scope="scope">
<el-link @click="click_account(scope.row,2)">{{scope.row.account_expire}}</el-link>
2020-10-04 10:30:08 +08:00
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
v-if="retData.Data.length>0"
@current-change="get"
:page-size="50"
:current-page.sync="searchModel.PageIndex"
2020-11-28 16:51:11 +08:00
layout="total,prev, pager, next, jumper"
2020-10-04 10:30:08 +08:00
:total="retData.TotalCount"
></el-pagination>
</div>
2020-11-22 11:08:44 +08:00
<el-dialog
title="修改跟进状态"
:visible.sync="follow_status_change_fall"
2020-11-26 17:23:54 +08:00
width="50%">
2020-11-22 11:08:44 +08:00
<el-select size="small" v-model="set_follow_status.status" placeholder="请选择">
<el-option
v-for="item in types"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input style="margin:5px 0" v-model="set_follow_status.remark" size="small" placeholder="请输入备注"></el-input>
<el-table :data="follow_status_list" border>
2020-11-26 17:23:54 +08:00
<el-table-column prop="create_time" label="时间"></el-table-column>
<el-table-column v-if="$local.isRoot()" prop="op_user" label="维护经理"></el-table-column>
2020-11-22 11:08:44 +08:00
<el-table-column prop="record" width="230" label="跟进记录"></el-table-column>
<el-table-column prop="remark" label="备注"></el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="follow_status_change_fall = false"> </el-button>
<el-button :disabled="clickOk" type="primary" @click="changeFolowStatus()"> </el-button>
</span>
</el-dialog>
<el-dialog
title="用户信息"
:visible.sync="userinfo_fall"
width="30%">
<el-card class="box-card">
<p oncopy="return false;">电话{{user_info.UserName}}</p>
<p>微信{{user_info.Wx}}</p>
<p>QQ{{user_info.QQ}}</p>
</el-card>
</el-dialog>
<el-dialog
title="消费记录"
:visible.sync="cost_fall"
v-loading="cost_loading"
2020-11-26 17:23:54 +08:00
width="70%">
2020-11-22 11:08:44 +08:00
<el-table height="500px" :data="cost_list" border>
2020-11-26 17:23:54 +08:00
<el-table-column prop="UpdateTime" label="时间"></el-table-column>
2020-11-25 09:58:42 +08:00
<el-table-column prop="ProductName" label="产品"></el-table-column>
<el-table-column prop="PackageName" label="套餐"></el-table-column>
<el-table-column prop="OrderType" label="类型"></el-table-column>
<el-table-column prop="ConnectCount" label="连接数"></el-table-column>
2020-11-26 17:23:54 +08:00
<el-table-column prop="Accounts" show-overflow-tooltip="true" label="帐号"></el-table-column>
2020-11-28 16:51:11 +08:00
<el-table-column prop="OrderAmount" label="订单金额"></el-table-column>
2020-11-26 17:23:54 +08:00
<el-table-column prop="PaymentAmount" label="实付金额"></el-table-column>
2020-11-22 11:08:44 +08:00
</el-table>
</el-dialog>
<el-dialog
title="帐号记录"
:visible.sync="account_fall"
v-loading="account_loading"
2020-11-22 11:08:44 +08:00
width="50%">
<el-table height="500px" :data="account_list" border>
<el-table-column prop="ProductName" label="产品"></el-table-column>
<el-table-column prop="PackageName" label="套餐"></el-table-column>
<el-table-column prop="Account" label="帐号"></el-table-column>
<el-table-column prop="StartTime" label="开始时间"></el-table-column>
<el-table-column prop="EndTime" label="结束时间"></el-table-column>
</el-table>
</el-dialog>
</el-card>
2020-10-04 10:30:08 +08:00
</div>
</template>
<script>
2020-11-12 16:49:54 +08:00
import * as dateUtil from '@/extend/js/dateFormatUtil'
2020-10-04 10:30:08 +08:00
export default {
2020-11-12 16:49:54 +08:00
name: 'userIndex',
components: {
phoneHide: () => import('@/components/common/phonehide')
2020-10-04 10:30:08 +08:00
},
2020-11-12 16:49:54 +08:00
data () {
2020-10-04 10:30:08 +08:00
return {
loading: false,
cost_loading: false,
account_loading: false,
2020-10-04 10:30:08 +08:00
retData: { TotalCount: 0, Data: [] },
dateRange1: [],
dateRange2: [],
searchModel: {
PageIndex: 1,
2020-11-12 16:49:54 +08:00
keyWord: '',
sortLable: '',
sortOrder: 0,
2020-11-22 11:08:44 +08:00
profile: '',
last_month: {
s_time: '',
e_time: ''
},
new_month: {
s_time: '',
e_time: ''
},
cost_type: '0',
money1: null,
money2: null
2020-10-04 10:30:08 +08:00
},
2020-11-22 11:08:44 +08:00
types: [],
user_info: {},
follow_status_change_fall: false,
follow_status_list: [],
set_follow_status: {
user_id: null,
old_status: null,
status: null,
remark: null
},
userinfo_fall: false,
clickOk: false,
cost_fall: false,
cost_list: [],
account_list: [],
account_fall: false,
last_month: null,
new_month: null,
cost_types: [{
value: '0',
label: '总消费'
}, {
value: '1',
label: '上月消费'
}, {
value: '2',
label: '本月消费'
}],
sell_detail: {},
2020-11-26 17:23:54 +08:00
sell_detail_month: null,
temps: null
2020-11-12 16:49:54 +08:00
}
2020-10-04 10:30:08 +08:00
},
2020-11-12 16:49:54 +08:00
created () {
this.$store.commit('setCurrentNav', '用户管理>>消费统计')
this.get()
2020-11-22 11:08:44 +08:00
this.sell_detail_info()
2020-10-04 10:30:08 +08:00
},
methods: {
2020-11-22 11:08:44 +08:00
sell_detail_info () {
this.$api.get(this.$api.phpURL + 'manager/SellInfo/getOne', {sell_month: this.sell_detail_month}).then(res => {
this.sell_detail = res.data
})
},
2020-11-12 16:49:54 +08:00
// eslint-disable-next-line standard/object-curly-even-spacing
sort ({column, prop, order }) {
2020-11-22 11:08:44 +08:00
this.searchModel.PageIndex = 1
this.searchModel.sortLable = column.sortable
2020-11-12 16:49:54 +08:00
// eslint-disable-next-line eqeqeq
2020-11-22 11:08:44 +08:00
this.searchModel.sortOrder = order == 'ascending' ? 1 : 0
this.get()
2020-10-04 10:30:08 +08:00
},
2020-11-12 16:49:54 +08:00
search () {
2020-11-22 11:08:44 +08:00
if (this.last_month && this.last_month.length === 2) {
this.searchModel.last_month.s_time = this.last_month[0]
this.searchModel.last_month.e_time = this.last_month[1]
}
if (this.new_month && this.new_month.length === 2) {
this.searchModel.new_month.s_time = this.new_month[0]
this.searchModel.new_month.e_time = this.new_month[1]
}
2020-11-12 16:49:54 +08:00
this.searchModel.PageIndex = 1
2020-11-22 11:08:44 +08:00
this.searchModel.sortLable = null
if (this.searchModel.money1 || this.searchModel.money2) {
if (!(this.searchModel.money1 && this.searchModel.money2)) {
this.$message({
message: '请正确填写消费范围',
type: 'warning'
})
return
}
}
2020-11-12 16:49:54 +08:00
this.get()
2020-10-04 10:30:08 +08:00
},
2020-11-12 16:49:54 +08:00
get () {
this.loading = true
2020-11-22 11:08:44 +08:00
this.$api.get(this.$api.phpURL + 'manager/UserFollow/getList', {PageIndex: this.searchModel.PageIndex, search: this.searchModel}).then(res => {
this.retData.Data = res.data.list
2020-11-24 15:22:11 +08:00
// eslint-disable-next-line eqeqeq
if (res.data.count != 0) {
this.retData.TotalCount = parseInt(res.data.count)
}
2020-11-22 11:08:44 +08:00
this.types = res.data.types
this.loading = false
})
},
click_follow_status (row) {
2020-11-26 17:23:54 +08:00
this.temps = row
2020-11-22 11:08:44 +08:00
this.clickOk = false
this.follow_status_change_fall = true
this.set_follow_status.status = row.follow_status
this.set_follow_status.user_id = row.Id
this.set_follow_status.old_status = row.follow_status
this.$api.get(this.$api.phpURL + 'manager/UserFollow/getFollowRecord', {id: row.Id}).then(res => {
this.follow_status_list = res.data
})
},
changeFolowStatus () {
// eslint-disable-next-line valid-typeof
if (typeof this.set_follow_status.status !== 'number') {
this.$alert('请选择跟进状态', '警告', {
confirmButtonText: '确定'
2020-11-12 16:49:54 +08:00
})
2020-11-22 11:08:44 +08:00
return
}
2020-11-26 17:23:54 +08:00
this.temps.follow_status = this.setStatus(this.set_follow_status.status)
2020-11-22 11:08:44 +08:00
this.clickOk = true
this.$api.post(this.$api.phpURL + 'manager/UserFollow/changeFolowStatus', {data: this.set_follow_status}).then(res => {
this.follow_status_change_fall = false
})
},
click_username (row) {
this.userinfo_fall = true
this.$api.get(this.$api.phpURL + 'manager/UserFollow/getUserInfo', {id: row.Id}).then(res => {
this.user_info = res.data
})
},
click_all_amount (row, index) {
this.cost_fall = true
this.cost_loading = true
2020-11-25 09:58:42 +08:00
this.$api.get(this.$api.phpURL + 'manager/UserFollow/getCostList', {id: row.Id, index: index, search: this.searchModel}).then(res => {
2020-11-22 11:08:44 +08:00
this.cost_list = res.data
this.cost_loading = false
2020-11-22 11:08:44 +08:00
})
},
click_account (row, index) {
this.account_fall = true
this.account_loading = true
2020-11-22 11:08:44 +08:00
this.$api.get(this.$api.phpURL + 'manager/UserFollow/getAccountList', {id: row.Id, index: index}).then(res => {
this.account_list = res.data
this.account_loading = false
2020-11-22 11:08:44 +08:00
})
2020-10-04 10:30:08 +08:00
},
2020-11-26 17:23:54 +08:00
setStatus (status) {
switch (status) {
case 1:
return '待跟进-未购买'
case 2:
return '跟进超时-未购买'
case 3:
return '待跟进-消费减少'
case 4:
return '跟进超时-消费减少'
case 5:
return '流失-需求减少'
case 6:
return '流失-暂时不用'
case 7:
return '流失-价格问题'
case 8:
return '流失-产品问题'
case 9:
return '流失-也可自定义'
case 10:
return '高意向客户'
case 11:
return '已完成'
}
},
2020-11-12 16:49:54 +08:00
dataExport () {
this.$api.getDownloadFile('/course/v1/order/ExportUserConsumeStatistics', this.searchModel)
2020-10-04 10:30:08 +08:00
}
}
2020-11-12 16:49:54 +08:00
}
2020-10-04 10:30:08 +08:00
</script>
<style scoped>
</style>