董国庆
2026-06-23 c5dab2bba952cfb330a559d53ae2a0bc38e547b6
Merge branch 'feat/deploy-2.0' of http://gitlab.xiaopeng.local:18080/robotaxi1/xp-robotaxi-web into feat/deploy-2.0
1个文件已修改
38 ■■■■■ 已修改文件
src/components/custom/SearchPanel.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/custom/SearchPanel.vue
@@ -43,24 +43,42 @@
  return 2
}
function countSlotNodes(nodes: any[]): number {
  return nodes.reduce((count, node) => {
/**
 * 解析单个网格项占据的列数(span),默认 1。
 * 兼容 span 为数字或纯数字字符串的写法;其余(如响应式字符串)回退为 1。
 */
function resolveSpan(node: any): number {
  const raw = node?.props?.span
  if (typeof raw === 'number')
    return Number.isFinite(raw) && raw > 0 ? raw : 1
  if (typeof raw === 'string' && /^\d+$/.test(raw.trim()))
    return Math.max(Number(raw), 1)
  return 1
}
/**
 * 统计插槽节点占据的「总列数」(累加各节点 span),
 * 而非节点个数 —— 否则跨列项(span>1)会导致折叠行数计算偏小,
 * 出现内容被折叠却不显示「展开」按钮的问题。
 */
function countSlotSpans(nodes: any[]): number {
  return nodes.reduce((sum, node) => {
    if (!node)
      return count
      return sum
    if (Array.isArray(node))
      return count + countSlotNodes(node)
      return sum + countSlotSpans(node)
    if (node.type === Comment)
      return count
      return sum
    if (node.type === Fragment)
      return count + countSlotNodes(node.children || [])
    return count + 1
      return sum + countSlotSpans(node.children || [])
    return sum + resolveSpan(node)
  }, 0)
}
const gridItemCount = computed(() => {
  const defaultSlotCount = countSlotNodes(slots.default?.() || [])
  // 操作区固定占据一个 suffix 项,需要纳入折叠行数计算
  return defaultSlotCount + 1
  const defaultSlotSpans = countSlotSpans(slots.default?.() || [])
  // 操作区固定占据一个 suffix 项(span=1),需要纳入折叠行数计算
  return defaultSlotSpans + 1
})
function updateToggleVisible() {