1、会员银行卡,会员封禁记录,账户封禁记录,账户新增增加字段

This commit is contained in:
cuiyouliang 2025-06-20 17:10:00 +08:00
parent 6623142ba2
commit 91357619d6
6 changed files with 430 additions and 99 deletions

View File

@ -99,3 +99,12 @@ export function syncTenantDict() {
method: 'get'
});
}
// 租户封禁记录
export function getTenantBannelList(data) {
return request({
url: `/system/tenant/forbidden/list`,
method: 'post',
data: data
});
}

View File

@ -43,4 +43,14 @@ export interface TenantForm {
expireTime: string;
accountCount: number;
status: string;
businessLicense: string;
idCard: string;
bankCard: string;
inviteUserId: string | number;
}
export interface TenantModal {
total: number | string;
data: any[];
record: object;
}

View File

@ -179,3 +179,28 @@ export function getUserBalanceList(data) {
});
}
// 删除用户
export function deleteUser(id) {
return request({
url: `/ums/member/${id}`,
method: 'delete'
});
}
// 用户封禁记录
export function getUserBannelList(data) {
return request({
url: `/ums/forbidden/list`,
method: 'post',
data: data
});
}
// 用户银行卡信息
export function getUserBankCardList(data) {
return request({
url: `/ums/bank/list`,
method: 'post',
data: data
});
}

View File

