feat(export): simplify media selection in detail dialog

This commit is contained in:
tisonhuang
2026-03-02 14:49:40 +08:00
parent c6c7f128a9
commit 086ac8fdc9

View File

@@ -1506,15 +1506,16 @@ function ExportPage() {
const buildExportOptions = (scope: TaskScope, contentType?: ContentType): ElectronExportOptions => { const buildExportOptions = (scope: TaskScope, contentType?: ContentType): ElectronExportOptions => {
const sessionLayout: SessionLayout = writeLayout === 'C' ? 'per-session' : 'shared' const sessionLayout: SessionLayout = writeLayout === 'C' ? 'per-session' : 'shared'
const exportMediaEnabled = Boolean(options.exportImages || options.exportVoices || options.exportVideos || options.exportEmojis)
const base: ElectronExportOptions = { const base: ElectronExportOptions = {
format: options.format, format: options.format,
exportAvatars: options.exportAvatars, exportAvatars: options.exportAvatars,
exportMedia: options.exportMedia, exportMedia: exportMediaEnabled,
exportImages: options.exportMedia && options.exportImages, exportImages: options.exportImages,
exportVoices: options.exportMedia && options.exportVoices, exportVoices: options.exportVoices,
exportVideos: options.exportMedia && options.exportVideos, exportVideos: options.exportVideos,
exportEmojis: options.exportMedia && options.exportEmojis, exportEmojis: options.exportEmojis,
exportVoiceAsText: options.exportVoiceAsText, exportVoiceAsText: options.exportVoiceAsText,
excelCompactColumns: options.excelCompactColumns, excelCompactColumns: options.excelCompactColumns,
txtColumns: options.txtColumns, txtColumns: options.txtColumns,
@@ -1558,6 +1559,7 @@ function ExportPage() {
const buildSnsExportOptions = () => { const buildSnsExportOptions = () => {
const format: 'json' | 'html' = options.format === 'json' ? 'json' : 'html' const format: 'json' | 'html' = options.format === 'json' ? 'json' : 'html'
const exportMediaEnabled = Boolean(options.exportImages || options.exportVoices || options.exportVideos || options.exportEmojis)
const dateRange = options.useAllTime const dateRange = options.useAllTime
? null ? null
: options.dateRange : options.dateRange
@@ -1569,7 +1571,7 @@ function ExportPage() {
return { return {
format, format,
exportMedia: options.exportMedia, exportMedia: exportMediaEnabled,
startTime: dateRange?.startTime, startTime: dateRange?.startTime,
endTime: dateRange?.endTime endTime: dateRange?.endTime
} }
@@ -1803,7 +1805,7 @@ function ExportPage() {
closeExportDialog() closeExportDialog()
await configService.setExportDefaultFormat(options.format) await configService.setExportDefaultFormat(options.format)
await configService.setExportDefaultMedia(options.exportMedia) await configService.setExportDefaultMedia(Boolean(options.exportImages || options.exportVoices || options.exportVideos || options.exportEmojis))
await configService.setExportDefaultVoiceAsText(options.exportVoiceAsText) await configService.setExportDefaultVoiceAsText(options.exportVoiceAsText)
await configService.setExportDefaultExcelCompactColumns(options.excelCompactColumns) await configService.setExportDefaultExcelCompactColumns(options.excelCompactColumns)
await configService.setExportDefaultTxtColumns(options.txtColumns) await configService.setExportDefaultTxtColumns(options.txtColumns)
@@ -3018,23 +3020,11 @@ function ExportPage() {
<div className="dialog-section"> <div className="dialog-section">
<h4></h4> <h4></h4>
<div className="switch-row">
<span></span>
<label className="switch">
<input
type="checkbox"
checked={options.exportMedia}
onChange={(event) => setOptions(prev => ({ ...prev, exportMedia: event.target.checked }))}
/>
<span className="switch-slider"></span>
</label>
</div>
<div className="media-check-grid"> <div className="media-check-grid">
<label><input type="checkbox" checked={options.exportImages} disabled={!options.exportMedia} onChange={event => setOptions(prev => ({ ...prev, exportImages: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportImages} onChange={event => setOptions(prev => ({ ...prev, exportImages: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportVoices} disabled={!options.exportMedia} onChange={event => setOptions(prev => ({ ...prev, exportVoices: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportVoices} onChange={event => setOptions(prev => ({ ...prev, exportVoices: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportVideos} disabled={!options.exportMedia} onChange={event => setOptions(prev => ({ ...prev, exportVideos: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportVideos} onChange={event => setOptions(prev => ({ ...prev, exportVideos: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportEmojis} disabled={!options.exportMedia} onChange={event => setOptions(prev => ({ ...prev, exportEmojis: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportEmojis} onChange={event => setOptions(prev => ({ ...prev, exportEmojis: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportVoiceAsText} onChange={event => setOptions(prev => ({ ...prev, exportVoiceAsText: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportVoiceAsText} onChange={event => setOptions(prev => ({ ...prev, exportVoiceAsText: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportAvatars} onChange={event => setOptions(prev => ({ ...prev, exportAvatars: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportAvatars} onChange={event => setOptions(prev => ({ ...prev, exportAvatars: event.target.checked }))} /> </label>
</div> </div>