升级节日福利年度调度与批次领取
This commit is contained in:
+173
-2
@@ -3,6 +3,176 @@ import "./bootstrap";
|
||||
// 这个文件负责处理浏览器与 Laravel Reverb WebSocket 服务器的通信。
|
||||
// 通过 Presence Channel 实现聊天室的核心监听。
|
||||
|
||||
function isHolidayObject(value) {
|
||||
return value !== null && typeof value === "object" && !Array.isArray(value);
|
||||
}
|
||||
|
||||
function firstHolidayDefined(...values) {
|
||||
for (const value of values) {
|
||||
if (value !== undefined && value !== null && value !== "") {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function pickHolidayObject(...values) {
|
||||
for (const value of values) {
|
||||
if (isHolidayObject(value)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
function mergeHolidayObjects(...values) {
|
||||
return Object.assign({}, ...values.filter(isHolidayObject));
|
||||
}
|
||||
|
||||
function toHolidayNumber(value, fallback = null) {
|
||||
if (value === undefined || value === null || value === "") {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
const parsedValue = Number(value);
|
||||
|
||||
return Number.isFinite(parsedValue) ? parsedValue : fallback;
|
||||
}
|
||||
|
||||
export function normalizeHolidayBroadcastEvent(payload = {}) {
|
||||
const runPayload = pickHolidayObject(payload.run, payload.holiday_run);
|
||||
const snapshotPayload = pickHolidayObject(
|
||||
payload.snapshot,
|
||||
payload.run_snapshot,
|
||||
payload.batch_snapshot,
|
||||
runPayload.snapshot,
|
||||
runPayload.batch_snapshot,
|
||||
);
|
||||
const eventPayload = pickHolidayObject(
|
||||
payload.event,
|
||||
payload.holiday_event,
|
||||
runPayload.event,
|
||||
runPayload.template,
|
||||
snapshotPayload.event,
|
||||
snapshotPayload.template,
|
||||
);
|
||||
const mergedPayload = mergeHolidayObjects(
|
||||
eventPayload,
|
||||
payload,
|
||||
runPayload,
|
||||
snapshotPayload,
|
||||
);
|
||||
const fixedAmount = toHolidayNumber(
|
||||
firstHolidayDefined(
|
||||
snapshotPayload.fixed_amount,
|
||||
runPayload.fixed_amount,
|
||||
payload.fixed_amount,
|
||||
),
|
||||
);
|
||||
|
||||
return {
|
||||
...payload,
|
||||
...mergedPayload,
|
||||
run_id: firstHolidayDefined(
|
||||
payload.run_id,
|
||||
runPayload.run_id,
|
||||
runPayload.id,
|
||||
snapshotPayload.run_id,
|
||||
),
|
||||
event_id: firstHolidayDefined(
|
||||
payload.event_id,
|
||||
runPayload.event_id,
|
||||
snapshotPayload.event_id,
|
||||
eventPayload.id,
|
||||
),
|
||||
name: firstHolidayDefined(
|
||||
snapshotPayload.name,
|
||||
runPayload.name,
|
||||
payload.name,
|
||||
eventPayload.name,
|
||||
"节日福利",
|
||||
),
|
||||
description: firstHolidayDefined(
|
||||
snapshotPayload.description,
|
||||
runPayload.description,
|
||||
payload.description,
|
||||
eventPayload.description,
|
||||
"",
|
||||
),
|
||||
total_amount:
|
||||
toHolidayNumber(
|
||||
firstHolidayDefined(
|
||||
snapshotPayload.total_amount,
|
||||
runPayload.total_amount,
|
||||
payload.total_amount,
|
||||
),
|
||||
0,
|
||||
) ?? 0,
|
||||
max_claimants:
|
||||
toHolidayNumber(
|
||||
firstHolidayDefined(
|
||||
snapshotPayload.max_claimants,
|
||||
runPayload.max_claimants,
|
||||
payload.max_claimants,
|
||||
),
|
||||
0,
|
||||
) ?? 0,
|
||||
distribute_type: firstHolidayDefined(
|
||||
snapshotPayload.distribute_type,
|
||||
runPayload.distribute_type,
|
||||
payload.distribute_type,
|
||||
fixedAmount !== null ? "fixed" : "random",
|
||||
),
|
||||
fixed_amount: fixedAmount,
|
||||
scheduled_for: firstHolidayDefined(
|
||||
snapshotPayload.scheduled_for,
|
||||
runPayload.scheduled_for,
|
||||
payload.scheduled_for,
|
||||
snapshotPayload.send_at,
|
||||
runPayload.send_at,
|
||||
payload.send_at,
|
||||
),
|
||||
expires_at: firstHolidayDefined(
|
||||
snapshotPayload.expires_at,
|
||||
runPayload.expires_at,
|
||||
payload.expires_at,
|
||||
snapshotPayload.claim_deadline_at,
|
||||
runPayload.claim_deadline_at,
|
||||
payload.claim_deadline_at,
|
||||
),
|
||||
repeat_type: firstHolidayDefined(
|
||||
snapshotPayload.repeat_type,
|
||||
runPayload.repeat_type,
|
||||
payload.repeat_type,
|
||||
eventPayload.repeat_type,
|
||||
),
|
||||
round_no: firstHolidayDefined(
|
||||
snapshotPayload.round_no,
|
||||
runPayload.round_no,
|
||||
payload.round_no,
|
||||
snapshotPayload.sequence,
|
||||
runPayload.sequence,
|
||||
payload.sequence,
|
||||
snapshotPayload.issue_no,
|
||||
runPayload.issue_no,
|
||||
payload.issue_no,
|
||||
),
|
||||
round_label: firstHolidayDefined(
|
||||
snapshotPayload.round_label,
|
||||
runPayload.round_label,
|
||||
payload.round_label,
|
||||
snapshotPayload.batch_label,
|
||||
runPayload.batch_label,
|
||||
payload.batch_label,
|
||||
),
|
||||
snapshot: mergeHolidayObjects(eventPayload, runPayload, snapshotPayload),
|
||||
};
|
||||
}
|
||||
|
||||
window.normalizeHolidayBroadcastEvent = normalizeHolidayBroadcastEvent;
|
||||
|
||||
export function initChat(roomId) {
|
||||
if (!roomId) {
|
||||
console.error("未提供 roomId,无法初始化 WebSocket 连接。");
|
||||
@@ -113,9 +283,10 @@ export function initChat(roomId) {
|
||||
})
|
||||
// ─── 节日福利:系统定时发放 ────────────────────────────────
|
||||
.listen(".holiday.started", (e) => {
|
||||
console.log("节日福利开始:", e);
|
||||
const holidayPayload = normalizeHolidayBroadcastEvent(e);
|
||||
console.log("节日福利批次开始:", holidayPayload);
|
||||
window.dispatchEvent(
|
||||
new CustomEvent("chat:holiday.started", { detail: e }),
|
||||
new CustomEvent("chat:holiday.started", { detail: holidayPayload }),
|
||||
);
|
||||
})
|
||||
// ─── 百家乐:开局 & 结算 ──────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user