hookehuyr

feat(plan): 优化计划书删除用户体验

- 删除后保持在当前页,不再跳回第1页
- 本地立即移除删除的项(用户马上看到效果)
- 如果当前页被删空,自动回到上一页
- 静默刷新当前页数据(后台同步,用户无感知)

影响文件:
- src/pages/plan/index.vue

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
......@@ -5,6 +5,23 @@
---
## [2026-02-11] - 优化计划书删除用户体验
### 优化
- **删除后保持在当前页**
- 删除计划书后,不再跳回第1页,而是停留在当前页
- 本地立即移除删除的项(用户马上看到效果)
- 如果当前页被删空,自动回到上一页(而不是第1页)
- 静默刷新当前页数据(后台同步,用户无感知)
**详细信息**
- **影响文件**: src/pages/plan/index.vue
- **技术栈**: Taro 4, Vue 3, Composition API
- **测试状态**: 已通过 ESLint 检查
- **备注**: 提升用户体验,删除后无需重新翻页
---
## [2026-02-11] - 统一分页起始页码从0开始
### 修复
......
......@@ -519,6 +519,11 @@ const onView = async (item) => {
/**
* 删除计划书
* @description 调用删除API删除计划书
*
* **用户体验优化**:删除后保持在当前页,避免跳回第1页
* - 本地立即移除删除的项(用户马上看到效果)
* - 如果当前页删空了,自动回到上一页
* - 否则静默刷新当前页(后台同步数据,用户无感知)
*/
const onDelete = async (item) => {
Taro.showModal({
......@@ -537,10 +542,28 @@ const onDelete = async (item) => {
duration: 1500
})
// 重新加载列表
currentPage.value = 0
hasMore.value = true
await fetchPlanList(0, pageSize, false)
// ✅ 改进:从本地列表中立即移除(用户马上看到效果)
const index = currentList.value.findIndex(i => i.id === item.id)
if (index !== -1) {
currentList.value.splice(index, 1)
}
// ✅ 处理边界:如果当前页删空了,回到上一页
if (currentList.value.length === 0 && currentPage.value > 0) {
currentPage.value--
await fetchPlanList(currentPage.value, pageSize, false)
} else {
// ✅ 否则静默刷新当前页(后台同步数据,用户无感知)
fetchPlanList(currentPage.value, pageSize, false)
.then(() => {
// 刷新成功,数据已同步
})
.catch((err) => {
// 即使刷新失败也没关系,本地已经移除了
// 下次用户翻页或刷新时会自动同步
console.warn('静默刷新失败:', err)
})
}
} else {
Taro.showToast({
title: deleteRes.msg || '删除失败',
......