diff --git a/docs/project_context.md b/docs/project_context.md index 5f5560b..45f76a2 100644 --- a/docs/project_context.md +++ b/docs/project_context.md @@ -808,3 +808,9 @@ - CellData「规则设置」弹窗中的映射规则增加“图形化 / JSON”切换。图形化模式可维护目标表、主键字段、主键表达式、来源目录、CSV 前缀和字段映射;字段映射支持“CSV 字段”和“固定值”两种模式。 - JSON 模式仍使用 Monaco 编辑器,支持格式化、校验、恢复默认;两种模式共用同一份 `CellData.mapping` JSON,切换时自动互转。 - 验证:`frontend` `npm run build` 通过;构建产物已清理。 + +## 2026-06-25:固定图形化映射基础区与添加来源按钮 + +- CellData「规则设置」弹窗不再整体滚动;高级匹配、目标表、主键字段和主键表达式固定显示,图形化模式下仅来源列表滚动。 +- “添加来源”按钮固定在来源列表下方,始终可见;弹窗底部保存按钮也保持可见。 +- 验证:`frontend` `npm run build` 通过;构建产物已清理。 diff --git a/frontend/src/components/SettingsPanel.vue b/frontend/src/components/SettingsPanel.vue index 26b9d43..a798500 100644 --- a/frontend/src/components/SettingsPanel.vue +++ b/frontend/src/components/SettingsPanel.vue @@ -774,7 +774,9 @@ 添加字段 - 添加来源 +
+ 添加来源 +
diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 29caa05..6525e4e 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1640,16 +1640,24 @@ select { } .cell-data-settings-body { - display: grid; + display: flex; + height: min(68vh, 680px); + min-height: 0; + flex-direction: column; gap: 14px; - max-height: 68vh; - overflow-y: auto; padding-right: 4px; + overflow: hidden; } .cell-data-settings-section { display: grid; + flex: 0 0 auto; gap: 8px; + min-height: 0; +} + +.cell-data-settings-section:last-child { + flex: 1 1 auto; } .cell-data-section-title { @@ -1668,12 +1676,16 @@ select { } .cell-data-mapping-form, -.cell-data-source-list, .cell-data-source-card { display: grid; gap: 10px; } +.cell-data-mapping-form { + min-height: 0; + grid-template-rows: auto minmax(0, 1fr) auto; +} + .cell-data-mapping-key { display: grid; grid-template-columns: minmax(140px, 0.8fr) minmax(120px, 0.6fr) minmax(240px, 1.4fr); @@ -1687,6 +1699,19 @@ select { border-radius: var(--td-radius-default); } +.cell-data-source-list { + display: grid; + gap: 10px; + min-height: 0; + overflow-y: auto; + padding-right: 4px; +} + +.cell-data-mapping-actions { + display: flex; + justify-content: flex-start; +} + .cell-data-source-header, .cell-data-source-meta, .cell-data-field-row {