feat: use shared portal return action in the messaging header
This commit is contained in:
@@ -36,7 +36,7 @@ export const MainContentLayout = () => {
|
||||
|
||||
return (
|
||||
<Spin className="!max-h-none" spinning={showLockLoading} tip={loadingTip}>
|
||||
{portalMode && <header className="portal-header"><strong>金讯达</strong><span>金牛集团 · 内部通讯</span><a href={portalHome + '?theme=' + document.documentElement.dataset.theme}>返回统一门户</a></header>}
|
||||
{portalMode && <header className="portal-header jn-portal-bar"><strong>金讯达</strong><span>金牛集团 · 内部通讯</span><a className="jn-portal-return" title="返回统一门户" aria-label="返回统一门户" href={portalHome + '?theme=' + document.documentElement.dataset.theme}><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d="m3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1Z"/></svg><span>统一门户</span></a></header>}
|
||||
<Layout className="relative h-full flex-row" style={portalMode ? {height: 'calc(100% - 56px)'} : undefined}>
|
||||
<LeftNavBar />
|
||||
<Outlet />
|
||||
|
||||
@@ -9,6 +9,7 @@ import App from "./App";
|
||||
import { isSaveLog } from "./config";
|
||||
import { initializePortal, portalHome, portalMode } from './portal';
|
||||
import './portal.scss';
|
||||
import './portal-return.css';
|
||||
|
||||
if (window.electronAPI && isSaveLog) {
|
||||
const sdkLogger = log.scope("openim-sdk-core");
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/* Shared portal navigation: same geometry in all four applications. */
|
||||
.jn-portal-bar { position: relative; min-height: 56px; box-sizing: border-box; padding-right: 160px !important; }
|
||||
a.jn-portal-return, a.jn-portal-return:link, a.jn-portal-return:visited {
|
||||
position: absolute; top: 10px; right: 16px; z-index: 2;
|
||||
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
|
||||
box-sizing: border-box; height: 36px; min-width: 124px; padding: 0 12px;
|
||||
border: 1px solid #e7c7c3; border-radius: 10px; margin: 0;
|
||||
background: #fff7f5; color: #a92e24; box-shadow: 0 1px 2px rgba(64,25,20,.04);
|
||||
font: 600 13px/1.2 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;
|
||||
text-decoration: none; white-space: nowrap; cursor: pointer;
|
||||
}
|
||||
a.jn-portal-return svg { width: 18px; height: 18px; flex: none; }
|
||||
a.jn-portal-return span { color: inherit !important; font: inherit; }
|
||||
a.jn-portal-return:hover { background: #faeae6; color: #92251d; border-color: #d99c94; text-decoration: none; }
|
||||
a.jn-portal-return:focus-visible { outline: 3px solid #b83a2d; outline-offset: 3px; }
|
||||
[data-theme="night"] a.jn-portal-return { background: #382927; border-color: #70504b; color: #ffb4a8; }
|
||||
[data-theme="night"] a.jn-portal-return:hover { background: #4a312c; color: #ffd0c7; }
|
||||
@media (max-width: 600px) {
|
||||
.jn-portal-bar { padding-right: 124px !important; }
|
||||
a.jn-portal-return, a.jn-portal-return:link, a.jn-portal-return:visited { right: 12px; min-width: 102px; gap: 6px; padding: 0 9px; }
|
||||
}
|
||||
@media print { a.jn-portal-return { display: none !important; } }
|
||||
@@ -6,7 +6,7 @@ html[data-portal='true'] {
|
||||
.portal-header { height: 56px; display: flex; align-items: center; gap: 20px; padding: 0 24px; border-bottom: 1px solid var(--gap-text); background: #fff; }
|
||||
.portal-header strong { color: var(--primary); font-size: 20px; }
|
||||
.portal-header span { color: var(--sub-text); }
|
||||
.portal-header a { margin-left: auto; color: var(--primary); }
|
||||
@media (max-width: 600px) { .portal-header > span { display: none; } }
|
||||
.ant-spin-nested-loading, .ant-spin-container { height: 100%; }
|
||||
&[data-theme='night'] {
|
||||
color-scheme: dark;
|
||||
|
||||
Reference in New Issue
Block a user