@ -1,96 +1,74 @@
<template>
<div class="app-container home">
<el-row :gutter="20">
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>RuoYi-Vue-Plus多租户管理系统</h2>
<p>
RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
<br />
* 前端开发框架 Vue3TSElement Plus<br />
* 后端开发框架 Spring Boot<br />
* 容器框架 Undertow 基于 Netty 的高性能容器<br />
* 权限认证框架 Sa-Token 支持多终端认证系统<br />
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
* 缓存数据库 Redis 适配 6.X 最低 4.X<br />
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br />
* 数据库框架 p6spy 更强劲的 SQL 分析<br />
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br />
* 序列化框架 Jackson 统一使用 jackson 高效可靠<br />
* Redis客户端 Redisson 性能强劲API丰富<br />
* 分布式限流 Redisson 全局请求IP集群ID 多种限流<br />
* 分布式锁 Lock4j 注解锁工具锁 多种多样<br />
* 分布式幂等 Lock4j 基于分布式锁实现<br />
* 分布式链路追踪 SkyWalking 支持链路追踪网格分析度量聚合可视化<br />
* 分布式任务调度 SnailJob 高性能 高可靠 易扩展<br />
* 文件存储 Minio 本地存储<br />
* 文件存储 七牛阿里腾讯 云存储<br />
* 监控框架 SpringBoot-Admin 全方位服务监控<br />
* 校验框架 Validation 增强接口安全性 严谨性<br />
* Excel框架 FastExcel(原Alibaba EasyExcel) 性能优异 扩展性强<br />
* 文档框架 SpringDocjavadoc 无注解零入侵基于java注释<br />
* 工具类框架 HutoolLombok 减少代码冗余 增加安全性<br />
* 代码生成器 适配MPSpringDoc规范化代码 一键生成前后端代码<br />
* 部署方式 Docker 容器编排 一键部署业务集群<br />
* 国际化 SpringMessage Spring标准国际化方案<br />
</p>
<p><b>当前版本:</b> <span>v5.4.0</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
<p>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://gitee.com/dromara/RuoYi-Vue-Plus')">访问码云</el-button>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://github.com/dromara/RuoYi-Vue-Plus')">访问GitHub</el-button>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://plus-doc.dromara.org/#/ruoyi-vue-plus/changlog')"
>更新日志</el-button
>
</p>
<el-card>
<el-row>
<el-col :span="6">
<el-statistic title="用户数量" :value="268500" />
</el-col>
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2>
<p>
RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
<br />
* 前端开发框架 Vue3TSElement UI<br />
* 后端开发框架 Spring Boot<br />
* 微服务开发框架 Spring CloudSpring Cloud Alibaba<br />
* 容器框架 Undertow 基于 XNIO 的高性能容器<br />
* 权限认证框架 Sa-TokenJwt 支持多终端认证系统<br />
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
* 关系数据库 Oracle 适配 11g 12c<br />
* 关系数据库 PostgreSQL 适配 13 14<br />
* 关系数据库 SQLServer 适配 2017 2019<br />
* 缓存数据库 Redis 适配 6.X 最低 5.X<br />
* 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
* 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
* 服务网关 Spring Cloud Gateway 响应式高性能网关<br />
* 负载均衡 Spring Cloud Loadbalancer 负载均衡处理<br />
* RPC远程调用 Apache Dubbo 原生态使用体验高性能<br />
* 分布式限流熔断 Alibaba Sentinel 无侵入高扩展<br />
* 分布式事务 Alibaba Seata 无侵入高扩展 支持 四种模式<br />
* 分布式消息队列 Apache Kafka 高性能高速度<br />
* 分布式消息队列 Apache RocketMQ 高可用功能多样<br />
* 分布式消息队列 RabbitMQ 支持各种扩展插件功能多样性<br />
* 分布式搜索引擎 ElasticSearch 业界知名<br />
* 分布式链路追踪 Apache SkyWalking 链路追踪网格分析度量聚合可视化<br />
* 分布式日志中心 ELK 业界成熟解决方案<br />
* 分布式监控 PrometheusGrafana 全方位性能监控<br />
* 其余与 Vue 版本一致<br />
</p>
<p><b>当前版本:</b> <span>v2.4.0</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
<p>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://gitee.com/dromara/RuoYi-Cloud-Plus')">访问码云</el-button>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://github.com/dromara/RuoYi-Cloud-Plus')">访问GitHub</el-button>
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://plus-doc.dromara.org/#/ruoyi-cloud-plus/changlog')"
>更新日志</el-button
>
</p>
<el-col :span="6">
<el-statistic title="店铺数量" :value="268500" />
</el-col>
<el-col :span="6">
<el-statistic title="商品数量" :value="268500" />
</el-col>
<el-col :span="6">
<el-statistic title="订单数量" :value="268500" />
</el-col>
</el-row>
</el-card>
<el-card>
<el-row>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核商品 </el-row>
</el-col>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核店铺 </el-row>
</el-col>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核视频 </el-row>
</el-col>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核退款 </el-row>
</el-col>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核举报 </el-row>
</el-col>
<el-col :span="4">
<el-row> 9 </el-row>
<el-row> 待审核提现 </el-row>
</el-col>
</el-row>
</el-card>
<el-divider />
<el-row>
<el-col :span="12">
<el-card header="分佣额"></el-card>
</el-col>
<el-col :span="12">
<el-card header="收入支出(万)"></el-card>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-card header="用户量"></el-card>
</el-col>
<el-col :span="12">
<el-card header="短视频"></el-card>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-card header="店铺TOP20"></el-card>
</el-col>
<el-col :span="12">
<el-card header="商品TOP20"></el-card>
</el-col>
</el-row>
</div>
</template>

View File

