Browse Source

debug

master
linquan 3 months ago
parent
commit
c4b96e1a4f
  1. 8
      .env.production
  2. 606
      src/utils/game.ts
  3. 125
      src/utils/utils.ts
  4. 247
      src/views/gameLoginUrl/routerList/index.vue
  5. 4
      src/views/gameLoginUrl/serverGeneralList/index.vue
  6. 13
      src/views/gameLoginUrl/serverVersion/index.vue
  7. 9
      src/views/gameMail/send/component/editConfig.vue
  8. 13
      src/views/gameMail/send/index.vue
  9. 831
      src/views/gameManage/copyUnit/index.vue
  10. 12
      src/views/gameManage/gm/index.vue
  11. 11
      src/views/gameManage/keep/index.vue
  12. 11
      src/views/gameManage/live/index.vue
  13. 267
      src/views/gameManage/migrate/index.vue
  14. 11
      src/views/gameManage/register/index.vue
  15. 11
      src/views/gameManage/shop/index.vue
  16. 11
      src/views/gameNotice/pop/index.vue
  17. 13
      src/views/gameOrder/count/index.vue
  18. 322
      src/views/gameOrder/deposit/index.vue
  19. 9
      src/views/gameOrder/orderLog/index.vue
  20. 9
      src/views/gameOrder/shopInfo/index.vue
  21. 11
      src/views/gameRole/account/index.vue
  22. 11
      src/views/gameRole/online/index.vue
  23. 2727
      src/views/gameRole/role/index.vue
  24. 9
      src/views/gameRole/scale/index.vue
  25. 11
      src/views/gameRole/searchAccount/index.vue
  26. 539
      src/views/gameRole/statics/index.vue

8
.env.production

@ -3,8 +3,8 @@ ENV = 'production'
# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可
VITE_PUBLIC_PATH =
VITE_outDir = 'dist'
VITE_outDir = 'test87'
# 线上环境接口地址
VITE_API_URL = 'http://192.168.2.115:4111/'
VITE_API_TITLE = '桃源记2内网115后台'
VITE_API_VICETITLE = '内网115后台'
VITE_API_URL = 'http://101.35.161.116:4111/'
VITE_API_TITLE = '桃源记2后台'
VITE_API_VICETITLE = '后台'

606
src/utils/game.ts

@ -1,327 +1,353 @@
import {gameGetAllCcdUrl, gameGetAllChannel, gameGetAllLoginUrl} from "/@/api/game";
import {forEach} from "wangeditor/dist/utils/util";
import {getServerName} from "/@/utils/utils";
import {utils} from "sortablejs";
import { gameGetAllCcdUrl, gameGetAllChannel, gameGetAllLoginUrl } from '/@/api/game';
import { forEach } from 'wangeditor/dist/utils/util';
import { getServerName } from '/@/utils/utils';
import { utils } from 'sortablejs';
// import {verifyNumberIntegerAndFloat} from "/@/utils/toolsValidate";
export const ServerList = [
{
value: '1',
label: '一区:桃源野谷',
},
{
value: '2',
label: '二区:虎狼之穴',
},
{
value: '3',
label: '三区:袅袅炊烟',
},
{
value: '4',
label: '四区:豺狼虎豹',
},
{
value: '5',
label: '五区:鸡鸣犬吠',
},
{
value: '6',
label: '六区:妖兽横行',
},
{
value: '7',
label: '七区:五谷丰登',
},
{
value: '8',
label: '八区:上古四凶',
},
{
value: '9',
label: '九区:方兴未艾',
},
{
value: '10',
label: '十区:魑魅魍魉',
},
{
value: '11',
label: '十一区:桃花源记',
},
{
value: '12',
label: '十二区:先遣服',
},
{
value: '13',
label: '十三区:武陵人',
},
{
value: '14',
label: '十四区:桃谷沃野',
},
{
value: '15',
label: '十五区:桃源春色',
},
{
value: '16',
label: '十六区:桃源先遣服',
},
{
value: '1',
label: '一区:桃源野谷',
},
{
value: '2',
label: '二区:虎狼之穴',
},
{
value: '3',
label: '三区:袅袅炊烟',
},
{
value: '4',
label: '四区:豺狼虎豹',
},
{
value: '5',
label: '五区:鸡鸣犬吠',
},
{
value: '6',
label: '六区:妖兽横行',
},
{
value: '7',
label: '七区:五谷丰登',
},
{
value: '8',
label: '八区:上古四凶',
},
{
value: '9',
label: '九区:方兴未艾',
},
{
value: '10',
label: '十区:魑魅魍魉',
},
{
value: '11',
label: '十一区:桃花源记',
},
{
value: '12',
label: '十二区:先遣服',
},
{
value: '13',
label: '十三区:武陵人',
},
{
value: '14',
label: '十四区:桃谷沃野',
},
{
value: '15',
label: '十五区:桃源春色',
},
{
value: '16',
label: '十六区:桃源先遣服',
},
];
export const AllOfServerList = [
{
value: '',
label: '全部服务器',
},
{
value: '1',
label: '一区:桃源野谷',
},
{
value: '2',
label: '二区:虎狼之穴',
},
{
value: '3',
label: '三区:袅袅炊烟',
},
{
value: '4',
label: '四区:豺狼虎豹',
},
{
value: '5',
label: '五区:鸡鸣犬吠',
},
{
value: '6',
label: '六区:妖兽横行',
},
{
value: '7',
label: '七区:五谷丰登',
},
{
value: '8',
label: '八区:上古四凶',
},
{
value: '9',
label: '九区:方兴未艾',
},
{
value: '10',
label: '十区:魑魅魍魉',
},
{
value: '11',
label: '十一区:桃花源记',
},
{
value: '12',
label: '十二区:先遣服',
},
{
value: '13',
label: '十三区:武陵人',
},
{
value: '14',
label: '十四区:桃谷沃野',
},
{
value: '15',
label: '十五区:桃源春色',
},
{
value: '16',
label: '十六区:桃源先遣服',
},
{
value: '',
label: '全部服务器',
},
{
value: '1',
label: '一区:桃源野谷',
},
{
value: '2',
label: '二区:虎狼之穴',
},
{
value: '3',
label: '三区:袅袅炊烟',
},
{
value: '4',
label: '四区:豺狼虎豹',
},
{
value: '5',
label: '五区:鸡鸣犬吠',
},
{
value: '6',
label: '六区:妖兽横行',
},
{
value: '7',
label: '七区:五谷丰登',
},
{
value: '8',
label: '八区:上古四凶',
},
{
value: '9',
label: '九区:方兴未艾',
},
{
value: '10',
label: '十区:魑魅魍魉',
},
{
value: '11',
label: '十一区:桃花源记',
},
{
value: '12',
label: '十二区:先遣服',
},
{
value: '13',
label: '十三区:武陵人',
},
{
value: '14',
label: '十四区:桃谷沃野',
},
{
value: '15',
label: '十五区:桃源春色',
},
{
value: '16',
label: '十六区:桃源先遣服',
},
];
export const AllServerList = [
{
value: '0',
label: '一服',
}
{
value: '0',
label: '一服',
},
];
export const ChannelList = [
// {
// value: "000000000000",
// label: '母包渠道',
// },
// {
// value: '000001000000',
// label: 'peach',
// },
{
value: '000002000000',
label: 'taptap',
},
// {
// value: '000003000000',
// label: 'quick-母包',
// },
{
value: '000003000015',
label: '小米',
},
{
value: '000003000017',
label: 'VIVO',
},
{
value: '000003000023',
label: 'OPPO',
},
{
value: '000003000024',
label: '华为',
},
{
value: '000003000027',
label: '4399',
},
{
value: '000003002376',
label: '荣耀',
},
{
value: '000004000000',
label: 'hykb',
}
// {
// value: "000000000000",
// label: '母包渠道',
// },
// {
// value: '000001000000',
// label: 'peach',
// },
{
value: '000002000000',
label: 'taptap',
},
// {
// value: '000003000000',
// label: 'quick-母包',
// },
{
value: '000003000015',
label: '小米',
},
{
value: '000003000017',
label: 'VIVO',
},
{
value: '000003000023',
label: 'OPPO',
},
{
value: '000003000024',
label: '华为',
},
{
value: '000003000027',
label: '4399',
},
{
value: '000003002376',
label: '荣耀',
},
{
value: '000004000000',
label: 'hykb',
},
];
export const AllChannelList = [
{
value: "",
label: '所有渠道',
},
// {
// value: "000000000000",
// label: '母包渠道',
// },
// {
// value: '000001000000',
// label: 'peach',
// },
{
value: '000002000000',
label: 'taptap',
},
{
value: '000002999999',
label: 'tap先行服',
},
// {
// value: '000003000000',
// label: 'quick-母包',
// },
{
value: '000003000015',
label: '小米',
},
{
value: '000003000017',
label: 'VIVO',
},
{
value: '000003000023',
label: 'OPPO',
},
{
value: '000003000024',
label: '华为',
},
{
value: '000003000027',
label: '4399',
},
{
value: '000003002376',
label: '荣耀',
},
{
value: '000004000000',
label: 'hykb',
}
{
value: '',
label: '所有渠道',
},
// {
// value: "000000000000",
// label: '母包渠道',
// },
// {
// value: '000001000000',
// label: 'peach',
// },
{
value: '000002000000',
label: 'taptap',
},
{
value: '000002999999',
label: 'tap先行服',
},
// {
// value: '000003000000',
// label: 'quick-母包',
// },
{
value: '000003000015',
label: '小米',
},
{
value: '000003000017',
label: 'VIVO',
},
{
value: '000003000023',
label: 'OPPO',
},
{
value: '000003000024',
label: '华为',
},
{
value: '000003000027',
label: '4399',
},
{
value: '000003002376',
label: '荣耀',
},
{
value: '000004000000',
label: 'hykb',
},
];
export const Platforms = [
{
value: 1,
label: 'Android',
},
{
value: 2,
label: 'Ios',
}
{
value: 1,
label: 'Android',
},
{
value: 2,
label: 'Ios',
},
];
export const CompareType = [
{
value: 1,
label: '=',
},
{
value: 2,
label: '<=',
},
{
value: 3,
label: '<',
},
{
value: 4,
label: '>',
},
{
value: 5,
label: '>=',
}
{
value: 1,
label: '=',
},
{
value: 2,
label: '<=',
},
{
value: 3,
label: '<',
},
{
value: 4,
label: '>',
},
{
value: 5,
label: '>=',
},
];
export const ServerCategorize = [
{
value: 0,
label: '全部',
},
{
value: 1,
label: 'ios',
},
{
value: 2,
label: '官服',
},
{
value: 4,
label: '硬核',
},
{
value: 3,
label: '其他',
}
];
export async function channelList(): Promise<object[]> {
const data = await gameGetAllChannel({});
return data.data.List ?? [];
const data = await gameGetAllChannel({});
return data.data.List ?? [];
}
export async function allChannelList(): Promise<object[]> {
const data = await gameGetAllChannel({});
return [{
value: '',
label: '所有渠道',
}].concat(data.data.List ?? []);
const data = await gameGetAllChannel({});
return [
{
value: '',
label: '所有渠道',
},
].concat(data.data.List ?? []);
}
export async function serverList(): Promise<object[]> {
const data = await gameGetAllLoginUrl({});
data.data.loginUrlList.forEach(res => {
res.name = getServerName(res)
})
data.data.loginUrlList.sort((a, b) => Number(a.platform * 10000 + a.area) - Number(b.platform * 10000 + b.area));
return data.data.loginUrlList ?? [];
const data = await gameGetAllLoginUrl({});
data.data.loginUrlList.forEach((res) => {
res.name = getServerName(res);
});
data.data.loginUrlList.sort((a, b) => a.id - b.id);
return data.data.loginUrlList ?? [];
}
export async function allServerList(): Promise<object[]> {
const data = await gameGetAllLoginUrl({});
data.data.loginUrlList.forEach(res => {
res.name = getServerName(res)
})
data.data.loginUrlList.sort((a, b) => Number(a.platform * 10000 + a.area) - Number(b.platform * 10000 + b.area));
return [{
id: '',
name: '全部服务器'
}].concat(data.data.loginUrlList ?? []);
const data = await gameGetAllLoginUrl({});
data.data.loginUrlList.forEach((res) => {
res.name = getServerName(res);
});
data.data.loginUrlList.sort((a, b) => a.id - b.id);
return [
{
id: '',
name: '全部服务器',
},
].concat(data.data.loginUrlList ?? []);
}
export async function allCcdList(): Promise<object[]> {
const data = await gameGetAllCcdUrl({});
console.log("allCcdList: ", data);
return data.data.list ?? [];
const data = await gameGetAllCcdUrl({});
console.log('allCcdList: ', data);
return data.data.list ?? [];
}

