120 lines
3.8 KiB
Markdown
120 lines
3.8 KiB
Markdown
# 任务放弃功能改进 - 快速参考
|
||
|
||
## 核心改进
|
||
|
||
### 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
|
||
<!-- 已放弃任务:显示"取消放弃" -->
|
||
<block wx:if="{{contextMenuTarget.isAbandoned}}">
|
||
<view class="ctx-item" bindtap="onCtxCancelAbandon">
|
||
<text class="ctx-emoji">↩️</text>
|
||
<text class="ctx-text">取消放弃</text>
|
||
</view>
|
||
</block>
|
||
<!-- 一般/置顶任务:显示标准菜单 -->
|
||
<block wx:else>
|
||
<!-- 置顶/备注/问问AI/放弃任务 -->
|
||
</block>
|
||
```
|
||
|
||
### 键盘高度管理
|
||
```typescript
|
||
// 键盘弹出
|
||
onAbandonTextareaFocus(e: WechatMiniprogram.InputEvent) {
|
||
const height = (e as any).detail?.height ?? 0
|
||
this.setData({ keyboardHeight: height })
|
||
}
|
||
|
||
// 键盘收起
|
||
onAbandonTextareaBlur() {
|
||
this.setData({ keyboardHeight: 0 })
|
||
}
|
||
```
|
||
|
||
### 动态样式绑定
|
||
```xml
|
||
<view class="abandon-overlay {{keyboardHeight > 0 ? 'abandon-overlay--keyboard-open' : ''}}">
|
||
<view class="abandon-actions {{keyboardHeight > 0 ? 'abandon-actions--float' : ''}}"
|
||
style="{{keyboardHeight > 0 ? 'bottom: ' + keyboardHeight + 'px;' : ''}}">
|
||
</view>
|
||
</view>
|
||
```
|
||
|
||
## 测试检查清单
|
||
|
||
- [ ] 长按已放弃任务显示"取消放弃"
|
||
- [ ] 点击"取消放弃"直接执行
|
||
- [ ] 任务移回一般任务区域
|
||
- [ ] 输入放弃原因时键盘不遮挡内容
|
||
- [ ] 按钮固定在键盘上方
|
||
- [ ] 输入框边框变蓝
|
||
- [ ] 任务列表页和详情页行为一致
|
||
|
||
## 相关概念
|
||
|
||
### 任务类型 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`
|