From 51deaf037bf3e78867a0791d7d0967be75d45f7d Mon Sep 17 00:00:00 2001 From: oliver Date: Tue, 8 Sep 2026 21:08:22 +0800 Subject: [PATCH] Collapse cron directory tree by default on open. Owner folders and job run lists stay closed until clicked; selecting a job still expands its path. Co-authored-by: Cursor --- lib/client.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/client.js b/lib/client.js index 8f2a666..2ae177b 100644 --- a/lib/client.js +++ b/lib/client.js @@ -826,7 +826,7 @@ body>.dsh-ct-main{position:fixed;top:0;right:0;bottom:0;left:var(--dsh-ct-sideba }) return ordered.map((group) => { const folderId = `owner:${group.key}` - const open = expanded[folderId] !== false || !!needle + const open = expanded[folderId] === true || !!needle const containsCurrent = group.jobs.some((job) => ( (selection?.type === 'job' && selection.jobId === job.id) || (selection?.type === 'run' && selection.jobId === job.id) @@ -1311,19 +1311,15 @@ body>.dsh-ct-main{position:fixed;top:0;right:0;bottom:0;left:var(--dsh-ct-sideba useEffect(() => { if (!cronMode || skipAutoSelect.current) return - if (selection.type === 'run') { - if (selection.jobId) setExpanded((prev) => ({ ...prev, [selection.jobId]: true })) - return - } + if (selection.type === 'run') return if (jobs.length === 0) return if (selection.type === 'job' && selection.jobId && jobs.some((job) => job.id === selection.jobId)) { - setExpanded((prev) => ({ ...prev, [selection.jobId]: true })) return } const job = jobs[0] setSelection({ type: 'job', jobId: job.id }) setForm(jobToForm(job)) - setExpanded((prev) => ({ ...prev, [job.id]: true })) + // Keep the directory tree collapsed on first open; expand only on explicit click. }, [cronMode, jobs]) useEffect(() => { @@ -1344,10 +1340,16 @@ body>.dsh-ct-main{position:fixed;top:0;right:0;bottom:0;left:var(--dsh-ct-sideba }) }, [cronMode, selection.type, catalog.current, presets.current]) + function expandJobPath(jobId) { + const job = jobs.find((row) => row.id === jobId) + const owner = `owner:${String(job?.ownerEmpNo || '__unassigned__')}` + setExpanded((prev) => ({ ...prev, [jobId]: true, [owner]: true })) + } + function selectJob(jobId) { const job = jobs.find((row) => row.id === jobId) setSelection({ type: 'job', jobId }) - setExpanded((prev) => ({ ...prev, [jobId]: true })) + expandJobPath(jobId) if (job) setForm(jobToForm(job)) } @@ -1361,7 +1363,7 @@ body>.dsh-ct-main{position:fixed;top:0;right:0;bottom:0;left:var(--dsh-ct-sideba async function selectRun(jobId, run) { setSelection({ type: 'run', jobId, runId: run.id }) - setExpanded((prev) => ({ ...prev, [jobId]: true })) + expandJobPath(jobId) setError('') if (!run.sessionId) { setError('这次运行没有可打开的会话')