You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
6.5 KiB
253 lines
6.5 KiB
<template>
|
|
<!-- 这是客户金豆余额页面 -->
|
|
<div class="filter-box">
|
|
<el-form :model="detailY" ref="ruleFormRef">
|
|
<el-form-item prop="jwcode">
|
|
<el-text class="mx-1" size="large">精网号:</el-text>
|
|
<el-input
|
|
v-model="detailY.jwcode"
|
|
placeholder="请输入精网号"
|
|
style="width: 220px"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item prop="area">
|
|
<el-text class="mx-1" size="large">地区:</el-text>
|
|
<el-select
|
|
v-model="detailY.area"
|
|
placeholder="请选择所属地区"
|
|
style="width: 240px"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="item in areaArray"
|
|
:key="item"
|
|
:label="item"
|
|
:value="item"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @click="search()"
|
|
>查询</el-button
|
|
>
|
|
<el-button type="success" @click="reset(ruleFormRef)"
|
|
>重置</el-button
|
|
>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
<div class="table-box">
|
|
<div>
|
|
现有金豆: 付费金豆:{{ getObj.jinbiBuy }} 免费金豆:{{
|
|
getObj.jinbiFree
|
|
}} 历史消费:{{ getObj.jinbiCostTotal }}
|
|
</div>
|
|
<el-table
|
|
:data="tableData"
|
|
style="width: 100%"
|
|
:default-sort="{ prop: 'jinbiCostTotal', order: 'descending' }"
|
|
height="584px"
|
|
@sort-change="handleSortChange"
|
|
>
|
|
<el-table-column type="index" label="序号" width="100px" fixed="left">
|
|
<template #default="scope">
|
|
<span>{{
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
|
|
}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column fixed="left" prop="nickname" label="姓名" width="150" />
|
|
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
|
|
<el-table-column prop="ipAddress" label="所属地区" width="120" />
|
|
|
|
<el-table-column prop="jinbi" sortable label="金豆数量" width="120">
|
|
</el-table-column>
|
|
<el-table-column prop="jinbiBuy" sortable label="付费金豆" width="120">
|
|
</el-table-column>
|
|
<el-table-column prop="jinbiFree" sortable label="免费金豆" width="120">
|
|
</el-table-column>
|
|
<el-table-column
|
|
sortable
|
|
width="120"
|
|
prop="jinbiCostTotal"
|
|
label="历史消费"
|
|
></el-table-column>
|
|
<el-table-column
|
|
sortable
|
|
prop="jinbiCostbeenTotal"
|
|
width="160"
|
|
label="历史付费金豆"
|
|
></el-table-column>
|
|
<el-table-column
|
|
sortable
|
|
prop="jinbifreebeenTotal"
|
|
width="160"
|
|
label="历史免费金豆"
|
|
></el-table-column>
|
|
</el-table>
|
|
<!-- 分页 -->
|
|
<div class="pagination">
|
|
<el-pagination
|
|
background
|
|
:page-size="getObj.pageSize"
|
|
:page-sizes="[5, 10, 20, 50, 100]"
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|
:total="total"
|
|
@size-change="handlePageSizeChange"
|
|
@current-change="handleCurrentChange"
|
|
>
|
|
</el-pagination>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { ref, reactive } from 'vue'
|
|
|
|
import type { FormInstance } from 'element-plus'
|
|
|
|
import API from '@/util/http'
|
|
// 充值明细表格
|
|
const tableData = ref([])
|
|
//分页总条目
|
|
const total = ref(100)
|
|
//搜索表单数据
|
|
const detailY = reactive({ jwcode: '', area: '' })
|
|
const ruleFormRef = ref<FormInstance>()
|
|
let areaArray = ref<string[]>([])
|
|
let getObj = ref({
|
|
pageNum: 1,
|
|
pageSize: 50,
|
|
jinbiBuy: 0,
|
|
jinbiCostTotal: 0,
|
|
jinbiFree: 0
|
|
})
|
|
// 精网号去空格
|
|
const trimJwCode = () => {
|
|
if (detailY.jwcode) {
|
|
detailY.jwcode = detailY.jwcode.replace(/\s/g, '');
|
|
}
|
|
}
|
|
const search = function () {
|
|
trimJwCode();
|
|
getInit({})
|
|
getCount()
|
|
}
|
|
const handleCurrentChange = function (val) {
|
|
getObj.value.pageNum = val
|
|
getInit({})
|
|
}
|
|
//初始化
|
|
const getInit = async function ({
|
|
sortField = '',
|
|
sortOrder = ''
|
|
}: {
|
|
sortField?: string
|
|
sortOrder?: string
|
|
}) {
|
|
try {
|
|
// 发送POST请求
|
|
const result = await API({
|
|
url: '/dou/getYve',
|
|
data: {
|
|
pageNum: getObj.value.pageNum,
|
|
pageSize: getObj.value.pageSize,
|
|
yve: {
|
|
jwcode: detailY.jwcode,
|
|
ipAddress: detailY.area,
|
|
sortField: sortField,
|
|
sortOrder: sortOrder
|
|
}
|
|
}
|
|
})
|
|
tableData.value = result.data.list
|
|
total.value = result.data.total
|
|
} catch (error) {
|
|
console.log('请求失败', error)
|
|
// 在这里可以处理错误逻辑,比如显示错误提示等
|
|
}
|
|
}
|
|
const handleSortChange = (column) => {
|
|
const { prop, order } = column
|
|
if (order === 'ascending') {
|
|
getInit({ sortField: prop, sortOrder: 'ASC' })
|
|
} else if (order === 'descending') {
|
|
getInit({ sortField: prop, sortOrder: 'DESC' })
|
|
}
|
|
}
|
|
|
|
const handlePageSizeChange = (val) => {
|
|
getObj.value.pageSize = val
|
|
getObj.value.pageNum = 1
|
|
getInit({})
|
|
}
|
|
// 重置
|
|
const reset = function (formEl: FormInstance | undefined) {
|
|
if (!formEl) return
|
|
formEl.resetFields()
|
|
}
|
|
|
|
const getArea = async () => {
|
|
const result = await API({
|
|
url: '/dou/getIp'
|
|
})
|
|
console.log('获取地区', result.data)
|
|
if (result.code == 200) {
|
|
areaArray.value = result.data
|
|
}
|
|
}
|
|
const getCount = async () => {
|
|
try {
|
|
const result = await API({
|
|
url: '/dou/getYveTotal',
|
|
// 传递jwcode和ipAddress参数,可以让金币数随查询变化
|
|
data: {
|
|
jwcode: detailY.jwcode,
|
|
ipAddress: detailY.area
|
|
}
|
|
})
|
|
if (result.code === 200) {
|
|
const { jinbiBuy, jinbiFree, jinbiCostTotal } = result.data
|
|
getObj.value.jinbiBuy = jinbiBuy
|
|
getObj.value.jinbiFree = jinbiFree
|
|
getObj.value.jinbiCostTotal = jinbiCostTotal
|
|
}
|
|
} catch (error) {
|
|
console.log('获取统计数据失败', error)
|
|
}
|
|
}
|
|
getArea()
|
|
getCount()
|
|
getInit({})
|
|
</script>
|
|
<style scoped lang="scss">
|
|
.filter-box {
|
|
width: 100%;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 20px;
|
|
padding-bottom: 0px;
|
|
box-sizing: border-box;
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
margin-bottom: 20px;
|
|
border-radius: 5px;
|
|
.el-form {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
row-gap: 20px;
|
|
column-gap: 20px;
|
|
}
|
|
}
|
|
.table-box {
|
|
width: 100%;
|
|
padding: 20px;
|
|
box-sizing: border-box;
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
border-radius: 5px;
|
|
}
|
|
.pagination {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-top: 20px;
|
|
}
|
|
</style>
|