| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <template>
- <div class="cf-value admin-page">
- <div class="header">
- <h2>CF值(平台积分)管理</h2>
- <div class="filters">
- <el-input v-model="searchUserId" placeholder="用户ID搜索" style="width: 200px;" clearable @keyup.enter.native="searchBalance" />
- <el-button type="primary" @click="searchBalance">查询余额</el-button>
- </div>
- </div>
- <el-tabs v-model="activeTab">
- <el-tab-pane label="余额列表" name="balances">
- <el-table :data="balanceList" v-loading="loadingBalance" border stripe>
- <el-table-column prop="id" label="ID" width="70" />
- <el-table-column prop="userId" label="用户ID" width="100" />
- <el-table-column prop="familyId" label="家庭ID" width="100" />
- <el-table-column prop="totalEarned" label="累计获得" width="100" />
- <el-table-column prop="available" label="可用" width="80" />
- <el-table-column prop="frozen" label="冻结" width="80" />
- <el-table-column prop="withdrawn" label="已提现" width="80" />
- <el-table-column prop="exchanged" label="已兑换" width="80" />
- <el-table-column label="操作" width="100">
- <template slot-scope="{ row }">
- <el-button type="text" size="small" @click="viewLogs(row.userId)">流水</el-button>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination v-if="balanceTotal > 0" :current-page="balancePage" :page-size="balanceSize" :total="balanceTotal" layout="prev, pager, next" @current-change="pageBalances" />
- </el-tab-pane>
- <el-tab-pane label="流水查询" name="logs">
- <div class="filters">
- <el-input v-model="logUserId" placeholder="用户ID" style="width: 200px;" clearable @keyup.enter.native="searchLogs" />
- <el-button type="primary" @click="searchLogs">查询流水</el-button>
- </div>
- <el-table :data="logList" v-loading="loadingLog" border stripe>
- <el-table-column prop="id" label="ID" width="70" />
- <el-table-column prop="userId" label="用户ID" width="80" />
- <el-table-column prop="type" label="类型" width="100">
- <template slot-scope="{ row }">
- <el-tag :type="typeTag(row.type)" size="small">{{ row.type }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column prop="amount" label="数量" width="80" />
- <el-table-column prop="balanceAfter" label="变动后余额" width="100" />
- <el-table-column prop="refType" label="来源" width="130" />
- <el-table-column prop="refId" label="关联ID" width="80" />
- <el-table-column prop="remark" label="备注" min-width="160" show-overflow-tooltip />
- <el-table-column prop="createdAt" label="时间" width="160" />
- </el-table>
- <el-pagination v-if="logTotal > 0" :current-page="logPage" :page-size="logSize" :total="logTotal" layout="prev, pager, next" @current-change="pageLogs" />
- </el-tab-pane>
- </el-tabs>
- </div>
- </template>
- <script>
- import { getCfValueBalance, getCfValueLogs, getCfValueAllBalances } from '@/api/admin'
- export default {
- data() {
- return {
- activeTab: 'balances',
- searchUserId: '',
- logUserId: '',
- // Balances
- balanceList: [],
- loadingBalance: false,
- balancePage: 1,
- balanceSize: 20,
- balanceTotal: 0,
- // Logs
- logList: [],
- loadingLog: false,
- logPage: 1,
- logSize: 20,
- logTotal: 0
- }
- },
- mounted() {
- this.loadBalances()
- },
- methods: {
- typeTag(type) {
- const map = { earn: 'success', spend: 'warning', freeze: 'info', unfreeze: 'info', withdraw: 'primary' }
- return map[type] || 'info'
- },
- loadBalances() {
- this.loadingBalance = true
- getCfValueAllBalances({ page: this.balancePage, size: this.balanceSize }).then(res => {
- if (res.code === 200) {
- this.balanceList = res.data.records || []
- this.balanceTotal = res.data.total || 0
- }
- }).finally(() => { this.loadingBalance = false })
- },
- pageBalances(page) {
- this.balancePage = page
- this.loadBalances()
- },
- searchBalance() {
- if (!this.searchUserId) { this.loadBalances(); return }
- this.loadingBalance = true
- getCfValueBalance({ userId: this.searchUserId }).then(res => {
- if (res.code === 200) {
- this.balanceList = [res.data]
- this.balanceTotal = 1
- }
- }).finally(() => { this.loadingBalance = false })
- },
- viewLogs(userId) {
- this.logUserId = String(userId)
- this.activeTab = 'logs'
- this.searchLogs()
- },
- searchLogs() {
- if (!this.logUserId) return
- this.loadingLog = true
- this.logPage = 1
- getCfValueLogs({ userId: this.logUserId, page: 1, size: this.logSize }).then(res => {
- if (res.code === 200) {
- this.logList = res.data.records || []
- this.logTotal = res.data.total || 0
- }
- }).finally(() => { this.loadingLog = false })
- },
- pageLogs(page) {
- this.logPage = page
- this.searchLogs()
- }
- }
- }
- </script>
|