MoQingYu 4 months ago
parent
commit
586a9756d9
  1. 11
      backmanage/src/views/betRecord/index.vue
  2. 542
      backmanage/src/views/person/risk/GameControllerConfig.vue

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

@ -113,12 +113,12 @@ const getBetRecord = async (page: number = 1) => {
//
if (item.area != '') {
//
if (item.game_id == 20001 || item.game_id == 20005 || item.game_id == 20006 || item.game_id == 20008) {
if (item.game_id == 20001 || item.game_id == 20005 || item.game_id == 20008) {
const formattedArea = item.area.replace(/(\d+):/g, '"$1":')
item.betArea = JSON.parse(formattedArea)
}
//
if (item.game_id == 10001 || item.game_id == 20010 || item.game_id == 20009) {
if (item.game_id == 10001 || item.game_id == 20010 || item.game_id == 20009 || item.game_id == 20006) {
item.betArea = JSON.parse(item.area)
}
}
@ -261,7 +261,10 @@ const showUserList = (item: string) => {
</span>
<span v-if="item.row.game_id == 20006">
<p v-for="(v, index) in item.row.betArea" class="area-font">
{{ `${options7Up7DownBetArea[index]}: ${v}` }}
<span>区域{{ options7Up7DownBetArea[v.area] }}, </span>
<span>金额{{ v.betAmount }}, </span>
<span>赔率{{ v.areaPro }}, </span>
<span>结果{{ v.isWin ? '赢' : '输' }}</span>
</p>
</span>
<span v-if="item.row.game_id == 20008">

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

@ -3,7 +3,7 @@ import { onMounted, reactive, ref } from 'vue'
import request from '@/api/config'
import { ElMessage } from 'element-plus'
import { initPage, optionsPointControl } from '@/api/module/common_params'
import { de } from 'element-plus/es/locale'
import CustomPaginate from '@/components/common/CustomPaginate.vue'
interface FormData {
id: number
@ -11,37 +11,37 @@ interface FormData {
new_register_type: number
today_winlose_status: number
today_winlose_type: number
today_winlose_values: number | string
today_winlose_values: Array<number | string>
total_winlose_status: number
total_winlose_type: number
total_winlose_values: number | string
total_winlose_values: Array<number | string>
today_deposit_status: number
today_deposit_type: number
today_deposit_values: number | string
today_deposit_values: Array<number | string>
total_deposit_status: number
total_deposit_type: number
total_deposit_values: number | string
total_deposit_values: Array<number | string>
today_withdraw_status: number
today_withdraw_type: number
today_withdraw_values: number | string
today_withdraw_values: Array<number | string>
total_withdraw_status: number
total_withdraw_type: number
total_withdraw_values: number | string
total_withdraw_values: Array<number | string>
today_surplus_status: number
today_surplus_type: number
today_surplus_values: number | string
today_surplus_values: Array<number | string>
total_surplus_status: number
total_surplus_type: number
total_surplus_values: number | string
total_surplus_values: Array<number | string>
device_num_status: number
device_num_type: number
device_num_values: number | string
device_num_values: Array<number | string>
ip_num_status: number
ip_num_type: number
ip_num_values: number | string
ip_num_values: Array<number | string>
vip_status: number
vip_type: number
vip_values: number | string
vip_values: Array<number | string>
channel_status: number
channel_values: Array<string>
point_gear: number | string
@ -53,6 +53,36 @@ interface FormData {
remark: string
}
const validate_range = (rule: any, value: any, callback: (arg0: Error | undefined) => void) => {
const { lower_rate, upper_rate } = data.form
// lower_rate
if (lower_rate === '') {
callback(new Error('下限值不能为空'))
return
}
// upper_rate
if (upper_rate === '') {
callback(new Error('上限值不能为空'))
return
}
//
if (isNaN(lower_rate as number) || isNaN(upper_rate as number)) {
callback(new Error('必须输入数字'))
return
}
// lower_rate upper_rate
if (parseFloat(lower_rate as string) >= parseFloat(upper_rate as string)) {
callback(new Error('下限值必须小于上限值'))
return
}
//
callback(undefined)
}
const data = reactive({
page: initPage,
result: [] as any,
@ -64,7 +94,7 @@ const data = reactive({
rules: {
remark: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
point_coin: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
lower_rate: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
lower_rate: [{ validator: validate_range, trigger: 'blur' }],
refresh_times: [{ required: true, message: '数值不能为空', trigger: 'blur' }],
},
options: {
@ -78,10 +108,24 @@ const data = reactive({
{ label: '等于', value: 2 },
{ label: '大于等于', value: 3 },
{ label: '小于等于', value: 4 },
{ label: '区间', value: 5 },
],
point: optionsPointControl,
channel: [] as any,
},
special_condition: {
today_winlose: '今日输赢',
total_winlose: '总输赢',
today_deposit: '今日充值',
total_deposit: '总充值',
today_withdraw: '今日提现',
total_withdraw: '总提现',
today_surplus: '今日充提差',
total_surplus: '总提差',
device_num: '设备账号数量',
ip_num: 'IP账号数量',
vip: 'VIP等级',
},
})
const form = ref()
@ -116,53 +160,25 @@ const getChannelList = async () => {
}
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_type: 0,
vip_values: 0,
channel_status: 0,
channel_values: [],
point_gear: 1000,
point_coin: '',
lower_rate: '',
upper_rate: '',
refresh_status: 0,
refresh_times: '',
remark: '',
} as FormData
data.form = {} as FormData
data.form.id = 0
data.form.new_register_status = 0
data.form.new_register_type = 0
data.form.channel_status = 0
data.form.channel_values = []
data.form.point_gear = 1000
data.form.point_coin = ''
data.form.lower_rate = ''
data.form.upper_rate = ''
data.form.refresh_status = 0
data.form.refresh_times = ''
data.form.remark = ''
for (const item in data.special_condition) {
;(data.form as any)[item + '_status'] = 0
;(data.form as any)[item + '_type'] = 0
;(data.form as any)[item + '_values'] = []
}
data.dialog = true
data.request.action = action
@ -172,53 +188,29 @@ const addBox = (action: number, item: any) => {
const editBox = (action: number, item: any) => {
const current = JSON.parse(JSON.stringify(item))
data.form = {
id: current.id,
new_register_status: decodeStatus(current.new_register_status).status,
new_register_type: decodeStatus(current.new_register_status).type,
today_winlose_status: decodeStatus(current.today_winlose_status).status,
today_winlose_type: decodeStatus(current.today_winlose_status).type,
today_winlose_values: current.today_winlose_values,
total_winlose_status: decodeStatus(current.total_winlose_status).status,
total_winlose_type: decodeStatus(current.total_winlose_status).type,
total_winlose_values: current.total_winlose_values,
today_deposit_status: decodeStatus(current.today_deposit_status).status,
today_deposit_type: decodeStatus(current.today_deposit_status).type,
today_deposit_values: current.today_deposit_values,
total_deposit_status: decodeStatus(current.total_deposit_status).status,
total_deposit_type: decodeStatus(current.total_deposit_status).type,
total_deposit_values: current.total_deposit_values,
today_withdraw_status: decodeStatus(current.today_withdraw_status).status,
today_withdraw_type: decodeStatus(current.today_withdraw_status).type,
today_withdraw_values: current.today_withdraw_values,
total_withdraw_status: decodeStatus(current.total_withdraw_status).status,
total_withdraw_type: decodeStatus(current.total_withdraw_status).type,
total_withdraw_values: current.total_withdraw_values,
today_surplus_status: decodeStatus(current.today_surplus_status).status,
today_surplus_type: decodeStatus(current.today_surplus_status).type,
today_surplus_values: current.today_surplus_values,
total_surplus_status: decodeStatus(current.total_surplus_status).status,
total_surplus_type: decodeStatus(current.total_surplus_status).type,
total_surplus_values: current.total_surplus_values,
device_num_status: decodeStatus(current.device_num_status).status,
device_num_type: decodeStatus(current.device_num_status).type,
device_num_values: current.device_num_values,
ip_num_status: decodeStatus(current.ip_num_status).status,
ip_num_type: decodeStatus(current.ip_num_status).type,
ip_num_values: current.ip_num_values,
vip_status: decodeStatus(current.vip_status).status,
vip_type: decodeStatus(current.vip_status).type,
vip_values: current.vip_values,
channel_status: current.channel_status,
channel_values: JSON.parse(current.channel_values),
point_gear: current.point_gear,
point_coin: current.point_coin,
lower_rate: current.lower_rate,
upper_rate: current.upper_rate,
refresh_status: current.refresh_status,
refresh_times: current.refresh_times,
remark: current.remark,
} as FormData
data.form = {} as FormData
data.form.id = current.id
data.form.new_register_status = decodeStatus(current.new_register_status).status
data.form.new_register_type = decodeStatus(current.new_register_status).type
data.form.channel_status = current.channel_status
data.form.channel_values = JSON.parse(current.channel_values)
data.form.point_gear = current.point_gear
data.form.point_coin = current.point_coin
data.form.lower_rate = current.lower_rate
data.form.upper_rate = current.upper_rate
data.form.remark = current.remark
data.form.refresh_times = current.refresh_times
data.form.refresh_status = current.refresh_status
for (const item in data.special_condition) {
const type_key = item + '_type'
const status_key = item + '_status'
const values_key = item + '_values'
;(data.form as any)[type_key] = decodeStatus(current[status_key]).type
;(data.form as any)[status_key] = decodeStatus(current[status_key]).status
;(data.form as any)[values_key] = JSON.parse(current[values_key])
}
data.dialog = true
data.request.action = action
@ -255,55 +247,39 @@ const submitData = async () => {
return
}
const params = {
id: data.form.id,
remark: data.form.remark,
point_gear: parseInt(data.form.point_gear as string),
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),
refresh_status: data.form.refresh_status,
refresh_times: parseInt(data.form.refresh_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: encodeStatus(data.form.vip_status, data.form.vip_type),
vip_values: parseInt(data.form.vip_values as string),
channel_status: data.form.channel_status,
channel_values: JSON.stringify(data.form.channel_values),
} as any
//0
let isTrue = true
Object.keys(params).forEach((key) => {
if (key.includes('values') && key != 'vip_values' && key != 'channel_values') {
if (params[key] < 0) {
isTrue = false
const params: any = {}
params.id = data.form.id
params.new_register_status = encodeStatus(data.form.new_register_status, data.form.new_register_type)
params.channel_status = data.form.channel_status
params.channel_values = JSON.stringify(data.form.channel_values)
params.point_gear = data.form.point_gear
params.point_coin = parseInt(data.form.point_coin as string)
params.lower_rate = parseFloat(data.form.lower_rate as string)
params.upper_rate = parseFloat(data.form.upper_rate as string)
params.remark = data.form.remark
params.refresh_times = parseInt(data.form.refresh_times as string)
params.refresh_status = data.form.refresh_status
for (const item in data.special_condition) {
const type_key = item + '_type'
const status_key = item + '_status'
const values_key = item + '_values'
params[status_key] = encodeStatus((data.form as any)[status_key], (data.form as any)[type_key])
let values = []
for (const v of (data.form as any)[values_key]) {
if (v < 0) {
ElMessage.error('数值不能小于0')
return
}
values.push(parseInt(v as string))
}
})
if (!isTrue || params.refresh_times < 0) {
ElMessage.error('数值不能小于0')
return
if ((data.form as any)[status_key] == 1 && values.length == 0) {
ElMessage.error('条件数值不能为空')
return
}
params[values_key] = JSON.stringify(values)
}
const respond = await request.post(data.request.url, params)
@ -319,6 +295,11 @@ const submitData = async () => {
getRecord()
}
const changeSwitch = (key: string) => {
;(data.form as any)[key + '_type'] = 0
;(data.form as any)[key + '_values'] = []
}
const encodeStatus = (status: number, type: number) => {
return (status << 3) | type
}
@ -423,15 +404,20 @@ onMounted(async () => {
</el-col>
</el-row>
</el-form-item>
<el-form-item label="今日输赢" label-width="130" prop="">
<el-form-item :label="v" label-width="130" prop="" v-for="(v, k) in data.special_condition">
<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-switch
v-model="(data.form as any)[`${k}_status`]"
:active-value="1"
:inactive-value="0"
@change="changeSwitch(k)"
></el-switch>
</el-col>
<template v-if="data.form.today_winlose_status == 1">
<template v-if="(data.form as any)[`${k}_status`] == 1">
<el-col :span="10">
<el-select v-model="data.form.today_winlose_type" class="full-select">
<el-select v-model="(data.form as any)[`${k}_type`]" class="full-select">
<el-option
v-for="item in data.options.section"
:key="item.value"
@ -440,239 +426,33 @@ onMounted(async () => {
/>
</el-select>
</el-col>
<el-col :span="10">
<el-input v-model="data.form.today_winlose_values" type="number" placeholder="值"></el-input>
<el-col v-if="(data.form as any)[`${k}_type`] <= 4" :span="10">
<el-input v-model="(data.form as any)[`${k}_values`][0]" 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="今日充值(INR)" 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="总充值(INR)" 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="今日提现(INR)" 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="总提现(INR)" 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="今日充提差(INR)" 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="总提差(INR)" 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 v-else :span="10">
<el-row justify="space-between">
<el-col :span="11">
<el-input v-model="(data.form as any)[`${k}_values`][0]" type="number" placeholder="值"></el-input>
</el-col>
<span>-</span>
<el-col :span="11">
<el-input v-model="(data.form as any)[`${k}_values`][1]" type="number" placeholder="值"></el-input>
</el-col>
</el-row>
</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>
<template v-if="data.form.vip_status == 1">
<el-col :span="10">
<el-select v-model="data.form.vip_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-col v-if="data.form.vip_status == 1" :span="10">
<el-input v-model="data.form.vip_values" type="number" placeholder="值"></el-input>
</el-col>
</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.channel_status" :active-value="1" :inactive-value="0"></el-switch>
<el-switch
v-model="data.form.channel_status"
:active-value="1"
:inactive-value="0"
@change="changeSwitch('channel')"
></el-switch>
</el-col>
<template v-if="data.form.channel_status == 1">
<el-col :span="10">

Loading…
Cancel
Save