diff --git a/yunkes/src/views/analytics/ChurnView.vue b/yunkes/src/views/analytics/ChurnView.vue
index d0c2b8a..b76d555 100644
--- a/yunkes/src/views/analytics/ChurnView.vue
+++ b/yunkes/src/views/analytics/ChurnView.vue
@@ -20,7 +20,7 @@
-
{{ kindHint }}
+ {{ kindHint }}(列排序仅当前页)
@@ -150,9 +150,14 @@ function goChat(row: ChurnRow) {
// CSV 平铺带「归属员工」列 = v1 简化:spec 的「按员工分组」语义由表格列承担
// (spec §3.3 注)。exportListToCsv 自带全量翻页 + BOM + 10000 行安全上限。
async function exportCsv() {
+ // 空检 + 成功条数提示:项目所有 exportListToCsv 调用点的统一 UX(CustomerList 等)
+ if (!total.value) {
+ ElMessage.warning('当前列表为空,无数据可导出')
+ return
+ }
exporting.value = true
try {
- await exportListToCsv({
+ const result = await exportListToCsv({
fetchPage: (p, size) =>
getChurn({
channel: channel.value,
@@ -176,6 +181,7 @@ async function exportCsv() {
],
filename: `流失预警_${kind.value}_${channel.value}`,
})
+ ElMessage.success(`已导出 ${result.rows} 条`)
} catch (e) {
ElMessage.error(`导出失败:${e instanceof Error ? e.message : String(e)}`)
} finally {