Skip to content

自定义标签面包屑说明

标签面包屑接收三个入参,当前高亮的数据项,当前标签数组以及当前控制高亮的唯一key,支持删除当前项,点击当前项,删除所有标签,删除其他标签四个事件。数据以及高亮数据逻辑外部 处理,内部只负责布局的样式计算和事件的反馈

如何使用

js
<script setup lang="ts">
interface openMenuItem {
  id: string | number
  name: string
  NoDelete: boolean
  path?: string | null
  icon?: string | null
  appName?: string | null
  subAppId?: number | null
  type?: string | null
  isNoMaster: boolean
}
import { ref } from 'vue'
import { BreadCrumbTab } from '@fs/fui'
const momOpenMenus = ref<openMenuItem[]>([
  {
    "id": 99999999999999,
    "name": "首页",
    "NoDelete": true,
    "path": "/home",
    "icon": null,
    "appName": null,
    "subAppId": null,
    "isNoMaster": true
  },
  {
    "id": 542,
    "name": "设备信息维护",
    "NoDelete": false,
    "path": "/production-equipment/inform-maintain",
    "icon": "",
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 765,
    "name": "设备数据监控",
    "NoDelete": false,
    "path": "/production-equipment/data-monitoring",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 195,
    "name": "工艺路线",
    "NoDelete": false,
    "path": "/basicData/processRoute",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 197,
    "name": "工作中心",
    "NoDelete": false,
    "path": "/basicData/workCenter",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 196,
    "name": "工序",
    "NoDelete": false,
    "path": "/basicData/process",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 207,
    "name": "生产检验单",
    "NoDelete": false,
    "path": "/production/inspection",
    "icon": null,
    "appName": "quality-manage",
    "subAppId": 13,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
])
const currentMomMenuActive = ref<openMenuItem>({
  id: 999999999999999,
  name: '首页',
  NoDelete: true,
  path: '/home',
  icon: null,
  appName: null,
  subAppId: null,
  isNoMaster: true,
})
const handleMenuClick = (item: openMenuItem, type: string, arr = []) => {
  currentMomMenuActive.value = item
  if (arr && arr.length > 0) {
    momOpenMenus.value = arr.concat()
  }
  console.log('menuClick:::', item, type, arr)
}
const handleMenuDelete = (item: any) => {
    const menusArr = momOpenMenus.value.concat()
    momOpenMenus.value = menusArr.filter((menu) => menu.id != item.id)
    const index = menusArr.findIndex((menu: openMenuItem) => menu.id == item.id)
    if (currentMomMenuActive.value.id == item.id) {
      // 关闭当前页面,高亮上一个页面
      let current = menusArr[index - 1]
      currentMomMenuActive.value = current
  }
  console.log('menuDelete:::', item)
}
const handleMenuDeleteAll = () => {
  momOpenMenus.value = [{
    "id": 99999999999999,
    "name": "首页",
    "NoDelete": true,
    "path": "/home",
    "icon": null,
    "appName": null,
    "subAppId": null,
    "isNoMaster": true
  }]
  currentMomMenuActive.value = {
    "id": 99999999999999,
    "name": "首页",
    "NoDelete": true,
    "path": "/home",
    "icon": null,
    "appName": null,
    "subAppId": null,
    "isNoMaster": true
  }
  console.log('deleteAll:::')
}
const handleMenuDeleteOther = (item: openMenuItem) => {
  console.log('删除其他:::')
  momOpenMenus.value = momOpenMenus.value.filter((menu) => menu.id == item.id || menu.id == 99999999999999)
}
</script>

<template>
  <BreadCrumbTab
    :momOpenMenus="momOpenMenus"
    :currentMomMenuActive="currentMomMenuActive"
    itemKey="id"
    @m-item-c="handleMenuClick"
    @m-item-d="handleMenuDelete"
    @m-item-all="handleMenuDeleteAll"
    @m-item-other="handleMenuDeleteOther"
  >
  </BreadCrumbTab>
</template>

<style lang="less" scoped></style>

代码演示

基本使用

<template>
  <BreadCrumbTab
    :momOpenMenus="momOpenMenus"
    :currentMomMenuActive="currentMomMenuActive"
    itemKey="id"
    @m-item-c="handleMenuClick"
    @m-item-d="handleMenuDelete"
    @m-item-all="handleMenuDeleteAll"
    @m-item-other="handleMenuDeleteOther"
  >
  </BreadCrumbTab>
</template>
<script setup lang="ts">
export interface openMenuItem {
  id?: string | number // 菜单id
  name: string // 菜单名字
  NoDelete?: boolean // 是否带删除按钮
  path?: string | null // 菜单路径
  icon?: string | null // 菜单图标
  appName?: string | null // 当前子应用名字,没有可以不传
  subAppId?: number | null // 当前微前端子应用id
  type?: string | null // 菜单类型
  isNoMaster?: boolean // 是否是不包含父级的菜单
}
import { ref } from 'vue'
import { BreadCrumbTab } from '@fs/fui'
const momOpenMenus = ref<openMenuItem[]>([
  {
    id: 99999999999999,
    name: "首页",
    NoDelete: true,
    path: "/home",
    icon: null,
    appName: null,
    subAppId: null,
    type: 'menus_item-normal',
    isNoMaster: true,
  },
  {
    id: 542,
    name: "设备信息维护",
    NoDelete: false,
    path: "/production-equipment/inform-maintain",
    icon: "",
    appName: "prod-manage",
    subAppId: 12,
    type: "menus_item-normal",
    isNoMaster: false
  },
  {
    id: 765,
    name: "设备数据监控",
    NoDelete: false,
    path: "/production-equipment/data-monitoring",
    icon: null,
    appName: "prod-manage",
    subAppId: 12,
    type: "menus_item-normal",
    isNoMaster: false,
  },
  {
    "id": 195,
    "name": "工艺路线",
    "NoDelete": false,
    "path": "/basicData/processRoute",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 197,
    "name": "工作中心",
    "NoDelete": false,
    "path": "/basicData/workCenter",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 196,
    "name": "工序",
    "NoDelete": false,
    "path": "/basicData/process",
    "icon": null,
    "appName": "prod-manage",
    "subAppId": 12,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
  {
    "id": 207,
    "name": "生产检验单",
    "NoDelete": false,
    "path": "/production/inspection",
    "icon": null,
    "appName": "quality-manage",
    "subAppId": 13,
    "type": "menus_item-normal",
    "isNoMaster": false
  },
])
const currentMomMenuActive = ref<openMenuItem>({
  id: 999999999999999,
  name: '首页',
  NoDelete: true,
  path: '/home',
  icon: null,
  appName: null,
  subAppId: null,
  type: 'menus_item-normal',
  isNoMaster: true,
})
const handleMenuClick = (item: any, type: string, arr = []) => {
  currentMomMenuActive.value = item
  if (arr && arr.length > 0) {
    momOpenMenus.value = arr.concat()
  }
  console.log('menuClick:::', item, type, arr)
}
const handleMenuDelete = (item: any) => {
  const menusArr = momOpenMenus.value.concat()
  momOpenMenus.value = menusArr.filter((menu) => menu.id != item.id)
  const index = menusArr.findIndex((menu: openMenuItem) => menu.id == item.id)
  if (currentMomMenuActive.value.id == item.id) {
    // 关闭当前页面,高亮上一个页面
    let current = menusArr[index - 1]
    currentMomMenuActive.value = current
  }
  console.log('menuDelete:::', item)
}
const handleMenuDeleteAll = () => {
  momOpenMenus.value = [{
    "id": 99999999999999,
    "name": "首页",
    "NoDelete": true,
    "path": "/home",
    "icon": null,
    "appName": null,
    "subAppId": null,
    "isNoMaster": true
  }]
  currentMomMenuActive.value = {
    "id": 99999999999999,
    "name": "首页",
    "NoDelete": true,
    "path": "/home",
    "icon": null,
    "appName": null,
    "subAppId": null,
    "isNoMaster": true
  }
  console.log('deleteAll:::')
}
const handleMenuDeleteOther = (item:openMenuItem) => {
  momOpenMenus.value = momOpenMenus.value.filter((menu) => menu.id == item.id || menu.id == 99999999999999)
  console.log('删除其他:::')
}
</script>
<style lang="less">
.dc-bread-container {
  li + li {
    margin-top: 0;
  }
}
</style>

props

参数说明类型默认值版本
itemKey当前高亮keystring
momOpenMenus标签数组array--
currentMomMenuActive当前高亮对象object--

事件

事件名说明回调参数版本
mItemC当前点击的标签栏, type是点击的菜单的类型,是横向菜单还是竖向菜单,‘ver’ 是竖向菜单,‘hor’为横向菜单,arr为重排序数组function(item: openMenuItem, type: string, arr = [])-
mItemD删除当前项触发, 返回值为当前删除项function(item: openMenuItem)-
mItemAll删除所有触发function()-
mItemOther删除其他触发, 返回值为当前删除项function(item: openMenuItem)-