Commit 4bd725f2 authored by 耿少京's avatar 耿少京

Merge branch 'withdrawal_riskControl' into 'master'

Withdrawal risk control

See merge request bp/op-web-service!22
parents 5885f7ff 64016a4d
......@@ -114,6 +114,27 @@ exports.getReblackList = async ctx => {
}
ctx.body = await req(ctx, opts)
}
// 获取钱包账户余额状态
exports.getWalletAccountStatus = async ctx=>{
const url = `${WITHDRAWAL_URI}/wallet/background/get_wallet_account_status`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx,opts)
}
// 钱包账户余额状态
exports.resetAccountStatus = async ctx=>{
const url = `${WITHDRAWAL_URI}/wallet/background/reset_wallet_account_status`;
const opts = {
url,
method:"POST",
json:true,
body:ctx.request.body
}
ctx.body = await req(ctx,opts)
}
const getUserPermission = async (ctx) => {
const url = `${WITHDRAWAL_URI}/merchant/authority/get_role_list`;
......
......@@ -128,5 +128,7 @@ router.get(`${API_VERSION}/get_account_list`, withdrawal.getAccountList)
router.get(`${API_VERSION}/get_record_list`, withdrawal.getRecordList)
router.post(`${API_VERSION}/get_account_black_list`, withdrawal.getAccountBlackList)
router.post(`${API_VERSION}/get_reblack_list`, withdrawal.getReblackList)
router.get(`${API_VERSION}/get_wallet_account_status`, withdrawal.getWalletAccountStatus)
router.post(`${API_VERSION}/reset_wallet_account_status`, withdrawal.resetAccountStatus)
module.exports = router;
\ No newline at end of file
......@@ -9,6 +9,11 @@
prop="withdraw_address"
align="center"
></el-table-column>
<el-table-column
label="风控等级"
prop="risk_level_text"
align="center"
></el-table-column>
<el-table-column
label="申请用户"
prop="user_id"
......@@ -168,7 +173,7 @@ export default {
},
// 提现申请审核详情
async handleDetail(id) {
this.$router.push({ name: 'withdrawDetail', query: {id: id} })
this.$router.push({ name: "withdrawDetail", query: { id: id } });
// try {
// const res = await getApplyDetail({ id });
// const showData = res.info || {};
......@@ -307,7 +312,9 @@ export default {
const WITHDRAWAL_PERMISSION_ID1 = 10000005;
let withdrawlPermission = this.permissions.filter(
(item) => (item.id === WITHDRAWAL_PERMISSION_ID || item.id === WITHDRAWAL_PERMISSION_ID1)
(item) =>
item.id === WITHDRAWAL_PERMISSION_ID ||
item.id === WITHDRAWAL_PERMISSION_ID1
);
// 无此模块权限
if (withdrawlPermission.length === 0) {
......@@ -317,7 +324,8 @@ export default {
const AUDIT_PERMSSION_ID = 14;
const AUDIT_PERMSSION_ID1 = 10000014;
const auditPermission = withdrawlPermission[0].sub_permissions.filter(
(item) => (item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1)
(item) =>
item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1
);
return auditPermission.length !== 0;
......@@ -345,7 +353,6 @@ export default {
}
}
}
}
.el-message-box {
width: 80vw;
......
......@@ -52,7 +52,7 @@
padding-right: 10px;
}
.list-right {
display:inline-block;
// display:inline-block;
width: 70%;
}
}
......@@ -93,11 +93,11 @@
}
.apply-list {
li {
width: 70%;
width: 90%;
display: flex;
justify-content: space-between;
span {
width: 70px;
width: 150px;
text-align: left;
}
}
......@@ -108,3 +108,12 @@
width: 20vw;
margin: 0 auto;
}
.shell {
float: right;
width: 550px;
margin-top: -20px;
}
.open {
float: right;
margin-bottom: 10px;
}
......@@ -7,6 +7,11 @@
@tab-click="handleTabChange"
v-model="searchProps.status"
>
<!-- <el-tab-pane
label="风控审核"
:name="TABS.riskControl"
@tab-click="handleTabChange"
></el-tab-pane> -->
<el-tab-pane
label="待审核"
:name="TABS.pending"
......@@ -31,15 +36,19 @@
</el-tabs>
</div>
<!-- 提现失败页 -->
<!-- <auditTab v-if="status_text == 'fourth'"></auditTab> -->
<el-card class="goods">
<!-- 筛选区 -->
<el-form inline class="search_condition">
<!-- 用户id -->
<el-form-item label="用户id">
<el-input v-model="searchProps.user_id" @input="
searchProps.user_id = $event
.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, '')
<el-input
clearable
v-model="searchProps.user_id"
@input="
searchProps.user_id = $event.replace(
/[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g,
''
)
"
></el-input>
</el-form-item>
......@@ -50,6 +59,43 @@
>查询</el-button
>
</el-form>
<div class="shell" v-if="searchProps.status == TABS.failed">
<div class="open" v-for="(item, index) in balance" :key="index">
<span>{{ item.account }} 商户号余额不足,请在充值后操作开启</span>
<el-button
type="primary"
@click="handleResetStatus(item.id)"
style="margin-left: 10px"
>开启</el-button
>
</div>
</div>
<!-- 风控审核列表 -->
<!-- <el-table
class="goods_list"
:data="goodsList"
border
stripe
v-if="searchProps.status == TABS.riskControl"
style="width: 100%"
>
<el-table-column label="提现用户" prop="user_id" align="center">
</el-table-column>
<el-table-column label="风控状态" prop="status_text" align="center">
</el-table-column>
<el-table-column label="所在圈" prop="city_name" align="center">
</el-table-column>
<el-table-column
label="提现登录地点"
prop="withdraw_address"
align="center"
>
</el-table-column>
<el-table-column label="提现金额" prop="amount" align="center">
</el-table-column>
<el-table-column label="申请时间" prop="create_time" align="center">
</el-table-column>
</el-table> -->
<!-- 列表区 -->
<el-table class="goods_list" :data="goodsList" border stripe>
<el-table-column
......@@ -67,6 +113,11 @@
prop="withdraw_address"
align="center"
></el-table-column>
<el-table-column
label="风控等级"
prop="risk_level_text"
align="center"
></el-table-column>
<el-table-column
label="提现金额"
prop="amount"
......@@ -76,31 +127,37 @@
label="最近24小时收入"
prop="lately_amount"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="近两天分享增长"
prop="lately_share"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="近两天分享下载量"
prop="lately_download"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="历史分享增长"
prop="history_share"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="历史分享下载量"
prop="history_download"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="历史下载留存"
prop="history_download_keep"
align="center"
v-if="searchProps.status !== TABS.failed"
></el-table-column>
<el-table-column
label="申请时间"
......@@ -109,6 +166,12 @@
></el-table-column>
<el-table-column label="状态" prop="status_text" align="center">
</el-table-column>
<el-table-column
label="失败原因"
prop="desc"
align="center"
v-if="searchProps.status == TABS.failed"
></el-table-column>
<el-table-column
label="审核时间"
prop="withdraw_audit_time"
......@@ -122,10 +185,7 @@
<!-- 操作快捷键 -->
<el-table-column label="操作" align="center" width="130">
<template v-slot:default="scope">
<el-button
type="text"
@click="handleDetail('look', scope.row.id)"
v-show="searchProps.status !== '3'"
<el-button type="text" @click="handleDetail('look', scope.row.id)"
>查看</el-button
>
<el-button
......@@ -197,7 +257,15 @@
<ul class="listShow">
<li>
<span class="list-left">登录地点 :</span>
<span class="list-right">{{ dialogData.showData.withdraw_address }}</span>
<span class="list-right">{{
dialogData.showData.withdraw_address
}}</span>
</li>
<li>
<span class="list-left">风控等级 :</span>
<span class="list-right">{{
dialogData.showData.risk_level_text
}}</span>
</li>
<li>
<span class="list-left">提现金额 :</span>
......@@ -233,6 +301,10 @@
dialogData.showData.history_download_keep
}}</span>
</li>
<li v-if="searchProps.status == TABS.failed">
<span class="list-left">失败原因 :</span
><span class="list-right">{{ dialogData.showData.desc }}</span>
</li>
</ul>
<el-form-item class="text-area" label="奖励明细:">
<el-table
......@@ -301,6 +373,8 @@ import {
getApplyDetail,
getFreezingFund,
getRolesForUser,
getWalletAccountStatus,
resetAccountStatus,
} from "@/service/Withdrawal/withdrawal";
import { ElMessage } from "element-plus";
import { fetchCurrentUser } from "../../../service/user";
......@@ -311,6 +385,7 @@ const TABS = {
passed: "1",
rejected: "2",
failed: "3",
// riskControl: "10",
};
export default {
......@@ -358,15 +433,21 @@ export default {
award: "", //奖励明细
outerVisible: false, //外层弹框
permissions: [],
// constants
TABS,
id: "",
status: 0,
balance: [],
};
},
created() {
this.getApplyList();
this.getWalletAccountStatus();
this.permissionsAudit();
},
async mounted() {
methods: {
async permissionsAudit() {
const res = await this.getPermissionsAll();
if (!res) {
redirectToLogin();
......@@ -392,7 +473,7 @@ export default {
return ElMessage("您没有权限");
}
},
methods: {
async getPermissionsAll() {
// 不能够信赖 store 中的 email,无法知道全局中的 fetchCurrentUser 处理完毕
// 是一个重构的点
......@@ -407,11 +488,13 @@ export default {
handleTabChange() {
this.searchProps.page = 0;
this.getApplyList();
this.getWalletAccountStatus();
},
// 分页
handleCurrentChange(e) {
this.searchProps.page = e;
this.getApplyList();
this.getWalletAccountStatus();
},
// 提现申请审核详情
async handleDetail(showMode, id) {
......@@ -425,13 +508,28 @@ export default {
}
},
// 二次确认弹框
handleConfirm(action, params) {
handleConfirm(
action,
params,
successCb = () => {
this.getApplyList();
this.outerVisible = false;
}
) {
const urlObj = {
黑名单: getBlackList,
通过: getWithdrawAudit,
拒绝: getWithdrawAudit,
开启: resetAccountStatus,
};
this.$confirm(`<p>你确定此操作吗</p><p>${action}</p>`, "再次确认", {
this.$confirm(
`${
this.searchProps.status == TABS.failed
? "确认已完成商户号充值"
: `<p>你确定此操作吗</p><p>${action}</p>`
}`,
"再次确认",
{
confirmButtonText: "取消",
cancelButtonText: "确定",
cancelButtonClass: "cancel",
......@@ -441,7 +539,8 @@ export default {
center: true,
showClose: false,
type: "warning",
})
}
)
.then(() => {
this.$message({
type: "info",
......@@ -451,8 +550,7 @@ export default {
.catch(async () => {
try {
const res = await urlObj[action](params);
this.getApplyList();
this.outerVisible = false;
successCb();
this.$message({
type: "success",
message: "操作成功",
......@@ -508,14 +606,36 @@ export default {
ElMessage.error("请求查询列表失败");
}
},
// 获取钱包账户余额状态
async getWalletAccountStatus() {
try {
const res = await getWalletAccountStatus({
id: this.id,
status: this.status,
});
this.balance = res.result.filter((item) => !!item.status);
console.log(res);
console.log(this.balance);
} catch (error) {
ElMessage.error("请求账户余额状态失败");
}
},
// 查询
findProducts() {
this.getApplyList();
this.getWalletAccountStatus();
},
// 开启按钮
handleResetStatus(id) {
this.handleConfirm("开启", { id }, () => {
this.getWalletAccountStatus();
});
},
// 解冻
async handleFinzingFind(id) {
try {
await getFreezingFund({ id });
const res = await getFreezingFund({ id });
if (res.code !== 0) return this.$message.error(res.reason);
this.getApplyList();
ElMessage.success("解冻成功");
} catch (error) {
......@@ -553,7 +673,9 @@ export default {
const WITHDRAWAL_PERMISSION_ID1 = 10000005;
let withdrawlPermission = this.permissions.filter(
(item) => (item.id === WITHDRAWAL_PERMISSION_ID || item.id === WITHDRAWAL_PERMISSION_ID1)
(item) =>
item.id === WITHDRAWAL_PERMISSION_ID ||
item.id === WITHDRAWAL_PERMISSION_ID1
);
// 无此模块权限
if (withdrawlPermission.length === 0) {
......@@ -563,7 +685,8 @@ export default {
const AUDIT_PERMSSION_ID = 14;
const AUDIT_PERMSSION_ID1 = 10000014;
const auditPermission = withdrawlPermission[0].sub_permissions.filter(
(item) => (item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1)
(item) =>
item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1
);
return auditPermission.length !== 0;
......
......@@ -2,13 +2,34 @@
<div class="goods-h5">
<el-form>
<ul class="apply-list">
<li><span>登录地点:</span><span>{{ dialogData.showData.withdraw_address }}</span></li>
<li> 提现用户:<span>{{ dialogData.showData.user_id }}</span></li>
<li> 提现金额:<span>{{ dialogData.showData.amount }}</span></li>
<li> 最近24小时收入:<span>{{ dialogData.showData.lately_amount }}</span></li>
<li> 近两天分享增长:<span>{{ dialogData.showData.lately_share }}</span></li>
<li> 近两天分享下载量:<span>{{ dialogData.showData.lately_download }}</span></li>
<li> 历史分享增长: <span>{{ dialogData.showData.history_share }}</span></li>
<li>
<span>登录地点:</span
><span>{{ dialogData.showData.withdraw_address }}</span>
</li>
<li>
<span>风控等级:</span
><span>{{ dialogData.showData.risk_level_text }}</span>
</li>
<li>
提现用户:<span>{{ dialogData.showData.user_id }}</span>
</li>
<li>
提现金额:<span>{{ dialogData.showData.amount }}</span>
</li>
<li>
最近24小时收入:<span>{{ dialogData.showData.lately_amount }}</span>
</li>
<li>
近两天分享增长:<span>{{ dialogData.showData.lately_share }}</span>
</li>
<li>
近两天分享下载量:<span>{{
dialogData.showData.lately_download
}}</span>
</li>
<li>
历史分享增长: <span>{{ dialogData.showData.history_share }}</span>
</li>
</ul>
<el-form-item label="奖励明细:">
<el-table
......@@ -17,28 +38,15 @@
align="center"
max-height="300"
size="small"
>
<el-table-column
align="center"
prop="create_time"
label="流水时间"
>
<el-table-column align="center" prop="create_time" label="流水时间">
</el-table-column>
<el-table-column
align="center"
prop="amount"
label="分享用户量"
>
<el-table-column align="center" prop="amount" label="分享用户量">
<template v-slot:default="scope">
<span>{{ scope ? "+" + scope.row.amount : null }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
prop="third_order_desc"
label="说明"
>
<el-table-column align="center" prop="third_order_desc" label="说明">
</el-table-column>
</el-table>
</el-form-item>
......@@ -51,10 +59,7 @@
@click="handleAdoptRefuse('通过')"
>通过</el-button
>
<el-button
type="danger"
size="small"
@click="handleAdoptRefuse('拒绝')"
<el-button type="danger" size="small" @click="handleAdoptRefuse('拒绝')"
>拒绝</el-button
>
<el-button
......@@ -64,11 +69,7 @@
>黑名单</el-button
>
</div>
<el-button
size="small"
type="primary"
v-else
@click="$router.go(-1)"
<el-button size="small" type="primary" v-else @click="$router.go(-1)"
>返回</el-button
>
</div>
......@@ -118,9 +119,7 @@ export default {
const showData = res.info || {};
this.dialogData = { ...this.dialogData, showData };
},
async mounted() {
},
async mounted() {},
methods: {
async getPermissionsAll() {
// 不能够信赖 store 中的 email,无法知道全局中的 fetchCurrentUser 处理完毕
......@@ -157,7 +156,7 @@ export default {
})
.catch(async () => {
const res = await urlObj[action](params);
if(+res.code === 0) {
if (+res.code === 0) {
this.$message({
type: "success",
message: "操作成功",
......@@ -205,7 +204,9 @@ export default {
const WITHDRAWAL_PERMISSION_ID1 = 10000005;
let withdrawlPermission = this.permissions.filter(
(item) => (item.id === WITHDRAWAL_PERMISSION_ID || item.id === WITHDRAWAL_PERMISSION_ID1)
(item) =>
item.id === WITHDRAWAL_PERMISSION_ID ||
item.id === WITHDRAWAL_PERMISSION_ID1
);
// 无此模块权限
if (withdrawlPermission.length === 0) {
......@@ -215,7 +216,8 @@ export default {
const AUDIT_PERMSSION_ID = 14;
const AUDIT_PERMSSION_ID1 = 10000014;
const auditPermission = withdrawlPermission[0].sub_permissions.filter(
(item) => (item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1)
(item) =>
item.id === AUDIT_PERMSSION_ID || item.id === AUDIT_PERMSSION_ID1
);
return auditPermission.length !== 0;
......
......@@ -68,3 +68,13 @@ export async function getReblackList(params) {
const res = await axios.post("/api/v1/get_reblack_list",params)
return res;
}
// 获取钱包账户余额状态
export async function getWalletAccountStatus(params) {
const res = await axios.get("/api/v1/get_wallet_account_status",{params})
return res;
}
// 钱包账户余额状态(开启按钮)
export async function resetAccountStatus(params) {
const res = await axios.post("/api/v1/reset_wallet_account_status",params)
return res;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment