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

View File

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