57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
Component({
|
|
data: { visible: false, intro: false, state: 'loading', message: '' },
|
|
lifetimes: {
|
|
attached: function() {
|
|
this._startedAt = Date.now();
|
|
try { this._showIntro = !wx.getStorageSync('launchIntroSeen'); } catch (e) { this._showIntro = false; }
|
|
if (this._showIntro) {
|
|
this.setData({ visible: true, intro: true });
|
|
// 设备首次展示即记住,跳转页面或再次启动都不会重复展示。
|
|
try { wx.setStorageSync('launchIntroSeen', true); } catch (e) {}
|
|
}
|
|
this._unobserve = getApp().observeAuth((state, message) => {
|
|
clearTimeout(this._exitTimer);
|
|
if (state === 'ready') {
|
|
this._retrying = false;
|
|
if (this._showIntro) {
|
|
this._exitTimer = setTimeout(() => {
|
|
this._showIntro = false;
|
|
this.setData({ visible: false, intro: false });
|
|
}, Math.max(0, 350 - (Date.now() - this._startedAt)));
|
|
} else {
|
|
this.setData({ visible: false, intro: false });
|
|
}
|
|
} else if (state === 'error') {
|
|
this._showIntro = false;
|
|
this._retrying = true;
|
|
this.setData({ visible: true, intro: false, state: state, message: message });
|
|
} else {
|
|
this.setData({ visible: !!(this._showIntro || this._retrying), intro: !!this._showIntro, state: state, message: message });
|
|
}
|
|
});
|
|
},
|
|
detached: function() {
|
|
clearTimeout(this._exitTimer);
|
|
if (this._unobserve) this._unobserve();
|
|
}
|
|
},
|
|
methods: {
|
|
preventMove: function() {},
|
|
retry: async function() {
|
|
try {
|
|
await getApp().silentLogin();
|
|
// 重新加载失败的页面,保留分享链接、相册 id 等原始入口参数。
|
|
var pages = getCurrentPages();
|
|
var page = pages[pages.length - 1];
|
|
if (!page) return;
|
|
var query = Object.keys(page.options || {}).map(function(key) {
|
|
return encodeURIComponent(key) + '=' + encodeURIComponent(page.options[key]);
|
|
}).join('&');
|
|
wx.reLaunch({ url: '/' + page.route + (query ? '?' + query : '') });
|
|
} catch (error) {
|
|
// App 已发布失败状态,保留重试画面。
|
|
}
|
|
}
|
|
}
|
|
});
|