17 changed files with 1364 additions and 450 deletions
Before Width: | Height: | Size: 364 KiB After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,165 @@
|
||||
<template> |
||||
<div class="system-role-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="system-user-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="起始时间" prop="lowTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.lowTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="终止时间" prop="time"> |
||||
<el-date-picker type="datetime" v-model="tableData.param.upTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form-item label="状态"> |
||||
<el-select size="default" placeholder="请选择状态" class="w-50 m-2" v-model="tableData.param.state" clearable> |
||||
<el-option label="全部" value="0" /> |
||||
<el-option label="未处理" value="1" /> |
||||
<el-option label="已处理" value="2" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="bugList"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
查询 |
||||
</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="桃谷id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="server" label="区服" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="qq" label="qq号" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="tel" label="联系电话" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="bug" label="问题描述" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="occurrenceTime" label="发生时间" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="state" label="状态" show-overflow-tooltip></el-table-column> |
||||
<el-table-column label="操作" width="100"> |
||||
<template #default="scope"> |
||||
<el-button size="small" type="text" v-if="scope.state===1" @click="onOperate(scope.row.id)">处理</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<pagination |
||||
v-show="tableData.total>0" |
||||
:total="tableData.total" |
||||
v-model:page="tableData.param.pageNum" |
||||
v-model:limit="tableData.param.pageSize" |
||||
@pagination="bugList" |
||||
/> |
||||
</el-card> |
||||
|
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent} from 'vue'; |
||||
import {gameBugList, gameOperateBug} from "/@/api/game/index"; |
||||
import {ElMessage} from "element-plus/es"; |
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
id:number; |
||||
uid:number; |
||||
server: number; |
||||
qq: string; |
||||
tel: string; |
||||
bug: string; |
||||
occurrenceTime:string; |
||||
createTime: string; |
||||
state:number |
||||
} |
||||
interface TableDataState { |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: number; |
||||
loading: boolean; |
||||
param: { |
||||
lowTime:number; |
||||
upTime:number; |
||||
state:number; |
||||
pageNum: number; |
||||
pageSize: number; |
||||
}; |
||||
}; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1SystemRoleList', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
loading: false, |
||||
param: { |
||||
lowTime:0, |
||||
upTime:0, |
||||
state: 0, |
||||
pageNum:1, |
||||
pageSize:10 |
||||
|
||||
}, |
||||
}, |
||||
}); |
||||
// 初始化表格数据 |
||||
const initTableData = () => { |
||||
bugList() |
||||
}; |
||||
const bugList = ()=>{ |
||||
const data: Array<TableData> = []; |
||||
gameBugList(state.tableData.param).then(res=>{ |
||||
const list = res.data.list??[] |
||||
list.map((item:TableData)=>{ |
||||
data.push({ |
||||
id:item.id, |
||||
uid:item.uid, |
||||
server:item.server, |
||||
qq:item.qq, |
||||
tel:item.tel, |
||||
bug:item.bug, |
||||
occurrenceTime:item.occurrenceTime, |
||||
state:item.state, |
||||
createTime:item.createTime |
||||
|
||||
}); |
||||
}) |
||||
state.tableData.data = data; |
||||
state.tableData.total = res.data.total; |
||||
}) |
||||
}; |
||||
|
||||
const onOperate = (uid:number) => { |
||||
gameOperateBug({"uid":uid}).then(()=>{ |
||||
ElMessage.success('操作成功'); |
||||
}).finally(()=>{ |
||||
// state.loading = false; |
||||
}) |
||||
}; |
||||
|
||||
|
||||
// 分页改变 |
||||
const onHandleSizeChange = (val: number) => { |
||||
state.tableData.param.pageSize = val; |
||||
}; |
||||
// 分页改变 |
||||
const onHandleCurrentChange = (val: number) => { |
||||
state.tableData.param.pageNum = val; |
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
initTableData(); |
||||
}); |
||||
return { |
||||
onOperate, |
||||
onHandleSizeChange, |
||||
onHandleCurrentChange, |
||||
bugList, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -1,264 +0,0 @@
|
||||
<template> |
||||
<div class="system-edit-role-container"> |
||||
<el-dialog :title="(formData.id===0?'添加':'修改')+'角色'" v-model="isShowDialog" width="769px"> |
||||
<el-form ref="formRef" :model="formData" :rules="rules" size="default" label-width="90px"> |
||||
<el-row :gutter="35"> |
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> |
||||
<el-form-item label="角色名称" prop="name"> |
||||
<el-input v-model="formData.name" placeholder="请输入角色名称" clearable></el-input> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> |
||||
<el-form-item label="排序"> |
||||
<el-input-number v-model="formData.listOrder" :min="0" controls-position="right" placeholder="请输入排序" class="w100" /> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> |
||||
<el-form-item label="角色状态"> |
||||
<el-switch v-model="formData.status" :active-value="1" :inactive-value="0" inline-prompt active-text="启" inactive-text="禁"></el-switch> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
||||
<el-form-item label="角色描述"> |
||||
<el-input v-model="formData.remark" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
||||
<el-form-item label="菜单权限"> |
||||
<el-row :gutter="35"> |
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> |
||||
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event)">展开/折叠</el-checkbox> |
||||
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox> |
||||
<el-checkbox v-model="menuCheckStrictly" @change="handleCheckedTreeConnect($event)">父子联动</el-checkbox> |
||||
</el-col> |
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
||||
<el-tree |
||||
:data="menuData" |
||||
ref="menuRef" |
||||
:props="menuProps" |
||||
:default-checked-keys="formData.menuIds" |
||||
node-key="id" |
||||
show-checkbox class="menu-data-tree tree-border" |
||||
:check-strictly="!menuCheckStrictly"/> |
||||
</el-col> |
||||
</el-row> |
||||
</el-form-item> |
||||
</el-col> |
||||
</el-row> |
||||
</el-form> |
||||
<template #footer> |
||||
<span class="dialog-footer"> |
||||
<el-button @click="onCancel" size="default">取 消</el-button> |
||||
<el-button type="primary" @click="onSubmit" size="default" :loading="loading">{{formData.id===0?'新 增':'修 改'}}</el-button> |
||||
</span> |
||||
</template> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import { reactive, toRefs, defineComponent,ref,getCurrentInstance,unref } from 'vue'; |
||||
import {addRole, editRole, getRole, getRoleParams} from "/@/api/system/role"; |
||||
import {ElMessage} from "element-plus"; |
||||
import {getBackEndControlRoutes} from "/@/router/backEnd"; |
||||
|
||||
|
||||
// 定义接口来定义对象的类型 |
||||
interface MenuDataTree { |
||||
id: number; |
||||
pid:number; |
||||
title: string; |
||||
children?: MenuDataTree[]; |
||||
} |
||||
interface DialogRow { |
||||
id:number; |
||||
name: string; |
||||
status: number; |
||||
listOrder: number; |
||||
remark: string; |
||||
menuIds:Array<number> |
||||
} |
||||
interface RoleState { |
||||
loading:boolean; |
||||
isShowDialog: boolean; |
||||
formData: DialogRow; |
||||
menuData: Array<MenuDataTree>; |
||||
menuExpand:boolean; |
||||
menuNodeAll:boolean; |
||||
menuCheckStrictly:boolean; |
||||
menuProps: { |
||||
children: string; |
||||
label: string; |
||||
}; |
||||
rules: object; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'systemEditRole', |
||||
setup(props,{emit}) { |
||||
const {proxy} = getCurrentInstance() as any; |
||||
const formRef = ref<HTMLElement | null>(null); |
||||
const menuRef = ref(); |
||||
const state = reactive<RoleState>({ |
||||
loading:false, |
||||
isShowDialog: false, |
||||
formData: { |
||||
id:0, |
||||
name: '', |
||||
status: 1, |
||||
listOrder: 0, |
||||
remark: '', |
||||
menuIds:[] |
||||
}, |
||||
// 表单校验 |
||||
rules: { |
||||
name:[ |
||||
{required: true, message: "角色名称不能为空", trigger: "blur"}, |
||||
] |
||||
}, |
||||
menuData: [], |
||||
menuExpand:false, |
||||
menuNodeAll:false, |
||||
menuCheckStrictly:false, |
||||
menuProps: { |
||||
children: 'children', |
||||
label: 'title', |
||||
}, |
||||
}); |
||||
// 打开弹窗 |
||||
const openDialog = (row?: DialogRow) => { |
||||
resetForm(); |
||||
getMenuData(); |
||||
if(row) { |
||||
getRole(row.id).then((res:any)=>{ |
||||
if(res.data.role){ |
||||
state.formData = res.data.role; |
||||
state.formData.menuIds = res.data.menuIds??[] |
||||
} |
||||
}) |
||||
} |
||||
state.isShowDialog = true; |
||||
}; |
||||
// 关闭弹窗 |
||||
const closeDialog = () => { |
||||
state.isShowDialog = false; |
||||
}; |
||||
// 取消 |
||||
const onCancel = () => { |
||||
closeDialog(); |
||||
}; |
||||
// 新增 |
||||
const onSubmit = () => { |
||||
const formWrap = unref(formRef) as any; |
||||
if (!formWrap) return; |
||||
formWrap.validate((valid: boolean) => { |
||||
if (valid) { |
||||
state.loading = true; |
||||
state.formData.menuIds = getMenuAllCheckedKeys(); |
||||
if(state.formData.id===0){ |
||||
//添加 |
||||
addRole(state.formData).then(()=>{ |
||||
ElMessage.success('角色添加成功'); |
||||
closeDialog(); // 关闭弹窗 |
||||
resetMenuSession() |
||||
emit('getRoleList') |
||||
}).finally(()=>{ |
||||
state.loading = false; |
||||
}) |
||||
}else{ |
||||
//修改 |
||||
editRole(state.formData).then(()=>{ |
||||
ElMessage.success('角色修改成功'); |
||||
closeDialog(); // 关闭弹窗 |
||||
resetMenuSession() |
||||
emit('getRoleList') |
||||
}).finally(()=>{ |
||||
state.loading = false; |
||||
}) |
||||
} |
||||
} |
||||
}); |
||||
}; |
||||
// 获取菜单结构数据 |
||||
const getMenuData = () => { |
||||
getRoleParams().then((res:any)=>{ |
||||
state.menuData = proxy.handleTree(res.data.menu, "id","pid"); |
||||
}) |
||||
}; |
||||
const resetForm = ()=>{ |
||||
state.menuCheckStrictly=false; |
||||
state.menuExpand = false; |
||||
state.menuNodeAll = false; |
||||
state.formData = { |
||||
id:0, |
||||
name: '', |
||||
status: 1, |
||||
listOrder: 0, |
||||
remark: '', |
||||
menuIds:[] |
||||
} |
||||
}; |
||||
/** 树权限(展开/折叠)*/ |
||||
const handleCheckedTreeExpand = (value:any) => { |
||||
let treeList = state.menuData; |
||||
for (let i = 0; i < treeList.length; i++) { |
||||
menuRef.value.store.nodesMap[treeList[i].id].expanded = value; |
||||
} |
||||
} |
||||
|
||||
/** 树权限(全选/全不选) */ |
||||
const handleCheckedTreeNodeAll = (value:any) => { |
||||
menuRef.value.setCheckedNodes(value ? state.menuData : []); |
||||
} |
||||
|
||||
/** 树权限(父子联动) */ |
||||
const handleCheckedTreeConnect = (value:any) => { |
||||
state.menuCheckStrictly = value ? true : false; |
||||
} |
||||
|
||||
/** 所有菜单节点数据 */ |
||||
function getMenuAllCheckedKeys() { |
||||
// 目前被选中的菜单节点 |
||||
let checkedKeys = menuRef.value.getCheckedKeys(); |
||||
// 半选中的菜单节点 |
||||
let halfCheckedKeys = menuRef.value.getHalfCheckedKeys(); |
||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); |
||||
return checkedKeys; |
||||
} |
||||
|
||||
// 重置菜单session |
||||
const resetMenuSession = () => { |
||||
getBackEndControlRoutes(); |
||||
}; |
||||
return { |
||||
openDialog, |
||||
closeDialog, |
||||
onCancel, |
||||
onSubmit, |
||||
menuRef, |
||||
formRef, |
||||
handleCheckedTreeExpand, |
||||
handleCheckedTreeNodeAll, |
||||
handleCheckedTreeConnect, |
||||
resetMenuSession, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
||||
|
||||
<style scoped lang="scss"> |
||||
.tree-border { |
||||
margin-top: 5px; |
||||
border: 1px solid #e5e6e7!important; |
||||
background: #fff none!important; |
||||
border-radius: 4px; |
||||
} |
||||
.system-edit-role-container { |
||||
.menu-data-tree { |
||||
border: var(--el-input-border, var(--el-border-base)); |
||||
border-radius: var(--el-input-border-radius, var(--el-border-radius-base)); |
||||
padding: 5px; |
||||
} |
||||
} |
||||
</style> |
@ -0,0 +1,132 @@
|
||||
<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="tableData.param.srcServer" class="m-2" placeholder="选择区服" size="large"> |
||||
<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="转移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="tableData.param.destServer" class="m-2" placeholder="选择区服" size="large"> |
||||
<el-option v-for="item in servers" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</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 { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import {ServerList} from "/@/utils/game"; |
||||
import {gameAccountList} from "/@/api/game"; |
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
uid:number; |
||||
account:string; |
||||
name: string; |
||||
boom: number; |
||||
villageScale:number; |
||||
|
||||
} |
||||
interface TableDataState { |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
param: { |
||||
srcUid: number; |
||||
srcServer:string; |
||||
destUid:number; |
||||
destServer:string |
||||
} |
||||
}; |
||||
servers:object |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameAccountList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
data: [], |
||||
param:{ |
||||
srcUid:0, |
||||
srcServer:"", |
||||
destUid:0, |
||||
destServer:"" |
||||
}, |
||||
|
||||
}, |
||||
servers:ServerList |
||||
}); |
||||
// 初始化表格数据 |
||||
// const initTableData = () => { |
||||
// roleList() |
||||
// }; |
||||
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(() => { |
||||
// initTableData(); |
||||
}); |
||||
return { |
||||
roleList, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,156 @@
|
||||
<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="lowTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.lowTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="终止时间" prop="time"> |
||||
<el-date-picker type="datetime" v-model="tableData.param.upTime" 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 > |
||||
|
||||
<el-form :inline="true"> |
||||
<el-form-item label="注册数量:"> |
||||
<el-input v-model="tableData.registerNum" placeholder="" class="w-50 m-2" size="large" /> |
||||
</el-form-item> |
||||
<el-form-item label="充值人数:"> |
||||
<el-input v-model="tableData.depositNum" placeholder="" class="w-50 m-2" size="large" /> |
||||
</el-form-item> |
||||
<el-form-item label="充值总额:"> |
||||
<el-input v-model="tableData.sum" placeholder="" class="w-50 m-2" size="large" /> |
||||
</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="date" label="日期" width="180"></el-table-column> |
||||
<el-table-column prop="remainRate" label="留存" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="remainVal" label="留存人数" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="total" label="总人数" show-overflow-tooltip></el-table-column> |
||||
</el-table> |
||||
<pagination |
||||
v-show="tableData.total>0" |
||||
:total="tableData.total" |
||||
v-model:page="tableData.param.pageNum" |
||||
v-model:limit="tableData.param.pageSize" |
||||
@pagination="getRemain" |
||||
/> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import { gameRemain} from "/@/api/game/index"; |
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
date:number |
||||
remainRate:number |
||||
remainVal:number |
||||
total : number |
||||
} |
||||
interface TableDataState { |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
registerNum: number; |
||||
depositNum: number; |
||||
sum:number |
||||
param: { |
||||
lowTime:number; |
||||
upTime:number |
||||
}; |
||||
}; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1SystemRoleList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
data: [], |
||||
registerNum: 0, |
||||
depositNum: 0, |
||||
sum:0, |
||||
param: { |
||||
lowTime:0, |
||||
upTime:0 |
||||
}, |
||||
}, |
||||
}); |
||||
|
||||
|
||||
const getRemain = ()=>{ |
||||
const data: Array<TableData> = []; |
||||
gameRemain(state.tableData.param).then(res=>{ |
||||
const list = res.data.mails??[] |
||||
list.map((item:TableData)=>{ |
||||
data.push({ |
||||
date:item.date, |
||||
remainRate: item.remainRate, |
||||
remainVal: item.remainVal, |
||||
total: item.total, |
||||
}); |
||||
}) |
||||
state.tableData.data = data; |
||||
// state.tableData.total = res.data.total; |
||||
}) |
||||
}; |
||||
|
||||
// 删除角色 |
||||
// const onRowDel = (row: any) => { |
||||
// ElMessageBox.confirm(`此操作将永久删除角色:“${row.name}”,是否继续?`, '提示', { |
||||
// confirmButtonText: '确认', |
||||
// cancelButtonText: '取消', |
||||
// type: 'warning', |
||||
// }) |
||||
// .then(() => { |
||||
// deleteRole(row.id).then(()=>{ |
||||
// ElMessage.success('删除成功'); |
||||
// proxy.$refs['editRoleRef'].resetMenuSession(); |
||||
// roleList(); |
||||
// }) |
||||
// }) |
||||
// .catch(() => {}); |
||||
// }; |
||||
// // 分页改变 |
||||
// const onHandleSizeChange = (val: number) => { |
||||
// state.tableData.param.pageSize = val; |
||||
// }; |
||||
// // 分页改变 |
||||
// const onHandleCurrentChange = (val: number) => { |
||||
// state.tableData.param.pageNum = val; |
||||
// }; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
// initTableData(); |
||||
}); |
||||
return { |
||||
// addRoleRef, |
||||
// editRoleRef, |
||||
// onOpenAddRole, |
||||
// onOpenEditRole, |
||||
//onRowDel, |
||||
//onHandleSizeChange, |
||||
//onHandleCurrentChange, |
||||
getRemain, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,112 @@
|
||||
<template> |
||||
<div class="game-maintenance-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-order-search mb15" > |
||||
<el-form label-position="right" |
||||
:model="formLabelAlign" |
||||
> |
||||
|
||||
<el-form-item label="内容:"> |
||||
<el-input v-model="tableData.param.content" placeholder="" type="textarea" class="w-50 m-2" rows="5" clearable/> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="large" type="primary" class="ml10" @click="noticeMaintenance"> |
||||
登录公告发送 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
|
||||
</div> |
||||
|
||||
</el-card> |
||||
</div> |
||||
|
||||
|
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent, } from 'vue'; |
||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import {gameGetNoticeLogin, gameNoticeLogin} from "/@/api/game"; |
||||
|
||||
import {ElMessage} from "element-plus/es"; |
||||
|
||||
|
||||
interface TableDataState { |
||||
tableData: { |
||||
param: { |
||||
content:string |
||||
status:number |
||||
noticeType:number |
||||
channel:number |
||||
id:number |
||||
}; |
||||
|
||||
}; |
||||
|
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameOrderOrderList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
param: { |
||||
status: 0, |
||||
content: "", |
||||
noticeType:2, |
||||
channel:0, |
||||
id:0, |
||||
}, |
||||
} |
||||
|
||||
}); |
||||
const noticeMaintenance=()=>{ |
||||
gameNoticeLogin(state.tableData.param).then(()=>{ |
||||
ElMessage.success('发送成功'); |
||||
}).finally(()=>{ |
||||
// state.loading = false; |
||||
}) |
||||
} |
||||
|
||||
// 初始化表格数据 |
||||
const initTableData = () => { |
||||
getNotice() |
||||
}; |
||||
const getNotice=()=>{ |
||||
gameGetNoticeLogin(state.tableData.param).then((res:any)=>{ |
||||
state.tableData.param.content = res.data.content; |
||||
state.tableData.param.id = res.data.id; |
||||
|
||||
}); |
||||
}; |
||||
|
||||
|
||||
// function GetStateStr(s:number){ |
||||
// if (s==2){ |
||||
// return "成功" |
||||
// } |
||||
// return "失败(错误id="+s+")" |
||||
// } |
||||
|
||||
// // 分页改变 |
||||
// const onHandleSizeChange = (val: number) => { |
||||
// state.tableData.param.pageSize = val; |
||||
// }; |
||||
// // 分页改变 |
||||
// const onHandleCurrentChange = (val: number) => { |
||||
// state.tableData.param.pageNum = val; |
||||
// }; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
initTableData(); |
||||
}); |
||||
return { |
||||
noticeMaintenance, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,116 @@
|
||||
<template> |
||||
<div class="game-maintenance-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-order-search mb15" > |
||||
<el-form label-position="right" |
||||
:model="formLabelAlign" |
||||
> |
||||
<el-form-item label="选择渠道" prop="serverId"> |
||||
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道" size="large"> |
||||
<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="服务器状态:"> |
||||
<el-radio-group v-model="tableData.param.status"> |
||||
<el-radio :label=1>正常</el-radio> |
||||
<el-radio :label=2>白名单</el-radio> |
||||
<el-radio :label=0>维护</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
<el-form-item label="内容:"> |
||||
<el-input v-model="tableData.param.content" placeholder="" type="textarea" class="w-50 m-2" rows="5" clearable/> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="large" type="primary" class="ml10" @click="noticeMaintenance"> |
||||
发送公告 |
||||
</el-button> |
||||
<el-button size="large" type="primary" class="ml10" @click="getNotice"> |
||||
查询公告 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
|
||||
</div> |
||||
|
||||
</el-card> |
||||
</div> |
||||
|
||||
|
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent, } from 'vue'; |
||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import {gameGetNoticeMaintenance, gameNoticeMaintenance} from "/@/api/game"; |
||||
import {AllChannelList} from "/@/utils/game" |
||||
|
||||
import {ElMessage} from "element-plus/es"; |
||||
|
||||
|
||||
interface TableDataState { |
||||
tableData: { |
||||
param: { |
||||
content:string |
||||
status:number |
||||
noticeType:number |
||||
channel:string |
||||
id:number |
||||
}; |
||||
|
||||
|
||||
}; |
||||
channels:object |
||||
|
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameOrderOrderList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
param: { |
||||
status: 0, |
||||
content: "", |
||||
noticeType:1, |
||||
channel:"0", |
||||
id:0 |
||||
}, |
||||
}, |
||||
channels:AllChannelList |
||||
|
||||
}); |
||||
const noticeMaintenance=()=>{ |
||||
gameNoticeMaintenance(state.tableData.param).then(()=>{ |
||||
ElMessage.success('发送成功'); |
||||
}).finally(()=>{ |
||||
// state.loading = false; |
||||
}) |
||||
} |
||||
|
||||
// 初始化表格数据 |
||||
const initTableData = () => { |
||||
getNotice() |
||||
}; |
||||
const getNotice=()=>{ |
||||
gameGetNoticeMaintenance(state.tableData.param).then((res:any)=>{ |
||||
state.tableData.param.status = res.data.status; |
||||
state.tableData.param.content = res.data.content; |
||||
state.tableData.param.id = res.data.id; |
||||
|
||||
}); |
||||
}; |
||||
|
||||
|
||||
onMounted(() => { |
||||
initTableData(); |
||||
}); |
||||
return { |
||||
getNotice, |
||||
noticeMaintenance, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,108 @@
|
||||
<template> |
||||
<div class="game-maintenance-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-order-search mb15" > |
||||
<el-form label-position="right" |
||||
:model="formLabelAlign" |
||||
> |
||||
|
||||
<el-form-item label="类型:"> |
||||
<el-radio-group v-model="tableData.param.popType"> |
||||
<el-radio :label=1>强制退出</el-radio> |
||||
<el-radio :label=0>普通弹窗</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
<el-form-item label="uids:"> |
||||
<el-input v-model="tableData.param.uids" placeholder="" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="内容:"> |
||||
<el-input v-model="tableData.param.content" placeholder="" type="textarea" class="w-50 m-2" rows="5" clearable/> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="large" type="primary" class="ml10" @click="noticePop"> |
||||
弹窗公告发送 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
|
||||
</div> |
||||
|
||||
</el-card> |
||||
</div> |
||||
|
||||
|
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent, } from 'vue'; |
||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import {gameNoticePop} from "/@/api/game"; |
||||
|
||||
import {ElMessage} from "element-plus/es"; |
||||
|
||||
|
||||
interface TableDataState { |
||||
tableData: { |
||||
param: { |
||||
content:string |
||||
timeType:number |
||||
popType:number |
||||
uids : string |
||||
}; |
||||
|
||||
}; |
||||
|
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameOrderOrderList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
param: { |
||||
content: "", |
||||
timeType: 0, |
||||
uids:"", |
||||
popType:0 |
||||
}, |
||||
} |
||||
|
||||
}); |
||||
const noticePop=()=>{ |
||||
gameNoticePop(state.tableData.param).then(()=>{ |
||||
ElMessage.success('发送成功'); |
||||
}).finally(()=>{ |
||||
// state.loading = false; |
||||
}) |
||||
} |
||||
|
||||
|
||||
|
||||
// function GetStateStr(s:number){ |
||||
// if (s==2){ |
||||
// return "成功" |
||||
// } |
||||
// return "失败(错误id="+s+")" |
||||
// } |
||||
|
||||
// // 分页改变 |
||||
// const onHandleSizeChange = (val: number) => { |
||||
// state.tableData.param.pageSize = val; |
||||
// }; |
||||
// // 分页改变 |
||||
// const onHandleCurrentChange = (val: number) => { |
||||
// state.tableData.param.pageNum = val; |
||||
// }; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
// initTableData(); |
||||
}); |
||||
return { |
||||
noticePop, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,210 @@
|
||||
<template> |
||||
<div class="game-order-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-order-search mb15"> |
||||
<el-form> |
||||
<el-form-item label="查询类型:" prop="type"> |
||||
<el-radio-group v-model="tableData.param.searchType"> |
||||
<el-radio :label=1>账号查询</el-radio> |
||||
<el-radio :label=2>桃谷uid查询</el-radio> |
||||
<el-radio :label=3>时间段查询</el-radio> |
||||
<el-radio :label=4>渠道订单号查询</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form :inline="true" v-if="tableData.param.searchType==1"> |
||||
<el-form-item label="账号"> |
||||
<el-input size="default" v-model="tableData.param.account" placeholder="请输入账号" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="选择渠道" prop="serverId"> |
||||
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道" size="large"> |
||||
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form :inline="true" v-if="tableData.param.searchType==2" > |
||||
<el-form-item label="桃谷uid" > |
||||
<el-input size="default" v-model="tableData.param.uid" placeholder="请输入桃谷UID" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="选择区服" prop="serverId"> |
||||
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择区服" size="large"> |
||||
<el-option v-for="item in servers" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form :inline="true" v-if="tableData.param.searchType==3"> |
||||
<el-form-item label="起始时间" prop="lowTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.lowTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="终止时间" prop="time"> |
||||
<el-date-picker type="datetime" v-model="tableData.param.uptime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form :inline="true" v-if="tableData.param.searchType==4"> |
||||
<el-form-item label="渠道订单id"> |
||||
<el-input size="default" v-model="tableData.param.orderId" placeholder="请输入渠道订单id" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
</el-form> |
||||
<el-form> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="roleList"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" style="width: 100%"> |
||||
<el-table-column type="index" label="id" width="60" /> |
||||
<el-table-column prop="uid" label="桃谷uid" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="server" label="区服" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="money" label="充值数额" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="timestampStr" label="充值时间" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="rechargeId" label="商品id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="orderId" label="订单id(渠道产生)" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="stateStr" label="订单状态" show-overflow-tooltip></el-table-column> |
||||
<!-- <el-table-column label="操作" width="100">--> |
||||
<!-- <template #default="scope">--> |
||||
<!-- <el-button size="small" type="text" @click="onOpenEditRole(scope.row)">修改名字</el-button>--> |
||||
<!-- <el-button size="small" type="text" @click="onRowDel(scope.row)">删除</el-button>--> |
||||
<!-- </template>--> |
||||
<!-- </el-table-column>--> |
||||
</el-table> |
||||
<pagination |
||||
v-show="tableData.total>0" |
||||
:total="tableData.total" |
||||
v-model:page="tableData.param.pageNum" |
||||
v-model:limit="tableData.param.pageSize" |
||||
@pagination="roleList" |
||||
/> |
||||
</el-card> |
||||
<EditRole ref="editRoleRef" @getRoleList="roleList"/> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent, } from 'vue'; |
||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||
import {gameOrderList} from "/@/api/game"; |
||||
import {ServerList} from "/@/utils/game"; |
||||
import {ChannelList} from "/@/utils/game"; |
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
id:string |
||||
uid:number; |
||||
server: number; |
||||
money: number; |
||||
timestamp: number; //订单时间 |
||||
rechargeId: number; |
||||
createTime:string; |
||||
orderId: string; |
||||
state:number; |
||||
stateStr:string; |
||||
timestampStr:string; |
||||
} |
||||
interface TableDataState { |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
param: { |
||||
searchType:number |
||||
id:string; |
||||
orderId:string |
||||
serverId:number |
||||
uid:number |
||||
account: string; |
||||
channel:string |
||||
lowTime:number |
||||
uptime:number |
||||
}; |
||||
|
||||
}; |
||||
servers:object; |
||||
channels:object; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameOrderOrderList', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
tableData: { |
||||
data: [], |
||||
param:{ |
||||
searchType:0, |
||||
id:"", |
||||
orderId:"", |
||||
serverId:0, |
||||
uid:0, |
||||
account:"", |
||||
channel:"", |
||||
lowTime:0, |
||||
uptime:0 |
||||
|
||||
}, |
||||
|
||||
}, |
||||
servers:ServerList, |
||||
channels:ChannelList, |
||||
}); |
||||
// 初始化表格数据 |
||||
// const initTableData = () => { |
||||
// roleList() |
||||
// }; |
||||
const roleList = ()=>{ |
||||
const data: Array<TableData> = []; |
||||
gameOrderList(state.tableData.param).then(res=>{ |
||||
const list = res.data.list??[] |
||||
list.map((item:TableData)=>{ |
||||
|
||||
data.push({ |
||||
id:item.id, |
||||
uid:item.uid, |
||||
server: item.server, |
||||
money: item.money, |
||||
timestamp: item.timestamp, |
||||
rechargeId: item.rechargeId, |
||||
createTime:new Date(item.createTime).toLocaleString(), |
||||
orderId:item.orderId, |
||||
state:item.state, |
||||
stateStr:GetStateStr(item.state), |
||||
timestampStr:new Date(item.timestamp*1000).toLocaleString() |
||||
}); |
||||
}) |
||||
state.tableData.data = data; |
||||
}) |
||||
}; |
||||
|
||||
function GetStateStr(s:number){ |
||||
if (s==2){ |
||||
return "成功" |
||||
} |
||||
return "失败(错误id="+s+")" |
||||
} |
||||
|
||||
// // 分页改变 |
||||
// const onHandleSizeChange = (val: number) => { |
||||
// state.tableData.param.pageSize = val; |
||||
// }; |
||||
// // 分页改变 |
||||
// const onHandleCurrentChange = (val: number) => { |
||||
// state.tableData.param.pageNum = val; |
||||
// }; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
// initTableData(); |
||||
}); |
||||
return { |
||||
|
||||
//onHandleSizeChange, |
||||
//onHandleCurrentChange, |
||||
roleList, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
Loading…
Reference in new issue