1、会员银行卡,会员封禁记录,账户封禁记录,账户新增增加字段
This commit is contained in:
parent
6623142ba2
commit
91357619d6
@ -99,3 +99,12 @@ export function syncTenantDict() {
|
|||||||
method: 'get'
|
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;
|
expireTime: string;
|
||||||
accountCount: number;
|
accountCount: number;
|
||||||
status: string;
|
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>
|
<template>
|
||||||
<div class="app-container home">
|
<div class="app-container home">
|
||||||
<el-row :gutter="20">
|
<el-card>
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
<el-row>
|
||||||
<h2>RuoYi-Vue-Plus多租户管理系统</h2>
|
<el-col :span="6">
|
||||||
<p>
|
<el-statistic title="用户数量" :value="268500" />
|
||||||
RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
|
</el-col>
|
||||||
<br />
|
<el-col :span="6">
|
||||||
* 前端开发框架 Vue3、TS、Element Plus<br />
|
<el-statistic title="店铺数量" :value="268500" />
|
||||||
* 后端开发框架 Spring Boot<br />
|
</el-col>
|
||||||
* 容器框架 Undertow 基于 Netty 的高性能容器<br />
|
<el-col :span="6">
|
||||||
* 权限认证框架 Sa-Token 支持多终端认证系统<br />
|
<el-statistic title="商品数量" :value="268500" />
|
||||||
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
|
</el-col>
|
||||||
* 缓存数据库 Redis 适配 6.X 最低 4.X<br />
|
<el-col :span="6">
|
||||||
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br />
|
<el-statistic title="订单数量" :value="268500" />
|
||||||
* 数据库框架 p6spy 更强劲的 SQL 分析<br />
|
</el-col>
|
||||||
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br />
|
</el-row>
|
||||||
* 序列化框架 Jackson 统一使用 jackson 高效可靠<br />
|
</el-card>
|
||||||
* Redis客户端 Redisson 性能强劲、API丰富<br />
|
<el-card>
|
||||||
* 分布式限流 Redisson 全局、请求IP、集群ID 多种限流<br />
|
<el-row>
|
||||||
* 分布式锁 Lock4j 注解锁、工具锁 多种多样<br />
|
<el-col :span="4">
|
||||||
* 分布式幂等 Lock4j 基于分布式锁实现<br />
|
<el-row> 9 </el-row>
|
||||||
* 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化<br />
|
<el-row> 待审核商品 </el-row>
|
||||||
* 分布式任务调度 SnailJob 高性能 高可靠 易扩展<br />
|
</el-col>
|
||||||
* 文件存储 Minio 本地存储<br />
|
<el-col :span="4">
|
||||||
* 文件存储 七牛、阿里、腾讯 云存储<br />
|
<el-row> 9 </el-row>
|
||||||
* 监控框架 SpringBoot-Admin 全方位服务监控<br />
|
<el-row> 待审核店铺 </el-row>
|
||||||
* 校验框架 Validation 增强接口安全性 严谨性<br />
|
</el-col>
|
||||||
* Excel框架 FastExcel(原Alibaba EasyExcel) 性能优异 扩展性强<br />
|
<el-col :span="4">
|
||||||
* 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释<br />
|
<el-row> 9 </el-row>
|
||||||
* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br />
|
<el-row> 待审核视频 </el-row>
|
||||||
* 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码<br />
|
</el-col>
|
||||||
* 部署方式 Docker 容器编排 一键部署业务集群<br />
|
<el-col :span="4">
|
||||||
* 国际化 SpringMessage Spring标准国际化方案<br />
|
<el-row> 9 </el-row>
|
||||||
</p>
|
<el-row> 待审核退款 </el-row>
|
||||||
<p><b>当前版本:</b> <span>v5.4.0</span></p>
|
</el-col>
|
||||||
<p>
|
<el-col :span="4">
|
||||||
<el-tag type="danger">¥免费开源</el-tag>
|
<el-row> 9 </el-row>
|
||||||
</p>
|
<el-row> 待审核举报 </el-row>
|
||||||
<p>
|
</el-col>
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://gitee.com/dromara/RuoYi-Vue-Plus')">访问码云</el-button>
|
<el-col :span="4">
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://github.com/dromara/RuoYi-Vue-Plus')">访问GitHub</el-button>
|
<el-row> 9 </el-row>
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://plus-doc.dromara.org/#/ruoyi-vue-plus/changlog')"
|
<el-row> 待审核提现 </el-row>
|
||||||
>更新日志</el-button
|
</el-col>
|
||||||
>
|
</el-row>
|
||||||
</p>
|
</el-card>
|
||||||
|
<el-divider />
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card header="分佣额"></el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
<el-card header="收入支出(万)"></el-card>
|
||||||
<h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2>
|
</el-col>
|
||||||
<p>
|
</el-row>
|
||||||
RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
|
<el-row>
|
||||||
<br />
|
<el-col :span="12">
|
||||||
* 前端开发框架 Vue3、TS、Element UI<br />
|
<el-card header="用户量"></el-card>
|
||||||
* 后端开发框架 Spring Boot<br />
|
</el-col>
|
||||||
* 微服务开发框架 Spring Cloud、Spring Cloud Alibaba<br />
|
<el-col :span="12">
|
||||||
* 容器框架 Undertow 基于 XNIO 的高性能容器<br />
|
<el-card header="短视频"></el-card>
|
||||||
* 权限认证框架 Sa-Token、Jwt 支持多终端认证系统<br />
|
</el-col>
|
||||||
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
|
</el-row>
|
||||||
* 关系数据库 Oracle 适配 11g 12c<br />
|
<el-row>
|
||||||
* 关系数据库 PostgreSQL 适配 13 14<br />
|
<el-col :span="12">
|
||||||
* 关系数据库 SQLServer 适配 2017 2019<br />
|
<el-card header="店铺TOP20"></el-card>
|
||||||
* 缓存数据库 Redis 适配 6.X 最低 5.X<br />
|
</el-col>
|
||||||
* 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
|
<el-col :span="12">
|
||||||
* 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
|
<el-card header="商品TOP20"></el-card>
|
||||||
* 服务网关 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>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-divider />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -71,6 +71,10 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column width="150" label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
<el-table-column width="150" label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<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-tooltip content="修改" placement="top">
|
||||||
<el-button v-hasPermi="['system:tenant:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>
|
<el-button v-hasPermi="['system:tenant:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>
|
||||||
</el-tooltip>
|
</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" />
|
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
|
||||||
</el-card>
|
</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-dialog v-model="dialog.visible" :title="dialog.title" width="500px" append-to-body>
|
||||||
<el-form ref="tenantFormRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="tenantFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
@ -129,6 +178,20 @@
|
|||||||
<el-form-item label="企业简介" prop="intro">
|
<el-form-item label="企业简介" prop="intro">
|
||||||
<el-input v-model="form.intro" type="textarea" placeholder="请输入企业简介" />
|
<el-input v-model="form.intro" type="textarea" placeholder="请输入企业简介" />
|
||||||
</el-form-item>
|
</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-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -152,11 +215,12 @@ import {
|
|||||||
updateTenant,
|
updateTenant,
|
||||||
changeTenantStatus,
|
changeTenantStatus,
|
||||||
syncTenantPackage,
|
syncTenantPackage,
|
||||||
syncTenantDict
|
syncTenantDict,
|
||||||
|
getTenantBannelList
|
||||||
} from '@/api/system/tenant';
|
} from '@/api/system/tenant';
|
||||||
import { selectTenantPackage } from '@/api/system/tenantPackage';
|
import { selectTenantPackage } from '@/api/system/tenantPackage';
|
||||||
import { useUserStore } from '@/store/modules/user';
|
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';
|
import { TenantPkgVO } from '@/api/system/tenantPackage/types';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
@ -173,6 +237,23 @@ const single = ref(true);
|
|||||||
const multiple = ref(true);
|
const multiple = ref(true);
|
||||||
const total = ref(0);
|
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 queryFormRef = ref<ElFormInstance>();
|
||||||
const tenantFormRef = ref<ElFormInstance>();
|
const tenantFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
@ -197,7 +278,11 @@ const initFormData: TenantForm = {
|
|||||||
packageId: '',
|
packageId: '',
|
||||||
expireTime: '',
|
expireTime: '',
|
||||||
accountCount: 0,
|
accountCount: 0,
|
||||||
status: '0'
|
status: '0',
|
||||||
|
businessLicense: '',
|
||||||
|
idCard: '',
|
||||||
|
bankCard: '',
|
||||||
|
inviteUserId: ''
|
||||||
};
|
};
|
||||||
const data = reactive<PageData<TenantForm, TenantQuery>>({
|
const data = reactive<PageData<TenantForm, TenantQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
@ -215,6 +300,10 @@ const data = reactive<PageData<TenantForm, TenantQuery>>({
|
|||||||
contactUserName: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
|
contactUserName: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
|
||||||
contactPhone: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
|
contactPhone: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
|
||||||
companyName: [{ 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: [
|
username: [
|
||||||
{ required: true, message: '用户名不能为空', trigger: 'blur' },
|
{ required: true, message: '用户名不能为空', trigger: 'blur' },
|
||||||
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', 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';
|
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 = () => {
|
const cancel = () => {
|
||||||
|
@ -42,9 +42,11 @@
|
|||||||
<el-table-column label="会员ID" prop="id" width="180" />
|
<el-table-column label="会员ID" prop="id" width="180" />
|
||||||
<el-table-column label="昵称" prop="nickname" width="150" />
|
<el-table-column label="昵称" prop="nickname" width="150" />
|
||||||
<el-table-column label="手机号" prop="phoneHidden" 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="phoneHidden" width="150" />
|
<el-table-column label="营收" prop="phoneHidden" width="150" />
|
||||||
<el-table-column label="积分" prop="integral" width="150" />
|
<el-table-column label="积分" prop="integral" width="150" />
|
||||||
|
|
||||||
<el-table-column label="实名认证信息" prop="userName" width="150" />
|
<el-table-column label="实名认证信息" prop="userName" width="150" />
|
||||||
<el-table-column label="银行卡信息" prop="phoneHidden" width="150" />-->
|
<el-table-column label="银行卡信息" prop="phoneHidden" width="150" />-->
|
||||||
<el-table-column label="账号状态" prop="status" 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">
|
<el-table-column label="操作" class-name="small-padding fixed-width" fixed="right" width="200">
|
||||||
<template v-slot="scope">
|
<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="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">开通代理 </el-button>
|
<el-button size="small" text type="primary">开通代理 </el-button>
|
||||||
<el-button size="small" text type="primary" @click="showUserAccountEditModal(scope.row)">编辑 </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">开通易生支付 </el-button>
|
||||||
<el-button size="small" text type="primary" @click="showUserLoginInfoModal(scope.row, true)">登录记录 </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">封禁记录 </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="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="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="goOrder(scope.row.phoneEncrypted)">查看下单</el-button>
|
||||||
<el-button size="small" text type="primary" @click="goCart(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-table>
|
||||||
</el-dialog>
|
</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 v-loading="userBalanceInfoTableLoading" :data="userBalanceInfo.data" border empty-text="暂无数据">
|
||||||
<el-table-column label="昵称" width="150">
|
<el-table-column label="昵称" width="150">
|
||||||
<template v-slot="scope">
|
<template v-slot="scope">
|
||||||
@ -193,7 +197,7 @@
|
|||||||
<el-table-column label="变更前余额" prop="beforeBalance" width="180" />
|
<el-table-column label="变更前余额" prop="beforeBalance" width="180" />
|
||||||
<el-table-column label="变更后余额" prop="afterBalance" />
|
<el-table-column label="变更后余额" prop="afterBalance" />
|
||||||
<el-table-column label="变更的金额" prop="changeAmount" width="100" />
|
<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>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-if="userBalanceInfo.total"
|
v-if="userBalanceInfo.total"
|
||||||
@ -207,11 +211,56 @@
|
|||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
</el-dialog>
|
</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-dialog title="会员登录信息" v-model="userLoginInfoModalVisible" width="800px" append-to-body>
|
||||||
<el-table v-loading="userLoginInfoTableLoading" :data="userLoginInfo.data" border empty-text="暂无数据">
|
<el-table v-loading="userLoginInfoTableLoading" :data="userLoginInfo.data" border empty-text="暂无数据">
|
||||||
<el-table-column label="手机号" prop="phone" width="150" />
|
<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="loginLocation" width="180" />
|
||||||
<el-table-column label="浏览器类型" prop="browser" />
|
<el-table-column label="浏览器类型" prop="browser" />
|
||||||
<el-table-column label="操作系统" prop="os" width="100" />
|
<el-table-column label="操作系统" prop="os" width="100" />
|
||||||
@ -222,9 +271,35 @@
|
|||||||
:total="userLoginInfo.total"
|
:total="userLoginInfo.total"
|
||||||
v-model:page="loginDataParams.current"
|
v-model:page="loginDataParams.current"
|
||||||
v-model:limit="loginDataParams.size"
|
v-model:limit="loginDataParams.size"
|
||||||
@pagination="showUserLoginInfoModal"
|
@pagination="
|
||||||
|
() => {
|
||||||
|
showUserLoginInfoModal(userBannedInfo.record);
|
||||||
|
}
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
</el-dialog>
|
</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
|
<el-dialog
|
||||||
:title="userFansFriendFocusInfo.clickType == 1 ? '关注列表' : userFansFriendFocusInfo.clickType == 2 ? '粉丝列表' : '好友列表'"
|
:title="userFansFriendFocusInfo.clickType == 1 ? '关注列表' : userFansFriendFocusInfo.clickType == 2 ? '粉丝列表' : '好友列表'"
|
||||||
@ -381,7 +456,10 @@ import {
|
|||||||
getUserFocusList,
|
getUserFocusList,
|
||||||
getUserFansList,
|
getUserFansList,
|
||||||
getUserBlackList,
|
getUserBlackList,
|
||||||
getUserBalanceList
|
getUserBalanceList,
|
||||||
|
deleteUser,
|
||||||
|
getUserBannelList,
|
||||||
|
getUserBankCardList
|
||||||
} from '@/api/ums/member';
|
} from '@/api/ums/member';
|
||||||
import dateUtil from '@/utils/DateUtil';
|
import dateUtil from '@/utils/DateUtil';
|
||||||
import { useUserStore } from '@/store/modules/user';
|
import { useUserStore } from '@/store/modules/user';
|
||||||
@ -486,7 +564,8 @@ export default {
|
|||||||
// 会员登录信息信息
|
// 会员登录信息信息
|
||||||
userLoginInfo: {
|
userLoginInfo: {
|
||||||
total: 0,
|
total: 0,
|
||||||
data: []
|
data: [],
|
||||||
|
record: {}
|
||||||
},
|
},
|
||||||
userLoginInfoModalVisible: false,
|
userLoginInfoModalVisible: false,
|
||||||
userLoginInfoTableLoading: false,
|
userLoginInfoTableLoading: false,
|
||||||
@ -524,7 +603,35 @@ export default {
|
|||||||
current: 1,
|
current: 1,
|
||||||
size: 10
|
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() {
|
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) {
|
showUserLoginInfoModal(record, isFirst) {
|
||||||
const { id } = this.userLoginInfo.record || {};
|
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) {
|
showBlackListInfoModal(record) {
|
||||||
const reqParams = {
|
const reqParams = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user