当前前端存在局部 loading、按钮 :loading、路由进度条和上传组件内部进度等多套异步反馈。不同页面覆盖不一致,用户快速连续点击时仍可能产生重复提交、重复删除、重复导出或重复下发请求。
建立平台级全局 Loading 能力:
request、noPrefixRequest、mockRequest。postEncrypt 加密请求:复用 request,无需单独改页面。NUpload action 文件上传、图片上传:补充统一 Loading 计数。fetch 的用户触发型下载和 SSE/流式请求:接入同一套 manager。新增 useGlobalLoading,内部维护 active token 列表:
startGlobalLoading(options) 返回 token。finishGlobalLoading(token) 按 token 结束。withGlobalLoading(fn, options) 包装 Promise。managedFetch(input, init, options) 包装原生 fetch。resolveRequestLoadingText(config) 根据请求方法和 URL 推导提示文案。skipGlobalLoading/globalLoading === false 显式跳过。globalLoadingText 覆盖默认文案。在请求拦截器入口立即 start,避免用户连续点击同一按钮时第二次点击进入。响应成功、业务失败、网络失败、请求拦截失败均 finish。
路由 beforeEach 开始全局 Loading,afterEach/onError 结束。保留现有 $loadingBar 顶部进度反馈。
NUpload action 不经过 Axios,需要在 on-before-upload 校验成功后开始 Loading,在 on-finish/on-error 结束。
用户触发型 fetch 使用 managedFetch 或手动 token 包裹。SSE 流式生成使用手动 token,完成、错误、取消时结束。
skipGlobalLoading 对后台静默请求做豁免。