fix(consignment): 修复寄卖层级树默认展开不生效

This commit is contained in:
2026-11-09 16:12:47 +08:00
parent 2cf93824e4
commit 632df1e03b
4 changed files with 34 additions and 18 deletions
@@ -31,7 +31,9 @@ type TemplateOption = {
}
type TemplateTreeNode = {
key: string
// rc-tree 以节点的 value 作为内部 key(fieldNames.key 默认指向 value),
// 自定义 key 必须与 value 完全一致,否则 treeExpandedKeys 无法命中。
key: number
value: number
title: string
selectable: boolean
@@ -188,7 +190,7 @@ export default function ConsignmentTemplateCopyModal({
const root = group.root
const rootLabel = root?.label || group.groupName || '未命名分类'
const childNodes: TemplateTreeNode[] = group.children.map((option) => ({
key: `child-${option.value}`,
key: option.value,
value: option.value,
title: option.label,
selectable: true,
@@ -199,7 +201,7 @@ export default function ConsignmentTemplateCopyModal({
if (root && childNodes.length === 0) {
return [
{
key: `root-${root.value}`,
key: root.value,
value: root.value,
title: root.label,
selectable: true,
@@ -212,7 +214,7 @@ export default function ConsignmentTemplateCopyModal({
if (!root) {
if (childNodes.length === 0) return []
const groupNode: TemplateTreeNode = {
key: `group-${group.groupCategoryId}`,
key: -group.groupCategoryId,
value: -group.groupCategoryId,
title: rootLabel,
selectable: false,
@@ -224,7 +226,7 @@ export default function ConsignmentTemplateCopyModal({
}
return [
{
key: `group-${group.groupCategoryId}`,
key: root.value,
value: root.value,
title: root.label,
selectable: !root.disabled,
@@ -237,7 +239,7 @@ export default function ConsignmentTemplateCopyModal({
})
}, [options, categoryNames])
const treeGroupKeys = useMemo(
() => treeData.filter((node) => node.children?.length).map((node) => node.key),
() => treeData.filter((node) => node.children?.length).map((node) => node.value),
[treeData],
)
@@ -127,7 +127,9 @@ function resolveGiftEvidenceEmptyText(record: {
}
type InventoryFilterTreeNode = {
key: string
// rc-tree 以节点的 value 作为内部 key(fieldNames.key 默认指向 value),
// 自定义 key 必须与 value 完全一致,否则 treeExpandedKeys 无法命中。
key: number
value: number
title: string
selectable: boolean
@@ -217,7 +219,7 @@ export default function ConsignmentInventoryPanel() {
const root = group.root
const rootLabel = root?.name || group.groupName || '未命名分类'
const childNodes: InventoryFilterTreeNode[] = group.children.map((item) => ({
key: `child-${item.categoryId}`,
key: item.categoryId,
value: item.categoryId,
title: item.name,
selectable: true,
@@ -227,7 +229,7 @@ export default function ConsignmentInventoryPanel() {
if (root && childNodes.length === 0) {
return [
{
key: `root-${root.categoryId}`,
key: root.categoryId,
value: root.categoryId,
title: rootLabel,
selectable: true,
@@ -239,7 +241,7 @@ export default function ConsignmentInventoryPanel() {
if (!root) {
if (childNodes.length === 0) return []
const groupNode: InventoryFilterTreeNode = {
key: `group-${group.groupCategoryId}`,
key: -group.groupCategoryId,
value: -group.groupCategoryId,
title: rootLabel,
selectable: false,
@@ -251,7 +253,7 @@ export default function ConsignmentInventoryPanel() {
}
return [
{
key: `group-${group.groupCategoryId}`,
key: root.categoryId,
value: root.categoryId,
title: rootLabel,
selectable: true,
@@ -264,7 +266,7 @@ export default function ConsignmentInventoryPanel() {
})
}, [filterCategories])
const categoryGroupKeys = useMemo(
() => categoryTreeData.filter((node) => node.children?.length).map((node) => node.key),
() => categoryTreeData.filter((node) => node.children?.length).map((node) => node.value),
[categoryTreeData],
)
useEffect(() => {
@@ -154,7 +154,7 @@ function orderWorkerProfiles(profiles: WorkerConsignmentProfile[]): WorkerConsig
}
type WorkerProfileTreeNode = {
key: string
key: number
value: number
title: string
selectable: boolean
@@ -271,7 +271,7 @@ export default function WorkerConsignmentPage() {
? root.tabTitle || root.categoryName || root.name
: group.groupName || '未命名分类'
const childNodes: WorkerProfileTreeNode[] = group.children.map((child) => ({
key: `child-${child.profileId}`,
key: child.profileId,
value: child.profileId,
title: child.tabTitle || child.categoryName || child.name,
selectable: true,
@@ -281,7 +281,7 @@ export default function WorkerConsignmentPage() {
if (root && childNodes.length === 0) {
return [
{
key: `root-${root.profileId}`,
key: root.profileId,
value: root.profileId,
title: rootLabel,
selectable: true,
@@ -293,7 +293,7 @@ export default function WorkerConsignmentPage() {
if (!root) {
if (childNodes.length === 0) return []
const groupNode: WorkerProfileTreeNode = {
key: `group-${group.groupCategoryId}`,
key: -group.groupCategoryId,
value: -group.groupCategoryId,
title: rootLabel,
selectable: false,
@@ -305,7 +305,7 @@ export default function WorkerConsignmentPage() {
}
return [
{
key: `group-${group.groupCategoryId}`,
key: root.profileId,
value: root.profileId,
title: rootLabel,
selectable: true,
@@ -318,7 +318,7 @@ export default function WorkerConsignmentPage() {
})
}, [orderedConsignmentProfiles])
const profileGroupKeys = useMemo(
() => profileTreeData.filter((node) => node.children?.length).map((node) => node.key),
() => profileTreeData.filter((node) => node.children?.length).map((node) => node.value),
[profileTreeData],
)
useEffect(() => {
@@ -155,6 +155,10 @@ test('寄卖配置:规格字段与联系方式区块提供复制模板配置
'来源树默认必须展开二级',
)
assert.ok(modal.includes('treeTitleRender'), '来源树必须自定义层级标题')
assert.ok(
!modal.includes('key: `') && modal.includes('.map((node) => node.value)'),
'展开键必须来自节点 value(rc-tree 内部 key 即 value),否则默认展开失效',
)
})
test('打手端:寄卖分类按一二级层级展示', () => {
@@ -168,6 +172,10 @@ test('打手端:寄卖分类按一二级层级展示', () => {
'默认必须展开二级',
)
assert.ok(page.includes('treeTitleRender'), '必须自定义层级标题')
assert.ok(
!page.includes('key: `') && page.includes('.map((node) => node.value)'),
'展开键必须来自节点 value(rc-tree 内部 key 即 value),否则默认展开失效',
)
assert.ok(page.includes('二级'), '二级分类必须有层级标签')
})
@@ -180,5 +188,9 @@ test('寄售仓库:寄卖分类筛选按一二级层级展示', () => {
'默认必须展开二级',
)
assert.ok(panel.includes('treeTitleRender'), '必须自定义层级标题')
assert.ok(
!panel.includes('key: `') && panel.includes('.map((node) => node.value)'),
'展开键必须来自节点 value(rc-tree 内部 key 即 value),否则默认展开失效',
)
assert.ok(panel.includes('继承'), '继承型二级分类必须有继承标记')
})