第六轮深度测试:7个并行agent覆盖全部11章,修复21处前端问题
Ch1-2: 用户名注册邀请码错误改为友好文案(原为原始TypeError泄露给用户); 企业注册页扫描图标补上点击反馈。 Ch3-4: 发名片消息补传typeHint(此前被后端误分类成text,搜索/历史摘要显示成JSON); 文件卡片按mime大类区分图标颜色(此前所有文件都是同一个灰色通用图标); 表情面板补上专属退格/发送按钮(浅蓝禁用/深蓝启用两态);订正一处与截图不符的代码注释。 Ch5-6: 群聊设置页"群成员"补上可点击的完整成员列表页(复用MemberPicker字母分组); 群文件页去掉无依据的硬编码"/10GB"容量上限显示。 Ch7: 收藏点击图片/视频缩略图补上预览;"查找聊天记录-链接"tab补上定位回原消息; 文件下载页返回入口按来源tab纠正;批量转发成功计数改为按目标会话去重 (原公式混用"收藏条数"和"目标会话数"两个维度,混选多条收藏转发时可能显示负数); 收藏/视频tab切换补上URL路由同步。 Ch8: topic.onInfo在通话期间补上事件转发(此前通话中"对方正在输入"和已读回执静默失效); 主叫等待接听页补上"正在等待对方接受邀请…"文案;语音通话最小化胶囊的还原按钮移出 拖拽区域(原来嵌在draggable内部,指针捕获可能吞掉点击);修复中等窗宽(641-750px)下 本地摄像头预览遮挡"切换摄像头"按钮的CSS重叠。 Ch9: 部门树展开时跳过child_count=0的注定空请求;月报字数上限从硬编码1000改为读取 后端真实的10000;发起会议补上"结束时间需晚于开始时间"的本地校验和更具体的报错; 日报/月报统计接口补上department_id透传(此前包装函数注释断言后端会忽略,实际已支持)。 Ch10-11: URL风险检测补上g标志(原来一条消息只检查第一个链接,第二个链接哪怕是高危 也不会被拦截);补上"安全教育"设置入口(原功能完整实现但零入口,需手改hash才能打开); 修改密码按钮补上busy态反馈;青少年模式PIN页补上"忘记独立密码"入口(后端已支持重置, 前端未接);"关于我们"补上"联系我们"行。 7个agent同时对全部11章存量后端问题条目逐一复核,结论详见待整理的后端问题清单更新 (Ch1-2发现一条P0级后端问题:验证码固定值"123456",已记录未修复,不在此commit修改 im_be仓库范围内)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
d42591284f
commit
f42b8536e5
@@ -3770,6 +3770,34 @@ img.channel {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#emoji-panel-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.4rem 0.8rem 0.6rem;
|
||||
border-top: 1px solid var(--clr-shadow-panel-divider);
|
||||
}
|
||||
|
||||
#emoji-panel-footer a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2.4rem;
|
||||
height: 2.4rem;
|
||||
text-decoration: none;
|
||||
color: var(--clr-text-tertiary);
|
||||
}
|
||||
|
||||
/* 同一色相、不同深浅区分"发不出去"和"能发"两态,不是灰色/彩色那种对比——跟本项目其它地方
|
||||
记录过的"发送按钮禁用态浅蓝、启用态深蓝"是同一条设计判断。 */
|
||||
#emoji-panel-footer a.emoji-panel-send {
|
||||
color: light-dark(#90caf9, #4a7ba6);
|
||||
}
|
||||
|
||||
#emoji-panel-footer a.emoji-panel-send.active {
|
||||
color: var(--clr-primary-accent);
|
||||
}
|
||||
|
||||
.emoji-panel-empty {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
@@ -4075,6 +4103,18 @@ img.channel {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.call-pill-row {
|
||||
/* Wraps .call-pill and its restore button as plain flex siblings (row, shrink-to-content) so the
|
||||
button can sit right next to the pill using ordinary flow instead of position:absolute --
|
||||
#video-container is already an absolute-positioned flex column (base rule, for the fullscreen
|
||||
video layout) and fighting that from a descendant with more absolute positioning turned out to
|
||||
size unpredictably (a container with a mix of flex/absolute descendants doesn't reliably
|
||||
shrink-wrap the way a single plain flex child does). This wrapper is that one simple child. */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.audio-minimized button.full-screen {
|
||||
position: static;
|
||||
width: 1.5rem;
|
||||
@@ -4309,6 +4349,15 @@ video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/* Plain status line under the name badge (not another pill) -- matches how
|
||||
call-experience-view.jsx's own demo renders the same "正在等待对方接受邀请…" copy. */
|
||||
.caller-card .caller-status {
|
||||
margin-top: 0.5rem;
|
||||
color: var(--clr-bright);
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.call-party.peer .caller-name.inactive {
|
||||
position: absolute;
|
||||
font-size: larger;
|
||||
@@ -5971,6 +6020,23 @@ div.toast.show {
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
|
||||
/* Same left-side position/color as the plain (non-clickable) .auth-field-icon above -- this is
|
||||
just that icon made clickable (企业注册's credit-code scan icon), so it shouldn't look any
|
||||
different at rest, only respond to a tap. */
|
||||
.auth-field-icon-button {
|
||||
flex: none;
|
||||
display: flex;
|
||||
margin: 0 0 0 1rem;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
color: #4091ff;
|
||||
}
|
||||
|
||||
.auth-field-icon-button .material-icons {
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
|
||||
.auth-inline-icon,
|
||||
.auth-icon-button {
|
||||
display: grid;
|
||||
@@ -6676,6 +6742,10 @@ div.toast.show {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
.youth-password-gate .auth-text-button {
|
||||
margin-top: 1.2rem;
|
||||
}
|
||||
|
||||
.auth-pin-boxes {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 4rem);
|
||||
@@ -12526,7 +12596,16 @@ div.toast.show {
|
||||
border-radius: unset;
|
||||
box-shadow: unset;
|
||||
}
|
||||
}
|
||||
|
||||
/* .call-party.self's fullscreen self-preview (bottom-right corner) overlaps #controls' centered
|
||||
button row somewhere around 641px-750px: narrower than this and the row above already switches to
|
||||
the cramped mobile layout (with its own bottom:8.5rem clearance built in below); wider and #controls
|
||||
has enough room to stay clear of the preview on its own. 768px is comfortably past where the overlap
|
||||
was verified to stop, and is a common breakpoint already used elsewhere in this file. Kept as its own
|
||||
query (rather than folded into the 640px block above) since the rest of that block also restructures
|
||||
#video-container/#controls into an entirely different mobile layout that shouldn't kick in this early. */
|
||||
@media (max-width: 768px) {
|
||||
.call-party.self {
|
||||
bottom: 8.5rem;
|
||||
border-radius: unset;
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user