fix:项目初始化

This commit is contained in:
ouyangxiu
2025-06-10 17:11:41 +07:00
commit db9bffd2c5
713 changed files with 159746 additions and 0 deletions
+120
View File
@@ -0,0 +1,120 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input @clear="onClear('gold')" clearable placeholder="请输入金额" v-model.number="searchData.gold" />
</el-form-item>
<el-form-item>
<el-date-picker :default-time="['00:00:00', '23:59:59']" end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" />
</el-form-item>
<el-form-item>
<el-button @click="onSearch()" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="tableData" element-loading-text="拼命加载中" v-loading="loading" border height="700" highlight-current-row style="width: 100%">
<el-table-column fixed="left" align="center" label="金币金额">
<template slot-scope="scope">{{ scope.row.gold | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="总售卖金额">
<template slot-scope="scope">{{ scope.row.totalSaleMoney | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="总销售数量">
<template slot-scope="scope">{{ scope.row.saleCount }}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50, 100]" :total="totals" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
</div>
</template>
<script>
import { goldSaleinfoList } from '@/api/tran/ticketSaleinfo'
export default {
name: 'Saleinfo',
data() {
return {
loading: true, // 列表加载状态
totals: 0, // 数据总条数
time: undefined,
gold: undefined,
searchData: {
param: {
// 表单参数
gold: undefined, // id
start: undefined, // 开始时间
end: undefined, // 结束时间
},
pageNum: 1,
pageSize: 20,
},
tableData: [],
}
},
mounted() {
this.onSubmit()
},
methods: {
// TODO:请求金币售卖统计列表
onSubmit() {
this.loading = true
if (this.time) {
this.searchData.param.start = this.time[0]
this.searchData.param.end = this.time[1]
} else {
this.searchData.param.start = undefined
this.searchData.param.end = undefined
}
let param = JSON.parse(JSON.stringify(this.searchData))
param.param.gold = this.searchData.param.gold * 100
goldSaleinfoList(this.searchData).then((res) => {
if (res.code === 200) {
this.tableData = res.data.list
this.totals = res.data.total
} else {
this.tableData = []
this.totals = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// 刷新
refreshView() {
this.onSubmit()
},
// 清理搜索框
onClear(key) {
this.searchData.param[key] = undefined
this.onSubmit()
},
// 切换列表条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.onSubmit()
},
// 切换列表页码
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.onSubmit()
},
},
}
</script>
+128
View File
@@ -0,0 +1,128 @@
<template>
<div class="pf-warpper avlist">
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input placeholder="请输入渠道" clearable v-model="searchData.param.channel" @clear="onClear('channel')" />
</el-form-item>
<el-form-item>
<el-date-picker end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button @click="onSearch" icon="el-icon-search" plain type="primary">搜索</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="resData" element-loading-text="拼命加载中" border height="750" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" label="时间" width="160">
<template slot-scope="scope">{{ scope.row.from | BeiJingTime}}</template>
</el-table-column>
<el-table-column align="center" label="渠道">
<template slot-scope="scope">{{ scope.row.channel }}</template>
</el-table-column>
<el-table-column align="center" label="完成率" width="100" show-overflow-tooltip>
<template slot-scope="scope">{{
scope.row.completeRate === 0 ? 0 : scope.row.completeRate * 100 + '%'
}}</template>
</el-table-column>
<el-table-column align="center" label="总订单" width="100">
<template slot-scope="scope">{{ scope.row.orders }}</template>
</el-table-column>
<el-table-column align="center" label="完成金额" width="200">
<template slot-scope="scope">{{
scope.row.payCoins | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="完成订单" width="100" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.payOrders }}</template>
</el-table-column>
<el-table-column align="center" label="总金额" width="200">
<template slot-scope="scope">{{ scope.row.total | changeMoneyYuan }}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[50, 100, 200, 300, 500]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
</div>
</template>
<script>
// 引入模块
import { hourStatList } from '@/api/tran/stat'
export default {
name: 'HourStat',
data() {
return {
time: undefined,
// 请求列表参数
searchData: {
pageNum: 1,
pageSize: 50,
param: {
end: undefined, // "string",结束时间
start: undefined, // "string",开始时间
channel: undefined, // 0,
},
},
resData: [], // el-table表格数据
total: 0, // 数据总条数
loading: true, // 列表加载状态
}
},
mounted() {
this.getList()
},
methods: {
// TODO:请求每小时充值成功率数据
getList() {
this.loading = true
if (this.time) {
this.searchData.param.start = this.time[0]
this.searchData.param.end = this.time[1]
} else {
this.searchData.param.start = undefined
this.searchData.param.end = undefined
}
hourStatList(this.searchData).then((res) => {
if (res.code === 200) {
this.resData = res.data.list
this.total = res.data.total
} else {
this.resData = []
this.total = 0
this.$message.error('请求列表失败!')
}
this.loading = false
})
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 50
this.getList()
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val
this.getList()
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val
this.getList()
},
// 清空某一项筛选列表
onClear(key) {
this.searchData.param[key] = undefined
this.getList()
},
},
}
</script>
+366
View File
@@ -0,0 +1,366 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" :model="searchData" class="form-inline" size="mini">
<el-form-item>
<el-input @clear="onClear('userId')" clearable placeholder="请输入用户ID" v-model="searchData.userId" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('uuid')" clearable placeholder="请输入设备ID" v-model="searchData.uuid" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('devType')" clearable placeholder="请选择设备类型" v-model="searchData.devType">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in devTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('rchgUse')" clearable placeholder="请选择充值用途" v-model="searchData.rchgUse">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in rchgUseList" />
</el-select>
</el-form-item>
<el-form-item>
<el-input @clear="onClear('tradeNo')" clearable placeholder="请输入订单号" v-model="searchData.tradeNo" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('oid')" clearable placeholder="请输入第三方订单号" v-model="searchData.oid" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('phoneNo')" clearable placeholder="请输入手机号" v-model="searchData.phoneNo" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('ipAddr')" clearable placeholder="请输入IP地址" v-model="searchData.ipAddr" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('payMode')" clearable placeholder="请选择支付模式" v-model="searchData.payMode">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in payModeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('sysType')" clearable placeholder="请选择系统类型" v-model="searchData.sysType" filterable>
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in sysTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('isSwell')" clearable placeholder="请选择是否膨胀" v-model="searchData.isSwell" filterable>
<el-option :key="true" label="是" :value="true" />
<el-option :key="false" label="否" :value="false" />
</el-select>
</el-form-item>
<el-form-item>
<el-input v-model="searchData.payChannel" clearable placeholder="请输入支付渠道" @clear="onClear('payChannel')" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('status')" clearable placeholder="请选择充值状态" v-model="searchData.status">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in statusList" />
</el-select>
</el-form-item>
<el-form-item label="订单生成">
<el-date-picker
:default-time="['00:00:00', '23:59:59']"
end-placeholder="结束日期"
range-separator=""
start-placeholder="开始日期"
type="datetimerange"
v-model="timeG"
value-format="yyyy-MM-ddTHH:mm:ss+08:00"/>
</el-form-item>
<el-form-item label="订单支付">
<el-date-picker
:default-time="['00:00:00', '23:59:59']"
end-placeholder="结束日期"
range-separator=""
start-placeholder="开始日期"
type="datetimerange"
v-model="timeW"
value-format="yyyy-MM-ddTHH:mm:ss+08:00"/>
</el-form-item>
<el-form-item>
<el-button @click="onSearch()" icon="el-icon-search" plain type="primary">搜索</el-button>
<!-- <el-button @click="handleExport" icon="el-icon-download" plain type="primary">导出</el-button> -->
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
</el-form-item>
<el-form-item style="float: right" label-width="15px">
充值总金额<span style="color: red">{{ totalRchgAmount }}</span>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="tableData" element-loading-text="拼命加载中" v-loading="loading" @sort-change="sortChange" border height="700" highlight-current-row style="width: 100%">
<el-table-column align="center" fixed="left" label="用户id">
<template slot-scope="scope">{{ scope.row.userId }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="用户名" width="150">
<template slot-scope="scope">{{ scope.row.userName }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="卡片名称" width="150">
<template slot-scope="scope">{{ scope.row.cardName }}</template>
</el-table-column>
<el-table-column align="center" label="手机号" width="120">
<template slot-scope="scope">{{ scope.row.phoneNo }}</template>
</el-table-column>
<el-table-column align="center" label="订单产生时间" width="160">
<template slot-scope="scope">{{ scope.row.createdAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="订单完成日期" sortable width="160">
<template slot-scope="scope">{{ scope.row.finishedAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="充值用途">
<template slot-scope="scope">{{ scope.row.rchgUse | changeRchgUse }}</template>
</el-table-column>
<el-table-column align="center" label="订单号" width="240">
<template slot-scope="scope">{{ scope.row.tradeNo }}</template>
</el-table-column>
<el-table-column align="center" label="第三方订单号" width="240">
<template slot-scope="scope">{{ scope.row.oid }}</template>
</el-table-column>
<el-table-column align="center" label="支付模式">
<template slot-scope="scope">{{ scope.row.payMode | changepayMode }}</template>
</el-table-column>
<el-table-column align="center" label="支付渠道" width="150">
<template slot-scope="scope">{{ scope.row.payChannel }}</template>
</el-table-column>
<el-table-column align="center" label="充值金额" sortable width="120">
<template slot-scope="scope">{{ scope.row.amount | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="实际到账金额" width="120">
<template slot-scope="scope">{{ scope.row.realAmount | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="状态">
<template slot-scope="scope">{{ scope.row.status | changestatus }}</template>
</el-table-column>
<el-table-column align="center" label="是否膨胀" width="100">
<template slot-scope="scope">
<el-button :type="scope.row.isSwell ? 'success' : 'danger'" plain size="mini">{{ scope.row.isSwell ? "是" : "否" }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="游戏划拨订单" width="220">
<template slot-scope="scope">{{ scope.row.trfOrder }}</template>
</el-table-column>
<el-table-column align="center" label="上下分处理状态" width="120">
<template slot-scope="scope">{{ scope.row.trfStatus | changeRtfstatus }}</template>
</el-table-column>
<el-table-column align="center" label="系统类型">
<template slot-scope="scope">{{ scope.row.sysType | changeSysType }}</template>
</el-table-column>
<el-table-column align="center" label="商区码" width="150">
<template slot-scope="scope">{{ scope.row.districtCode }}</template>
</el-table-column>
<el-table-column align="center" label="充值对象">
<template slot-scope="scope">{{ scope.row.rchgFor }}</template>
</el-table-column>
<el-table-column align="center" label="赠送金额">
<template slot-scope="scope">{{ scope.row.backGiftVal | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="设备类型" prop="devType" width="100">
<template slot-scope="scope">{{ scope.row.devType }}</template>
</el-table-column>
<el-table-column align="center" label="是否是直推用户" width="120">
<template slot-scope="scope">{{ scope.row.isDirect ? '是' : '不是' }}</template>
</el-table-column>
<el-table-column align="center" label="ip地址" width="120">
<template slot-scope="scope">{{ scope.row.ipAddr }}</template>
</el-table-column>
<el-table-column align="center" label="支付账号">
<template slot-scope="scope">{{ scope.row.payAcc }}</template>
</el-table-column>
<el-table-column align="center" label="代充平台支付凭证" width="150">
<template slot-scope="scope">
<ShowImg style="width: 40px; height: 40px; margin: 0 auto; line-height: 40px" :urls="scope.row.proof"></ShowImg>
<!-- type="daichong" -->
</template>
</el-table-column>
<el-table-column align="center" label="渠道平台充值类型">
<template slot-scope="scope">{{ scope.row.platPayMode }}</template>
</el-table-column>
<el-table-column align="center" label="费率">
<template slot-scope="scope">{{ scope.row.payRate }}</template>
</el-table-column>
<el-table-column align="center" label="用户折扣卡ID" width="100">
<template slot-scope="scope">{{ scope.row.userDiscountCardId }}</template>
</el-table-column>
<el-table-column align="center" label="充值使用ID" width="100">
<template slot-scope="scope">{{ scope.row.rchgUseId }}</template>
</el-table-column>
<el-table-column align="center" label="商人Id">
<template slot-scope="scope">{{ scope.row.traderId }}</template>
</el-table-column>
<el-table-column align="center" label="推广序列">
<template slot-scope="scope">{{ scope.row.promSeqe }}</template>
</el-table-column>
<el-table-column align="center" label="支付链接" width="450">
<template slot-scope="scope">
<el-button slot="reference" @click="doCopy(scope.row.payUrl)">复制链接</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="支付链接模式" width="100">
<template slot-scope="scope">{{ scope.row.payUrlMode }}</template>
</el-table-column>
<el-table-column align="center" label="备注" width="100" show-overflow-tooltip="">
<template slot-scope="scope">{{ scope.row.remarks }}</template>
</el-table-column>
<el-table-column align="center" label="通知第三方上分情况状态" width="200">
<template slot-scope="scope">{{ scope.row.traderNotify }}</template>
</el-table-column>
<el-table-column align="center" label="第三方支付时间" width="160">
<template slot-scope="scope">{{ scope.row.paymentAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="订单修改日期" width="160">
<template slot-scope="scope">{{ scope.row.updatedAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="第三方下单成功时间" width="160">
<template slot-scope="scope">{{ scope.row.progressAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="设备id" width="350">
<template slot-scope="scope">{{ scope.row.uuid }}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 100]"
:total="totals"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"/>
</div>
</div>
</template>
<script>
import { devTypeList, payModeList, statusList, rchgUseList, rcgTypeList, sysTypeList } from '@/filters/tran/recharge'
import { getRechargeList } from '@/api/tran/recharge'
import ShowImg from '@/components/ShowImg/index.vue'
export default {
name: 'Recharge',
components: {
ShowImg
},
data() {
return {
devTypeList: devTypeList(),
payModeList: payModeList(),
statusList: statusList(),
rchgUseList: rchgUseList(),
rcgTypeList: rcgTypeList(),
sysTypeList: sysTypeList(),
loading: true, // 列表加载状态
totals: 0, // 数据总条数
totalRchgAmount: undefined,
timeG: undefined,
timeW: undefined,
searchData: {
// 表单参数
userId: undefined, // 用户id
uuid: undefined, // 设备id
devType: null, // 设备类型
tradeNo: undefined, // 订单号
oid: undefined, // 第三方返回,核对账单信息
phoneNo: undefined, // 手机号
payMode: undefined, // 支付模式
status: undefined, // 订单处理状态
finishAtsort: undefined, // 交易时间 -1--倒序 1--正序
amountSort: undefined, // 金额 -1--倒序 1--正序
startAt: undefined, // 开始时间
endAt: undefined, // 结束时间
payStartAt: undefined, // 订单支付 时间
rchgUse: undefined,
rcgTypeList: undefined,
pageNum: 1,
pageSize: 20
},
tableData: []
}
},
mounted() {
this.onSubmit()
},
methods: {
doCopy(str) {
this.$copyText(str).then(() => {
this.$notify({
type: 'success',
message: '複製成功,趕快去分享吧。'
})
})
},
// TODO:请求充值列表数据
onSubmit() {
this.loading = true
if (this.timeG) {
this.searchData.startAt = this.timeG[0]
this.searchData.endAt = this.timeG[1]
} else {
this.searchData.startAt = undefined
this.searchData.endAt = undefined
}
if (this.timeW) {
this.searchData.payStartAt = this.timeW[0]
this.searchData.payEndAt = this.timeW[1]
} else {
this.searchData.payStartAt = undefined
this.searchData.payEndAt = undefined
}
getRechargeList(this.searchData).then(res => {
if (res.code === 200) {
this.tableData = res.data.orders
this.totals = res.data.totalCount
this.totalRchgAmount = res.data.totalRchgAmount / 100
} else {
this.tableData = []
this.totals = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// 升序降序
sortChange(columns) {
if (columns.order === 'ascending') {
this.searchData.finishAtsort = -1
this.searchData.amountSort = 1
} else if (columns.order === 'descending') {
this.searchData.finishAtsort = 1
this.searchData.amountSort = -1
}
this.onSubmit()
},
// 刷新
refreshView() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// 清理搜索框
onClear(key) {
this.searchData[key] = undefined
this.onSubmit()
},
// 切换列表条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.onSubmit()
},
// 切换列表页码
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.onSubmit()
}
}
}
</script>
@@ -0,0 +1,271 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="800px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :model="form" :rules="rules" label-position="center" label-width="120px" ref="ruleForm">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="支付渠道名字" prop="channelName">
<el-input placeholder="请输入支付渠道名字" v-model="form.channelName" style="width:180px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="激活时间段" prop="activePeriod">
<el-input placeholder="请输入时间段" v-model="form.activePeriod" style="width:180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="权重" prop="weight">
<el-input placeholder="使用数字" v-model.number="form.weight" style="width:180px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="渠道费率" prop="rate">
<el-input placeholder v-model="form.rate" style="width:180px">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="充值对象" prop="rchgFor">
<el-select placeholder="请选择充值对象" v-model="form.rchgFor" clearable>
<el-option label="app" value="app"></el-option>
<el-option label="game" value="game"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否激活" prop="active">
<el-switch :active-value="true" :inactive-value="false" active-color="#13ce66" inactive-color="#ff4949" v-model="form.active"></el-switch>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="金额类别" prop="category">
<el-select placeholder="请选择类别" v-model="form.amountType" clearable>
<el-option label="范围金额" value="range"></el-option>
<el-option label="固定金额" value="fixed"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.amountType == 'fixed'">
<el-form-item label="金额种类" prop="amounts">
<el-input placeholder v-model="form.amounts" style="width:180px" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.amountType == 'range'">
<el-form-item label="最小金额" prop="minMoney">
<el-input placeholder v-model.number="form.minMoney" style="width:180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.amountType == 'range'">
<el-form-item label="最大金额" prop="maxMoney">
<el-input placeholder v-model.number="form.maxMoney" style="width:180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="支付方式" prop="channelPlatType">
<el-select filterable allow-create default-first-option v-model="form.channelPlatType" placeholder="请选择支付方式" clearable>
<el-option v-for="item in payTypeList" :key="item.value" :label="item.value" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="扩展的充值类型" prop="rchgType">
<el-select filterable allow-create default-first-option v-model="form.rchgType" placeholder="请选择扩展充值类型" clearable>
<el-option v-for="item in payTypeList" :key="item.value" :label="item.value" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="扩展的充值类型名字" prop="rchgTypeName">
<el-select filterable allow-create default-first-option v-model="form.rchgTypeName" placeholder="请选择" clearable>
<el-option v-for="item in payTypeList" :key="item.value" :label="item.label" :value="item.label" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="渠道" prop="cid">
<el-select placeholder="请选择渠道" v-model="form.channelId" clearable>
<el-option v-for="(item, index) in pchanneList" :key="index" :label="item.cName" :value="item.cid"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="要求的系统类型" prop="sysType">
<el-select placeholder="请选择系统类型" v-model="form.sysType" clearable>
<el-option label="苹果" value="ios"></el-option>
<el-option label="安卓" value="android"></el-option>
<el-option label="移动" value="bothmb"></el-option>
<el-option label="PC" value="pc"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { rechargeChanAdd, paychannelList, rechargeChanEidt } from '@/api/tran'
import { payTypeList } from '@/filters/tran/rechargeProvider'
export default {
name: 'AddOrEdit',
props: ['data'],
data() {
return {
Visible: true,
title: '',
pchanneList: [],
payTypeList: payTypeList(),
rules: {
weight: [{ required: true, message: '必填', trigger: 'blur' }],
},
// 表单数据
form: {
active: false,
activePeriod: undefined,
amountType: undefined,
amounts: undefined,
channelId: undefined,
channelName: undefined,
channelPlatType: undefined,
maxMoney: undefined,
minMoney: undefined,
rate: undefined,
rchgFor: undefined,
rchgType: undefined,
rchgTypeName: undefined,
sysType: undefined,
weight: undefined,
},
}
},
mounted() {
this.getPaychanneList()
this.title = this.data.title
if (this.title === '编辑') {
this.form = { ...this.data.data }
this.$set(
this.form,
'minMoney',
this.form.minMoney ? Number(this.form.minMoney) / 100 : 0
)
this.$set(
this.form,
'maxMoney',
this.form.maxMoney ? Number(this.form.maxMoney) / 100 : 0
)
if (this.form.amounts) {
const a = []
this.form.amounts.filter((item) => {
a.push(item / 100)
})
this.form.amounts = this.form.amounts ? a.toString() : ''
}
} else {
this.form = {
active: false,
activePeriod: undefined,
amountType: undefined,
amounts: undefined,
channelId: undefined,
channelName: undefined,
channelPlatType: undefined,
maxMoney: undefined,
minMoney: undefined,
rate: undefined,
rchgType: undefined,
rchgTypeName: undefined,
sysType: undefined,
weight: undefined,
}
}
},
methods: {
//TODO:新增支付渠道列表数据
add(data) {
rechargeChanAdd(data).then((res) => {
if (res.code === 200) {
this.$message.success('新增成功')
this.Visible = false
} else {
this.$message.error('新增失败')
}
})
},
//TODO:编辑支付渠道列表数据
update(data) {
rechargeChanEidt(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.Visible = false
} else {
this.$message.error('更新失败')
}
})
},
//TODO:请求渠道列表数据
async getPaychanneList() {
paychannelList({ pageNum: 1, pageSize: 1000, param: {} }).then((res) => {
if (res.code === 200) {
this.pchanneList = res.data.list
} else {
this.pchanneList = []
this.$message.error('请求失败')
}
})
},
// 提交按钮
submit() {
const data = { ...this.form }
if (data.amountType === 'range') {
data.minMoney = Number(data.minMoney) * 100
data.maxMoney = Number(data.maxMoney) * 100
data.amounts = undefined
} else if (data.amountType === 'fixed') {
const a = []
if (data.amounts) {
data.amounts.split(',').filter((item) => {
a.push(Number(item) * 100)
})
data.amounts = a
data.minMoney = undefined
data.maxMoney = undefined
} else {
data.amounts = []
}
}
if (this.title === '新增') {
this.add(data)
} else if (this.title === '编辑') {
this.update(data)
}
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
+220
View File
@@ -0,0 +1,220 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" class="form-inline" label-width="80px" size="mini">
<el-form-item>
<el-button type="primary" icon="el-icon-refresh-right" plain @click="getList()">刷新</el-button>
<el-button @click="add" icon="el-icon-circle-plus-outline" plain type="success">新增</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="list" border height="740" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" fixed label="支付渠道名字" width="180">
<template slot-scope="scope">{{ scope.row.channelName }}</template>
</el-table-column>
<el-table-column align="center" label="是否激活" width="120">
<template slot-scope="scope">
<el-tooltip content="请在编辑中修改" placement="top">
<el-switch :active-value="true" :inactive-value="false" active-color="#13ce66" disabled inactive-color="#ff4949" v-model="scope.row.active"></el-switch>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="权重">
<template slot-scope="scope">{{ scope.row.weight }}</template>
</el-table-column>
<el-table-column align="center" label="激活时间段" width="120">
<template slot-scope="scope">{{
scope.row.activePeriod
}}</template>
</el-table-column>
<el-table-column align="center" label="金额类别" width="120">
<template slot-scope="scope">{{
scope.row.amountType | changeCategory
}}</template>
</el-table-column>
<el-table-column align="center" label="金额种类(单位:元)" width="240">
<template slot-scope="scope" v-if="scope.row.amountType === 'fixed' ? true : false">{{ scope.row.amounts | changeAmountTypes }}</template>
</el-table-column>
<el-table-column align="center" label="最小金额(单位:元)">
<template slot-scope="scope" v-if="scope.row.amountType === 'range' ? true : false">{{ scope.row.minMoney | iTofixed }}</template>
</el-table-column>
<el-table-column align="center" label="最大金额(单位:元)">
<template slot-scope="scope" v-if="scope.row.amountType === 'range' ? true : false">{{ scope.row.maxMoney | iTofixed }}</template>
</el-table-column>
<el-table-column align="center" label="渠道ID" width="170">
<template slot-scope="scope">{{ scope.row.channelId }}</template>
</el-table-column>
<el-table-column align="center" label="渠道费率">
<template slot-scope="scope">{{ scope.row.rate }}</template>
</el-table-column>
<el-table-column align="center" label="充值对象">
<template slot-scope="scope">{{ scope.row.rchgFor | changerchgType }}</template>
</el-table-column>
<el-table-column align="center" label="渠道的充值平台类型" width="170">
<template slot-scope="scope">{{ scope.row.channelPlatType| changePType }}</template>
</el-table-column>
<el-table-column align="center" label="扩展的充值类型" width="170">
<template slot-scope="scope">{{ scope.row.rchgType }}</template>
</el-table-column>
<el-table-column align="center" label="扩展的充值类型名字" width="170">
<template slot-scope="scope">{{ scope.row.rchgTypeName }}</template>
</el-table-column>
<el-table-column align="center" label="要求的系统类型" width="170">
<template slot-scope="scope">{{ scope.row.sysType }}</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="200">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="修改时间" width="200">
<template slot-scope="scope">{{
scope.row.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<template slot-scope="scope">
<el-button @click="handleEdit('edit', scope.row)" size="mini" type="primary">编辑</el-button>
<el-button @click="handleDelete(scope.row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[50, 100, 200, 300, 500]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<AddOrEdit :data="editData" v-if="editVisible" @close="closeEdit" ref="addOrEdit"></AddOrEdit>
</div>
</template>
<script>
import { rechargeChanList, rechargeChanDel } from '@/api/tran'
import AddOrEdit from './components/AddOrEdit'
export default {
name: 'RechargeProvider',
components: { AddOrEdit },
filters: {
changeCategory: function (val) {
if (val === 'range') {
return '范围金额'
} else if (val === 'fixed') {
return '固定金额'
}
},
changerchgType: function (val) {
if (val === 'app') {
return 'app'
} else if (val === 'game') {
return 'game'
}
},
changeAmountTypes: function (val) {
const a = []
if (val) {
val.filter((item) => {
a.push(item / 100)
})
}
return a
},
},
data() {
return {
editVisible: false,
// 编辑数据
editData: {
title: '新增',
data: {},
},
total: 0,
loading: false,
list: [],
dialogTitle: undefined,
searchData: {
pageNum: 1,
pageSize: 50,
param: {},
},
}
},
mounted() {
this.getList()
},
methods: {
//TODO:请求支付渠道列表
async getList() {
this.loading = true
rechargeChanList(this.searchData).then((res) => {
if (res.code === 200) {
this.total = res.data.total
this.list = res.data.list
} else {
this.total = 0
this.list = []
this.$message.error('请求支付渠道列表失败')
}
this.loading = false
})
},
//TODO:删除支付渠道数据
handleDelete(row) {
this.$confirm('确认删除当前渠道?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
rechargeChanDel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getList()
this.$message.success('删除成功')
} else {
this.$message.error('删除失败')
}
})
})
},
// 关闭编辑弹窗
closeEdit() {
this.editData = {
title: '新增',
data: {},
}
this.editVisible = false
this.getList()
},
// 新增按钮
add() {
this.editData = {
title: '新增',
data: {},
}
this.editVisible = true
},
// 编辑按钮
handleEdit(index, row) {
this.editData = {
title: '编辑',
data: row,
}
this.editVisible = true
},
// 切换每页条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.getList()
},
// 翻页
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.getList()
},
},
}
</script>
@@ -0,0 +1,156 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="支付渠道名字">
<el-input placeholder="请输入支付渠道名字" v-model="form.cName" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="渠道id">
<el-input placeholder="请输入渠道id" v-model="form.cid" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12" v-if="this.title === '新增'">
<el-form-item label="预付额度(元)">
<el-input placeholder="请输入预付额度" v-model.number="form.prepayment" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="商户id">
<el-input placeholder="请输入商户id" v-model="form.mercID" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="预付剩余额度报警阀值">
<el-input placeholder="请输入预付剩余额度报警阀值" v-model.number="form.leftPrepaymentWarnValue" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="查询订单url">
<el-input placeholder="请输入查询订单url" style="width: 500px" v-model="form.queryUrl" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="充值url">
<el-input placeholder="请输入充值url" style="width: 500px" v-model="form.rchgUrl" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="回调ur">
<el-input placeholder="请输入回调ur" style="width: 500px" v-model="form.callBackUrl" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="H5回调ur">
<el-input placeholder="请输入H5回调ur" style="width: 500px" v-model="form.h5CallBackUrl" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="appSecret">
<el-input placeholder="请输入appSecret" style="width: 500px" v-model="form.appSecret" />
</el-form-item>
</el-col>
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<el-form-item label="是否使用引导页">
<el-select v-model="form.useLeadPage" placeholder="请选择是否使用引导页" style="width:500px">
<el-option :value="true" label="使用"></el-option>
<el-option :value="false" label="不使用"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { addPaychannel, editPaychannel } from '@/api/tran'
import { changeMoneyYuan, changeMoneyFen } from '@/filters/index'
export default {
name: 'AddOrEdit',
props: ['data'],
data() {
return {
Visible: true,
title: '',
// 表单数据
form: {
leftPrepaymentWarnValue: undefined,
rchgUrl: undefined,
queryUrl: undefined,
prepayment: undefined,
mercID: undefined,
cid: undefined,
callBackUrl: undefined,
cName: undefined,
appSecret: undefined,
useLeadPage: undefined,
h5CallBackUrl: undefined,
},
}
},
mounted() {
this.title = this.data.title
if (this.title === '编辑') {
this.form = { ...this.data.data }
this.form.leftPrepaymentWarnValue = changeMoneyYuan(
this.form.leftPrepaymentWarnValue
)
}
},
methods: {
//TODO:新增支付渠道管理数据
add(data) {
addPaychannel(data).then((res) => {
if (res.code === 200) {
this.$message.success('新增成功')
this.Visible = false
} else {
this.$message.error('新增失败')
}
})
},
//TODO:编辑支付渠道管理数据
update(data) {
editPaychannel(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.Visible = false
} else {
this.$message.error('更新失败')
}
})
},
// 提交按钮
submit() {
const data = JSON.parse(JSON.stringify(this.form))
data.prepayment = data.prepayment * 100
data.leftPrepaymentWarnValue = changeMoneyFen(
data.leftPrepaymentWarnValue
)
if (this.title === '新增') {
this.add(data)
} else if (this.title === '编辑') {
this.update(data)
}
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
@@ -0,0 +1,83 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-03-14 15:22:03
* @LastEditTime: 2022-06-07 16:09:21
* @LastEditors: Please set LastEditors
* @FilePath: /comics-admin/src/views/tran/rechargeProviderManage/components/edit.vue
-->
<template>
<el-dialog :close-on-click-modal="false" title="编辑预付额度" :visible.sync="Visible" @close="close" center class="ac-dialog" width="700px">
<el-form :inline="true" :model="form" class="demo-form-inline" label-position="right" label-width="250px">
<el-row :gutter="24">
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<el-form-item label="现有预付额度">
<el-input v-model.number="recharge" disabled>
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<el-form-item label="充值额度">
<el-input placeholder="请输入充值额度" v-model.number="coin">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="dialog-footer" slot="footer">
<el-button @click="Visible=false"> </el-button>
<el-button @click="submit" type="primary"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { changePreMoney } from '@/api/tran'
import { changeMoneyYuan, changeMoneyFen } from '@/filters/index'
export default {
name: 'Edit',
props: ['data'],
data() {
return {
Visible: true,
coin: 0, // 加金币
recharge: 0,
// 表单数据
form: {
prepayment: undefined,
},
}
},
created() {
this.form = { ...this.data.data }
this.recharge = changeMoneyYuan(this.form.prepayment)
},
methods: {
// TODO:修改预付额度
submit() {
const data = {
id: this.form.id,
cid: this.form.cid,
chanName: this.form.cName,
mercId: this.form.mercID,
prepaymentAmount: changeMoneyFen(this.coin),
}
changePreMoney(data).then((res) => {
if (res.code === 200) {
this.$message.success('添加成功')
this.Visible = false
} else {
this.$message.error(res.data)
}
})
},
// 关闭编辑
close() {
this.$emit('close', false)
},
},
}
</script>
@@ -0,0 +1,208 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" class="form-inline" label-width="80px" size="mini">
<el-form-item>
<el-input v-model.number="searchData.param.cName" clearable placeholder="请输入支付渠道名字" @clear="onClear('cName')" />
</el-form-item>
<el-form-item>
<el-select v-model="searchData.param.useLeadPage" clearable placeholder="请选择是否使用引导页" @clear="onClear('useLeadPage')">
<el-option :value="true" label="使用"></el-option>
<el-option :value="false" label="不使用"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" plain type="primary" @click="onSearch">搜索</el-button>
<el-button icon="el-icon-refresh-right" plain type="primary" @click="getList()">刷新</el-button>
<el-button icon="el-icon-circle-plus-outline" plain type="success" @click="add">新增</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="list" border height="740" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" fixed label="支付渠道名字" width="180">
<template slot-scope="scope">{{ scope.row.cName }}</template>
</el-table-column>
<el-table-column align="center" label="回调url" width="270">
<template slot-scope="scope">{{ scope.row.callBackUrl }}</template>
</el-table-column>
<el-table-column align="center" label="H5回调url" width="270">
<template slot-scope="scope">{{ scope.row.h5CallBackUrl }}</template>
</el-table-column>
<el-table-column align="center" label="预付额度(单位:元)" width="240">
<template slot-scope="scope">{{scope.row.prepayment | changeMoneyYuan}}</template>
</el-table-column>
<el-table-column align="center" label="预付剩余额度报警阀值" width="170">
<template slot-scope="scope">{{ scope.row.leftPrepaymentWarnValue | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="商户id" width="100">
<template slot-scope="scope">{{ scope.row.mercID }}</template>
</el-table-column>
<el-table-column align="center" label="支付渠道ID" width="100">
<template slot-scope="scope">{{ scope.row.cid }}</template>
</el-table-column>
<el-table-column align="center" label="appSecret" width="170">
<template slot-scope="scope">{{ scope.row.appSecret }}</template>
</el-table-column>
<el-table-column align="center" label="查询订单url" width="170">
<template slot-scope="scope">{{ scope.row.queryUrl }}</template>
</el-table-column>
<el-table-column align="center" label="充值url" width="170">
<template slot-scope="scope">{{ scope.row.rchgUrl }}</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="180">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="修改时间" width="180">
<template slot-scope="scope">{{
scope.row.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="300">
<template slot-scope="scope">
<el-button @click="handleEdit('edit', scope.row)" size="mini" type="primary">编辑</el-button>
<el-button @click="handlePreMoney(scope.row)" size="mini" type="primary">编辑预付额度</el-button>
<el-button @click="handleDelete(scope.row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[50, 100, 200, 300, 500]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<AddOrEdit :data="editData" v-if="editVisible" @close="closeEdit" ref="addOrEdit"></AddOrEdit>
<EditPreMoney :data="editData" v-if="preMoneyVisible" @close="closeEdit"></EditPreMoney>
</div>
</template>
<script>
import { paychannelList, delPaychannel } from '@/api/tran'
import AddOrEdit from './components/AddOrEdit.vue'
import EditPreMoney from './components/edit.vue'
export default {
name: 'RechargeProviderManage',
components: { AddOrEdit, EditPreMoney },
data() {
return {
total: 0,
loading: false,
list: [],
editVisible: false,
preMoneyVisible: false,
searchData: {
pageNum: 1,
pageSize: 50,
param: {
useLeadPage: undefined,
cName: undefined,
},
},
// 编辑数据
editData: {
title: '新增',
data: {},
},
dialogTitle: undefined,
}
},
mounted() {
this.getList()
},
methods: {
//TODO:请求支付渠道管理列表数据
async getList() {
this.loading = true
paychannelList(this.searchData).then((res) => {
if (res.code === 200) {
this.list = res.data.list
this.total = res.data.total
} else {
this.list = []
this.total = 0
this.$message.error('请求支付渠道管理数据失败')
}
this.loading = false
})
},
//TODO:删除支付渠道管理列表数据
handleDelete(row) {
this.$confirm('确认删除当前渠道?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
delPaychannel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getList()
this.$message.success('删除成功')
} else {
this.$message.error('操作失败')
}
})
})
},
// 清空某一项筛选列表
onClear(key) {
this.searchData.param[key] = undefined
this.getList()
},
// 关闭编辑弹窗
closeEdit() {
this.editData = {
title: '新增',
data: {},
}
this.editVisible = false
this.preMoneyVisible = false
this.getList()
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 10
this.getList()
},
// 新增按钮
add() {
this.editVisible = true
this.editData = {
title: '新增',
data: {},
}
},
// 编辑按钮
handleEdit(index, row) {
this.editVisible = true
row.prepayment = row.prepayment / 100
this.editData = {
title: '编辑',
data: row,
}
},
handlePreMoney(row) {
this.preMoneyVisible = true
this.editData = {
title: '编辑预付额度',
data: row,
}
},
// 切换每页条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.getList()
},
// 翻页
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.getList()
},
},
}
</script>
+372
View File
@@ -0,0 +1,372 @@
<!-- 提现列表 -->
<template>
<div class="pf-warpper">
<!-- 查询表单 -->
<el-row class="table-form">
<el-form :inline="true" :model="searchData" class="form-inline" label-width="80px" ref="form" size="mini">
<el-form-item>
<el-input @clear="onClear('orderNo')" clearable placeholder="请输入购买订单号" v-model="searchData.orderNo" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('userId')" clearable placeholder="请输入用户ID" v-model="searchData.userId" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('videoId')" clearable placeholder="请输入视频ID" v-model="searchData.videoId" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('mobile')" clearable placeholder="请输入手机号" v-model="searchData.mobile" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('comicsId')" clearable placeholder="请输入漫画Id" v-model="searchData.comicsId" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('tranType')" clearable placeholder="请选择交易类型" v-model="searchData.tranType">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in TranTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('currencyType')" clearable placeholder="请选择货币类型" v-model="searchData.currencyType">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in CurrencyTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('mark')" clearable placeholder="收支类型" v-model="searchData.mark">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in markList" />
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker :default-time="['00:00:00', '23:59:59']" end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" />
</el-form-item>
<el-form-item label-width="15px">
<el-button @click="onSearch()" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
<el-button @click="exportExcel" icon="el-icon-download" plain type="primary">导出</el-button>
</el-form-item>
<el-form-item v-if="
searchData.tranType === 21 ||
searchData.tranType === 23
" style="float: right" label-width="15px">
售卖金额:<span style="color: red">{{ totalCoin | changeMoneyYuan }}</span>
</el-form-item>
<el-form-item v-if="
searchData.tranType === 21 ||
searchData.tranType === 23
" style="float: right" label-width="15px">
售卖次数:<span style="color: red">{{ saleCount }}</span>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table v-loading="loading" :data="tableData" border height="700" highlight-current-row style="width: 100%">
<el-table-column align="center" label="用户ID">
<template slot-scope="scope">{{ scope.row.userID }}</template>
</el-table-column>
<el-table-column align="center" label="商区码" width="150">
<template slot-scope="scope">{{ scope.row.districtCode }}</template>
</el-table-column>
<el-table-column align="center" label="推广序列">
<template slot-scope="scope">{{ scope.row.promSeqe }}</template>
</el-table-column>
<el-table-column align="center" label="购买订单号" width="240">
<template slot-scope="scope">{{ scope.row.orderNo }}</template>
</el-table-column>
<el-table-column align="center" label="货币类型" width="100">
<template slot-scope="scope">{{
scope.row.currencyType | changeCurrencyType
}}</template>
</el-table-column>
<el-table-column align="center" label="交易类型" width="130">
<template slot-scope="scope">{{
scope.row.tranType | changeTranType
}}</template>
</el-table-column>
<el-table-column align="center" label="交易的金币数量" width="140">
<template slot-scope="scope">{{
scope.row.coinAmount | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="赠送的金币" width="140">
<template slot-scope="scope">{{
scope.row.giftCoin | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="收支类型">
<template slot-scope="scope">{{
scope.row.mark | changeMark
}}</template>
</el-table-column>
<el-table-column align="center" label="交易金额" width="140">
<template slot-scope="scope">{{
scope.row.moneyPrePrice | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="支付类型">
<template slot-scope="scope">{{ scope.row.payType }}</template>
</el-table-column>
<el-table-column align="center" label="视频ID">
<template slot-scope="scope">{{ scope.row.videoId }}</template>
</el-table-column>
<el-table-column align="center" label="图文ID">
<template slot-scope="scope">{{ scope.row.graphicId }}</template>
</el-table-column>
<el-table-column align="center" label="漫画ID">
<template slot-scope="scope">{{ scope.row.comicsId }}</template>
</el-table-column>
<el-table-column align="center" label="发布者ID">
<template slot-scope="scope">{{ scope.row.publisherId }}</template>
</el-table-column>
<el-table-column align="center" label="合集ID">
<template slot-scope="scope">{{ scope.row.videoCollId }}</template>
</el-table-column>
<el-table-column align="center" label="备注" width="240">
<template slot-scope="scope">{{ scope.row.record }}</template>
</el-table-column>
<el-table-column align="center" label="作品收益" width="150">
<template slot-scope="scope">{{
scope.row.workIncome | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="钱包剩余的收益" width="150">
<template slot-scope="scope">{{
scope.row.income | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="钱包剩余签到返现收益" width="150">
<template slot-scope="scope">{{
scope.row.checkinCashbackIncome | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="钱包剩余的金额" width="150">
<template slot-scope="scope">{{
scope.row.recharge | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="充值等级">
<template slot-scope="scope">{{
scope.row.rechargeLevel
}}</template>
</el-table-column>
<el-table-column align="center" label="状态">
<template slot-scope="scope">{{
scope.row.status | runningStatus
}}</template>
</el-table-column>
<el-table-column align="center" label="系统类型">
<template slot-scope="scope">{{ scope.row.sysType }}</template>
</el-table-column>
<el-table-column align="center" label="商人Id" width="100">
<template slot-scope="scope">{{ scope.row.traderId }}</template>
</el-table-column>
<el-table-column align="center" label="vip卡名称" width="150">
<template slot-scope="scope">{{ scope.row.vipTitle }}</template>
</el-table-column>
<el-table-column align="center" label="价格">
<template slot-scope="scope">{{
scope.row.price | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="观影券数量" width="100">
<template slot-scope="scope">{{ scope.row.movieTickets }}</template>
</el-table-column>
<el-table-column align="center" label="折扣">
<template slot-scope="scope">{{
scope.row.discount === 0 ? 0 : scope.row.discount + "%"
}}</template>
</el-table-column>
<el-table-column align="center" label="卡ID" width="150">
<template slot-scope="scope">{{ scope.row.cardId }}</template>
</el-table-column>
<el-table-column align="center" label="vip卡等级" width="150">
<template slot-scope="scope">{{
scope.row.vipType | changevipType
}}</template>
</el-table-column>
<el-table-column align="center" label="会员开始时间" width="150">
<template slot-scope="scope">{{
scope.row.vipStartAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="会员结束时间" width="150">
<template slot-scope="scope">{{
scope.row.vipEndAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="是否直推">
<template slot-scope="scope">{{
scope.row.isDirect ? "是" : "不是"
}}</template>
</el-table-column>
<el-table-column align="center" label="交易时间" width="180">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="记录描述" width="250">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="scope.row.desc" placement="top">
<div style="
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
">
{{ scope.row.desc }}
</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="vip等级">
<template slot-scope="scope">{{ scope.row.vipType }}</template>
</el-table-column>
<!-- <el-table-column align="center" label="vip名称">
<template slot-scope="scope">{{ scope.row.vipTitle }}</template>
</el-table-column> -->
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50, 100]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
</div>
</template>
<script>
import { getWaterList, getWaterExport } from '@/api/tran/runningList'
import { TranTypeList, CurrencyTypeList } from '@/filters/tran/runningList'
import { markList } from '@/filters/tran/runningList'
export default {
name: 'RunningList',
data() {
return {
total: 0,
loading: true, // 列表加载状态
time: undefined,
TranTypeList: TranTypeList(),
CurrencyTypeList: CurrencyTypeList(),
markList: markList(),
totalCoin: 0, // 售卖金额
saleCount: 0, // 售卖次数
// 请求数据
searchData: {
mobile: undefined, // 手机号
orderNo: undefined, // 购买订单号
tranType: undefined, // 交易类型:
startTime: undefined, // 开始时间
endTime: undefined, // 结束时间
userId: undefined, // 用户id
videoId: undefined, // 视频id
currencyType: undefined, // 交易方式
mark: undefined, // 收支类型
comicsId: undefined, // 漫画Id
pageNum: 1,
pageSize: 20,
},
tableData: [],
}
},
filters: {
runningStatus(v) {
switch (v) {
case -1:
return '失败'
case 0:
return '进行中'
case 1:
return '成功'
}
},
},
mounted() {
// 获取表格列表
this.onSubmit()
},
methods: {
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// TODO:请求流水列表数据
onSubmit(data) {
this.loading = true
if (this.time) {
this.searchData.startTime = this.time[0]
this.searchData.endTime = this.time[1]
} else {
this.searchData.startTime = undefined
this.searchData.endTime = undefined
}
getWaterList(this.searchData).then((res) => {
if (res.code === 200) {
this.tableData = res.data.infos
this.total = res.data.totalCount
this.saleCount = res.data.saleCount
this.totalCoin = res.data.totalCoin
} else {
this.tableData = []
this.total = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
// TODO:导出流水列表数据
exportExcel() {
if (this.time) {
this.searchData.startTime = this.time[0]
this.searchData.endTime = this.time[1]
} else {
this.searchData.startTime = undefined
this.searchData.endTime = undefined
}
getWaterExport(this.searchData).then((res) => {
if (res.code) {
this.$message.error('导出列表失败!')
} else {
const a = document.createElement('a')
var blob = new Blob([res], {
type: 'application/vnd.ms-excel;charset=utf-8',
})
const t = new Date().valueOf()
const url = window.URL.createObjectURL(blob)
a.setAttribute('href', url)
a.download = `流水列表${t}.xlsx`
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}
})
},
// 刷新
refreshView() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// 清理列表请求筛选项
onClear(key) {
this.searchData[key] = undefined
this.onSubmit()
},
// 切换每页条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.onSubmit()
},
// 翻页
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.onSubmit()
},
},
}
</script>
+280
View File
@@ -0,0 +1,280 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input @clear="onClear('id')" clearable placeholder="请输入ID" v-model.number="searchData.param.id" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('topicId')" clearable placeholder="请选择视频分类" v-model="searchData.param.topicId">
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in videoType" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('sort')" clearable placeholder="请选择排序" v-model="searchData.param.sort">
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in sortList" />
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker :default-time="['00:00:00', '23:59:59']" end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" />
</el-form-item>
<el-form-item>
<el-button @click="onSearch()" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
<el-button @click="exportExcel" icon="el-icon-download" plain type="primary">导出</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="tableData" element-loading-text="拼命加载中" v-loading="loading" border height="700" highlight-current-row style="width: 100%">
<el-table-column align="center" fixed="left" width="300" label="标题">
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" width="160" label="总销售金额">
<template slot-scope="scope">{{
scope.row.totalSaleMoney | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column label="上架时间" width="160">
<template slot-scope="scope" width="160">{{
scope.row.addedTime | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="封面" width="100">
<template slot-scope="scope">
<ShowImg style="width: 70px; height: 40px; margin: 0 auto" :urls="scope.row.coverImg"></ShowImg>
</template>
</el-table-column>
<el-table-column align="center" label="格式类型" width="120">
<template slot-scope="scope">{{
scope.row.formatType | filterSaleTypeStatus
}}</template>
</el-table-column>
<el-table-column fixed="left" align="center" label="id">
<template slot-scope="scope">{{ scope.row.id }}</template>
</el-table-column>
<el-table-column align="center" label="观影券使用数量" width="150">
<template slot-scope="scope">{{
scope.row.movieTicketCount
}}</template>
</el-table-column>
<el-table-column align="center" label="预售结束时间(预览)" width="150">
<template slot-scope="scope">{{
scope.row.preSaleEndAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="预售(折扣)">
<template slot-scope="scope">{{
scope.row.preSaleDiscount
}}</template>
</el-table-column>
<el-table-column align="center" label="预售价格" prop="devType">
<template slot-scope="scope">{{
scope.row.preSalePrice | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="总预售金额" prop="devType" width="160">
<template slot-scope="scope">{{
scope.row.totalPreSaleMoney | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="售价" width="160">
<template slot-scope="scope">{{
scope.row.price | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="总销售数量" width="120">
<template slot-scope="scope">{{ scope.row.saleCount }}</template>
</el-table-column>
<el-table-column align="center" label="总预售数量" width="120">
<template slot-scope="scope">{{ scope.row.preSaleCount }}</template>
</el-table-column>
<el-table-column align="center" label="视频发布者" width="150">
<template slot-scope="scope">{{ scope.row.publish }}</template>
</el-table-column>
<el-table-column align="center" label="视频状态">
<template slot-scope="scope">{{
scope.row.status | filterSaleVideoStatus
}}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50, 100]" :total="totals" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
</div>
</template>
<script>
import ShowImg from '@/components/ShowImg/index.vue'
import { saleinfoList, saleinfoExport } from '@/api/tran/saleinfo'
import { topicSearch } from '@/api/videoManagement/topic'
export default {
name: 'Saleinfo',
components: {
ShowImg,
},
filters: {
filterSaleVideoStatus(v) {
switch (v) {
case 0:
return '待上架'
case 1:
return '上架'
case 2:
return '取消上架'
}
},
filterSaleTypeStatus(v) {
switch (v) {
case 0:
return '无意义'
case 1:
return '女生短视频'
case 2:
return '长视频系列'
case 3:
return '女神'
case 4:
return '女神写真'
case 5:
return '资讯'
}
},
},
data() {
return {
loading: true, // 列表加载状态
totals: 0, // 数据总条数
time: undefined,
videoType: [],
searchData: {
param: {
// 表单参数
topicId: undefined,
id: undefined, // id
start: undefined, // 开始时间
end: undefined, // 结束时间
sort:undefined
},
pageNum: 1,
pageSize: 20,
},
tableData: [],
sortList:[
{
id:0,
name:'上架时间'
},
{
id:1,
name:'销售金额'
},
{
id:2,
name:'观影券使用数量'
},
{
id:3,
name:'总销售数量'
}
]
}
},
mounted() {
this.getMediacategoryList()
this.getSaleinfoList()
},
methods: {
// TODO:请求视频分类列表数据
getMediacategoryList() {
topicSearch({ pageNum: 1, pageSize: 500, param: {} }).then((res) => {
if (res.code === 200) {
this.videoType = res.data.list
} else {
this.videoType = []
this.$message.error('请求视频类型列表失败!')
}
})
},
//TODO:请求视频售卖统计列表
getSaleinfoList() {
this.loading = true
if (this.time) {
this.searchData.param.start = this.time[0]
this.searchData.param.end = this.time[1]
} else {
this.searchData.param.start = undefined
this.searchData.param.end = undefined
}
saleinfoList(this.searchData).then((res) => {
if (res.code === 200) {
this.tableData = res.data.list
this.totals = res.data.total
} else {
this.tableData = []
this.totals = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
//TODO:导出视频售卖统计列表
exportExcel() {
saleinfoExport(this.searchData).then((res) => {
if (res.code) {
this.$message.error('导出列表失败!')
} else {
const a = document.createElement('a')
var blob = new Blob([res], {
type: 'application/vnd.ms-excel;charset=utf-8',
})
const t = BeiJingTime(new Date())
const url = window.URL.createObjectURL(blob)
a.setAttribute('href', url)
a.download = `视频售卖统计${t}.xlsx`
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}
})
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.getSaleinfoList()
},
// 刷新
refreshView() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.getSaleinfoList()
},
// 清理搜索框
onClear(key) {
this.searchData.param[key] = undefined
this.getSaleinfoList()
},
// 切换列表条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.getSaleinfoList()
},
// 切换列表页码
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.getSaleinfoList()
},
},
}
</script>
+130
View File
@@ -0,0 +1,130 @@
<template>
<div class="pf-warpper avlist">
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input placeholder="请输入渠道" clearable v-model.number="searchData.param.channel" @clear="onClear('channel')" />
</el-form-item>
<el-form-item>
<el-date-picker end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button @click="onSearch" icon="el-icon-search" plain type="primary">搜索</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="resData" element-loading-text="拼命加载中" border height="750" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" label="日期" width="160px">
<template slot-scope="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column align="center" label="渠道" width="150">
<template slot-scope="scope">{{ scope.row.channel }}</template>
</el-table-column>
<el-table-column align="center" label="完成率" width="100px" show-overflow-tooltip>
<template slot-scope="scope">{{
scope.row.completeRate === 0 ? 0 : scope.row.completeRate * 100 + '%'
}}</template>
</el-table-column>
<el-table-column align="center" label="总订单" width="150px">
<template slot-scope="scope">{{ scope.row.orders }}</template>
</el-table-column>
<el-table-column align="center" label="完成金额">
<template slot-scope="scope">{{
scope.row.payCoins | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="完成订单" width="100px" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.payOrders }}</template>
</el-table-column>
<el-table-column align="center" label="总金额">
<template slot-scope="scope">{{ scope.row.total | changeMoneyYuan }}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[50, 100, 200, 300, 500]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
</div>
</template>
<script>
// 引入模块
import { statList } from '@/api/tran/stat'
export default {
name: 'Stat',
data() {
return {
time: undefined,
// 请求列表参数
searchData: {
pageNum: 1,
pageSize: 50,
param: {
end: undefined, // "string",结束时间
start: undefined, // "string",开始时间
channel: undefined, // 0,
},
},
resData: [], // el-table表格数据
total: 0, // 数据总条数
loading: true, // 列表加载状态
}
},
mounted() {
this.getList()
},
methods: {
//TODO:请求充值成功率统计数据
getList() {
this.loading = true
if (this.time) {
this.searchData.param.start = this.time[0]
this.searchData.param.end = this.time[1]
} else {
this.searchData.param.start = undefined
this.searchData.param.end = undefined
}
statList(this.searchData).then((res) => {
if (res.code === 200) {
this.resData = res.data.list
this.total = res.data.total
} else {
this.resData = []
this.total = 0
this.$message.error('请求列表失败!')
}
this.loading = false
})
},
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 50
this.getList()
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val
this.getList()
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val
this.getList()
},
// 清空某一项筛选列表
onClear(key) {
this.searchData.param[key] = undefined
this.getList()
},
},
}
</script>
+183
View File
@@ -0,0 +1,183 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input @clear="onClear('id')" clearable placeholder="请输入ID" v-model.number="searchData.param.id" />
</el-form-item>
<el-form-item>
<el-date-picker
:default-time="['00:00:00', '23:59:59']"
end-placeholder="结束日期"
range-separator=""
start-placeholder="开始日期"
type="datetimerange"
v-model="time"
value-format="yyyy-MM-ddTHH:mm:ss+08:00"
/>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('status')" clearable placeholder="状态" v-model="searchData.param.status">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in saleVideoStatusList" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="onSearch()" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="tableData" element-loading-text="拼命加载中" v-loading="loading" border height="700" highlight-current-row style="width: 100%">
<el-table-column fixed="left" align="center" label="id">
<template slot-scope="scope">{{ scope.row.id }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" width="200" label="名称">
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column align="center" fixed="left" width="200" label="标题">
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" width="120" label="卡的等级">
<template slot-scope="scope">{{ scope.row.vipType | changevipType }}</template>
</el-table-column>
<el-table-column align="center" width="160" label="原价">
<template slot-scope="scope">{{ scope.row.preMoney | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="优惠价" width="160">
<template slot-scope="scope">{{ scope.row.money | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="总销售金额" prop="devType" width="100">
<template slot-scope="scope">{{ scope.row.totalSaleMoney | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="总销售数量" width="120">
<template slot-scope="scope">{{ scope.row.saleCount }}</template>
</el-table-column>
<el-table-column align="center" label="状态">
<template slot-scope="scope">{{ scope.row.status | filterSaleVideoStatus }}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 100]"
:total="totals"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"
/>
</div>
</div>
</template>
<script>
import { tickeSaleinfoList } from '@/api/tran/ticketSaleinfo';
export default {
name: 'TicketSaleinfo',
filters: {
filterSaleVideoStatus(v) {
switch (v) {
case 0:
return '待上架';
case 1:
return '上架';
case 2:
return '取消上架';
}
},
},
data() {
return {
saleVideoStatusList: [
{
value: 1,
label: '上架',
},
{
value: 2,
label: '取消上架',
},
],
loading: true, // 列表加载状态
totals: 0, // 数据总条数
time: undefined,
searchData: {
param: {
// 表单参数
id: undefined, // id
start: undefined, // 开始时间
end: undefined, // 结束时间
status: undefined,
},
pageNum: 1,
pageSize: 20,
},
tableData: [],
};
},
mounted() {
this.getTickeSaleinfoList();
},
methods: {
//TODO:请求会员观影券售卖统计列表
getTickeSaleinfoList() {
this.loading = true;
if (this.time) {
this.searchData.param.start = this.time[0];
this.searchData.param.end = this.time[1];
} else {
this.searchData.param.start = undefined;
this.searchData.param.end = undefined;
}
tickeSaleinfoList(this.searchData).then(res => {
if (res.code === 200) {
this.tableData = res.data.list;
this.totals = res.data.total;
} else {
this.tableData = [];
this.totals = 0;
this.$message.error('请求列表失败');
}
this.loading = false;
});
},
onSearch() {
this.searchData.pageNum = 1;
this.searchData.pageSize = 20;
this.getTickeSaleinfoList();
},
// 刷新
refreshView() {
this.getTickeSaleinfoList();
},
// 清理搜索框
onClear(key) {
this.searchData.param[key] = undefined;
this.getTickeSaleinfoList();
},
// 切换列表条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val);
this.getTickeSaleinfoList();
},
// 切换列表页码
handleCurrentChange(val) {
this.searchData.pageNum = Number(val);
this.getTickeSaleinfoList();
},
},
};
</script>
@@ -0,0 +1,150 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="渠道id">
<el-input placeholder="请输入渠道id" v-model="form.channelId" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="渠道名称">
<el-input placeholder="请输入渠道名字" v-model="form.channelName" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="提现平台类型">
<el-select placeholder="请选择渠道提现平台类型" size="mini" v-model="form.channelWtdrMode">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in wtdrChannelModeList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="名称">
<el-input placeholder="请输入名称" v-model="form.channelWtdrName" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="最大支付金额">
<el-input placeholder="请输入支持最大支付金额" v-model.number="form.maxMoney" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="最小支付金额">
<el-input placeholder="请输入支持最小支付金额" v-model.number="form.minMoney" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="渠道费率">
<el-input placeholder="请输入渠道费率" v-model.number="form.rate" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="权重">
<el-input placeholder="请输入权重" v-model.number="form.weight" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否开启" prop="active">
<el-switch v-model="form.active" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {
addwithdrawchannel,
editwithdrawchannel,
} from '@/api/tran/withdrawChannel'
import { wtdrChannelModeList } from '@/filters/tran/withdrawProvider'
export default {
name: 'AddOrEdit',
props: ['data'],
data() {
return {
Visible: true,
title: '',
wtdrChannelModeList: wtdrChannelModeList(),
// 表单数据
form: {
active: undefined,
channelId: undefined,
channelName: undefined,
channelWtdrMode: undefined,
channelWtdrName: undefined,
createdAt: undefined,
id: undefined,
maxMoney: undefined,
minMoney: undefined,
rate: undefined,
weight: undefined,
updatedAt: undefined,
},
}
},
mounted() {
this.title = this.data.title
if (this.title === '编辑') {
this.form = { ...this.data.data }
this.form.maxMoney = this.form.maxMoney / 100
this.form.minMoney = this.form.minMoney / 100
}
},
methods: {
//TODO:新增提现列表数据
add(data) {
addwithdrawchannel(data).then((res) => {
if (res.code === 200) {
this.$message.success('新增成功')
this.Visible = false
} else {
this.$message.error('新增失败')
}
})
},
//TODO:编辑提现列表数据
update(data) {
editwithdrawchannel(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.Visible = false
} else {
this.$message.error('更新失败')
}
})
},
// 提交按钮
submit() {
const data = { ...this.form }
data.maxMoney = data.maxMoney * 100
data.minMoney = data.minMoney * 100
if (this.title === '新增') {
this.add(data)
} else if (this.title === '编辑') {
this.update(data)
}
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
+175
View File
@@ -0,0 +1,175 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<el-form :inline="true" class="form-inline" label-width="80px" size="mini">
<el-form-item>
<el-button type="primary" icon="el-icon-refresh-right" plain @click="getList()">刷新</el-button>
<el-button @click="add" icon="el-icon-circle-plus-outline" plain type="success">新增</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="list" border height="740" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" label="渠道id" width="150">
<template slot-scope="scope">{{ scope.row.channelId }}</template>
</el-table-column>
<el-table-column align="center" label="渠道名称" width="150">
<template slot-scope="scope">{{ scope.row.channelName }}</template>
</el-table-column>
<el-table-column align="center" label="是否激活" width="100">
<template slot-scope="scope">
<el-button :type="scope.row.active ? 'success' : 'danger'" plain size="mini">{{ scope.row.active ? "激活" : "关闭" }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="渠道提现平台类型">
<template slot-scope="scope">{{
scope.row.channelWtdrMode | changewtdrChannelMode
}}</template>
</el-table-column>
<el-table-column align="center" label="名称">
<template slot-scope="scope">{{ scope.row.channelWtdrName }}</template>
</el-table-column>
<el-table-column align="center" label="权重">
<template slot-scope="scope">{{ scope.row.weight }}</template>
</el-table-column>
<el-table-column align="center" label="支持最大支付金额" width="170">
<template slot-scope="scope">{{ scope.row.maxMoney | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="支持最小支付金额" width="170">
<template slot-scope="scope">{{ scope.row.minMoney | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="渠道费率">
<template slot-scope="scope">{{ scope.row.rate }}</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="150">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="修改时间" width="150">
<template slot-scope="scope">{{
scope.row.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<template slot-scope="scope">
<el-button @click="handleEdit('edit', scope.row)" icon="el-icon-edit" size="mini" type="primary">编辑</el-button>
<el-button @click="handleDelete(scope.row)" icon="el-icon-delete" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[50, 100, 200, 300, 500]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<AddOrEdit :data="editData" v-if="editVisible" @close="closeEdit" ref="addOrEdit"></AddOrEdit>
</div>
</template>
<script>
import {
withdrawchannelList,
delwithdrawchannel,
} from '@/api/tran/withdrawChannel'
import AddOrEdit from './components/AddOrEdit.vue'
export default {
name: 'WithdrawChannel',
components: { AddOrEdit },
data() {
return {
total: 0,
loading: false,
list: [],
editVisible: false,
searchData: {
pageNum: 1,
pageSize: 50,
param: {},
},
// 编辑数据
editData: {
title: '新增',
data: {},
},
}
},
mounted() {
this.getList()
},
methods: {
//TODO:请求提现列表数据
async getList() {
this.loading = true
withdrawchannelList(this.searchData).then((res) => {
if (res.code === 200) {
this.list = res.data.list
this.total = res.data.total
} else {
this.list = []
this.total = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
//TODO:删除提现列表数据
handleDelete(row) {
this.$confirm('确认删除当前渠道?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
delwithdrawchannel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getList()
this.$message.success('删除成功')
} else {
this.$message.error('操作失败')
}
})
})
},
// 关闭编辑弹窗
closeEdit() {
this.editData = {
title: '新增',
data: {},
}
this.editVisible = false
this.getList()
},
// 新增按钮
add() {
this.editData = {
title: '新增',
data: {},
}
this.editVisible = true
},
// 编辑按钮
handleEdit(index, row) {
this.editData = {
title: '编辑',
data: row,
}
this.editVisible = true
},
// 切换每页条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.getList()
},
// 翻页
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.getList()
},
},
}
</script>
@@ -0,0 +1,87 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-03-14 15:22:03
* @LastEditTime: 2022-06-07 16:38:15
* @LastEditors: Please set LastEditors
* @FilePath: /comics-admin/src/views/tran/withdrawList/components/rejectEdit.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="500px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="理由" v-if="this.title === '选择审核拒绝的理由'">
<el-select placeholder="请选择拒绝理由" v-model="mark" style="width:250px" filterable allow-create default-first-option>
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in rejectList" />
</el-select>
</el-form-item>
<el-form-item label="备注" v-if="this.title === '通过备注'">
<el-select placeholder="请选择备注" v-model="mark" style="width:250px" filterable allow-create default-first-option>
<el-option label="通过" value="通过" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { checkWithdraw } from '@/api/tran/withdrawList'
import { rejectList } from '@/filters/tran/withdrawList'
export default {
name: 'RejectEdit',
props: ['data'],
data() {
return {
Visible: true,
title: '',
mark: undefined,
tradeNo: undefined,
rejectList: rejectList(),
}
},
mounted() {
this.title = this.data.title
this.tradeNo = this.data.data.tradeNo
},
methods: {
//TODO:提交提现列表审核
checkWithdrawFun(data) {
checkWithdraw(data).then((res) => {
if (res.code === 200) {
this.$message.success('提交成功')
this.Visible = false
} else {
this.$message.error(res.data)
}
})
},
// 提交按钮
submit() {
const data = {
check: true,
mark: this.mark,
tradeNo: this.tradeNo,
}
if (this.title === '选择审核拒绝的理由') {
data.check = false
} else if (this.title === '通过备注') {
data.check = true
}
this.checkWithdrawFun(data)
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
@@ -0,0 +1,192 @@
<template>
<el-dialog title="充提流水列表" :visible.sync="Visible" width="90%" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-row class="table-form">
<el-form :inline="true" class="form-inline" label-width="80px" ref="form" size="mini" v-if="data.data.mode === 'bankcard'">
<el-form-item label-width="15px">
绑定银行信息
</el-form-item>
<el-form-item label-width="15px">
银行名称<span style="color: red">{{ statData.bankName }}</span>
</el-form-item>
<el-form-item label-width="15px">
账户名<span style="color: red">{{ statData.bankAccName }}</span>
</el-form-item>
<el-form-item label-width="15px">
银行卡号<span style="color: red">{{ statData.bankAccNo }}</span>
</el-form-item>
</el-form>
<el-form :inline="true" class="form-inline" label-width="80px" ref="form" size="mini" v-if="data.data.mode === 'bankcard'">
<el-form-item label-width="15px">
当前银行信息
</el-form-item>
<el-form-item label-width="15px">
银行名称<span style="color: red">{{ data.data.bankName}}</span>
</el-form-item>
<el-form-item label-width="15px">
账户名<span style="color: red">{{ data.data.accountName}}</span>
</el-form-item>
<el-form-item label-width="15px">
银行卡号<span style="color: red">{{ data.data.accountNo }}</span>
</el-form-item>
</el-form>
<el-form :inline="true" class="form-inline" label-width="80px" ref="form" size="mini">
<el-form-item>
总充值<span style="color: red">{{ statData.totalRchg | changeMoneyYuan }}</span>
</el-form-item>
<el-form-item style="margin-left:60px">
总收益<span style="color: red">{{ statData.totalIncome | changeMoneyYuan }}</span>
</el-form-item>
<el-form-item style="margin-left:60px">
收益总提现<span style="color: red">{{ statData.totalIncomeWtdr | changeMoneyYuan }}</span>
</el-form-item>
<el-form-item style="margin-left:60px">
剩余收益<span style="color: red">{{ statData.leftIncome | changeMoneyYuan }}</span>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="resData" border height="600px" style="width: 100%" highlight-current-row>
<el-table-column align="center" label="收支类型">
<template slot-scope="scope">{{
scope.row.mark | changeMark
}}</template>
</el-table-column>
<el-table-column align="center" label="交易金额(麻豆币)" width="140">
<template slot-scope="scope">{{
scope.row.coinAmount | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="交易方式">
<template slot-scope="scope">{{
scope.row.currencyType | changeCurrencyType
}}</template>
</el-table-column>
<el-table-column align="center" label="交易类型">
<template slot-scope="scope">{{
scope.row.tranType | changeTranType
}}</template>
</el-table-column>
<el-table-column align="center" label="状态">
<template slot-scope="scope">{{
scope.row.status | runningStatus
}}</template>
</el-table-column>
<el-table-column align="center" label="记录描述" width="250">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="scope.row.desc" placement="top">
<div style="
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
">
{{ scope.row.desc }}
</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="交易时间" width="180">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50, 100]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { getWaterList, getByuserStat } from '@/api/tran/withdrawList'
export default {
name: 'WaterList',
props: ['data'],
data() {
return {
Visible: true,
// 表单数据
searchData: {
userId: undefined,
waterFor: 'app',
status: 1,
tranTypes: [30, 31],
},
resData: [],
statData: [],
total: 0,
}
},
filters: {
runningStatus(v) {
switch (v) {
case -1:
return '失败'
case 0:
return '进行中'
case 1:
return '成功'
}
},
},
mounted() {
this.searchData.userId = this.data.data.userId
this.getByuserStat()
this.getWaterListSearch()
},
methods: {
//TODO:请求用户数据
getByuserStat() {
getByuserStat({ userId: this.searchData.userId }).then((res) => {
if (res.code === 200) {
this.statData = res.data
} else {
this.statData = []
this.$message.error(res.tip)
}
})
},
// TODO:获取充提流水列表数据
getWaterListSearch() {
getWaterList(this.searchData).then((res) => {
if (res.code === 200) {
this.resData = res.data.infos
this.total = res.data.totalCount
} else {
this.resData = []
this.total = 0
this.$message.error('请求应用列表失败!')
}
})
},
// 提交按钮
submit(formName) {
this.$emit('close')
},
// 关闭编辑
close() {
this.$emit('close')
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val
this.getWaterListSearch()
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val
this.getWaterListSearch()
},
},
}
</script>
+325
View File
@@ -0,0 +1,325 @@
<!-- 提现列表 -->
<template>
<div class="pf-warpper avlist">
<!-- 查询表单 -->
<el-row class="table-form">
<el-form :inline="true" :model="searchData.param" class="form-inline" size="mini">
<el-form-item>
<el-input @clear="onClear('tradeNo')" clearable placeholder="请输入订单号" v-model.number="searchData.param.tradeNo" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('userId')" clearable placeholder="请输入用户ID" v-model.number="searchData.param.userId" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('oid')" clearable placeholder="请输入第三方平台订单号" v-model="searchData.param.oid" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('rchgMinAmount')" clearable placeholder="请输入充值最小额度" v-model.number="searchData.param.rchgMinAmount" />
</el-form-item>
<el-form-item>
<el-input @clear="onClear('rchgMaxAmount')" clearable placeholder="请输入充值最大额度" v-model.number="searchData.param.rchgMaxAmount" />
</el-form-item>
<el-form-item>
<el-select @clear="onClear('checkStatus')" clearable placeholder="请选择审核状态" v-model="searchData.param.checkStatus">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in WithdrawCheckTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('status')" clearable placeholder="请选择订单状态" v-model="searchData.param.status">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in WithdrawCurrencyTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-select @clear="onClear('mode')" clearable placeholder="请选择提现类型" v-model="searchData.param.mode">
<el-option :key="item.value" :label="item.label" :value="item.value" v-for="item in WithdrawTypeList" />
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker :default-time="['00:00:00', '23:59:59']" end-placeholder="结束日期" range-separator="" start-placeholder="开始日期" type="datetimerange" v-model="time" value-format="yyyy-MM-ddTHH:mm:ss+08:00" />
</el-form-item>
<el-form-item label-width="15px">
<el-button @click="onSearch" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="refreshView" icon="el-icon-refresh" plain type="info">刷新</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table v-loading="loading" :data="tableData" border height="700" highlight-current-row style="width: 100%">
<el-table-column align="center" label="用户ID">
<template slot-scope="scope">{{ scope.row.userId }}</template>
</el-table-column>
<el-table-column align="center" label="订单号" width="250">
<template slot-scope="scope">{{ scope.row.tradeNo }}</template>
</el-table-column>
<el-table-column align="center" label="提现渠道" width="150">
<template slot-scope="scope">{{ scope.row.payChannel }}</template>
</el-table-column>
<el-table-column align="center" label="用户名称">
<template slot-scope="scope">{{ scope.row.userName }}</template>
</el-table-column>
<el-table-column align="center" label="提现账户" width="150">
<template slot-scope="scope">{{ scope.row.accountNo }}</template>
</el-table-column>
<el-table-column align="center" label="提现账户持有人">
<template slot-scope="scope">{{ scope.row.accountName }}</template>
</el-table-column>
<el-table-column align="center" label="提现金额">
<template slot-scope="scope">{{ scope.row.amount | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="提现银行">
<template slot-scope="scope">{{ scope.row.bankName }}</template>
</el-table-column>
<el-table-column align="center" label="审核状态">
<template slot-scope="scope">{{
scope.row.checkStatus | changeWithdrawCheckType
}}</template>
</el-table-column>
<el-table-column align="center" label="提现类型">
<template slot-scope="scope">{{
scope.row.mode | changeWithdrawType
}}</template>
</el-table-column>
<el-table-column align="center" label="订单状态" width="100">
<template slot-scope="scope">{{
scope.row.status | changeWithdrawCurrencyType
}}</template>
</el-table-column>
<el-table-column align="center" label="审核备注" show-overflow-tooltip width="100">
<template slot-scope="scope">{{ scope.row.checkMark }}</template>
</el-table-column>
<el-table-column align="center" label="真实到账金额" width="100">
<template slot-scope="scope">{{
scope.row.realAmount | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="提现费率">
<template slot-scope="scope">{{ scope.row.rate }}</template>
</el-table-column>
<el-table-column align="center" label="充值总金额" width="100">
<template slot-scope="scope">{{
scope.row.rchgAmount | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="设备id" width="120">
<template slot-scope="scope">{{ scope.row.devId }}</template>
</el-table-column>
<el-table-column align="center" label="设备类型">
<template slot-scope="scope">{{ scope.row.devType }}</template>
</el-table-column>
<el-table-column align="center" label="商区码">
<template slot-scope="scope">{{ scope.row.districtCode }}</template>
</el-table-column>
<el-table-column align="center" label="ip地址" width="120">
<template slot-scope="scope">{{ scope.row.ipAddr }}</template>
</el-table-column>
<el-table-column align="center" label="是否直推">
<template slot-scope="scope">{{
scope.row.isDirect ? "是" : "不是"
}}</template>
</el-table-column>
<el-table-column align="center" label="游戏订单" width="250">
<template slot-scope="scope">{{ scope.row.trfOrder }}</template>
</el-table-column>
<el-table-column align="center" label="第三方返回订单号" width="150">
<template slot-scope="scope">{{ scope.row.oid }}</template>
</el-table-column>
<el-table-column align="center" label="提现渠道" width="150">
<template slot-scope="scope">{{ scope.row.payChannel }}</template>
</el-table-column>
<el-table-column align="center" label="手机号" width="150">
<template slot-scope="scope">{{ scope.row.phoneNo }}</template>
</el-table-column>
<el-table-column align="center" label="序列码">
<template slot-scope="scope">{{ scope.row.promSeqe }}</template>
</el-table-column>
<el-table-column align="center" label="系统类型">
<template slot-scope="scope">{{ scope.row.sysType }}</template>
</el-table-column>
<el-table-column align="center" label="审核日期" width="150">
<template slot-scope="scope">{{ scope.row.checkAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="提现完成时间" width="150">
<template slot-scope="scope">{{ scope.row.finishedAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="创建日期" width="150">
<template slot-scope="scope">{{ scope.row.createdAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="修改时间" width="150">
<template slot-scope="scope">{{ scope.row.updatedAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="用途">
<template slot-scope="scope">{{ scope.row.wtdrFor }}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="300">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 1 && scope.row.checkStatus == 1" @click="handleCheck(scope.row,true)" size="mini" type="success">通过</el-button>
<el-button v-if="scope.row.status == 1 && scope.row.checkStatus == 1" @click="handleCheck(scope.row,false)" size="mini" type="danger">拒绝</el-button>
<el-button @click="handleWaterList(scope.$index, scope.row)" size="mini" type="primary">收益流水</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination :current-page="searchData.pageNum" :page-size="searchData.pageSize" :page-sizes="[10, 20, 30, 50, 100]" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" />
</div>
<Edit :data="editData" v-if="editVisible" @close="closeEdit" ref="Edit"></Edit>
<WaterList :data="editData" v-if="waterListVisible" @close="closeEdit" />
</div>
</template>
<script>
import { getWithdrawList } from '@/api/tran/withdrawList'
import {
WithdrawCheckTypeList,
WithdrawCurrencyTypeList,
WithdrawTypeList,
} from '@/filters/tran/withdrawList'
import Edit from './components/rejectEdit'
import WaterList from './components/waterList'
import { changeMoneyFen } from '@/filters/index'
export default {
name: 'WithdrawList',
components: { Edit, WaterList },
data() {
return {
total: 0,
loading: true, // 列表加载状态
time: undefined,
WithdrawCheckTypeList: WithdrawCheckTypeList(),
WithdrawCurrencyTypeList: WithdrawCurrencyTypeList(),
WithdrawTypeList: WithdrawTypeList(),
editVisible: false,
editData: {
title: '拒绝理由',
data: {},
},
// 请求数据
searchData: {
pageNum: 1,
pageSize: 20,
param: {
checkStatus: undefined, // 审核状态
mode: undefined, // 提现类型
oid: undefined, // 第三方平台订单号
status: undefined, // 订单状态
start: undefined, // 开始时间
end: undefined, // 结束时间
userId: undefined, // 用户id
tradeNo: undefined, // 订单号
// wtdrFor: 'game',
wtdrFor: 'app',
rchgMaxAmount: undefined,
rchgMinAmount: undefined,
},
},
tableData: [],
waterListVisible: false,
}
},
mounted() {
// 获取表格列表
this.onSubmit()
},
methods: {
onSearch() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.searchData.param.wtdrFor = 'app'
this.onSubmit()
},
//TODO:请求提现列表数据
onSubmit() {
this.loading = true
if (this.time) {
this.searchData.param.start = this.time[0]
this.searchData.param.end = this.time[1]
} else {
this.searchData.param.start = undefined
this.searchData.param.end = undefined
}
let param = JSON.parse(JSON.stringify(this.searchData))
if (
this.searchData.param.rchgMinAmount !== undefined &&
this.searchData.param.rchgMaxAmount !== undefined
) {
param.param.rchgMinAmount = changeMoneyFen(
this.searchData.param.rchgMinAmount
)
param.param.rchgMaxAmount = changeMoneyFen(
this.searchData.param.rchgMaxAmount
)
}
getWithdrawList(param).then((res) => {
if (res.code === 200) {
this.tableData = res.data.list
this.total = res.data.total
} else {
this.tableData = []
this.total = 0
this.$message.error('请求列表失败')
}
this.loading = false
})
},
handleCheck(data, type) {
if (type) {
this.editVisible = true
this.editData = {
title: '通过备注',
data: data,
}
} else {
this.editVisible = true
this.editData = {
title: '选择审核拒绝的理由',
data: data,
}
}
},
closeEdit() {
this.editVisible = false
this.waterListVisible = false
this.onSubmit()
},
// 刷新
refreshView() {
this.searchData.pageNum = 1
this.searchData.pageSize = 20
this.onSubmit()
},
// 清理列表请求筛选项
onClear(key) {
this.searchData.param[key] = undefined
this.onSubmit()
},
// 切换每页条数
handleSizeChange(val) {
this.searchData.pageSize = Number(val)
this.onSubmit()
},
// 翻页
handleCurrentChange(val) {
this.searchData.pageNum = Number(val)
this.onSubmit()
},
handleWaterList(index, row) {
this.waterListVisible = true
this.editData = {
title: '充提流水列表',
data: row,
}
},
},
}
</script>