tabbar.js 2.62 KB
const defaultTabbarItemMap = {
  home: {
    key: 'home',
    title: '首页',
    visible: true,
    page_url: '/pages/index/index',
    webview_url: '',
    webview_title: '首页',
  },
  message: {
    key: 'message',
    title: '资讯',
    visible: true,
    page_url: '/pages/message/index',
    webview_url: '',
    webview_title: '资讯',
  },
  application: {
    key: 'application',
    title: '应用',
    visible: true,
    page_url: '/pages/application/index',
    webview_url: 'https://oa-dev.onwall.cn/f/futian_home/?f=f&p=futian_list',
    webview_title: '应用',
  },
  mine: {
    key: 'mine',
    title: '我的',
    visible: true,
    page_url: '/pages/mine/index',
    webview_url: 'https://oa-dev.onwall.cn/f/futian_home/?f=f&p=futian_list',
    webview_title: '我的',
  },
}

export const TABBAR_ORDER = ['home', 'message', 'application', 'mine']

const normalizeVisibleValue = (rawValue, fallbackValue = true) => {
  if (typeof rawValue === 'boolean') {
    return rawValue
  }

  if (rawValue === 1 || rawValue === '1') {
    return true
  }

  if (rawValue === 0 || rawValue === '0') {
    return false
  }

  return fallbackValue
}

export const getDefaultTabbarItem = (key) => {
  const normalizedKey = String(key || '').trim()
  const fallbackItem = defaultTabbarItemMap[normalizedKey]

  if (!fallbackItem) {
    return null
  }

  return {
    ...fallbackItem,
  }
}

export const getDefaultTabbarItems = () => (
  TABBAR_ORDER
    .map((key) => getDefaultTabbarItem(key))
    .filter(Boolean)
)

export const normalizeTabbarItem = (rawItem = {}) => {
  const normalizedKey = String(rawItem.key || rawItem.name || '').trim()
  const fallbackItem = getDefaultTabbarItem(normalizedKey)

  if (!fallbackItem) {
    return null
  }

  return {
    ...fallbackItem,
    ...rawItem,
    key: fallbackItem.key,
    title: String(rawItem.title || fallbackItem.title),
    page_url: String(rawItem.page_url || fallbackItem.page_url || ''),
    webview_url: String(rawItem.webview_url || rawItem.link_url || rawItem.url || fallbackItem.webview_url || ''),
    webview_title: String(rawItem.webview_title || rawItem.link_title || rawItem.title || fallbackItem.webview_title || ''),
    visible: normalizeVisibleValue(
      rawItem.visible ?? rawItem.is_show ?? rawItem.show,
      fallbackItem.visible,
    ),
  }
}

export const normalizeTabbarItems = (rawItems = []) => {
  if (!Array.isArray(rawItems) || !rawItems.length) {
    return getDefaultTabbarItems()
  }

  const normalizedItems = rawItems
    .map((item) => normalizeTabbarItem(item))
    .filter(Boolean)

  return normalizedItems.length ? normalizedItems : getDefaultTabbarItems()
}