修复欢迎语 action 未生效:action select 加隐藏 option[value=欢迎]

This commit is contained in:
2026-03-17 21:26:57 +08:00
parent 5b065fdcce
commit 75f25150c3
2 changed files with 41 additions and 17 deletions

View File

@@ -34,6 +34,8 @@
<option value="拳打">拳打</option>
<option value="飞吻">飞吻</option>
<option value="偷看">偷看</option>
{{-- 欢迎语专用 action隐藏不对外显示JS 临时切换用 --}}
<option value="欢迎" style="display:none"></option>
</select>
</label>

View File

@@ -125,7 +125,9 @@
function toggleWelcomeMenu(event) {
event.stopPropagation();
const menu = document.getElementById('welcome-menu');
if (!menu) { return; }
if (!menu) {
return;
}
menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
}
@@ -137,11 +139,11 @@
*/
function sendWelcomeTpl(tpl) {
const toUser = document.getElementById('to_user')?.value || '大家';
const name = toUser === '大家' ? '大家' : toUser;
const name = toUser === '大家' ? '大家' : toUser;
const prefix = window.chatContext?.welcomePrefix || window.chatContext?.username || '';
const body = tpl.replace(/\{name\}/g, name);
const body = tpl.replace(/\{name\}/g, name);
// 拼接格式:「部门 职务 姓名:欢迎语」
const msg = `${prefix}${body}`;
const msg = `${prefix}${body}`;
const input = document.getElementById('content');
if (input) {
@@ -149,24 +151,32 @@
}
const menu = document.getElementById('welcome-menu');
if (menu) { menu.style.display = 'none'; }
if (menu) {
menu.style.display = 'none';
}
// 临时把 action 设为「欢迎」,让消息在聊天窗口以瓦蓝边框样式显示
const actionSel = document.getElementById('action');
const prevAction = actionSel?.value || '';
if (actionSel) { actionSel.value = '欢迎'; }
if (actionSel) {
actionSel.value = '欢迎';
}
// 自动触发发送
sendMessage(null).finally(() => {
// 发完后恢复原来的 action
if (actionSel) { actionSel.value = prevAction; }
if (actionSel) {
actionSel.value = prevAction;
}
});
}
// 点击页面任意位置,关闭欢迎语浮层
document.addEventListener('click', function () {
document.addEventListener('click', function() {
const menu = document.getElementById('welcome-menu');
if (menu) { menu.style.display = 'none'; }
if (menu) {
menu.style.display = 'none';
}
});
// ── 动作选择 ──────────────────────────────────────
@@ -262,7 +272,7 @@
const headface = (user.headface || '1.gif').toLowerCase();
const headImgSrc = headface.startsWith('storage/') ? '/' + headface : '/images/headface/' +
headface;
headface;
// 徽章优先级:职务图标 > 管理员 > VIP
let badges = '';
@@ -288,20 +298,29 @@
// 单击/双击互斥:单击延迟 250ms 执行,双击取消单击定时器后直接执行双击逻辑
let _clickTimer = null;
item.onclick = () => {
if (_clickTimer) { return; }
if (_clickTimer) {
return;
}
_clickTimer = setTimeout(() => {
_clickTimer = null;
toUserSelect.value = username;
// 手机端:点击名字时关闭名单抽屉
if (typeof closeMobileDrawer === 'function') { closeMobileDrawer(); }
if (typeof closeMobileDrawer === 'function') {
closeMobileDrawer();
}
document.getElementById('content').focus();
}, 250);
};
// 双击打开用户名片弹窗(全局统一入口);手机端同时关闭名单抽屉
item.ondblclick = () => {
// 取消尚未执行的单击定时器
if (_clickTimer) { clearTimeout(_clickTimer); _clickTimer = null; }
if (typeof closeMobileDrawer === 'function') { closeMobileDrawer(); }
if (_clickTimer) {
clearTimeout(_clickTimer);
_clickTimer = null;
}
if (typeof closeMobileDrawer === 'function') {
closeMobileDrawer();
}
openUserCard(username);
};
targetContainer.appendChild(item);
@@ -342,7 +361,9 @@
onlineCount.innerText = count;
onlineCountBottom.innerText = count;
const footer = document.getElementById('online-count-footer');
if (footer) { footer.innerText = count; }
if (footer) {
footer.innerText = count;
}
// 派发用户列表更新事件,供手机端抽屉同步
window.dispatchEvent(new Event('chatroom:users-updated'));
@@ -390,7 +411,7 @@
let timeStrOverride = false;
// 系统用户名列表(不可被选为聊天对象)
const systemUsers = ['钓鱼播报', '星海小博士', '系统传音', '系统公告', 'AI小班长', '送花播报', '系统'];
const systemUsers = ['钓鱼播报', '星海小博士', '系统传音', '系统公告', 'AI小班长', '送花播报', '系统', '欢迎'];
// 动作文字映射表:情绪型(着/地,放"对"之前)和动作型(了,替换"对X说"
const actionTextMap = {
@@ -510,7 +531,8 @@
return '【' + clickableUser(uName, '#1d4ed8') + '】';
});
html = `<div style="color: #1e40af;">&#x1F4AC; ${parsedContent} <span style="color: #93c5fd; font-size: 11px; font-weight: normal;">(${timeStr})</span></div>`;
html =
`<div style="color: #1e40af;">&#x1F4AC; ${parsedContent} <span style="color: #93c5fd; font-size: 11px; font-weight: normal;">(${timeStr})</span></div>`;
timeStrOverride = true;
}
// 接下来再判断各类发话人