This commit is contained in:
Leo
2026-01-05 19:16:39 +08:00
parent 5dc38831eb
commit 9b2473334b
2 changed files with 178 additions and 9 deletions

View File

@@ -22,7 +22,7 @@
import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
import MobileBottomNav from '@/components/MobileBottomNav'
import ResizeMixin from './mixin/ResizeHandler'
import { mapState } from 'vuex'
import { mapState, mapGetters } from 'vuex'
import variables from '@/assets/styles/variables.scss'
export default {
@@ -45,10 +45,87 @@ export default {
needTagsView: state => state.settings.tagsView,
fixedHeader: state => state.settings.fixedHeader
}),
...mapGetters(['sidebarRouters']),
mobileNavItems() {
// 可以从配置或store中获取也可以自定义
// 如果返回空数组,组件会使用默认逻辑
return []
// 根据业务需求配置底部导航项
// 匹配关键词来自动查找路由,如果找不到则使用指定路径
const navConfig = [
{ keywords: ['慢单', 'sloworder'], label: '下好的慢单', icon: 'el-icon-list', defaultPath: '/sloworder/index' },
{ keywords: ['指令', 'instruction', 'jd-instruction'], label: '指令执行', icon: 'el-icon-edit-outline', defaultPath: '/jd-instruction/index' },
{ keywords: ['型号', 'productJdConfig', 'product'], label: '型号配置', icon: 'el-icon-setting', defaultPath: '/jarvis/productJdConfig' },
{ keywords: ['商品', 'favorite', 'erpProduct'], label: '商品列表', icon: 'el-icon-goods', defaultPath: '/favorite/index' }
]
const routes = this.sidebarRouters || []
// 扁平化路由
const flattenRoutes = (routes, parentPath = '') => {
let result = []
if (!routes || !Array.isArray(routes)) return result
routes.forEach(route => {
if (route.hidden) return
let fullPath = route.path || ''
if (parentPath) {
if (fullPath.startsWith('/')) {
fullPath = fullPath
} else {
const basePath = parentPath.endsWith('/') ? parentPath.slice(0, -1) : parentPath
fullPath = `${basePath}/${fullPath}`.replace(/\/+/g, '/')
}
}
if (!fullPath.startsWith('/')) {
fullPath = '/' + fullPath
}
if (route.children && route.children.length > 0) {
result = result.concat(flattenRoutes(route.children, fullPath))
} else {
if (route.meta && route.meta.title && fullPath) {
result.push({
path: fullPath,
label: route.meta.title,
route: route
})
}
}
})
return result
}
const flatRoutes = flattenRoutes(routes)
// 为每个配置项查找匹配的路由
const navItems = navConfig.map(config => {
// 先尝试从路由中匹配
const matchedRoute = flatRoutes.find(route => {
const path = (route.path || '').toLowerCase()
const title = (route.label || '').toLowerCase()
return config.keywords.some(keyword =>
path.includes(keyword.toLowerCase()) || title.includes(keyword.toLowerCase())
)
})
if (matchedRoute) {
return {
path: matchedRoute.path,
label: config.label,
icon: config.icon
}
}
// 如果没找到,使用默认路径
return {
path: config.defaultPath,
label: config.label,
icon: config.icon
}
})
// 过滤掉无效的路由
return navItems.filter(item => item.path)
},
classObj() {
return {