1.2.10 • Published 4 years ago

abc-common-header v1.2.10

Weekly downloads
4
License
-
Repository
-
Last release
4 years ago

CommonHeader - 公共头部组件

公共头部组件,包含搜索框、主导航菜单、二级导航菜单、热门搜索、返回主站首页按钮、九宫格产品菜单按钮、登陆用户信息、语言切换按钮、消息中心按钮等一系列功能组件及多种布局类型的样式。

项目主页

适用范围

所有需要使用公共头部组件的页面、详情页等等,下图为各种类型的头部组件截图:

公共头部组件截图

代码演示

上列组件截图中所列出的几种头部类型的关键配置属性将在下列演示代码中一一对应:

import CommonHeader from 'abc-common-header';

...

// 综搜默认头部
<CommonHeader
  userInfo={userStore.userInfo}
  userInfoLoadState={userStore.state}
  hotKeyword={suggestStore.hotKeyword}
  hotSearch={suggestStore.hotSearch.toJS()}
  searchSuggest={suggestStore.searchSuggest.toJS()}
  onSearch={this.handleSearch}
  onRequestSearchSuggest={this.handleRequestSearchSuggest}
  mainNavMenu={this.state.mainNavMenu}
  onMainNavMenuClick={this.handleMainNavMenuClick}
/>

// 综搜默认头部 - 限制主导航菜单项最大显示数量
<CommonHeader
  ...

  // 关键属性
  mainNavMenuMaxShowCount={6}
/>

// 详情页头部
<CommonHeader
  ...

  // 关键属性
  type="thin"
  title="上市公司"
/>

// 详情页头部 - 不带搜索框
<CommonHeader
  ...

  // 关键属性
  type="thin"
  title="上市公司"
  showSearchBox={false}
/>

// 子站标准头部
<CommonHeader
  ...

  // 关键属性
  type="normal"
  logoImageUrl={logoUrl}
/>

// 子站标准头部 - 不带搜索框 - 带主导航
<CommonHeader
  ...

  // 关键属性
  type="normal"
  logoImageUrl={logoUrl}
  showSearchBox={false}
  mainNavMenu={this.state.mainNavMenu}
  onMainNavMenuClick={this.handleMainNavMenuClick}
/>

// 子站头部标准 - 带热门搜索及二级导航
<CommonHeader
  ...

  // 关键属性
  type="normal"
  logoImageUrl={logoUrl}
  hotQueryMenu={this.state.hotQueryMenu}
  onHotQueryMenuClick={({key, item}) => console.log(key, item)}
  secondaryNavMenu={this.state.secondaryNavMenu}
  onSecondaryNavMenuClick={this.handleSecondaryNavMenuClick}
/>

API

属性说明类型默认值
type头部组件类型,默认为综搜结果页头部样式,可选值:default(默认,综搜头部样式,居左对齐),normal(子站头部样式,居中对齐),thin(详情页头部样式,居左对齐,高度变窄)stringdefault
fixed是否固定定位在头部booltrue
title头部标题,用于详情页头部stringundefined
logoImageUrl头部logo图片地址string主站logo
logoLinkUrl头部logo链接地址string/
mainSiteOrigin主站起始地址stringhttps://www.analyst.ai
autoAdjustTopPadding当组件为固定定位在头部时,是否自动调整页面头部填充booltrue
mainNavMenu主导航菜单arrayundefined
mainNavMenuMaxShowCount主导航菜单项最大显示个数,超出的菜单项目将显示在“更多”子菜单项中number7
onMainNavMenuClick主导航菜单点击事件回调,回调函数签名:function ({ item, key })functionundefined
secondaryNavMenu二级导航菜单arrayundefined
secondaryNavMenuMaxShowCount二级导航菜单项最大显示个数,超出的菜单项目将显示在“更多”子菜单项中number7
onSecondaryNavMenuClick二级导航菜单点击事件回调,回调函数签名:function ({ item, key })functionundefined
userInfo用户信息数据objectundefined
userInfoLoadState用户信息数据的加载状态:pending / done / errorstringundefined
hotKeyword预制热词(搜索框placeholderobjectundefined
hotSearch热门搜索列表数据arrayundefined
hotQueryMenu热搜语句导航菜单arrayundefined
hotQueryMenuTitle热搜语句导航菜单标题string热门搜索:
onHotQueryMenuClick热搜语句导航菜单项点击事件,回调函数签名:function ({ item, key })functionundefined
searchSuggest搜索建议列表数据arrayundefined
searchBoxPlaceholder搜索框占位文本string""
searchHistoryKey搜索历史的存储Key,用于客户端存储标识stringSEARCH_HISTORY
searchHistoryNS搜索历史的命名空间,用于区别搜索历史的作用域,为空则使用全局搜索历史string""
onSearch搜索事件回调,回调函数签名:function ({ keyword }, { inputFrom, suggestion? })functionundefined
onRequestSearchSuggest请求搜索建议事件回调,回调函数签名:function (keyword)functionundefined
showSearchBox是否显示搜索框booltrue
showLanguageToggle是否显示语言切换按钮boolfalse
languages语言配置,有语言配置无需showLanguageToggle, icon的值覆盖flag配置['zh_cn', {key: 'zh_hk', icon:'iconurl', flag: 'mo'}, en]array['zh_cn', 'zh_hk', 'en']
onLanguageChange语言切换按回调,回调函数签名:function(language, i18n)functionundefined
showHomeButton是否显示返回主站首页按钮booltrue
showProductMenuButton是否显示产品菜单按钮booltrue
showMessageCenterButton是否显示消息中心按钮boolfalse
showLoginUserInfo是否显示登陆用户信息booltrue
suggestCategoryInfoMap搜索建议实体类型相关配置信息映射表,数据结构详见下文object综搜默认配置
messageCenterProps消息中心按钮组件属性,未定义或传递空对象时将不显示消息中心按钮组件,属性参数详见下表objectundefined
productMenuButtonProps产品菜单按钮属性,未定义或传递空对象时将使用默认相关属性,传递的属性将覆盖默认的相关属性,属性参数详见下表objectundefined
productMenuLinkTarget产品菜单链接的打开方式,同a标签的target属性,默认在当前窗口打开string_self
loginUserMenuLinkTarget登陆用户菜单项链接的打开方式,同a标签的target属性,默认在当前窗口打开string_self
homeButtonProps返回主站首页按钮链接的属性对象,用于修改链接的默认属性objectundefined
selectProps搜索框下拉选择框组件属性对象,默认关闭此能力,当传递该对象时,打开此能力,属性参数详见下表objectundefined

消息中心按钮组件属性

属性说明类型默认值
loading是否显示加载指示器boolfalse
unreadCount未读消息条数number0
overflowCount未读消息展示封顶的数字值number99
messages消息列表数据arrayundefined
messageMaxShowCount消息列表最大显示条数number3
onMessageClick消息点击事件回调,默认点击后跳转到对应的feed流页面,回调函数签名:function (event, message)functionundefined
popoverTitle消息列表弹出层标题string消息中心
popoverPlacement消息中心弹出层内容的显示位置,默认显示在下方右对齐stringbottomRight
markAllReadButtonText全部标记为已读按钮文本string全部标记为已读
onMarkAllReadClick全部标记为已读按钮点击事件回调,回调函数签名:function (event)functionundefined
readAllButtonText查看全部消息按钮文本string查看全部消息
onReadAllClick查看全部消息按钮点击事件回调,默认点击后跳转到对应的feed流页面,回调函数签名:function (event)functionundefined

产品菜单按钮组件属性

属性说明类型默认值
loading是否显示加载指示器boolfalse
title菜单标题文本string"全部产品"
userInfo用户信息数据object{}
popoverPlacement产品菜单弹出层的显示位置,默认显示在下方右对齐string"bottomRight"
linkTarget产品菜单链接的打开方式,同a标签的target属性,默认在当前窗口打开string_self
onMenuItemClick菜单项点击事件回调,回调函数签名:function (event, item)functionundefined

下拉选择框组件属性

属性说明类型默认值
defaultValue默认值stringundefined
selectData下拉菜单数据,结构: [{text: '', ...}]object[]
handleSelectChange选中option回调函数:function (value, option)functionundefined

用户信息userInfo属性的依赖数据详情请参考用户中心接口

预制热词hotKeyword与热门搜索列表hotSearch属性的依赖数据详情请参考搜索热词接口

搜索建议列表searchSuggest属性的依赖数据详情请参考搜索建议接口

主导航菜单mainNavMenu,二级导航菜单secondaryNavMenu,热搜语句导航菜单hotQueryMenu属性的依赖数据结构:

[
  {
    key: 'home',
    text: '首页',
    link: '/',
    selected: true,
  },
  {
    key: 'notice',
    text: '公告',
    link: '/notice',
    selected: false,
  },
  {
    key: 'report',
    text: '研报',
    link: '/report',
    selected: false,
  },
  ...
]

其中热搜语句导航菜单hotQueryMenu数据对象中无需selected字段。

suggestCategoryInfoMap搜索建议实体类型相关配置信息映射表的数据结构及默认配置:

// 股票市场代码对应名称映射表
export const stockMarketMap = {
  "sh": "沪市",
  "sz": "深市",
  "hk": "港股",
  "oc": "三板",
  "aon": "美股",
};

// 搜索建议实体类型相关配置信息映射表
export const suggestCategoryInfoMap = {
  // Query
  "query": {
    // 对应实体类型建议的额外说明文本
    // 值类型:string | ReactNode | function (suggestion)
    // 为false时不显示额外说明
    extra: false,

    // 对应实体类型建议的实体详情页面地址
    // 值类型:string | function (suggestion)
    // 为false时不显示详情页面链接
    detailLink: false,
  },
  
  // 股票
  "stock": {
    extra: suggestion => (
      <Fragment>
        <span>{suggestion.code}</span>
        <span>{stockMarketMap[suggestion.category_v2]}</span>
      </Fragment>
    ),
    detailLink: suggestion => (
      `/entity-search/listed-company`
      + `?stock_code=${suggestion.code}`
      + `&stock_name=${suggestion.content}`
      + `&com_uni_code=${suggestion.uni_code2}`
      + `&sec_uni_code=${suggestion.uni_code}`
    ),
  },

  // 基金
  "fund": {
    extra: suggestion => (
      <Fragment>
        <span>{suggestion.code}</span>
        <span>基金</span>
      </Fragment>
    ),
    detailLink: suggestion => (
      `/entity-search/fund/${suggestion.code}`
      + `?sec_uni_code=${suggestion.uni_code}`
    ),
  },

  // 指数
  "index": {
    extra: suggestion => (
      <Fragment>
        <span>{suggestion.code}</span>
        <span>指数</span>
      </Fragment>
    ),
    detailLink: false,
  },

  // 主题
  "plate": {
    extra: "主题",
    detailLink: suggestion => (
      `/entity-search/theme/${suggestion.uni_code2}`
      + `?name=${suggestion.content}`
    ),
  },

  // 行业
  "industry": {
    extra: "行业",
    detailLink: suggestion => (
      `/entity-search/industry/${suggestion.uni_code2}`
      + `?name=${suggestion.content}`
    ),
  },

  // 券商
  "broker": {
    extra: "券商",
    detailLink: suggestion => (
      `/entity-search/broker/${suggestion.uni_code}`
    ),
  },

  // 基金公司
  "fundcompany": {
    extra: "基金公司",
    detailLink: suggestion => (
      `/entity-search/funds-company/${suggestion.uni_code}`
      + `?name=${suggestion.content}`
    ),
  },

  // 分析师
  "analyst": {
    extra: suggestion => `${toString(suggestion.content2)}分析师`,
    detailLink: suggestion => (
      `/entity-search/analyst?id=${suggestion.uni_code}`
    ),
  },

  // 基金经理
  "fundmanager": {
    extra: suggestion => `${toString(suggestion.content2)}基金经理`,
    detailLink: suggestion => (
      `/entity-search/fund-manager/${suggestion.uni_code}`
    ),
  },

  // 公司高管
  "corporateexecutive": {
    extra: suggestion => `${toString(suggestion.content2)}高管`,
    detailLink: suggestion => (
      `/entity-search/corporate-executive/${suggestion.uni_code}`
    ),
  },

  // 金融大V
  "financevip": {
    extra: "金融大V",
    detailLink: suggestion => (
      `/entity-search/finance-vip/${suggestion.uni_code}`
    ),
  },

  // 公众号
  "wechat": {
    extra: "微信公众号",
    detailLink: suggestion => (
      `/entity-search/wechat-public/${suggestion.uni_code}`
      + `?name=${suggestion.content}`
    ),
  },
};

备注: 头部中的搜索框组件中的值value是由路由驱动的,其值将与路由中的keyword查询参数自动保持同步(在每次路由改变时),为了遵循单一来源原则,使网站数据加载统一由路由来驱动,如果需要修改搜索框的value,请通过react-router-domLink组件或其高阶组件withRouter配合historypushreplace方法来更改路由查询参数中的keyword字段来实现。
如果不想使用组件本身的翻译文件,可以在顶级全量配置abcCommonHeader的翻译文件。