1、会员银行卡,会员封禁记录,账户封禁记录,账户新增增加字段
This commit is contained in:
parent
6623142ba2
commit
91357619d6
@ -99,3 +99,12 @@ export function syncTenantDict() {
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 租户封禁记录
|
||||
export function getTenantBannelList(data) {
|
||||
return request({
|
||||
url: `/system/tenant/forbidden/list`,
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
});
|
||||
}
|
||||
|
@ -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 />
|
||||
* 前端开发框架 Vue3、TS、Element 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 />
|
||||
* 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释<br />
|
||||
* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br />
|
||||
* 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码<br />
|
||||
* 部署方式 Docker 容器编排 一键部署业务集群<br />
|
||||
* 国际化 SpringMessage Spring标准国际化方案<br />
|
||||
</p>
|
||||
<p><b>当前版本:</b> <span>v5.4.0</span></p>
|
||||
<p>
|
||||
<el-tag type="danger">¥免费开源</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 :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 :sm="24" :lg="12" style="padding-left: 20px">
|
||||
<h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2>
|
||||
<p>
|
||||
RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
|
||||
<br />
|
||||
* 前端开发框架 Vue3、TS、Element UI<br />
|
||||
* 后端开发框架 Spring Boot<br />
|
||||
* 微服务开发框架 Spring Cloud、Spring Cloud Alibaba<br />
|
||||
* 容器框架 Undertow 基于 XNIO 的高性能容器<br />
|
||||
* 权限认证框架 Sa-Token、Jwt 支持多终端认证系统<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 />
|
||||
* 分布式监控 Prometheus、Grafana 全方位性能监控<br />
|
||||
* 其余与 Vue 版本一致<br />
|
||||
</p>
|
||||
<p><b>当前版本:</b> <span>v2.4.0</span></p>
|
||||
<p>
|
||||
<el-tag type="danger">¥免费开源</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="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>
|
||||
<el-divider />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -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 = () => {
|
||||
|
@ -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 = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user