迁移聊天室上下文注入脚本

This commit is contained in:
2026-04-25 19:05:56 +08:00
parent 6f779edb91
commit 925f2498c5
3 changed files with 181 additions and 107 deletions
+75
View File
@@ -0,0 +1,75 @@
// 聊天室上下文初始化模块,从 Blade 输出的 JSON 数据节点恢复 window.chatContext。
const CHAT_CONTEXT_ELEMENT_ID = "chat-context-data";
/**
* 读取并解析 Blade 注入的聊天室上下文 JSON。
*
* @returns {Record<string, any>}
*/
function readChatContextPayload() {
const element = document.getElementById(CHAT_CONTEXT_ELEMENT_ID);
if (!element) {
return {};
}
try {
return JSON.parse(element.textContent || "{}");
} catch (error) {
console.error("[chatContext] 初始化数据解析失败", error);
return {};
}
}
/**
* 使用模板生成带 ID 的 URL。
*
* @param {string} template URL 模板
* @param {number|string} id 资源 ID
* @returns {string}
*/
function fillIdTemplate(template, id) {
return String(template || "").replace("__ID__", encodeURIComponent(id));
}
/**
* 恢复婚姻系统 URL 工厂函数,兼容存量调用方式。
*
* @param {Record<string, any>} context 聊天室上下文
* @returns {void}
*/
function hydrateMarriageUrlFactories(context) {
const marriage = context.marriage || {};
marriage.acceptUrl = (id) => fillIdTemplate(marriage.acceptUrlTemplate, id);
marriage.rejectUrl = (id) => fillIdTemplate(marriage.rejectUrlTemplate, id);
marriage.divorceUrl = (id) => fillIdTemplate(marriage.divorceUrlTemplate, id);
marriage.confirmDivorceUrl = (id) => fillIdTemplate(marriage.confirmDivorceUrlTemplate, id);
marriage.rejectDivorceUrl = (id) => fillIdTemplate(marriage.rejectDivorceUrlTemplate, id);
marriage.weddingSetupUrl = (id) => fillIdTemplate(marriage.weddingSetupUrlTemplate, id);
marriage.claimEnvelopeUrl = (id, ceremonyId) => fillIdTemplate(
fillIdTemplate(marriage.claimEnvelopeUrlTemplate, id),
ceremonyId,
);
marriage.envelopeStatusUrl = (id) => fillIdTemplate(marriage.envelopeStatusUrlTemplate, id);
context.marriage = marriage;
}
/**
* 初始化 window.chatContext,供后续聊天室模块和存量 Blade 脚本读取。
*
* @returns {Record<string, any>}
*/
export function initializeChatContext() {
// Blade 底部仍有同步脚本会立即读取 chatContext;若兼容桥已初始化,这里只做函数补齐。
const context = window.chatContext || readChatContextPayload();
hydrateMarriageUrlFactories(context);
window.chatContext = context;
return context;
}
initializeChatContext();
+1
View File
@@ -1,4 +1,5 @@
import "./bootstrap";
import "./chat-room/context.js";
import "./chat-room.js";
// 这个文件负责处理浏览器与 Laravel Reverb WebSocket 服务器的通信。