游戏-用户管理-优化样式增强验证

This commit is contained in:
2026-04-03 18:09:17 +08:00
parent cf381bf02c
commit 9940af960b
4 changed files with 1136 additions and 3 deletions

View File

@@ -61,6 +61,72 @@ class User extends Backend
return null;
}
/**
* 抽奖券 ticket_count空串、[]、[""]、无有效 {ante,count} 时写入 NULL避免库里出现无意义 JSON
*
* @param array<string, mixed> $data
*/
private function normalizeEmptyTicketCount(array &$data): void
{
if (!array_key_exists('ticket_count', $data)) {
return;
}
$v = $data['ticket_count'];
if ($v === null) {
$data['ticket_count'] = null;
return;
}
if ($v === '') {
$data['ticket_count'] = null;
return;
}
if (!is_string($v)) {
return;
}
$s = trim($v);
if ($s === '' || $s === '[]' || strtolower($s) === 'null') {
$data['ticket_count'] = null;
return;
}
$decoded = json_decode($s, true);
if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {
return;
}
if (!is_array($decoded)) {
return;
}
if ($decoded === []) {
$data['ticket_count'] = null;
return;
}
$valid = false;
foreach ($decoded as $item) {
if (!is_array($item)) {
continue;
}
if (!array_key_exists('ante', $item) || !array_key_exists('count', $item)) {
continue;
}
$ante = $item['ante'];
$count = $item['count'];
if ($ante === '' || $ante === null || $count === '' || $count === null) {
continue;
}
if (!is_numeric($ante) || !is_numeric($count)) {
continue;
}
$valid = true;
break;
}
if (!$valid) {
$data['ticket_count'] = null;
}
}
/**
* 添加重写password 使用 Admin 同款加密uuid 由 username+channel_id 生成)
* @throws Throwable
@@ -75,6 +141,7 @@ class User extends Backend
$data = $this->applyInputFilter($data);
$data = $this->excludeFields($data);
$this->normalizeEmptyTicketCount($data);
$password = $data['password'] ?? null;
if (!is_string($password) || trim($password) === '') {
@@ -168,6 +235,7 @@ class User extends Backend
$data = $this->applyInputFilter($data);
$data = $this->excludeFields($data);
$this->normalizeEmptyTicketCount($data);
if (array_key_exists('password', $data)) {
$password = $data['password'];

File diff suppressed because one or more lines are too long

View File

@@ -175,7 +175,7 @@ const baTable = new baTableClass(
status: '1',
tier_weight: jsonStringFromFixedKeys(TIER_WEIGHT_KEYS, {}),
bigwin_weight: jsonStringFromFixedKeys(BIGWIN_WEIGHT_KEYS, {}),
ticket_count: '[]',
ticket_count: null,
},
}
)

View File

@@ -355,6 +355,9 @@ function ticketRowsToJsonString(rows: TicketRow[]): string {
const nc = Number(c)
body.push({ ante: na, count: nc })
}
if (body.length === 0) {
return ''
}
return JSON.stringify(body)
}
@@ -364,10 +367,11 @@ function syncTicketToForm() {
const a = ticketRows.value[0]?.ante?.trim() ?? ''
const c = ticketRows.value[0]?.count?.trim() ?? ''
if (a === '' || c === '') {
items.ticket_count = ''
items.ticket_count = null
return
}
items.ticket_count = ticketRowsToJsonString(ticketRows.value)
const json = ticketRowsToJsonString(ticketRows.value)
items.ticket_count = json === '' ? null : json
}
function applyTierBigwinFromJson(tierJson: string, bigwinJson: string) {