添加关闭tab标签之前的回调,添加JS关闭页面的方法

This commit is contained in:
zhigang.li@tendcloud.com 2018-09-27 14:17:01 +08:00
parent 5418058bb4
commit 09735a7461
7 changed files with 90 additions and 11 deletions

View File

@ -36,6 +36,7 @@
<script>
import { showTitle, routeEqual } from '@/libs/util'
import beforeClose from '@/router/before-close'
export default {
name: 'TagsNav',
props: {
@ -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)

View File

@ -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)
@ -143,6 +138,7 @@ export default {
})
this.setBreadCrumb(newRoute.matched)
this.setTagNavList(getNewTagList(this.tagNavList, newRoute))
this.$refs.sideMenu.updateOpenName(newRoute.name)
}
},
mounted () {

View File

@ -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]
}

View File

@ -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

View File

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

View File

@ -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: [],
@ -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)

View File

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