mind-map/web/src/pages/Edit/components/OutlineSidebar.vue
2023-08-06 22:37:13 +08:00

71 lines
1.4 KiB
Vue

<template>
<Sidebar ref="sidebar" :title="$t('outline.title')">
<div class="changeBtn" @click="onChangeToOutlineEdit">
<span class="icon iconfont iconquanping1"></span>
</div>
<Outline
:mindMap="mindMap"
v-if="activeSidebar === 'outline'"
@scrollTo="onScrollTo"
></Outline>
</Sidebar>
</template>
<script>
import Sidebar from './Sidebar'
import { mapState, mapMutations } from 'vuex'
import Outline from './Outline.vue'
// 大纲侧边栏
export default {
name: 'OutlineSidebar',
components: {
Sidebar,
Outline
},
props: {
mindMap: {
type: Object
}
},
computed: {
...mapState(['activeSidebar', 'isOutlineEdit'])
},
watch: {
activeSidebar(val) {
if (val === 'outline') {
this.$refs.sidebar.show = true
} else {
this.$refs.sidebar.show = false
}
}
},
methods: {
...mapMutations(['setIsOutlineEdit', 'setActiveSidebar']),
onChangeToOutlineEdit() {
this.setActiveSidebar('')
this.setIsOutlineEdit(true)
},
onScrollTo(y) {
let container = this.$refs.sidebar.getEl()
let height = container.offsetHeight
let top = container.scrollTop
if (y > top + height) {
container.scrollTo(0, y - height / 2)
}
}
}
}
</script>
<style lang="less" scoped>
.changeBtn {
position: absolute;
right: 50px;
top: 12px;
cursor: pointer;
}
</style>