Compare commits

..

3 Commits

Author SHA1 Message Date
dragon
1b2f64d42d 完成后台统计 2025-02-17 14:45:50 +08:00
dragon
a68859bbaa 活跃统计总概-暂存 2025-02-14 10:42:28 +08:00
dragon
6618fa07d6 完成灵小游戏白名单&&活跃统计类暂存 2025-02-14 10:42:28 +08:00
11 changed files with 131 additions and 599 deletions

View File

@@ -1,13 +0,0 @@
import request from '@/utils/request';
import qs from 'qs';
import { genQueryParam } from '@/utils/maintainer';
// ==================================每日数据====================================
// 列表
export const diamondStatList = query => {
return request({
url: '/admin/diamondStat/list',
method: 'get',
params: query
});
};

View File

@@ -278,23 +278,4 @@ export const guildApplyAudit = query => {
method: 'post',
params: query
});
};
// 主播退公会申请 列表
export const guildManageQuitList = query => {
return request({
url: '/admin/guild/manage/quitList',
method: 'get',
params: query
});
};
// 主播退公会申请审核
export const guildManageOptQuit = query => {
return request({
url: '/admin/guild/manage/optQuit',
method: 'post',
params: query
});
};
};

View File

@@ -1,300 +0,0 @@
<template>
<div class="outer">
<!-- 查询 -->
<div class="inquire">
<div class="block">
<span class="demonstration">开始时间</span>
<el-date-picker
v-model="inquire.time[0]"
type="datetime"
placeholder="开始时间"
>
</el-date-picker>
</div>
</div>
<div class="inquire">
<div class="block">
<span class="demonstration">结束时间</span>
<el-date-picker
v-model="inquire.time[1]"
type="datetime"
placeholder="结束时间"
>
</el-date-picker>
</div>
</div>
<!-- 查询按钮 -->
<el-button style="" type="primary" @click="getData()">查询</el-button>
<!-- <el-button style="" type="primary" @click="exportDate()">导出</el-button> -->
</div>
<!-- 表格 -->
<el-table
v-loading="loading"
:data="tableData"
border
style="width: 100%; margin-top: 25px"
>
<el-table-column prop="date" align="center" label="日期" />
<el-table-column align="center" label="全平台真实消耗" width="">
<template v-slot="scope">
<el-button
@click="
detailsTitle = '全平台金币明细';
edi(scope.row, 0);
"
type="text"
size="small"
>
{{ scope.row.totalDiamond }}
</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="阿拉伯区真实消耗" width="">
<template v-slot="scope">
<el-button
@click="
detailsTitle = '阿拉伯区金币明细';
edi(scope.row, 2);
"
type="text"
size="small"
>
{{ scope.row.arDiamond }}
</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="英语区真实消耗" width="">
<template v-slot="scope">
<el-button
@click="
detailsTitle = '英语区金币明细';
edi(scope.row, 1);
"
type="text"
size="small"
>
{{ scope.row.enDiamond }}
</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="华语区真实消耗" width="">
<template v-slot="scope">
<el-button
@click="
detailsTitle = '华语区金币明细';
edi(scope.row, 4);
"
type="text"
size="small"
>
{{ scope.row.zhDiamond }}
</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="土耳其区真实消耗" width="">
<template v-slot="scope">
<el-button
@click="
detailsTitle = '土耳其区金币明细';
edi(scope.row, 8);
"
type="text"
size="small"
>
{{ scope.row.trDiamond }}
</el-button>
</template>
</el-table-column>
<el-table-column
prop="totalRemainDiamond"
align="center"
label="全平台库存"
/>
<el-table-column
prop="arRemainDiamond"
align="center"
label="阿拉伯区库存"
/>
<el-table-column prop="enRemainDiamond" align="center" label="英语区库存" />
<el-table-column prop="zhRemainDiamond" align="center" label="华语区库存" />
<el-table-column
prop="trRemainDiamond"
align="center"
label="土耳其区库存"
/>
</el-table>
<!-- 分页 -->
<!-- <el-pagination
style="margin-top: 10px"
class="paginationClass"
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="[10, 20, 30, 40, 50, 100, 200, 300, 400, 500, 999999999]"
layout="sizes, prev, pager, next"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/> -->
<!-- 详情 -->
<el-dialog v-model="detailsDialog" :title="detailsTitle" width="30%" center>
<!-- 内表格 -->
<el-table
v-loading="loading"
:data="tableDataIn"
border
style="width: 100%; margin-top: 25px"
>
<el-table-column prop="domainDesc" align="center" label="类型" />
<el-table-column prop="addDiamond" align="center" label="增加" />
<el-table-column prop="subDiamond" align="center" label="消耗" />
</el-table>
<!-- 操作 -->
<template #footer>
<span class="dialog-footer">
<el-button type="primary" class="primary" @click="detailsDialog = false"
>关闭</el-button
>
</span>
</template>
</el-dialog>
</template>
<script>
import { diamondStatList } from "@/api/dailyCoinStatistics/dailyCoinStatistics";
import { dateFormat } from "@/utils/system-helper";
import { ElMessage } from "element-plus";
export default {
name: "dailyCoinStatistics",
data() {
return {
loading: false,
// 查询条件
inquire: {
time: [],
},
// 表格
tableData: [{ x: "x" }],
// 分页
total: 10, //总页数
currentPage: 1, //页码
pageSize: 10, //条数
// 内表格
detailsDialog: false,
detailsTitle: "金币明细",
tableDataIn: [],
};
},
created() {
// this.getData();
},
methods: {
// 查询
getData() {
this.loading = true;
let time = this.inquire.time;
let startTime = null;
let endTime = null;
if (time.length > 0) {
startTime = this.inquire.time[0]
? dateFormat(this.inquire.time[0], "yyyy-MM-dd hh:mm:ss")
: null;
endTime = this.inquire.time[1]
? dateFormat(this.inquire.time[1], "yyyy-MM-dd hh:mm:ss")
: null;
}
diamondStatList({
startDate: startTime,
endDate: endTime,
// pageNo: this.currentPage,
// pageSize: this.pageSize,
}).then((res) => {
if (res.code == 200) {
// this.total = res.data.total;
this.tableData = res.data;
this.loading = false;
} else {
ElMessage({
showClose: true,
message: res.message,
type: "error",
});
}
});
},
// 详情
edi(res, type) {
var jsonArr =
type == 0
? res.totalDomainDetail
: type == 1
? res.enDomainDetail
: type == 2
? res.arDomainDetail
: type == 4
? res.zhDomainDetail
: type == 8
? res.trDomainDetail
: `"[""]"`;
console.log(jsonArr);
this.tableDataIn = JSON.parse(jsonArr);
this.detailsDialog = true;
},
// 分页导航
handleSizeChange() {
this.getData();
},
handleCurrentChange() {
this.getData();
},
},
};
</script>
<style lang="less" scoped>
.outer {
padding-top: 20px;
background: #ecf0f5;
border-top: 3px solid #d2d6de;
.demonstration {
margin-right: 20px;
}
.inquire {
display: flex;
justify-content: space-between;
white-space: nowrap;
float: left;
margin-right: 20px;
}
.search {
width: 100%;
height: 41px;
.searchLeft,
.searchRight {
width: 20%;
float: left;
span {
margin-right: 10px;
}
.input {
width: 75%;
}
}
}
.buttonBox {
margin-top: 10px;
}
.authorityBox {
.authoritySpan {
margin-right: 20px;
}
.authorityInpput {
width: 50%;
}
}
.dialogTableVisibleBut {
margin: -25px 0 20px 0px;
}
}
</style>

