Files
henan-backend/ruoyi-ui/src/views/skins/ttuser/index.vue
T

977 lines
33 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="用户ID" prop="userName">
<el-input
v-model="queryParams.userId"
placeholder="请输入用户ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户昵称" prop="nickName">
<el-input
v-model="queryParams.nickName"
placeholder="请输入用户昵称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户类型" prop="userType">
<el-select v-model="queryParams.userType" placeholder="请选择用户类型" clearable>
<el-option
v-for="dict in dict.type.user_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="手机号码" prop="phoneNumber">
<el-input
v-model="queryParams.phoneNumber"
placeholder="请输入手机号码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择用户状态" clearable>
<el-option
v-for="dict in dict.type.user_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="邀请码" prop="invitationCode">
<el-input
v-model="queryParams.invitationCode"
placeholder="请输入邀请码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="上级ID" prop="parentId">
<el-input
v-model="queryParams.parentId"
placeholder="请输入上级ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
icon="el-icon-circle-plus-outline"
type="success"
size="mini"
@click="openBusinessDialog"
>生成招商账号</el-button>
</el-col>
<el-col :span="1.5">
<el-button
icon="el-icon-circle-plus-outline"
type="primary"
size="mini"
@click="addRobot = true"
>生成机器人</el-button>
</el-col>
<el-col :span="1.5">
<el-button
icon="el-icon-circle-plus-outline"
type="danger"
size="mini"
@click="openCardDialog"
>生成卡商账号</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="ID" align="center" prop="userId" />
<el-table-column label="用户昵称" align="center" prop="nickName" />
<el-table-column label="头像" align="center" prop="avatar">
<template slot-scope="scope">
<image-preview :src="scope.row.avatar" :width="50" :height="50" />
</template>
</el-table-column>
<el-table-column label="手机号码" align="center" prop="phoneNumber" />
<el-table-column label="上级" align="center" prop="parentId" />
<el-table-column label="邀请码" align="center" prop="invitationCode" />
<el-table-column label="用户类型" align="center" prop="userType">
<template slot-scope="scope">
<span v-for="dict in dict.type.user_type" v-if="dict.value === scope.row.userType" :key="dict.value">{{ dict.label }}</span>
</template>
</el-table-column>
<el-table-column label="账户金额" align="center" prop="accountAmount" />
<el-table-column label="账户积分" align="center" prop="accountCredits" />
<el-table-column label="帐号状态" align="center" prop="status" class="kg">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
:active-value="'1'"
:inactive-value="'0'"
active-color="#D9534F"
inactive-color="#5CB85C"
active-text="正常"
inactive-text="停用"
@change="updateUserStatus(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="提货状态" align="center" prop="deliveryStatus" class="kg">
<template slot-scope="scope">
<el-switch
v-model="scope.row.deliveryStatus"
:active-value="'1'"
:inactive-value="'0'"
active-color="#D9534F"
inactive-color="#5CB85C"
active-text="启用"
inactive-text="禁用"
@change="updateUserStatus(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="赠送状态" align="center" prop="giftStatus" class="kg">
<template slot-scope="scope">
<el-switch
v-model="scope.row.giftStatus"
:active-value="'1'"
:inactive-value="'0'"
active-color="#D9534F"
inactive-color="#5CB85C"
active-text="启用"
inactive-text="禁用"
@change="updateUserStatus(scope.row)"
></el-switch>
</template>
</el-table-column>
<!-- 推广等级已按要求隐藏(列表与详情都不再展示);最后登录时间移入详情 -->
<el-table-column label="VIP 等级" align="center" prop="vipLevel">
<template slot-scope="scope">VIP{{ scope.row.vipLevel }}</template>
</el-table-column>
<el-table-column label="总充值" align="center" prop="totalPrice" />
<el-table-column label="总提取" align="center" prop="totalDelivery" />
<el-table-column label="最后登录IP" align="center" prop="loginIp" />
<!-- <el-table-column label="备注" align="center" prop="remark" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handleCount(scope.row)">统计</el-button>
<el-button size="mini" type="text" @click="handlePsack(scope.row)">背包</el-button>
<el-dropdown size="mini">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
@click.native="handleUpdate(scope.row)"
>修改</el-dropdown-item>
<el-dropdown-item
@click.native="handleView(scope.row)"
>详情</el-dropdown-item>
<el-dropdown-item
@click.native="handleResetBalance(scope.row)"
>重置余额积分</el-dropdown-item>
<el-dropdown-item
@click.native="handleDelete(scope.row)"
>删除</el-dropdown-item>
<el-dropdown-item
@click.native="handleForceDelete(scope.row)" style="color: #a4485a;"
>真删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<!-- 生成招商账号 -->
<el-dialog title="新增招商用户" :visible.sync="addNewUser" width="600px">
<el-form label-width="90px">
<el-form-item label="请选择数量:" style="margin-bottom: 12px;">
<el-input-number size="mini" v-model="newNumber" :min="1" :max="10" @change="onBusinessNumberChange"></el-input-number>
<span style="font-size:12px;color:#7a664e;margin-left:10px;">
<i class="el-icon-info"></i> 可生成 1-10 个账号
</span>
</el-form-item>
<el-form-item
v-for="(item, index) in businessPhones"
:key="index"
:label="'手机号' + (index + 1)"
style="margin-bottom: 10px;"
>
<el-input
v-model="item.value"
maxlength="11"
clearable
placeholder="留空则自动生成随机手机号"
/>
</el-form-item>
<div style="font-size:12px;color:#7a664e;padding-left:90px;">
<i class="el-icon-info"></i> 手机号选填:填写后作为登录账号,留空则系统随机生成
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addNewUser = false">取 消</el-button>
<el-button type="primary" @click="generateAccount">确 定</el-button>
</div>
</el-dialog>
<!-- 生成机器人 -->
<el-dialog title="生成机器人" :visible.sync="addRobot" width="600px">
<el-form>
<el-form-item label="请选择数量:" style="margin-bottom: 2px;">
<el-input-number size="mini" v-model="newNumber" :min="1" :max="10" label="描述文字"></el-input-number>
</el-form-item>
<div style="font-size:14px;color:#797979;">
<i class="el-icon-info"></i> 要生成的账号数量
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addRobot = false">取 消</el-button>
<el-button type="primary" @click="generateRobot">确 定</el-button>
</div>
</el-dialog>
<!-- 生成卡商账号 -->
<el-dialog title="生成卡商账号" :visible.sync="addCardMerchant" width="600px">
<el-form label-width="90px">
<el-form-item label="请选择数量:" style="margin-bottom: 12px;">
<el-input-number size="mini" v-model="newNumber" :min="1" :max="10" @change="onCardNumberChange"></el-input-number>
<span style="font-size:12px;color:#7a664e;margin-left:10px;">
<i class="el-icon-info"></i> 可生成 1-10 个卡商账号
</span>
</el-form-item>
<el-form-item
v-for="(item, index) in cardPhones"
:key="index"
:label="'手机号' + (index + 1)"
style="margin-bottom: 10px;"
>
<el-input
v-model="item.value"
maxlength="11"
clearable
placeholder="留空则自动生成随机手机号"
/>
</el-form-item>
<div style="font-size:12px;color:#7a664e;padding-left:90px;">
<i class="el-icon-info"></i> 手机号选填:填写后作为登录账号,留空则系统随机生成
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addCardMerchant = false">取 消</el-button>
<el-button type="primary" @click="handleGenerateCardMerchant">确 定</el-button>
</div>
</el-dialog>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改注册用户对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" />
</el-form-item>
<el-form-item label="用户类型" prop="userType">
<el-select v-model="form.userType" placeholder="请选择用户类型" disabled>
<el-option
v-for="dict in dict.type.user_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="用户邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入用户邮箱" />
</el-form-item>
<el-form-item label="手机号码" prop="phoneNumber">
<el-input v-model="form.phoneNumber" placeholder="请输入手机号码" />
</el-form-item>
<el-form-item label="邀请码" prop="invitationCode">
<el-input v-model="form.invitationCode" placeholder="请输入邀请码" />
</el-form-item>
<el-form-item label="头像地址" prop="avatar">
<image-upload v-model="form.avatar" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item label="安全密码" prop="safePasswordPlain">
<el-input v-model="form.safePasswordPlain" placeholder="6位数字,留空则不修改" maxlength="6" />
</el-form-item>
<el-form-item label="账户金额" prop="accountAmount">
<el-input v-model="form.accountAmount" placeholder="请输入账户金额" />
</el-form-item>
<el-form-item label="账户积分" prop="accountCredits">
<el-input v-model="form.accountCredits" placeholder="请输入账户积分" />
</el-form-item>
<el-form-item label="上级ID" prop="parentId">
<el-input v-model="form.parentId" placeholder="请输入上级ID" />
</el-form-item>
<el-form-item label="steam交易链接" prop="transactionLink">
<el-input v-model="form.transactionLink" placeholder="请输入steam交易链接" />
</el-form-item>
<el-form-item label="实名认证状态" prop="isRealCheck">
<el-radio-group v-model="form.isRealCheck">
<el-radio :label="'1'">已实名</el-radio>
<el-radio :label="'0'">未实名</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="邀请新人充值比例" prop="commissionRate">
<el-input v-model="form.commissionRate" placeholder="请输入邀请新人充值比例(如 2 表示 2%)" />
</el-form-item>
<el-form-item v-if="form.userType === '04' || form.userType === '01'" label="新游戏消费返点比例" prop="newGameCommissionRate">
<el-input v-model="form.newGameCommissionRate" placeholder="新游戏消费返点比例(如 1 表示 1%)" />
</el-form-item>
<el-form-item v-if="form.userType === '04' || form.userType === '01'" label="经典玩法返点比例" prop="classicGameCommissionRate">
<el-input v-model="form.classicGameCommissionRate" placeholder="经典玩法返点比例(如 3.5 表示 3.5%)" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 用户详情 -->
<el-dialog title="用户详情" :visible.sync="openView" width="800px" append-to-body>
<el-form ref="form" :model="form" label-width="120px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="用户ID:">{{ form.userId }}</el-form-item>
<el-form-item label="账号:">{{ form.userName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户昵称:">{{ form.nickName }}</el-form-item>
<el-form-item label="密码:">{{ form.remark }}</el-form-item>
<el-form-item label="安全密码:">{{ form.safePasswordPlain }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话号码:">{{ form.phoneNumber }}</el-form-item>
<el-form-item label="用户邮箱:">{{ form.email }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户类型:" prop="userType">
<span v-if="form.userType === '00'">系统用户</span>
<span v-if="form.userType === '01'">主播</span>
<span v-if="form.userType === '02'">普通用户</span>
</el-form-item>
<el-form-item label="用户状态:">
<span v-if="form.status === '0'">正常</span>
<span v-if="form.status === '1'">停用</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="余额:">{{ form.accountAmount }}</el-form-item>
<el-form-item label="积分:">{{ form.accountCredits }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邀请码:">{{ form.invitationCode }}</el-form-item>
<el-form-item label="上级:">{{ form.parentId }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="steam交易链接:">{{ form.transactionLink }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="真实姓名:">{{ form.realName }}</el-form-item>
<el-form-item label="身份证号:">{{ form.idNum }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否实名:">
<span v-if="form.isRealCheck === '0'">未实名</span>
<span v-if="form.isRealCheck === '1'">已实名</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最后登录ip:">{{ form.loginIp }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最后登录时间:">{{ form.loginDate }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="创建自:">{{ form.createBy }}</el-form-item>
<el-form-item label="注册时间:">{{ form.createTime }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="更新自:">{{ form.updateBy }}</el-form-item>
<el-form-item label="更新时间:">{{ form.updateTime }}</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="openView = false">关 闭</el-button>
</div>
</el-dialog>
<!-- 统计 -->
<el-dialog title="用户利润统计" :visible.sync="countVisible" width="600px">
<el-row style="display: flex; justify-content: center;">
<div id="main"></div>
</el-row>
</el-dialog>
</div>
</template>
<script>
import {
listUser,
getUser,
delUser,
updateUser,
generateAccount,
generateRobot,
generateCardMerchant,
getUserProfitStatistics,
resetUserBalance,
forceDeleteUser
} from "@/api/skins/ttuser/api";
import * as echarts from "echarts";
export default {
name: 'TtUser',
dicts: ["user_type", "user_status"],
data() {
return {
countVisible: false,
openView: false,
newNumber: 1,
addNewUser: false,
addRobot: false,
addCardMerchant: false,
// 招商账号-自定义手机号输入列表(每项 { value },留空则后端随机生成)
businessPhones: [{ value: "" }],
// 卡商账号-自定义手机号输入列表
cardPhones: [{ value: "" }],
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 注册用户表格数据
userList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
nickName: null,
phoneNumber: null,
status: null,
certifyId: null,
userId: null,
userName: null,
userType: null
},
// 表单参数
form: {},
// 表单校验
rules: {
userName: [
{ required: true, message: "用户账号不能为空", trigger: "blur" }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
userType: [
{ required: true, message: "用户类型不能为空", trigger: "change" }
],
accountAmount: [
{ required: true, message: "账户金额不能为空", trigger: "blur" }
],
accountCredits: [
{ required: true, message: "账户积分不能为空", trigger: "blur" }
],
invitationCode: [
{ required: true, message: "邀请码不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "帐号状态不能为空", trigger: "change" }
],
isRealCheck: [
{
required: true,
message: "实名认证状态不能为空",
trigger: "change"
}
],
delFlag: [
{ required: true, message: "删除标志不能为空", trigger: "change" }
],
safePasswordPlain: [
{
validator: (rule, value, callback) => {
if (!value || /^\d{6}$/.test(value)) return callback();
callback(new Error("安全密码必须为6位数字"));
},
trigger: "blur"
}
]
}
};
},
created() {
this.getList();
},
methods: {
initEcharts(res) {
var chartDom = document.getElementById("main");
var myChart = echarts.init(chartDom);
var option;
option = {
xAxis: {
type: "category",
data: []
},
legend: {
data: ["日出货总金额", "日开启次数", "日利润"]
},
tooltip: {
trigger: "axis"
},
yAxis: {
type: "value"
},
series: [
{
data: [res.totalRecharge],
type: "bar",
name: "总充值",
label: {
show: true,
position: "top",
formatter: "总充值:" + "{c}"
}
},
{
data: [res.totalDelivery],
type: "bar",
name: "总提货",
label: {
show: true,
position: "top",
formatter: "提货:" + "{c}"
}
},
{
data: [res.totalProfit],
type: "bar",
name: "总利润",
label: {
show: true,
position: "top",
formatter: "总利润:" + "{c}"
}
}
]
};
option && myChart.setOption(option);
},
handleCount(res) {
this.countVisible = true;
getUserProfitStatistics(res.userId).then(res => {
this.initEcharts(res.data);
});
},
handlePsack(res) {
this.$router.push({
path: "/user/userPack",
query: {
id: res.userId,
status: 0
}
});
},
handleView(res) {
this.form = [];
this.openView = true;
getUser(res.userId).then(response => {
this.form = response.data;
});
},
/* 打开生成招商账号弹窗 */
openBusinessDialog() {
this.newNumber = 1;
this.businessPhones = this.buildPhoneInputs(this.newNumber, []);
this.addNewUser = true;
},
/* 打开生成卡商账号弹窗 */
openCardDialog() {
this.newNumber = 1;
this.cardPhones = this.buildPhoneInputs(this.newNumber, []);
this.addCardMerchant = true;
},
/* 根据数量构建手机号输入框数组,保留已填写的值 */
buildPhoneInputs(count, existing) {
const list = [];
for (let i = 0; i < count; i++) {
list.push({ value: existing[i] ? existing[i].value : "" });
}
return list;
},
/* 招商账号数量变化时,重建手机号输入框 */
onBusinessNumberChange(val) {
this.businessPhones = this.buildPhoneInputs(val, this.businessPhones);
},
/* 卡商账号数量变化时,重建手机号输入框 */
onCardNumberChange(val) {
this.cardPhones = this.buildPhoneInputs(val, this.cardPhones);
},
/* 校验并提取自定义手机号:合法返回数组(留空占位为""),非法返回 null */
extractCustomPhones(phones) {
const result = [];
const seen = new Set();
const reg = /^1[3-9]\d{9}$/;
for (let i = 0; i < phones.length; i++) {
const v = (phones[i].value || "").trim();
if (v) {
if (!reg.test(v)) {
this.$modal.msgError(`第 ${i + 1} 个手机号格式不正确,请输入 11 位有效手机号`);
return null;
}
if (seen.has(v)) {
this.$modal.msgError(`第 ${i + 1} 个手机号重复:${v}`);
return null;
}
seen.add(v);
}
result.push(v);
}
return result;
},
/* 生成招商账号 */
generateAccount() {
const customPhoneNumbers = this.extractCustomPhones(this.businessPhones);
if (customPhoneNumbers === null) return;
generateAccount({ num: this.newNumber, customPhoneNumbers }).then(res => {
this.getList();
this.addNewUser = false;
const blob = new Blob([res], {
type: "text/plain;charset=utf-8"
});
const objectURL = URL.createObjectURL(blob);
const aTag = document.createElement("a");
aTag.href = objectURL;
aTag.download = `账号数据_${new Date().getTime()}.txt`;
aTag.click();
URL.revokeObjectURL(objectURL);
});
},
/* 生成机器人 */
generateRobot() {
generateRobot(this.newNumber).then(res => {
this.getList();
(this.newNumber = null), (this.addRobot = false);
const blob = new Blob([res], {
type: "text/plain;charset=utf-8"
});
const objectURL = URL.createObjectURL(blob);
const aTag = document.createElement("a");
aTag.href = objectURL;
aTag.download = `账号数据_${new Date().getTime()}.txt`;
aTag.click();
URL.revokeObjectURL(objectURL);
});
},
/* 生成卡商账号 */
handleGenerateCardMerchant() {
const customPhoneNumbers = this.extractCustomPhones(this.cardPhones);
if (customPhoneNumbers === null) return;
generateCardMerchant({ num: this.newNumber, customPhoneNumbers }).then(res => {
this.getList();
this.addCardMerchant = false;
const blob = new Blob([res], {
type: "text/plain;charset=utf-8"
});
const objectURL = URL.createObjectURL(blob);
const aTag = document.createElement("a");
aTag.href = objectURL;
aTag.download = `卡商账号_${new Date().getTime()}.txt`;
aTag.click();
URL.revokeObjectURL(objectURL);
});
},
/** 查询注册用户列表 */
getList() {
this.loading = true;
listUser(this.queryParams).then(response => {
this.userList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
userId: null,
userName: null,
nickName: null,
userType: null,
email: null,
phoneNumber: null,
avatar: null,
password: null,
safePasswordPlain: null,
accountAmount: null,
accountCredits: null,
invitationCode: null,
parentId: null,
status: null,
steamId: null,
transactionLink: null,
realName: null,
idNum: null,
certifyId: null,
isRealCheck: null,
loginIp: null,
loginDate: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
delFlag: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 修改用户状态操作 */
updateUserStatus(row) {
// row.avatar = "";
this.loading = true;
updateUser(row).then(res => {
this.$notify({
title: "成功",
message: "修改成功",
type: "success"
});
this.getList();
this.loading = false;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const userId = row.userId || this.ids;
getUser(userId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改注册用户";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != null) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids;
this.$modal
.confirm('是否确认删除注册用户编号为"' + userIds + '"的数据项?')
.then(function() {
return delUser(userIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"admin/user/export",
{
...this.queryParams
},
`user_${new Date().getTime()}.xlsx`
);
},
handleResetBalance(row) {
this.$modal.confirm(`确认将用户【${row.nickName}】的余额和积分重置为 0 吗?`).then(() => {
resetUserBalance(row.userId).then(response => {
if (response.code !== 200) {
this.$modal.msgError(response.msg);
return;
}
this.$modal.msgSuccess("余额和积分已重置为 0");
this.getList();
});
}).catch(() => {});
},
handleForceDelete(row) {
this.$modal.confirm(
`⚠️ 确认彻底删除用户【${row.nickName}】?此操作不可恢复,数据将从数据库永久删除!`
).then(() => {
forceDeleteUser(row.userId).then(response => {
if (response.code !== 200) {
this.$modal.msgError(response.msg);
return;
}
this.$modal.msgSuccess("用户已彻底删除");
this.getList();
});
}).catch(() => {});
}
}
};
</script>
<style lang="scss" scoped>
::v-deep .el-switch {
border-radius: 0px !important;
height: 24px !important;
}
::v-deep .el-switch__core {
width: 70px !important;
height: 24px;
border-radius: 3px;
border: none;
}
::v-deep .el-switch__core::after {
width: 50%;
height: 24px;
border-radius: 0px;
top: 0px !important;
right: 0px !important;
left: 0px;
border: 1px solid #ccc;
border-radius: 3px;
}
::v-deep .el-switch.is-checked .el-switch__core::after {
margin-left: -35px;
box-sizing: border-box;
top: 0px !important;
right: 0px !important;
border: 1px solid #ccc;
border-radius: 3px;
text-align: center;
}
/*关闭时文字位置设置*/
::v-deep .el-switch__label--right {
text-align: center;
position: absolute;
width: 40%;
z-index: 1;
right: 6px;
margin-left: 0px;
color: rgba(255, 255, 255, 1);
span {
font-size: 13px;
box-sizing: border-box;
color: #fff;
}
}
/* 激活时另一个文字消失 */
::v-deep .el-switch__label.is-active {
text-align: center;
display: none;
}
/*开启时文字位置设置*/
::v-deep .el-switch__label--left {
text-align: center;
position: absolute;
width: 40%;
z-index: 1;
left: 5px;
margin-right: 0px;
color: rgba(255, 255, 255, 1);
span {
font-size: 13px;
box-sizing: border-box;
color: #fff;
}
}
#main {
width: 500px;
height: 400px;
}
</style>