提案审核提交增加转圈圈、如果域名解析失败,不缓存,等待两秒重新读取,共三次,域名解析成功缓存一分钟;手机端审核撤回失败,审核下拉选择参数自动弹出审核页等bug
This commit is contained in:
@@ -99,6 +99,8 @@
|
||||
let active = null
|
||||
let serial = 0
|
||||
let pending = null
|
||||
let registered = null
|
||||
let releasing = Promise.resolve()
|
||||
let skippingClosedHistory = false
|
||||
const sync = (closedKeys) => {
|
||||
if (active) active.onChange(active.keys.slice(), closedKeys)
|
||||
@@ -146,37 +148,55 @@
|
||||
return {
|
||||
/** 注册页面同步回调,参数为仍打开的弹框 key 数组;返回页面专用操作句柄。 */
|
||||
register(onChange) {
|
||||
if (active) throw new Error("上一个页面的弹框历史尚未注销")
|
||||
const owner = { id: Date.now() + "-" + (++serial), keys: [], onChange }
|
||||
active = owner
|
||||
if (registered) throw new Error("上一个页面的弹框历史尚未注销")
|
||||
const owner = { id: Date.now() + "-" + (++serial), keys: [], onChange, disposed: false }
|
||||
registered = owner
|
||||
// 旧页面注销时先释放注册资格;新页面的弹框操作等待旧历史回退完成,不能接管其 popstate。
|
||||
const ready = active ? releasing.then(() => {
|
||||
if (!owner.disposed) active = owner
|
||||
}) : Promise.resolve()
|
||||
if (!active) active = owner
|
||||
const runOwned = (work) => {
|
||||
const run = () => active === owner && !owner.disposed ? work() : undefined
|
||||
return active === owner ? run() : ready.then(run)
|
||||
}
|
||||
let destroyed = null
|
||||
return {
|
||||
// key 是页面内唯一弹框名称;相同弹框重复打开不会重复压栈。
|
||||
open(key) {
|
||||
const open = () => {
|
||||
if (active !== owner || owner.keys.includes(key)) return
|
||||
if (active !== owner || owner.disposed || owner.keys.includes(key)) return
|
||||
owner.keys.push(key)
|
||||
window.history.pushState({ h5Popup: { owner: owner.id, depth: owner.keys.length } }, "", window.location.href)
|
||||
}
|
||||
return pending ? pending.promise.then(open) : Promise.resolve(open())
|
||||
return Promise.resolve(runOwned(() => pending ? pending.promise.then(open) : open()))
|
||||
},
|
||||
// 关闭指定弹框及其上层弹框,返回 Promise<void>,保持后进先出。
|
||||
close(key) {
|
||||
if (active !== owner) return Promise.resolve()
|
||||
const index = owner.keys.indexOf(key)
|
||||
return index < 0 ? Promise.resolve() : rewind(index)
|
||||
return Promise.resolve(runOwned(() => {
|
||||
const index = owner.keys.indexOf(key)
|
||||
return index < 0 ? undefined : rewind(index)
|
||||
}))
|
||||
},
|
||||
clear() {
|
||||
return active === owner ? rewind(0) : Promise.resolve()
|
||||
return Promise.resolve(runOwned(() => rewind(0)))
|
||||
},
|
||||
destroy() {
|
||||
if (destroyed) return destroyed
|
||||
owner.disposed = true
|
||||
if (registered === owner) registered = null
|
||||
// 无弹框时同步注销,保证 PJAX 同次替换中下一个页面可以立即注册。
|
||||
if (active === owner && !owner.keys.length && !pending) {
|
||||
active = null
|
||||
return Promise.resolve()
|
||||
destroyed = Promise.resolve()
|
||||
return destroyed
|
||||
}
|
||||
return this.clear().then(() => {
|
||||
// 新页面可能尚在等待更早页面释放历史;连续切换也必须按顺序完成注销。
|
||||
destroyed = ready.then(() => active === owner ? rewind(0) : undefined).then(() => {
|
||||
if (active === owner) active = null
|
||||
})
|
||||
releasing = destroyed
|
||||
return destroyed
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -215,27 +235,17 @@
|
||||
$(document).on("pjax:complete", function () {
|
||||
if (window.customStyleList) {
|
||||
window.customStyleList.forEach((style) => {
|
||||
style.parentNode.removeChild(style)
|
||||
// 页面替换或前一次清理可能已移除节点,仅清理仍挂载的旧样式。
|
||||
if (style.parentNode) style.parentNode.removeChild(style)
|
||||
})
|
||||
window.customStyleList = null
|
||||
}
|
||||
NProgress.done()
|
||||
toggleShowBar()
|
||||
})
|
||||
|
||||
// 监听浏览器的前进和后退操作
|
||||
$(window).on("popstate", function (event) {
|
||||
if (event.originalEvent.state) {
|
||||
// 如果存在历史记录状态,触发 Pjax 加载对应内容
|
||||
$.pjax({
|
||||
url: event.originalEvent.state.url,
|
||||
container: "#container",
|
||||
fragment: "#container",
|
||||
timeout: 8000,
|
||||
push: false,
|
||||
scrollTo: false
|
||||
})
|
||||
}
|
||||
})
|
||||
// 普通页面前进/后退交给 PJAX 自带的 popstate.pjax 处理。
|
||||
// 弹框历史只有 h5Popup 标记,没有页面 url/container,不能再次发起页面请求。
|
||||
}
|
||||
})()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user