# 房务详情「询房」按钮复制失败 > 模块:管理后台 · 房务工作台 `/housekeeper/orders` > 类型:**前端修复(复制降级修正,无需新增后端接口)** > 日期:2026-07-03 > 关联工单:#4732 > 背景:房务详情弹窗中,房务点击每日行程右侧「询房」按钮后,页面提示「复制失败,请手动选中复制」。当前业务口径是“询房=复制话术”,不恢复记录式询房。 ## 问题现象 测试页面: - 页面:`http://192.168.100.160:9527/housekeeper/orders` - 弹窗:房务订单详情 - 订单示例:`HL20260702232103376` - 操作:点击某天行程右侧「询房」 - 当前结果:右上角 toast 提示「复制失败,请手动选中复制」 ## 后端当前口径 后端不需要新增接口。 询房话术仍使用既有 preview 能力: ```http POST /v3/admin/order/inquiry/preview ``` 业务口径: - 询房已经简化为“复制话术”。 - 不恢复记录式询房、询房历史、发起询房记录等已删除能力。 - 前端点击「询房」时,应先拿 preview 返回的话术,再完成复制。 ## 【前端 · 管理后台】需改动 ### 1. 复制逻辑需兼容 HTTP 测试环境 当前测试前端是 `http://192.168.100.160:9527`,属于非安全源。浏览器可能拒绝 `navigator.clipboard.writeText`,导致自动复制失败。 前端需要在 Clipboard API 不可用或被拒绝时,提供可靠降级,例如: - 优先使用 `navigator.clipboard.writeText` - 失败后降级到临时 `textarea` + `document.execCommand('copy')` - 降级仍失败时,再提示用户手动复制,并展示可选中的话术内容 ### 2. 不要把 Clipboard API 权限失败当成接口失败 需要区分两类错误: | 场景 | 期望提示 | |------|----------| | `/inquiry/preview` 接口失败或返回空话术 | 提示“生成询房话术失败”或等价接口错误 | | preview 成功但浏览器拒绝复制 | 尝试降级复制;降级失败后提示“复制失败,请手动复制” | ### 3. 复制内容为空要阻断 如果 preview 返回的文本为空、只有空白字符,前端不要执行复制,应提示话术为空或生成失败,避免误报“已复制”。 ## 验收标准 | 场景 | 期望 | |------|------| | `http://192.168.100.160:9527/housekeeper/orders` 点击「询房」 | 能复制 preview 话术,不再误报复制失败 | | Clipboard API 被浏览器拒绝 | 自动走降级复制 | | preview 接口失败 | 显示接口/生成失败,不显示复制成功 | | preview 返回空文本 | 不复制,提示话术为空或生成失败 | | 降级复制仍失败 | 弹出或展示可手动选中的询房话术 | ## 影响范围 | 页面/能力 | 说明 | |-----------|------| | `/housekeeper/orders` | 房务订单详情弹窗每日行程「询房」按钮 | | `/v3/admin/order/inquiry/preview` | 仅作为现有话术生成接口使用,无后端改动 |