精简聊天页面说明并静默恢复草稿
This commit is contained in:
+9
-42
@@ -142,9 +142,7 @@ uploadInput.onchange = function(){
|
||||
copy.className = "attachment-copy";
|
||||
const name = document.createElement("strong");
|
||||
name.textContent = data.name;
|
||||
const hint = document.createElement("small");
|
||||
hint.textContent = t("attachmentReady");
|
||||
copy.append(name, hint);
|
||||
copy.append(name);
|
||||
const remove = document.createElement("button");
|
||||
remove.type = "button";
|
||||
remove.className = "attachment-remove";
|
||||
@@ -240,7 +238,7 @@ const I18N = {
|
||||
thinking: "正在思考中...",
|
||||
busyRetry: "服务繁忙,请稍后重试",
|
||||
sessionFail: "会话创建失败,请确认服务已启动",
|
||||
autoWelcome: "您好!欢迎咨询柏悦物流智能客服,可以咨询运费、时效或联系人工客服。订单查询将在客户账号登录并关联后开放。",
|
||||
autoWelcome: "您好!欢迎咨询柏悦物流智能客服,可以咨询运费、时效或联系人工客服。",
|
||||
humanHours: "人工客服工作时间:每天北京时间 8:00-22:00。当前为非工作时间,请留言,工作时间会尽快回复您。",
|
||||
offlinePrompt: "请输入您的留言:",
|
||||
offlineSaved: "留言已提交,工作时间(8:00-22:00)会尽快回复您。",
|
||||
@@ -250,7 +248,6 @@ const I18N = {
|
||||
humanWaiting: "正在排队,消息将由人工客服接入后回复。您也可以返回 AI 继续咨询。",
|
||||
humanActive: "人工客服接待中,消息将发送给人工客服。",
|
||||
returnAI: "返回 AI 问答",
|
||||
humanSent: "已发送给人工客服",
|
||||
humanSending: "正在发送给人工客服…",
|
||||
humanSendFailed: "消息未发送成功,内容已保留,请重试。",
|
||||
humanConnectFailed: "人工客服连接失败,请稍后重试。",
|
||||
@@ -258,7 +255,6 @@ const I18N = {
|
||||
humanReturnFailed: "暂时无法结束人工会话,请重试。",
|
||||
historyLoading: "正在加载这段会话,请稍候…",
|
||||
historyLoadFailed: "会话未加载成功,请重新选择该会话重试,或新建对话。",
|
||||
draftRestored: "已恢复这段会话的未发送草稿。",
|
||||
draftSaveFailed: "草稿暂时无法保存到当前浏览器,刷新前请保留输入内容。",
|
||||
attachmentUnavailable: "图片暂时无法访问,请重新发送附件。",
|
||||
recalled: "该消息已撤回",
|
||||
@@ -268,7 +264,7 @@ const I18N = {
|
||||
networkFail: "网络连接中断,请检查网络后重试",
|
||||
stopped: "已停止生成",
|
||||
stoppedMark: "(已停止生成)",
|
||||
inputPh: "请输入问题、订单号或入仓码…(Enter 发送,Shift+Enter 换行)",
|
||||
inputPh: "输入问题、订单号或入仓码…",
|
||||
send: "发送",
|
||||
stop: "停止",
|
||||
copy: "复制",
|
||||
@@ -280,17 +276,12 @@ const I18N = {
|
||||
retryAIOnly: "请先返回 AI 问答,再重答这条消息。",
|
||||
clickRetry: "点击重试",
|
||||
welcomeTitle: "物流问题,随时为您解答",
|
||||
welcomeSub: "咨询运费、时效或联系人工客服。订单查询需关联客户账号。",
|
||||
welcomeEyebrow: "中欧 · 英国物流服务",
|
||||
serviceScope: "中欧与英国专线咨询",
|
||||
serviceTag: "物流咨询服务",
|
||||
quickLabel: "快捷咨询",
|
||||
footerTrack: "查订单",
|
||||
footerQuote: "专线报价",
|
||||
footerException: "异常处理",
|
||||
footerHuman: "联系人工",
|
||||
disclaimer: "报价与时效仅供参考,请以客服最终确认为准",
|
||||
keyboardHint: "Enter 发送 · Shift + Enter 换行",
|
||||
inputShort: "输入问题…",
|
||||
uploading: "附件正在上传,请稍候…",
|
||||
uploadFailed: "附件上传失败,请重新选择文件",
|
||||
@@ -307,7 +298,6 @@ const I18N = {
|
||||
voiceEmpty: "没有识别到文字,请靠近麦克风重试。", voiceFailed: "语音输入失败,请重试或使用文字输入。",
|
||||
voiceTimeout: "语音处理超时,请重试。", voiceWait: "请等待当前操作完成后,再使用语音输入。",
|
||||
voiceDraft: "输入框还有未发送内容,请先发送或清空后再使用语音。",
|
||||
attachmentReady: "已准备好,发送后将附在消息中",
|
||||
removeAttachment: "移除待发送附件",
|
||||
you: "您",
|
||||
assistant: "柏悦物流助手",
|
||||
@@ -321,15 +311,12 @@ const I18N = {
|
||||
logisticsHistory: "物流轨迹",
|
||||
noLogisticsHistory: "暂无已发生的物流节点",
|
||||
estimatedTracking: "预计节点",
|
||||
legacyTrackingNotice: "历史模拟轨迹,仅供演示,不代表真实订单。",
|
||||
order_inbound: "入仓码", order_shipment: "Shipment ID", order_country: "目的国",
|
||||
order_warehouse: "目的仓", order_transport: "运输方式", order_packages: "件数",
|
||||
order_weight: "申报毛重", order_volume: "申报体积", order_role: "订单层级",
|
||||
order_parent: "父订单号", order_updated: "来源更新时间",
|
||||
moreTracking: "展开全部轨迹",
|
||||
lessTracking: "收起较早轨迹",
|
||||
quickSubs: ["关联客户账号后查询订单与轨迹", "了解线路、费用与预计时效", "咨询延误、签收或理赔问题", "进一步沟通您的物流需求"],
|
||||
welcomeTip: "您可以直接输入问题,也可以点击下面选项快速提问。",
|
||||
hot: "热点问题",
|
||||
recent: "最近对话记录",
|
||||
sideCollapse: "收起侧栏",
|
||||
@@ -357,7 +344,7 @@ const I18N = {
|
||||
thinking: "Thinking...",
|
||||
busyRetry: "Service busy, please try again later",
|
||||
sessionFail: "Failed to create session, please check the service is running",
|
||||
autoWelcome: "Welcome to Baiyue Logistics. Ask about rates, transit times or human support. Order lookup will be available after signing in and linking a customer account.",
|
||||
autoWelcome: "Welcome to Baiyue Logistics. Ask about rates, transit times or human support.",
|
||||
humanHours: "Our team is available daily, 08:00–22:00 China Standard Time (UTC+8). Please leave a message and we will reply during service hours.",
|
||||
offlinePrompt: "Please leave your message:",
|
||||
offlineSaved: "Message submitted. Our team will reply during service hours (08:00–22:00).",
|
||||
@@ -367,7 +354,6 @@ const I18N = {
|
||||
humanWaiting: "You are in the queue. A team member will reply after joining, or you can return to AI chat.",
|
||||
humanActive: "You are chatting with our support team. Messages will be sent to a team member.",
|
||||
returnAI: "Return to AI chat",
|
||||
humanSent: "Sent to our support team",
|
||||
humanSending: "Sending to our support team…",
|
||||
humanSendFailed: "Message not sent. Your text has been kept. Please retry.",
|
||||
humanConnectFailed: "Could not connect to our support team. Please try again.",
|
||||
@@ -375,7 +361,6 @@ const I18N = {
|
||||
humanReturnFailed: "Could not end the support session. Please try again.",
|
||||
historyLoading: "Loading this conversation. Please wait…",
|
||||
historyLoadFailed: "Conversation could not load. Select it again to retry, or start a new chat.",
|
||||
draftRestored: "Your unsent draft has been restored.",
|
||||
draftSaveFailed: "Your browser could not save this draft. Keep a copy before refreshing.",
|
||||
attachmentUnavailable: "Image unavailable. Please upload the attachment again.",
|
||||
recalled: "This message was recalled",
|
||||
@@ -385,7 +370,7 @@ const I18N = {
|
||||
networkFail: "Connection lost, please check your network and retry",
|
||||
stopped: "Stopped",
|
||||
stoppedMark: "(Generation stopped)",
|
||||
inputPh: "Ask a question or enter a tracking number... (Enter to send, Shift+Enter for newline)",
|
||||
inputPh: "Ask a question or enter an order number…",
|
||||
send: "Send",
|
||||
stop: "Stop",
|
||||
copy: "Copy",
|
||||
@@ -397,17 +382,12 @@ const I18N = {
|
||||
retryAIOnly: "Return to AI chat before regenerating this answer.",
|
||||
clickRetry: "Retry",
|
||||
welcomeTitle: "Your next shipment, made clearer.",
|
||||
welcomeSub: "Ask about rates, transit times or human support. Order lookup requires a linked customer account.",
|
||||
welcomeEyebrow: "EUROPE & UK LOGISTICS",
|
||||
serviceScope: "Europe & UK freight support",
|
||||
serviceTag: "Logistics support",
|
||||
quickLabel: "Quick help",
|
||||
footerTrack: "Order lookup",
|
||||
footerQuote: "Get a quote",
|
||||
footerException: "Parcel issue",
|
||||
footerHuman: "Human support",
|
||||
disclaimer: "Quotes and transit times are subject to final confirmation",
|
||||
keyboardHint: "Enter to send · Shift + Enter for a new line",
|
||||
inputShort: "Message…",
|
||||
uploading: "Uploading your attachment…",
|
||||
uploadFailed: "Upload failed. Please select the file again.",
|
||||
@@ -426,7 +406,6 @@ const I18N = {
|
||||
voiceFailed: "Voice input failed. Please try again or type your message.", voiceTimeout: "Voice input timed out. Please try again.",
|
||||
voiceWait: "Please wait for the current operation to finish before recording.",
|
||||
voiceDraft: "Please send or clear your existing draft before recording.",
|
||||
attachmentReady: "Ready to attach to your next message",
|
||||
removeAttachment: "Remove pending attachment",
|
||||
you: "You",
|
||||
assistant: "Baiyue Assistant",
|
||||
@@ -440,15 +419,12 @@ const I18N = {
|
||||
logisticsHistory: "Shipment tracking",
|
||||
noLogisticsHistory: "No actual shipment events available",
|
||||
estimatedTracking: "Estimated milestones",
|
||||
legacyTrackingNotice: "Historical simulated tracking for demonstration only; this is not a real order record.",
|
||||
order_inbound: "Inbound code", order_shipment: "Shipment ID", order_country: "Destination country",
|
||||
order_warehouse: "Warehouse", order_transport: "Transport", order_packages: "Packages",
|
||||
order_weight: "Declared gross weight", order_volume: "Declared volume", order_role: "Order level",
|
||||
order_parent: "Parent order", order_updated: "Source updated",
|
||||
moreTracking: "View full tracking history",
|
||||
lessTracking: "Show recent updates",
|
||||
quickSubs: ["Link a customer account to view orders and tracking", "Explore routes, rates and transit times", "Get help with delays, delivery or claims", "Discuss your shipping requirements"],
|
||||
welcomeTip: "Type your question, or pick a quick option below.",
|
||||
hot: "Popular Questions",
|
||||
recent: "Recent Conversations",
|
||||
sideCollapse: "Collapse sidebar",
|
||||
@@ -629,7 +605,7 @@ function welcomeHTML(){
|
||||
const kinds = ["track", "quote", "issue", "human"];
|
||||
const cards = q.map(function(question, index){
|
||||
const action = index === 3 ? 'data-human-support' : `data-question="${escHtml(question)}"`;
|
||||
return `<button type="button" class="suggest-item" ${action}><span class="suggest-icon">${welcomeIcon(kinds[index])}</span><span class="suggest-copy"><strong>${question}</strong><small>${t("quickSubs")[index]}</small></span><span class="suggest-arrow" aria-hidden="true">↗</span></button>`;
|
||||
return `<button type="button" class="suggest-item" ${action}><span class="suggest-icon">${welcomeIcon(kinds[index])}</span><span class="suggest-copy"><strong>${question}</strong></span><span class="suggest-arrow" aria-hidden="true">↗</span></button>`;
|
||||
}).join("");
|
||||
return `
|
||||
<div class="ai-welcome-card">
|
||||
@@ -637,7 +613,6 @@ function welcomeHTML(){
|
||||
<div class="ai-avatar">${welcomeIcon("box")}</div>
|
||||
<div class="welcome-eyebrow">${t("welcomeEyebrow")}</div>
|
||||
<h3>${t("welcomeTitle")}</h3>
|
||||
<p>${t("welcomeSub")}</p>
|
||||
</div>
|
||||
<div class="suggest-grid">${cards}</div>
|
||||
</div>
|
||||
@@ -690,7 +665,7 @@ newChatBtn.onclick = function(){
|
||||
if(alreadyNew) inputDom.value = "";
|
||||
autoGrow();
|
||||
clearAttachment();
|
||||
setComposerStatus(inputDom.value ? t('draftRestored') : '');
|
||||
setComposerStatus('');
|
||||
chatDom.innerHTML = welcomeHTML();
|
||||
chatDom.scrollTop = 0;
|
||||
followLatest = true;
|
||||
@@ -904,7 +879,7 @@ function openConversation(id){
|
||||
if(version !== conversationVersion) return;
|
||||
if(!Array.isArray(msgs)) throw new Error('History failed');
|
||||
openingConv = null;
|
||||
setComposerStatus(inputDom.value ? t('draftRestored') : '');
|
||||
setComposerStatus('');
|
||||
chatDom.innerHTML = "";
|
||||
if(!msgs.length){
|
||||
chatDom.innerHTML = welcomeHTML();
|
||||
@@ -952,14 +927,6 @@ function fillTrackCard(el, card){
|
||||
head.appendChild(st);
|
||||
el.appendChild(head);
|
||||
|
||||
if(!isOrder){
|
||||
const legacyNotice = document.createElement('p');
|
||||
legacyNotice.className = 'order-data-notice';
|
||||
legacyNotice.dataset.i18n = 'legacyTrackingNotice';
|
||||
legacyNotice.textContent = t('legacyTrackingNotice');
|
||||
el.appendChild(legacyNotice);
|
||||
}
|
||||
|
||||
if(isOrder){
|
||||
const fields = document.createElement('dl');
|
||||
fields.className = 'order-data-fields is-collapsed';
|
||||
@@ -1242,7 +1209,7 @@ async function sendHumanMessage(content){
|
||||
addMsg(content, true);
|
||||
if(inputDom.value === draft){ inputDom.value = ''; autoGrow(); }
|
||||
if(window.__pendingImg === attachment) clearAttachment();
|
||||
setComposerStatus(t(humanStatus === 'active' ? 'humanSent' : 'humanWaiting'));
|
||||
setComposerStatus('');
|
||||
focusComposer();
|
||||
return true;
|
||||
}catch(error){
|
||||
|
||||
Reference in New Issue
Block a user