feat(custom): 增加游戏数据统计
This commit is contained in:
@@ -2,8 +2,8 @@ import { getToken } from '@/utils'
|
|||||||
import { resolveResError } from './helpers'
|
import { resolveResError } from './helpers'
|
||||||
|
|
||||||
export function reqResolve(config) {
|
export function reqResolve(config) {
|
||||||
// if (config.url.includes('/dice')) {
|
// if (config.url.includes('/admin')) {
|
||||||
// config.baseURL = import.meta.env.VITE_GAME_API
|
// config.baseURL = import.meta.env.VITE_ADMIN_API
|
||||||
// } else {
|
// } else {
|
||||||
// config.baseURL = import.meta.env.VITE_BASE_API
|
// config.baseURL = import.meta.env.VITE_BASE_API
|
||||||
// }
|
// }
|
||||||
|
|||||||
@@ -20,4 +20,10 @@ export default {
|
|||||||
|
|
||||||
// 添加修改游戏
|
// 添加修改游戏
|
||||||
addGame: (data) => request.post('/game/edit', data),
|
addGame: (data) => request.post('/game/edit', data),
|
||||||
|
|
||||||
|
// 当前投注用户
|
||||||
|
nowUser: () => request.post('/now/draw/user', {}),
|
||||||
|
|
||||||
|
// 全部投注用户
|
||||||
|
allUser: () => request.post('/all/draw/user', {}),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,15 +14,14 @@
|
|||||||
<div>开奖记录:</div>
|
<div>开奖记录:</div>
|
||||||
<n-button type="primary" @click="openData">预览</n-button>
|
<n-button type="primary" @click="openData">预览</n-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div ml-20 flex>
|
<div ml-20 flex items-center>
|
||||||
<div>点杀状态:</div>
|
<div>本局记录:</div>
|
||||||
<n-switch
|
<n-button type="primary" @click="openJl(1)">预览</n-button>
|
||||||
v-model:value="val"
|
</div>
|
||||||
:checked-value="1"
|
<div ml-20 flex items-center>
|
||||||
:unchecked-value="2"
|
<div>全部记录:</div>
|
||||||
@update:value="handleUpdateValue"
|
<n-button type="primary" @click="openJl(2)">预览</n-button>
|
||||||
/>
|
</div>
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div flex>
|
<div flex>
|
||||||
@@ -96,6 +95,39 @@
|
|||||||
:max-height="600"
|
:max-height="600"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:bordered="false"
|
:bordered="false"
|
||||||
|
remote
|
||||||
|
/>
|
||||||
|
</n-card>
|
||||||
|
</n-modal>
|
||||||
|
<!-- 游戏记录 -->
|
||||||
|
<n-modal v-model:show="jlModal">
|
||||||
|
<n-card
|
||||||
|
style="width: 900px"
|
||||||
|
:title="jlTitle"
|
||||||
|
:bordered="false"
|
||||||
|
size="huge"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<span>
|
||||||
|
总投注(豆子):
|
||||||
|
<span text-red>{{ jlData.total_number }}</span>
|
||||||
|
</span>
|
||||||
|
<span ml-20>
|
||||||
|
总积分:
|
||||||
|
<span text-red>{{ jlData.total_integral }}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<n-data-table
|
||||||
|
:loading="jlLoading"
|
||||||
|
:columns="jlColumns"
|
||||||
|
:data="jlData.data"
|
||||||
|
:max-height="600"
|
||||||
|
:pagination="false"
|
||||||
|
:bordered="false"
|
||||||
|
remote
|
||||||
|
@update:sorter="handleSorterChange"
|
||||||
/>
|
/>
|
||||||
</n-card>
|
</n-card>
|
||||||
</n-modal>
|
</n-modal>
|
||||||
@@ -232,6 +264,91 @@ const openData = async () => {
|
|||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const jlModal = ref(false)
|
||||||
|
const jlTitle = ref('')
|
||||||
|
|
||||||
|
const jlData = ref({})
|
||||||
|
|
||||||
|
const jlColumns = ref([
|
||||||
|
{
|
||||||
|
title: '昵称',
|
||||||
|
key: 'User',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '电话',
|
||||||
|
key: 'Phone',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '期数',
|
||||||
|
key: 'Periods',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '下注豆子',
|
||||||
|
key: 'TotalCount',
|
||||||
|
align: 'center',
|
||||||
|
sorter: true,
|
||||||
|
sortOrder: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '赢积分',
|
||||||
|
key: 'NumberSum',
|
||||||
|
align: 'center',
|
||||||
|
sorter: true,
|
||||||
|
sortOrder: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '购买号码',
|
||||||
|
key: 'PeriodsNum',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '时间',
|
||||||
|
key: 'DrawTime',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
const jlLoading = ref(false)
|
||||||
|
|
||||||
|
const openJl = async (e) => {
|
||||||
|
try {
|
||||||
|
jlModal.value = true
|
||||||
|
jlTitle.value = e === 1 ? '本局游戏记录' : '全部游戏记录'
|
||||||
|
jlLoading.value = true
|
||||||
|
const res = e === 1 ? await api.nowUser() : await api.allUser()
|
||||||
|
jlData.value = res.data
|
||||||
|
} catch (error) {
|
||||||
|
$message.error(error.msg)
|
||||||
|
}
|
||||||
|
jlLoading.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSorterChange = (sorter) => {
|
||||||
|
if (!jlLoading.value) {
|
||||||
|
jlLoading.value = true
|
||||||
|
switch (sorter.columnKey) {
|
||||||
|
case 'TotalCount':
|
||||||
|
jlColumns.value[3].sortOrder = !sorter ? false : sorter.order
|
||||||
|
jlData.value.data = jlData.value.data.sort((a, b) => {
|
||||||
|
if (sorter.order === 'descend') return b.NumberSum - a.NumberSum
|
||||||
|
return a.NumberSum - b.NumberSum
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'NumberSum':
|
||||||
|
jlColumns.value[4].sortOrder = !sorter ? false : sorter.order
|
||||||
|
jlData.value.data = jlData.value.data.sort((a, b) => {
|
||||||
|
if (sorter.order === 'descend') return b.NumberSum - a.NumberSum
|
||||||
|
return a.NumberSum - b.NumberSum
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
|
jlLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
<style lang="scss" scoped></style>
|
||||||
|
|||||||
@@ -3,17 +3,22 @@
|
|||||||
<n-grid class="mb-10" x-gap="12">
|
<n-grid class="mb-10" x-gap="12">
|
||||||
<n-gi :span="24">
|
<n-gi :span="24">
|
||||||
<div flex>
|
<div flex>
|
||||||
<n-card w-500>
|
<n-card w-250>
|
||||||
|
<n-statistic label="用户总赢积分" tabular-nums>
|
||||||
|
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.win" />
|
||||||
|
</n-statistic>
|
||||||
|
</n-card>
|
||||||
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="用户积分(留存)" tabular-nums>
|
<n-statistic label="用户积分(留存)" tabular-nums>
|
||||||
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.integral" />
|
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.integral" />
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-card ml-10 w-500>
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="用户豆子(留存)" tabular-nums>
|
<n-statistic label="总豆子" tabular-nums>
|
||||||
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.pulse" />
|
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.pulse" />
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-card ml-10 w-500>
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="今日新增用户" tabular-nums>
|
<n-statistic label="今日新增用户" tabular-nums>
|
||||||
<n-number-animation
|
<n-number-animation
|
||||||
ref="numberAnimationInstRef"
|
ref="numberAnimationInstRef"
|
||||||
@@ -22,7 +27,7 @@
|
|||||||
/>
|
/>
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-card ml-10 w-500>
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="用户总流水(元)" tabular-nums>
|
<n-statistic label="用户总流水(元)" tabular-nums>
|
||||||
<n-number-animation
|
<n-number-animation
|
||||||
ref="numberAnimationInstRef"
|
ref="numberAnimationInstRef"
|
||||||
@@ -32,7 +37,7 @@
|
|||||||
/>
|
/>
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-card ml-10 w-500>
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="总佣金(积分)" tabular-nums>
|
<n-statistic label="总佣金(积分)" tabular-nums>
|
||||||
<n-number-animation
|
<n-number-animation
|
||||||
ref="numberAnimationInstRef"
|
ref="numberAnimationInstRef"
|
||||||
@@ -42,7 +47,7 @@
|
|||||||
/>
|
/>
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-card ml-10 w-500>
|
<n-card ml-10 w-250>
|
||||||
<n-statistic label="平台总用户" tabular-nums>
|
<n-statistic label="平台总用户" tabular-nums>
|
||||||
<n-number-animation
|
<n-number-animation
|
||||||
ref="numberAnimationInstRef"
|
ref="numberAnimationInstRef"
|
||||||
@@ -65,6 +70,30 @@
|
|||||||
<n-input v-model:value="queryParams.word" :style="{ width: '30%' }" />
|
<n-input v-model:value="queryParams.word" :style="{ width: '30%' }" />
|
||||||
</n-input-group>
|
</n-input-group>
|
||||||
</n-gi>
|
</n-gi>
|
||||||
|
<n-gi :span="24" mt-10>
|
||||||
|
<div>
|
||||||
|
<span>筛选状态:</span>
|
||||||
|
<n-radio-group v-model:value="queryParams.status">
|
||||||
|
<n-radio-button
|
||||||
|
v-for="song in songs"
|
||||||
|
:key="song.value"
|
||||||
|
:value="song.value"
|
||||||
|
:label="song.label"
|
||||||
|
/>
|
||||||
|
</n-radio-group>
|
||||||
|
</div>
|
||||||
|
</n-gi>
|
||||||
|
<n-gi :span="10">
|
||||||
|
<div mt-10 flex items-center>
|
||||||
|
<span w-100>时间筛选:</span>
|
||||||
|
<n-date-picker
|
||||||
|
v-model:formatted-value="queryParams.time"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
type="datetimerange"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</n-gi>
|
||||||
<n-gi span="24" mt-10 flex items-center>
|
<n-gi span="24" mt-10 flex items-center>
|
||||||
<n-button type="primary" @click="getList">查询</n-button>
|
<n-button type="primary" @click="getList">查询</n-button>
|
||||||
<n-button ml-10 @click="clear">重置</n-button>
|
<n-button ml-10 @click="clear">重置</n-button>
|
||||||
@@ -118,7 +147,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</n-col>
|
</n-col>
|
||||||
<n-col :span="10" v-if="tabVal === '4'">
|
<n-col v-if="tabVal === '4'" :span="10">
|
||||||
<div mt-10 flex items-center>
|
<div mt-10 flex items-center>
|
||||||
<span w-100>条件筛选:</span>
|
<span w-100>条件筛选:</span>
|
||||||
<n-select
|
<n-select
|
||||||
@@ -174,6 +203,8 @@ const loading = ref(false)
|
|||||||
const queryParams = ref({
|
const queryParams = ref({
|
||||||
word: '',
|
word: '',
|
||||||
selectKey: null,
|
selectKey: null,
|
||||||
|
status: '',
|
||||||
|
time: null,
|
||||||
})
|
})
|
||||||
|
|
||||||
const queryData = ref({
|
const queryData = ref({
|
||||||
@@ -187,8 +218,28 @@ const cardData = ref({
|
|||||||
today_user: 0,
|
today_user: 0,
|
||||||
total_number: 0,
|
total_number: 0,
|
||||||
total_user: 0,
|
total_user: 0,
|
||||||
|
win: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const songs = ref([
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: '未使用',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 3,
|
||||||
|
label: '用户赢',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 4,
|
||||||
|
label: '用户输',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 5,
|
||||||
|
label: '已过期',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
const selectOptions = [
|
const selectOptions = [
|
||||||
{
|
{
|
||||||
label: '用户昵称',
|
label: '用户昵称',
|
||||||
@@ -240,6 +291,13 @@ const columns = ref([
|
|||||||
sorter: true,
|
sorter: true,
|
||||||
sortOrder: false,
|
sortOrder: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '赢积分',
|
||||||
|
align: 'center',
|
||||||
|
key: 'win',
|
||||||
|
sorter: true,
|
||||||
|
sortOrder: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '用户豆子',
|
title: '用户豆子',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
@@ -319,6 +377,8 @@ const clear = () => {
|
|||||||
queryParams.value = {
|
queryParams.value = {
|
||||||
word: '',
|
word: '',
|
||||||
selectKey: null,
|
selectKey: null,
|
||||||
|
status: '',
|
||||||
|
time: null,
|
||||||
}
|
}
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
@@ -326,7 +386,11 @@ const clear = () => {
|
|||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const query_data = {}
|
const query_data = {
|
||||||
|
Status: queryParams.value.status || '',
|
||||||
|
StartTime: queryParams.value.time === null ? '' : queryParams.value.time[0] || '',
|
||||||
|
EndTime: queryParams.value.time === null ? '' : queryParams.value.time[1] || '',
|
||||||
|
}
|
||||||
switch (queryParams.value.selectKey) {
|
switch (queryParams.value.selectKey) {
|
||||||
case 0:
|
case 0:
|
||||||
query_data['UserName'] = queryParams.value.word
|
query_data['UserName'] = queryParams.value.word
|
||||||
@@ -348,6 +412,7 @@ const getList = async () => {
|
|||||||
cardData.value.integral = res.data.integral
|
cardData.value.integral = res.data.integral
|
||||||
cardData.value.pulse = res.data.pulse
|
cardData.value.pulse = res.data.pulse
|
||||||
cardData.value.referee = res.data.referee
|
cardData.value.referee = res.data.referee
|
||||||
|
cardData.value.win = res.data.total_win
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
$message.error(error.msg)
|
$message.error(error.msg)
|
||||||
}
|
}
|
||||||
@@ -573,13 +638,6 @@ const handleSorterChange = (sorter) => {
|
|||||||
if (!loading.value) {
|
if (!loading.value) {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
switch (sorter.columnKey) {
|
switch (sorter.columnKey) {
|
||||||
case 'pulse':
|
|
||||||
columns.value[5].sortOrder = !sorter ? false : sorter.order
|
|
||||||
data.value = data.value.sort((a, b) => {
|
|
||||||
if (sorter.order === 'descend') return b.pulse - a.pulse
|
|
||||||
return a.pulse - b.pulse
|
|
||||||
})
|
|
||||||
break
|
|
||||||
case 'integral':
|
case 'integral':
|
||||||
columns.value[4].sortOrder = !sorter ? false : sorter.order
|
columns.value[4].sortOrder = !sorter ? false : sorter.order
|
||||||
data.value = data.value.sort((a, b) => {
|
data.value = data.value.sort((a, b) => {
|
||||||
@@ -587,6 +645,20 @@ const handleSorterChange = (sorter) => {
|
|||||||
return a.integral - b.integral
|
return a.integral - b.integral
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
case 'win':
|
||||||
|
columns.value[5].sortOrder = !sorter ? false : sorter.order
|
||||||
|
data.value = data.value.sort((a, b) => {
|
||||||
|
if (sorter.order === 'descend') return b.win - a.win
|
||||||
|
return a.win - b.win
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'pulse':
|
||||||
|
columns.value[6].sortOrder = !sorter ? false : sorter.order
|
||||||
|
data.value = data.value.sort((a, b) => {
|
||||||
|
if (sorter.order === 'descend') return b.pulse - a.pulse
|
||||||
|
return a.pulse - b.pulse
|
||||||
|
})
|
||||||
|
break
|
||||||
}
|
}
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user