1
1
This commit is contained in:
88
src/App.tsx
88
src/App.tsx
@ -917,6 +917,20 @@ export default function App() {
|
||||
.toLowerCase();
|
||||
};
|
||||
|
||||
const getMeaningfulAdjustedTimelineValue = (value: any): number | null => {
|
||||
const n = Number(value);
|
||||
if (!Number.isFinite(n)) return null;
|
||||
// 约定:adjustedTimelineValue=0 为占位值,不作为有效调整时效使用
|
||||
return n === 0 ? null : n;
|
||||
};
|
||||
|
||||
const getNodeBaseTimelineValue = (node: any): number => {
|
||||
const base = Number(node?.timelineValue);
|
||||
if (Number.isFinite(base)) return base;
|
||||
const adjusted = getMeaningfulAdjustedTimelineValue(node?.adjustedTimelineValue);
|
||||
return adjusted ?? 0;
|
||||
};
|
||||
|
||||
const remapTimelineAdjustmentsToNewResults = (
|
||||
prevResults: any[],
|
||||
nextResults: any[]
|
||||
@ -936,7 +950,18 @@ export default function App() {
|
||||
}
|
||||
const base = Number(r?.timelineValue);
|
||||
const adjusted = Number(r?.adjustedTimelineValue);
|
||||
if (Number.isFinite(base) && Number.isFinite(adjusted)) {
|
||||
const hasAdjustmentEvidence =
|
||||
extractText(r?.adjustmentDescription).trim().length > 0 ||
|
||||
r?.dateAdjustmentRule !== null ||
|
||||
r?.startDateRule !== null;
|
||||
// 源快照里 adjustedTimelineValue=0 常作为占位值,不代表真实人工调整,需严格过滤
|
||||
if (
|
||||
Number.isFinite(base) &&
|
||||
Number.isFinite(adjusted) &&
|
||||
adjusted !== 0 &&
|
||||
adjusted !== base &&
|
||||
hasAdjustmentEvidence
|
||||
) {
|
||||
const d = adjusted - base;
|
||||
if (Number.isFinite(d) && d !== 0) {
|
||||
const existed = prevAdjustmentByName.get(name);
|
||||
@ -1746,8 +1771,8 @@ export default function App() {
|
||||
// 扁平化结构中,每个快照都包含完整的节点数据
|
||||
if (nodeSnapshot.isCompleteSnapshot) {
|
||||
// 确保adjustedTimelineValue有正确的默认值
|
||||
const adjustedTimelineValue = nodeSnapshot.adjustedTimelineValue !== undefined ?
|
||||
nodeSnapshot.adjustedTimelineValue : nodeSnapshot.timelineValue;
|
||||
const meaningfulAdjusted = getMeaningfulAdjustedTimelineValue(nodeSnapshot.adjustedTimelineValue);
|
||||
const adjustedTimelineValue = meaningfulAdjusted ?? nodeSnapshot.timelineValue;
|
||||
|
||||
// 处理日期格式,优先使用时间戳格式
|
||||
let estimatedStart = nodeSnapshot.estimatedStart;
|
||||
@ -3919,11 +3944,7 @@ export default function App() {
|
||||
const newAdjustment = currentAdjustment + adjustment;
|
||||
|
||||
// 允许调整后的时效值为负数,用于向前回退结束时间
|
||||
const baseValue = (typeof timelineResults[nodeIndex]?.timelineValue === 'number')
|
||||
? timelineResults[nodeIndex]!.timelineValue
|
||||
: (typeof timelineResults[nodeIndex]?.adjustedTimelineValue === 'number')
|
||||
? timelineResults[nodeIndex]!.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseValue = getNodeBaseTimelineValue(timelineResults[nodeIndex]);
|
||||
|
||||
// 检查当前调整的节点是否为周转周期节点
|
||||
const currentNodeName = timelineResults[nodeIndex]?.nodeName;
|
||||
@ -3961,11 +3982,7 @@ export default function App() {
|
||||
|
||||
for (let i = 0; i < updatedResults.length; i++) {
|
||||
const result = updatedResults[i];
|
||||
const baseTimelineValue = (typeof result.timelineValue === 'number')
|
||||
? result.timelineValue
|
||||
: (typeof result.adjustedTimelineValue === 'number')
|
||||
? result.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseTimelineValue = getNodeBaseTimelineValue(result);
|
||||
const nodeKey = buildTimelineAdjustmentKey(result, i);
|
||||
const adjustment = adjustments[nodeKey] || 0;
|
||||
const adjustedTimelineValue = baseTimelineValue + adjustment;
|
||||
@ -4089,11 +4106,7 @@ export default function App() {
|
||||
|
||||
for (let i = updatedResults.length - 1; i >= 0; i--) {
|
||||
const result = updatedResults[i];
|
||||
const baseTimelineValue = (typeof result.timelineValue === 'number')
|
||||
? result.timelineValue
|
||||
: (typeof result.adjustedTimelineValue === 'number')
|
||||
? result.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseTimelineValue = getNodeBaseTimelineValue(result);
|
||||
const nodeKey = buildTimelineAdjustmentKey(result, i);
|
||||
const adjustment = adjustments[nodeKey] || 0;
|
||||
const adjustedTimelineValue = baseTimelineValue + adjustment;
|
||||
@ -4151,12 +4164,7 @@ export default function App() {
|
||||
if (!Array.isArray(nodes) || nodes.length === 0 || roundedExtra === 0) return {};
|
||||
|
||||
const isTurnover = (node: any) => node?.nodeName === '周转周期';
|
||||
const toBase = (node: any) => {
|
||||
const v = typeof node?.timelineValue === 'number'
|
||||
? node.timelineValue
|
||||
: (typeof node?.adjustedTimelineValue === 'number' ? node.adjustedTimelineValue : 0);
|
||||
return Number.isFinite(v) ? v : 0;
|
||||
};
|
||||
const toBase = (node: any) => getNodeBaseTimelineValue(node);
|
||||
|
||||
const eligible = nodes
|
||||
.map((n, i) => ({ i, base: toBase(n), turnover: isTurnover(n), excluded: !!excluded?.[i] }))
|
||||
@ -4435,11 +4443,7 @@ export default function App() {
|
||||
// 只重新计算从第一个调整节点开始的后续节点
|
||||
for (let i = firstAdjustedIndex; i < updatedResults.length; i++) {
|
||||
const result = updatedResults[i];
|
||||
const baseTimelineValue = (typeof result.timelineValue === 'number')
|
||||
? result.timelineValue
|
||||
: (typeof result.adjustedTimelineValue === 'number')
|
||||
? result.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseTimelineValue = getNodeBaseTimelineValue(result);
|
||||
const nodeKey = buildTimelineAdjustmentKey(result, i);
|
||||
const adjustment = adjustments[nodeKey] || 0;
|
||||
const adjustedTimelineValue = baseTimelineValue + adjustment;
|
||||
@ -6980,9 +6984,7 @@ const omsVersionColumns = [
|
||||
}
|
||||
]}
|
||||
dataSource={nodes.map((n, index) => {
|
||||
const base = typeof n?.timelineValue === 'number'
|
||||
? n.timelineValue
|
||||
: (typeof n?.adjustedTimelineValue === 'number' ? n.adjustedTimelineValue : 0);
|
||||
const base = getNodeBaseTimelineValue(n);
|
||||
return {
|
||||
key: index,
|
||||
index,
|
||||
@ -7360,11 +7362,7 @@ const omsVersionColumns = [
|
||||
{timelineResults.map((result, index) => {
|
||||
const nodeKey = buildTimelineAdjustmentKey(result, index);
|
||||
const adjustment = timelineAdjustments[nodeKey] || 0;
|
||||
const baseValue = (typeof result.timelineValue === 'number')
|
||||
? result.timelineValue
|
||||
: (typeof result.adjustedTimelineValue === 'number')
|
||||
? result.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseValue = getNodeBaseTimelineValue(result);
|
||||
const adjustedValue = baseValue + adjustment;
|
||||
|
||||
// 检查是否为周转周期节点
|
||||
@ -7375,11 +7373,7 @@ const omsVersionColumns = [
|
||||
if (r.nodeName === '周转周期') {
|
||||
const k = buildTimelineAdjustmentKey(r, i);
|
||||
const adj = timelineAdjustments[k] || 0;
|
||||
const baseVal = (typeof r.timelineValue === 'number')
|
||||
? r.timelineValue
|
||||
: (typeof r.adjustedTimelineValue === 'number')
|
||||
? r.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseVal = getNodeBaseTimelineValue(r);
|
||||
return (baseVal + adj) === 0;
|
||||
}
|
||||
return false;
|
||||
@ -7540,11 +7534,7 @@ const omsVersionColumns = [
|
||||
const desiredBusinessDays = Math.round(hi * 2) / 2; // 与UI保持0.5粒度一致
|
||||
|
||||
// 目标调整量 = 目标工作日数 - 基准时效值
|
||||
const baseValue = (typeof currentResult.timelineValue === 'number')
|
||||
? currentResult.timelineValue
|
||||
: (typeof currentResult.adjustedTimelineValue === 'number')
|
||||
? currentResult.adjustedTimelineValue
|
||||
: 0;
|
||||
const baseValue = getNodeBaseTimelineValue(currentResult);
|
||||
|
||||
const desiredAdjustmentAbs = desiredBusinessDays - baseValue;
|
||||
const currentAdj = timelineAdjustments[nodeKey] || 0;
|
||||
@ -7579,9 +7569,7 @@ const omsVersionColumns = [
|
||||
disabled={isTurnoverNode}
|
||||
onClick={() => {
|
||||
try {
|
||||
const baseTimelineValue = (typeof result.timelineValue === 'number')
|
||||
? result.timelineValue
|
||||
: (typeof result.adjustedTimelineValue === 'number' ? result.adjustedTimelineValue : 0);
|
||||
const baseTimelineValue = getNodeBaseTimelineValue(result);
|
||||
const currentAdj = timelineAdjustments[nodeKey] || 0;
|
||||
const targetAdj = -baseTimelineValue;
|
||||
const deltaToApply = targetAdj - currentAdj;
|
||||
|
||||
Reference in New Issue
Block a user