diff --git a/src/App.tsx b/src/App.tsx index ac9730c..73c5ab9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -403,6 +403,7 @@ export default function App() { const BATCH_ROW_NUMBER_FIELD_ID = 'fldiqlTVsU'; const BATCH_LABEL11_FIELD_ID = 'fld4BZHtBV'; const BATCH_LABEL12_FIELD_ID = 'fldnRlMeaD'; + const BATCH_BUFFER_FIELD_ID = 'fldLBXEAo0'; const activateTableForPaging = async (table: any) => { try { @@ -3685,6 +3686,13 @@ export default function App() { } } + if (!isBackward && showUI && mode === 'generate' && (!currentExpectedDate || isNaN(currentExpectedDate.getTime()))) { + const autoExpected = computeExpectedDateByBufferDays(results, 14, completionDateAdjustment); + if (autoExpected) { + setExpectedDate(autoExpected); + } + } + const nextAdjustments = remapTimelineAdjustmentsToNewResults(timelineResults, results); setTimelineAdjustments(nextAdjustments); pendingRecalculateAfterCalculateAdjustmentsRef.current = nextAdjustments; @@ -4090,6 +4098,20 @@ export default function App() { return adjusted; }; + const computeExpectedDateByBufferDays = ( + results: any[], + bufferDays: number, + completionAdjustmentOverride?: number + ): Date | null => { + if (timelineDirection === 'backward') return null; + if (!Number.isFinite(bufferDays)) return null; + const adjustedCompletionDate = getAdjustedLastCompletionDate(results, completionAdjustmentOverride); + if (!adjustedCompletionDate) return null; + const next = new Date(adjustedCompletionDate); + next.setDate(next.getDate() + Math.round(bufferDays)); + return next; + }; + const computeAutoBufferDaysUsingExpectedDate = ( results: any[], expectedDateOverride?: Date | null, @@ -5455,6 +5477,7 @@ export default function App() { const colorText = getText('colorText'); const rawStart = f[nameToId.get('startTimestamp') || '']; const rawExpected = f[nameToId.get('expectedDateTimestamp') || '']; + const rawBufferDays = f[nameToId.get('缓冲期') || BATCH_BUFFER_FIELD_ID || '']; let startDate: Date | null = null; let expectedDateObj: Date | null = null; if (typeof rawStart === 'number') startDate = new Date(rawStart); @@ -5478,6 +5501,28 @@ export default function App() { if (typeof v === 'number') expectedDateObj = new Date(v); else expectedDateObj = parseDate(v); } + const parseBufferDays = (raw: any): number | null => { + if (raw == null) return null; + if (typeof raw === 'number' && Number.isFinite(raw)) return raw; + if (Array.isArray(raw) && raw.length > 0) { + const item = raw[0]; + if (typeof item === 'number' && Number.isFinite(item)) return item; + const text = extractText(item); + const n = Number(text); + return Number.isFinite(n) ? n : null; + } + if (typeof raw === 'string') { + const n = Number(raw); + return Number.isFinite(n) ? n : null; + } + if (raw && typeof raw === 'object') { + const v = (raw as any).value || (raw as any).text || (raw as any).name || ''; + const n = Number(v); + return Number.isFinite(n) ? n : null; + } + return null; + }; + const normalizeExcludedDates = (raw: any): string[] => { const out: string[] = []; const pushToken = (token: any) => { @@ -5565,6 +5610,16 @@ export default function App() { try { const results = await handleCalculateTimeline(true, { selectedLabels: labels, expectedDate: expectedDateObj || null, startTime: startDate || null, excludedDates: batchExcludedDates }, false); if (results && results.length > 0) { + let effectiveExpectedDate = expectedDateObj || null; + if (!effectiveExpectedDate) { + const bufferDays = parseBufferDays(rawBufferDays); + const fallbackDays = Number.isFinite(bufferDays as number) ? (bufferDays as number) : 14; + const autoExpected = computeExpectedDateByBufferDays(results, fallbackDays, completionDateAdjustment); + if (autoExpected) { + effectiveExpectedDate = autoExpected; + setExpectedDate(autoExpected); + } + } const processRecordIds = await writeToProcessDataTable(results, { foreignId, style: styleText, color: colorText }); const deliveryRecordId = await writeToDeliveryRecordTable( results, @@ -5574,7 +5629,7 @@ export default function App() { foreignId, style: styleText, color: colorText, - expectedDate: expectedDateObj || null, + expectedDate: effectiveExpectedDate, startTime: startDate || null, selectedLabels: labels } @@ -6947,14 +7002,6 @@ export default function App() { > ✏️ - <> - 锁交付 - - }