实现合并转发(第4章 4.20):后端已支持 bundle 模式,补上前后两端
后端把 POST /v1/im/messages/forward 的 mode="bundle" 实现了(此前直接返回 501,前端因此
只做了逐条转发)。这次把前端两侧都补上。
接收侧(新增 widgets/forward-bundle.jsx)
- 服务端生成的这条消息 head 带 x-im-type:"forward_bundle",content 是
{bundle_id, title, item_count, preview, items, source_refs, comment},不是 Drafty。
前端全仓搜这个类型零命中,收到会落到 chat-message 的 "invalid content" 兜底
(⚠ + 灰字)。本端自己发不出 bundle,但别的端发过来就会踩到。
- 渲染成一张"聊天记录"卡片:标题 + 摘要行 + 展开/收起。items[] 里已经带了每条被转发消息的
完整快照,所以"查看完整记录"是就地展开,不额外发请求。
- 快照里的 from 是不带 usr 前缀的裸 uid(与收藏快照一致),补前缀后查本地会话缓存拿显示名;
查不到就不显示发送者,宁可少一行也不要把一串 uid 摆在摘要前面。
- 没有正文的媒体消息用 [图片]/[视频]/[语音]/[文件]/[链接] 标签兜底。
发送侧(batch-forward-dialog.jsx)
- 转发模式改为按"用哪种方式选的目标"推导,这是参考图给的规则:
转发—逐条转发.png 是单选一个目标、占位写 [逐条转发]共2条消息;
转发—合并转发—多选状态.png 是多选目标、占位写 [合并转发]共16条消息。
原来 mode 硬编码 'separate'、占位也写死 [逐条转发]。
样式(base.css)
- 新增 .forward-bundle 一组规则,避免又造一批零样式类。
验证
- 用后端 buildForwardBundle 的真实产出结构,注入真实会话的消息缓存,由真正的 ChatMessage
渲染:卡片正常显示、未落到 invalid content;展开显示全部 5 条、收起回到 3 条;截图确认视觉正常。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c709abbfa4
commit
5bc3fee20b
+5
-2
@@ -22356,6 +22356,9 @@ class BatchForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().C
|
||||
});
|
||||
}
|
||||
}
|
||||
forwardMode() {
|
||||
return this.state.multiSelect ? 'bundle' : 'separate';
|
||||
}
|
||||
handleCancelConfirm() {
|
||||
this.setState({
|
||||
confirmTargets: null,
|
||||
@@ -22382,7 +22385,7 @@ class BatchForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().C
|
||||
sending: true,
|
||||
error: null
|
||||
});
|
||||
(0,_lib_im_api_js__WEBPACK_IMPORTED_MODULE_4__.forwardMessages)('separate', sources, this.state.confirmTargets, this.state.comment.trim()).then(result => {
|
||||
(0,_lib_im_api_js__WEBPACK_IMPORTED_MODULE_4__.forwardMessages)(this.forwardMode(), sources, this.state.confirmTargets, this.state.comment.trim()).then(result => {
|
||||
const failed = result && result.failed || [];
|
||||
if (failed.length) {
|
||||
this.setState({
|
||||
@@ -22429,7 +22432,7 @@ class BatchForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().C
|
||||
value: this.state.comment,
|
||||
onChange: this.handleCommentChange,
|
||||
disabled: this.state.sending,
|
||||
placeholder: '[逐条转发]共' + this.props.seqs.length + '条消息'
|
||||
placeholder: (this.forwardMode() === 'bundle' ? '[合并转发]共' : '[逐条转发]共') + this.props.seqs.length + '条消息'
|
||||
}, void 0, false), this.state.error ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
|
||||
className: "auth-field-error",
|
||||
children: this.state.error
|
||||
|
||||
Reference in New Issue
Block a user