feat: 新增支付页面接口,为接入支付宝做准备
- GET /payment: 套餐选择页(无需认证,外部浏览器打开) - GET /payment/page: 支付引导页(需 JWT,创建订单) - GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT) - AppState 新增支付宝配置字段(可选) - afterbody.js: PDF下载增加状态提示和重试按钮
This commit is contained in:
@@ -232,17 +232,95 @@ const WeatherReport = (function () {
|
||||
html2pdf().set(options).from(htmlContent).save();
|
||||
}
|
||||
|
||||
// 下载状态管理(供重试使用)
|
||||
let downloadState = {
|
||||
ready: false,
|
||||
html: null,
|
||||
filename: null,
|
||||
};
|
||||
|
||||
// 下载提示浮层
|
||||
function showDownloadPrompt(type, message) {
|
||||
let overlay = document.getElementById("download-overlay");
|
||||
if (!overlay) {
|
||||
overlay = document.createElement("div");
|
||||
overlay.id = "download-overlay";
|
||||
overlay.innerHTML = `
|
||||
<style>
|
||||
#download-overlay {
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0;
|
||||
z-index: 9999;
|
||||
padding: 16px;
|
||||
text-align: center;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
transition: opacity 0.3s;
|
||||
pointer-events: none;
|
||||
}
|
||||
#download-overlay .msg {
|
||||
display: inline-block;
|
||||
background: rgba(0,0,0,0.75);
|
||||
color: #fff;
|
||||
padding: 12px 24px;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
}
|
||||
#download-overlay .retry-btn {
|
||||
display: inline-block;
|
||||
margin-left: 12px;
|
||||
background: #1677ff;
|
||||
color: #fff;
|
||||
border: none;
|
||||
padding: 8px 16px;
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
pointer-events: auto;
|
||||
}
|
||||
</style>
|
||||
<span class="msg" id="dl-msg"></span>
|
||||
<span class="retry-btn" id="dl-retry" style="display:none" onclick="WeatherReport.retryDownload()">重新下载</span>
|
||||
`;
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
const msgEl = document.getElementById("dl-msg");
|
||||
const retryEl = document.getElementById("dl-retry");
|
||||
if (msgEl) msgEl.textContent = message;
|
||||
if (retryEl) {
|
||||
if (type === "loading" || type === "success") {
|
||||
retryEl.style.display = "none";
|
||||
} else {
|
||||
retryEl.style.display = "inline-block";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function hideDownloadPrompt() {
|
||||
const overlay = document.getElementById("download-overlay");
|
||||
if (overlay) {
|
||||
overlay.style.opacity = "0";
|
||||
setTimeout(() => { if (overlay) overlay.remove(); }, 300);
|
||||
}
|
||||
}
|
||||
|
||||
function retryDownload() {
|
||||
if (!downloadState.ready || !downloadState.html || !downloadState.filename) {
|
||||
showDownloadPrompt("error", "数据未准备好,请刷新页面重试");
|
||||
return;
|
||||
}
|
||||
downloadPDF(downloadState.html, downloadState.filename);
|
||||
showDownloadPrompt("success", "正在重新下载,请稍候...");
|
||||
}
|
||||
|
||||
function init() {
|
||||
if (typeof window.weatherData === "undefined") {
|
||||
console.error("错误:window.weatherData 未定义");
|
||||
showDownloadPrompt("error", "数据加载失败,请刷新页面重试");
|
||||
return;
|
||||
}
|
||||
|
||||
const data = window.weatherData;
|
||||
console.log("【调试】从后端获取的 weatherData:", data);
|
||||
console.log("【调试】inspectionType:", data.inspectionType);
|
||||
console.log("【调试】assignmentNumber:", data.assignmentNumber);
|
||||
console.log("【调试】title:", data.title);
|
||||
|
||||
const versionEl = document.querySelector(".version");
|
||||
if (versionEl) {
|
||||
@@ -251,7 +329,30 @@ const WeatherReport = (function () {
|
||||
|
||||
const html = buildReportHTML(data);
|
||||
const filename = `${data.id}-${data.version || "unknown"}.pdf`;
|
||||
downloadPDF(html, filename);
|
||||
|
||||
// 保存下载状态,供重试使用
|
||||
downloadState.ready = true;
|
||||
downloadState.html = html;
|
||||
downloadState.filename = filename;
|
||||
|
||||
// 显示下载中提示
|
||||
showDownloadPrompt("loading", "正在生成 PDF,请稍候...");
|
||||
|
||||
// 延迟执行下载,让用户看到提示
|
||||
setTimeout(() => {
|
||||
downloadPDF(html, filename);
|
||||
// 显示成功提示,3秒后消失
|
||||
showDownloadPrompt("success", "PDF 开始下载...");
|
||||
setTimeout(() => hideDownloadPrompt(), 3000);
|
||||
// 额外等3秒,如果提示已消失(下载成功)则不再显示重试
|
||||
// 如果提示还在(下载失败),则替换为重试按钮
|
||||
setTimeout(() => {
|
||||
const overlay = document.getElementById("download-overlay");
|
||||
if (overlay) {
|
||||
showDownloadPrompt("retry", "下载未开始,请点击重试");
|
||||
}
|
||||
}, 3300);
|
||||
}, 300);
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
@@ -293,5 +394,6 @@ const WeatherReport = (function () {
|
||||
init,
|
||||
toggleFormula,
|
||||
showNotification,
|
||||
retryDownload,
|
||||
};
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user