2026-04-20 18:08:00 +08:00

178 lines
6.2 KiB
Vue

<template>
<div v-loading="loading" class="dily-register-user" :data-language="language">
<el-date-picker
v-model="dateNumber"
style="margin-bottom: 10px;"
type="date"
:placeholder="$t('pages.dashboard.userGoldTop.datePlaceholder')"
value-format="yyyyMMdd"
size="mini"
:picker-options="pickerOptions"
:clearable="false"
@change="changeDateNumber"
/>
<div v-for="(item, index) in list" :key="index">
<el-card v-if="sysOriginPlatforms.includes(item.sysOrigin)" class="box-card">
<div slot="header" class="clearfix">
<span>{{ $t('pages.dashboard.userGoldTop.title', { sysOriginName: item.sysOriginName }) }}</span>
</div>
<div class="content">
<div style="font-size: 12px;color: #666;margin-bottom: 10px;">{{ $t('pages.dashboard.userGoldTop.description') }}</div>
<el-table
:data="item.items"
element-loading-text="Loading"
fit
highlight-current-row
>
<el-table-column label="No" width="50" align="center">
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column :label="$t('pages.dashboard.userGoldTop.user')" prop="roomProfile.roomName" align="center" min-width="200">
<template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
</template>
</el-table-column>
<el-table-column :label="$t('pages.dashboard.userGoldTop.income')" width="100" align="center">
<template slot-scope="scope">
<div>{{ scope.row.groupTypeQuantity['0'] || 0 }}</div>
</template>
</el-table-column>
<el-table-column :label="$t('pages.dashboard.userGoldTop.expenditure')" width="100" align="center">
<template slot-scope="scope">
<div>{{ scope.row.groupTypeQuantity['1'] || 0 }}</div>
</template>
</el-table-column>
<el-table-column :label="$t('pages.dashboard.userGoldTop.total')" prop="quantity" align="center" width="100" />
<el-table-column fixed="right" :label="$t('pages.dashboard.userGoldTop.action')" align="center" width="80">
<template slot-scope="scope">
<el-button type="text" @click.native="clickQueryDetails(scope.row)">{{ $t('pages.dashboard.userGoldTop.details') }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
</div>
<div class="user-daily-currency-gold-top-drawer">
<el-drawer
:title="$t('pages.dashboard.userGoldTop.details')"
:before-close="() => queryDetailsVisible = false"
:visible="queryDetailsVisible"
:close-on-press-escape="false"
:wrapper-closable="false"
:modal-append-to-body="true"
:append-to-body="true"
custom-class="drawer-auto-layout"
>
<div class="bar-graph-charts" style="padding: 0 10px">
<bar-graph-charts
ref="lineGraphCharts"
:key="(queryDetailsRow ? queryDetailsRow.userId : 'tmp') + '-' + language"
:charts-data="queryDetailsRow.items"
:height="(queryDetailsRow.items ? queryDetailsRow.items.length > 5 ? queryDetailsRow.items.length * 40 : queryDetailsRow.items.length * 80 : 300) + 'px'"
/>
</div>
</el-drawer>
</div>
</div>
</template>
<script>
import { listDailyUserGoldTop } from '@/api/statistics'
import BarGraphCharts from './bar-graph-charts'
import { currencyOrigins } from '@/constant/type'
import { mapGetters } from 'vuex'
import { formatDate, beforeDateObject } from '@/utils'
export default {
name: 'DilyRegisterUser',
components: { BarGraphCharts },
data() {
return {
queryDetailsVisible: false,
pickerOptions: {
disabledDate(date) {
return date.getTime() > beforeDateObject(1).getTime()
}
},
dateNumber: formatDate(beforeDateObject(new Date().getHours() > 8 ? 1 : 2), 'yyyyMMdd'),
loading: false,
list: [],
queryDetailsRow: {},
selectOrigin: currencyOrigins[0].value,
selectOriginName: currencyOrigins[0].name
}
},
computed: {
...mapGetters(['permissionsSysOriginPlatformAlls', 'language']),
sysOriginPlatforms() {
if (!this.permissionsSysOriginPlatformAlls || this.permissionsSysOriginPlatformAlls.length <= 0) {
return []
}
return this.permissionsSysOriginPlatformAlls.map(item => item.value)
}
},
created() {
this.loadOrigin()
},
methods: {
loadOrigin() {
this.loading = true
listDailyUserGoldTop(this.dateNumber).then(res => {
this.loading = false
const { body } = res
const list = body || []
this.list = list.filter(item => !item.sysOrigin || this.permissionsSysOriginPlatformAlls.some(sys => sys.value === item.sysOrigin))
}).catch(() => {
this.loading = false
})
},
querySearch(queryString, cb) {
const restaurants = currencyOrigins
const results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants
cb(results)
},
createFilter(queryString) {
return restaurant => {
return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) >= 0 ||
restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) >= 0
}
},
handleSelect(item) {
const selectedItem = item || currencyOrigins[0]
this.selectOrigin = selectedItem.value
this.selectOriginName = selectedItem.name
this.loadOrigin()
},
clickAnalyze() {
this.$router.push('/system/manager/tools/manager/gold-analyze')
},
changeDateNumber() {
this.loadOrigin()
},
clickQueryDetails(row) {
this.queryDetailsRow = row
this.queryDetailsVisible = true
}
}
}
</script>
<style scoped lang="scss">
.box-card {
margin-bottom: 10px;
padding: 10px;
.card-col {
margin-bottom: 10px;
}
}
.register-logout-count {
.date {
font-weight: bold;
line-height: 30px;
}
}
</style>