@ -71,6 +71,10 @@
</el-table-column>
<el-table-column width="150" label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="封禁记录" placement="top">
<el-button v-hasPermi="['system:tenant:edit']" link type="primary" icon="User" @click="showTenantBannedInfoModal(scope.row, true)">
</el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top">
<el-button v-hasPermi="['system:tenant:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>
</el-tooltip>
@ -87,6 +91,51 @@
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
</el-card>
<!--租户封禁记录-->
<el-dialog title="店铺封禁信息" v-model="tenantBannedInfoModalVisible" width="900px" append-to-body>
<el-table v-loading="tenantBannedInfoTableLoading" :data="tenantBannedInfo.data" border empty-text="暂无数据">
<!-- <el-table-column label="手机号" prop="phone" width="150">
<template v-slot="scope">
{{ userBannedInfo.record.nickname }}
</template>
</el-table-column>
<el-table-column label="昵称" prop="nickname" width="150">
<template v-slot="scope">
{{ userBannedInfo.record.nickname }}
</template>
</el-table-column>-->
<el-table-column label="封禁原因" prop="reason">
<template v-slot="scope">
{{ getEmulistLabelById(scope.row.reason, tenantForbiddenReasonMap) }}
</template>
</el-table-column>
<el-table-column label="封禁次数" prop="times">
<template v-slot="scope">
{{ scope.row.times }}
</template>
</el-table-column>
<el-table-column label="封禁时长" prop="unit">
<template v-slot="scope">
{{ scope.row.duration }}
{{ getEmulistLabelById(scope.row.unit, tenantForbiddenUnitMap) }}
</template>
</el-table-column>
<el-table-column label="封禁开始-结束时间" prop="startTime">
<template v-slot="scope"> {{ scope.row.startTime }} - {{ scope.row.endTime }} </template>
</el-table-column>
</el-table>
<pagination
v-if="tenantBannedInfo.total"
:total="tenantBannedInfo.total"
v-model:page="bannedDataParams.current"
v-model:limit="bannedDataParams.size"
@pagination="
() => {
showTenantBannedInfoModal(tenantBannedInfo.record);
}
"
/>
</el-dialog>
<!-- 添加或修改租户对话框 -->
<el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" append-to-body>
<el-form ref="tenantFormRef" :model="form" :rules="rules" label-width="80px">
@ -129,6 +178,20 @@
<el-form-item label="企业简介" prop="intro">
<el-input v-model="form.intro" type="textarea" placeholder="请输入企业简介" />
</el-form-item>
<el-form-item label="营业执照" prop="businessLicense">
<el-input v-model="form.businessLicense" placeholder="请输入营业执照编号" />
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="form.idCard" placeholder="请输入身份证号" />
</el-form-item>
<el-form-item label="银行卡号" prop="bankCard">
<el-input v-model="form.bankCard" placeholder="请输入银行卡号" />
</el-form-item>
<el-form-item label="邀请人" prop="inviteUserId">
<el-input v-model="form.inviteUserId" placeholder="请输入邀请人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
@ -152,11 +215,12 @@ import {
updateTenant,
changeTenantStatus,
syncTenantPackage,
syncTenantDict
syncTenantDict,
getTenantBannelList
} from '@/api/system/tenant';
import { selectTenantPackage } from '@/api/system/tenantPackage';
import { useUserStore } from '@/store/modules/user';
import { TenantForm, TenantQuery, TenantVO } from '@/api/system/tenant/types';
import { TenantForm, TenantQuery, TenantVO, TenantModal } from '@/api/system/tenant/types';
import { TenantPkgVO } from '@/api/system/tenantPackage/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -173,6 +237,23 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const tenantBannedInfoModalVisible = ref(false);
const tenantBannedInfoTableLoading = ref(false);
const bannedDataParams = ref({
current: 1,
size: 10
});
//
const tenantBannedInfo = ref<TenantModal>({
total: 0,
data: [],
record: {}
});
const tenantForbiddenUnitMap = ref([]);
const tenantForbiddenReasonMap = ref([]);
const queryFormRef = ref<ElFormInstance>();
const tenantFormRef = ref<ElFormInstance>();
@ -197,7 +278,11 @@ const initFormData: TenantForm = {
packageId: '',
expireTime: '',
accountCount: 0,
status: '0'
status: '0',
businessLicense: '',
idCard: '',
bankCard: '',
inviteUserId: ''
};
const data = reactive<PageData<TenantForm, TenantQuery>>({
form: { ...initFormData },
@ -215,6 +300,10 @@ const data = reactive<PageData<TenantForm, TenantQuery>>({
contactUserName: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
contactPhone: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
companyName: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }],
businessLicense: [{ required: true, message: '营业执照编号不能为空', trigger: 'blur' }],
idCard: [{ required: true, message: '身份证不能为空', trigger: 'blur' }],
bankCard: [{ required: true, message: '银行卡不能为空', trigger: 'blur' }],
username: [
{ required: true, message: '用户名不能为空', trigger: 'blur' },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
@ -254,6 +343,42 @@ const handleStatusChange = async (row: TenantVO) => {
row.status = row.status === '0' ? '1' : '0';
}
};
//
const showTenantBannedInfoModal = (record, isFirst) => {
const { id } = tenantBannedInfo.record || {};
const reqParams = {
...bannedDataParams.value,
memberId: record.id ? record.id : id
};
tenantBannedInfoTableLoading.value = true;
if (isFirst) {
//
getBannedReasonEmu();
}
getTenantBannelList(reqParams)
.then((response) => {
const { records = [], total = 0 } = response.data || {};
if (isFirst) {
tenantBannedInfoModalVisible.value = true;
}
tenantBannedInfo.value = {
total: total,
data: records || [],
record: record
};
tenantBannedInfoTableLoading.value = false;
})
.catch(() => {
tenantBannedInfoTableLoading.value = false;
});
};
const getBannedReasonEmu = async () => {
const reasonMap1 = await proxy?.getDictionaryByKey('ums_forbidden_unit');
const reasonMap2 = await proxy?.getDictionaryByKey('sys_tenant_forbidden_reason');
tenantForbiddenUnitMap.value = reasonMap1;
tenantForbiddenReasonMap.value = reasonMap2;
};
//
const cancel = () => {

View File

@ -42,9 +42,11 @@
<el-table-column label="会员ID" prop="id" width="180" />
<el-table-column label="昵称" prop="nickname" width="150" />
<el-table-column label="手机号" prop="phoneHidden" width="150" />
<el-table-column label="注册日期" prop="createTime" width="150" />
<!-- <el-table-column label="钱包" prop="phoneHidden" width="150" />
<el-table-column label="营收" prop="phoneHidden" width="150" />
<el-table-column label="积分" prop="integral" width="150" />
<el-table-column label="实名认证信息" prop="userName" width="150" />
<el-table-column label="银行卡信息" prop="phoneHidden" width="150" />-->
<el-table-column label="账号状态" prop="status" width="150">
@ -107,6 +109,7 @@
<el-table-column label="操作" class-name="small-padding fixed-width" fixed="right" width="200">
<template v-slot="scope">
<el-button size="small" text type="primary" @click="showUserAccountModal(scope.row)">账户数据 </el-button>
<el-button size="small" text type="primary" @click="showUserBankCardInfoModal(scope.row, true)">银行卡 </el-button>
<el-button size="small" text type="primary">充值消费记录 </el-button>
<el-button size="small" text type="primary">开通代理 </el-button>
<el-button size="small" text type="primary" @click="showUserAccountEditModal(scope.row)">编辑 </el-button>
@ -114,8 +117,9 @@
<el-button size="small" text type="primary">开通易生支付 </el-button>
<el-button size="small" text type="primary" @click="showUserLoginInfoModal(scope.row, true)">登录记录 </el-button>
<el-button size="small" text type="primary">操作日志 </el-button>
<el-button size="small" text type="primary">封禁记录 </el-button>
<el-button size="small" text type="primary" @click="showUserBannedInfoModal(scope.row, true)">封禁记录 </el-button>
<el-button size="small" text type="primary" @click="showBlackListInfoModal(scope.row)">黑名单 </el-button>
<el-button size="small" text type="primary" @click="handleUserDelete(scope.row)">删除 </el-button>
<!-- <el-button size="small" text type="primary" @click="showStatistics(scope.row.id)" v-hasPermi="['ums:member:statistics']">查看数据 </el-button>
<el-button size="small" text type="primary" @click="goOrder(scope.row.phoneEncrypted)">查看下单</el-button>
<el-button size="small" text type="primary" @click="goCart(scope.row.phoneEncrypted)">查看购物车</el-button>-->
@ -178,7 +182,7 @@
</el-table>
</el-dialog>
<!--会员余额变更记录-->
<el-dialog title="会员余额变更记录" v-model="userBalanceInfoModalVisible" width="800px" append-to-body>
<el-dialog title="会员余额变更记录" v-model="userBalanceInfoModalVisible" width="900px" append-to-body>
<el-table v-loading="userBalanceInfoTableLoading" :data="userBalanceInfo.data" border empty-text="暂无数据">
<el-table-column label="昵称" width="150">
<template v-slot="scope">
@ -193,7 +197,7 @@
<el-table-column label="变更前余额" prop="beforeBalance" width="180" />
<el-table-column label="变更后余额" prop="afterBalance" />
<el-table-column label="变更的金额" prop="changeAmount" width="100" />
<el-table-column label="变更金额来源" prop="source" width="100" />
<el-table-column label="金额来源" prop="source" width="100" />
</el-table>
<pagination
v-if="userBalanceInfo.total"
@ -207,11 +211,56 @@
"
/>
</el-dialog>
<!--用户封禁记录-->
<el-dialog title="会员封禁信息" v-model="userBannedInfoModalVisible" width="900px" append-to-body>
<el-table v-loading="userBannedInfoTableLoading" :data="userBannedInfo.data" border empty-text="暂无数据">
<!-- <el-table-column label="手机号" prop="phone" width="150">
<template v-slot="scope">
{{ userBannedInfo.record.nickname }}
</template>
</el-table-column>
<el-table-column label="昵称" prop="nickname" width="150">
<template v-slot="scope">
{{ userBannedInfo.record.nickname }}
</template>
</el-table-column>-->
<el-table-column label="封禁原因" prop="reason">
<template v-slot="scope">
{{ getEmulistLabelById(scope.row.reason, userForbiddenReasonMap) }}
</template>
</el-table-column>
<el-table-column label="封禁次数" prop="times">
<template v-slot="scope">
{{ scope.row.times }}
</template>
</el-table-column>
<el-table-column label="封禁时长" prop="unit">
<template v-slot="scope">
{{ scope.row.duration }}
{{ getEmulistLabelById(scope.row.unit, userForbiddenUnitMap) }}
</template>
</el-table-column>
<el-table-column label="封禁开始-结束时间" prop="startTime">
<template v-slot="scope"> {{ scope.row.startTime }} - {{ scope.row.endTime }} </template>
</el-table-column>
</el-table>
<pagination
v-if="userBannedInfo.total"
:total="userBannedInfo.total"
v-model:page="bannedDataParams.current"
v-model:limit="bannedDataParams.size"
@pagination="
() => {
showUserBannedInfoModal(userBannedInfo.record);
}
"
/>
</el-dialog>
<!--会员登录信息-->
<el-dialog title="会员登录信息" v-model="userLoginInfoModalVisible" width="800px" append-to-body>
<el-table v-loading="userLoginInfoTableLoading" :data="userLoginInfo.data" border empty-text="暂无数据">
<el-table-column label="手机号" prop="phone" width="150" />
<el-table-column label="IP" prop="ipaddr" width="150"></el-table-column>
<el-table-column label="IP" prop="nickname" width="150"></el-table-column>
<el-table-column label="登陆地点" prop="loginLocation" width="180" />
<el-table-column label="浏览器类型" prop="browser" />
<el-table-column label="操作系统" prop="os" width="100" />
@ -222,9 +271,35 @@
:total="userLoginInfo.total"
v-model:page="loginDataParams.current"
v-model:limit="loginDataParams.size"
@pagination="showUserLoginInfoModal"
@pagination="
() => {
showUserLoginInfoModal(userBannedInfo.record);
}
"
/>
</el-dialog>
<!--会员银行卡信息-->
<el-dialog title="会员银行卡信息" v-model="userBankCardInfoModalVisible" width="800px" append-to-body>
<el-table v-loading="userBankCardInfoTableLoading" :data="userBankCardInfo.data" border empty-text="暂无数据">
<el-table-column label="id" prop="id" />
<el-table-column label="编码" prop="code" />
<el-table-column label="银行名称" prop="name"></el-table-column>
<el-table-column label="开户行地址" prop="address" />
</el-table>
<pagination
v-if="userBankCardInfo.total"
:total="userBankCardInfo.total"
v-model:page="bankCardDataParams.current"
v-model:limit="bankCardDataParams.size"
@pagination="
() => {
showUserBankCardInfoModal(userBannedInfo.record);
}
"
/>
</el-dialog>
<!--用户粉丝关注好友列表-->
<el-dialog
:title="userFansFriendFocusInfo.clickType == 1 ? '关注列表' : userFansFriendFocusInfo.clickType == 2 ? '粉丝列表' : '好友列表'"
@ -381,7 +456,10 @@ import {
getUserFocusList,
getUserFansList,
getUserBlackList,
getUserBalanceList
getUserBalanceList,
deleteUser,
getUserBannelList,
getUserBankCardList
} from '@/api/ums/member';
import dateUtil from '@/utils/DateUtil';
import { useUserStore } from '@/store/modules/user';
@ -486,7 +564,8 @@ export default {
//
userLoginInfo: {
total: 0,
data: []
data: [],
record: {}
},
userLoginInfoModalVisible: false,
userLoginInfoTableLoading: false,
@ -524,7 +603,35 @@ export default {
current: 1,
size: 10
},
userSexMap: []
userSexMap: [],
//
userBannedInfo: {
total: 0,
data: [],
record: {}
},
userBannedInfoModalVisible: false,
userBannedInfoTableLoading: false,
bannedDataParams: {
current: 1,
size: 10
},
userForbiddenUnitMap: [],
userForbiddenReasonMap: [],
//
userBankCardInfo: {
total: 0,
data: [],
record: {}
},
userBankCardInfoModalVisible: false,
userBankCardInfoTableLoading: false,
bankCardDataParams: {
current: 1,
size: 10
}
};
},
async created() {
@ -788,6 +895,43 @@ export default {
});
},
//
showUserBannedInfoModal(record, isFirst) {
const { id } = this.userBannedInfo.record || {};
const reqParams = {
...this.bannedDataParams,
memberId: record.id ? record.id : id
};
this.userLoginInfoTableLoading = true;
if (isFirst) {
//
this.getBannedReasonEmu();
}
getUserBannelList(reqParams)
.then((response) => {
const { records = [], total = 0 } = response.data || {};
if (isFirst) {
this.userBannedInfoModalVisible = true;
}
this.userBannedInfo = {
total: total,
data: records || [],
record: record
};
this.userBannedInfoTableLoading = false;
})
.catch(() => {
this.userBannedInfoTableLoading = false;
});
},
async getBannedReasonEmu() {
const userForbiddenUnitMap = await this.getDictionaryByKey('ums_forbidden_unit');
const userForbiddenReasonMap = await this.getDictionaryByKey('ums_member_forbidden');
this.userForbiddenUnitMap = userForbiddenUnitMap;
this.userForbiddenReasonMap = userForbiddenReasonMap;
},
//
showUserLoginInfoModal(record, isFirst) {
const { id } = this.userLoginInfo.record || {};
@ -814,6 +958,46 @@ export default {
});
},
//
showUserBankCardInfoModal(record, isFirst) {
const { id } = this.userBankCardInfo.record || {};
const reqParams = {
...this.bankCardDataParams,
memberId: record.id ? record.id : id
};
this.userBankCardInfoTableLoading = true;
getUserBankCardList(reqParams)
.then((response) => {
const { records = [], total = 0 } = response.data || {};
if (isFirst) {
this.userBankCardInfoModalVisible = true;
}
this.userBankCardInfo = {
total: total,
data: records || [],
record: record
};
this.userBankCardInfoTableLoading = false;
})
.catch(() => {
this.userBankCardInfoTableLoading = false;
});
},
/** 删除按钮操作 */
handleUserDelete(row) {
return this.$modal
.confirm('是否确认删除当前用户?')
.then(function () {
return deleteUser(row.id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
})
.catch(() => {});
},
//
showBlackListInfoModal(record) {
const reqParams = {