View File

@@ -188,10 +188,7 @@
v-if="detailsIsShow"
>
<template v-slot="scope">
{{
scope.row.lastGuildGoldFlow === 0 ? '--'
: formatPercentage(scope.row.guildGoldFlow / scope.row.lastGuildGoldFlow) + '%'
}}
{{ scope.row.guildGoldFlow / scope.row.lastGuildGoldFlow }}
</template>
</el-table-column>
</el-table>
@@ -274,9 +271,6 @@ export default {
this.tableDataIn = JSON.parse(res);
this.detailsDialog = true;
},
formatPercentage(value) {
return parseFloat((value * 100).toFixed(2));
},
// 分页导航
handleSizeChange() {
this.getData();
@@ -332,4 +326,4 @@ export default {
margin: -25px 0 20px 0px;
}
}
</style>
</style>

View File

@@ -93,11 +93,7 @@
>
<el-table-column prop="regionDesc" align="center" label="国家" />
<el-table-column prop="count" align="center" label="新注册(完善资料)" />
<el-table-column prop="ratio" align="center" label="占比">
<template v-slot="scope">
{{ formatPercentage(scope.row.ratio) }}%
</template>
</el-table-column>
<el-table-column prop="ratio" align="center" label="占比" />
</el-table>
<!-- 操作 -->
<template #footer>
@@ -175,9 +171,6 @@ export default {
(this.tableDataIn = JSON.parse(res));
this.detailsDialog = true;
},
formatPercentage(value) {
return parseFloat((value * 100).toFixed(2));
},
// 分页导航
handleSizeChange() {
this.getData();
@@ -233,4 +226,4 @@ export default {
margin: -25px 0 20px 0px;
}
}
</style>
</style>

