Browse Source

3tp 下注区域

master
sprint 4 months ago
parent
commit
6cf9bfdb1c
  1. 12
      backmanage/src/api/module/common_params.ts
  2. 20
      backmanage/src/views/betRecord/index.vue
  3. 11
      backmanage/src/views/person/configs/GameRooms.vue
  4. 586
      backmanage/src/views/person/risk/GameControllerConfig.vue

12
backmanage/src/api/module/common_params.ts

@ -7,12 +7,12 @@ export const initPage = {
//点控类型
export const optionsPointControl: any[] = [
{ value: 1, label: "1000(小输)" },
{ value: 2, label: "2000(中输)" },
{ value: 3, label: "3000(大输)" },
{ value: 5, label: "-1000(小赢)" },
{ value: 6, label: "-2000(中赢)" },
{ value: 7, label: "-3000(大赢)" },
{ value: "1000", label: "1000 (系统赢)" },
{ value: "2000", label: "2000 (系统赢)" },
{ value: "3000", label: "3000 (系统赢)" },
{ value: "-1000", label: "-1000 (系统输)" },
{ value: "-2000", label: "-2000 (系统输)" },
{ value: "-3000", label: "-3000 (系统输)" },
]
//邮件模板

20
backmanage/src/views/betRecord/index.vue

@ -120,6 +120,7 @@ const getBetRecord = async (page: number = 1) => {
//
if (item.game_id == 10001 || item.game_id == 20010) {
item.betArea = JSON.parse(item.area)
console.log(item.betArea.IsBreakdown)
}
}
}
@ -269,13 +270,18 @@ const showUserList = (item: string) => {
{{ `${optionsSixABBetArea[index]}: ${v}` }}
</p>
</span>
<span v-if="item.row.game_id == 10001">
<p v-for="(v, index) in item.row.betArea" class="area-font">
{{
`玩家${index + 1}: ${v.IsRobot == true ? '机器人' : v.UserNo}, 下注:${v.BetTotal}, 结果: ${
v.IsWinner == true ? '赢' : '输'
}, `
}}
<span v-if="item.row.game_id == 10001" class="area-font">
<p>击穿: {{ item.row.betArea?.IsBreakdown ? '是' : '否' }}</p>
<p v-for="v in item.row.betArea?.RecordInfoCompare">
<span>{{ `${v.PkUserNo != '' ? v.PkUserNo : 'Robot' + v.PkSeatId} ${v.WinSeatId ? '(赢)' : ''} ` }}</span>
<span> VS </span>
<span>{{ `${v.BePkUserNo != '' ? v.BePkUserNo : 'Robot' + v.BePkSeatId} ${!v.WinSeatId ? '(赢)' : ''}` }}</span>
</p>
<p v-for="(v, index) in item.row.betArea?.RecordInfoPlayer">
<span>{{ `${v.IsRobot == true ? 'Robot' + v.HandPoker.SeatId : v.UserNo}` }}: </span>
<span>{{ `下注:${v.BetTotal}` }}; </span>
<span>{{ `弃牌:${v.IsGiveUp ? '是' : '否'}` }}; </span>
<span>{{ `结果: ${v.IsWinner == true ? '赢' : '输'}` }};</span>
<span>手牌: {{ options3PattiBetArea.type[v.HandPoker.CardType] }} </span>
<span v-for="poker in v.HandPoker.Cards">
{{ ` ${options3PattiBetArea.suit[poker.suit]}${options3PattiBetArea.number[poker.value]} ` }}

11
backmanage/src/views/person/configs/GameRooms.vue

@ -38,6 +38,8 @@ const data = reactive({
roomTotalLimit: '',
gameLevel: 0,
hostLimit: 0,
minTableTake: '',
maxTableTake: '',
},
options: {
games: [] as any,
@ -143,6 +145,8 @@ const submitData = async () => {
roomTotalLimit: data.form.roomTotalLimit,
gameLevel: data.form.gameLevel,
hostLimit: parseInt(data.form.hostLimit),
minTableTake: parseInt(data.form.minTableTake),
maxTableTake: parseInt(data.form.maxTableTake),
}
//
@ -290,6 +294,13 @@ onMounted(async () => {
<el-col :span="11"><el-input v-model="data.form.maxEnterAsset" placeholder="最大值" type="number"></el-input></el-col>
</el-row>
</el-form-item>
<el-form-item label="带入限制" label-width="100">
<el-row justify="space-between" style="width: 100%">
<el-col :span="11"><el-input v-model="data.form.minTableTake" placeholder="最小值" type="number"></el-input></el-col>
<el-col :span="1" class="text-center">-</el-col>
<el-col :span="11"><el-input v-model="data.form.maxTableTake" placeholder="最大值" type="number"></el-input></el-col>
</el-row>
</el-form-item>
<el-form-item label="上庄限制" label-width="100">
<el-input v-model="data.form.hostLimit" />
</el-form-item>

586
backmanage/src/views/person/risk/GameControllerConfig.vue

@ -0,0 +1,586 @@
<script setup lang="ts">
import { onMounted, reactive, ref } from 'vue'
import request from '@/api/config'
import { ElMessage } from 'element-plus'
import { optionsPointControl } from '@/api/module/common_params'
interface FormData {
id: number
new_register_status: number
new_register_type: number
today_winlose_status: number
today_winlose_type: number
today_winlose_values: number | string
total_winlose_status: number
total_winlose_type: number
total_winlose_values: number | string
today_deposit_status: number
today_deposit_type: number
today_deposit_values: number | string
total_deposit_status: number
total_deposit_type: number
total_deposit_values: number | string
today_withdraw_status: number
today_withdraw_type: number
today_withdraw_values: number | string
total_withdraw_status: number
total_withdraw_type: number
total_withdraw_values: number | string
today_surplus_status: number
today_surplus_type: number
today_surplus_values: number | string
total_surplus_status: number
total_surplus_type: number
total_surplus_values: number | string
device_num_status: number
device_num_type: number
device_num_values: number | string
ip_num_status: number
ip_num_type: number
ip_num_values: number | string
vip_status: number
vip_values: number | string
channel_status: number
channel_values: number
point_gear: string
point_coin: number | string
lower_rate: number | string
upper_rate: number | string
loop_times: number | string
remark: string
}
const data = reactive({
result: [] as any,
form: {} as FormData,
loading: false,
dialog: false,
request: { action: 0, url: '' },
destroy: { show: false },
rules: {
remark: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
point_coin: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
lower_rate: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
},
options: {
new_register: [
{ label: '否', value: 0 },
{ label: '是', value: 1 },
],
section: [
{ label: '大于', value: 0 },
{ label: '小于', value: 1 },
{ label: '等于', value: 2 },
{ label: '大于等于', value: 3 },
{ label: '小于等于', value: 4 },
],
point: optionsPointControl,
},
})
const form = ref()
const getRecord = async () => {
const respond = await request.post('/person/configs/pointConfig')
if (respond.code != 0) {
ElMessage.error(respond.msg)
return
}
data.result = respond.data as FormData
}
const addBox = (action: number, item: any) => {
data.form = {
id: 0,
new_register_status: 0,
new_register_type: 0,
today_winlose_status: 0,
today_winlose_type: 0,
today_winlose_values: 0,
total_winlose_status: 0,
total_winlose_type: 0,
total_winlose_values: 0,
today_deposit_status: 0,
today_deposit_type: 0,
today_deposit_values: 0,
total_deposit_status: 0,
total_deposit_type: 0,
total_deposit_values: 0,
today_withdraw_status: 0,
today_withdraw_type: 0,
today_withdraw_values: 0,
total_withdraw_status: 0,
total_withdraw_type: 0,
total_withdraw_values: 0,
today_surplus_status: 0,
today_surplus_type: 0,
today_surplus_values: 0,
total_surplus_status: 0,
total_surplus_type: 0,
total_surplus_values: 0,
device_num_status: 0,
device_num_type: 0,
device_num_values: 0,
ip_num_status: 0,
ip_num_type: 0,
ip_num_values: 0,
vip_status: 0,
vip_values: 0,
channel_status: 0,
channel_values: 0,
point_gear: '1000',
point_coin: '',
lower_rate: '',
upper_rate: '',
loop_times: 0,
remark: '',
} as FormData
data.dialog = true
data.request.action = action
data.request.url = '/person/configs/addPointConfig'
}
const editBox = (action: number, item: any) => {
data.form = item
data.dialog = true
data.request.action = action
data.request.url = '/person/configs/changePointConfig'
}
const delBox = (action: number, item: any) => {
data.form.id = item.id
data.destroy.show = true
data.request.action = action
data.request.url = '/person/configs/destroyPointConfig'
}
const submitData = async () => {
if (data.request.action < 2) {
if (
!(await form.value.validate((valid: any) => {
return valid
}))
)
return
}
const params = {
id: data.form.id,
remark: data.form.remark,
point_gear: data.form.point_gear,
point_coin: parseInt(data.form.point_coin as string),
lower_rate: parseInt(data.form.lower_rate as string),
upper_rate: parseInt(data.form.upper_rate as string),
loop_times: parseInt(data.form.loop_times as string),
new_register_status: encodeStatus(data.form.new_register_status, data.form.new_register_type),
today_winlose_status: encodeStatus(data.form.today_winlose_status, data.form.today_winlose_type),
today_winlose_values: parseInt(data.form.today_winlose_values as string),
total_winlose_status: encodeStatus(data.form.total_winlose_status, data.form.total_winlose_type),
total_winlose_values: parseInt(data.form.total_winlose_values as string),
today_deposit_status: encodeStatus(data.form.today_deposit_status, data.form.today_deposit_type),
today_deposit_values: parseInt(data.form.today_deposit_values as string),
total_deposit_status: encodeStatus(data.form.total_deposit_status, data.form.total_deposit_type),
total_deposit_values: parseInt(data.form.total_deposit_values as string),
today_withdraw_status: encodeStatus(data.form.today_withdraw_status, data.form.today_withdraw_type),
today_withdraw_values: parseInt(data.form.today_withdraw_values as string),
total_withdraw_status: encodeStatus(data.form.total_withdraw_status, data.form.total_withdraw_type),
total_withdraw_values: parseInt(data.form.total_withdraw_values as string),
today_surplus_status: encodeStatus(data.form.today_surplus_status, data.form.today_surplus_type),
today_surplus_values: parseInt(data.form.today_surplus_values as string),
total_surplus_status: encodeStatus(data.form.total_surplus_status, data.form.total_surplus_type),
total_surplus_values: parseInt(data.form.total_surplus_values as string),
device_num_status: encodeStatus(data.form.device_num_status, data.form.device_num_type),
device_num_values: parseInt(data.form.device_num_values as string),
ip_num_status: encodeStatus(data.form.ip_num_status, data.form.ip_num_type),
ip_num_values: parseInt(data.form.ip_num_values as string),
vip_status: data.form.vip_status,
vip_values: parseInt(data.form.vip_values as string),
channel_status: encodeStatus(data.form.channel_status, data.form.channel_values),
}
const respond = await request.post(data.request.url, params)
if (respond.code != 0) {
ElMessage.error(respond.msg)
return
}
data.dialog = false
data.destroy.show = false
ElMessage.success('操作成功')
getRecord()
}
const encodeStatus = (status: number, type: number) => {
return (status << 3) | type
}
const decodeStatus = (combinedValue: number) => {
const status = (combinedValue >> 3) & 1
const type = combinedValue & 0b111
return { status, type }
}
onMounted(async () => {
getRecord()
})
</script>
<template>
<div class="full-page p-20 page-content" style="position: relative">
<el-row>
<el-col class="mb-10">
<el-button type="success" size="small" @click="addBox(0, null)">添加</el-button>
</el-col>
</el-row>
<el-card class="mx-n10">
<el-table height="600" :data="data.result" v-loading="data.loading">
<el-table-column align="center" prop="id" label="ID" width="100" />
<el-table-column align="center" prop="remark" label="策略名称" />
<el-table-column align="center" prop="option" label="操作">
<template #default="item">
<el-button type="warning" size="small" @click="editBox(1, item.row)">编辑</el-button>
<el-button type="danger" size="small" @click="delBox(2, item.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 添加 -->
<el-dialog v-model="data.dialog">
<el-form ref="form" :rules="data.rules" :model="data.form">
<el-form-item label="策略名称" label-width="130" prop="remark">
<el-input v-model="data.form.remark"></el-input>
</el-form-item>
<el-form-item label="控制挡位" label-width="130" prop="">
<el-select v-model="data.form.point_gear" class="full-select">
<el-option v-for="item in data.options.point" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="控制金额" label-width="130" prop="point_coin">
<el-input v-model="data.form.point_coin" type="number"></el-input>
</el-form-item>
<el-form-item label="浮动区间" label-width="130" prop="lower_rate">
<el-row justify="space-between">
<el-col :span="11">
<el-input v-model="data.form.lower_rate" type="number">
<template #append>%</template>
</el-input>
</el-col>
<el-col :span="2" class="text-center">-</el-col>
<el-col :span="11">
<el-input v-model="data.form.upper_rate" type="number">
<template #append>%</template>
</el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="循环次数" label-width="130" prop="loop_times">
<el-input v-model="data.form.loop_times" type="number"></el-input>
<p style="color: red; font-size: 12px;">-1:不限; 0:不循环; >0循环次数</p>
</el-form-item>
<el-form-item label="是否新用户" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.new_register_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<el-col :span="10" v-if="data.form.new_register_status == 1">
<el-select v-model="data.form.new_register_type" class="full-select">
<el-option
v-for="item in data.options.new_register"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10"></el-col>
</el-row>
</el-form-item>
<el-form-item label="用户今日输赢" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.today_winlose_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.today_winlose_status == 1">
<el-col :span="10">
<el-select v-model="data.form.today_winlose_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.today_winlose_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户总输赢" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.total_winlose_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.total_winlose_status == 1">
<el-col :span="10">
<el-select v-model="data.form.total_winlose_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.total_winlose_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户今日充值" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.today_deposit_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.today_deposit_status == 1">
<el-col :span="10">
<el-select v-model="data.form.today_deposit_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.today_deposit_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户总充值" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.total_deposit_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.total_deposit_status == 1">
<el-col :span="10">
<el-select v-model="data.form.total_deposit_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.total_deposit_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户今日提现" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.today_withdraw_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.today_withdraw_status == 1">
<el-col :span="10">
<el-select v-model="data.form.today_withdraw_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.today_withdraw_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户总提现" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.total_withdraw_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.total_withdraw_status == 1">
<el-col :span="10">
<el-select v-model="data.form.total_winlose_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.total_winlose_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="今日中冲提差" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.today_surplus_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.today_surplus_status == 1">
<el-col :span="10">
<el-select v-model="data.form.today_surplus_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.today_surplus_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户总冲提差" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.total_surplus_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.total_surplus_status == 1">
<el-col :span="10">
<el-select v-model="data.form.total_surplus_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.total_surplus_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="设备账号数量" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.device_num_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.device_num_status == 1">
<el-col :span="10">
<el-select v-model="data.form.device_num_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.device_num_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="IP账号数量" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.ip_num_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.ip_num_status == 1">
<el-col :span="10">
<el-select v-model="data.form.ip_num_type" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.ip_num_values" type="number" placeholder="值"></el-input>
</el-col>
</template>
</el-row>
</el-form-item>
<el-form-item label="用户VIP等级" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.vip_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<el-col v-if="data.form.vip_status == 1" :span="10">
<el-select v-model="data.form.vip_values" class="full-select">
<el-option v-for="item in 16" :key="item" :label="item" :value="item" />
</el-select>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="用户进入渠道" label-width="130" prop="">
<el-row class="full-select" justify="space-between">
<el-col :span="3">
<el-switch v-model="data.form.channel_status" :active-value="1" :inactive-value="0"></el-switch>
</el-col>
<template v-if="data.form.channel_status == 1">
<el-col :span="10">
<el-select v-model="data.form.channel_values" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
</template>
</el-row>
</el-form-item>
<div class="paginate-center">
<el-button type="primary" @click="data.dialog = false">取消</el-button>
<el-button type="danger" @click="submitData">确定</el-button>
</div>
</el-form>
</el-dialog>
<!-- 删除 -->
<el-dialog v-model="data.destroy.show" title="提示" width="600" center>
<p>确定要删除吗?</p>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="data.destroy.show = false">取消</el-button>
<el-button type="danger" @click="submitData">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<style scoped>
.full-select {
width: 100%;
}
</style>
Loading…
Cancel
Save