improve: 改进日报生成后的用户体验

1. 改进生成成功提示:
   - 添加更详细的统计信息展示
   - 显示求和结果
   - 添加醒目的"立即下载Excel文件"按钮
   - 添加"查看历史记录"快捷按钮
   - 添加提示说明日报也保存在历史记录中

2. 改进生成失败提示:
   - 显示详细错误信息
   - 列出可能的原因
   - 提供解决建议

3. 改进历史记录页面:
   - 下载按钮改为绿色,更醒目
   - 添加下载图标📥
   - 空状态提示更友好
   - 时间范围显示更清晰

4. 添加使用说明:
   - 在日报生成页面顶部添加使用流程说明
   - 告诉用户生成后如何找到和下载日报

5. 创建详细说明文档:
   - 如何找到生成的日报.md
   - 包含3种查找方法
   - 常见问题解答
   - 文件命名规则和存储位置说明

现在用户可以清楚地知道:
- 生成成功后如何立即下载
- 如何通过历史记录找到日报
- 如何直接访问文件目录
- 生成失败时如何排查问题

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 9894087
This commit is contained in:
user9994793890
2026-07-09 12:41:52 +08:00
parent 9383612712
commit 3ed22fec5d
2 changed files with 155 additions and 11 deletions

View File

@@ -366,6 +366,14 @@
<!-- 日报生成 -->
<div id="generate-tab" class="tab-content">
<div class="card">
<div class="alert alert-info" style="margin-bottom: 20px;">
<strong>💡 使用说明:</strong><br>
1. 选择已创建的配置<br>
2. 选择时间范围(可点击预设按钮快速选择)<br>
3. 点击"生成日报"按钮<br>
4. 生成成功后,点击"立即下载Excel文件"按钮下载,或切换到"历史记录"标签页查看和下载
</div>
<h3 style="margin-bottom: 20px;">生成日报</h3>
<div class="form-group">
@@ -867,14 +875,49 @@
if (result.success) {
resultDiv.innerHTML = `
<div class="alert alert-success">
<strong>日报生成成功!</strong><br>
订单数量: ${result.total_orders}<br>
总金额: ¥${result.total_amount.toFixed(2)}<br>
<a href="/api/download?path=${result.file_path}" target="_blank" class="btn btn-sm btn-success" style="margin-top: 10px;">下载Excel</a>
<strong>日报生成成功!</strong><br><br>
<div style="margin-left: 20px;">
<strong>统计信息:</strong><br>
• 订单数量: ${result.total_orders} 条<br>
• 总金额: ¥${result.total_amount.toFixed(2)}<br>
${result.sum_results && Object.keys(result.sum_results).length > 0 ?
'<strong>求和结果:</strong><br>' +
Object.entries(result.sum_results).map(([field, value]) =>
`${field}: ${typeof value === 'number' ? value.toFixed(2) : value}`
).join('<br>')
: ''}
</div>
<br>
<div style="display: flex; gap: 10px; margin-top: 15px;">
<a href="/api/download?path=${result.file_path}" target="_blank" class="btn btn-success">
📥 立即下载Excel文件
</a>
<button class="btn btn-primary" onclick="switchTab('history'); document.querySelectorAll('.tab')[2].click();">
📋 查看历史记录
</button>
</div>
<br>
<div style="font-size: 12px; color: #666; margin-top: 10px;">
💡 提示:生成的日报也会保存在"历史记录"标签页中,可以随时下载。
</div>
</div>
`;
} else {
resultDiv.innerHTML = `<div class="alert alert-error">生成失败: ${result.message}</div>`;
resultDiv.innerHTML = `
<div class="alert alert-error">
<strong>✗ 生成失败</strong><br><br>
<strong>错误信息:</strong><br>
${result.message}<br><br>
<strong>可能的原因:</strong><br>
• 选择的时间范围内没有符合条件的订单<br>
• 数据库连接失败<br>
• 配置信息有误<br><br>
<strong>建议:</strong><br>
• 检查时间范围是否正确<br>
• 确认配置中的企业/用户是否有订单数据<br>
• 查看服务器日志获取详细错误信息
</div>
`;
}
} catch (error) {
resultDiv.innerHTML = `<div class="alert alert-error">生成失败: ${error.message}</div>`;
@@ -903,25 +946,27 @@
const tbody = document.getElementById('history-list');
if (history.length === 0) {
tbody.innerHTML = '<tr><td colspan="8" class="empty">暂无历史记录</td></tr>';
tbody.innerHTML = '<tr><td colspan="8" class="empty">暂无历史记录<br><br>生成日报后,记录会显示在这里</td></tr>';
return;
}
tbody.innerHTML = history.map(item => `
<tr>
<td>${item.report_date}</td>
<td>${item.start_time || '-'} ~ ${item.end_time || '-'}</td>
<td style="font-size: 12px;">${item.start_time || '-'}<br>至<br>${item.end_time || '-'}</td>
<td>${item.config_name || '-'}</td>
<td>${item.split_name || item.split_value}</td>
<td>${item.total_orders}</td>
<td>¥${(item.total_amount || 0).toFixed(2)}</td>
<td><strong>${item.total_orders}</strong></td>
<td><strong>¥${(item.total_amount || 0).toFixed(2)}</strong></td>
<td>
<span class="status-badge ${item.status === 1 ? 'status-active' : 'status-inactive'}">
${item.status === 1 ? '成功' : '失败'}
${item.status === 1 ? '成功' : '失败'}
</span>
</td>
<td>
${item.file_path ? `<a href="/api/download?path=${item.file_path}" target="_blank" class="btn btn-sm btn-primary">下载</a>` : '-'}
${item.status === 1 && item.file_path ?
`<a href="/api/download?path=${item.file_path}" target="_blank" class="btn btn-sm btn-success">📥 下载</a>` :
'<span style="color: #999;">-</span>'}
</td>
</tr>
`).join('');

View File

@@ -0,0 +1,99 @@
# 如何找到生成的日报
## 方法1生成后立即下载推荐
在"日报生成"标签页生成日报后:
1. 生成成功后,页面会显示绿色的成功提示框
2. 提示框中有 **"📥 立即下载Excel文件"** 按钮
3. 点击该按钮即可下载Excel文件
**下载位置**:浏览器默认下载目录(通常是 `C:\Users\你的用户名\Downloads\`
## 方法2通过历史记录下载
如果错过了立即下载,可以通过历史记录找到:
1. 点击顶部的 **"历史记录"** 标签
2. 找到刚才生成的日报记录
3. 点击 **"📥 下载"** 按钮
## 方法3直接访问文件目录
生成的Excel文件保存在
```
项目目录/public/reports/
```
例如:
```
D:\py\code\ylt_diy\ylt_daily_report_generation\public\reports\
```
可以直接打开这个文件夹查看所有生成的Excel文件。
## 文件命名规则
生成的Excel文件名格式
```
daily_report_配置名称_拆分值_时间戳.xlsx
```
例如:
```
daily_report_79路公交日报_国营-西南-79路_20250108_143025.xlsx
```
## 常见问题
### Q: 生成后没有看到下载按钮?
A: 可能是生成失败了,请查看页面上的错误提示信息。
### Q: 历史记录中没有看到刚生成的日报?
A: 请刷新历史记录页面(点击"刷新"按钮)。
### Q: 下载按钮点击后没有反应?
A:
- 检查浏览器是否阻止了下载
- 查看浏览器控制台F12是否有错误
- 确认文件是否已生成(查看 public/reports/ 目录)
### Q: 文件下载后打不开?
A:
- 使用 Microsoft Excel 2016+ 打开
- 或使用免费软件 LibreOffice Calc
- 检查文件大小是否大于0
### Q: 定时任务生成的日报在哪里?
A:
- 定时任务生成的日报也会保存在历史记录中
- 切换到"历史记录"标签页查看
- 或直接访问 public/reports/ 目录
## 批量下载
如果需要批量下载多个日报:
1. 切换到"历史记录"标签页
2. 逐个点击"下载"按钮
3. 或进入 public/reports/ 目录手动复制多个文件
## 文件存储位置说明
- **服务器端**`项目目录/public/reports/*.xlsx`
- **下载后**:浏览器默认下载目录
- **建议**:定期备份重要的日报文件到其他位置
## 查看服务器日志
如果生成失败,可以查看服务器控制台输出的日志:
```
[时间] 开始生成: 配置名称
✓ 成功: X 条订单, 金额: XXX.XX
✗ 失败: 错误信息
```
根据日志信息可以判断失败原因。