|
@@ -39,27 +39,6 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column align="center" label="邮箱" prop="email" width="180" />
|
|
|
<el-table-column align="center" label="邀请状态" width="140">
|
|
|
- <template #header>
|
|
|
- <span>邀请状态</span>
|
|
|
- <el-popover placement="bottom" trigger="click" width="auto">
|
|
|
- <template #reference>
|
|
|
- <el-icon class="cursor-pointer" style="margin-left: 5px">
|
|
|
- <EpFilter />
|
|
|
- </el-icon>
|
|
|
- </template>
|
|
|
- <div>
|
|
|
- <el-row align="bottom" justify="space-between" style="margin-top: 10px">
|
|
|
- <ul style="width: max-content">
|
|
|
- <li class="cursor-pointer" @click="filterStatus(-1)">全部</li>
|
|
|
- <li v-for="(val, key) in inviteStatusMap" :key="key" class="cursor-pointer" @click="filterStatus(key)">
|
|
|
- {{ val }}
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
-
|
|
|
<template #default="{ row }">
|
|
|
<el-tag v-if="row.status === 0" type="info">待邀请</el-tag>
|
|
|
<el-tag v-else-if="row.status === 1">已邀请待激活</el-tag>
|
|
@@ -79,16 +58,12 @@
|
|
|
<el-table-column :formatter="formatData" align="center" label="激活时间" prop="ask_ss_ts" width="180" />
|
|
|
<el-table-column :fixed="'right'" align="center" label="操作" width="160">
|
|
|
<template #header>
|
|
|
- <el-tooltip content="输入玩家UID或游戏昵称,游戏昵称可进行模糊搜索" placement="top-start">
|
|
|
- <el-input
|
|
|
- v-model="searchCondition"
|
|
|
- :loading="loading"
|
|
|
- :prefix-icon="loading ? EpLoading : EpSearch"
|
|
|
- clearable
|
|
|
- placeholder="搜索"
|
|
|
- @keydown.enter="getViperList"
|
|
|
- />
|
|
|
- </el-tooltip>
|
|
|
+ <el-button-group size="small">
|
|
|
+ <el-button :icon="loading ? EpLoading : EpSearch" :loading="loading" type="primary" @click="searchDrawerShow = true"
|
|
|
+ >筛选</el-button
|
|
|
+ >
|
|
|
+ <el-button :icon="loading ? EpLoading : EpRefresh" :loading="loading" type="success" @click="handleReset">重置</el-button>
|
|
|
+ </el-button-group>
|
|
|
</template>
|
|
|
|
|
|
<template #default="{ row }">
|
|
@@ -214,6 +189,141 @@
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
|
|
|
+ <el-drawer v-model="searchDrawerShow" size="40%">
|
|
|
+ <template #header>
|
|
|
+ <h4><b>筛选条件选择</b></h4>
|
|
|
+ <el-button style="margin-right: 10px" type="primary" @click="handleSearch">搜索</el-button>
|
|
|
+ </template>
|
|
|
+ <el-form :model="searchInfo" label-width="160px">
|
|
|
+ <el-form-item label="玩家UID">
|
|
|
+ <el-input v-model="searchInfo.uid" :type="'number'" clearable placeholder="精确查找, 输入完整UID" style="width: 80%" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="游戏昵称">
|
|
|
+ <el-input v-model="searchInfo.fb_nick" clearable placeholder="可模糊查找, 可输入部分游戏昵称" style="width: 80%" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="账号类型">
|
|
|
+ <el-select v-model="searchInfo.isFbs" clearable multiple placeholder="选择账号类型,可多选" style="width: 80%">
|
|
|
+ <el-option v-for="item in VIPTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮箱">
|
|
|
+ <el-input v-model="searchInfo.email" clearable placeholder="可模糊查找, 可输入部分邮箱" style="width: 80%" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邀请状态">
|
|
|
+ <el-select v-model="searchInfo.statuses" clearable multiple placeholder="选择邀请状态,可多选" style="width: 80%">
|
|
|
+ <el-option v-for="(label, key) in inviteStatusMap" :key="key" :label="label" :value="key" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注">
|
|
|
+ <el-input v-model="searchInfo.content" clearable placeholder="可模糊查找, 可输入部分备注" style="width: 80%" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="客服昵称">
|
|
|
+ <el-select v-model="searchInfo.kids" clearable filterable multiple placeholder="选择客服昵称,可多选" style="width: 80%">
|
|
|
+ <el-option v-for="(item, key) in waiters" :key="key" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="国家">
|
|
|
+ <el-input v-model="searchInfo.country" clearable placeholder="可模糊查找, 可输入部分国家" style="width: 80%" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="语言">
|
|
|
+ <el-select v-model="searchInfo.langs" clearable filterable multiple placeholder="选择语言,可多选" style="width: 80%">
|
|
|
+ <el-option v-for="(item, key) in langUpper" :key="key" :label="item" :value="item" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="最后登录时间范围" style="width: 80%">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchInfo.last_login_time_range"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ range-separator="To"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ type="datetimerange"
|
|
|
+ value-format="x"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="支付金额范围">
|
|
|
+ <el-row>
|
|
|
+ <el-form-item>
|
|
|
+ <el-input
|
|
|
+ v-model="searchInfo.payed_range[0]"
|
|
|
+ :type="'number'"
|
|
|
+ clearable
|
|
|
+ placeholder="输入最小支付金额(包含)"
|
|
|
+ style="width: 200px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <span> To </span>
|
|
|
+ <el-form-item>
|
|
|
+ <el-input
|
|
|
+ v-model="searchInfo.payed_range[1]"
|
|
|
+ :type="'number'"
|
|
|
+ clearable
|
|
|
+ placeholder="输入最大支付金额(包含)"
|
|
|
+ style="width: 200px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-tag>只支持页内搜索</el-tag>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="最后支付时间范围" style="width: 80%">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchInfo.last_pay_time_range"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ range-separator="To"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ style="width: 440px"
|
|
|
+ type="datetimerange"
|
|
|
+ value-format="x"
|
|
|
+ />
|
|
|
+ <el-tag style="margin-left: 5px">只支持页内搜索</el-tag>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邀请次数范围">
|
|
|
+ <el-row>
|
|
|
+ <el-form-item>
|
|
|
+ <el-input
|
|
|
+ v-model="searchInfo.ask_limit_range[0]"
|
|
|
+ :type="'number'"
|
|
|
+ clearable
|
|
|
+ placeholder="输入最小邀请次数(包含)"
|
|
|
+ style="width: 200px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <span> To </span>
|
|
|
+ <el-form-item>
|
|
|
+ <el-input
|
|
|
+ v-model="searchInfo.ask_limit_range[1]"
|
|
|
+ :type="'number'"
|
|
|
+ clearable
|
|
|
+ placeholder="输入最大邀请次数(包含)"
|
|
|
+ style="width: 200px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="最后邀请时间范围" style="width: 80%">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchInfo.last_ask_ts_range"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ range-separator="To"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ type="datetimerange"
|
|
|
+ value-format="x"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="激活时间范围" style="width: 80%">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchInfo.ask_ss_ts_range"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ range-separator="To"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ type="datetimerange"
|
|
|
+ value-format="x"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-drawer>
|
|
|
+
|
|
|
<ant-prize-set v-model="prizeData" v-model:visible="prizeDialogVisible" :type="'func'" />
|
|
|
</template>
|
|
|
|
|
@@ -226,23 +336,22 @@ import EpCircleCheck from "~icons/ep/circle-check";
|
|
|
import EpCircleClose from "~icons/ep/circle-close";
|
|
|
import EpMessage from "~icons/ep/message";
|
|
|
import EpPhone from "~icons/ep/phone";
|
|
|
-import EpFilter from "~icons/ep/filter";
|
|
|
import { useUserStore } from "@/store/modules/user";
|
|
|
import EpLoading from "~icons/ep/loading";
|
|
|
import EpSearch from "~icons/ep/search";
|
|
|
-import { VipInfo, VipWaiterConf } from "@/views/waiterCenter/types";
|
|
|
+import EpRefresh from "~icons/ep/refresh";
|
|
|
+import { VipInfo, VipSearchInfo, VipWaiterConf } from "@/views/waiterCenter/types";
|
|
|
import { langUpper } from "@/lang/config";
|
|
|
import { ElTable, FormInstance, FormRules } from "element-plus";
|
|
|
import { showMessage } from "@/utils/message";
|
|
|
import dayjs from "dayjs";
|
|
|
import { Pagination } from "@/components/types";
|
|
|
+import { VIPTypeOptions } from "@/lang/options";
|
|
|
|
|
|
const admin = useUserStore().getUserInfo();
|
|
|
|
|
|
const pagination = $ref<Pagination>({});
|
|
|
|
|
|
-const searchCondition = $ref("");
|
|
|
-let searchStatus = $ref(-1);
|
|
|
let userList: VipInfo[] = $ref([]); // 用户信息
|
|
|
let waiters: options = $ref([]); // 客服列表
|
|
|
let mailList = $ref([]); // 邮件列表
|
|
@@ -301,6 +410,37 @@ const handleSave = () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+const defaultSearchInfo: VipSearchInfo = {
|
|
|
+ uid: null,
|
|
|
+ ask_limit_range: [null, null],
|
|
|
+ last_ask_ts_range: null,
|
|
|
+ statuses: [],
|
|
|
+ ask_ss_ts_range: null,
|
|
|
+ content: null,
|
|
|
+ country: null,
|
|
|
+ langs: [],
|
|
|
+ fb_nick: null,
|
|
|
+ email: null,
|
|
|
+ isFbs: [],
|
|
|
+ last_login_time_range: [],
|
|
|
+ payed_range: [null, null],
|
|
|
+ last_pay_time_range: [],
|
|
|
+ kids: []
|
|
|
+};
|
|
|
+
|
|
|
+let searchInfo: VipSearchInfo = $ref(JSON.parse(JSON.stringify(defaultSearchInfo)));
|
|
|
+let searchDrawerShow = $ref(false);
|
|
|
+const handleSearch = () => {
|
|
|
+ searchDrawerShow = false;
|
|
|
+ getViperList();
|
|
|
+};
|
|
|
+
|
|
|
+const handleReset = () => {
|
|
|
+ searchDrawerShow = false;
|
|
|
+ searchInfo = JSON.parse(JSON.stringify(defaultSearchInfo));
|
|
|
+ getViperList();
|
|
|
+};
|
|
|
+
|
|
|
let emailDialogShow = $ref(false);
|
|
|
const defaultEmailConf = { uids: [], msgId: "", rewards: [] };
|
|
|
let sendMsgConf = $ref(defaultEmailConf);
|
|
@@ -461,15 +601,10 @@ onMounted(() => {
|
|
|
initData();
|
|
|
});
|
|
|
|
|
|
-const filterStatus = status => {
|
|
|
- searchStatus = status;
|
|
|
- getViperList();
|
|
|
-};
|
|
|
-
|
|
|
const getViperList = () => {
|
|
|
loading = true;
|
|
|
const { currentPage: page, pageSize } = pagination;
|
|
|
- const params = { page, pageSize, aid: admin.id, gid: admin.gid, keyword: searchCondition, status: searchStatus };
|
|
|
+ const params = { page, pageSize, aid: admin.id, gid: admin.gid, keyword: JSON.stringify(searchInfo) };
|
|
|
http.get("waiter/vips", params).then((data: HttpResponse) => {
|
|
|
loading = false;
|
|
|
if (data.code === 0) {
|