后台成本价、销售价、利润点按费用逐行展示,费用合计用报价官方总价。选完线路只关页面。报价单文件名带上模板名,空运起运地和转人工跟对应工单走。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-05 12:33:34 +08:00
co-authored by Cursor
parent 7c77e45e03
commit e95e8869a6
30 changed files with 1926 additions and 75 deletions
@@ -230,7 +230,7 @@ def render_air_route_ok() -> str:
"""选定成功:短暂展示后关企微 H5。"""
return _wrap(
"已选定",
"<div class='msg'><h1>已选定</h1><p>正在返回企微,请查看价格明细。</p></div>",
"<div class='msg'><h1>已选定</h1><p>正在关闭页面,请在对话里查看价格明细。</p></div>",
auto_close=True,
)
@@ -59,7 +59,7 @@ def render_land_route_ok() -> str:
"""选定成功:短暂展示后关企微 H5。"""
return _wrap(
"已选定",
"<div class='msg'><h1>已选定</h1><p>正在返回企微,请查看价格明细。</p></div>",
"<div class='msg'><h1>已选定</h1><p>正在关闭页面,请在对话里查看价格明细。</p></div>",
auto_close=True,
)
+39 -23
View File
@@ -2,8 +2,9 @@
企微内嵌 H5 成功后自动关页。
本文件职责:给附件上传成功、选线路成功页一段共用脚本。
手机端可走 WeixinJSBridge;企微 Windows 客户端没有这套桥,必须像复制工单号页一样
先加载 wecom-jssdk、用现成 /inquiry-form/jsapi-signature 做 ww.register,再 closeWindow。
手机端只调一次 WeixinJSBridge.closeWindow,关掉当前 H5 后留在询价对话里。
再调 ww/wx/window.close 会把询价小助手整个退出,回到企业微信首页。
电脑企微没有这套桥,加载 wecom-jssdk、用 /inquiry-form/jsapi-signature 注册后再关一次。
失败、过期页不要挂这段。
副作用:只产出 HTML 片段;关窗签名走浏览器短请求,不占智能体请求线程做慢活。
"""
@@ -46,30 +47,37 @@ def wecom_auto_close_script() -> str:
}};
}}
function nativeClose() {{
try {{
if (typeof WeixinJSBridge !== "undefined") {{
WeixinJSBridge.call("closeWindow");
}}
}} catch (e) {{}}
try {{
if (window.ww && typeof ww.closeWindow === "function") {{
ww.closeWindow();
}}
}} catch (e) {{}}
try {{
if (window.wx && typeof wx.closeWindow === "function") {{
wx.closeWindow();
}}
}} catch (e) {{}}
try {{ window.close(); }} catch (e) {{}}
var closed = false;
function closeOnce(fn) {{
if (closed) return;
closed = true;
try {{ fn(); }} catch (e) {{}}
}}
// 手机企微有 WeixinJSBridge:只关当前 H5。再调第二套关闭会把询价小助手整个退出,回到企业微信首页。
function closeMobile() {{
closeOnce(function () {{ WeixinJSBridge.call("closeWindow"); }});
}}
// 电脑企微没有 WeixinJSBridge,注册 JS-SDK 后只关一次。
function closeDesktop() {{
closeOnce(function () {{
if (window.ww && typeof ww.closeWindow === "function") ww.closeWindow();
else if (window.wx && typeof wx.closeWindow === "function") wx.closeWindow();
}});
}}
function boot() {{
if (typeof WeixinJSBridge !== "undefined") {{
setTimeout(nativeClose, {delay});
setTimeout(closeMobile, {delay});
return;
}}
document.addEventListener("WeixinJSBridgeReady", nativeClose, false);
var sawBridge = false;
document.addEventListener("WeixinJSBridgeReady", function () {{
sawBridge = true;
setTimeout(closeMobile, {delay});
}}, false);
var ready = Promise.resolve();
if (window.ww && ww.register && corpId) {{
ready = ww.register({{
@@ -81,9 +89,17 @@ def wecom_auto_close_script() -> str:
}}).catch(function () {{ return null; }});
}}
ready.then(function () {{
setTimeout(nativeClose, {delay});
setTimeout(function () {{
if (sawBridge || typeof WeixinJSBridge !== "undefined") {{
if (!closed) closeMobile();
return;
}}
closeDesktop();
}}, {delay});
}}).catch(function () {{
setTimeout(nativeClose, {delay});
setTimeout(function () {{
if (!closed && typeof WeixinJSBridge === "undefined") closeDesktop();
}}, {delay});
}});
}}