22 changed files with 2277 additions and 11 deletions
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 364 KiB |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,70 @@ |
|||||||
|
import request from '/@/utils/request'; |
||||||
|
|
||||||
|
/** |
||||||
|
* 登录api接口集合 |
||||||
|
* @method signIn 用户登录 |
||||||
|
*/ |
||||||
|
export function gameRoleList(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/basicinfo/rolelist', |
||||||
|
method: 'get', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameMailList(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/mail/list', |
||||||
|
method: 'get', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameMailSend(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/mail/send', |
||||||
|
method: 'post', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameOrderList(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/order/list', |
||||||
|
method: 'get', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameOnlineList(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/basicinfo/online', |
||||||
|
method: 'get', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameAccountList(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/basicinfo/account', |
||||||
|
method: 'get', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameAddCoin(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/order/addcoin', |
||||||
|
method: 'post', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function gameDeposit(params: object){ |
||||||
|
return request({ |
||||||
|
url: '/api/v1/game/order/deposit', |
||||||
|
method: 'post', |
||||||
|
params: params, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
After Width: | Height: | Size: 364 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
@ -0,0 +1,122 @@ |
|||||||
|
|
||||||
|
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: '十六区:桃源先遣服', |
||||||
|
}, |
||||||
|
] |
||||||
|
|
||||||
|
export const ChannelList=[ |
||||||
|
{ |
||||||
|
value: '26337', |
||||||
|
label: '淘金互动', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '2258', |
||||||
|
label: '好游快爆', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '24', |
||||||
|
label: '华为', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '23', |
||||||
|
label: 'oppo', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '15', |
||||||
|
label: '小米', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '17', |
||||||
|
label: 'VIVO', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '27', |
||||||
|
label: '4399盒子', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '9', |
||||||
|
label: '九游', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '114', |
||||||
|
label: 'B站', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '1319', |
||||||
|
label: '233平台', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '1003', |
||||||
|
label: '雷电模拟器', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '26404', |
||||||
|
label: '淘金互动-先行服', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: '26396', |
||||||
|
label: 'B站先遣服', |
||||||
|
}, |
||||||
|
] |
@ -0,0 +1,264 @@ |
|||||||
|
<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,198 @@ |
|||||||
|
<template> |
||||||
|
<div class="system-role-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="system-user-search mb15"> |
||||||
|
<el-form :inline="true"> |
||||||
|
<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="区服"> |
||||||
|
<el-input size="default" v-model="tableData.param.serverId" placeholder="请输入区服" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item> |
||||||
|
<el-button size="default" type="primary" class="ml10" @click="mailList"> |
||||||
|
<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="id" label="邮件ID" show-overflow-tooltip></el-table-column>--> |
||||||
|
<el-table-column prop="c_date" label="创建时间" width="180"></el-table-column> |
||||||
|
<el-table-column prop="to" label="发送对象" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="gmName" label="发送者" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="type" label="邮件类型" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="expired" label="过期时间" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="time" label="生效时间" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="newGet" label="新玩家是否可领" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="repeatedCollection" label="是否可以重复领" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="content" label="内容" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="drops" label="赠送物品" ></el-table-column> |
||||||
|
<el-table-column prop="remark" label="发送理由" ></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="mailList" |
||||||
|
/> |
||||||
|
</el-card> |
||||||
|
<EditRole ref="editRoleRef" @getMailList="mailList"/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
||||||
|
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
|
import EditRole from '/@/views/system/role/component/editRole.vue'; |
||||||
|
import { gameMailList} from "/@/api/game/index"; |
||||||
|
// 定义接口来定义对象的类型 |
||||||
|
interface TableData { |
||||||
|
id:string; |
||||||
|
c_date: string; |
||||||
|
to: string; |
||||||
|
from: string; |
||||||
|
gmName: string; |
||||||
|
type:string |
||||||
|
expired:string |
||||||
|
time:string |
||||||
|
newGet:string |
||||||
|
repeatedCollection:string |
||||||
|
title:string |
||||||
|
content:string |
||||||
|
drops:string |
||||||
|
remark:string |
||||||
|
|
||||||
|
} |
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
data: Array<TableData>; |
||||||
|
total: number; |
||||||
|
loading: boolean; |
||||||
|
param: { |
||||||
|
uid:string; |
||||||
|
serverId:string |
||||||
|
lowTime:number; |
||||||
|
UpperTime: number; |
||||||
|
}; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1SystemRoleList', |
||||||
|
components: {EditRole}, |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
|
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
data: [], |
||||||
|
total: 0, |
||||||
|
loading: false, |
||||||
|
param: { |
||||||
|
uid:'', |
||||||
|
serverId:"", |
||||||
|
lowTime:0, |
||||||
|
UpperTime: 0, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
||||||
|
// 初始化表格数据 |
||||||
|
// const initTableData = () => { |
||||||
|
// roleList() |
||||||
|
// }; |
||||||
|
function getMailType(t:string){ |
||||||
|
if (t==="1"){ |
||||||
|
return "活动" |
||||||
|
}else if(t==="2"){ |
||||||
|
return "奖励" |
||||||
|
}else if(t==="3"){ |
||||||
|
return "公告" |
||||||
|
} |
||||||
|
return "" |
||||||
|
} |
||||||
|
|
||||||
|
const mailList = ()=>{ |
||||||
|
const data: Array<TableData> = []; |
||||||
|
gameMailList(state.tableData.param).then(res=>{ |
||||||
|
const list = res.data.mails??[] |
||||||
|
list.map((item:TableData)=>{ |
||||||
|
data.push({ |
||||||
|
id:item.id, |
||||||
|
c_date: new Date(item.c_date).toLocaleString(), |
||||||
|
to: item.to, |
||||||
|
from: item.from, |
||||||
|
gmName: item.gmName, |
||||||
|
type:getMailType(item.type), |
||||||
|
expired: new Date(item.expired).toLocaleString() , |
||||||
|
time: new Date(item.time).toLocaleString(), |
||||||
|
newGet: item.newGet, |
||||||
|
repeatedCollection:item.repeatedCollection, |
||||||
|
title: item.title, |
||||||
|
content: item.content, |
||||||
|
drops:item.drops, |
||||||
|
remark: item.remark, |
||||||
|
}); |
||||||
|
}) |
||||||
|
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, |
||||||
|
mailList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,218 @@ |
|||||||
|
<template> |
||||||
|
<div class="system-edit-post-container"> |
||||||
|
|
||||||
|
<el-form ref="formRef" :model="mailData" :rules="rules" size="default" label-width="90px"> |
||||||
|
<el-form-item label="邮件类型" prop="type"> |
||||||
|
<el-radio-group v-model="mailData.type"> |
||||||
|
<el-radio :label="1">奖励</el-radio> |
||||||
|
<el-radio :label="2">活动</el-radio> |
||||||
|
<el-radio :label="3">公告</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="重复类型" prop="type"> |
||||||
|
<el-radio-group v-model="mailData.repeatedCollection"> |
||||||
|
<el-radio :label="0">重启重新领取</el-radio> |
||||||
|
<el-radio :label="1">只能领取一次</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="新账号领取" prop="newGet"> |
||||||
|
<el-radio-group v-model="mailData.newGet"> |
||||||
|
<el-radio :label="0">新账号可领取</el-radio> |
||||||
|
<el-radio :label="1">新账号不能领取</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="标题" prop="title" > |
||||||
|
<el-input v-model="mailData.title" placeholder="请输入邮件标题" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="发件人署名" prop="from"> |
||||||
|
<el-input v-model="mailData.from" placeholder="请输入发件人署名" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="发送区服" prop="serverId"> |
||||||
|
<el-select v-model="mailData.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-item label="收件人UID" prop="to"> |
||||||
|
<el-input v-model="mailData.to" placeholder="请输入发件人UID,全服填0,多人格式uid;uid" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="内容" prop="content"> |
||||||
|
<el-input v-model="mailData.content" type="textarea" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="奖励(不能用中文标点)" prop="content"> |
||||||
|
<el-input v-model="mailData.drops" type="textarea" placeholder="格式: id:num,id:num"/> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="过期时间" prop="expired"> |
||||||
|
<el-date-picker type="datetime" size="large" v-model="mailData.expired" placeholder="默认10天后过期删除" 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="mailData.time" placeholder="默认立即生效" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<el-input v-model="mailData.remark" type="textarea" placeholder="请输入内容" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button size="default" type="primary" class="ml10" @click="onSubmit"> |
||||||
|
发送邮件 |
||||||
|
</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
import { reactive, toRefs, defineComponent,ref,unref } from 'vue'; |
||||||
|
import {ElMessage} from "element-plus"; |
||||||
|
import { gameMailSend } from '/@/api/game'; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import { Session } from '/@/utils/storage'; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
interface MailData{ |
||||||
|
serverId:string |
||||||
|
to:string |
||||||
|
gmName:string |
||||||
|
type:string |
||||||
|
time:number |
||||||
|
expired:number |
||||||
|
newGet:string |
||||||
|
repeatedCollection:number |
||||||
|
title:string |
||||||
|
content:string |
||||||
|
drops:string |
||||||
|
remark:string |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
interface TableDataState{ |
||||||
|
mailData:MailData; |
||||||
|
rules: object; |
||||||
|
servers:object; |
||||||
|
} |
||||||
|
export default defineComponent({ |
||||||
|
name: 'systemEditPost', |
||||||
|
setup() { |
||||||
|
const formRef = ref<HTMLElement | null>(null); |
||||||
|
const menuRef = ref(); |
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
mailData: { |
||||||
|
serverId:"", |
||||||
|
to:"", |
||||||
|
gmName:Session.get("userInfo").userName, |
||||||
|
type:"", |
||||||
|
time:0, |
||||||
|
expired:0, |
||||||
|
newGet:"", |
||||||
|
repeatedCollection:0, |
||||||
|
title:"", |
||||||
|
content:"", |
||||||
|
drops:"", |
||||||
|
remark:"" |
||||||
|
}, |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
serverId: [ |
||||||
|
{ required: true, message: "区服不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
type: [ |
||||||
|
{ required: true, message: "邮件类型不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
repeatedCollection: [ |
||||||
|
{ required: true, message: "重复领取类型不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
newGet: [ |
||||||
|
{ required: true, message: "新手领取类型不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
title: [ |
||||||
|
{ required: true, message: "标题不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
remark: [ |
||||||
|
{ required: true, message: "备注不能为空", trigger: "blur" } |
||||||
|
], |
||||||
|
drops:[ |
||||||
|
{pattern: /^[0-9:,]+$/,message: "只能0-9,:", trigger: "blur" } |
||||||
|
], |
||||||
|
}, |
||||||
|
servers:ServerList |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
// 新增 |
||||||
|
const onSubmit = () => { |
||||||
|
const formWrap = unref(formRef) as any; |
||||||
|
if (!formWrap) return; |
||||||
|
formWrap.validate((valid: boolean) => { |
||||||
|
if (valid) { |
||||||
|
//添加 |
||||||
|
if(state.mailData.drops.length>0){ |
||||||
|
if (state.mailData.drops.includes(":")||state.mailData.drops.includes(",")){ |
||||||
|
ElMessage.error('奖励不能包含中文标点'); |
||||||
|
return |
||||||
|
} |
||||||
|
var ss=state.mailData.drops.split(",") |
||||||
|
for(var i=0;i<ss.length;i++){ |
||||||
|
var drop=ss[i].split(":") |
||||||
|
if (drop.length!=2){ |
||||||
|
ElMessage.error('奖励格式不对'); |
||||||
|
return |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
gameMailSend(state.mailData).then(()=>{ |
||||||
|
ElMessage.success('邮件发送成功'); |
||||||
|
}).finally(()=>{ |
||||||
|
// state.loading = false; |
||||||
|
}) |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
// const resetForm = ()=>{ |
||||||
|
// |
||||||
|
// state.mailData = { |
||||||
|
// to:"", |
||||||
|
// gaName:"", |
||||||
|
// type:"", |
||||||
|
// time:0, |
||||||
|
// expired:0, |
||||||
|
// newGet:"", |
||||||
|
// repeatedCollection:0, |
||||||
|
// title:"", |
||||||
|
// content:"", |
||||||
|
// drops:"", |
||||||
|
// remark:"" |
||||||
|
// } |
||||||
|
// }; |
||||||
|
|
||||||
|
return { |
||||||
|
onSubmit, |
||||||
|
menuRef, |
||||||
|
formRef, |
||||||
|
...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-post-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,177 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-order-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15" > |
||||||
|
<el-form label-position="right" label-width="300px" |
||||||
|
:model="formLabelAlign" |
||||||
|
style="max-width: 520px"> |
||||||
|
<el-form-item label="UID"> |
||||||
|
<el-input v-model="tableData.param.uid" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="修改金额(差值)"> |
||||||
|
<el-input v-model="tableData.param.amount" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="选择货币类型" > |
||||||
|
<el-select v-model="tableData.param.amountType" class="w-50 m-2" placeholder="选择渠道" size="large"> |
||||||
|
<el-option v-for="item in amountTypes" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button size="large" type="primary" class="ml10" @click="changeGameCoin"> |
||||||
|
修改游戏币 |
||||||
|
</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
<div class="game-order-container" > |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15"> |
||||||
|
|
||||||
|
<el-form label-position="right" label-width="300px" |
||||||
|
:model="formLabelAlign" |
||||||
|
style="max-width: 520px"> |
||||||
|
|
||||||
|
<el-form-item label="账号"> |
||||||
|
<el-input size="large" v-model="tableData.param.uid" placeholder="" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="充值ID" > |
||||||
|
<el-select v-model="tableData.paramDeposit.depositId" class="w-50 m-2" placeholder="" size="large"> |
||||||
|
<el-option v-for="item in depositIds" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="选择区服" prop="serverId"> |
||||||
|
<el-select v-model="tableData.paramDeposit.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-item> |
||||||
|
<el-button size="large" 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 { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
|
import {gameAddCoin, gameDeposit} from "/@/api/game"; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import {ElMessage} from "element-plus/es"; |
||||||
|
|
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
param: { |
||||||
|
uid:number |
||||||
|
amount:number |
||||||
|
amountType:number |
||||||
|
}; |
||||||
|
paramDeposit:{ |
||||||
|
account:string |
||||||
|
depositId:number |
||||||
|
serverId:number |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
servers:object; |
||||||
|
amountTypes:object |
||||||
|
depositIds:object |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1GameOrderOrderList', |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
|
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
param:{ |
||||||
|
uid:0, |
||||||
|
amount:0, |
||||||
|
amountType:0 |
||||||
|
}, |
||||||
|
paramDeposit:{ |
||||||
|
account:"", |
||||||
|
depositId:0, |
||||||
|
serverId:0 |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
servers:ServerList, |
||||||
|
amountTypes:[ |
||||||
|
{ |
||||||
|
value: 1, |
||||||
|
label: '金币', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 2, |
||||||
|
label: '铜币', |
||||||
|
}, |
||||||
|
], |
||||||
|
depositIds:[ |
||||||
|
{ |
||||||
|
value: 1001, |
||||||
|
label: '6块充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1002, |
||||||
|
label: '30充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1003, |
||||||
|
label: '68充值', |
||||||
|
}, |
||||||
|
] |
||||||
|
}); |
||||||
|
const changeGameCoin=()=>{ |
||||||
|
gameAddCoin(state.tableData.param).then(()=>{ |
||||||
|
ElMessage.success('赠送金币成功'); |
||||||
|
}).finally(()=>{ |
||||||
|
// state.loading = false; |
||||||
|
}) |
||||||
|
} |
||||||
|
const deposit=()=>{ |
||||||
|
gameDeposit(state.tableData.paramDeposit).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 { |
||||||
|
changeGameCoin, |
||||||
|
deposit, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,148 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-resetpwd-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15" > |
||||||
|
<el-form label-position="right" label-width="300px" |
||||||
|
:model="formLabelAlign" |
||||||
|
style="max-width: 520px"> |
||||||
|
<el-form-item label="UID"> |
||||||
|
<el-input v-model="tableData.param.uid" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="修改金额(差值)"> |
||||||
|
<el-input v-model="tableData.param.amount" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="选择货币类型" > |
||||||
|
<el-select v-model="tableData.param.amountType" class="w-50 m-2" placeholder="选择渠道" size="large"> |
||||||
|
<el-option v-for="item in amountTypes" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button size="large" type="primary" class="ml10" @click="changeGameCoin"> |
||||||
|
修改游戏币 |
||||||
|
</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 {gameAddCoin, gameDeposit} from "/@/api/game"; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import {ElMessage} from "element-plus/es"; |
||||||
|
|
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
param: { |
||||||
|
uid:number |
||||||
|
amount:number |
||||||
|
amountType:number |
||||||
|
}; |
||||||
|
paramDeposit:{ |
||||||
|
account:string |
||||||
|
depositId:number |
||||||
|
serverId:number |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
servers:object; |
||||||
|
amountTypes:object |
||||||
|
depositIds:object |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1GameOrderOrderList', |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
|
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
param:{ |
||||||
|
uid:0, |
||||||
|
amount:0, |
||||||
|
amountType:0 |
||||||
|
}, |
||||||
|
paramDeposit:{ |
||||||
|
account:"", |
||||||
|
depositId:0, |
||||||
|
serverId:0 |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
servers:ServerList, |
||||||
|
amountTypes:[ |
||||||
|
{ |
||||||
|
value: 1, |
||||||
|
label: '金币', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 2, |
||||||
|
label: '铜币', |
||||||
|
}, |
||||||
|
], |
||||||
|
depositIds:[ |
||||||
|
{ |
||||||
|
value: 1001, |
||||||
|
label: '6块充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1002, |
||||||
|
label: '30充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1003, |
||||||
|
label: '68充值', |
||||||
|
}, |
||||||
|
] |
||||||
|
}); |
||||||
|
const changeGameCoin=()=>{ |
||||||
|
gameAddCoin(state.tableData.param).then(()=>{ |
||||||
|
ElMessage.success('赠送金币成功'); |
||||||
|
}).finally(()=>{ |
||||||
|
// state.loading = false; |
||||||
|
}) |
||||||
|
} |
||||||
|
const deposit=()=>{ |
||||||
|
gameDeposit(state.tableData.paramDeposit).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 { |
||||||
|
changeGameCoin, |
||||||
|
deposit, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,157 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-order-count-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="system-user-search mb15"> |
||||||
|
<el-form :inline="true"> |
||||||
|
<el-form-item label="充值金额"> |
||||||
|
<el-input size="default" v-model="tableData.param.amount" placeholder="请输金额" class="input-with-select" clearable> |
||||||
|
<template #prepend> |
||||||
|
<el-select v-model="tableData.param.compareType" class="m-2" placeholder="" size="default" style="width: 60px"> |
||||||
|
<el-option v-for="item in tableData.compareType" :key="item.value" :label="item.label" |
||||||
|
:value="item.value"/> |
||||||
|
</el-select> |
||||||
|
</template> |
||||||
|
</el-input> |
||||||
|
|
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="性别"> |
||||||
|
<el-radio-group v-model="tableData.param.gender"> |
||||||
|
<el-radio :label=1>男</el-radio> |
||||||
|
<el-radio :label=2>女</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item> |
||||||
|
<el-button size="default" type="primary" class="ml10" @click="countList"> |
||||||
|
<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="server" label="区服" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="num" label="充值人数" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="times" label="充值笔数" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="allMoney" label="充值金额" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="totalNum" label="总充值人数" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="totalTimes" label="总充值笔数" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="totalMoney" label="总金额" show-overflow-tooltip></el-table-column> |
||||||
|
</el-table> |
||||||
|
</el-card> |
||||||
|
<EditRole ref="editRoleRef" @getRoleList="countList"/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
import {toRefs, reactive, onMounted, defineComponent} from 'vue'; |
||||||
|
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
|
import {gameRoleList} from "/@/api/game"; |
||||||
|
|
||||||
|
// 定义接口来定义对象的类型 |
||||||
|
interface TableData { |
||||||
|
serverId: number; |
||||||
|
num: number; |
||||||
|
times: number; |
||||||
|
allMoney: number; |
||||||
|
totalNum: number; |
||||||
|
totalTimes: number; |
||||||
|
totalMoney: number; |
||||||
|
} |
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
data: Array<TableData>; |
||||||
|
param: { |
||||||
|
amount: number; |
||||||
|
compareType: number; |
||||||
|
gender: number; |
||||||
|
lowAge: number; |
||||||
|
upAge: number; |
||||||
|
serverId: number; |
||||||
|
} |
||||||
|
compareType: object |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1SystemRoleList', |
||||||
|
setup() { |
||||||
|
|
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
data: [], |
||||||
|
param: { |
||||||
|
amount: 0, |
||||||
|
compareType: 0, |
||||||
|
gender: 0, |
||||||
|
lowAge: 0, |
||||||
|
upAge: 0, |
||||||
|
serverId: 0, |
||||||
|
}, |
||||||
|
compareType: [ |
||||||
|
{ |
||||||
|
value: 1, |
||||||
|
label: '=', |
||||||
|
}, { |
||||||
|
value: 2, |
||||||
|
label: '<=', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 3, |
||||||
|
label: '<', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 4, |
||||||
|
label: '>', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 5, |
||||||
|
label: '>=', |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
// 初始化表格数据 |
||||||
|
// const initTableData = () => { |
||||||
|
// roleList() |
||||||
|
// }; |
||||||
|
const countList = () => { |
||||||
|
const data: Array<TableData> = []; |
||||||
|
gameRoleList(state.tableData.param).then(res => { |
||||||
|
const list = res.data.list ?? [] |
||||||
|
list.map((item: TableData) => { |
||||||
|
data.push({ |
||||||
|
serverId: item.serverId, |
||||||
|
num: item.num, |
||||||
|
times: item.times, |
||||||
|
allMoney: item.allMoney, |
||||||
|
totalMoney: item.totalMoney, |
||||||
|
totalNum: item.totalNum, |
||||||
|
totalTimes: item.totalTimes, |
||||||
|
}); |
||||||
|
}) |
||||||
|
state.tableData.data = data; |
||||||
|
}) |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
// initTableData(); |
||||||
|
}); |
||||||
|
return { |
||||||
|
|
||||||
|
//onHandleSizeChange, |
||||||
|
//onHandleCurrentChange, |
||||||
|
countList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,177 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-order-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15" > |
||||||
|
<el-form label-position="right" label-width="300px" |
||||||
|
:model="formLabelAlign" |
||||||
|
style="max-width: 520px"> |
||||||
|
<el-form-item label="UID"> |
||||||
|
<el-input v-model="tableData.param.uid" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="修改金额(差值)"> |
||||||
|
<el-input v-model="tableData.param.amount" placeholder="" class="w-50 m-2" size="large" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="选择货币类型" > |
||||||
|
<el-select v-model="tableData.param.amountType" class="w-50 m-2" placeholder="选择渠道" size="large"> |
||||||
|
<el-option v-for="item in amountTypes" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button size="large" type="primary" class="ml10" @click="changeGameCoin"> |
||||||
|
修改游戏币 |
||||||
|
</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
<div class="game-order-container" > |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15"> |
||||||
|
|
||||||
|
<el-form label-position="right" label-width="300px" |
||||||
|
:model="formLabelAlign" |
||||||
|
style="max-width: 520px"> |
||||||
|
|
||||||
|
<el-form-item label="账号"> |
||||||
|
<el-input size="large" v-model="tableData.param.uid" placeholder="" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="充值ID" > |
||||||
|
<el-select v-model="tableData.paramDeposit.depositId" class="w-50 m-2" placeholder="" size="large"> |
||||||
|
<el-option v-for="item in depositIds" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="选择区服" prop="serverId"> |
||||||
|
<el-select v-model="tableData.paramDeposit.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-item> |
||||||
|
<el-button size="large" 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 { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
|
import {gameAddCoin, gameDeposit} from "/@/api/game"; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import {ElMessage} from "element-plus/es"; |
||||||
|
|
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
param: { |
||||||
|
uid:number |
||||||
|
amount:number |
||||||
|
amountType:number |
||||||
|
}; |
||||||
|
paramDeposit:{ |
||||||
|
account:string |
||||||
|
depositId:number |
||||||
|
serverId:number |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
servers:object; |
||||||
|
amountTypes:object |
||||||
|
depositIds:object |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1GameOrderOrderList', |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
|
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
param:{ |
||||||
|
uid:0, |
||||||
|
amount:0, |
||||||
|
amountType:0 |
||||||
|
}, |
||||||
|
paramDeposit:{ |
||||||
|
account:"", |
||||||
|
depositId:0, |
||||||
|
serverId:0 |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
servers:ServerList, |
||||||
|
amountTypes:[ |
||||||
|
{ |
||||||
|
value: 1, |
||||||
|
label: '金币', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 2, |
||||||
|
label: '铜币', |
||||||
|
}, |
||||||
|
], |
||||||
|
depositIds:[ |
||||||
|
{ |
||||||
|
value: 1001, |
||||||
|
label: '6块充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1002, |
||||||
|
label: '30充值', |
||||||
|
}, |
||||||
|
{ |
||||||
|
value: 1003, |
||||||
|
label: '68充值', |
||||||
|
}, |
||||||
|
] |
||||||
|
}); |
||||||
|
const changeGameCoin=()=>{ |
||||||
|
gameAddCoin(state.tableData.param).then(()=>{ |
||||||
|
ElMessage.success('赠送金币成功'); |
||||||
|
}).finally(()=>{ |
||||||
|
// state.loading = false; |
||||||
|
}) |
||||||
|
} |
||||||
|
const deposit=()=>{ |
||||||
|
gameDeposit(state.tableData.paramDeposit).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 { |
||||||
|
changeGameCoin, |
||||||
|
deposit, |
||||||
|
...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> |
@ -0,0 +1,138 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-account-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-account-search mb15"> |
||||||
|
<el-form :inline="true"> |
||||||
|
<el-form-item label="account"> |
||||||
|
<el-input size="default" v-model="tableData.param.account" placeholder="account" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="手机号:"> |
||||||
|
<el-input size="default" v-model="tableData.param.tel" placeholder="手机号" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="身份证:"> |
||||||
|
<el-input size="default" v-model="tableData.param.ident" placeholder="身份证" class="w-50 m-2" clearable/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="名字:"> |
||||||
|
<el-input size="default" v-model="tableData.param.name" placeholder="名字" class="w-50 m-2" clearable/> |
||||||
|
</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> |
||||||
|
<el-table :data="tableData.data" style="width: 100%"> |
||||||
|
<el-table-column type="index" label="序号" width="60" /> |
||||||
|
<el-table-column prop="account" label="账号" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="trueName" label="名字" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="tel" label="手机号" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="leftPlayTime" label="剩余游戏时间" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="lastLeaveTime" 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="onlineList" |
||||||
|
/> |
||||||
|
</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 EditRole from '/@/views/system/role/component/editRole.vue'; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import {gameAccountList, gameOnlineList} from "/@/api/game"; |
||||||
|
// 定义接口来定义对象的类型 |
||||||
|
interface TableData { |
||||||
|
account:string; |
||||||
|
trueName: string; |
||||||
|
identityCard: string; |
||||||
|
tel:string; |
||||||
|
lastLeaveTime:string; |
||||||
|
createTime:string |
||||||
|
leftPlayTime: string; |
||||||
|
|
||||||
|
} |
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
data: Array<TableData>; |
||||||
|
param: { |
||||||
|
account: string; |
||||||
|
tel:string; |
||||||
|
ident:string; |
||||||
|
name:string |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1GameAccountList', |
||||||
|
components: {EditRole}, |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
data: [], |
||||||
|
param:{ |
||||||
|
account:"", |
||||||
|
tel:"", |
||||||
|
ident:"", |
||||||
|
name:"" |
||||||
|
}, |
||||||
|
|
||||||
|
}, |
||||||
|
}); |
||||||
|
// 初始化表格数据 |
||||||
|
// const initTableData = () => { |
||||||
|
// roleList() |
||||||
|
// }; |
||||||
|
const accountList = ()=>{ |
||||||
|
const data: Array<TableData> = []; |
||||||
|
gameAccountList(state.tableData.param).then(res=>{ |
||||||
|
const list = res.data.list??[] |
||||||
|
list.map((item:TableData)=>{ |
||||||
|
data.push({ |
||||||
|
account:item.account, |
||||||
|
trueName:item.trueName, |
||||||
|
identityCard: item.identityCard, |
||||||
|
tel: item.tel, |
||||||
|
leftPlayTime:item.leftPlayTime, |
||||||
|
createTime:item.createTime.replace("T"," ").substring(0,item.createTime.indexOf(".")), |
||||||
|
lastLeaveTime:item.lastLeaveTime.replace("T"," ").substring(0,item.lastLeaveTime.indexOf(".")), |
||||||
|
}); |
||||||
|
}) |
||||||
|
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 { |
||||||
|
accountList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,123 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-online-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="system-user-search mb15"> |
||||||
|
<el-form :inline="true"> |
||||||
|
<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-item> |
||||||
|
<el-button size="default" type="primary" class="ml10" @click="onlineList"> |
||||||
|
<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="connectId" label="连接服务器" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column> |
||||||
|
<el-table-column prop="loginTime" 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="onlineList" |
||||||
|
/> |
||||||
|
</el-card> |
||||||
|
<EditRole ref="editRoleRef" @getRoleList="roleList"/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
import {toRefs, reactive, onMounted, ref, defineComponent, } from 'vue'; |
||||||
|
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
|
import EditRole from '/@/views/system/role/component/editRole.vue'; |
||||||
|
import {ServerList} from "/@/utils/game"; |
||||||
|
import {gameOnlineList} from "/@/api/game"; |
||||||
|
// 定义接口来定义对象的类型 |
||||||
|
interface TableData { |
||||||
|
connectId:number; |
||||||
|
uid: number; |
||||||
|
address: string; |
||||||
|
loginTime: string; |
||||||
|
|
||||||
|
} |
||||||
|
interface TableDataState { |
||||||
|
tableData: { |
||||||
|
data: Array<TableData>; |
||||||
|
param: { |
||||||
|
serverId: number; |
||||||
|
} |
||||||
|
}; |
||||||
|
servers:object |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1SystemRoleList', |
||||||
|
components: {EditRole}, |
||||||
|
setup() { |
||||||
|
// const {proxy} = getCurrentInstance() as any; |
||||||
|
const addRoleRef = ref(); |
||||||
|
const editRoleRef = ref(); |
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
tableData: { |
||||||
|
data: [], |
||||||
|
param:{ |
||||||
|
serverId:1 |
||||||
|
}, |
||||||
|
|
||||||
|
}, |
||||||
|
servers:ServerList |
||||||
|
}); |
||||||
|
// 初始化表格数据 |
||||||
|
// const initTableData = () => { |
||||||
|
// roleList() |
||||||
|
// }; |
||||||
|
const onlineList = ()=>{ |
||||||
|
const data: Array<TableData> = []; |
||||||
|
gameOnlineList(state.tableData.param).then(res=>{ |
||||||
|
const list = res.data.onlines??[] |
||||||
|
list.map((item:TableData)=>{ |
||||||
|
data.push({ |
||||||
|
connectId:item.connectId, |
||||||
|
uid:item.uid, |
||||||
|
address: item.address, |
||||||
|
loginTime: new Date(item.loginTime).toLocaleString(), |
||||||
|
}); |
||||||
|
}) |
||||||
|
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 { |
||||||
|
addRoleRef, |
||||||
|
editRoleRef, |
||||||
|
onlineList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,264 @@ |
|||||||
|
<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> |
Loading…
Reference in new issue