# 任务放弃功能改进 - 快速参考 ## 核心改进 ### 1️⃣ 已放弃任务长按菜单 - **位置**:任务列表页 → 已放弃区域 → 长按任务 - **显示**:单个选项"↩️ 取消放弃" - **行为**:点击直接执行,无需二次确认 ### 2️⃣ 取消放弃流程 ``` 已放弃任务 → 长按 → 点击"取消放弃" → 直接移回一般任务区域 ``` **状态变化**: - `status`: `abandoned` → `pending` - `is_pinned`: 保持 `false` - `abandonReason`: 清除 ### 3️⃣ 键盘交互优化 - **输入框激活**:键盘弹出时弹窗自动上移 - **内容保护**:添加占位区域防止被键盘遮挡 - **按钮位置**:固定在键盘上方 - **视觉反馈**:输入框获得焦点时边框变蓝 ## 文件修改清单 | 文件 | 修改内容 | |------|--------| | `P4-miniapp-core-business.md` | 补充任务类型与状态关系说明 | | `task-list.wxml` | 长按菜单条件渲染 + 键盘事件 | | `task-list.ts` | 新增 `onCtxCancelAbandon` + 键盘处理 | | `task-list.wxss` | 键盘交互样式 | | `task-detail.wxml` | 键盘事件 + 占位区域 | | `task-detail.ts` | 键盘处理 + 取消放弃逻辑 | | `task-detail.wxss` | 键盘交互样式 | ## 关键代码片段 ### 长按菜单条件渲染 ```xml ↩️ 取消放弃 ``` ### 键盘高度管理 ```typescript // 键盘弹出 onAbandonTextareaFocus(e: WechatMiniprogram.InputEvent) { const height = (e as any).detail?.height ?? 0 this.setData({ keyboardHeight: height }) } // 键盘收起 onAbandonTextareaBlur() { this.setData({ keyboardHeight: 0 }) } ``` ### 动态样式绑定 ```xml ``` ## 测试检查清单 - [ ] 长按已放弃任务显示"取消放弃" - [ ] 点击"取消放弃"直接执行 - [ ] 任务移回一般任务区域 - [ ] 输入放弃原因时键盘不遮挡内容 - [ ] 按钮固定在键盘上方 - [ ] 输入框边框变蓝 - [ ] 任务列表页和详情页行为一致 ## 相关概念 ### 任务类型 vs 任务状态 - **任务类型**(task_type):业务性质,系统自动分配 - `high_priority_recall` / `priority_recall` / `follow_up_visit` / `relationship_building` - **任务状态**(status):生命周期,用户或系统操作改变 - `active` / `inactive` / `completed` / `abandoned` - **置顶状态**(is_pinned):独立标记,用户手动操作 ### 前端展示规则 - **置顶区域**:`is_pinned=true` && `status=active` - **一般任务**:`is_pinned=false` && `status=active` - **已放弃区域**:`status=abandoned`(任务类型保留但灰化) ## 常见问题 **Q: 取消放弃后任务会回到原来的位置吗?** A: 不会。取消放弃后任务会移到一般任务区域的最后,不会回到原来的位置。 **Q: 取消放弃需要输入原因吗?** A: 不需要。取消放弃是直接操作,无需任何确认或输入。 **Q: 键盘弹出时弹窗会完全隐藏吗?** A: 不会。弹窗会自动上移,确保内容可见,按钮固定在键盘上方。 **Q: 备注弹窗的键盘交互是否相同?** A: 是的。备注弹窗组件已经实现了相同的键盘交互,无需额外修改。 --- **更新日期**:2026-03-14 **相关文档**:`docs/TASK_ABANDON_IMPROVEMENTS.md`