import { useEffect } from 'react' export function useTitle(title) { useEffect(() => { document.title = title }, [title]) } // 401 之外的业务错误(404/409/503…)直接展示后端 message;401 在 dataProvider 里转跳登录页。 export function displayError(error) { return error?.message || '操作失败' } export function conflictError(error, fallback) { if (error?.status === 409) return `冲突(409):${error.body?.reason || fallback}` if (error?.status === 503) return `资源未就绪(503):${error.message}` return displayError(error) } export function useUnsavedChanges(dirty) { useEffect(() => { if (!dirty) return undefined const click = (event) => { const anchor = event.target.closest?.("a[href]") if (!anchor || !anchor.getAttribute("href")?.startsWith("#/")) return if (window.confirm("当前内容尚未保存,确定离开吗?")) return event.preventDefault() event.stopPropagation() } document.addEventListener("click", click, true) return () => { document.removeEventListener("click", click, true) } }, [dirty]) }