关于这个问题,可以使用插件管理功能。
插件代码:
- <div>(() => {
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">PLUGIN_NAME</span> = <span style="color: #a31515;">'隐藏-管理后台授权-UAT'</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">STYLE_ID</span> = <span style="color: #a31515;">'gd-hide-admin-backend-authorization-style'</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">TAB_TEXT</span> = <span style="color: #a31515;">'管理后台授权'</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">LOGIN_SETTING_RE</span> = <span style="color: #800000;">/\/admin\/systemManage\/loginSetting(?:\/|$)/</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">AUTHORIZATION_RE</span> = /<span style="color: #cd3131;">\</span>/admin<span style="color: #cd3131;">\</span>/systemManage<span style="color: #cd3131;">\</span>/loginSetting<span style="color: #cd3131;">\</span>/authorization(?:[<span style="color: #800000;">/?#]|$)/</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">FALLBACK_KEY</span> = <span style="color: #a31515;">'admin_system_backend_authorization'</span>;
- <span style="color: #0000ff;">const</span> isLoginSettingPage = () => <span style="color: #008080;">LOGIN_SETTING_RE</span>.test(window.location.pathname);
- <span style="color: #0000ff;">const</span> isAuthorizationPage = () => <span style="color: #008080;">AUTHORIZATION_RE</span>.test(window.location.pathname);
- <span style="color: #0000ff;">const</span> ensureStyle = () => {
- <span style="color: #0000ff;">if</span> (document.getElementById(<span style="color: #008080;">STYLE_ID</span>)) <span style="color: #0000ff;">return</span>;
- <span style="color: #0000ff;">const</span> style = document.createElement(<span style="color: #a31515;">'style'</span>);
- style.id = <span style="color: #008080;">STYLE_ID</span>;
- style.textContent = <span style="color: #a31515;">`</span>
- <span style="color: #a31515;"> [data-gd-hide-admin-backend-authorization="true"] {</span>
- <span style="color: #a31515;"> display: none !important;</span>
- <span style="color: #a31515;"> visibility: hidden !important;</span>
- <span style="color: #a31515;"> pointer-events: none !important;</span>
- <span style="color: #a31515;"> }</span>
- <span style="color: #a31515;"> `</span>;
- document.head.appendChild(style);
- };
- <span style="color: #0000ff;">const</span> findTextNodes = () => {
- <span style="color: #0000ff;">const</span> nodes = [];
- <span style="color: #0000ff;">const</span> walker = document.createTreeWalker(
- document.body,
- <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">SHOW_TEXT</span>,
- {
- acceptNode: (node) => (
- node.nodeValue && node.nodeValue.trim() === <span style="color: #008080;">TAB_TEXT</span>
- ? <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">FILTER_ACCEPT</span>
- : <span style="color: #008080;">NodeFilter</span>.<span style="color: #008080;">FILTER_REJECT</span>
- ),
- },
- );
- <span style="color: #0000ff;">let</span> node = walker.nextNode();
- <span style="color: #0000ff;">while</span> (node) {
- nodes.push(node);
- node = walker.nextNode();
- }
- <span style="color: #0000ff;">return</span> nodes;
- };
- <span style="color: #0000ff;">const</span> hideAuthorizationTab = () => {
- <span style="color: #0000ff;">if</span> (!isLoginSettingPage() || !document.body) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
- ensureStyle();
- <span style="color: #0000ff;">let</span> hidden = <span style="color: #0000ff;">false</span>;
- findTextNodes().forEach((textNode) => {
- <span style="color: #0000ff;">const</span> textEl = textNode.parentElement;
- <span style="color: #0000ff;">const</span> tabEl = textEl && (
- textEl.closest(<span style="color: #a31515;">'.ant-tabs-tab'</span>)
- || textEl.closest(<span style="color: #a31515;">'[role="tab"]'</span>)
- || textEl.closest(<span style="color: #a31515;">'.gd-tab, .tabs-tab'</span>)
- );
- <span style="color: #0000ff;">const</span> target = tabEl || textEl;
- <span style="color: #0000ff;">if</span> (!(target <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>)) <span style="color: #0000ff;">return</span>;
- target.setAttribute(<span style="color: #a31515;">'data-gd-hide-admin-backend-authorization'</span>, <span style="color: #a31515;">'true'</span>);
- target.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
- target.style.setProperty(<span style="color: #a31515;">'visibility'</span>, <span style="color: #a31515;">'hidden'</span>, <span style="color: #a31515;">'important'</span>);
- target.style.setProperty(<span style="color: #a31515;">'pointer-events'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
- target.setAttribute(<span style="color: #a31515;">'aria-hidden'</span>, <span style="color: #a31515;">'true'</span>);
- target.setAttribute(<span style="color: #a31515;">'tabindex'</span>, <span style="color: #a31515;">'-1'</span>);
- hidden = <span style="color: #0000ff;">true</span>;
- });
- <span style="color: #0000ff;">return</span> hidden;
- };
- <span style="color: #0000ff;">const</span> redirectFromAuthorization = () => {
- <span style="color: #0000ff;">if</span> (!isAuthorizationPage()) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
- <span style="color: #0000ff;">const</span> nextPath = window.location.pathname.replace(<span style="color: #800000;">/\/authorization$/</span>, <span style="color: #a31515;">'/generalSettings'</span>);
- window.history.replaceState(<span style="color: #0000ff;">null</span>, <span style="color: #a31515;">''</span>, nextPath + window.location.search + window.location.hash);
- window.dispatchEvent(<span style="color: #0000ff;">new</span> <span style="color: #008080;">PopStateEvent</span>(<span style="color: #a31515;">'popstate'</span>));
- <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
- };
- <span style="color: #0000ff;">const</span> applyDisplayControl = () => {
- <span style="color: #0000ff;">if</span> (!window.<span style="color: #008080;">GD</span> || <span style="color: #0000ff;">typeof</span> window.<span style="color: #008080;">GD</span>.dispatch !== <span style="color: #a31515;">'function'</span>) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
- window.<span style="color: #008080;">GD</span>.dispatch(<span style="color: #a31515;">'config-display-control'</span>, { hiddenKeys: [<span style="color: #008080;">FALLBACK_KEY</span>] });
- <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
- };
- <span style="color: #0000ff;">const</span> apply = () => {
- <span style="color: #0000ff;">const</span> dispatched = applyDisplayControl();
- <span style="color: #0000ff;">const</span> redirected = redirectFromAuthorization();
- <span style="color: #0000ff;">const</span> hidden = hideAuthorizationTab();
- <span style="color: #0000ff;">if</span> (hidden || redirected || dispatched) {
- console.log(<span style="color: #a31515;">`[</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">] applied`</span>, { hidden, redirected, dispatched });
- }
- };
- <span style="color: #0000ff;">const</span> scheduleApply = () => {
- apply();
- setTimeout(apply, <span style="color: #098658;">200</span>);
- setTimeout(apply, <span style="color: #098658;">800</span>);
- setTimeout(apply, <span style="color: #098658;">2000</span>);
- setTimeout(apply, <span style="color: #098658;">5000</span>);
- };
- <span style="color: #0000ff;">const</span> observer = <span style="color: #0000ff;">new</span> <span style="color: #008080;">MutationObserver</span>(() => {
- hideAuthorizationTab();
- });
- <span style="color: #0000ff;">if</span> (document.readyState === <span style="color: #a31515;">'loading'</span>) {
- document.addEventListener(<span style="color: #a31515;">'DOMContentLoaded'</span>, scheduleApply, { once: <span style="color: #0000ff;">true</span> });
- } <span style="color: #0000ff;">else</span> {
- scheduleApply();
- }
- observer.observe(document.documentElement, { childList: <span style="color: #0000ff;">true</span>, subtree: <span style="color: #0000ff;">true</span> });
- window.addEventListener(<span style="color: #a31515;">'load'</span>, scheduleApply);
- window.addEventListener(<span style="color: #a31515;">'hashchange'</span>, scheduleApply);
- window.addEventListener(<span style="color: #a31515;">'popstate'</span>, scheduleApply);
- document.addEventListener(<span style="color: #a31515;">'visibilitychange'</span>, () => {
- <span style="color: #0000ff;">if</span> (!document.hidden) scheduleApply();
- });
- })();</div>
复制代码
|