桃源记客服系统前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

197 lines
6.7 KiB

<template>
<div class="game-account-container">
<el-card shadow="hover">
<div class="game-account-search mb15">
<el-form :inline="true">
<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="queryParams.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-select v-model="queryParams.type" class="m-2" placeholder="" size="large" style="width: 160px">
<el-option label="天数" :value="1"/>
<el-option label="村庄规模" :value="2"/>
<el-option label="小于一天的时间" :value="3"/>
</el-select>
<el-input v-model="queryParams.data" placeholder="请输入" style="width: 180px">
<template #prepend>
<el-select v-model="queryParams.compareType" class="m-2" placeholder="" size="default"
style="width: 60px">
<el-option v-for="item in compareType" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</template>
</el-input>
</el-form-item>
<el-form-item label="起始日期" prop="startTime">
<el-date-picker type="datetime" size="large" v-model="queryParams.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" size="large" v-model="queryParams.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="accountList">
<el-icon>
<ele-Search/>
</el-icon>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<div class="game-account-search mb15">
<el-form :inline="true">
<el-form-item label="" v-if="tableData.avgScale>0">
平均村庄规模{{ tableData.avgScale }}
</el-form-item>
<el-form-item label="" v-if="tableData.avgDay>0">
平均天数{{ tableData.avgDay }}
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.data" style="width: 100%" stripe border>
<el-table-column type="index" label="序号" width="60"/>
<el-table-column prop="stringId" label="id" show-overflow-tooltip></el-table-column>
<el-table-column prop="account" label="账号" show-overflow-tooltip></el-table-column>
<el-table-column prop="villagerNum" label="人数" show-overflow-tooltip></el-table-column>
<el-table-column prop="scale" label="村庄规模" show-overflow-tooltip></el-table-column>
<el-table-column prop="day" label="天数" show-overflow-tooltip></el-table-column>
<el-table-column v-if="queryParams.type==3" prop="game_time" label="时间" show-overflow-tooltip/>
</el-table>
<el-row justify="space-evenly">
<el-pagination :hide-on-single-page="true" :total="tableData.total" v-model:page-size="queryParams.pageSize"
v-model:current-page="queryParams.pageNum" @current-change="accountList"/>
</el-row>
</el-card>
</div>
</template>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent} from 'vue';
import {gameSearchAccount} from "/@/api/game/mange";
import {ElMessage} from "element-plus";
import {allServerList, ServerCategorize} from "/@/utils/game";
import {gSwitchServer} from "/@/utils/utils";
// 定义接口来定义对象的类型
interface TableData {
StringId: string;
PeopleNum: number;
Scale: number;
Day: number;
}
interface TableDataState {
serverSwitch: number;
queryParams: {
type: number,
data: number,
// day: number;
// scale: number;
compareType: number;
pageSize: number;
pageNum: number;
serverId: number;
startTime: number;
endTime: number;
};
tableData: {
data: Array<TableData>;
total: number;
avgScale: number;
avgDay: number;
};
servers: object[];
compareType: Array<{ label: string, value: number }>
serverCategorize: object[];
}
export default defineComponent({
name: 'apiV1GameRoleSearchAccount',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
queryParams: {
data: 0,
type: 1,
// day: 0,
// time: 0,
// scale: 0,
compareType: 1,
pageSize: 10,
pageNum: 1,
serverId: "",
startTime: 0,
endTime: 0,
},
tableData: {
data: [],
total: 0,
avgScale: 0,
avgDay: 0
},
servers: [],
compareType: [
{value: 1, label: '=',},
{value: 2, label: '<=',},
{value: 3, label: '<',},
{value: 4, label: '>',},
{value: 5, label: '>=',}
],
serverCategorize: ServerCategorize,
});
const accountList = () => {
console.log(state.queryParams);
gameSearchAccount(state.queryParams).then(res => {
if (!res.data.accounts || res.data.accounts.length == 0) {
state.tableData.data = [];
state.tableData.total = 0;
ElMessage.error('未查询到用户信息!');
return;
}
console.log(res);
const list = res.data.accounts ?? [];
state.tableData.total = res.data.total;
state.tableData.data = list;
state.tableData.avgScale = res.data.avgScale;
state.tableData.avgDay = res.data.avgDay;
})
};
// 页面加载时
onMounted(() => {
allServerList().then(res => {
state.servers = res;
})
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
};
return {
switchServer,
accountList,
...toRefs(state),
};
},
});
</script>
<style scoped lang="scss">
.el-form-item {
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;
}
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td {
background: inherit;
}
</style>