13 changed files with 279 additions and 342 deletions
@ -1,10 +0,0 @@ |
|||
export interface FormInfo { |
|||
avatar: string |
|||
id: number |
|||
account: string |
|||
nickname: string |
|||
password: string |
|||
roleID: number |
|||
secret: string |
|||
status: number |
|||
} |
@ -0,0 +1,176 @@ |
|||
<script setup lang="ts"> |
|||
import { pageLimit } from '@/common/params' |
|||
import instance from '@/plugins/axios' |
|||
import { onMounted, reactive, ref } from 'vue' |
|||
import ConfirmBox from '@/components/ConfirmBox.vue' |
|||
import Snackbar from '@/components/Snackbar.vue' |
|||
import DataTable from '@/components/DataTable.vue' |
|||
|
|||
interface FormInfo { |
|||
id: Number |
|||
name: String |
|||
permissions: Array<any> |
|||
} |
|||
|
|||
const data = reactive({ |
|||
headers: [ |
|||
{ title: 'ID', key: 'id' }, |
|||
{ title: '角色名称', key: 'name' }, |
|||
{ title: '创建时间', key: 'created_at' }, |
|||
{ title: '更新时间', key: 'updated_at' }, |
|||
{ title: '操作', key: 'actions' }, |
|||
] as any[], |
|||
desserts: [], |
|||
options: { |
|||
roles: [] as any[], |
|||
}, |
|||
form: {} as FormInfo, |
|||
rules: { |
|||
name: [(v: any) => !!v || '参数不能为空'], |
|||
permissions: [(v: any) => v.length > 0 || '请至少选择一个权限'], |
|||
}, |
|||
dialog: false, |
|||
confirm: { show: false, msg: '确定要删除此记录吗' }, |
|||
request: { method: 0, url: '' }, |
|||
snackbar: { show: false, msg: '' }, |
|||
page: { current: 1, last_page: 1 }, |
|||
}) |
|||
|
|||
const getItems = async (page: number = 1) => { |
|||
const params = { |
|||
role_name: '', |
|||
page: page, |
|||
size: pageLimit, |
|||
} |
|||
const response = (await instance.post('/role/list', params)).data |
|||
|
|||
if (!response.code) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = response.msg |
|||
return |
|||
} |
|||
|
|||
data.desserts = response.data.data |
|||
data.page.last_page = response.data.last_page |
|||
} |
|||
|
|||
//获取角色信息 |
|||
const getMenus = async () => { |
|||
const response = (await instance.post('/getMenus')).data |
|||
|
|||
if (!response.code) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = response.msg |
|||
return |
|||
} |
|||
|
|||
data.options.roles = [{ title: '请选择', value: 0 }] |
|||
for (const item of response.data.data) { |
|||
data.options.roles.push({ |
|||
title: item.name, |
|||
value: item.id, |
|||
}) |
|||
} |
|||
} |
|||
|
|||
const insertBox = (method: number) => { |
|||
data.dialog = true |
|||
data.form = {} as FormInfo |
|||
|
|||
data.request.method = method |
|||
data.request.url = '/role/add' |
|||
} |
|||
|
|||
const changeBox = (method: number, item: any) => { |
|||
data.dialog = true |
|||
data.form = JSON.parse(JSON.stringify(item)) |
|||
|
|||
data.request.method = method |
|||
data.request.url = '/role/update' |
|||
} |
|||
|
|||
const destoryBox = (method: number, item: any) => { |
|||
data.confirm.show = true |
|||
data.form.id = item.id |
|||
|
|||
data.request.method = method |
|||
data.request.url = '/role/delete' |
|||
} |
|||
|
|||
const form = ref() |
|||
const confirms = ref() |
|||
const onSubmit = async () => { |
|||
let params = { id: data.form.id } as FormInfo |
|||
|
|||
if (data.request.method < 2) { |
|||
if (!(await form.value.validate()).valid) return |
|||
|
|||
params.name = data.form.name |
|||
params.permissions = data.form.permissions |
|||
} |
|||
|
|||
const response = (await instance.post(data.request.url, params)).data |
|||
|
|||
data.snackbar.show = true |
|||
data.snackbar.msg = response.msg |
|||
|
|||
if (!response.code) return |
|||
data.dialog = false |
|||
confirms.value.closeOverlay() |
|||
getItems() |
|||
} |
|||
|
|||
onMounted(() => { |
|||
getItems() |
|||
getMenus() |
|||
}) |
|||
</script> |
|||
|
|||
<template> |
|||
<v-card> |
|||
<v-card-title> |
|||
<v-btn color="primary" @click="insertBox(0)">添加</v-btn> |
|||
</v-card-title> |
|||
<v-card-text> |
|||
<DataTable |
|||
:headers="data.headers" |
|||
:items="data.desserts" |
|||
:page="data.page.current" |
|||
:size="data.page.last_page" |
|||
@get-items="(v) => getItems(v)" |
|||
> |
|||
<template #item.actions="{ item }"> |
|||
<v-btn size="small" class="me-2" @click="changeBox(1, item)">编辑</v-btn> |
|||
<v-btn color="pink" size="small" @click="destoryBox(2, item)">删除</v-btn> |
|||
</template> |
|||
</DataTable> |
|||
</v-card-text> |
|||
|
|||
<!-- 编辑 --> |
|||
<v-dialog v-model="data.dialog" width="600"> |
|||
<v-card> |
|||
<v-card-title>信息</v-card-title> |
|||
<v-card-text> |
|||
<v-form ref="form"> |
|||
<v-text-field label="账号" v-model="data.form.name" :rules="data.rules.name"></v-text-field> |
|||
</v-form> |
|||
</v-card-text> |
|||
<v-card-actions> |
|||
<v-btn color="pink" @click="data.dialog = false">取消</v-btn> |
|||
<v-btn color="primary" variant="flat" @click="onSubmit">确定</v-btn> |
|||
</v-card-actions> |
|||
</v-card> |
|||
</v-dialog> |
|||
|
|||
<!-- 删除 --> |
|||
<ConfirmBox |
|||
ref="confirms" |
|||
:show="data.confirm.show" |
|||
:msg="data.confirm.msg" |
|||
@on-sumbit="onSubmit" |
|||
@show="(v) => (data.confirm.show = v)" |
|||
/> |
|||
|
|||
<Snackbar :show="data.snackbar.show" :msg="data.snackbar.msg" /> |
|||
</v-card> |
|||
</template> |
@ -1,202 +0,0 @@ |
|||
<script setup lang="ts"> |
|||
import { pageLimit } from '@/common/params' |
|||
import instance from '@/plugins/axios' |
|||
import { onMounted, reactive, ref } from 'vue' |
|||
import Snackbar from '@/components/Snackbar.vue' |
|||
import DataTable from '@/components/DataTable.vue'; |
|||
|
|||
interface AccountLimit { |
|||
user_no: string[] |
|||
freeze: number |
|||
exchangeLimit: number |
|||
giveLimit: number |
|||
receiveLimit: number |
|||
emailLimit: number |
|||
gameLimit: number |
|||
} |
|||
|
|||
function column(title: string, key: string, align: 'center' | 'start' | 'end' | undefined = 'center') { |
|||
return { title, key, align } |
|||
} |
|||
|
|||
const data = reactive({ |
|||
headers: [ |
|||
{ title: '昵称', key: 'user_info.nickname', align: 'center' }, |
|||
// { title: '昵称', key: 'user_info.nickname', align: 'center' }, |
|||
// { title: '备注', key: 'user_info.remark', align: 'center' }, |
|||
// { title: 'VIP', key: 'user_info.vip', align: 'center' }, |
|||
// { title: '资产', key: 'user_info.gold', align: 'center' }, |
|||
// { title: '总下注', key: 'user_info.total_bet', align: 'center' }, |
|||
// { title: '总输赢', key: 'user_info.total_win_lose', align: 'center' }, |
|||
// { title: '总充值', key: 'user_info.total_deposit', align: 'center' }, |
|||
// { title: '总提现', key: 'user_info.total_withdraw', align: 'center' }, |
|||
// { title: '充提差', key: 'user_info.deposit_withdraw_difference', align: 'center' }, |
|||
// { title: '渠道包ID', key: 'user_info.package_id', align: 'center' }, |
|||
// { title: 'Link Token', key: 'user_info.ad_token', align: 'center' }, |
|||
// { title: '渠道广告', key: 'user_info.channel_name', align: 'center' }, |
|||
// { title: '注册时间', key: 'user_info.register_time', align: 'center' }, |
|||
// { title: '最后登录时间', key: 'user_info.last_login_time', align: 'center' }, |
|||
// { title: '离线天数', key: 'user_info.offline_days', align: 'center' }, |
|||
// { title: '账户类型', key: 'user_info.account_type', align: 'center' }, |
|||
// { title: '账号状态', key: 'user_info.account_status', align: 'center' }, |
|||
] as any[], |
|||
desserts: [], |
|||
options: { |
|||
searchType: [ |
|||
{ label: '玩家ID', value: 1 }, |
|||
{ label: '玩家昵称', value: 2 }, |
|||
{ label: '玩家手机', value: 3 }, |
|||
{ label: '玩家备注', value: 4 }, |
|||
{ label: '玩家IP', value: 5 }, |
|||
{ label: '玩家设备', value: 6 }, |
|||
], |
|||
accountType: [ |
|||
{ label: '游客', value: 0 }, |
|||
{ label: '普通', value: 1 }, |
|||
{ label: '机器人', value: 2 }, |
|||
{ label: '系统', value: 3 }, |
|||
], |
|||
}, |
|||
form: { type: 1, text: '' }, |
|||
rules: { |
|||
account: [(v: any) => !!v || '参数不能为空'], |
|||
nickname: [(v: any) => !!v || '参数不能为空'], |
|||
password: [(v: any) => (v.length >= 6 && v.length <= 20) || '密码字符在6-20之间'], |
|||
roles: [(v: any) => v > 0 || '请选择角色'], |
|||
}, |
|||
selected: [], |
|||
dialog: false, |
|||
accountAuth: {} as AccountLimit, |
|||
request: { method: 0, url: '' }, |
|||
snackbar: { show: false, msg: '' }, |
|||
page: { current: 1, total: 10 }, |
|||
}) |
|||
|
|||
const getItems = async (page: number = 1) => { |
|||
const params = { page: page, limit: pageLimit, text: data.form.text, type: data.form.type } |
|||
const response = (await instance.post('/person/userSearch', params)).data |
|||
|
|||
if (response.code != 0) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = response.msg |
|||
return |
|||
} |
|||
|
|||
data.desserts = response.data.data |
|||
data.page.total = response.data.total |
|||
} |
|||
|
|||
const changeBox = () => { |
|||
if (data.selected.length == 0) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = '请选择玩家' |
|||
return |
|||
} |
|||
|
|||
data.dialog = true |
|||
} |
|||
|
|||
const changeSelected = (item: any) => { |
|||
console.log(item) |
|||
} |
|||
|
|||
const onSubmit = async () => { |
|||
if (data.selected.length == 0) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = '请选择玩家' |
|||
return |
|||
} |
|||
|
|||
data.accountAuth.user_no = data.selected |
|||
const response = (await instance.post(data.request.url, data.accountAuth)).data |
|||
|
|||
if (response.code != 0) { |
|||
data.snackbar.show = true |
|||
data.snackbar.msg = response.msg |
|||
return |
|||
} |
|||
|
|||
data.dialog = false |
|||
getItems() |
|||
} |
|||
|
|||
onMounted(() => { |
|||
getItems() |
|||
}) |
|||
</script> |
|||
|
|||
<template> |
|||
<v-card> |
|||
<v-card-title> |
|||
<v-btn color="primary" variant="flat" @click="changeBox">账号限制</v-btn> |
|||
</v-card-title> |
|||
<v-card-text> |
|||
<DataTable :headers="data.headers" /> |
|||
</v-card-text> |
|||
|
|||
<!-- 编辑 --> |
|||
<v-dialog v-model="data.dialog" width="600"> |
|||
<v-card> |
|||
<v-card-title>信息</v-card-title> |
|||
<v-card-text> |
|||
<v-form ref="form"> |
|||
<v-switch |
|||
label="账号冻结" |
|||
v-model="data.accountAuth.freeze" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
<v-switch |
|||
label="提现冻结" |
|||
v-model="data.accountAuth.exchangeLimit" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
<v-switch |
|||
label="转账冻结" |
|||
v-model="data.accountAuth.giveLimit" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
<v-switch |
|||
label="游戏冻结" |
|||
v-model="data.accountAuth.gameLimit" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
<v-switch |
|||
label="接收冻结" |
|||
v-model="data.accountAuth.receiveLimit" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
<v-switch |
|||
label="邮件冻结" |
|||
v-model="data.accountAuth.emailLimit" |
|||
:true-value="1" |
|||
:false-value="0" |
|||
inset |
|||
color="primary" |
|||
></v-switch> |
|||
</v-form> |
|||
</v-card-text> |
|||
<v-card-actions> |
|||
<v-btn color="pink" @click="data.dialog = false">取消</v-btn> |
|||
<v-btn color="primary" variant="flat" @click="onSubmit">确定</v-btn> |
|||
</v-card-actions> |
|||
</v-card> |
|||
</v-dialog> |
|||
|
|||
<Snackbar :show="data.snackbar.show" :msg="data.snackbar.msg" /> |
|||
</v-card> |
|||
</template> |
Loading…
Reference in new issue