1.7.2
Former-commit-id: c71865a44f92cff9e961da64298224d008eae627
This commit is contained in:
Generated
+1210
-1190
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "d2-admin",
|
"name": "d2-admin",
|
||||||
"version": "1.7.0",
|
"version": "1.7.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve --open",
|
"serve": "vue-cli-service serve --open",
|
||||||
"start": "npm run serve",
|
"start": "npm run serve",
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
"better-scroll": "^1.15.2",
|
"better-scroll": "^1.15.2",
|
||||||
"core-js": "^2.6.5",
|
"core-js": "^2.6.5",
|
||||||
"dayjs": "^1.8.12",
|
"dayjs": "^1.8.12",
|
||||||
"element-ui": "^2.7.2",
|
"element-ui": "^2.11.1",
|
||||||
"flex.css": "^1.1.7",
|
"flex.css": "^1.1.7",
|
||||||
"fuse.js": "^3.4.4",
|
"fuse.js": "^3.4.4",
|
||||||
"hotkeys-js": "^3.6.2",
|
"hotkeys-js": "^3.6.2",
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-menu-item :index="menu.path || uniqueId">
|
|
||||||
<i v-if="menu.icon" :class="`fa fa-${menu.icon}`"></i>
|
|
||||||
<i v-if="menu.icon === undefined & !menu.iconSvg" class="fa fa-file-o"></i>
|
|
||||||
<d2-icon-svg v-if="menu.iconSvg" :name="menu.iconSvg"/>
|
|
||||||
<span slot="title">{{menu.title || '未命名菜单'}}</span>
|
|
||||||
</el-menu-item>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { uniqueId } from 'lodash'
|
|
||||||
export default {
|
|
||||||
name: 'd2-layout-header-aside-menu-item',
|
|
||||||
props: {
|
|
||||||
menu: {
|
|
||||||
type: Object,
|
|
||||||
required: false,
|
|
||||||
default: () => {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
uniqueId: uniqueId('d2-menu-empty-')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-submenu :index="menu.path || uniqueId">
|
|
||||||
<template slot="title">
|
|
||||||
<i v-if="menu.icon" :class="`fa fa-${menu.icon}`"></i>
|
|
||||||
<i v-if="menu.icon === undefined & !menu.iconSvg" class="fa fa-folder-o"></i>
|
|
||||||
<d2-icon-svg v-if="menu.iconSvg" :name="menu.iconSvg"/>
|
|
||||||
<span>{{menu.title}}</span>
|
|
||||||
</template>
|
|
||||||
<template v-for="(child, childIndex) in menu.children">
|
|
||||||
<d2-layout-header-aside-menu-item v-if="child.children === undefined" :menu="child" :key="childIndex"/>
|
|
||||||
<d2-layout-header-aside-menu-sub v-else :menu="child" :key="childIndex"/>
|
|
||||||
</template>
|
|
||||||
</el-submenu>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { uniqueId } from 'lodash'
|
|
||||||
// 组件
|
|
||||||
import d2LayoutMainMenuItem from '../menu-item'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'd2-layout-header-aside-menu-sub',
|
|
||||||
components: {
|
|
||||||
'd2-layout-header-aside-menu-item': d2LayoutMainMenuItem
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
menu: {
|
|
||||||
type: Object,
|
|
||||||
required: false,
|
|
||||||
default: () => {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
uniqueId: uniqueId('d2-menu-empty-')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { uniqueId } from 'lodash'
|
||||||
|
|
||||||
|
// 创建 el-menu-item
|
||||||
|
export function elMenuItem (createElement, menu) {
|
||||||
|
return createElement('el-menu-item', { props: { index: menu.path || uniqueId('d2-menu-empty-') } }, [
|
||||||
|
...menu.icon ? [
|
||||||
|
createElement('i', { attrs: { class: `fa fa-${menu.icon}` } })
|
||||||
|
] : [],
|
||||||
|
...menu.icon === undefined & !menu.iconSvg ? [
|
||||||
|
createElement('i', { attrs: { class: 'fa fa-file-o' } })
|
||||||
|
] : [],
|
||||||
|
...menu.iconSvg ? [
|
||||||
|
createElement('d2-icon-svg', { props: { name: menu.iconSvg } })
|
||||||
|
] : [],
|
||||||
|
createElement('span', { slot: 'title' }, menu.title || '未命名菜单')
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 el-submenu
|
||||||
|
export function elSubmenu (createElement, menu) {
|
||||||
|
return createElement('el-submenu', { props: { index: menu.path || uniqueId('d2-menu-empty-') } }, [
|
||||||
|
...menu.icon ? [
|
||||||
|
createElement('i', { slot: 'title', attrs: { class: `fa fa-${menu.icon}` } })
|
||||||
|
] : [],
|
||||||
|
...menu.icon === undefined & !menu.iconSvg ? [
|
||||||
|
createElement('i', { slot: 'title', attrs: { class: 'fa fa-file-o' } })
|
||||||
|
] : [],
|
||||||
|
...menu.iconSvg ? [
|
||||||
|
createElement('d2-icon-svg', { slot: 'title', props: { name: menu.iconSvg } })
|
||||||
|
] : [],
|
||||||
|
createElement('span', { slot: 'title' }, menu.title || '未命名菜单'),
|
||||||
|
...menu.children.map((child, childIndex) => (child.children === undefined ? elMenuItem : elSubmenu).call(this, createElement, child))
|
||||||
|
])
|
||||||
|
}
|
||||||
+38
-28
@@ -1,38 +1,49 @@
|
|||||||
<template>
|
|
||||||
<div class="d2-theme-header-menu" ref="page" :class="{'is-scrollable': isScroll}" flex="cross:center">
|
|
||||||
<div class="d2-theme-header-menu__content" ref="content" flex-box="1" flex>
|
|
||||||
<div class="d2-theme-header-menu__scroll" ref="scroll" flex-box="0" :style="'transform: translateX(' + currentTranslateX + 'px);'">
|
|
||||||
<el-menu mode="horizontal" :default-active="active" @select="handleMenuSelect">
|
|
||||||
<template v-for="(menu, menuIndex) in header">
|
|
||||||
<d2-layout-header-aside-menu-item v-if="menu.children === undefined" :menu="menu" :key="menuIndex"/>
|
|
||||||
<d2-layout-header-aside-menu-sub v-else :menu="menu" :key="menuIndex"/>
|
|
||||||
</template>
|
|
||||||
</el-menu>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="isScroll" class="d2-theme-header-menu__prev" flex-box="0" @click="scroll('left')" flex="main:center cross:center">
|
|
||||||
<i class="el-icon-arrow-left"></i>
|
|
||||||
</div>
|
|
||||||
<div v-if="isScroll" class="d2-theme-header-menu__next" flex-box="0" @click="scroll('right')" flex="cross:center">
|
|
||||||
<i class="el-icon-arrow-right"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { throttle } from 'lodash'
|
import { throttle } from 'lodash'
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import menuMixin from '../mixin/menu'
|
import menuMixin from '../mixin/menu'
|
||||||
import d2LayoutMainMenuItem from '../components/menu-item/index.vue'
|
import { elMenuItem, elSubmenu } from '../libs/util.menu'
|
||||||
import d2LayoutMainMenuSub from '../components/menu-sub/index.vue'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'd2-layout-header-aside-menu-header',
|
name: 'd2-layout-header-aside-menu-header',
|
||||||
mixins: [
|
mixins: [
|
||||||
menuMixin
|
menuMixin
|
||||||
],
|
],
|
||||||
components: {
|
render (createElement) {
|
||||||
'd2-layout-header-aside-menu-item': d2LayoutMainMenuItem,
|
return createElement('div', {
|
||||||
'd2-layout-header-aside-menu-sub': d2LayoutMainMenuSub
|
attrs: { flex: 'cross:center' },
|
||||||
|
class: { 'd2-theme-header-menu': true, 'is-scrollable': this.isScroll },
|
||||||
|
ref: 'page'
|
||||||
|
}, [
|
||||||
|
createElement('div', {
|
||||||
|
attrs: { class: 'd2-theme-header-menu__content', flex: '', 'flex-box': '1' },
|
||||||
|
ref: 'content'
|
||||||
|
}, [
|
||||||
|
createElement('div', {
|
||||||
|
attrs: { class: 'd2-theme-header-menu__scroll', 'flex-box': '0' },
|
||||||
|
style: { transform: `translateX(${this.currentTranslateX}px)` },
|
||||||
|
ref: 'scroll'
|
||||||
|
}, [
|
||||||
|
createElement('el-menu', {
|
||||||
|
props: { mode: 'horizontal', defaultActive: this.active },
|
||||||
|
on: { select: this.handleMenuSelect }
|
||||||
|
}, this.header.map(menu => (menu.children === undefined ? elMenuItem : elSubmenu).call(this, createElement, menu)))
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
...this.isScroll ? [
|
||||||
|
createElement('div', {
|
||||||
|
attrs: { class: 'd2-theme-header-menu__prev', flex: 'main:center cross:center', 'flex-box': '0' },
|
||||||
|
on: { click: () => this.scroll('left') }
|
||||||
|
}, [
|
||||||
|
createElement('i', { attrs: { class: 'el-icon-arrow-left' } })
|
||||||
|
]),
|
||||||
|
createElement('div', {
|
||||||
|
attrs: { class: 'd2-theme-header-menu__next', flex: 'main:center cross:center', 'flex-box': '0' },
|
||||||
|
on: { click: () => this.scroll('right') }
|
||||||
|
}, [
|
||||||
|
createElement('i', { attrs: { class: 'el-icon-arrow-right' } })
|
||||||
|
])
|
||||||
|
] : []
|
||||||
|
])
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState('d2admin/menu', [
|
...mapState('d2admin/menu', [
|
||||||
@@ -120,4 +131,3 @@ export default {
|
|||||||
window.removeEventListener('load', this.checkScroll)
|
window.removeEventListener('load', this.checkScroll)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
|
||||||
+16
-27
@@ -1,37 +1,27 @@
|
|||||||
<template>
|
|
||||||
<div class="d2-layout-header-aside-menu-side">
|
|
||||||
<el-menu
|
|
||||||
:collapse="asideCollapse"
|
|
||||||
:unique-opened="true"
|
|
||||||
:default-active="active"
|
|
||||||
ref="menu"
|
|
||||||
@select="handleMenuSelect">
|
|
||||||
<template v-for="(menu, menuIndex) in aside">
|
|
||||||
<d2-layout-header-aside-menu-item v-if="menu.children === undefined" :menu="menu" :key="menuIndex"/>
|
|
||||||
<d2-layout-header-aside-menu-sub v-else :menu="menu" :key="menuIndex"/>
|
|
||||||
</template>
|
|
||||||
</el-menu>
|
|
||||||
<div v-if="aside.length === 0 && !asideCollapse" class="d2-layout-header-aside-menu-empty" flex="dir:top main:center cross:center">
|
|
||||||
<d2-icon name="inbox"/>
|
|
||||||
<span>没有侧栏菜单</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import menuMixin from '../mixin/menu'
|
import menuMixin from '../mixin/menu'
|
||||||
import d2LayoutMainMenuItem from '../components/menu-item/index.vue'
|
import { elMenuItem, elSubmenu } from '../libs/util.menu'
|
||||||
import d2LayoutMainMenuSub from '../components/menu-sub/index.vue'
|
|
||||||
import BScroll from 'better-scroll'
|
import BScroll from 'better-scroll'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'd2-layout-header-aside-menu-side',
|
name: 'd2-layout-header-aside-menu-side',
|
||||||
mixins: [
|
mixins: [
|
||||||
menuMixin
|
menuMixin
|
||||||
],
|
],
|
||||||
components: {
|
render (createElement) {
|
||||||
'd2-layout-header-aside-menu-item': d2LayoutMainMenuItem,
|
return createElement('div', { attrs: { class: 'd2-layout-header-aside-menu-side' } }, [
|
||||||
'd2-layout-header-aside-menu-sub': d2LayoutMainMenuSub
|
createElement('el-menu', {
|
||||||
|
props: { collapse: this.asideCollapse, uniqueOpened: true, defaultActive: this.active },
|
||||||
|
ref: 'menu',
|
||||||
|
on: { select: this.handleMenuSelect }
|
||||||
|
}, this.aside.map(menu => (menu.children === undefined ? elMenuItem : elSubmenu).call(this, createElement, menu))),
|
||||||
|
...this.aside.length === 0 && !this.asideCollapse ? [
|
||||||
|
createElement('div', { attrs: { class: 'd2-layout-header-aside-menu-empty', flex: 'dir:top main:center cross:center' } }, [
|
||||||
|
createElement('d2-icon', { props: { name: 'inbox' } }),
|
||||||
|
createElement('span', {}, '没有侧栏菜单')
|
||||||
|
])
|
||||||
|
] : []
|
||||||
|
])
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
@@ -96,4 +86,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
|
||||||
Reference in New Issue
Block a user