feat(export): split defaults modal layout

This commit is contained in:
aits2026
2026-03-06 13:42:56 +08:00
parent 8779bbc532
commit 51a3ee4a9b
3 changed files with 270 additions and 176 deletions

View File

@@ -227,4 +227,72 @@
transition: transform 0.2s ease;
}
}
&.layout-split {
.form-group {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(280px, 360px);
gap: 18px;
align-items: center;
padding: 14px 0;
margin-bottom: 0;
border-bottom: 1px solid color-mix(in srgb, var(--border-color) 70%, transparent);
}
.form-group:last-child {
border-bottom: none;
padding-bottom: 0;
}
.form-group:first-child {
padding-top: 0;
}
.form-copy {
min-width: 0;
}
.form-control {
min-width: 0;
display: flex;
justify-content: flex-end;
}
.form-hint {
margin-bottom: 0;
line-height: 1.5;
}
.select-field,
.settings-time-range-field {
width: 100%;
max-width: 360px;
margin-bottom: 0;
}
.log-toggle-line {
width: 100%;
max-width: 360px;
margin-bottom: 0;
}
}
}
@media (max-width: 760px) {
.export-defaults-settings-form.layout-split {
.form-group {
grid-template-columns: 1fr;
gap: 10px;
}
.form-control {
justify-content: flex-start;
}
.select-field,
.settings-time-range-field,
.log-toggle-line {
max-width: none;
}
}
}

View File

@@ -23,6 +23,7 @@ export interface ExportDefaultsSettingsPatch {
interface ExportDefaultsSettingsFormProps {
onNotify?: (text: string, success: boolean) => void
onDefaultsChanged?: (patch: ExportDefaultsSettingsPatch) => void
layout?: 'stacked' | 'split'
}
const exportFormatOptions = [
@@ -50,7 +51,8 @@ const getOptionLabel = (options: ReadonlyArray<{ value: string; label: string }>
export function ExportDefaultsSettingsForm({
onNotify,
onDefaultsChanged
onDefaultsChanged,
layout = 'stacked'
}: ExportDefaultsSettingsFormProps) {
const [showExportFormatSelect, setShowExportFormatSelect] = useState(false)
const [showExportExcelColumnsSelect, setShowExportExcelColumnsSelect] = useState(false)
@@ -123,10 +125,13 @@ export function ExportDefaultsSettingsForm({
}
return (
<div className="export-defaults-settings-form">
<div className={`export-defaults-settings-form ${layout === 'split' ? 'layout-split' : 'layout-stacked'}`}>
<div className="form-group">
<div className="form-copy">
<label></label>
<span className="form-hint"></span>
</div>
<div className="form-control">
<div className="select-field" ref={exportFormatDropdownRef}>
<button
type="button"
@@ -164,10 +169,14 @@ export function ExportDefaultsSettingsForm({
)}
</div>
</div>
</div>
<div className="form-group">
<div className="form-copy">
<label></label>
<span className="form-hint"></span>
</div>
<div className="form-control">
<div className="settings-time-range-field">
<button
type="button"
@@ -184,6 +193,7 @@ export function ExportDefaultsSettingsForm({
</button>
</div>
</div>
</div>
<ExportDateRangeDialog
open={isExportDateRangeDialogOpen}
@@ -199,8 +209,11 @@ export function ExportDefaultsSettingsForm({
/>
<div className="form-group">
<div className="form-copy">
<label></label>
<span className="form-hint">//</span>
</div>
<div className="form-control">
<div className="log-toggle-line">
<span className="log-status">{exportDefaultMedia ? '已开启' : '已关闭'}</span>
<label className="switch" htmlFor="shared-export-default-media">
@@ -221,10 +234,14 @@ export function ExportDefaultsSettingsForm({
</label>
</div>
</div>
</div>
<div className="form-group">
<div className="form-copy">
<label></label>
<span className="form-hint"></span>
</div>
<div className="form-control">
<div className="log-toggle-line">
<span className="log-status">{exportDefaultVoiceAsText ? '已开启' : '已关闭'}</span>
<label className="switch" htmlFor="shared-export-default-voice-as-text">
@@ -245,10 +262,14 @@ export function ExportDefaultsSettingsForm({
</label>
</div>
</div>
</div>
<div className="form-group">
<div className="form-copy">
<label>Excel </label>
<span className="form-hint"> Excel </span>
</div>
<div className="form-control">
<div className="select-field" ref={exportExcelColumnsDropdownRef}>
<button
type="button"
@@ -287,10 +308,14 @@ export function ExportDefaultsSettingsForm({
)}
</div>
</div>
</div>
<div className="form-group">
<div className="form-copy">
<label></label>
<span className="form-hint">1~6</span>
</div>
<div className="form-control">
<div className="select-field" ref={exportConcurrencyDropdownRef}>
<button
type="button"
@@ -328,5 +353,6 @@ export function ExportDefaultsSettingsForm({
</div>
</div>
</div>
</div>
)
}

View File

@@ -5294,7 +5294,7 @@ function ExportPage() {
</button>
</div>
<div className="export-defaults-modal-body">
<ExportDefaultsSettingsForm onDefaultsChanged={handleExportDefaultsChanged} />
<ExportDefaultsSettingsForm layout="split" onDefaultsChanged={handleExportDefaultsChanged} />
</div>
<div className="export-defaults-modal-actions">
<button