P5: 后台独立应用(MUI)- 13 模块/布局/守卫/复用前台基建

This commit is contained in:
2026-08-06 23:10:09 +08:00
parent f7dd4163b2
commit c71f4f0ed6
21 changed files with 2936 additions and 5 deletions
+30
View File
@@ -0,0 +1,30 @@
import React, { useState } from 'react';
import Snackbar from '@mui/material/Snackbar';
import Alert from '@mui/material/Alert';
// 模块级单例:admin 任意处调用 showSnack,由 AdminLayout 内的 SnackHost 消费
let showFn = null;
export function showSnack(msg, severity = 'success') {
if (showFn) showFn(msg, severity);
else window.alert(msg);
}
export default function SnackHost() {
const [open, setOpen] = useState(false);
const [msg, setMsg] = useState('');
const [severity, setSeverity] = useState('success');
showFn = (m, s) => { setMsg(m); setSeverity(s || 'success'); setOpen(true); };
return (
<Snackbar
open={open}
autoHideDuration={2500}
onClose={() => setOpen(false)}
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
>
<Alert severity={severity} variant="filled" onClose={() => setOpen(false)}>{msg}</Alert>
</Snackbar>
);
}