feat(plan): 优化计划书删除用户体验
- 删除后保持在当前页,不再跳回第1页 - 本地立即移除删除的项(用户马上看到效果) - 如果当前页被删空,自动回到上一页 - 静默刷新当前页数据(后台同步,用户无感知) 影响文件: - src/pages/plan/index.vue Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Showing
2 changed files
with
44 additions
and
4 deletions
| ... | @@ -5,6 +5,23 @@ | ... | @@ -5,6 +5,23 @@ |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | +## [2026-02-11] - 优化计划书删除用户体验 | ||
| 9 | + | ||
| 10 | +### 优化 | ||
| 11 | +- **删除后保持在当前页**: | ||
| 12 | + - 删除计划书后,不再跳回第1页,而是停留在当前页 | ||
| 13 | + - 本地立即移除删除的项(用户马上看到效果) | ||
| 14 | + - 如果当前页被删空,自动回到上一页(而不是第1页) | ||
| 15 | + - 静默刷新当前页数据(后台同步,用户无感知) | ||
| 16 | + | ||
| 17 | +**详细信息**: | ||
| 18 | +- **影响文件**: src/pages/plan/index.vue | ||
| 19 | +- **技术栈**: Taro 4, Vue 3, Composition API | ||
| 20 | +- **测试状态**: 已通过 ESLint 检查 | ||
| 21 | +- **备注**: 提升用户体验,删除后无需重新翻页 | ||
| 22 | + | ||
| 23 | +--- | ||
| 24 | + | ||
| 8 | ## [2026-02-11] - 统一分页起始页码从0开始 | 25 | ## [2026-02-11] - 统一分页起始页码从0开始 |
| 9 | 26 | ||
| 10 | ### 修复 | 27 | ### 修复 | ... | ... |
| ... | @@ -519,6 +519,11 @@ const onView = async (item) => { | ... | @@ -519,6 +519,11 @@ const onView = async (item) => { |
| 519 | /** | 519 | /** |
| 520 | * 删除计划书 | 520 | * 删除计划书 |
| 521 | * @description 调用删除API删除计划书 | 521 | * @description 调用删除API删除计划书 |
| 522 | + * | ||
| 523 | + * **用户体验优化**:删除后保持在当前页,避免跳回第1页 | ||
| 524 | + * - 本地立即移除删除的项(用户马上看到效果) | ||
| 525 | + * - 如果当前页删空了,自动回到上一页 | ||
| 526 | + * - 否则静默刷新当前页(后台同步数据,用户无感知) | ||
| 522 | */ | 527 | */ |
| 523 | const onDelete = async (item) => { | 528 | const onDelete = async (item) => { |
| 524 | Taro.showModal({ | 529 | Taro.showModal({ |
| ... | @@ -537,10 +542,28 @@ const onDelete = async (item) => { | ... | @@ -537,10 +542,28 @@ const onDelete = async (item) => { |
| 537 | duration: 1500 | 542 | duration: 1500 |
| 538 | }) | 543 | }) |
| 539 | 544 | ||
| 540 | - // 重新加载列表 | 545 | + // ✅ 改进:从本地列表中立即移除(用户马上看到效果) |
| 541 | - currentPage.value = 0 | 546 | + const index = currentList.value.findIndex(i => i.id === item.id) |
| 542 | - hasMore.value = true | 547 | + if (index !== -1) { |
| 543 | - await fetchPlanList(0, pageSize, false) | 548 | + currentList.value.splice(index, 1) |
| 549 | + } | ||
| 550 | + | ||
| 551 | + // ✅ 处理边界:如果当前页删空了,回到上一页 | ||
| 552 | + if (currentList.value.length === 0 && currentPage.value > 0) { | ||
| 553 | + currentPage.value-- | ||
| 554 | + await fetchPlanList(currentPage.value, pageSize, false) | ||
| 555 | + } else { | ||
| 556 | + // ✅ 否则静默刷新当前页(后台同步数据,用户无感知) | ||
| 557 | + fetchPlanList(currentPage.value, pageSize, false) | ||
| 558 | + .then(() => { | ||
| 559 | + // 刷新成功,数据已同步 | ||
| 560 | + }) | ||
| 561 | + .catch((err) => { | ||
| 562 | + // 即使刷新失败也没关系,本地已经移除了 | ||
| 563 | + // 下次用户翻页或刷新时会自动同步 | ||
| 564 | + console.warn('静默刷新失败:', err) | ||
| 565 | + }) | ||
| 566 | + } | ||
| 544 | } else { | 567 | } else { |
| 545 | Taro.showToast({ | 568 | Taro.showToast({ |
| 546 | title: deleteRes.msg || '删除失败', | 569 | title: deleteRes.msg || '删除失败', | ... | ... |
-
Please register or login to post a comment