Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ant-design-pro-vue
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tianzhuanghu
ant-design-pro-vue
Commits
03de3b72
Commit
03de3b72
authored
Feb 14, 2019
by
Sendya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: merge multi-tab
parent
5f1d8a83
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
96 additions
and
6 deletions
+96
-6
MultiTab.vue
src/components/MultiTab/MultiTab.vue
+57
-0
index.js
src/components/MultiTab/index.js
+3
-0
BasicLayout.vue
src/components/layouts/BasicLayout.vue
+3
-0
GlobalLayout.vue
src/components/page/GlobalLayout.vue
+1
-1
SettingDrawer.vue
src/components/setting/SettingDrawer.vue
+11
-0
defaultSettings.js
src/config/defaultSettings.js
+1
-0
bootstrap.js
src/core/bootstrap.js
+4
-1
getters.js
src/store/getters.js
+2
-1
app.js
src/store/modules/app.js
+11
-2
mutation-types.js
src/store/mutation-types.js
+1
-0
mixin.js
src/utils/mixin.js
+2
-1
No files found.
src/components/MultiTab/MultiTab.vue
0 → 100644
View file @
03de3b72
<
template
>
<div
style=
"margin: -23px -24px 24px -24px"
>
<a-tabs
hideAdd
v-model=
"activeKey"
type=
"editable-card"
:tabBarStyle=
"
{ background: '#FFF', margin: 0, paddingLeft: '16px', paddingTop: '1px' }"
@edit="onEdit"
>
<a-tab-pane
v-for=
"page in pages"
:style=
"
{ height: 0 }" :tab="page.meta.title" :key="page.fullPath" :closable="pages.length > 1">
</a-tab-pane>
</a-tabs>
</div>
</
template
>
<
script
>
export
default
{
name
:
'MultiTab'
,
data
()
{
return
{
fullPathList
:
[],
pages
:
[],
activeKey
:
''
,
newTabIndex
:
0
}
},
created
()
{
this
.
pages
.
push
(
this
.
$route
)
this
.
fullPathList
.
push
(
this
.
$route
.
fullPath
)
},
methods
:
{
onEdit
(
targetKey
,
action
)
{
this
[
action
](
targetKey
)
},
remove
(
targetKey
)
{
if
(
this
.
pages
.
length
===
1
)
{
return
}
this
.
pages
=
this
.
pages
.
filter
(
page
=>
page
.
fullPath
!==
targetKey
)
this
.
fullPathList
=
this
.
fullPathList
.
filter
(
path
=>
path
!==
targetKey
)
},
},
watch
:
{
'$route'
:
function
(
newVal
)
{
this
.
activeKey
=
newVal
.
fullPath
if
(
this
.
fullPathList
.
indexOf
(
newVal
.
fullPath
)
<
0
)
{
this
.
fullPathList
.
push
(
newVal
.
fullPath
)
this
.
pages
.
push
(
newVal
)
}
},
activeKey
:
function
(
newPathKey
)
{
this
.
$router
.
push
({
path
:
newPathKey
})
}
}
}
</
script
>
\ No newline at end of file
src/components/MultiTab/index.js
0 → 100644
View file @
03de3b72
import
MultiTab
from
'./MultiTab'
export
default
MultiTab
\ No newline at end of file
src/components/layouts/BasicLayout.vue
View file @
03de3b72
<
template
>
<
template
>
<global-layout>
<global-layout>
<multi-tab
v-if=
"$store.getters.multiTab"
></multi-tab>
<transition
name=
"page-transition"
>
<transition
name=
"page-transition"
>
<route-view
/>
<route-view
/>
</transition>
</transition>
...
@@ -8,12 +9,14 @@
...
@@ -8,12 +9,14 @@
<
script
>
<
script
>
import
RouteView
from
'@/components/layouts/RouteView'
import
RouteView
from
'@/components/layouts/RouteView'
import
MultiTab
from
'@/components/MultiTab'
import
GlobalLayout
from
'@/components/page/GlobalLayout'
import
GlobalLayout
from
'@/components/page/GlobalLayout'
export
default
{
export
default
{
name
:
'BasicLayout'
,
name
:
'BasicLayout'
,
components
:
{
components
:
{
RouteView
,
RouteView
,
MultiTab
,
GlobalLayout
GlobalLayout
},
},
data
()
{
data
()
{
...
...
src/components/page/GlobalLayout.vue
View file @
03de3b72
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
/>
/>
<!-- layout content -->
<!-- layout content -->
<a-layout-content
:style=
"{ margin:
'24px 24px 0', height: '100%', paddingTop: fixedHeader ? '64px' : '0' }"
>
<a-layout-content
:style=
"{ margin:
$store.getters.multiTab ? '24px 24px 0' : '24px 24px 0', height: '100%', paddingTop: fixedHeader ? '64px' : '0' }"
>
<slot></slot>
<slot></slot>
</a-layout-content>
</a-layout-content>
...
...
src/components/setting/SettingDrawer.vue
View file @
03de3b72
...
@@ -135,6 +135,12 @@
...
@@ -135,6 +135,12 @@
<div
slot=
"title"
>
色弱模式
</div>
<div
slot=
"title"
>
色弱模式
</div>
</a-list-item-meta>
</a-list-item-meta>
</a-list-item>
</a-list-item>
<a-list-item>
<a-switch
slot=
"actions"
size=
"small"
:defaultChecked=
"multiTab"
@
change=
"onMultiTab"
/>
<a-list-item-meta>
<div
slot=
"title"
>
多页签模式
</div>
</a-list-item-meta>
</a-list-item>
</a-list>
</a-list>
</div>
</div>
</div>
</div>
...
@@ -212,6 +218,10 @@ export default {
...
@@ -212,6 +218,10 @@ export default {
this
.
$store
.
dispatch
(
'ToggleWeak'
,
checked
)
this
.
$store
.
dispatch
(
'ToggleWeak'
,
checked
)
updateColorWeak
(
checked
)
updateColorWeak
(
checked
)
},
},
onMultiTab
(
checked
)
{
this
.
baseConfig
.
multiTab
=
checked
this
.
$store
.
dispatch
(
'ToggleMultiTab'
,
checked
)
},
handleMenuTheme
(
theme
)
{
handleMenuTheme
(
theme
)
{
this
.
baseConfig
.
navTheme
=
theme
this
.
baseConfig
.
navTheme
=
theme
this
.
$store
.
dispatch
(
'ToggleTheme'
,
theme
)
this
.
$store
.
dispatch
(
'ToggleTheme'
,
theme
)
...
@@ -226,6 +236,7 @@ export default {
...
@@ -226,6 +236,7 @@ export default {
fixSiderbar:
${
this
.
baseConfig
.
fixSiderbar
}
, // sticky siderbar
fixSiderbar:
${
this
.
baseConfig
.
fixSiderbar
}
, // sticky siderbar
autoHideHeader:
${
this
.
baseConfig
.
autoHideHeader
}
, // auto hide header
autoHideHeader:
${
this
.
baseConfig
.
autoHideHeader
}
, // auto hide header
colorWeak:
${
this
.
baseConfig
.
colorWeak
}
,
colorWeak:
${
this
.
baseConfig
.
colorWeak
}
,
multiTab:
${
this
.
baseConfig
.
multiTab
}
,
// vue-ls options
// vue-ls options
storageOptions: {
storageOptions: {
namespace: 'pro__',
namespace: 'pro__',
...
...
src/config/defaultSettings.js
View file @
03de3b72
...
@@ -22,6 +22,7 @@ export default {
...
@@ -22,6 +22,7 @@ export default {
fixSiderbar
:
false
,
// sticky siderbar
fixSiderbar
:
false
,
// sticky siderbar
autoHideHeader
:
false
,
// auto hide header
autoHideHeader
:
false
,
// auto hide header
colorWeak
:
false
,
colorWeak
:
false
,
multiTab
:
false
,
// vue-ls options
// vue-ls options
storageOptions
:
{
storageOptions
:
{
namespace
:
'pro__'
,
// key prefix
namespace
:
'pro__'
,
// key prefix
...
...
src/core/bootstrap.js
View file @
03de3b72
...
@@ -10,7 +10,8 @@ import {
...
@@ -10,7 +10,8 @@ import {
DEFAULT_FIXED_HEADER
,
DEFAULT_FIXED_HEADER
,
DEFAULT_FIXED_HEADER_HIDDEN
,
DEFAULT_FIXED_HEADER_HIDDEN
,
DEFAULT_FIXED_SIDEMENU
,
DEFAULT_FIXED_SIDEMENU
,
DEFAULT_CONTENT_WIDTH_TYPE
DEFAULT_CONTENT_WIDTH_TYPE
,
DEFAULT_MULTI_TAB
}
from
'@/store/mutation-types'
}
from
'@/store/mutation-types'
import
config
from
'@/config/defaultSettings'
import
config
from
'@/config/defaultSettings'
...
@@ -24,6 +25,8 @@ export default function Initializer () {
...
@@ -24,6 +25,8 @@ export default function Initializer () {
store
.
commit
(
'TOGGLE_FIXED_HEADER_HIDDEN'
,
Vue
.
ls
.
get
(
DEFAULT_FIXED_HEADER_HIDDEN
,
config
.
autoHideHeader
))
store
.
commit
(
'TOGGLE_FIXED_HEADER_HIDDEN'
,
Vue
.
ls
.
get
(
DEFAULT_FIXED_HEADER_HIDDEN
,
config
.
autoHideHeader
))
store
.
commit
(
'TOGGLE_WEAK'
,
Vue
.
ls
.
get
(
DEFAULT_COLOR_WEAK
,
config
.
colorWeak
))
store
.
commit
(
'TOGGLE_WEAK'
,
Vue
.
ls
.
get
(
DEFAULT_COLOR_WEAK
,
config
.
colorWeak
))
store
.
commit
(
'TOGGLE_COLOR'
,
Vue
.
ls
.
get
(
DEFAULT_COLOR
,
config
.
primaryColor
))
store
.
commit
(
'TOGGLE_COLOR'
,
Vue
.
ls
.
get
(
DEFAULT_COLOR
,
config
.
primaryColor
))
store
.
commit
(
'TOGGLE_MULTI_TAB'
,
Vue
.
ls
.
get
(
DEFAULT_MULTI_TAB
,
config
.
multiTab
))
store
.
commit
(
'SET_TOKEN'
,
Vue
.
ls
.
get
(
ACCESS_TOKEN
))
store
.
commit
(
'SET_TOKEN'
,
Vue
.
ls
.
get
(
ACCESS_TOKEN
))
// last step
// last step
}
}
src/store/getters.js
View file @
03de3b72
...
@@ -8,7 +8,8 @@ const getters = {
...
@@ -8,7 +8,8 @@ const getters = {
welcome
:
state
=>
state
.
user
.
welcome
,
welcome
:
state
=>
state
.
user
.
welcome
,
roles
:
state
=>
state
.
user
.
roles
,
roles
:
state
=>
state
.
user
.
roles
,
userInfo
:
state
=>
state
.
user
.
info
,
userInfo
:
state
=>
state
.
user
.
info
,
addRouters
:
state
=>
state
.
permission
.
addRouters
addRouters
:
state
=>
state
.
permission
.
addRouters
,
multiTab
:
state
=>
state
.
app
.
multiTab
}
}
export
default
getters
export
default
getters
src/store/modules/app.js
View file @
03de3b72
...
@@ -8,7 +8,8 @@ import {
...
@@ -8,7 +8,8 @@ import {
DEFAULT_FIXED_HEADER
,
DEFAULT_FIXED_HEADER
,
DEFAULT_FIXED_SIDEMENU
,
DEFAULT_FIXED_SIDEMENU
,
DEFAULT_FIXED_HEADER_HIDDEN
,
DEFAULT_FIXED_HEADER_HIDDEN
,
DEFAULT_CONTENT_WIDTH_TYPE
DEFAULT_CONTENT_WIDTH_TYPE
,
DEFAULT_MULTI_TAB
}
from
'@/store/mutation-types'
}
from
'@/store/mutation-types'
const
app
=
{
const
app
=
{
...
@@ -22,7 +23,8 @@ const app = {
...
@@ -22,7 +23,8 @@ const app = {
fixSiderbar
:
false
,
fixSiderbar
:
false
,
autoHideHeader
:
false
,
autoHideHeader
:
false
,
color
:
null
,
color
:
null
,
weak
:
false
weak
:
false
,
multiTab
:
true
},
},
mutations
:
{
mutations
:
{
SET_SIDEBAR_TYPE
:
(
state
,
type
)
=>
{
SET_SIDEBAR_TYPE
:
(
state
,
type
)
=>
{
...
@@ -70,6 +72,10 @@ const app = {
...
@@ -70,6 +72,10 @@ const app = {
TOGGLE_WEAK
:
(
state
,
flag
)
=>
{
TOGGLE_WEAK
:
(
state
,
flag
)
=>
{
Vue
.
ls
.
set
(
DEFAULT_COLOR_WEAK
,
flag
)
Vue
.
ls
.
set
(
DEFAULT_COLOR_WEAK
,
flag
)
state
.
weak
=
flag
state
.
weak
=
flag
},
TOGGLE_MULTI_TAB
:
(
state
,
bool
)
=>
{
Vue
.
ls
.
set
(
DEFAULT_MULTI_TAB
,
bool
)
state
.
multiTab
=
bool
}
}
},
},
actions
:
{
actions
:
{
...
@@ -108,6 +114,9 @@ const app = {
...
@@ -108,6 +114,9 @@ const app = {
},
},
ToggleWeak
({
commit
},
weakFlag
)
{
ToggleWeak
({
commit
},
weakFlag
)
{
commit
(
'TOGGLE_WEAK'
,
weakFlag
)
commit
(
'TOGGLE_WEAK'
,
weakFlag
)
},
ToggleMultiTab
({
commit
},
bool
)
{
commit
(
'TOGGLE_MULTI_TAB'
,
bool
)
}
}
}
}
}
}
...
...
src/store/mutation-types.js
View file @
03de3b72
...
@@ -8,6 +8,7 @@ export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER'
...
@@ -8,6 +8,7 @@ export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER'
export
const
DEFAULT_FIXED_SIDEMENU
=
'DEFAULT_FIXED_SIDEMENU'
export
const
DEFAULT_FIXED_SIDEMENU
=
'DEFAULT_FIXED_SIDEMENU'
export
const
DEFAULT_FIXED_HEADER_HIDDEN
=
'DEFAULT_FIXED_HEADER_HIDDEN'
export
const
DEFAULT_FIXED_HEADER_HIDDEN
=
'DEFAULT_FIXED_HEADER_HIDDEN'
export
const
DEFAULT_CONTENT_WIDTH_TYPE
=
'DEFAULT_CONTENT_WIDTH_TYPE'
export
const
DEFAULT_CONTENT_WIDTH_TYPE
=
'DEFAULT_CONTENT_WIDTH_TYPE'
export
const
DEFAULT_MULTI_TAB
=
'DEFAULT_MULTI_TAB'
export
const
CONTENT_WIDTH_TYPE
=
{
export
const
CONTENT_WIDTH_TYPE
=
{
Fluid
:
'Fluid'
,
Fluid
:
'Fluid'
,
...
...
src/utils/mixin.js
View file @
03de3b72
...
@@ -17,7 +17,8 @@ const mixin = {
...
@@ -17,7 +17,8 @@ const mixin = {
fixSidebar
:
state
=>
state
.
app
.
fixSiderbar
,
fixSidebar
:
state
=>
state
.
app
.
fixSiderbar
,
contentWidth
:
state
=>
state
.
app
.
contentWidth
,
contentWidth
:
state
=>
state
.
app
.
contentWidth
,
autoHideHeader
:
state
=>
state
.
app
.
autoHideHeader
,
autoHideHeader
:
state
=>
state
.
app
.
autoHideHeader
,
sidebarOpened
:
state
=>
state
.
app
.
sidebar
sidebarOpened
:
state
=>
state
.
app
.
sidebar
,
multiTab
:
state
=>
state
.
app
.
multiTab
})
})
},
},
methods
:
{
methods
:
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment