关于这个问题,可以使用插件管理功能。
插件代码:
- <div>(() => {
- <span style="color: #0000ff;">if</span> (window.__hideDatasetModelStructureUATApplied) <span style="color: #0000ff;">return</span>;
- window.__hideDatasetModelStructureUATApplied = <span style="color: #0000ff;">true</span>;
- <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;">TARGET_TEST_ID</span> = <span style="color: #a31515;">'ds-detail-data-model'</span>;
- <span style="color: #0000ff;">const</span> <span style="color: #008080;">MODEL_ROUTE_PATTERN</span> = <span style="color: #800000;">/(?:^|\/)data-center\/data-sets\/([^/]+)\/([^/]+)\/details\/data-model(?:[/</span>?<span style="color: #cd3131;">#</span>]|$)/;
- <span style="color: #0000ff;">let</span> scheduled = <span style="color: #0000ff;">false</span>;
- <span style="color: #0000ff;">let</span> hasLoggedDispatch = <span style="color: #0000ff;">false</span>;
- <span style="color: #0000ff;">let</span> hasLoggedHidden = <span style="color: #0000ff;">false</span>;
- <span style="color: #0000ff;">const</span> log = (...args) => console.log(<span style="color: #a31515;">`[</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">]`</span>, ...args);
- <span style="color: #0000ff;">const</span> injectStyle = () => {
- <span style="color: #0000ff;">const</span> styleId = <span style="color: #a31515;">`</span>${<span style="color: #008080;">PLUGIN_NAME</span>}<span style="color: #a31515;">-style`</span>;
- <span style="color: #0000ff;">if</span> (document.getElementById(styleId)) <span style="color: #0000ff;">return</span>;
- <span style="color: #0000ff;">const</span> style = document.createElement(<span style="color: #a31515;">'style'</span>);
- style.id = styleId;
- style.textContent = <span style="color: #a31515;">`</span>
- <span style="color: #a31515;"> [data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"] {</span>
- <span style="color: #a31515;"> display: none !important;</span>
- <span style="color: #a31515;"> }</span>
- <span style="color: #a31515;"> .ant-tabs-tab:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]),</span>
- <span style="color: #a31515;"> .gd-tabs-tab:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]),</span>
- <span style="color: #a31515;"> [role="tab"]:has([data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]) {</span>
- <span style="color: #a31515;"> display: none !important;</span>
- <span style="color: #a31515;"> }</span>
- <span style="color: #a31515;"> `</span>;
- document.head.appendChild(style);
- };
- <span style="color: #0000ff;">const</span> hideTabByDom = () => {
- <span style="color: #0000ff;">const</span> node = document.querySelector(<span style="color: #a31515;">`[data-testid="</span>${<span style="color: #008080;">TARGET_TEST_ID</span>}<span style="color: #a31515;">"]`</span>);
- <span style="color: #0000ff;">if</span> (!node) <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span>;
- <span style="color: #0000ff;">const</span> tabNode = node.closest(<span style="color: #a31515;">'.ant-tabs-tab, .gd-tabs-tab, [role="tab"], li, div'</span>);
- <span style="color: #0000ff;">if</span> (tabNode <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>) {
- tabNode.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
- }
- <span style="color: #0000ff;">if</span> (node <span style="color: #0000ff;">instanceof</span> <span style="color: #008080;">HTMLElement</span>) {
- node.style.setProperty(<span style="color: #a31515;">'display'</span>, <span style="color: #a31515;">'none'</span>, <span style="color: #a31515;">'important'</span>);
- }
- <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;
- };
- <span style="color: #0000ff;">const</span> redirectIfModelPage = () => {
- <span style="color: #0000ff;">const</span> match = window.location.pathname.match(<span style="color: #008080;">MODEL_ROUTE_PATTERN</span>);
- <span style="color: #0000ff;">if</span> (!match) <span style="color: #0000ff;">return</span>;
- <span style="color: #0000ff;">const</span> nextUrl = window.location.href.replace(<span style="color: #a31515;">'/details/data-model'</span>, <span style="color: #a31515;">'/details/overview'</span>);
- log(<span style="color: #a31515;">'redirect data-model to overview'</span>, nextUrl);
- window.history.replaceState(<span style="color: #0000ff;">null</span>, <span style="color: #a31515;">''</span>, nextUrl);
- window.dispatchEvent(<span style="color: #0000ff;">new</span> <span style="color: #008080;">PopStateEvent</span>(<span style="color: #a31515;">'popstate'</span>));
- };
- <span style="color: #0000ff;">const</span> applyDisplayControlLog = () => {
- <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>) {
- log(<span style="color: #a31515;">'GD.dispatch unavailable, DOM hide only'</span>);
- <span style="color: #0000ff;">return</span>;
- }
- window.<span style="color: #008080;">GD</span>.dispatch(<span style="color: #a31515;">'config-display-control'</span>, { hiddenKeys: [] });
- <span style="color: #0000ff;">if</span> (!hasLoggedDispatch) {
- hasLoggedDispatch = <span style="color: #0000ff;">true</span>;
- log(<span style="color: #a31515;">'display-control checked; no verified hiddenKey for dataset model structure'</span>);
- }
- };
- <span style="color: #0000ff;">const</span> apply = () => {
- injectStyle();
- redirectIfModelPage();
- <span style="color: #0000ff;">if</span> (hideTabByDom() && !hasLoggedHidden) {
- hasLoggedHidden = <span style="color: #0000ff;">true</span>;
- log(<span style="color: #a31515;">'model structure tab hidden'</span>);
- }
- applyDisplayControlLog();
- };
- <span style="color: #0000ff;">const</span> scheduleApply = () => {
- <span style="color: #0000ff;">if</span> (scheduled) <span style="color: #0000ff;">return</span>;
- scheduled = <span style="color: #0000ff;">true</span>;
- setTimeout(() => {
- scheduled = <span style="color: #0000ff;">false</span>;
- apply();
- }, <span style="color: #098658;">100</span>);
- apply();
- setTimeout(apply, <span style="color: #098658;">300</span>);
- setTimeout(apply, <span style="color: #098658;">1000</span>);
- setTimeout(apply, <span style="color: #098658;">3000</span>);
- };
- <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();
- }
- <span style="color: #0000ff;">new</span> <span style="color: #008080;">MutationObserver</span>(scheduleApply).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>
复制代码
|