feat:v1.4前端更新

This commit is contained in:
超凡
2025-06-24 14:43:09 +08:00
parent 0268aa5033
commit 35fec82e4a
1026 changed files with 118424 additions and 56490 deletions

View File

@@ -1,25 +1,18 @@
<template>
<div class="divBox">
<el-card class="box-card">
<div slot="header" class="clearfix">
<div class="container">
<el-form label-width="100px" :inline="true">
<el-form-item>
<el-select v-model="tableFrom.type" clearable placeholder="请选择">
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList(1)" size="small">查询</el-button>
</el-form-item>
</el-form>
</div>
<el-card :bordered="false" shadow="never" class="ivu-mt" :body-style="{ padding: 0 }">
<div class="padding-add">
<el-form label-width="75px" :inline="true">
<el-form-item label="变动类型:">
<el-select @change="getList(1)" class="selWidth" v-model="tableFrom.type" clearable placeholder="请选择">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
</el-card>
<el-card class="box-card mt14">
<el-table
v-loading="listLoading"
:data="tableData.data"
@@ -28,33 +21,18 @@
class="table"
highlight-current-row
>
<el-table-column
prop="id"
label="ID"
width="80"
/>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column label="佣金变动" min-width="100">
<template slot-scope="scope">
<span :class="scope.row.type == 1 ? 'color_red': 'color_green'">{{scope.row.type == 1 ? '+' : '-' }}{{scope.row.price}}</span>
<span :class="scope.row.type == 1 ? 'color_red' : 'color_green'"
>{{ scope.row.type == 1 ? '+' : '-' }}{{ scope.row.price }}</span
>
</template>
</el-table-column>
<el-table-column
prop="mark"
label="变动信息"
min-width="150"
/>
<el-table-column
label="变动类型"
min-width="130"
prop="title"
/>
<el-table-column
prop="userName"
label="用户信息"
min-width="150"
/>
<el-table-column label="时间" min-width="130" prop="updateTime">
</el-table-column>
<el-table-column prop="mark" label="变动信息" min-width="150" />
<el-table-column label="变动类型" min-width="130" prop="title" />
<el-table-column prop="userName" label="用户信息" min-width="150" />
<el-table-column label="时间" width="170" prop="updateTime"> </el-table-column>
</el-table>
<div class="block">
<el-pagination
@@ -65,6 +43,7 @@
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
background
/>
</div>
</el-card>
@@ -72,139 +51,143 @@
</template>
<script>
import { brokerageListApi } from '@/api/financial'
export default {
name: 'AccountsCapital',
data() {
return {
timeVal: [],
tableData: {
data: [],
total: 0
},
listLoading: true,
tableFrom: {
type:'',
page: 1,
limit: 20
},
userTableFrom: {
page: 1,
limit: 10,
dateLimit: ''
},
fromList: this.$constants.fromList,
options: [],
typeOptions:[
{ value: 1, label: '订单返佣'},
{ value: 2, label: '申请提现'},
{ value: 3, label: '提现失败'},
{ value: 4, label: '提现成功'},
{ value: 5, label: '佣金转余额'},
],
}
},
mounted() {
// this.getTypes()
this.getList()
},
methods: {
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page;
brokerageListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
}).catch((res) => {
this.listLoading = false
import { brokerageListApi } from '@/api/financial';
export default {
name: 'AccountsCapital',
data() {
return {
timeVal: [],
tableData: {
data: [],
total: 0,
},
listLoading: true,
tableFrom: {
type: '',
page: 1,
limit: 20,
},
userTableFrom: {
page: 1,
limit: 10,
dateLimit: '',
},
fromList: this.$constants.fromList,
options: [],
typeOptions: [
{ value: 1, label: '订单返佣' },
{ value: 2, label: '申请提现' },
{ value: 3, label: '提现失败' },
{ value: 4, label: '提现成功' },
{ value: 5, label: '佣金转余额' },
],
};
},
mounted() {
// this.getTypes()
this.getList();
},
methods: {
// 列表
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
brokerageListApi(this.tableFrom)
.then((res) => {
this.tableData.data = res.list;
this.tableData.total = res.total;
this.listLoading = false;
})
},
pageChange(page) {
this.tableFrom.page = page
this.getList()
},
handleSizeChange(val) {
this.tableFrom.limit = val
this.getList()
},
getTypes() {
billTypeApi().then(res => {
this.options = res.data
localStorage.setItem('CashKey', JSON.stringify(res.data))
}).catch((res) => {
this.$message.error(res.message)
.catch((res) => {
this.listLoading = false;
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList();
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList();
},
getTypes() {
billTypeApi()
.then((res) => {
this.options = res.data;
localStorage.setItem('CashKey', JSON.stringify(res.data));
})
}
}
}
.catch((res) => {
this.$message.error(res.message);
});
},
},
};
</script>
<style scoped lang="scss">
.dashboard-workplace {
&-header {
&-avatar {
width: 64px;
height: 64px;
border-radius: 50%;
margin-right: 16px;
font-weight: 600;
.dashboard-workplace {
&-header {
&-avatar {
width: 64px;
height: 64px;
border-radius: 50%;
margin-right: 16px;
font-weight: 600;
}
&-tip {
width: 82%;
display: inline-block;
vertical-align: middle;
margin-top: -12px;
&-title {
font-size: 13px;
color: #000000;
margin-bottom: 12px;
}
&-tip {
width: 82%;
display: inline-block;
vertical-align: middle;
margin-top: -12px;
&-title {
&-desc {
width: 100%;
&-sp {
width: 32%;
color: #17233d;
font-size: 13px;
color: #000000;
margin-bottom: 12px;
}
&-desc {
width: 100%;
&-sp {
width: 32%;
color: #17233D;
font-size: 13px;
display: inline-block;
line-height: 25px;
}
display: inline-block;
line-height: 25px;
}
}
}
&-extra {
.ivu-col {
p {
text-align: right;
&-extra {
.ivu-col {
p {
text-align: right;
}
p:first-child {
span:first-child {
margin-right: 4px;
}
p:first-child {
span:first-child {
margin-right: 4px;
}
span:last-child {
color: #808695;
}
span:last-child {
color: #808695;
}
}
p:last-child {
font-size: 22px;
}
p:last-child {
font-size: 22px;
}
}
}
}
.selWidth{
width: 300px;
}
.color_red{
color:#F5222D;
}
.color_green{
color:#7ABE5C;
}
}
.selWidth {
width: 300px;
}
.color_red {
color: #f5222d;
}
.color_green {
color: #7abe5c;
}
</style>

View File

@@ -5,11 +5,7 @@
</template>
<script>
export default {
}
export default {};
</script>
<style lang="sass" scoped>
</style>
<style lang="sass" scoped></style>

View File

@@ -3,43 +3,61 @@
<el-card class="box-card">
<div class="clearfix">
<div class="container">
<el-form size="small" label-width="100px">
<el-form-item label="时间选择:" class="width100">
<el-radio-group v-model="tableFrom.dateLimit" type="button" class="mr20" size="small" @change="selectChange(tableFrom.dateLimit)">
<el-radio-button v-for="(item,i) in fromList.fromTxt" :key="i" :label="item.val">{{ item.text }}</el-radio-button>
</el-radio-group>
<el-date-picker v-model="timeVal" value-format="yyyy-MM-dd" format="yyyy-MM-dd" size="small" type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;" @change="onchangeTime" />
<el-form inline size="small" label-width="70px">
<el-form-item label="时间选择:">
<el-date-picker
v-model="timeVal"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
size="small"
type="daterange"
placement="bottom-end"
placeholder="自定义时间"
style="width: 260px"
@change="onchangeTime"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<el-form-item label="提现状态:">
<el-radio-group v-model="tableFrom.status" type="button" size="small" @change="getList(1)" clearable>
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="0">审核中</el-radio-button>
<el-radio-button label="1">已提现</el-radio-button>
<el-radio-button label="-1">已拒绝</el-radio-button>
</el-radio-group>
<el-select class="selWidth" @change="getList(1)" v-model="tableFrom.status" placeholder="请选择">
<el-option label="全部" value=""></el-option>
<el-option label="审核中" value="0"></el-option>
<el-option label="已提现" value="1"></el-option>
<el-option label="已拒绝" value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="提现方式:">
<el-radio-group v-model="tableFrom.extractType" type="button" size="small" @change="getList(1)" clearable>
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="bank">银行卡</el-radio-button>
<el-radio-button label="alipay">支付宝</el-radio-button>
<el-radio-button label="weixin">微信</el-radio-button>
</el-radio-group>
<el-select class="selWidth" @change="getList(1)" v-model="tableFrom.extractType" placeholder="请选择">
<el-option label="全部" value=""></el-option>
<el-option label="银行卡" value="bank"></el-option>
<el-option label="支付宝" value="alipay"></el-option>
<el-option label="微信" value="weixin"></el-option>
</el-select>
</el-form-item>
<el-form-item label="关键字:" class="width100">
<el-input v-model="tableFrom.keywords" placeholder="微信号/姓名/支付宝账号/银行卡号/失败原因" class="selWidth" size="small" clearable>
<el-button slot="append" icon="el-icon-search" size="small" @click="getList(1)" />
<el-form-item label="关键字:">
<el-input
v-model="tableFrom.keywords"
placeholder="微信号/姓名/支付宝账号/银行卡号/失败原因"
class="selWidth"
size="small"
clearable
>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" @click="getList(1)">搜索</el-button>
<el-button size="small" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<div class="mt20">
<div class="mt14">
<cards-data :cardLists="cardLists" v-if="checkPermi(['admin:finance:apply:balance'])"></cards-data>
</div>
<el-card class="box-card">
<el-table
<el-table
v-loading="listLoading"
:data="tableData.data"
style="width: 100%"
@@ -47,103 +65,92 @@
class="table"
highlight-current-row
>
<el-table-column
prop="id"
label="ID"
width="60"
/>
<el-table-column
label="用户信息"
min-width="180"
>
<el-table-column prop="id" label="ID" width="60" />
<el-table-column label="用户信息" min-width="180">
<template slot-scope="scope">
<p>用户昵称{{scope.row.nickName}}</p>
<p>用户id{{scope.row.uid}}</p>
<p>用户昵称{{ scope.row.nickName }}</p>
<p>用户id{{ scope.row.uid }}</p>
</template>
</el-table-column>
<el-table-column
prop="extractPrice"
label="提现金额"
min-width="120"
/>
<el-table-column
label="提现方式"
min-width="100"
>
<el-table-column prop="extractPrice" label="提现金额" min-width="120" />
<el-table-column label="提现方式" min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.extractType | extractTypeFilter }}</span>
</template>
</el-table-column>
<el-table-column
label="账号"
min-width="200"
>
<el-table-column label="账号" min-width="200">
<template slot-scope="scope">
<div v-if="scope.row.extractType=== 'bank'">
<p>姓名{{scope.row.realName }}</p>
<p>卡号{{scope.row.bankCode }}</p>
<p>开户行{{scope.row.bankName }}</p>
<div v-if="scope.row.extractType === 'bank'">
<p>姓名{{ scope.row.realName }}</p>
<p>卡号{{ scope.row.bankCode }}</p>
<p>开户行{{ scope.row.bankName }}</p>
</div>
<span v-else-if="scope.row.extractType=== 'alipay'">
<p>姓名{{scope.row.realName }}</p>
<p>支付宝号{{scope.row.alipayCode }}</p>
<div class="acea-row">
收款码
<div class="demo-image__preview" v-if="scope.row.qrcodeUrl">
<el-image
:src="scope.row.qrcodeUrl"
:preview-src-list="[scope.row.qrcodeUrl]"
/>
</div>
<div v-else></div>
</div>
<span v-else-if="scope.row.extractType === 'alipay'">
<p>姓名{{ scope.row.realName }}</p>
<p>支付宝号{{ scope.row.alipayCode }}</p>
<div class="acea-row">
收款码
<div class="demo-image__preview" v-if="scope.row.qrcodeUrl">
<el-image :src="scope.row.qrcodeUrl" :preview-src-list="[scope.row.qrcodeUrl]" />
</div>
<div v-else></div>
</div>
</span>
<span v-else-if="scope.row.extractType=== 'weixin'">
<p>姓名{{scope.row.realName }}</p>
<p>微信号{{scope.row.wechat }}</p>
<div class="acea-row">
收款码
<div class="demo-image__preview" v-if="scope.row.qrcodeUrl">
<el-image
:src="scope.row.qrcodeUrl"
:preview-src-list="[scope.row.qrcodeUrl]"
/>
</div>
<div v-else></div>
</div>
<span v-else-if="scope.row.extractType === 'weixin'">
<p>姓名{{ scope.row.realName }}</p>
<p>微信号{{ scope.row.wechat }}</p>
<div class="acea-row">
收款码
<div class="demo-image__preview" v-if="scope.row.qrcodeUrl">
<el-image :src="scope.row.qrcodeUrl" :preview-src-list="[scope.row.qrcodeUrl]" />
</div>
<div v-else></div>
</div>
</span>
<span v-else>已退款</span>
</template>
</el-table-column>
<el-table-column
label="审核状态"
min-width="200"
>
<el-table-column label="审核状态" min-width="200">
<template slot-scope="scope">
<span class="spBlock">{{ scope.row.status | extractStatusFilter }}</span>
<span v-if="scope.row.status === -1">拒绝原因{{scope.row.failMsg}}</span>
<template v-if="scope.row.status === 0">
<el-button type="danger" icon="el-icon-close" size="mini" @click="onExamine(scope.row.id)" v-hasPermi="['admin:finance:apply:apply']">未通过</el-button>
<el-button type="primary" icon="el-icon-check" size="mini" @click="ok(scope.row.id)" v-hasPermi="['admin:finance:apply:apply']">通过</el-button>
<div>
<span class="spBlock">{{ scope.row.status | extractStatusFilter }}</span>
<span v-if="scope.row.status === -1">拒绝原因{{ scope.row.failMsg }}</span>
</div>
<template v-if="scope.row.status === 0 && checkPermi(['admin:finance:apply:apply'])">
<el-button
type="danger"
icon="el-icon-close"
v-debounceClick="
() => {
handleFail(scope.row.id);
}
"
>未通过</el-button
>
<el-button
type="primary"
icon="el-icon-check"
v-debounceClick="
() => {
handlePass(scope.row.id);
}
"
>通过</el-button
>
</template>
</template>
</el-table-column>
<el-table-column
label="备注"
min-width="200"
>
<el-table-column label="备注" min-width="200">
<template slot-scope="scope">
<span class="spBlock">{{ scope.row.mark | filterEmpty }}</span>
</template>
</el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
min-width="150"
/>
<el-table-column label="操作" min-width="80" fixed="right" align="center">
<el-table-column prop="createTime" label="创建时间" min-width="150" />
<el-table-column label="操作" width="80" fixed="right">
<template slot-scope="scope">
<el-button v-if="scope.row.status !== 1" type="text" size="small" @click="handleEdit(scope.row)" v-hasPermi="['admin:finance:apply:update']">编辑</el-button>
<a v-if="scope.row.status !== 1" @click="handleEdit(scope.row)" v-hasPermi="['admin:finance:apply:update']"
>编辑</a
>
<span v-else>无</span>
</template>
</el-table-column>
@@ -157,202 +164,230 @@
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
background
/>
</div>
</el-card>
</el-card>
<!--编辑-->
<el-dialog
title="编辑"
:visible.sync="dialogVisible"
width="500px"
:before-close="handleClose">
<el-dialog title="编辑" :visible.sync="dialogVisible" width="540px" :before-close="handleClose">
<!--微信-->
<zb-parser
v-if="dialogVisible && (tableFrom.extractType==='weixin' || extractType==='weixin')"
v-if="dialogVisible && (tableFrom.extractType === 'weixin' || extractType === 'weixin')"
:form-id="124"
:is-create="isCreate"
:edit-data="editData"
@submit="handlerSubmit"
@resetForm="resetForm"
@closeDialog="dialogVisible = false"
/>
<!--支付宝-->
<zb-parser
v-if="dialogVisible && (tableFrom.extractType==='alipay' || extractType==='alipay')"
v-if="dialogVisible && (tableFrom.extractType === 'alipay' || extractType === 'alipay')"
:form-id="126"
:is-create="isCreate"
:edit-data="editData"
@submit="handlerSubmit"
@resetForm="resetForm"
@closeDialog="dialogVisible = false"
/>
<!--银行卡-->
<zb-parser
v-if="dialogVisible && (tableFrom.extractType==='bank' || extractType==='bank')"
v-if="dialogVisible && (tableFrom.extractType === 'bank' || extractType === 'bank')"
:form-id="125"
:is-create="isCreate"
:edit-data="editData"
@submit="handlerSubmit"
@resetForm="resetForm"
@closeDialog="dialogVisible = false"
/>
</el-dialog>
</div>
</template>
<script>
import { applyListApi, applyBalanceApi, applyUpdateApi, applyStatusApi } from '@/api/financial'
import cardsData from '@/components/cards/index'
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
import { checkPermi } from "@/utils/permission"; // 权限判断函数
import {Debounce} from '@/utils/validate'
export default {
name: 'AccountsExtract',
components: {
cardsData,
zbParser
import { applyListApi, applyBalanceApi, applyUpdateApi, applyStatusApi } from '@/api/financial';
import cardsData from '@/components/cards/index';
import zbParser from '@/components/FormGenerator/components/parser/ZBParser';
import { checkPermi } from '@/utils/permission'; // 权限判断函数
import { Debounce } from '@/utils/validate';
export default {
name: 'AccountsExtract',
components: {
cardsData,
zbParser,
},
data() {
return {
editData: {},
isCreate: 1,
dialogVisible: false,
timeVal: [],
tableData: {
data: [],
total: 0,
},
listLoading: true,
tableFrom: {
extractType: '',
status: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20,
},
fromList: this.$constants.fromList,
cardLists: [],
applyId: null,
extractType: '',
};
},
mounted() {
this.getList();
this.getBalance();
},
methods: {
checkPermi,
//重置
handleReset() {
this.tableFrom.extractType = '';
this.tableFrom.status = '';
this.tableFrom.dateLimit = '';
this.tableFrom.keywords = '';
this.timeVal = [];
this.getList();
this.getBalance();
},
data() {
return {
editData: {},
isCreate: 1,
dialogVisible: false,
timeVal: [],
tableData: {
data: [],
total: 0
},
listLoading: true,
tableFrom: {
extractType: '',
status: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20
},
fromList: this.$constants.fromList,
cardLists: [],
applyId: null,
extractType: ''
}
resetForm() {
this.dialogVisible = false;
},
mounted() {
this.getList()
this.getBalance()
handleEdit(row) {
this.extractType = row.extractType;
this.applyId = row.id;
this.dialogVisible = true;
this.isCreate = 1;
this.editData = JSON.parse(JSON.stringify(row));
},
methods: {
checkPermi,
resetForm(){
handlerSubmit: Debounce(function (formValue) {
formValue.id = this.applyId;
formValue.extractType = this.extractType;
applyUpdateApi(formValue).then((data) => {
this.$message.success('编辑成功');
this.dialogVisible = false;
},
handleEdit(row) {
this.extractType = row.extractType;
this.applyId = row.id;
this.dialogVisible = true;
this.isCreate = 1;
this.editData = JSON.parse(JSON.stringify(row));
},
handlerSubmit:Debounce(function(formValue) {
formValue.id = this.applyId;
formValue.extractType = this.extractType;
applyUpdateApi(formValue).then(data => {
this.$message.success('编辑成功')
this.dialogVisible = false
this.getList()
})
}),
handleClose() {
this.dialogVisible = false
this.editData = {}
},
onExamine(id) {
this.$prompt('未通过', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputErrorMessage: '请输入原因',
inputType: 'textarea',
inputValue: '输入信息不完整或有误!',
inputPlaceholder: '请输入原因',
inputValidator: (value) => {
if (!value) {
return '请输入原因'
}
this.getList();
});
}),
handleClose() {
this.dialogVisible = false;
this.editData = {};
},
// 审核未通过
handleFail(id) {
this.$prompt('未通过', '拒绝原因', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputErrorMessage: '请输入原因',
inputType: 'textarea',
inputValue: '输入信息不完整或有误!',
inputPlaceholder: '请输入原因',
inputValidator: (value) => {
if (!value) {
return '请输入原因';
}
}).then(({ value }) => {
applyStatusApi({ id: id, status: -1, backMessage: value }).then(res => {
},
})
.then(({ value }) => {
applyStatusApi({ id: id, status: -1, backMessage: value }).then((res) => {
this.$message({
type: 'success',
message: '提交成功'
})
this.getList()
})
}).catch(() => {
message: '提交成功',
});
this.getList();
});
})
.catch(() => {
this.$message({
type: 'info',
message: '取消输入'
})
message: '取消输入',
});
});
},
// 审核通过
handlePass(id) {
this.$modalSure('审核通过吗').then(() => {
applyStatusApi({ id: id, status: 1 }).then(() => {
this.$message.success('操作成功');
this.getList();
});
});
},
// 金额
getBalance() {
applyBalanceApi({ dateLimit: this.tableFrom.dateLimit }).then((res) => {
this.cardLists = [
{ name: '待提现金额', count: res.toBeWithdrawn, color: '#1890FF', class: 'one', icon: 'iconzhichujine1' },
{
name: '佣金总金额',
count: res.commissionTotal,
color: '#A277FF',
class: 'two',
icon: 'iconzhifuyongjinjine1',
},
{ name: '已提现金额', count: res.withdrawn, color: '#EF9C20', class: 'three', icon: 'iconyingyee1' },
{ name: '未提现金额', count: res.unDrawn, color: '#1BBE6B', class: 'four', icon: 'iconyuezhifujine2' },
];
});
},
// 选择时间
selectChange(tab) {
this.timeVal = [];
this.tableFrom.dateLimit = tab;
this.tableFrom.page = 1;
this.getList();
this.getBalance();
},
// 具体日期
onchangeTime(e) {
this.timeVal = e;
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : '';
this.tableFrom.page = 1;
this.getList();
this.getBalance();
},
// 列表
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
applyListApi(this.tableFrom)
.then((res) => {
this.tableData.data = res.list;
this.tableData.total = res.total;
this.listLoading = false;
})
},
ok(id) {
this.$modalSure('审核通过吗').then(() => {
applyStatusApi({id: id, status: 1 }).then(() => {
this.$message.success('操作成功')
this.getList()
})
})
},
// 金额
getBalance() {
applyBalanceApi({dateLimit: this.tableFrom.dateLimit}).then(res => {
this.cardLists = [
{ name: '待提现金额', count: res.toBeWithdrawn,color:'#1890FF',class:'one',icon:'iconzhichujine1' },
{ name: '佣金总金额', count: res.commissionTotal,color:'#A277FF',class:'two',icon:'iconzhifuyongjinjine1' },
{ name: '已提现金额', count: res.withdrawn,color:'#EF9C20',class:'three',icon:'iconyingyee1' },
{ name: '未提现金额', count: res.unDrawn,color:'#1BBE6B',class:'four',icon:'iconyuezhifujine2' }
]
})
},
// 选择时间
selectChange(tab) {
this.timeVal = []
this.tableFrom.dateLimit = tab
this.tableFrom.page = 1;
this.getList();
this.getBalance();
},
// 具体日期
onchangeTime(e) {
this.timeVal = e
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : ''
this.tableFrom.page = 1;
this.getList();
this.getBalance();
},
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page;
applyListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
}).catch(() => {
this.listLoading = false
})
},
pageChange(page) {
this.tableFrom.page = page
this.getList()
},
handleSizeChange(val) {
this.tableFrom.limit = val
this.getList()
}
}
}
.catch(() => {
this.listLoading = false;
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList();
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList();
},
},
};
</script>
<style scoped>
.selWidth{
width: 350px;
}
.selWidth {
width: 350px;
}
::v-deep .dialog-footer-inner {
padding-top: 0 !important;
}
::v-deep [role='dialog'] .el-message-box__content {
padding: 30px 24px 20px !important;
}
</style>

View File

@@ -5,11 +5,7 @@
</template>
<script>
export default {
}
export default {};
</script>
<style lang="sass" scoped>
</style>
<style lang="sass" scoped></style>

View File

@@ -3,28 +3,39 @@
<el-card class="box-card">
<div class="clearfix">
<div class="container">
<el-form size="small" label-width="100px" inline>
<el-form-item label="时间选择:" class="width100">
<el-radio-group v-model="tableFrom.dateLimit" type="button" class="mr20" size="small" @change="selectChange(tableFrom.dateLimit)">
<el-radio-button v-for="(item,i) in fromList.fromTxt" :key="i" :label="item.val">{{ item.text }}</el-radio-button>
</el-radio-group>
<el-date-picker v-model="timeVal" value-format="yyyy-MM-dd" format="yyyy-MM-dd" size="small" type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;" @change="onchangeTime" />
<el-form size="small" label-width="70px" inline>
<el-form-item label="时间选择:">
<el-date-picker
v-model="timeVal"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
size="small"
type="daterange"
placement="bottom-end"
placeholder="自定义时间"
style="width: 250px"
@change="onchangeTime"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<el-form-item label="用户id">
<el-form-item label="用户ID">
<el-input v-model="tableFrom.uid" placeholder="用户id" class="selWidth" size="small" clearable>
<el-button slot="append" icon="el-icon-search" size="small" @click="getList(1)" />
</el-input>
</el-form-item>
<el-form-item label="订单号:">
<el-input v-model="tableFrom.keywords" placeholder="订单号" class="selWidth" size="small" clearable>
<el-button slot="append" icon="el-icon-search" size="small" @click="getList(1)" />
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" @click="getList(1)">搜索</el-button>
<el-button size="small" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<div class="mt20">
<div class="mt14">
<cards-data :card-lists="cardLists" v-if="checkPermi(['admin:recharge:balance'])" />
</div>
<el-card class="box-card">
@@ -36,39 +47,25 @@
class="table"
highlight-current-row
>
<el-table-column
prop="uid"
label="UID"
width="60"
/>
<el-table-column
label="头像"
min-width="80"
>
<el-table-column prop="uid" label="UID" width="60" />
<el-table-column label="头像" min-width="80">
<template slot-scope="scope">
<div class="demo-image__preview">
<el-image
:src="scope.row.avatar"
:preview-src-list="[scope.row.avatar]"
/>
<el-image :src="scope.row.avatar" :preview-src-list="[scope.row.avatar]" />
</div>
</template>
</el-table-column>
<el-table-column
prop="nickname"
label="用户昵称"
min-width="130"
/>
<el-table-column
prop="orderId"
label="订单号"
min-width="180"
/>
<el-table-column prop="nickname" label="用户昵称" min-width="130" />
<el-table-column prop="orderId" label="订单号" min-width="180" />
<el-table-column
sortable
label="支付金额"
min-width="120"
:sort-method="(a,b)=>{return a.price - b.price}"
:sort-method="
(a, b) => {
return a.price - b.price;
}
"
prop="price"
/>
<el-table-column
@@ -76,20 +73,18 @@
label="赠送金额"
min-width="120"
prop="givePrice"
:sort-method="(a,b)=>{return a.givePrice - b.givePrice}"
:sort-method="
(a, b) => {
return a.givePrice - b.givePrice;
}
"
/>
<el-table-column
label="充值类型"
min-width="80"
>
<el-table-column label="充值类型" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.rechargeType | rechargeTypeFilter }}</span>
</template>
</el-table-column>
<el-table-column
label="支付时间"
min-width="150"
>
<el-table-column label="支付时间" width="170">
<template slot-scope="scope">
<span class="spBlock">{{ scope.row.payTime || '无' }}</span>
</template>
@@ -104,15 +99,12 @@
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
background
/>
</div>
</el-card>
<!--退款-->
<el-dialog
title="退款"
:visible.sync="dialogVisible"
width="500px"
:before-close="handleClose">
<el-dialog title="退款" :visible.sync="dialogVisible" width="500px" :before-close="handleClose">
<zb-parser
v-if="dialogVisible"
:form-id="130"
@@ -126,123 +118,139 @@
</template>
<script>
import { topUpLogListApi, balanceApi, topUpLogDeleteApi, refundApi } from '@/api/financial'
import cardsData from '@/components/cards/index'
import zbParser from '@/components/FormGenerator/components/parser/ZBParser'
import { checkPermi } from "@/utils/permission"; // 权限判断函数
export default {
name: 'AccountsBill',
components: { cardsData, zbParser },
data() {
return {
editData: {},
isCreate: 1,
cardLists: [],
timeVal: [],
tableData: {
data: [],
total: 0
},
listLoading: true,
tableFrom: {
uid: '',
// paid: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20
},
fromList: this.$constants.fromList,
dialogVisible: false
}
import { topUpLogListApi, balanceApi, topUpLogDeleteApi, refundApi } from '@/api/financial';
import cardsData from '@/components/cards/index';
import zbParser from '@/components/FormGenerator/components/parser/ZBParser';
import { checkPermi } from '@/utils/permission'; // 权限判断函数
export default {
name: 'AccountsBill',
components: { cardsData, zbParser },
data() {
return {
editData: {},
isCreate: 1,
cardLists: [],
timeVal: [],
tableData: {
data: [],
total: 0,
},
listLoading: true,
tableFrom: {
uid: '',
// paid: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20,
},
fromList: this.$constants.fromList,
dialogVisible: false,
};
},
mounted() {
this.getList();
this.getStatistics();
},
methods: {
checkPermi,
//重置
handleReset() {
this.tableFrom.uid = '';
this.tableFrom.dateLimit = '';
this.tableFrom.keywords = '';
this.timeVal = [];
this.getList();
},
mounted() {
this.getList()
this.getStatistics()
resetForm(formValue) {
this.handleClose();
},
methods: {
checkPermi,
resetForm(formValue) {
this.handleClose();
},
handlerSubmit(formValue) {
refundApi(formValue).then(data => {
this.$message.success('操作成功')
this.dialogVisible = false
this.editData = {}
this.getList()
handlerSubmit(formValue) {
refundApi(formValue).then((data) => {
this.$message.success('操作成功');
this.dialogVisible = false;
this.editData = {};
this.getList();
});
},
handleClose() {
this.dialogVisible = false;
this.editData = {};
},
handleRefund(row) {
if (row.price == row.refundPrice) return this.$message.waiting('已退完支付金额!不能再退款了 ');
if (row.rechargeType === 'balance') return this.$message.waiting('佣金转入余额,不能退款 ');
this.editData.orderId = row.orderId;
this.editData.id = row.id;
this.dialogVisible = true;
},
handleDelete(row, idx) {
this.$modalSure().then(() => {
topUpLogDeleteApi({ id: row.id }).then(() => {
this.$message.success('删除成功');
this.getList(this.tableFrom.page);
});
});
},
// 选择时间
selectChange(tab) {
this.tableFrom.dateLimit = tab;
this.timeVal = [];
this.tableFrom.page = 1;
this.getList();
},
// 具体日期
onchangeTime(e) {
this.timeVal = e;
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : '';
this.tableFrom.page = 1;
this.getList();
},
// 列表
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
topUpLogListApi(this.tableFrom)
.then((res) => {
this.tableData.data = res.list;
this.tableData.total = res.total;
this.listLoading = false;
})
},
handleClose() {
this.dialogVisible = false
this.editData = {}
},
handleRefund(row) {
if(row.price == row.refundPrice) return this.$message.waiting('已退完支付金额!不能再退款了 ');
if(row.rechargeType === 'balance') return this.$message.waiting('佣金转入余额,不能退款 ');
this.editData.orderId = row.orderId
this.editData.id = row.id
this.dialogVisible = true
},
handleDelete(row, idx) {
this.$modalSure().then(() => {
topUpLogDeleteApi( {id:row.id} ).then(() => {
this.$message.success('删除成功')
this.getList(this.tableFrom.page)
})
})
},
// 选择时间
selectChange(tab) {
this.tableFrom.dateLimit = tab
this.timeVal = []
this.tableFrom.page = 1;
this.getList()
},
// 具体日期
onchangeTime(e) {
this.timeVal = e
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : ''
this.tableFrom.page = 1;
this.getList()
},
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page;
topUpLogListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
}).catch(() => {
this.listLoading = false
})
},
pageChange(page) {
this.tableFrom.page = page
this.getList()
},
handleSizeChange(val) {
this.tableFrom.limit = val
this.getList()
},
// 统计
getStatistics() {
balanceApi().then(res => {
const stat = res
this.cardLists = [
{ name: '充值总金额', count: stat.total, color:'#1890FF',class:'one',icon:'iconchongzhijine' },
{ name: '小程序充值金额', count: stat.routine, color:'#A277FF',class:'two',icon:'iconweixinzhifujine' },
{ name: '公众号充值金额', count: stat.weChat, color:'#EF9C20',class:'three',icon:'iconyuezhifujine1' }
]
})
}
}
}
.catch(() => {
this.listLoading = false;
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList();
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList();
},
// 统计
getStatistics() {
balanceApi().then((res) => {
const stat = res;
this.cardLists = [
{ name: '充值总金额', count: stat.total, color: '#1890FF', class: 'one', icon: 'iconchongzhijine' },
{ name: '小程序充值金额', count: stat.routine, color: '#A277FF', class: 'two', icon: 'iconweixinzhifujine' },
{ name: '公众号充值金额', count: stat.weChat, color: '#EF9C20', class: 'three', icon: 'iconyuezhifujine1' },
];
});
},
},
};
</script>
<style scoped>
.selWidth{
width: 300px;
}
.selWidth {
width: 300px;
}
::v-deep .el-card__body {
padding: 20px 20px 0;
}
.block {
padding-bottom: 20px;
}
</style>

View File

@@ -5,11 +5,7 @@
</template>
<script>
export default {
}
export default {};
</script>
<style lang="sass" scoped>
</style>
<style lang="sass" scoped></style>

View File

@@ -1,33 +1,47 @@
<template>
<div class="divBox">
<el-card class="box-card">
<div slot="header" class="clearfix">
<div class="container">
<el-form size="small" label-width="100px">
<el-form-item label="时间选择:" class="width100">
<el-radio-group v-model="tableFrom.dateLimit" type="button" class="mr20" size="small" @change="selectChange(tableFrom.dateLimit)">
<el-radio-button v-for="(item,i) in fromList.fromTxt" :key="i" :label="item.val">{{ item.text }}</el-radio-button>
</el-radio-group>
<el-date-picker v-model="timeVal" value-format="yyyy-MM-dd" format="yyyy-MM-dd" size="small" type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;" @change="onchangeTime" />
</el-form-item>
<el-form-item label="关键字" class="width100">
<el-input v-model="tableFrom.keywords" placeholder="微信昵称/ID" class="selWidth" size="small" clearable>
<el-button slot="append" icon="el-icon-search" size="small" @click="getList(1)" />
</el-input>
</el-form-item>
<el-form-item label="明细类型">
<el-select v-model="tableFrom.title" size="small" clearable placeholder="请选择" @change="selectType">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<el-card :bordered="false" shadow="never" class="ivu-mt" :body-style="{ padding: 0 }">
<div class="padding-add">
<el-form inline size="small" label-width="70px">
<el-form-item label="时间选择:">
<el-date-picker
v-model="timeVal"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
size="small"
type="daterange"
placement="bottom-end"
placeholder="自定义时间"
style="width: 250px"
@change="onchangeTime"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<el-form-item label="关键字:">
<el-input v-model="tableFrom.keywords" placeholder="微信昵称/ID" class="selWidth" size="small" clearable>
</el-input>
</el-form-item>
<el-form-item label="明细类型:">
<el-select
class="selWidth"
v-model="tableFrom.title"
size="small"
clearable
placeholder="请选择"
@change="selectType"
>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" @click="getList(1)">搜索</el-button>
<el-button size="small" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<el-card class="box-card mt14">
<el-table
v-loading="listLoading"
:data="tableData.data"
@@ -36,41 +50,20 @@
class="table"
highlight-current-row
>
<el-table-column
prop="uid"
label="会员ID"
width="80"
/>
<el-table-column
prop="nickName"
label="昵称"
min-width="130"
/>
<el-table-column
label="金额"
min-width="120"
>
<el-table-column prop="uid" label="会员ID" width="80" />
<el-table-column prop="nickName" label="昵称" min-width="130" />
<el-table-column label="金额" min-width="120">
<template slot-scope="scope">
<div>
<span :class="scope.row.pm == 1 ? 'color_red': 'color_green'">{{scope.row.pm == 1 ? '+' : '-' }}{{scope.row.number}}</span>
</div>
</template>>
<span :class="scope.row.pm == 1 ? 'color_red' : 'color_green'"
>{{ scope.row.pm == 1 ? '+' : '-' }}{{ scope.row.number }}</span
>
</div> </template
>>
</el-table-column>
<el-table-column
label="明细类型"
min-width="100"
prop="title"
/>
<el-table-column
prop="mark"
label="备注"
min-width="200"
/>
<el-table-column
prop="createTime"
label="创建时间"
min-width="150"
/>
<el-table-column label="明细类型" min-width="100" prop="title" />
<el-table-column prop="mark" label="备注" min-width="200" />
<el-table-column prop="createTime" label="创建时间" width="170" />
</el-table>
<div class="block">
<el-pagination
@@ -81,6 +74,7 @@
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
background
/>
</div>
</el-card>
@@ -88,88 +82,98 @@
</template>
<script>
import { monitorListApi, monitorListOptionApi } from '@/api/financial'
export default {
name: 'AccountsCapital',
data() {
return {
timeVal: [],
tableData: {
data: [],
total: 0
},
listLoading: true,
tableFrom: {
title: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20,
},
categoryId: '',
fromList: this.$constants.fromList,
options:[
{value: 'recharge',label: '充值支付'},
{value: 'admin',label: '后台操作'},
{value: 'productRefund',label: '商品退款'},
{value: 'payProduct',label: '购买商品'},
]
}
},
mounted() {
// this.getTypes()
this.getList()
},
methods: {
selectChange(tab) {
this.tableFrom.dateLimit = tab
this.timeVal = []
this.tableFrom.page = 1;
this.getList()
import { monitorListApi, monitorListOptionApi } from '@/api/financial';
export default {
name: 'AccountsCapital',
data() {
return {
timeVal: [],
tableData: {
data: [],
total: 0,
},
// 具体日期
onchangeTime(e) {
this.timeVal = e
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : ''
this.tableFrom.page = 1;
this.getList()
listLoading: true,
tableFrom: {
title: '',
dateLimit: '',
keywords: '',
page: 1,
limit: 20,
},
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page;
monitorListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
}).catch((res) => {
this.$message.error(res.message)
this.listLoading = false
categoryId: '',
fromList: this.$constants.fromList,
options: [
{ value: 'recharge', label: '充值支付' },
{ value: 'admin', label: '后台操作' },
{ value: 'productRefund', label: '商品退款' },
{ value: 'payProduct', label: '购买商品' },
],
};
},
mounted() {
// this.getTypes()
this.getList();
},
methods: {
//重置
handleReset() {
this.tableFrom.title = '';
this.tableFrom.dateLimit = '';
this.tableFrom.keywords = '';
this.timeVal = [];
this.getList();
},
selectChange(tab) {
this.tableFrom.dateLimit = tab;
this.timeVal = [];
this.tableFrom.page = 1;
this.getList();
},
// 具体日期
onchangeTime(e) {
this.timeVal = e;
this.tableFrom.dateLimit = e ? this.timeVal.join(',') : '';
this.tableFrom.page = 1;
this.getList();
},
// 列表
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
monitorListApi(this.tableFrom)
.then((res) => {
this.tableData.data = res.list;
this.tableData.total = res.total;
this.listLoading = false;
})
},
pageChange(page) {
this.tableFrom.page = page
this.getList()
},
handleSizeChange(val) {
this.tableFrom.limit = val
this.getList()
},
selectType(e){
this.getList();
}
}
}
.catch((res) => {
this.$message.error(res.message);
this.listLoading = false;
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList();
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList();
},
selectType(e) {
this.getList();
},
},
};
</script>
<style scoped>
.selWidth{
width: 300px;
}
.color_red{
color:#F5222D;
}
.color_green{
color:#7ABE5C;
}
.selWidth {
width: 300px;
}
.color_red {
color: #f5222d;
}
.color_green {
color: #7abe5c;
}
</style>