==========================路由命名规范===========================
**不是很智能的规范慢慢优化吧

***作用就是 不用再需要每个组件去this.$store.commit('pushHeaderTab', tab)了

*****示例一*****
******此示例为静态路由时******
{
  name: '客户', // 必有 //用于tab显示的名称
  path: '/customer',
  component: Customer,
  meta: {   // 必有 (login、loginout 可以没有) //设置路由额外的数据
    tabAttr: 'constant', // 必有 // 用于声明此路由是 静态的还是动态的 //值有 "constant(静态)" "variable(动态)"
    value: 'customer' //必有 // 用于声明此路由唯一的值
  }
}
===========================================================================================================================================
*****示例二*****
******此示例为动态路由********
1,当view效果和edit效果调用同一 一个组件时（必需用 id 来区分）
****************************
{
  name: '客户信息',
  path: '/customer_edit/:id', // 组件开发 id === '0' 时为新增 否则 详情
  component: CustomerEdit,
  meta: {
    tabAttr: 'variable', //注意动态路由这里的 variable
    value: 'customer',
    tabName: [ //注意动态路由的meta 数据 多一个属性 tabName 当view效果和edit效果调用同一 一个组件时 如下写要显示的tab名称
      {
        addName: '客户新增',// id === '0'
        editName: '客户详情' // id !=== '0' && id
      }
    ]
  }
}
=====================================================================================================================================
*****示例三*****
=====================================================
****此示例为动态路由*****
    1,当一个组件被多个模块调用（必需用 type 来区分）                               最重要的俩句话！！！！！！！
    2,每个模块都有view效果和edit效果时 （必需用 id 来区分）
***********************
====================================================
{
  name: '物料详情',
  path: '/fabric_edit/:id/type/:type', // 比如，此组件 type === '1' 时 面料  type === '2' 时 辅料
  component: FabricEdit,
  meta: {
    tabAttr: 'variable',
    value: 'fabric_edit',
    tabName: [
      {
        type: '1', // 注意：这里的type值必需和上面的定义值一样 （不必用 1,2来表示 可以随便命名 只要这里的值和 上面的组件调用时的值保持一致）
        addName: '面料新增',
        editName: '面料详情'
      },
      {
        type: '2',// 注意：这里的type值必需和上面的定义值一样 （不必用 1,2来表示 可以随便命名 只要这里的值和 上面的组件调用时的值保持一致）
        addName: '辅料新增',
        editName: '辅料详情'
      }
    ]
  }
}
