图片描述:选择BOM弹窗,左侧BOM列表默认没有预选项,用户希望打开弹窗时自动根据项目关联的成品物料预选对应BOM,同时支持手动搜索切换。
先找到弹窗初始化和 selectedBOMRecord 的相关逻辑:
关键逻辑清晰了。BOMPickerDialog 有 open/onOpenChange/onConfirm,但没有 defaultMaterialCode prop。需要:
BOMPickerDialog 增加 defaultMaterialCode?: string prop,打开时自动找到匹配的 record 并预选linkedMaterialCode现在找到 JSX 调用处和"新增批次"按钮:
完整了解了。现在三步完成:
1. BOMPickerDialog 增加 defaultMaterialCode prop,打开时用 useEffect 自动预选对应 record:
2. 在 LongLeadTimePage 的 BOMPickerDialog 调用处传入 defaultMaterialCode:
错误的那处是第584行(另一个组件),需要找到第1135行那处:
BOMPickerDialog 新增了 defaultMaterialCode 可选 prop,通过 useEffect 监听 open 变化——弹窗打开时若存在该值,自动在 mockEBOMRecords 中匹配并预选对应 BOM 记录(同时清空搜索和选项状态);弹窗关闭时重置所有状态。LongLeadTimePage 打开弹窗时传入当前选中项目的 linkedMaterialCode,用户仍可在左侧手动点击其他 BOM 记录切换选择。
报错 selectedProject is not defined,是上一步误将 defaultMaterialCode 传入了错误的组件(第 584 行那处不在 LongLeadTimePage scope 内)。先定位并修复:
确认了——第 584 行是被误注入的错误位置(某个不包含 selectedProject 的组件末尾)。将其还原:
上一步误将 defaultMaterialCode 传入了文件中另一个较早的 BOMPickerDialog 调用处(不在 LongLeadTimePage 函数作用域内,因此 selectedProject 未定义)。已还原该处,仅保留 LongLeadTimePage 末尾正确位置的那次调用,错误应已消除。