新增订单概况并优化自动刷新和错误提示
This commit is contained in:
+14
-7
@@ -9,7 +9,7 @@ var CustomerLogin = {
|
||||
const cancel=document.getElementById('customer-cancel');
|
||||
const error=document.getElementById('customer-error');
|
||||
const accounts=['customer-account','customer-account-mobile'].map(id=>document.getElementById(id)).filter(Boolean);
|
||||
let user, pending=null, opener=null, busy=false, version=0;
|
||||
let user, pending=null, opener=null, busy=false, version=0, resumePending=false;
|
||||
overlay.hidden=true;
|
||||
function status(message){ error.textContent=message || ''; error.hidden=!message; }
|
||||
function render(){
|
||||
@@ -26,14 +26,14 @@ var CustomerLogin = {
|
||||
username.placeholder=options.text('customerUsernamePlaceholder');
|
||||
password.placeholder=options.text('customerPasswordPlaceholder');
|
||||
}
|
||||
function update(next){
|
||||
function update(next, refreshOrders){
|
||||
const previous=user;
|
||||
user=next;
|
||||
render();
|
||||
if(options.onChange && (previous === undefined || (previous && previous.id) !== (user && user.id))){
|
||||
options.onChange(user,previous);
|
||||
}
|
||||
if(options.onSession) options.onSession(user);
|
||||
if(options.onSession) options.onSession(user,Boolean(refreshOrders));
|
||||
}
|
||||
async function request(path, data){
|
||||
const controller=new AbortController();
|
||||
@@ -49,12 +49,12 @@ var CustomerLogin = {
|
||||
return result;
|
||||
}finally{ clearTimeout(timer); }
|
||||
}
|
||||
async function refresh(){
|
||||
async function refresh(refreshOrders){
|
||||
if(busy) return;
|
||||
const token=++version;
|
||||
try{
|
||||
const result=await request('/api/customer/session');
|
||||
if(token === version) update(result.authenticated && result.user ? result.user : null);
|
||||
if(token === version) update(result.authenticated && result.user ? result.user : null,refreshOrders);
|
||||
}catch(error){} // Query endpoints still enforce login if status cannot refresh.
|
||||
}
|
||||
function restoreFocus(){
|
||||
@@ -121,8 +121,15 @@ var CustomerLogin = {
|
||||
finally{ if(token === version) setBusy(false); }
|
||||
}
|
||||
accounts.forEach(account=>{account.onclick=activateAccount;});
|
||||
window.addEventListener('focus',refresh);
|
||||
document.addEventListener('visibilitychange',function(){ if(!document.hidden) refresh(); });
|
||||
async function resume(){
|
||||
// Browsers often emit both events for one return to the page.
|
||||
if(document.hidden || resumePending) return;
|
||||
resumePending=true;
|
||||
try{ await refresh(true); }
|
||||
finally{ resumePending=false; }
|
||||
}
|
||||
window.addEventListener('focus',resume);
|
||||
document.addEventListener('visibilitychange',resume);
|
||||
render();
|
||||
return {open:open,refresh:refresh,render:render,require:async function(resume){
|
||||
if(busy) return;
|
||||
|
||||
Reference in New Issue
Block a user