125
src/utils/utils.ts

@ -1,89 +1,92 @@
export function contentReplace(str: string) {
if (str === "") {
return str;
}
str = str.replace(/\n/gi, '<br/>');
str = str.replaceAll(/(\[color=.*?])/gi, replacer);
str = str.replace(/\[color=/gi, '<font color="');
str = str.replace(/\[\/color\]/gi, "<\/font>");
str = str.replaceAll(/(\[url=.*?])/gi, replacer);
str = str.replace(/\[url=/gi, '<a target="_blank" href="');
str = str.replace(/\[\/url\]/gi, "<\/a>");
str = str.replace(/]/gi, ">");
str = str.replace(/\[/gi, "<");
return str;
if (str === '') {
return str;
}
str = str.replace(/\n/gi, '<br/>');
str = str.replaceAll(/(\[color=.*?])/gi, replacer);
str = str.replace(/\[color=/gi, '<font color="');
str = str.replace(/\[\/color\]/gi, '</font>');
str = str.replaceAll(/(\[url=.*?])/gi, replacer);
str = str.replace(/\[url=/gi, '<a target="_blank" href="');
str = str.replace(/\[\/url\]/gi, '</a>');
str = str.replace(/]/gi, '>');
str = str.replace(/\[/gi, '<');
return str;
}
function replacer(match: any, p: any, offset: any, string: any) {
// p是颜色样式
console.log("replacer: ", p);
return p.replace(/]/i, '">');
// p是颜色样式
console.log('replacer: ', p);
return p.replace(/]/i, '">');
}
export function random(len: number) {
return Math.floor(Math.random() * len);
return Math.floor(Math.random() * len);
}
export function zeroFill(Date: any) {
Date = Number(Date);
return Date < 10 ? "0" + Date : Date + "";
Date = Number(Date);
return Date < 10 ? '0' + Date : Date + '';
}
export function zero4Fill(Date: any) {
Date = Number(Date);
return Date < 1000 ? "0" + Date : Date + "";
Date = Number(Date);
return Date < 1000 ? '0' + Date : Date + '';
}
export function getDaysBetween(date1, date2) {
var startDate = Date.parse(date1);
var endDate = Date.parse(date2);
if (startDate > endDate) {
return 0;
}
if (startDate == endDate) {
return 1;
}
var days = (endDate - startDate) / 86400000 + 1;
return days;
var startDate = Date.parse(date1);
var endDate = Date.parse(date2);
if (startDate > endDate) {
return 0;
}
if (startDate == endDate) {
return 1;
}
var days = (endDate - startDate) / 86400000 + 1;
return days;
}
export function getCookie(cookie, cname) {
var name = cname + "=";
var ca = cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
var name = cname + '=';
var ca = cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return '';
}
export function getServerName(item) {
return (item.platform == 1 ? 'ios ' : (item.platform == 2 ? 'an ' : item.platform == 3 ? '先行 ' : '')) + item.id + ' ' + item.name
return (item.platform == 1 ? 'ios ' : item.platform == 2 ? 'an ' : item.platform == 3 ? '先行 ' : '') + item.id + ' ' + item.remark;
}
export function allGSwitchServer(serverSwitch, servers) {
switch (serverSwitch) {
case 1:
return servers.filter(r => (r.id > 1000 && r.id < 2000) || r.id == "");
case 2:
return servers.filter(r => (r.id > 2000) || r.id == "");
case 3:
return servers.filter(r => (r.id < 1000) || r.id == "");
default:
return servers;
}
switch (serverSwitch) {
case 1:
return servers.filter((r) => (r.id > 1000 && r.id < 2000) || r.id == '');
case 2:
return servers.filter((r) => (r.id > 2000 && r.channel.indexOf(';;') == -1) || r.id == '');
case 3:
return servers.filter((r) => r.id < 1000 || r.id == '');
case 4:
return servers.filter((r) => (r.id > 2000 && r.channel.indexOf(';;') != -1) || r.id == '');
default:
return servers;
}
}
export function gSwitchServer(serverSwitch, servers) {
switch (serverSwitch) {
case 1:
return servers.filter(r => r.id > 1000 && r.id < 2000);
case 2:
return servers.filter(r => r.id > 2000);
case 3:
return servers.filter(r => r.id < 1000);
default:
return servers;
}
}
switch (serverSwitch) {
case 1:
return servers.filter((r) => r.id > 1000 && r.id < 2000);
case 2:
return servers.filter((r) => r.id > 2000 && r.channel.indexOf(';;') == -1);
case 3:
return servers.filter((r) => r.id < 1000);
case 4:
return servers.filter((r) => r.id > 2000 && r.channel.indexOf(';;') != -1);
default:
return servers;
}
}

247
src/views/gameLoginUrl/routerList/index.vue

@ -1,148 +1,159 @@
<template>
<div>
<!-- <el-card shadow="hover" header="">-->
<!-- <div class="mb15">-->
<el-form class="flex-warp" label-position="right">
<div>
<!-- <el-card shadow="hover" header="">-->
<!-- <div class="mb15">-->
<el-form class="flex-warp" label-position="right">
<el-form-item>
<el-button type="success" class="ml10" @click="onOpenAddDic">
<el-icon>
<ele-FolderAdd />
</el-icon>
新增参数
</el-button>
<el-button type="success" class="ml10" @click="reloadServer">
<el-icon>
<ele-FolderAdd />
</el-icon>
重载配置
</el-button>
</el-form-item>
<el-form-item>
<el-button type="success" class="ml10" @click="onOpenAddDic">
<el-icon>
<ele-FolderAdd/>
</el-icon>
新增参数
</el-button>
<el-button type="success" class="ml10" @click="reloadServer">
<el-icon>
<ele-FolderAdd/>
</el-icon>
重载配置
<el-button type="success" class="ml10" @click="countList">
刷新列表
</el-button>
</el-form-item>
<el-table :data="tableData.data" style="width: 100%" stripe border>
<el-table-column prop="id" label="ID" width="60">
<template #default="scope">
{{ scope.row.id }}
</template>
</el-table-column>
<el-table-column prop="realmIp" label="realmIp" width="180"/>
<el-table-column prop="realmPort" label="realmPort" width="120"/>
<el-table-column prop="realmNum" label="realmNum" width="120"/>
<el-table-column prop="realmStep" label="realmStep" width="120"/>
<el-table-column prop="routerIp" label="routerIp" width="180"/>
<el-table-column prop="routerPort" label="routerPort" width="120"/>
<el-table-column prop="routerNum" label="routerNum" width="120"/>
<el-table-column prop="routerStep" label="routerStep" width="120"/>
<el-table-column>
<template #default="scope">
<el-button size="small" type="success" @click="onOpenEditDic(scope.row)">修改</el-button>
<!-- <el-button size="small" type="danger" @click="delLoginUrl(scope.row.id)">删除</el-button>-->
</template>
</el-table-column>
</el-table>
<el-row justify="space-evenly">
<el-pagination :hide-on-single-page="true" v-model:page-size="tableData.params.pageSize" :pager-count="5"
v-model:current-page="tableData.params.pageNum" layout="total, prev, pager, next"
:total="tableData.total"
@current-change="handleCurrentChange"/>
</el-row>
</el-form>
<el-table :data="tableData.data" style="width: 100%" stripe border>
<el-table-column prop="id" label="ID" width="60">
<template #default="scope">
{{ scope.row.id }}
</template>
</el-table-column>
<el-table-column prop="realmIp" label="realmIp" width="180" />
<el-table-column prop="realmPort" label="realmPort" width="120" />
<el-table-column prop="realmNum" label="realmNum" width="120" />
<el-table-column prop="realmStep" label="realmStep" width="120" />
<el-table-column prop="routerIp" label="routerIp" width="180" />
<el-table-column prop="routerPort" label="routerPort" width="120" />
<el-table-column prop="routerNum" label="routerNum" width="120" />
<el-table-column prop="routerStep" label="routerStep" width="120" />
<el-table-column>
<template #default="scope">
<el-button size="small" type="success" @click="onOpenEditDic(scope.row)">修改</el-button>
<!-- <el-button size="small" type="danger" @click="delLoginUrl(scope.row.id)">删除</el-button>-->
</template>
</el-table-column>
</el-table>
<el-row justify="space-evenly">
<el-pagination
:hide-on-single-page="true"
v-model:page-size="tableData.params.pageSize"
:pager-count="5"
v-model:current-page="tableData.params.pageNum"
layout="total, prev, pager, next"
:total="tableData.total"
@current-change="handleCurrentChange"
/>
</el-row>
</el-form>
<EditConfig ref="editDicRef" @countList="countList"/>
</div>
<EditConfig ref="editDicRef" @countList="countList" />
</div>
</template>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent, ref} from 'vue';
import { toRefs, reactive, onMounted, defineComponent, ref } from 'vue';
import EditConfig from '/@/views/gameLoginUrl/routerList/component/editConfig.vue';
import {gameReloadServer, gameGetRouter} from "/@/api/game";
import {PLATFORM} from "/@/api/common/consts";
import { gameReloadServer, gameGetRouter } from '/@/api/game';
import { PLATFORM } from '/@/api/common/consts';
//
interface TableData {
id: number;
ip: string;
id: number;
ip: string;
}
interface TableDataState {
tableData: {
data: Array<TableData>;
total: number;
params: {
pageNum: number;
pageSize: number;
};
};
platform: Array<{ label: string, value: string }>
tableData: {
data: Array<TableData>;
total: number;
params: {
pageNum: number;
pageSize: number;
};
};
platform: Array<{ label: string; value: string }>;
}
export default defineComponent({
name: 'apiV1GameRouterList',
components: {EditConfig},
setup() {
const editDicRef = ref();
const state = reactive<TableDataState>({
platform: PLATFORM,
tableData: {
data: [],
total: 0,
params: {
pageNum: 1,
pageSize: 10,
},
},
});
//
const onOpenAddDic = () => {
editDicRef.value.openDialog();
};
//
const onOpenEditDic = (row: TableData) => {
editDicRef.value.openDialog(row);
};
const countList = () => {
gameGetRouter(state.tableData.params).then(res => {
console.log("countList:", res);
state.tableData.total = res.data.total || 1;
state.tableData.data = res.data.list ?? [];
console.log("countList:", state.tableData);
})
};
name: 'apiV1GameRouterList',
components: { EditConfig },
setup() {
const editDicRef = ref();
const state = reactive<TableDataState>({
platform: PLATFORM,
tableData: {
data: [],
total: 0,
params: {
pageNum: 1,
pageSize: 10,
},
},
});
//
const onOpenAddDic = () => {
editDicRef.value.openDialog();
};
//
const onOpenEditDic = (row: TableData) => {
editDicRef.value.openDialog(row);
};
const countList = () => {
gameGetRouter(state.tableData.params).then((res) => {
console.log('countList:', res);
state.tableData.total = res.data.total || 1;
state.tableData.data = res.data.list ?? [];
console.log('countList:', state.tableData);
});
};
const reloadServer = () => {
gameReloadServer({}).then(res => {
})
};
const handleCurrentChange = (val: number) => {
state.tableData.params.pageNum = val;
countList();
};
onMounted(() => {
countList();
});
return {
editDicRef,
handleCurrentChange,
countList,
onOpenAddDic,
onOpenEditDic,
// delLoginUrl,
reloadServer,
...toRefs(state),
};
},
const reloadServer = () => {
gameReloadServer({}).then((res) => {
console.log('reloadServer:', res);
});
};
const handleCurrentChange = (val: number) => {
state.tableData.params.pageNum = val;
countList();
};
onMounted(() => {
countList();
});
return {
editDicRef,
handleCurrentChange,
countList,
onOpenAddDic,
onOpenEditDic,
// delLoginUrl,
reloadServer,
...toRefs(state),
};
},
});
</script>
<style scoped lang="scss">
.el-form-item {
display: -moz-flex;
vertical-align: middle;
margin-right: 32px;
display: -moz-flex;
vertical-align: middle;
margin-right: 32px;
}
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
background: #ffffd5;
background: #ffffd5;
}
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td {
background: inherit;
background: inherit;
}
</style>
</style>

