polish(admin): 各页空态与文案轻量打磨

- 会话列表/推送日志表空态给动作指引(empty-text,不再落 Element 默认「暂无数据」)
- 统计六图空态文案经 useChart 新增 emptyText 参数下发「暂无数据——产生会话后展示分析」
  (textContent 替代 innerHTML,缺省值不变,其余消费方零影响)
- 平台设置存储总览空表指引「暂无设置项——从上方推荐键开始」
- 租户详情站点表空态指引「暂无站点——点右上角「新建站点」创建」
- CredsPane 邮件测试 hint 的字面 **已保存** 星号改 <b>(模板不吃 markdown)
- 品牌预览卡右侧副标去掉与新增副标题重复的「本地简化」字样
- 仪表盘/租户列表/会话页既有 ElEmpty 已是动作指引文案,核对后无需改动

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-14 21:21:53 +08:00
parent 914bd49128
commit f92a4be139
7 changed files with 35 additions and 13 deletions
+8 -6
View File
@@ -447,9 +447,9 @@ export function useChart(options: UseChartOptions = {}) {
}
}
// 空状态管理器
// 空状态管理器(emptyText 可自定义空态文案,缺省「暂无数据」)
const emptyStateManager = {
create: () => {
create: (emptyText?: string) => {
if (!chartRef.value || emptyStateDiv) return
emptyStateDiv = document.createElement('div')
@@ -468,7 +468,9 @@ export function useChart(options: UseChartOptions = {}) {
background: transparent;
z-index: 10;
`
emptyStateDiv.innerHTML = `<span>暂无数据</span>`
const emptyLabel = document.createElement('span')
emptyLabel.textContent = emptyText ?? '暂无数据'
emptyStateDiv.appendChild(emptyLabel)
// 确保父容器有相对定位
if (
@@ -495,8 +497,8 @@ export function useChart(options: UseChartOptions = {}) {
}
}
// 初始化图表
const initChart = (options: EChartsOption = {}, isEmpty: boolean = false) => {
// 初始化图表(emptyText = 空态文案,缺省「暂无数据」)
const initChart = (options: EChartsOption = {}, isEmpty: boolean = false, emptyText?: string) => {
if (!chartRef.value || isDestroyed) return
const mergedOptions = { ...initOptions, ...options }
@@ -507,7 +509,7 @@ export function useChart(options: UseChartOptions = {}) {
if (chart) {
chart.clear()
}
emptyStateManager.create()
emptyStateManager.create(emptyText)
return
} else {
// 有数据时移除空状态div
+1 -1
View File
@@ -101,7 +101,7 @@
</ElButton>
</div>
<p class="test-hint">
系统用**已保存**的邮件配置真发一封(主题「[all-kefu] SMTP 测试邮件」)
系统用<b>已保存</b>的邮件配置真发一封(主题「[all-kefu] SMTP 测试邮件」)
——改完先保存再测试;SMTP 未配置时返回 400。
</p>
<ElAlert
+1 -1
View File
@@ -285,7 +285,7 @@
<span class="card-title">挂件预览</span>
<p class="card-subtitle">本地简化预览(真机效果以嵌入站点为准)</p>
</div>
<span class="card-sub">本地简化模拟,随表单即时变化</span>
<span class="card-sub">随表单即时变化</span>
</div>
</template>
+14 -2
View File
@@ -102,7 +102,13 @@
<ElAlert v-if="listError" type="error" :closable="false" :title="listError" class="load-error">
<ElButton size="small" :loading="listLoading" @click="reloadList">重试</ElButton>
</ElAlert>
<ElTable v-else v-loading="listLoading" :data="listRows" row-key="id">
<ElTable
v-else
v-loading="listLoading"
:data="listRows"
row-key="id"
empty-text="暂无会话——客户开始聊天后会出现在这里"
>
<ElTableColumn label="时间" width="150">
<template #default="{ row }">
<span>{{ formatDateTime(row.created_at) }}</span>
@@ -203,7 +209,13 @@
<ElAlert v-if="logsError" type="error" :closable="false" :title="logsError" class="load-error">
<ElButton size="small" :loading="logsLoading" @click="reloadLogs">重试</ElButton>
</ElAlert>
<ElTable v-else v-loading="logsLoading" :data="logRows" row-key="id">
<ElTable
v-else
v-loading="logsLoading"
:data="logRows"
row-key="id"
empty-text="暂无推送记录——产生线索推送后会出现在这里"
>
<ElTableColumn label="时间" width="150">
<template #default="{ row }">
<span>{{ formatDateTime(row.created_at) }}</span>
+1 -1
View File
@@ -122,7 +122,7 @@
<p class="table-hint">
密钥键值一律脱敏展示;推荐键之外的键(历史脚本 / API 写入)暂不提供界面编辑。
</p>
<ElTable :data="items" size="small" border>
<ElTable :data="items" size="small" border empty-text="暂无设置项——从上方推荐键开始">
<ElTableColumn prop="key" label="键" min-width="180" />
<ElTableColumn label="值" min-width="260">
<template #default="{ row }">
+4 -1
View File
@@ -280,6 +280,9 @@
const { chartRef: countryRef } = countryChart
const { isDark } = trendChart
/** 图表空态文案(spec §7:空态给动作指引,不写「暂无数据」了事) */
const CHART_EMPTY_TEXT = '暂无数据——产生会话后展示分析'
/** 重绘单图:有数据先 clear 再 setOption(类目数变化不残留旧轴),空数据走空态 */
function render(
chart: ReturnType<typeof useChart>,
@@ -287,7 +290,7 @@
empty: boolean
): void {
if (!empty) chart.getChartInstance()?.clear()
chart.initChart(option, empty)
chart.initChart(option, empty, CHART_EMPTY_TEXT)
}
/** 名义类目条目截断上限(Top10;超出在卡片 sub 标注总数) */
+6 -1
View File
@@ -163,7 +163,12 @@
<!-- 站点列表 -->
<section class="detail-section">
<h4 class="section-title">站点({{ detail.sites.length }})</h4>
<ElTable :data="detail.sites" row-key="slug" size="small">
<ElTable
:data="detail.sites"
row-key="slug"
size="small"
empty-text="暂无站点——点右上角「新建站点」创建"
>
<ElTableColumn label="站点" width="110" show-overflow-tooltip>
<template #default="{ row }">
<span class="mono">{{ row.slug }}</span>