Commit 85dfa83f authored by Data Governance Dev's avatar Data Governance Dev

fix(web3): 弹窗 form-grid 列收缩 + form-row.full 防止被内容撑宽

- .form-grid 列 minmax(320px, 1fr) → minmax(0, 1fr):允许列收缩到内容真实需要的大小
- .form-row.full 加 min-width: 0:跨列行允许收缩,防止被内嵌 flex 子项的 min-content 撑宽

效果:Tab2 连接方式右列(主机地址 / 数据库名 / 密码)和下方数据表右列(选择数据表)x 坐标严格对齐,不再被 modal-body overflow-x: hidden 切掉。

实测:tests/test_modal_overflow.py 跑 Playwright 测距确认两个 grid 同宽 960px,右列 form-control 右边都对齐在 x=1200,无溢出。
parent 81bbb1ba
......@@ -372,9 +372,9 @@ table.dq-table tbody tr:last-child td { border-bottom: none; }
border-left: 3px solid #409eff;
margin-bottom: 12px;
}
.form-grid { display: grid; grid-template-columns: minmax(320px, 1fr) minmax(320px, 1fr); gap: 14px 20px; }
.form-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px 20px; }
.form-row { display: flex; align-items: center; gap: 8px; min-width: 0; }
.form-row.full { grid-column: 1 / -1; }
.form-row.full { grid-column: 1 / -1; min-width: 0; }
.form-label {
font-size: 13px;
color: #606266;
......
"""Check TaskModal Tab2 connection section layout: right column aligned with data table."""
import sys, time
from playwright.sync_api import sync_playwright
CHROME = r"C:\Users\duanqi\scoop\apps\googlechrome\current\chrome.exe"
URL = "http://localhost:5175/#/config"
with sync_playwright() as p:
browser = p.chromium.launch(executable_path=CHROME, args=["--no-sandbox"])
ctx = browser.new_context(viewport={"width": 1440, "height": 900})
page = ctx.new_page()
page.goto(URL)
page.wait_for_load_state("networkidle")
# Click "新增任务" (Add task)
btn = page.locator("button:has-text('新增任务')")
btn.first.click()
time.sleep(0.5)
# Click Tab "数据连接"
page.locator(".modal-tab:has-text('数据连接')").click()
time.sleep(0.5)
# Full screenshot of the modal
page.locator(".modal-mask.show .modal").first.screenshot(path=r"C:\Users\duanqi\Desktop\tools\数据治理\web3\tests\modal_conn_section.png")
# Compute bounding boxes of form-grids and right-column form-controls
rects = page.evaluate("""() => {
const out = [];
// For each visible form-grid, measure its parent and its right-edge form-controls
const grids = Array.from(document.querySelectorAll('.tab-panel.active .form-grid'));
grids.forEach((g, gi) => {
const gRect = g.getBoundingClientRect();
// Find form-controls in column 2 (right side) — children with grid-column-end implicit (i.e. not full)
const rows = Array.from(g.querySelectorAll('.form-row'));
const rightInputs = [];
rows.forEach((row) => {
if (row.classList.contains('full')) return;
const ctrl = row.querySelector('.form-control');
if (!ctrl) return;
const r = ctrl.getBoundingClientRect();
rightInputs.push({
label: (row.querySelector('.form-label') || {}).textContent || '',
x: r.left, y: r.top, w: r.width, right: r.right,
});
});
out.push({
gridIndex: gi,
gridLeft: gRect.left, gridRight: gRect.right, gridWidth: gRect.width,
parentClass: g.parentElement.className,
rightInputs,
});
});
// Modal & body for ref
const modal = document.querySelector('.modal-mask.show .modal');
const mRect = modal.getBoundingClientRect();
const body = document.querySelector('.modal-body');
const bRect = body.getBoundingClientRect();
return {
modal: {left: mRect.left, right: mRect.right, width: mRect.width},
body: {left: bRect.left, right: bRect.right, width: bRect.width, scrollWidth: body.scrollWidth, clientWidth: body.clientWidth},
grids: out,
};
}""")
print("=== Layout report ===")
print(f"modal: {rects['modal']}")
print(f"body : {rects['body']}")
print(f"grids count = {len(rects['grids'])}")
for g in rects["grids"]:
print(f" grid#{g['gridIndex']} parent={g['parentClass']!r} gridRight={g['gridRight']:.1f} gridWidth={g['gridWidth']:.1f}")
for inp in g["rightInputs"]:
over = inp["right"] - rects["body"]["right"]
mark = " OVERFLOW" if over > 1 else ""
print(f" {inp['label']:8s} right={inp['right']:.1f} (body right={rects['body']['right']:.1f}, over={over:.1f}){mark}")
browser.close()
print("done")
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment