|
@@ -1,6 +1,15 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="new-app-container layout-vertical">
|
|
<div class="new-app-container layout-vertical">
|
|
|
- <YMTableSearch :loading="loading" :search-form="searchForm" @onValueChange="onValueChange" @submit="onSubmit" />
|
|
|
|
|
|
|
+ <YMTableSearch :loading="loading" :search-form="searchForm" @onValueChange="onValueChange" @submit="onSubmit">
|
|
|
|
|
+ <template #created_range="{ form }">
|
|
|
|
|
+ <div style="margin-right: 20px">
|
|
|
|
|
+ <el-date-picker v-model="form.created_range" type="daterange" align="right" unlink-panels range-separator="至"
|
|
|
|
|
+ start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy年MM月dd日"
|
|
|
|
|
+ :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions" style="width: 260px">
|
|
|
|
|
+ </el-date-picker>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </YMTableSearch>
|
|
|
|
|
|
|
|
<div class="tab-container">
|
|
<div class="tab-container">
|
|
|
<el-tabs v-model="activeType" @tab-click="handleTabClick">
|
|
<el-tabs v-model="activeType" @tab-click="handleTabClick">
|
|
@@ -67,8 +76,51 @@ export default {
|
|
|
activeType: '',
|
|
activeType: '',
|
|
|
detailId: null, // 详情弹窗使用的订单ID
|
|
detailId: null, // 详情弹窗使用的订单ID
|
|
|
lotteryTypeTabs: [{ label: '全部', value: '' }, ...lotteryTypeOptions],
|
|
lotteryTypeTabs: [{ label: '全部', value: '' }, ...lotteryTypeOptions],
|
|
|
|
|
+ pickerOptions: {
|
|
|
|
|
+ shortcuts: [
|
|
|
|
|
+ {
|
|
|
|
|
+ text: '今天',
|
|
|
|
|
+ onClick(picker) {
|
|
|
|
|
+ const start = new Date()
|
|
|
|
|
+ start.setHours(0, 0, 0, 0)
|
|
|
|
|
+ const end = new Date()
|
|
|
|
|
+ end.setHours(23, 59, 59, 999)
|
|
|
|
|
+ picker.$emit('pick', [start, end])
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ text: '昨天',
|
|
|
|
|
+ onClick(picker) {
|
|
|
|
|
+ const start = new Date()
|
|
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 1)
|
|
|
|
|
+ start.setHours(0, 0, 0, 0)
|
|
|
|
|
+ const end = new Date()
|
|
|
|
|
+ end.setTime(end.getTime() - 3600 * 1000 * 24 * 1)
|
|
|
|
|
+ end.setHours(23, 59, 59, 999)
|
|
|
|
|
+ picker.$emit('pick', [start, end])
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ text: '7天内',
|
|
|
|
|
+ onClick(picker) {
|
|
|
|
|
+ const start = new Date()
|
|
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
|
|
|
|
+ start.setHours(0, 0, 0, 0)
|
|
|
|
|
+ const end = new Date()
|
|
|
|
|
+ end.setHours(23, 59, 59, 999)
|
|
|
|
|
+ picker.$emit('pick', [start, end])
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
searchForm: [
|
|
searchForm: [
|
|
|
|
|
+ { label: '注册来源', type: 'select', prop: 'from', default: '1', clearable: true, options: [
|
|
|
|
|
+ { label: 'tg用户', value: '-1' },
|
|
|
|
|
+ { label: '后台客服账号', value: '0' },
|
|
|
|
|
+ { label: '真实用户', value: '1' },
|
|
|
|
|
+ { label: '虚拟用户', value: '2' },
|
|
|
|
|
+ ] },
|
|
|
{ label: 'ID', type: 'input', prop: 'id', clearable: true },
|
|
{ label: 'ID', type: 'input', prop: 'id', clearable: true },
|
|
|
{ label: '期号', type: 'input', prop: 'issue', clearable: true },
|
|
{ label: '期号', type: 'input', prop: 'issue', clearable: true },
|
|
|
{ label: '订单号', type: 'input', prop: 'ordernum', clearable: true },
|
|
{ label: '订单号', type: 'input', prop: 'ordernum', clearable: true },
|
|
@@ -76,7 +128,9 @@ export default {
|
|
|
{ label: '会员账号', type: 'input', prop: 'first_name', clearable: true },
|
|
{ label: '会员账号', type: 'input', prop: 'first_name', clearable: true },
|
|
|
{ label: '游戏玩法', type: 'input', prop: 'gameplay', clearable: true },
|
|
{ label: '游戏玩法', type: 'input', prop: 'gameplay', clearable: true },
|
|
|
{ label: '下注号码', type: 'input', prop: 'number', clearable: true },
|
|
{ label: '下注号码', type: 'input', prop: 'number', clearable: true },
|
|
|
- { label: '注单状态', type: 'select', prop: 'lottery_status', clearable: true, options: lotteryStatusOptions }
|
|
|
|
|
|
|
+ { label: '注单状态', type: 'select', prop: 'lottery_status', clearable: true, options: lotteryStatusOptions },
|
|
|
|
|
+ { label: '下单时间', type: 'slot', prop: 'created_range', slotName: 'created_range',
|
|
|
|
|
+ default: this.getTodayRange() }
|
|
|
],
|
|
],
|
|
|
|
|
|
|
|
columns: [
|
|
columns: [
|
|
@@ -99,6 +153,23 @@ export default {
|
|
|
},
|
|
},
|
|
|
{ label: '会员ID', prop: 'member_id', width: '100' },
|
|
{ label: '会员ID', prop: 'member_id', width: '100' },
|
|
|
{ label: '会员账号', prop: 'first_name', width: 140 },
|
|
{ label: '会员账号', prop: 'first_name', width: 140 },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '注册来源',
|
|
|
|
|
+ prop: 'user_from',
|
|
|
|
|
+ html: true,
|
|
|
|
|
+ method: (row) => {
|
|
|
|
|
+ const map = {
|
|
|
|
|
+ '-1': 'tg用户',
|
|
|
|
|
+ 0: '后台客服账号',
|
|
|
|
|
+ 1: '真实用户',
|
|
|
|
|
+ 2: '虚拟用户'
|
|
|
|
|
+ }
|
|
|
|
|
+ const from = row.user_from
|
|
|
|
|
+ const text = map[from] || '--'
|
|
|
|
|
+ const color = Number(from) === 1 ? '#05A58F' : Number(from) === 2 ? '#F3061F' : '#606266'
|
|
|
|
|
+ return `<span style="color: ${color}">${text}</span>`
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
{
|
|
{
|
|
|
label: '投注内容',
|
|
label: '投注内容',
|
|
|
prop: 'number',
|
|
prop: 'number',
|
|
@@ -201,21 +272,43 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
mounted() {
|
|
mounted() {
|
|
|
- this.onSubmit(this.queryData)
|
|
|
|
|
|
|
+ // 进页面默认当天:用默认当天范围发起首次请求,保留路由参数(如 issue)
|
|
|
|
|
+ this.onSubmit({ ...this.queryData, created_range: this.getTodayRange() })
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
|
|
+ getTodayRange() {
|
|
|
|
|
+ const today = this.formatDate(new Date())
|
|
|
|
|
+ return [today + ' 00:00:00', today + ' 23:59:59']
|
|
|
|
|
+ },
|
|
|
|
|
+ formatDate(date) {
|
|
|
|
|
+ const pad = n => String(n).padStart(2, '0')
|
|
|
|
|
+ return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate())
|
|
|
|
|
+ },
|
|
|
handleTabClick() {
|
|
handleTabClick() {
|
|
|
this.onSubmit(this.queryData)
|
|
this.onSubmit(this.queryData)
|
|
|
},
|
|
},
|
|
|
onValueChange(val) { },
|
|
onValueChange(val) { },
|
|
|
onSubmit(params = {}) {
|
|
onSubmit(params = {}) {
|
|
|
const validParams = Object.keys(params).reduce((acc, key) => {
|
|
const validParams = Object.keys(params).reduce((acc, key) => {
|
|
|
- if (params[key] !== '' && params[key] !== null && params[key] !== undefined) {
|
|
|
|
|
- acc[key] = params[key]
|
|
|
|
|
|
|
+ const v = params[key]
|
|
|
|
|
+ if (v !== '' && v !== null && v !== undefined && !(Array.isArray(v) && v.length === 0)) {
|
|
|
|
|
+ acc[key] = v
|
|
|
}
|
|
}
|
|
|
return acc
|
|
return acc
|
|
|
}, {})
|
|
}, {})
|
|
|
|
|
|
|
|
|
|
+ // 时间筛选:有值时转 start_time / end_time;为空时不带时间参数
|
|
|
|
|
+ if (validParams.created_range && validParams.created_range.length === 2) {
|
|
|
|
|
+ validParams.start_time = validParams.created_range[0].split(' ')[0]
|
|
|
|
|
+ validParams.end_time = validParams.created_range[1].split(' ')[0]
|
|
|
|
|
+ }
|
|
|
|
|
+ delete validParams.created_range
|
|
|
|
|
+
|
|
|
|
|
+ // 注册来源默认真实用户
|
|
|
|
|
+ if (validParams.from === undefined) {
|
|
|
|
|
+ validParams.from = '1'
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (this.activeType !== '') {
|
|
if (this.activeType !== '') {
|
|
|
validParams.type = this.activeType
|
|
validParams.type = this.activeType
|
|
|
}
|
|
}
|