Skip to content

Commit

Permalink
添加关闭tab标签之前的回调,添加JS关闭页面的方法
Browse files Browse the repository at this point in the history
  • Loading branch information
zhigang.li@tendcloud.com committed Sep 27, 2018
1 parent 5418058 commit 09735a7
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 11 deletions.
16 changes: 14 additions & 2 deletions src/components/main/components/tags-nav/tags-nav.vue
Expand Up @@ -36,6 +36,7 @@

<script>
import { showTitle, routeEqual } from '@/libs/util'
import beforeClose from '@/router/before-close'
export default {
name: 'TagsNav',
props: {
Expand Down Expand Up @@ -108,8 +109,19 @@ export default {
}
},
handleClose (current) {
let res = this.list.filter(item => !routeEqual(current, item))
this.$emit('on-close', res, undefined, current)
if (current.meta && current.meta.beforeCloseName && current.meta.beforeCloseName in beforeClose) {
new Promise(beforeClose[current.meta.beforeCloseName]).then(close => {
if (close) {
this.close(current)
}
})
} else {
this.close(current)
}
},
close (route) {
let res = this.list.filter(item => !routeEqual(route, item))
this.$emit('on-close', res, undefined, route)
},
handleClick (item) {
this.$emit('input', item)
Expand Down
6 changes: 1 addition & 5 deletions src/components/main/main.vue
Expand Up @@ -114,21 +114,16 @@ export default {
this.collapsed = state
},
handleCloseTag (res, type, route) {
let openName = ''
if (type === 'all') {
this.turnToPage('home')
openName = 'home'
} else if (routeEqual(this.$route, route)) {
if (type === 'others') {
openName = route.name
} else {
const nextRoute = getNextRoute(this.tagNavList, route)
this.$router.push(nextRoute)
openName = nextRoute.name
}
}
this.setTagNavList(res)
this.$refs.sideMenu.updateOpenName(openName)
},
handleClick (item) {
this.turnToPage(item)
Expand All @@ -143,6 +138,7 @@ export default {
})
this.setBreadCrumb(newRoute.matched)
this.setTagNavList(getNewTagList(this.tagNavList, newRoute))
this.$refs.sideMenu.updateOpenName(newRoute.name)
}
},
mounted () {
Expand Down
1 change: 1 addition & 0 deletions src/libs/util.js
Expand Up @@ -172,6 +172,7 @@ export const getNextRoute = (list, route) => {
res = getHomeRoute(list)
} else {
const index = list.findIndex(item => routeEqual(item, route))
console.log(route, index, list.length)
if (index === list.length - 1) res = list[list.length - 2]
else res = list[index + 1]
}
Expand Down
17 changes: 17 additions & 0 deletions src/router/before-close.js
@@ -0,0 +1,17 @@
import { Modal } from 'iview'

const beforeClose = {
before_close_normal: (resolve) => {
Modal.confirm({
title: '确定要关闭这一页吗',
onOk: () => {
resolve(true)
},
onCancel: () => {
resolve(false)
}
})
}
}

export default beforeClose
7 changes: 5 additions & 2 deletions src/router/routers.js
Expand Up @@ -8,6 +8,7 @@ import parentView from '@/components/parent-view'
* notCache: (false) 设为true后页面不会缓存
* access: (null) 可访问该页面的权限数组,当前路由设置的权限会影响子路由
* icon: (-) 该页面在左侧菜单、面包屑和标签导航处显示的图标,如果是自定义图标,需要在图标名称前加下划线'_'
* beforeCloseName: (-) 设置该字段,则在关闭当前tab页时会去'@/router/before-close.js'里寻找该字段名对应的方法,作为关闭前的钩子函数
* }
*/

Expand Down Expand Up @@ -213,7 +214,8 @@ export default [
name: 'tools_methods_page',
meta: {
icon: 'ios-hammer',
title: '工具方法'
title: '工具方法',
beforeCloseName: 'before_close_normal'
},
component: () => import('@/view/tools-methods/tools-methods.vue')
}
Expand Down Expand Up @@ -303,7 +305,8 @@ export default [
meta: {
icon: 'md-flower',
title: '动态路由',
notCache: true
notCache: true,
beforeCloseName: 'before_close_normal'
},
component: () => import('@/view/argu-page/params.vue')
},
Expand Down
36 changes: 35 additions & 1 deletion src/store/module/app.js
@@ -1,5 +1,25 @@
import { getBreadCrumbList, setTagNavListInLocalstorage, getMenuByRouter, getTagNavListFromLocalstorage, getHomeRoute, routeHasExist } from '@/libs/util'
import {
getBreadCrumbList,
setTagNavListInLocalstorage,
getMenuByRouter,
getTagNavListFromLocalstorage,
getHomeRoute,
getNextRoute,
routeHasExist,
routeEqual
} from '@/libs/util'
import beforeClose from '@/router/before-close'
import router from '@/router'
import routers from '@/router/routers'

const closePage = (state, route) => {
const nextRoute = getNextRoute(state.tagNavList, route)
state.tagNavList = state.tagNavList.filter(item => {
return !routeEqual(item, route)
})
router.push(nextRoute)
}

export default {
state: {
breadCrumbList: [],
Expand All @@ -20,6 +40,20 @@ export default {
setTagNavListInLocalstorage([...list])
} else state.tagNavList = getTagNavListFromLocalstorage()
},
closeTag (state, route) {
let tag = state.tagNavList.filter(item => routeEqual(item, route))
route = tag[0] ? tag[0] : null
if (!route) return
if (route.meta && route.meta.beforeCloseName && route.meta.beforeCloseName in beforeClose) {
new Promise(beforeClose[route.meta.beforeCloseName]).then(close => {
if (close) {
closePage(state, route)
}
})
} else {
closePage(state, route)
}
},
addTag (state, { route, type = 'unshift' }) {
if (!routeHasExist(state.tagNavList, route)) {
if (type === 'push') state.tagNavList.push(route)
Expand Down
18 changes: 17 additions & 1 deletion src/view/tools-methods/tools-methods.vue
Expand Up @@ -20,6 +20,16 @@
</i-col>
</Row>
</Card>
<Card shadow style="margin-top: 10px;">
<Row>
<i-col span="4">
<Button @click="handleCloseTag">关闭工具方法页</Button>
</i-col>
<i-col span="20">
<p>动态路由,添加query</p>
</i-col>
</Row>
</Card>
</div>
</template>

Expand All @@ -29,7 +39,8 @@ export default {
name: 'tools_methods_page',
methods: {
...mapMutations([
'addTag'
'addTag',
'closeTag'
]),
createTagParams () {
const id = parseInt(Math.random() * 100000)
Expand All @@ -56,6 +67,11 @@ export default {
}
}
this.$router.push(route)
},
handleCloseTag () {
this.closeTag({
name: 'tools_methods_page'
})
}
}
}
Expand Down

0 comments on commit 09735a7

Please sign in to comment.