文件

600 行
24 KiB
HTML
可执行文件

此文件含有不可见的 Unicode 字符

此文件含有人类无法区分的不可见的 Unicode 字符,但可以由计算机进行不同的处理。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<!--[1.6.86]-->
<title>会员分析</title>
<style>
.text {
font-size: 14px;
display: inline-block;
margin-top: 12px;
}
.el-radio-button__inner {
margin: 10px 15px 10px 0;
border-left: 1px solid #dcdfe6;
}
.element {
max-height: 0;
overflow: hidden;
transition: max-height .3s;
}
:checked ~ .element {
max-height: 666px;
}
input[type="checkbox"] {
position: absolute;
clip: rect(0 0 0 0);
}
:checked ~ .check-in {
display: none;
}
.appear {
height: 48px;
overflow: hidden;
}
.cell {
font-size: 14px
}
body,
table {
font-size: 16px;
}
table {
table-layout: fixed;
empty-cells: show;
border-collapse: collapse;
margin: 0 auto;
}
td {
height: 30px;
}
h1,
h2,
h3 {
font-size: 24px;
margin: 0;
padding: 0;
}
.table {
border: 1px solid #cad9ea;
color: #666;
}
.table th {
background-repeat: repeat-x;
height: 30px;
}
.table td,
.table th {
border: 1px solid #cad9ea;
padding: 0 1em 0;
}
.table tr.alter {
background-color: #f5fafe;
}
#form .el-form-item__label {
margin-right: 10px;
}
#form .el-form-item {
margin-bottom: 0;
}
</style>
<div id="vipAnalysisApp" v-cloak>
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
<el-form-item>
<el-input v-model="searchForm.search" size="mini" placeholder="请输入会员昵称/手机号"></el-input>
</el-form-item>
<el-form-item>
<el-select v-model="searchForm.member_type" placeholder="请选择会员类型" clearable size="mini">
<el-option label="常规会员" value="3"></el-option>
<el-option label="PLUS会员" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
<el-form id="form" label-width="110px">
<el-form-item label="最近消费时间">
<el-radio-group v-model="time" size="mini" border @change="changeTime">
<el-radio-button label="不限时间"></el-radio-button>
<el-radio-button label="一周内"></el-radio-button>
<el-radio-button label="两周内"></el-radio-button>
<el-radio-button label="1个月内"></el-radio-button>
<el-radio-button label="2个月内"></el-radio-button>
</el-radio-group>
<el-button type="text" size="mini" @click="ShowDays = !ShowDays">{{ShowDays?'已选时间':'自定义'}}</el-button>
<el-date-picker size="mini" v-show="ShowDays" v-model="chooseMonth" type="daterange"
range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"
format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd" @change="chooseMonthOK"
:picker-options="pickerOptions0">
</el-date-picker>
</el-form-item>
<el-form-item label="购买次数">
<el-radio-group v-model="count" size="mini" border @change="BuyCount">
<el-radio-button label="-1">不限次数</el-radio-button>
<el-radio-button label="0">0次</el-radio-button>
<el-radio-button label="1">1次</el-radio-button>
<el-radio-button label="2">2次</el-radio-button>
<el-radio-button label="3">3次</el-radio-button>
</el-radio-group>
<el-button type="text" size="mini" @click="isShowCount">{{ShowCount?'已选次数':'自定义'}}</el-button>
<el-input-number v-show="ShowCount" v-model="chooseCount" @change="countChange" :min="1"
:max="100000" size="mini"></el-input-number>
</el-form-item>
<el-form-item label="类目">
<el-radio-group v-model="category" size="mini" border @change="ClassChange"
style="max-width: 640px;vertical-align: top;" :class="{'appear':appear_more}"
:disabled="count==0?true:false">
<el-radio-button label="">不限类目</el-radio-button>
<el-radio-button v-for="(item,index) in categoryList" :label="item.id">{{item.class_name}}
</el-radio-button>
</el-radio-group>
<el-button v-if="categoryList.length>7" type="text" size="mini" @click="appear">{{appear_more?'更多':'收起'}}
</el-button>
</el-form-item>
<el-form-item label="消费金额">
<el-radio-group v-model="money" size="mini" border @change="chooseMoney"
:disabled="count==0?true:false">
<el-radio-button label="0">不限金额</el-radio-button>
<el-radio-button label="0-500">0-500</el-radio-button>
<el-radio-button label="500-1000">500-1000</el-radio-button>
<el-radio-button label="1000-2000">1000-2000</el-radio-button>
<el-radio-button label="2000-5000">2000-5000</el-radio-button>
</el-radio-group>
<el-button type="text" size="mini" @click="isShowMoney">{{ShowMoney?'已选金额':'自定义'}}</el-button>
<span v-show="ShowMoney">
<el-input type="number"
v-model="start_money"
style="width: 80px;"
size="mini"
:min="0"
:max="end_money?end_money-1:10000000"></el-input> - <el-input type="number"
v-model="end_money"
style="width: 80px;"
size="mini"
:min="start_money?start_money*1+1:1"
:max="10000000"></el-input>
<el-button size="mini" @click="sureMoney">确定</el-button>
</span>
</el-form-item>
<el-form-item label="会员标签">
<el-radio-group v-model="style" size="mini" border @change="vipLabelChange"
style="max-width: 640px;vertical-align: top;" :class="{'appear':label_more}">
<el-radio-button label="">不限标签</el-radio-button>
<el-radio-button v-for="(item,index) in VipLabel" :label="item.id">{{item.name}}
</el-radio-button>
</el-radio-group>
<el-button v-if="VipLabel.length>6" type="text" size="mini" @click="labelMore">{{label_more?'更多':'收起'}}
</el-button>
</el-form-item>
</el-form>
<!-- 表格 -->
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column label="序号" align="center" width="50" align="center">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="name" label="姓名/昵称" align="center">
<template slot-scope="scope">
<p>{{scope.row.name?scope.row.name:'--'}}|{{scope.row.nickname?scope.row.nickname:'--'}}
</p>
</template>
</el-table-column>
<el-table-column prop="mobile_phone" label="手机号" align="center">
</el-table-column>
<el-table-column prop="vip_type" label="会员类型" align="center">
</el-table-column>
<el-table-column prop="vip_lv" label="会员等级" align="center">
</el-table-column>
<el-table-column prop="expense_amount" label="累计消费金额" align="center">
</el-table-column>
<el-table-column prop="expense_num" label="累计消费次数" align="center">
</el-table-column>
<el-table-column prop="expense_last" label="最后消费时间" align="center">
</el-table-column>
<el-table-column label="商品类目" align="center">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="showClassDialog(scope.row.id)">查看</el-button>
</template>
</el-table-column>
</el-table>
</template>
<!-- 分页 -->
<el-pagination @current-change="CurrentChange" :current-page="CurrentPage" :page-sizes="[10]"
:page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="total">
</el-pagination>
<!-- 购买类目弹框 -->
<el-dialog title="购买类目" :modal-append-to-body="false" :visible.sync="classDialog" width="60%">
<el-table :data="classTableData" style="width: 100%">
<el-table-column label="序号" align="center" width="50">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column label="类目名称" prop="name" align="center">
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination @current-change="classCurrentChange" :current-page="classCurrentPage"
:page-sizes="[10]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper"
:total="classtotal">
</el-pagination>
</el-dialog>
</div>
<script type="text/javaScript">
var vipAnalysisApp = new Vue({
el: "#vipAnalysisApp",
data: function () {
return {
searchForm: {
search: '',
member_type: '',
},
chooseMonth: [], //自定义月份
chooseCount: '', //自定义次数
start_money: '', //自定义开始金额
end_money: '',//自定义结束金额
time: '不限时间', //消费时间
count: '-1',
category: '',
categoryList: [], //类目表
money: '0',
style: '',
total: 100,
CurrentPage: 1,
pagesize: 10,
classCurrentPage: 1, //类目当前页
classtotal: 0, //类目总条数
tableData: [],
classDialog: false, //类目弹框
classTableData: [], //类目表
ShowDays: false,
ShowCount: false,
ShowMoney: false,
times: [],
VipLabel: [], // 会员标签
appear_more: true, //控制是否显示
label_more: true,
vid: '',// 当前用户id
pickerOptions0: {
disabledDate(time) {
let curDate = (new Date()).getTime();
let two = 730 * 24 * 3600 * 1000;
let twoMonths = curDate - two;
return time.getTime() > Date.now() || time.getTime() < twoMonths;
}
},
}
},
created() {
this.getUserList()
// 获取商品类目
this.getGoodsClassSell()
//获取会员标签
this.getVipLabel()
},
methods: {
//获取会员标签
getVipLabel() {
$.ajax({
type: 'post',
url: '/index.php/Retail/VipLabel/getVipLabel',
success: res => {
if (res.status == 1) {
this.VipLabel = res.data.list
}
}
})
},
getGoodsClassSell() {
$.ajax({
type: 'post',
url: '/index.php/Retail/MemberAnalyze/getGoodsClassSell',
data: {
page: this.classCurrentPage,
pageSize: 10
},
success: res => {
if (res.status == 1) {
this.categoryList = res.data.list;
}
}
})
},
// 获取用户列表
getUserList() {
$.ajax({
type: 'post',
url: '/index.php/Retail/MemberAnalyze/getUserList',
data: {
search: this.searchForm.search,
member_type: this.searchForm.member_type,
start_time: this.times[0] ? (this.times[0] + ' 00:00:00') : '',
end_time: this.times[1] ? (this.times[1] + ' 23:59:59') : '',
expense_num: this.count,
min_amount: this.money.split('-')[0],
max_amount: this.money.split('-')[1],
vip_label: this.style,
goods_class: this.category,
page: this.CurrentPage,
pageSize: this.pagesize
},
success: res => {
if (res.status == 1) {
this.tableData = res.data.list;
this.total = res.data.total ? parseInt(res.data.total) : 0;
} else {
this.tableData = [];
this.total = 0
}
}
})
},
// 获取用户类目
getGoodsClass(id) {
this.vid = id
$.ajax({
type: 'post',
url: '/index.php/Retail/MemberAnalyze/getGoodsClassByConditions',
data: {
vid: id,
page: this.classCurrentPage,
pageSize: this.pagesize,
start_time: this.times[0],
end_time: this.times[1]
},
success: res => {
if (res.status == 1) {
this.classTableData = res.data.list;
this.classtotal = parseInt(res.data.total)
} else {
this.classTableData = []
this.classtotal = 0
}
}
})
},
// 显示类目弹框
showClassDialog(id) {
this.classDialog = true;
this.classCurrent = 1;
this.getGoodsClass(id)
},
isShowCount() {
this.ShowCount = !this.ShowCount;
if (!this.ShowCount) {
this.chooseCount = 1;
}
if (this.ShowCount) {
this.chooseCount = 1;
if (this.count < 1) {
this.count = 1;
}
}
},
// 选择次数
countChange() {
this.count = this.chooseCount
this.CurrentPage = 1
this.getUserList()
},
sureMoney() {
this.CurrentPage = 1;
if (this.start_money == '' || this.start_money == null || this.start_money == undefined) {
this.$message({
message: '请输入正确的起始金额',
type: 'warning'
});
return;
}
if (this.end_money == '' || this.end_money == null || this.end_money == undefined) {
this.$message({
message: '请输入正确的结束金额',
type: 'warning'
});
return;
}
if (this.end_money != '' && this.end_money != null && this.end_money != undefined && this.end_money * 1 <= this.start_money * 1) {
this.$message({
message: '结束金额必须大于起始金额',
type: 'warning'
});
return;
}
this.money = this.start_money + '-' + this.end_money;
this.getUserList();
},
onSubmit() {
this.CurrentPage = 1
this.getUserList()
},
// 类目显示
appear() {
this.appear_more = !this.appear_more
},
// 标签显示
labelMore() {
this.label_more = !this.label_more
},
CurrentChange(val) {
this.CurrentPage = val;
this.getUserList()
},
// 类目页码改变
classCurrentChange(val) {
this.classCurrentPage = val;
this.getGoodsClass(this.vid)
},
// 时间选择
changeTime() {
this.ShowDays = false;
this.chooseMonth = [];
if (this.time == '不限时间') {
this.times = []
}
// 一个月内
if (this.time == '1个月内') {
var month = this.getLastMonth();
this.times = month
}
if (this.time == '2个月内') {
var TwoMonth = this.getLastTwoMonth();
this.times = TwoMonth
}
if (this.time == '一周内') {
var week = this.getLastWeek();
this.times = week
}
if (this.time == '两周内') {
var twoWeek = this.getLastTwoWeek();
this.times = twoWeek
}
this.CurrentPage = 1
this.getUserList()
},
// 自定义金额
isShowMoney() {
this.ShowMoney = !this.ShowMoney
},
// 购买次数选择
BuyCount() {
this.CurrentPage = 1;
this.ShowCount = false;
this.getUserList();
},
// 选择金额
chooseMoney() {
this.start_money = '';
this.end_money = '';
this.CurrentPage = 1;
this.ShowMoney = false;
this.getUserList();
},
// 选择类目
ClassChange() {
this.CurrentPage = 1;
this.getUserList()
},
//选择标签
vipLabelChange() {
this.CurrentPage = 1;
this.getUserList()
},
//上个月
getLastMonth() {
var end_time = new Date();
var year = end_time.getFullYear();
var month = end_time.getMonth() + 1;//0-11表示1-12月
var day = end_time.getDate();
var dateObj = [];
dateObj[1] = year + '-' + month + '-' + day;
var nowMonthDay = new Date(year, month, 0).getDate(); //当前月的总天数
if (month - 1 <= 0) { //如果是1月,年数往前推一年    
dateObj[0] = (year - 1) + '-' + 12 + '-' + day;
} else {
var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();
if (lastMonthDay < day) { //1个月前所在月的总天数小于现在的天日期
if (day < nowMonthDay) { //当前天日期小于当前月总天数
dateObj[0] = year + '-' + (month - 1) + '-' + (lastMonthDay - (nowMonthDay - day));
} else {
dateObj[0] = year + '-' + (month - 1) + '-' + lastMonthDay;
}
} else {
dateObj[0] = year + '-' + (month - 1) + '-' + day;
}
}
return dateObj;
},
//上两个月
getLastTwoMonth() {
var end_time = new Date();
var year = end_time.getFullYear();
var month = end_time.getMonth() + 1;//0-11表示1-12月
var day = end_time.getDate();
var dateObj = [];
dateObj[1] = year + '-' + month + '-' + day;
var nowMonthDay = new Date(year, month, 0).getDate(); //当前月的总天数
if (month - 2 <= 0) { //如果是1月,年数往前推一年   
dateObj[0] = (year - 1) + '-' + 12 + '-' + day;
} else {
var lastMonthDay = new Date(year, (parseInt(month) - 2), 0).getDate();
if (lastMonthDay < day) { //1个月前所在月的总天数小于现在的天日期
if (day < nowMonthDay) { //当前天日期小于当前月总天数
dateObj[0] = year + '-' + (month - 2) + '-' + (lastMonthDay - (nowMonthDay - day));
} else {
dateObj[0] = year + '-' + (month - 2) + '-' + lastMonthDay;
}
} else {
dateObj[0] = year + '-' + (month - 2) + '-' + day;
}
}
return dateObj;
},
// 上一周
getLastWeek() {
var end_time = new Date();
var year = end_time.getFullYear();
var month = end_time.getMonth() + 1;//0-11表示1-12月
var day = end_time.getDate();
var dateObj = []
dateObj[1] = year + '-' + month + '-' + day;
if (day - 7 <= 0) { //如果在当月7日之前
var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate(); //1周前所在月的总天数
if (month - 1 <= 0) { //如果在当年的1月份
dateObj[0] = (year - 1) + '-' + 12 + '-' + (31 - (7 - day));
} else {
dateObj[0] = year + '-' + (month - 1) + '-' + (lastMonthDay - (7 - day));
}
} else {
dateObj[0] = year + '-' + month + '-' + (day - 7);
}
return dateObj;
},
//上两周
getLastTwoWeek() {
var end_time = new Date();
var year = end_time.getFullYear();
var month = end_time.getMonth() + 1;//0-11表示1-12月
var day = end_time.getDate();
var dateObj = [];
dateObj[1] = year + '-' + month + '-' + day;
if (day - 14 <= 0) { //如果在当月14日之前
var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate(); //2周前所在月的总天数
if (month - 1 <= 0) { //如果在当年的1月份
dateObj[0] = (year - 1) + '-' + 12 + '-' + (31 - (14 - day));
} else {
dateObj[0] = year + '-' + (month - 1) + '-' + (lastMonthDay - (14 - day));
}
} else {
dateObj[0] = year + '-' + month + '-' + (day - 14);
}
return dateObj;
},
// 自定义选择月份
chooseMonthOK() {
this.CurrentPage = 1
this.times = this.chooseMonth
this.getUserList()
this.time = ''
}
},
})
</script>