View File

@@ -17,7 +17,7 @@
type="text"
size="small"
>
{{ scope.row.totalCount }}
{{ scope.row.arCount }}
</el-button>
</template>
</el-table-column>
@@ -104,11 +104,7 @@
>
<el-table-column prop="regionDesc" align="center" label="国家" />
<el-table-column prop="count" align="center" label="活跃度" />
<el-table-column prop="ratio" align="center" label="占比">
<template v-slot="scope">
{{ formatPercentage(scope.row.ratio) }}%
</template>
</el-table-column>
<el-table-column prop="ratio" align="center" label="占比" />
</el-table>
<!-- 操作 -->
<template #footer>
@@ -186,9 +182,6 @@ export default {
(this.tableDataIn = JSON.parse(res));
this.detailsDialog = true;
},
formatPercentage(value) {
return parseFloat((value * 100).toFixed(2));
},
// 分页导航
handleSizeChange() {
this.getData();

View File

@@ -76,37 +76,37 @@
</div>
<!-- 新增弹窗 -->
<el-dialog v-model="addDialog" title="新增" width="30%" center>
<el-form label-width="80px">
<el-form-item label="用户id">
<el-input
style="width: 100%;"
v-model="adduserID"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item label="游戏id">
<el-select v-model="gameID" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in gameIDArr"
:key="item.gameId"
:label="item.gameName"
:value="item.gameId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="Water">
<el-input
style="width: 100%;"
v-model="water"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item>
例如water:0.2%则填0.2即可water2%则填2
</el-form-item>
</el-form>
<el-dialog v-model="addDialog" title="新增" width="36%" center>
<div style="margin-bottom: 25px; margin-top: 10px">
<span style="display: inline-block; margin-right: 20px">用户id</span>
<el-input
v-model="adduserID"
style="width: 75%"
class="input"
placeholder="请输入"
></el-input>
</div>
<div style="margin-bottom: 25px; margin-top: 10px">
<span style="display: inline-block; margin-right: 20px">游戏id</span>
<el-select v-model="gameID" placeholder="请选择">
<el-option
v-for="item in gameIDArr"
:key="item.gameId"
:label="item.gameName"
:value="item.gameId"
>
</el-option>
</el-select>
</div>
<div style="margin-bottom: 25px; margin-top: 10px">
<span style="display: inline-block; margin-right: 20px">Water</span>
<el-input
v-model="water"
style="width: 75%"
class="input"
placeholder="请输入"
></el-input>
</div>
<template #footer>
<span class="dialog-footer">

View File

@@ -102,6 +102,77 @@
>
</div>
<div class="inquire">
<span>对比值M</span>
<el-input
v-model="inquire.supplement.supplementRatio"
placeholder=""
class="input"
disabled
></el-input>
<el-button
class="primary"
type="primary"
@click="
editDialog = true;
butClick = false;
type = 5;
editDialogTitle = '对比值M';
value = inquire.supplement.supplementRatio;
"
>
编辑</el-button
>
</div>
<div class="inquire">
<span>金币对比值A</span>
<!-- @input="handleInput" -->
<el-input
v-model="inquire.supplement.conditionInput"
placeholder=""
class="input"
disabled
></el-input>
<el-button
class="primary"
type="primary"
@click="
editDialog = true;
butClick = false;
type = 6;
editDialogTitle = '金币对比值A';
value = inquire.supplement.conditionInput;
"
>
编辑</el-button
>
</div>
<div class="inquire">
<span>奖励金币倍数</span>
<!-- @input="handleInput" -->
<el-input
v-model="inquire.supplement.supplementMulti"
placeholder=""
class="input"
disabled
></el-input>
<el-button
class="primary"
type="primary"
@click="
editDialog = true;
butClick = false;
type = 7;
editDialogTitle = '奖励金币倍数';
value = inquire.supplement.supplementMulti;
"
>
编辑</el-button
>
</div>
<div class="inquire">
<span>幸运24金币库存</span>
<el-input
@@ -380,6 +451,13 @@ export default {
giftId: "",
platformCommission: "",
userRevenueRatio: "",
supplement: {
conditionInput: "",
conditionNum: "",
supplementMulti: "",
supplementNum: "",
supplementRatio: "",
},
warnMulti: "",
followErbanNoList: "",
whiteErbanNoProductionRatioMap: "",
@@ -406,6 +484,7 @@ export default {
this.inquire.goldInventory = res.data.stock;
this.inquire.platformCommission = res.data.platformRatio;
this.inquire.userRevenueRatio = res.data.receiverRatio;
this.inquire.supplement = res.data.supplement;
this.inquire.warnMulti = res.data.warnMulti;
this.inquire.followErbanNoList = res.data.followErbanNoList.join();
// this.inquire.whiteErbanNoProductionRatioMap = res.data.whiteErbanNoProductionRatioMap.join();
@@ -501,6 +580,15 @@ export default {
obj.platformRatio = this.value;
} else if (this.type == 4) {
obj.receiverRatio = this.value;
} else if (this.type == 5) {
obj.supplement = this.inquire.supplement;
obj.supplement.supplementRatio = this.value;
} else if (this.type == 6) {
obj.supplement = this.inquire.supplement;
obj.supplement.conditionInput = this.value;
} else if (this.type == 7) {
obj.supplement = this.inquire.supplement;
obj.supplement.supplementMulti = this.value;
} else if (this.type == 9) {
obj.warnMulti = this.value;
} else if (this.type == 11) {

View File

@@ -1,182 +0,0 @@
<template>
<div class="box">
<!-- 查询 -->
<el-form ref="searchForm" :model="searchForm" :rules="searchRules" label-width="auto" inline="true">
<el-form-item label="ID" prop="erbanNo">
<el-input v-model="searchForm.erbanNo" placeholder="" class="input"></el-input>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="searchForm.status" placeholder="请选择">
<el-option label="全部" :value="-1"></el-option>
<el-option label="未操作" :value="1"></el-option>
<el-option label="已同意" :value="2"></el-option>
<el-option label="已拒绝" :value="3"></el-option>
<el-option label="已过期" :value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="time">
<el-date-picker v-model="searchForm.time" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询按钮 -->
<el-button class="primary" type="primary" @click="getData()">查询</el-button>
</el-form-item>
</el-form>
<!-- 表格 -->
<el-table v-loading="loading" :data="tableData" border style="width: 100%; margin-top: 25px">
<el-table-column prop="erbanNo" align="center" label="用户ID" />
<el-table-column prop="uid" align="center" label="UID" />
<el-table-column prop="guildId" align="center" label="公会ID" />
<el-table-column prop="guildName" align="center" label="公会长昵称" />
<el-table-column prop="createTime" align="center" label="申请时间" />
<el-table-column align="center" label="操作">
<template v-slot="scope">
<p v-if="scope.row.status == 2" style="color: green;">已同意</p>
<p v-if="scope.row.status == 3" style="color: red;">已拒绝</p>
<p v-if="scope.row.status == 4" style="color: orange;">已过期</p>
<el-button v-if="scope.row.status == 1" @click="optClick(scope.row, 2)" type="primary">同意</el-button><br>
<el-button v-if="scope.row.status == 1" @click="optClick(scope.row, 3)" type="warning">拒绝</el-button>
</template>
</el-table-column>
<el-table-column prop="operator" align="center" label="操作人" />
<el-table-column prop="updateTime" align="center" label="操作时间" />
</el-table>
<!-- 分页 -->
<el-pagination style="margin-top: 10px" class="paginationClass" v-model:current-page="currentPage"
v-model:page-size="pageSize" :page-sizes="[10, 20, 30, 40, 50, 100, 200, 300, 400, 500, 999999999]"
layout="sizes, prev, pager, next" :total="total" @size-change="handleSizeChange"
@current-change="handleCurrentChange" />
</div>
</template>
<script>
import { guildManageQuitList, guildManageOptQuit } from "@/api/nobleman/nobleman";
// @ts-ignore
import { dateFormat } from "@/utils/system-helper";
// @ts-ignore
import { ElMessageBox, ElMessage } from "element-plus"; // 正确引入 ElM
export default {
name: "AnchorQuitApply",
data() {
return {
loading: false,
//查询所需条件对象
searchForm: {
erbanNo: "",
status: "",
time: "",
},
// 查询规则
searchRules: {
// erbanNo: [{ required: true, trigger: 'blur', message: 'ID不能为空' }]
},
// 表格
tableData: [],
// 分页
total: 10, //总页数
currentPage: 1, //页码
pageSize: 10, //条数
};
},
created() {
this.getData();
},
methods: {
// 查询接口
getData() {
this.loading = true;
let time = this.searchForm.time;
let startTime = "";
let endTime = "";
if (time && time.length > 0) {
startTime = dateFormat(this.searchForm.time[0], "yyyy-MM-dd hh:mm:ss");
endTime = dateFormat(this.searchForm.time[1], "yyyy-MM-dd hh:mm:ss");
}
guildManageQuitList({
erbanNo: this.searchForm.erbanNo,
status: this.searchForm.status,
startDate: startTime,
endDate: endTime,
pageNum: this.currentPage,
pageSize: this.pageSize,
}).then((res) => {
this.total = res.data.total;
this.tableData = res.data.rows;
this.loading = false;
});
},
// 同意/拒绝
optClick(row, val) {
let params = {
id: row.id,
status: val,
}
ElMessageBox.confirm(`确认${val == 2 ? '同意' : '拒绝'}吗?`, "提示", {
type: "warning",
confirmButtonText: "确定",
cancelButtonText: "取消",
})
.then(() => {
guildManageOptQuit(params).then((res) => {
console.log();
if (res.code == 200) {
this.getData();
ElMessage({
showClose: true,
message: "操作成功!",
type: "success",
});
} else {
ElMessage({
showClose: true,
message: res.message,
type: "error",
});
}
});
})
.catch(() => { });
},
// 分页导航
handleSizeChange() {
this.getData();
},
handleCurrentChange() {
this.getData();
},
},
};
</script>
<style lang="less" scoped>
.box {
padding-top: 20px;
background: #ecf0f5;
.inquire {
display: inline-block;
margin-right: 20px;
span {
margin-right: 10px;
}
.input {
width: 180px;
margin-right: 10px;
}
}
.dialogTableVisibleBut {
display: block;
margin: 30px 0 0 830px;
}
.paginationClass {
margin: 15px 0 5px 0px;
}
}
</style>

View File

@@ -107,9 +107,7 @@
</div>
<div class="userId">
<span></span>
<el-input type="textarea"
:autosize="{ minRows: 2}"
v-model="configValue" style="width: 75%" class="input"></el-input>
<el-input v-model="configValue" style="width: 75%" class="input"></el-input>
</div>
<div class="userId">
<span>命名空间</span>

View File

@@ -20,14 +20,6 @@
class="input-sm validate[required]"
name="deviceId"
id="deviceId">
IP:<input type="text"
class="input-sm validate[required]"
name="ip"
id="ip">
IP地区:<input type="text"
class="input-sm validate[required]"
name="ipRegion"
id="ipRegion">
查询类型:<select name="loginType"
id="loginType"
class="input-sm">
@@ -39,8 +31,8 @@
<option value="5">苹果登录</option>
<option value="6">ticket登录</option>
</select>
<button id="btnSearch" class="btn btn-primary">查询</button>
<button id="btnExport" class="btn">导出</button>
<button id="btnSearch"
class="btn btn-sm btn-primary">查询</button>
</div>
</section>
</div>
@@ -67,6 +59,7 @@ export default {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'recordId', title: 'recordId', align: 'center', valign: 'middle', width: '5%' },
{ field: 'phone', title: '手机号', align: 'center', valign: 'middle', width: '5%' },
{ field: 'erbanNo', title: '平台号', align: 'center', valign: 'middle', width: '5%' },
{
@@ -135,7 +128,6 @@ export default {
align: 'center', width: '10%',
valign: 'middle'
},*/
{ field: 'appVersion', title: 'app版本', align: 'center', width: '5%', valign: 'middle' },
{
field: 'os',
title: '系统类型',
@@ -144,6 +136,7 @@ export default {
valign: 'middle'
},
{ field: 'osversion', title: '系统版本', align: 'center', width: '5%', valign: 'middle' },
{ field: 'ispType', title: '运营商类型', align: 'center', width: '5%', valign: 'middle' },
{ field: 'deviceId', title: '设备号', align: 'center', width: '10%', valign: 'middle' },
{ field: 'model', title: '手机型号', align: 'center', width: '10%', valign: 'middle' },
{
@@ -189,8 +182,6 @@ export default {
phone: $('#phone').val(),
erbanNo: $('#erbanNo').val(),
deviceId: $('#deviceId').val(),
ip: $('#ip').val(),
ipRegion: $('#ipRegion').val(),
loginType: $('#loginType').val(),
};
return param;
@@ -210,17 +201,6 @@ export default {
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
})
// 导出
$('#btnExport').on('click', function () {
const phone = $('#phone').val();
const erbanNo = $('#erbanNo').val();
const deviceId = $('#deviceId').val();
const ip = $('#ip').val();
const ipRegion = $('#ipRegion').val();
const loginType = $('#loginType').val();
window.location.href = `/admin/accountLoginRecord/export?phone=${phone}&erbanNo=${erbanNo}&deviceId=${deviceId}&ip=${ip}&ipRegion=${ipRegion}&loginType=${loginType}`;
})
})
}
},