4
src/views/gameLoginUrl/serverGeneralList/index.vue

@ -5,7 +5,7 @@
<el-form class="flex-warp" label-position="right">
<el-form-item>
<el-button type="success" class="ml10" @click="countList">
加载配置
刷新列表
</el-button>
</el-form-item>
<el-form-item>
@ -14,7 +14,7 @@
</el-form>
<el-form class="" label-position="right">
<el-form-item label="后台充值地址" prop="backstageRechargeUrl">
<el-form-item label="充值统一地址" prop="backstageRechargeUrl">
{{ tableData.data[0].backstageRechargeUrl }}
</el-form-item>
<el-form-item label="gm白名单地址" prop="gmWhiteListUrl">

13
src/views/gameLoginUrl/serverVersion/index.vue

@ -5,13 +5,10 @@
<el-form :inline="true">
<el-form-item label="选择服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
@ -39,7 +36,7 @@
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {allServerList, ServerList} from "/@/utils/game";
import {allServerList, ServerCategorize, ServerList} from "/@/utils/game";
import {getServerVersion} from "/@/api/game";
import {allGSwitchServer} from "/@/utils/utils";
@ -61,6 +58,7 @@ interface TableDataState {
}
};
servers: object[]
serverCategorize: object[]
}
export default defineComponent({
@ -74,7 +72,8 @@ export default defineComponent({
serverId: ""
}
},
servers: ServerList
servers: ServerList,
serverCategorize: ServerCategorize
});
const onlineList = () => {
state.tableData.TotalNumber = 0;

9
src/views/gameMail/send/component/editConfig.vue

@ -4,9 +4,7 @@
<el-form label-width="100px" label-position="right">
<el-form-item label="服务器:">
<el-select v-model="tableData.param.serverId" multiple class="m-2" disabled size="large">
<el-option v-for="item in servers" :key="item.id+''"
:label="(item.platform==1?'ios ':(item.platform==2?'an ':'先行 '))+ item.id + ' ' +item.name"
:value="item.id+''"/>
<el-option v-for="item in servers" :key="item.id+''" :label="item.name" :value="item.id+''"/>
</el-select>
</el-form-item>
<el-form-item label="标题:">
@ -15,9 +13,6 @@
<el-form-item label="发件人署名:">
{{ tableData.param.from }}
</el-form-item>
<!-- <el-form-item label="问候语:">-->
<!-- {{tableData.param.greetings}}-->
<!-- </el-form-item>-->
<el-form-item label="内容:">
{{ tableData.param.content }}
</el-form-item>
@ -102,7 +97,7 @@ export default defineComponent({
const state = reactive<TableDataState>({
serverSwitch: 0,
ItemConfig: AllItemConfigCategory,
channel: [{label: "全渠道", value: ""}, {label: "母包渠道-0", value: "0"}],
channel: [{label: "全渠道", value: ""}, {label: "母包渠道-0", value: "000000000000"}],
isShowDialog: false,
tableData: {
param: {

13
src/views/gameMail/send/index.vue

@ -3,13 +3,10 @@
<el-form size="default" label-width="100px">
<el-form-item label="服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.serverId" multiple class="m-2" placeholder="选择服务器" size="large">
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="附件" prop="type">-->
@ -260,7 +257,7 @@
import {reactive, toRefs, defineComponent, ref, unref, onMounted} from 'vue';
import {gameMailSend, gameGetModel, gameUpdateModel} from '/@/api/game';
import EditConfig from '/@/views/gameMail/send/component/editConfig.vue';
import {serverList} from "/@/utils/game";
import {ServerCategorize, serverList} from "/@/utils/game";
import AllItemConfigCategory from "/@/api/config/AllItemConfigCategory.json";
import {ElMessage, ElMessageBox} from "element-plus";
import {Session} from "/@/utils/storage";
@ -301,6 +298,7 @@ interface TableDataState {
editModelVisible: boolean;
sendMail: boolean;
serverSwitch: number;
serverCategorize: object;
}
export default defineComponent({
@ -341,11 +339,12 @@ export default defineComponent({
dropModels: [],
contentModels: [],
sendMail: true,
serverCategorize: ServerCategorize
});
onMounted(() => {
serverList().then(value => {
state.servers = value;
state.queryParams.serverId[0] = "" + value[0].id;
state.queryParams.serverId[0] = value[0].id;
// console.log(" server : ", state.servers);
});
getMailModel(1);

831
src/views/gameManage/copyUnit/index.vue

@ -1,203 +1,197 @@
<template>
<div class="game-order-container">
<el-card shadow="hover" header="复制账号">
<template #header>
复制账号
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret"
type="text">
<el-icon>
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret"
type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.copyShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="原账号">
<el-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable/>
</el-form-item>
<!-- <el-form-item label="原账号服务器">
<el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>-->
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="copyUnit">
复制
</el-button>
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled"
:loading="loading">
<div v-if="loading">正在复制账号</div>
<div v-else>下载账号json数据</div>
</el-button>
</el-form-item>
<el-form-item inlist="true">
<el-button size="default" type="primary" @click="onDownload(storeFilename)" v-if="!disabled"
:loading="loading1">
<div v-if="loading1">正在复制仓库</div>
<div v-else>下载仓库json数据</div>
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover" header="载入账号信息">
<template #header>
上载账号信息
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret"
type="text">
<el-icon>
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret"
type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.copyShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-upload
class="upload-demo"
:action="baseURL+'api/v1/pub/upload/singleFile'"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-change="handleChange"
:before-remove="beforeRemove"
multiple
:limit="2"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传Json文件</div>
</el-upload>
<el-form-item label="文件名称">
<el-select v-model="tableData.data.filename" class="m-2" placeholder="选择载入文件" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item"/>
<div class="game-order-container">
<el-card shadow="hover" header="复制账号">
<template #header>
复制账号
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom />
</el-icon>
</el-button>
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop />
</el-icon>
</el-button>
</template>
<div v-show="item.copyShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="原账号">
<el-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item>
<!-- <el-form-item label="原账号服务器">-->
<!-- <el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" filterable>-->
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="原账号服务器" prop="SrcServer">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item>
<el-form-item label="仓库文件名称">
<el-select v-model="tableData.data.storeFilename" class="m-2" placeholder="选择载入文件" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item"/>
<el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item>
<el-form-item label="目标账号">
<el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable/>
</el-form-item>
<!-- <el-form-item label="目标服务器">-->
<!-- <el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" filterable>-->
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="updateUnit">
更新
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover" header="删除账号">
<template #header>
删除账号
<el-button v-show="item.delShow == false" @click="item.delShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.delShow == true" @click="item.delShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.delShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="账号">
<el-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable/>
</el-form-item>
<el-form-item label="账号服务器">
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="copyUnit"> 复制 </el-button>
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled" :loading="loading">
<div v-if="loading">正在复制账号</div>
<div v-else>下载账号json数据</div>
</el-button>
</el-form-item>
<el-form-item inlist="true">
<el-button size="default" type="primary" @click="onDownload(storeFilename)" v-if="!disabled" :loading="loading1">
<div v-if="loading1">正在复制仓库</div>
<div v-else>下载仓库json数据</div>
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover" header="载入账号信息">
<template #header>
上载账号信息
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom />
</el-icon>
</el-button>
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop />
</el-icon>
</el-button>
</template>
<div v-show="item.copyShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-upload
class="upload-demo"
:action="baseURL + 'api/v1/pub/upload/singleFile'"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-change="handleChange"
:before-remove="beforeRemove"
multiple
:limit="2"
:on-exceed="handleExceed"
:file-list="fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传Json文件</div>
</el-upload>
<el-form-item label="文件名称">
<el-select v-model="tableData.data.filename" class="m-2" placeholder="选择载入文件" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" />
</el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item>
<el-form-item label="仓库文件名称">
<el-select v-model="tableData.data.storeFilename" class="m-2" placeholder="选择载入文件" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" />
</el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item>
<el-form-item label="目标账号">
<el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="目标服务器" prop="DestServer">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.del.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id+''"/>
<el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" @click="delAccount">
删除账号
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover">
<template #header>
修改登录密码
<el-button v-show="item.pwdShow == false" @click="item.pwdShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.pwdShow == true" @click="item.pwdShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div class="game-order-search mb15" v-show="item.pwdShow">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="account:">
<el-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large"
clearable/>
</el-form-item>
<el-form-item label="账号服务器">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
</el-select>
<el-select v-model="tableData.password.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id+''"/>
</el-select>
</el-form-item>
<el-form-item label="密码:">
<el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large"
clearable/>
</el-form-item>
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="resetPwd">
修改登录密码
</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<!-- <el-card shadow="hover">
<!-- <el-form-item label="目标服务器">-->
<!-- <el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" filterable>-->
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="updateUnit"> 更新 </el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover" header="删除账号">
<template #header>
删除账号
<el-button v-show="item.delShow == false" @click="item.delShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom />
</el-icon>
</el-button>
<el-button v-show="item.delShow == true" @click="item.delShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop />
</el-icon>
</el-button>
</template>
<div v-show="item.delShow">
<div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="账号">
<el-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="账号服务器">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="tableData.del.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" @click="delAccount"> 删除账号 </el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover">
<template #header>
修改登录密码
<el-button v-show="item.pwdShow == false" @click="item.pwdShow = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom />
</el-icon>
</el-button>
<el-button v-show="item.pwdShow == true" @click="item.pwdShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop />
</el-icon>
</el-button>
</template>
<div class="game-order-search mb15" v-show="item.pwdShow">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="account:">
<el-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item>
<el-form-item label="账号服务器">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="tableData.password.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="密码:">
<el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item>
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="resetPwd"> 修改登录密码 </el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<!-- <el-card shadow="hover">
<template #header>
删除资源
<el-button v-show="item.resourceShow == false" @click="item.resourceShow = true" class="button-caret"
@ -231,250 +225,253 @@
</el-form>
</div>
</el-card>-->
</div>
</div>
</template>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent, warn,} from 'vue';
import { toRefs, reactive, onMounted, defineComponent, warn } from 'vue';
import {
gameGMClearResource,
gameGMCopyUnit,
gameGMEditUnit,
gameGMUpdateUnit,
gameGMDelAccount,
gameResetPwd, giftExchangeExists
} from "/@/api/game";
import {AllServerList, serverList} from "/@/utils/game";
import {ElMessage, ElMessageBox} from "element-plus/es";
import {gSwitchServer} from "/@/utils/utils";
gameGMClearResource,
gameGMCopyUnit,
gameGMUpdateUnit,
gameGMDelAccount,
gameResetPwd,
giftExchangeExists,
} from '/@/api/game';
import { AllServerList, ServerCategorize, serverList } from '/@/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus/es';
import { gSwitchServer } from '/@/utils/utils';
const baseURL: string | undefined | boolean = import.meta.env.VITE_API_URL
const baseURL: string | undefined | boolean = import.meta.env.VITE_API_URL;
interface TableData {
filename: string
storeFilename: string
SrcName: number
SrcServer: number
DestName: string
DestServer: number
filename: string;
storeFilename: string;
SrcName: number;
SrcServer: number;
DestName: string;
DestServer: number;
}
interface DelData {
SrcName: string
serverId: number
SrcName: string;
serverId: number;
}
interface TableDataState {
item: { copyShow: boolean, delShow: boolean, pwdShow: boolean, resourceShow: boolean }
tableData: {
data: TableData
del: DelData
password: {
account: string
serverId: number
pwd: string
};
resource: {
account: string,
serverId: number
}
fileNames: string[];
};
servers: object[];
disabled: boolean,
loading: boolean,
loading1: boolean,
fileList: object[];
filename: string;
storeFilename: string;
serverSwitch: number;
item: { copyShow: boolean; delShow: boolean; pwdShow: boolean; resourceShow: boolean };
tableData: {
data: TableData;
del: DelData;
password: {
account: string;
serverId: number;
pwd: string;
};
resource: {
account: string;
serverId: number;
};
fileNames: string[];
};
servers: object[];
disabled: boolean;
loading: boolean;
loading1: boolean;
fileList: object[];
filename: string;
storeFilename: string;
serverSwitch: number;
serverCategorize: object;
}
var timeInterval;
var timeInterval1;
export default defineComponent({
name: 'apiV1GameCopyUnit',
setup() {
// const {proxy} = getCurrentInstance() as any;
const state = reactive<TableDataState>({
serverSwitch: 0,
fileList: [],
baseURL: baseURL,
item: {copyShow: true, delShow: false, pwdShow: false, resourceShow: false},
tableData: {
data: {
SrcName: "", SrcServer: ""
},
del: {
SrcName: "",
serverId: "",
},
password: {
account: "",
serverId: "",
pwd: "",
},
resource: {
account: "",
},
fileNames: []
},
servers: AllServerList,
disabled: true,
loading: false,
loading1: false,
filename: "",
storeFilename: ""
});
const handleRemove = (file, fileList) => {
console.log("handleRemove: ", file, fileList);
};
const handlePreview = (file) => {
console.log("handlePreview: ", file);
};
const handleExceed = (files, fileList) => {
console.log("handleExceed: ", files, fileList);
warn(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
};
const handleChange = (files, fileList) => {
console.log("handleChange: ", files, fileList);
if (state.tableData.fileNames.indexOf(files.name) >= 0) {
return;
}
warn(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
state.tableData.data.filename = files.name;
state.tableData.fileNames.push(files.name);
};
const beforeRemove = (file, fileList) => {
console.log("beforeRemove: ", file, fileList);
return confirm(`确定移除 ${file.name}${fileList.length}`,);
};
const copyUnit = () => {
console.log("state.tableData.data: ", state.tableData.data);
// ElMessage.success('使');
// return
gameGMCopyUnit({
SrcName: state.tableData.data.SrcName,
SrcServer: state.tableData.data.SrcServer
}).then((res) => {
ElMessage.success('修改成功');
console.log("copy: ", res);
state.tableData.data.filename = res.data.filename;
state.tableData.data.storeFilename = res.data.storeFilename;
state.tableData.fileNames.push(res.data.filename);
state.tableData.fileNames.push(res.data.storeFilename);
if (res.data.filename != "") {
state.filename = res.data.filename;
state.storeFilename = res.data.storeFilename;
state.loading = true
state.loading1 = true
state.disabled = false
console.log("gameRandomGenerateCode: ", res, state.filename, state.storeFilename);
timeInterval = setInterval(function () {
checkGiftExchangeExists();
}, 1000);
timeInterval1 = setInterval(function () {
checkGiftExchangeExists1();
}, 1000);
}
}).finally(() => {
})
};
const updateUnit = () => {
console.log("state.tableData.data: ", state.tableData.data);
// ElMessage.success('使');
// return
gameGMUpdateUnit({
filename: state.tableData.data.filename,
storeFilename: state.tableData.data.storeFilename,
DestName: state.tableData.data.DestName,
}).then((res) => {
ElMessage.success('修改成功');
console.log("update: ", res);
}).finally(() => {
})
};
const delAccount = () => {
console.log("state.tableData.data: ", state.tableData.del);
ElMessageBox.confirm(`此操作将删除账号:“${state.tableData.del.SrcName}”,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
gameGMDelAccount(state.tableData.del).then(() => {
ElMessage.success('删除成功');
}).finally(() => {
})
})
};
const resetPwd = () => {
gameResetPwd(state.tableData.password).then(() => {
ElMessage.success('修改密码成功!');
}).finally(() => {
})
};
const clearResource = () => {
console.log("state.tableData.resource: ", state.tableData.resource);
gameGMClearResource(state.tableData.resource).then(() => {
ElMessage.success('删除成功');
}).finally(() => {
})
};
onMounted(() => {
// initTableData();
serverList().then(res => {
state.servers = res;
// console.log(" server : ", state.servers);
})
});
const checkGiftExchangeExists = () => {
giftExchangeExists({"file": state.filename}).then(response => {
console.log("checkGiftExchangeExists", state.filename, response);
if (response.data.state == 1) {
clearInterval(timeInterval);
state.loading = false
}
})
};
const checkGiftExchangeExists1 = () => {
giftExchangeExists({"file": state.storeFilename}).then(response => {
console.log("checkGiftExchangeExists1", state.storeFilename, response);
if (response.data.state == 1) {
clearInterval(timeInterval1);
state.loading1 = false
}
})
};
const onDownload = (file: string) => {
if (file) {
window.open(baseURL + 'upload_file?filename=' + file);
}
name: 'apiV1GameCopyUnit',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
fileList: [],
baseURL: baseURL,
item: { copyShow: true, delShow: false, pwdShow: false, resourceShow: false },
tableData: {
data: {
SrcName: '',
SrcServer: '',
},
del: {
SrcName: '',
serverId: '',
},
password: {
account: '',
serverId: '',
pwd: '',
},
resource: {
account: '',
},
fileNames: [],
},
servers: AllServerList,
disabled: true,
loading: false,
loading1: false,
filename: '',
storeFilename: '',
serverCategorize: ServerCategorize,
});
const handleRemove = (file, fileList) => {
console.log('handleRemove: ', file, fileList);
};
const handlePreview = (file) => {
console.log('handlePreview: ', file);
};
const handleExceed = (files, fileList) => {
console.log('handleExceed: ', files, fileList);
warn(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
};
const handleChange = (files, fileList) => {
console.log('handleChange: ', files, fileList);
if (state.tableData.fileNames.indexOf(files.name) >= 0) {
return;
}
warn(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
state.tableData.data.filename = files.name;
state.tableData.fileNames.push(files.name);
};
const beforeRemove = (file, fileList) => {
console.log('beforeRemove: ', file, fileList);
return confirm(`确定移除 ${file.name}${fileList.length}`);
};
const copyUnit = () => {
console.log('state.tableData.data: ', state.tableData.data);
// ElMessage.success('使');
// return
gameGMCopyUnit({
SrcName: state.tableData.data.SrcName,
SrcServer: state.tableData.data.SrcServer,
}).then((res) => {
ElMessage.success('修改成功');
console.log('copy: ', res);
state.tableData.data.filename = res.data.filename;
state.tableData.data.storeFilename = res.data.storeFilename;
state.tableData.fileNames.push(res.data.filename);
state.tableData.fileNames.push(res.data.storeFilename);
if (res.data.filename != '') {
state.filename = res.data.filename;
state.storeFilename = res.data.storeFilename;
state.loading = true;
state.loading1 = true;
state.disabled = false;
console.log('gameRandomGenerateCode: ', res, state.filename, state.storeFilename);
timeInterval = setInterval(function () {
checkGiftExchangeExists();
}, 1000);
timeInterval1 = setInterval(function () {
checkGiftExchangeExists1();
}, 1000);
}
})
.finally(() => {});
};
// state.disabled = true;
}
//
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
const updateUnit = () => {
console.log('state.tableData.data: ', state.tableData.data);
// ElMessage.success('使');
// return
gameGMUpdateUnit({
filename: state.tableData.data.filename,
storeFilename: state.tableData.data.storeFilename,
DestName: state.tableData.data.DestName,
})
.then((res) => {
ElMessage.success('修改成功');
console.log('update: ', res);
})
.finally(() => {});
};
const delAccount = () => {
console.log('state.tableData.data: ', state.tableData.del);
ElMessageBox.confirm(`此操作将删除账号:“${state.tableData.del.SrcName}”,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
gameGMDelAccount(state.tableData.del)
.then(() => {
ElMessage.success('删除成功');
})
.finally(() => {});
});
};
const resetPwd = () => {
gameResetPwd(state.tableData.password)
.then(() => {
ElMessage.success('修改密码成功!');
})
.finally(() => {});
};
const clearResource = () => {
console.log('state.tableData.resource: ', state.tableData.resource);
gameGMClearResource(state.tableData.resource)
.then(() => {
ElMessage.success('删除成功');
})
.finally(() => {});
};
onMounted(() => {
// initTableData();
serverList().then((res) => {
state.servers = res;
// console.log(" server : ", state.servers);
});
});
const checkGiftExchangeExists = () => {
giftExchangeExists({ file: state.filename }).then((response) => {
console.log('checkGiftExchangeExists', state.filename, response);
if (response.data.state == 1) {
clearInterval(timeInterval);
state.loading = false;
}
});
};
const checkGiftExchangeExists1 = () => {
giftExchangeExists({ file: state.storeFilename }).then((response) => {
console.log('checkGiftExchangeExists1', state.storeFilename, response);
if (response.data.state == 1) {
clearInterval(timeInterval1);
state.loading1 = false;
}
});
};
const onDownload = (file: string) => {
if (file) {
window.open(baseURL + 'upload_file?filename=' + file);
}
};
return {
switchServer,
onDownload,
handleRemove,
handleChange,
handlePreview,
handleExceed,
beforeRemove,
resetPwd,
copyUnit,
updateUnit,
delAccount,
clearResource,
...toRefs(state),
};
},
// state.disabled = true;
};
//
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
return {
switchServer,
onDownload,
handleRemove,
handleChange,
handlePreview,
handleExceed,
beforeRemove,
resetPwd,
copyUnit,
updateUnit,
delAccount,
clearResource,
...toRefs(state),
};
},
});
</script>

12
src/views/gameManage/gm/index.vue

@ -11,14 +11,11 @@
</el-form-item>
<el-form-item label="区服" v-if="tableData.data.type==2">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.data.serverId" class="w-50 m-2" placeholder="选择区服" size="large"
filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="渠道" v-if="tableData.data.type==2">
@ -80,7 +77,7 @@
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {gameChangeGm, gameGmSearch, gameListGm, gameSetclientgm} from "/@/api/game";
import {channelList, serverList} from "/@/utils/game";
import {channelList, ServerCategorize, serverList} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
import {ElMessage} from "element-plus/es";
@ -113,6 +110,7 @@ interface TableDataState {
channels: object;
gmStates: object;
serverSwitch: number;
serverCategorize: object;
}
export default defineComponent({
@ -155,7 +153,7 @@ export default defineComponent({
label: '黑名单',
},
],
serverCategorize: ServerCategorize,
});
const gmSearch = () => {
let query = {type: state.tableData.data.type, uid: state.tableData.data.uid};

11
src/views/gameManage/keep/index.vue

@ -17,13 +17,10 @@
</el-form-item>
<el-form-item label="选择服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.server" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="注册日期" prop="createTime">
@ -229,7 +226,7 @@
import {ElMessage} from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {keepAccount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {allChannelList, allServerList, ServerCategorize} from "/@/utils/game";
import {DATE_LIST_KEEP, DATE_NAMES} from "/@/api/common/consts";
import {gSwitchServer} from "/@/utils/utils";
@ -269,6 +266,7 @@ interface TableDataState {
dateNames: object;
dateList: object;
serverSwitch: number;
serverCategorize: object;
}
export default defineComponent({
@ -294,6 +292,7 @@ export default defineComponent({
channels: [],
dateNames: DATE_NAMES,
dateList: DATE_LIST_KEEP,
serverCategorize: ServerCategorize,
});
const getRemain = () => {

11
src/views/gameManage/live/index.vue

@ -17,13 +17,10 @@
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.server" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="起始日期" prop="createTime" v-show="queryParams.modelType==1">
@ -139,7 +136,7 @@
//import { ElMessageBox, ElMessage } from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {liveAccount, registerCount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {allChannelList, allServerList, ServerCategorize} from "/@/utils/game";
import {ElMessage} from "element-plus";
import {gSwitchServer, getDaysBetween} from "/@/utils/utils";
import {DATE_NAMES1} from "/@/api/common/consts";
@ -183,6 +180,7 @@ interface TableDataState {
allChannels: object[];
channels: object[];
dateNames: object;
serverCategorize: object;
}
export default defineComponent({
@ -212,6 +210,7 @@ export default defineComponent({
allChannels: [],
channels: [],
dateNames: DATE_NAMES1,
serverCategorize: ServerCategorize,
});
const getRemain = () => {

267
src/views/gameManage/migrate/index.vue

@ -1,151 +1,148 @@
<template>
<div class="game-account-container">
<el-card shadow="hover">
<div class="game-account-search mb15">
<el-form :inline="true">
<el-form-item label="源UID:">
<el-input size="default" v-model="tableData.param.srcUid" placeholder="输入源UID" class="w-50 m-2"
clearable/>
</el-form-item>
<el-form-item label="源服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
</el-select>
<el-select v-model="tableData.param.srcServer" class="m-2" placeholder="选择区服" size="large" filterable>
<el-option v-for="item in servers" :key="item.id+''"
:label="(item.platform==1?'ios ':(item.platform==2?'an ':'先行 '))+item.id + ' ' +item.name"
:value="item.id+''"/>
</el-select>
</el-form-item>
<el-form-item label="转移UID:">
<el-input size="default" v-model="tableData.param.destUid" placeholder="输入转移UID"
class="w-50 m-2" clearable/>
</el-form-item>
<el-form-item label="转移服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
</el-select>
<el-select v-model="tableData.param.destServer" class="m-2" placeholder="选择区服" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" class="ml10" @click="roleList">
<el-icon>
<ele-Search/>
</el-icon>
查询
</el-button>
<el-button size="default" type="primary" class="ml10" @click="roleList">
确定迁移
</el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.data" style="width: 100%">
<el-table-column type="index" label="序号" width="60"/>
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column>
<el-table-column prop="account" label="账号" show-overflow-tooltip></el-table-column>
<el-table-column prop="name" label="桃谷名字" show-overflow-tooltip></el-table-column>
<el-table-column prop="boom" label="繁荣度" show-overflow-tooltip></el-table-column>
<el-table-column prop="villageScale" label="规模" show-overflow-tooltip></el-table-column>
</el-table>
</el-card>
</div>
<div class="game-account-container">
<el-card shadow="hover">
<div class="game-account-search mb15">
<el-form :inline="true">
<el-form-item label="源UID:">
<el-input size="default" v-model="tableData.param.srcUid" placeholder="输入源UID" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="源服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="tableData.param.srcServer" class="m-2" placeholder="选择区服" size="large" filterable>
<el-option
v-for="item in servers"
:key="item.id + ''"
:label="(item.platform == 1 ? 'ios ' : item.platform == 2 ? 'an ' : '先行 ') + item.id + ' ' + item.name"
:value="item.id + ''"
/>
</el-select>
</el-form-item>
<el-form-item label="转移UID:">
<el-input size="default" v-model="tableData.param.destUid" placeholder="输入转移UID" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="转移服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0" />
<el-option label="ios" :value="1" />
<el-option label="安卓" :value="2" />
<el-option label="其他" :value="3" />
</el-select>
<el-select v-model="tableData.param.destServer" class="m-2" placeholder="选择区服" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" class="ml10" @click="roleList">
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
<el-button size="default" type="primary" class="ml10" @click="roleList"> 确定迁移 </el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.data" style="width: 100%">
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column>
<el-table-column prop="account" label="账号" show-overflow-tooltip></el-table-column>
<el-table-column prop="name" label="桃谷名字" show-overflow-tooltip></el-table-column>
<el-table-column prop="boom" label="繁荣度" show-overflow-tooltip></el-table-column>
<el-table-column prop="villageScale" label="规模" show-overflow-tooltip></el-table-column>
</el-table>
</el-card>
</div>
</template>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {serverList} from "/@/utils/game";
import {gameAccountList} from "/@/api/game";
import {gSwitchServer} from "/@/utils/utils";
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { ServerCategorize, serverList } from '/@/utils/game';
import { gameAccountList } from '/@/api/game';
import { gSwitchServer } from '/@/utils/utils';
//
interface TableData {
uid: number;
account: string;
name: string;
boom: number;
villageScale: number;
uid: number;
account: string;
name: string;
boom: number;
villageScale: number;
}
interface TableDataState {
serverSwitch: number;
tableData: {
data: Array<TableData>;
param: {
srcUid: number;
srcServer: string;
destUid: number;
destServer: string
}
};
servers: object[]
serverSwitch: number;
tableData: {
data: Array<TableData>;
param: {
srcUid: number;
srcServer: string;
destUid: number;
destServer: string;
};
};
servers: object[];
serverCategorize: object[];
}
export default defineComponent({
name: 'apiV1GameAccountList',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
tableData: {
data: [],
param: {
srcUid: 0,
srcServer: "",
destUid: 0,
destServer: ""
},
},
servers: []
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
name: 'apiV1GameAccountList',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
tableData: {
data: [],
param: {
srcUid: 0,
srcServer: '',
destUid: 0,
destServer: '',
},
},
servers: [],
serverCategorize: ServerCategorize,
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
const roleList = () => {
const data: Array<TableData> = [];
gameAccountList(state.tableData.param).then((res) => {
const list = res.data.list ?? [];
list.map((item: TableData) => {
data.push({
uid: item.uid,
account: item.account,
name: item.name,
boom: item.boom,
villageScale: item.villageScale,
});
});
state.tableData.data = data;
});
};
};
const roleList = () => {
const data: Array<TableData> = [];
gameAccountList(state.tableData.param).then(res => {
const list = res.data.list ?? []
list.map((item: TableData) => {
data.push({
uid: item.uid,
account: item.account,
name: item.name,
boom: item.boom,
villageScale: item.villageScale,
});
});
state.tableData.data = data;
})
};
// //
// const onHandleSizeChange = (val: number) => {
// state.tableData.param.pageSize = val;
// };
// //
// const onHandleCurrentChange = (val: number) => {
// state.tableData.param.pageNum = val;
// };
//
onMounted(() => {
serverList().then(value => {
state.servers = value;
// console.log(" server : ", state.servers);
});
});
return {
switchServer,
roleList,
...toRefs(state),
};
},
// //
// const onHandleSizeChange = (val: number) => {
// state.tableData.param.pageSize = val;
// };
// //
// const onHandleCurrentChange = (val: number) => {
// state.tableData.param.pageNum = val;
// };
//
onMounted(() => {
serverList().then((value) => {
state.servers = value;
// console.log(" server : ", state.servers);
});
});
return {
switchServer,
roleList,
...toRefs(state),
};
},
});
</script>

11
src/views/gameManage/register/index.vue

@ -11,13 +11,10 @@
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="起始日期" prop="startTime">
@ -66,7 +63,7 @@
//import { ElMessageBox, ElMessage } from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {registerCount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {allChannelList, allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
interface TableDataState {
@ -85,6 +82,7 @@ interface TableDataState {
};
servers: object[];
channels: object[];
serverCategorize: object[];
}
export default defineComponent({
@ -107,6 +105,7 @@ export default defineComponent({
},
servers: [],
channels: [],
serverCategorize: ServerCategorize,
});
const switchServer = () => {

11
src/views/gameManage/shop/index.vue

@ -11,13 +11,10 @@
</el-form-item>
<el-form-item label="选择服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="注册日期" prop="createTime">
@ -126,7 +123,7 @@
//import { ElMessageBox, ElMessage } from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {keepAccount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {allChannelList, allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
//
@ -157,6 +154,7 @@ interface TableDataState {
servers: object[];
channels: object[];
dateNames: object;
serverCategorize: object;
}
export default defineComponent({
@ -187,6 +185,7 @@ export default defineComponent({
15: "fifteen",
30: "thirty"
},
serverCategorize: ServerCategorize,
});
const getRemain = () => {

11
src/views/gameNotice/pop/index.vue

@ -4,13 +4,10 @@
<el-form label-width="90px">
<el-form-item label="服务器:" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-form>
@ -132,7 +129,7 @@ import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {ElMessageBox, ElMessage} from 'element-plus';
import {gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel} from "/@/api/game";
import {contentReplace, gSwitchServer} from "/@/utils/utils";
import {serverList} from "/@/utils/game";
import {ServerCategorize, serverList} from "/@/utils/game";
interface TableDataState {
unselsected: string[]
@ -159,6 +156,7 @@ interface TableDataState {
listModelVisible: boolean,
contentVisible: boolean,
serverSwitch: number,
serverCategorize: object[],
}
export default defineComponent({
@ -189,6 +187,7 @@ export default defineComponent({
servers: [],
model: "",
editModel: {},
serverCategorize: ServerCategorize,
});
const noticePop = () => {
console.log("Notice: ", state.tableData.param);

13
src/views/gameOrder/count/index.vue

@ -5,13 +5,10 @@
<el-form :inline="true">
<el-form-item label="选择区服">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.server" placeholder="选择区服">
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="充值金额">
@ -70,7 +67,7 @@
import {toRefs, reactive, onMounted, defineComponent} from 'vue';
//import { ElMessageBox, ElMessage } from 'element-plus';
import {gameOrderCount} from "/@/api/game";
import {allServerList, AllServerList} from "/@/utils/game";
import {allServerList, AllServerList, ServerCategorize} from "/@/utils/game";
import actionModel from "/@/views/gameMarket/actionModel/index.vue";
import {gSwitchServer} from "/@/utils/utils";
@ -101,6 +98,7 @@ interface TableDataState {
compareType: object
};
servers: object[];
serverCategorize: object[];
}
export default defineComponent({
@ -141,7 +139,8 @@ export default defineComponent({
}
]
},
servers: AllServerList
servers: AllServerList,
serverCategorize: ServerCategorize
});
const countList = () => {

322
src/views/gameOrder/deposit/index.vue

@ -1,6 +1,6 @@
<template>
<div class="game-order-container">
<!--<el-card shadow="hover">
<div class="game-order-container">
<!--<el-card shadow="hover">
<div class=" mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="选择区服" prop="serverId">
@ -27,162 +27,188 @@
</el-form>
</div>
</el-card>-->
<el-card shadow="hover">
<div class="mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<el-form-item label="uid">
<el-input v-model="tableData.paramDeposit.account" placeholder="请输入玩家uid" class="w-50 m-2" clearable/>
</el-form-item>
<el-form-item label="充值金额">
<el-select v-model="tableData.paramDeposit.depositId" class="w-50 m-2" placeholder="">
<el-option v-for="item in depositIds" v-show="item.Currency==1" :key="item.Id" :label="item.Name"
:value="item.Id"/>
</el-select>
</el-form-item>
<el-form-item label="充值次数">
<el-input v-model="tableData.paramDeposit.times" placeholder="请输入充值次数" class="w-50 m-2" clearable/>
</el-form-item>
<el-form-item label="是否统计付费" prop="count">
<el-radio v-model="tableData.paramDeposit.count" :label="0">不统计</el-radio>
<el-radio v-model="tableData.paramDeposit.count" :label="1">统计</el-radio>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" @click="deposit">
确认充值
</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
<el-card shadow="hover">
<div class="mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px">
<!-- <el-form-item label="选择区服" prop="serverId">-->
<!-- <el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="">-->
<!-- <el-option v-for="item in servers" :key="item.value" :label="item.label" :value="item.value"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="选择服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" />
</el-select>
</el-form-item>
<!-- <el-form-item label="uid">-->
<!-- <el-input v-model="tableData.paramDeposit.serverId" placeholder="请输入玩家uid" class="w-50 m-2" clearable/>-->
<!-- </el-form-item> v -->
<el-form-item label="uid">
<el-input v-model="tableData.paramDeposit.account" placeholder="请输入玩家uid" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="充值金额">
<el-select v-model="tableData.paramDeposit.depositId" class="w-50 m-2" placeholder="">
<el-option v-for="item in depositIds" v-show="item.Currency == 1" :key="item.Id" :label="item.Name" :value="item.Id" />
</el-select>
</el-form-item>
<el-form-item label="充值次数">
<el-input v-model="tableData.paramDeposit.times" placeholder="请输入充值次数" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="是否统计付费" prop="count">
<el-radio v-model="tableData.paramDeposit.count" :label="0">不统计</el-radio>
<el-radio v-model="tableData.paramDeposit.count" :label="1">统计</el-radio>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" @click="deposit"> 确认充值 </el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</template>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {gameAddCoin, gameDeposit} from "/@/api/game";
import {Platforms, ChannelList, serverList, channelList} from "/@/utils/game";
import {ElMessage} from "element-plus/es";
import RechargeConfigCategory from "/@/api/config/RechargeConfigCategory.json"
import {ElMessageBox} from "element-plus";
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { gameAddCoin, gameDeposit } from '/@/api/game';
import { Platforms, ChannelList, ServerCategorize, serverList } from '/@/utils/game';
import { ElMessage } from 'element-plus/es';
import RechargeConfigCategory from '/@/api/config/RechargeConfigCategory.json';
import { ElMessageBox } from 'element-plus';
import { allGSwitchServer } from '/@/utils/utils';
interface TableDataState {
tableData: {
param: {
uid: number
amount: number
amountType: number
serverId: string
};
paramDeposit: {
account: string
depositId: number
serverId: number
channel: string
amount: number
platform: number
count: number
times: number
}
};
servers: object[];
amountTypes: object
depositIds: object[]
platforms: object[]
channels: object[]
tableData: {
param: {
uid: number;
amount: number;
amountType: number;
serverId: string;
};
paramDeposit: {
account: string;
depositId: number;
serverId: number;
channel: string;
amount: number;
platform: number;
count: number;
times: number;
};
};
servers: object[];
amountTypes: object;
depositIds: object[];
platforms: object[];
channels: object[];
serverSwitch: number;
serverCategorize: object[];
}
export default defineComponent({
name: 'apiV1GameOrderDeposit',
setup() {
// const {proxy} = getCurrentInstance() as any;
const state = reactive<TableDataState>({
queryParams: {
account: "",
depositId: 101,
serverId: 1,
channel: "000000000000",
platform: 1,
count: 0
},
tableData: {
param: {
uid: 0,
amount: 0,
amountType: 1,
serverId: 1
},
paramDeposit: {
account: "",
depositId: 101,
serverId: 1,
channel: "000000000000",
platform: 1,
count: 0,
times: 1
}
},
servers: [],
amountTypes: [
{
value: 3,
label: '手稿',
},
{
value: 1,
label: '铜币',
},
],
depositIds: RechargeConfigCategory,
platforms: Platforms,
channels: ChannelList,
});
const changeGameCoin = () => {
gameAddCoin(state.tableData.param).then(() => {
ElMessage.success('赠送金币成功');
}).finally(() => {
// state.loading = false;
})
}
const deposit = () => {
var config = state.depositIds.find(r => r.Id == state.tableData.paramDeposit.depositId);
state.tableData.paramDeposit.amount = config.RMB_Num
ElMessageBox.confirm(`确认给账号${state.tableData.paramDeposit.account},充值${state.tableData.paramDeposit.amount}元?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
name: 'apiV1GameOrderDeposit',
setup() {
// const {proxy} = getCurrentInstance() as any;
const state = reactive<TableDataState>({
queryParams: {
account: '',
depositId: 101,
serverId: 1,
channel: '000000000000',
platform: 1,
count: 0,
},
tableData: {
param: {
uid: 0,
amount: 0,
amountType: 1,
serverId: 1,
},
paramDeposit: {
account: '',
depositId: 101,
serverId: 1,
channel: '000000000000',
platform: 1,
count: 0,
times: 1,
},
},
servers: [],
amountTypes: [
{
value: 3,
label: '手稿',
},
{
value: 1,
label: '铜币',
},
],
depositIds: RechargeConfigCategory,
platforms: Platforms,
channels: ChannelList,
serverCategorize: ServerCategorize,
serverSwitch: 0,
});
const changeGameCoin = () => {
gameAddCoin(state.tableData.param)
.then(() => {
ElMessage.success('赠送金币成功');
})
.finally(() => {
// state.loading = false;
});
};
const deposit = () => {
var config = state.depositIds.find((r) => r.Id == state.tableData.paramDeposit.depositId);
state.tableData.paramDeposit.amount = config.RMB_Num;
ElMessageBox.confirm(`确认给账号${state.tableData.paramDeposit.account},充值${state.tableData.paramDeposit.amount}元?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
for (let i = 0; i < state.tableData.paramDeposit.times; i++) {
setTimeout(() => {
recharge(i);
}, i * 1000);
}
})
.catch(() => {});
};
const recharge = (i: number) => {
gameDeposit(state.tableData.paramDeposit)
.then((res) => {
console.log(res);
if (res) {
ElMessage.success('第' + (i + 1) + '次,充值成功');
}
})
.finally(() => {});
};
for (let i = 0; i < state.tableData.paramDeposit.times; i++) {
setTimeout(() => {
recharge(i);
}, i*1000)
}
}).catch(() => {
const switchServer = () => {
return allGSwitchServer(state.serverSwitch, state.servers);
};
//
onMounted(() => {
serverList().then((res) => {
state.servers = res
state.tableData.paramDeposit.serverId = "" + res[0].id;
});
}
const recharge = (i: number) => {
gameDeposit(state.tableData.paramDeposit).then((res) => {
console.log(res);
if (res) {
ElMessage.success('第' + (i + 1) + '次,充值成功');
}
}).finally(() => {
})
}
//
onMounted(() => {
});
return {
changeGameCoin,
deposit,
...toRefs(state),
};
},
});
return {
switchServer,
changeGameCoin,
deposit,
...toRefs(state),
};
},
});
</script>

9
src/views/gameOrder/orderLog/index.vue

@ -11,10 +11,7 @@
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服"
:disabled="tableData.param.channel===''" filterable>
@ -122,7 +119,7 @@
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {orderLog} from "/@/api/game/index";
import {allChannelList, CompareType, allServerList} from "/@/utils/game";
import {allChannelList, CompareType, allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
//
@ -160,6 +157,7 @@ interface TableDataState {
servers: object;
channels: object[];
dateNames: object;
serverCategorize: object;
}
export default defineComponent({
@ -194,6 +192,7 @@ export default defineComponent({
15: "fifteen",
30: "thirty"
},
serverCategorize: ServerCategorize,
});
const getRemain = () => {

9
src/views/gameOrder/shopInfo/index.vue

@ -11,10 +11,7 @@
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
@ -59,7 +56,7 @@
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {gameShopList} from "/@/api/game";
import {allServerList, allChannelList} from "/@/utils/game";
import {allServerList, allChannelList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
import CommonShopConfigCategory from "/@/api/config/CommonShopConfigCategory.json";
import RechargeConfigCategory from "/@/api/config/RechargeConfigCategory.json";
@ -90,6 +87,7 @@ interface TableDataState {
channels: object;
itemConfig: object[];
commonShop: object[];
serverCategorize: object[];
}
export default defineComponent({
@ -114,6 +112,7 @@ export default defineComponent({
channels: [],
rechargeConfig: RechargeConfigCategory,
commonShop: CommonShopConfigCategory,
serverCategorize: ServerCategorize,
});
const orderList = () => {

11
src/views/gameRole/account/index.vue

@ -5,10 +5,7 @@
<el-form :inline="true">
<el-form-item label="服务器">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id+''"/>
@ -61,7 +58,7 @@
import {toRefs, reactive, onMounted, defineComponent} from 'vue';
import {gameAccountList} from "/@/api/game";
import {ElMessage} from "element-plus";
import {serverList} from "/@/utils/game";
import {ServerCategorize, serverList} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
//
@ -90,6 +87,7 @@ interface TableDataState {
accountType: Array<{ label: string, value: number }>
};
servers: object[]
serverCategorize: object[]
}
export default defineComponent({
@ -109,7 +107,8 @@ export default defineComponent({
total: 0,
accountType: [{label: "正常", value: 0}, {label: "黑名单", value: 0}, {label: "GM", value: 0}]
},
servers: []
servers: [],
serverCategorize: ServerCategorize,
});
const accountList = () => {

11
src/views/gameRole/online/index.vue

@ -5,10 +5,7 @@
<el-form :inline="true">
<el-form-item label="选择服务器" prop="serverId">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
@ -82,7 +79,7 @@
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
//import { ElMessageBox, ElMessage } from 'element-plus';
// import EditRole from '/@/views/system/role/component/editRole.vue';
import {allServerList, ServerList} from "/@/utils/game";
import {allServerList, ServerCategorize, ServerList} from "/@/utils/game";
import {gameOnlineList, gameOnlineTopList} from "/@/api/game";
import {gSwitchServer} from "/@/utils/utils";
@ -107,6 +104,7 @@ interface TableDataState {
total: number;
};
servers: object[]
serverCategorize: object[];
}
export default defineComponent({
@ -126,7 +124,8 @@ export default defineComponent({
topNumber: 0,
total: 0,
},
servers: ServerList
servers: ServerList,
serverCategorize: ServerCategorize
});
const onlineList = () => {
// const data: Array<any> = [];

2727
src/views/gameRole/role/index.vue

File diff suppressed because it is too large Load Diff

9
src/views/gameRole/scale/index.vue

@ -26,10 +26,7 @@
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
@ -154,7 +151,7 @@
//import { ElMessageBox, ElMessage } from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {liveAccount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {allChannelList, allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
//
@ -186,6 +183,7 @@ interface TableDataState {
channels: object[];
dateNames: object;
serverSwitch: number;
serverCategorize: object[];
}
export default defineComponent({
@ -216,6 +214,7 @@ export default defineComponent({
15: "fifteen",
30: "thirty"
},
serverCategorize: ServerCategorize,
});
const getRemain = () => {

11
src/views/gameRole/searchAccount/index.vue

@ -5,10 +5,7 @@
<el-form :inline="true">
<el-form-item label="服务器">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
@ -80,7 +77,7 @@
import {toRefs, reactive, onMounted, defineComponent} from 'vue';
import {gameSearchAccount} from "/@/api/game";
import {ElMessage} from "element-plus";
import {allServerList} from "/@/utils/game";
import {allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
//
@ -113,6 +110,7 @@ interface TableDataState {
};
servers: object[];
compareType: Array<{ label: string, value: number }>
serverCategorize: object[];
}
export default defineComponent({
@ -146,7 +144,8 @@ export default defineComponent({
{value: 3, label: '<',},
{value: 4, label: '>',},
{value: 5, label: '>=',}
]
],
serverCategorize: ServerCategorize,
});
const accountList = () => {

539
src/views/gameRole/statics/index.vue

@ -1,292 +1,287 @@
<template>
<div class="game-statistics-container">
<el-card shadow="hover">
<div class="system-user-search mb15">
<el-form :inline="true">
<el-form-item label="渠道" prop="channel">
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道">
<el-option v-for="item in channels" :key="item.value" :label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option label="全部" :value="0"/>
<el-option label="ios" :value="1"/>
<el-option label="安卓" :value="2"/>
<el-option label="其他" :value="3"/>
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/>
</el-select>
</el-form-item>
<el-form-item label="起始日期" prop="startTime">
<el-date-picker type="datetime" v-model="tableData.param.startTime" format="YYYY-MM-DD HH:mm:ss"
value-format="x"/>
</el-form-item>
<el-form-item label="起始日期" prop="endTime">
<el-date-picker type="datetime" v-model="tableData.param.endTime" format="YYYY-MM-DD HH:mm:ss"
value-format="x"/>
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" class="ml10" @click="getRemain">
<el-icon>
<ele-Search/>
</el-icon>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.registerData" style="width: 100%">
<el-table-column prop="labelName" label="注册数量" width="180"></el-table-column>
<el-table-column prop="one" label="男性玩家" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="two" label="男性玩家占比" width="180">
<template #default="scope">
<div v-if="scope.row.two">
<span>{{ scope.row.two }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="three" label="女性玩家" width="180">
<template #default="scope">
<div v-if="scope.row.three">
<span>{{ scope.row.three }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性玩家占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
<el-table :data="tableData.rechargeData" style="width: 100%">
<el-table-column prop="labelName" label="充值用户" width="180"></el-table-column>
<el-table-column prop="one" label="男性占比" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
<el-table :data="tableData.accountData" style="width: 100%">
<el-table-column prop="age" label="年龄" width="180"></el-table-column>
<el-table-column prop="one" label="用户数量" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="百分比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="男性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="充值数量占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="充值额度占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
<div class="game-statistics-container">
<el-card shadow="hover">
<div class="system-user-search mb15">
<el-form :inline="true">
<el-form-item label="渠道" prop="channel">
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道">
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="选择区服" prop="server">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" filterable>
<el-option v-for="item in switchServer()" :key="item.id + ''" :label="item.name" :value="item.id + ''" />
</el-select>
</el-form-item>
<el-form-item label="起始日期" prop="startTime">
<el-date-picker type="datetime" v-model="tableData.param.startTime" format="YYYY-MM-DD HH:mm:ss" value-format="x" />
</el-form-item>
<el-form-item label="起始日期" prop="endTime">
<el-date-picker type="datetime" v-model="tableData.param.endTime" format="YYYY-MM-DD HH:mm:ss" value-format="x" />
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" class="ml10" @click="getRemain">
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.registerData" style="width: 100%">
<el-table-column prop="labelName" label="注册数量" width="180"></el-table-column>
<el-table-column prop="one" label="男性玩家" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="two" label="男性玩家占比" width="180">
<template #default="scope">
<div v-if="scope.row.two">
<span>{{ scope.row.two }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="three" label="女性玩家" width="180">
<template #default="scope">
<div v-if="scope.row.three">
<span>{{ scope.row.three }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性玩家占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
<el-table :data="tableData.rechargeData" style="width: 100%">
<el-table-column prop="labelName" label="充值用户" width="180"></el-table-column>
<el-table-column prop="one" label="男性占比" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
<el-table :data="tableData.accountData" style="width: 100%">
<el-table-column prop="age" label="年龄" width="180"></el-table-column>
<el-table-column prop="one" label="用户数量" width="180">
<template #default="scope">
<div v-if="scope.row.one">
<span>{{ scope.row.one }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="百分比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="男性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="女性占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="充值数量占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="four" label="充值额度占比" width="180">
<template #default="scope">
<div v-if="scope.row.four">
<span>{{ scope.row.four }}</span>
</div>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</template>
<script lang="ts">
//import { ElMessageBox, ElMessage } from 'element-plus';
import {toRefs, reactive, onMounted, defineComponent,} from 'vue';
import {liveAccount} from "/@/api/game/index";
import {allChannelList, allServerList} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { liveAccount } from '/@/api/game/index';
import { allChannelList, allServerList, ServerCategorize } from '/@/utils/game';
import { gSwitchServer } from '/@/utils/utils';
//
interface TableData {
labelName: string
one: number
two: number
three: number
four: number
five: number
six: number
seven: number
fifteen: number
thirty: number
labelName: string;
one: number;
two: number;
three: number;
four: number;
five: number;
six: number;
seven: number;
fifteen: number;
thirty: number;
}
interface TableDataState {
serverSwitch: number;
tableData: {
data: Array<TableData>;
registerNum: number;
param: {
channel: string;
server: number;
createTime: string;
};
total: number;
};
servers: object[];
channels: object[];
dateNames: object;
serverSwitch: number;
tableData: {
data: Array<TableData>;
registerNum: number;
param: {
channel: string;
server: number;
createTime: string;
};
total: number;
};
servers: object[];
channels: object[];
dateNames: object;
serverCategorize: object;
}
export default defineComponent({
name: 'apiV1GameRoleStatics',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
tableData: {
data: [{labelName: "总注册量"}, {labelName: "活跃-占比"}, {labelName: "最高在线"}],
registerNum: 0,
param: {
channel: "",
server: "",
createTime: "",
},
total: 0,
},
servers: [],
channels: [],
dateNames: {
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
15: "fifteen",
30: "thirty"
},
});
name: 'apiV1GameRoleStatics',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
tableData: {
data: [{ labelName: '总注册量' }, { labelName: '活跃-占比' }, { labelName: '最高在线' }],
registerNum: 0,
param: {
channel: '',
server: '',
createTime: '',
},
total: 0,
},
servers: [],
channels: [],
dateNames: {
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
15: 'fifteen',
30: 'thirty',
},
serverCategorize: ServerCategorize,
});
const getRemain = () => {
state.tableData.data = [{labelName: "总注册量"}, {labelName: "活跃-占比"}, {labelName: "最高在线"}];
const highData = state.tableData.data[2];
const liveData = state.tableData.data[1];
const registerData = {};
const totalRegisterData = state.tableData.data[0];
let date = state.tableData.param.createTime;
liveAccount(state.tableData.param).then(res => {
console.log("keepAccount:", res);
const highLogs = res.data && res.data.highLogs || [];
const liveLogs = res.data && res.data.liveLogs || [];
const registerLogs = res.data && res.data.registerLogs || [];
highLogs.map((item: any) => {
// if(item.cd == item.ct){
// state.tableData.registerNum = item.num;
// }
let delta = getDaysBetween(date + " 00:00:00", item.cd + " 00:00:00");
let name = state.dateNames[delta];
if (name) {
highData[name] = item.num
}
});
registerLogs.map((item: any) => {
let delta = getDaysBetween(date + " 00:00:00", item.ct + " 00:00:00");
let name = state.dateNames[delta];
if (name) {
registerData[name] = item.num
}
});
for (let i in state.dateNames) {
let name = state.dateNames[i];
totalRegisterData[name] = res.data.registerTotal;
for (let j = 1; j <= i; j++) {
if (registerData[state.dateNames[j]]) {
totalRegisterData[name] += registerData[state.dateNames[j]]
}
}
}
liveLogs.map((item: any) => {
let delta = getDaysBetween(date + " 00:00:00", item.cd + " 00:00:00");
let name = state.dateNames[delta];
if (name) {
liveData[name] = item.num;
if (registerData[name]) {
console.log("register: ", item.num, registerData[name], Math.floor(Number(item.num) / Number(registerData[name]) * 100));
liveData[name] += '--' + Math.floor(Number(item.num) / Number(totalRegisterData[name]) * 100) + "%"
}
}
});
const getRemain = () => {
state.tableData.data = [{ labelName: '总注册量' }, { labelName: '活跃-占比' }, { labelName: '最高在线' }];
const highData = state.tableData.data[2];
const liveData = state.tableData.data[1];
const registerData = {};
const totalRegisterData = state.tableData.data[0];
let date = state.tableData.param.createTime;
liveAccount(state.tableData.param).then((res) => {
console.log('keepAccount:', res);
const highLogs = (res.data && res.data.highLogs) || [];
const liveLogs = (res.data && res.data.liveLogs) || [];
const registerLogs = (res.data && res.data.registerLogs) || [];
highLogs.map((item: any) => {
// if(item.cd == item.ct){
// state.tableData.registerNum = item.num;
// }
let delta = getDaysBetween(date + ' 00:00:00', item.cd + ' 00:00:00');
let name = state.dateNames[delta];
if (name) {
highData[name] = item.num;
}
});
registerLogs.map((item: any) => {
let delta = getDaysBetween(date + ' 00:00:00', item.ct + ' 00:00:00');
let name = state.dateNames[delta];
if (name) {
registerData[name] = item.num;
}
});
for (let i in state.dateNames) {
let name = state.dateNames[i];
totalRegisterData[name] = res.data.registerTotal;
for (let j = 1; j <= i; j++) {
if (registerData[state.dateNames[j]]) {
totalRegisterData[name] += registerData[state.dateNames[j]];
}
}
}
liveLogs.map((item: any) => {
let delta = getDaysBetween(date + ' 00:00:00', item.cd + ' 00:00:00');
let name = state.dateNames[delta];
if (name) {
liveData[name] = item.num;
if (registerData[name]) {
console.log('register: ', item.num, registerData[name], Math.floor((Number(item.num) / Number(registerData[name])) * 100));
liveData[name] += '--' + Math.floor((Number(item.num) / Number(totalRegisterData[name])) * 100) + '%';
}
}
});
});
};
})
};
function getDaysBetween(date1, date2) {
var startDate = Date.parse(date1);
var endDate = Date.parse(date2);
if (startDate > endDate) {
return 0;
}
if (startDate == endDate) {
return 1;
}
var days = (endDate - startDate) / 86400000 + 1;
return days;
}
function getDaysBetween(date1, date2) {
var startDate = Date.parse(date1);
var endDate = Date.parse(date2);
if (startDate > endDate) {
return 0;
}
if (startDate == endDate) {
return 1;
}
var days = (endDate - startDate) / 86400000 + 1;
return days;
}
onMounted(function () {
allServerList().then((res) => {
state.servers = res;
// console.log(" server : ", state.servers);
});
onMounted(function () {
allServerList().then(res => {
state.servers = res;
// console.log(" server : ", state.servers);
})
allChannelList().then(res => {
state.channels = res;
});
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
};
return {
switchServer,
getRemain,
...toRefs(state),
};
},
allChannelList().then((res) => {
state.channels = res;
});
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
return {
switchServer,
getRemain,
...toRefs(state),
};
},
});
</script>

Loading…
Cancel
Save