feat: add side drawer button
| | |
| | | return { |
| | | minHeight: minHeight + 'px', |
| | | collapsed: false, |
| | | menuData: menuData |
| | | menuData: menuData, |
| | | showSetting: true |
| | | } |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | onMenuSelect () { |
| | | this.toggleCollapse() |
| | | }, |
| | | onSettingDrawerChange (val) { |
| | | this.showSetting = val |
| | | } |
| | | }, |
| | | beforeCreate () { |
| | |
| | | <template> |
| | | <a-layout-sider class="sider" width="256px" :collapsible="collapsible" v-model="collapsed" :trigger="null"> |
| | | <a-layout-sider :class="['sider', isMobile ? null : 'shadow']" width="256px" :collapsible="collapsible" v-model="collapsed" :trigger="null"> |
| | | <div class="logo"> |
| | | <router-link to="/dashboard/workplace"> |
| | | <img src="static/img/vue-antd-logo.png"> |
| | |
| | | required: true |
| | | } |
| | | }, |
| | | computed: { |
| | | isMobile () { |
| | | return this.$store.state.setting.isMobile |
| | | } |
| | | }, |
| | | methods: { |
| | | onSelect (obj) { |
| | | this.$emit('menuSelect', obj) |
| | |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | .shadow{ |
| | | box-shadow: 2px 0 6px rgba(0,21,41,.35); |
| | | } |
| | | .sider{ |
| | | z-index: 10; |
| | | box-shadow: 2px 0 6px rgba(0,21,41,.35); |
| | | .logo{ |
| | | height: 64px; |
| | | position: relative; |
| | |
| | | <template> |
| | | <div > |
| | | <div :class="['mask', openDrawer ? 'open' : 'close']" @click="close"></div> |
| | | <div :class="['drawer', openDrawer ? 'open' : 'close']"> |
| | | <slot></slot> |
| | | <div :class="['drawer', placement, openDrawer ? 'open' : 'close']"> |
| | | <div style="position: relative; height: 100%"> |
| | | <slot></slot> |
| | | </div> |
| | | <div class="button" @click="handle"> |
| | | <a-icon type="bars" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import AIcon from 'ant-design-vue/es/icon/icon' |
| | | export default { |
| | | name: 'Drawer', |
| | | components: {AIcon}, |
| | | props: { |
| | | openDrawer: { |
| | | type: Boolean, |
| | |
| | | }, |
| | | close () { |
| | | this.$emit('change', false) |
| | | }, |
| | | handle () { |
| | | this.$emit('change', !this.openDrawer) |
| | | } |
| | | } |
| | | } |
| | |
| | | height: 100%; |
| | | transition: all 0.5s; |
| | | z-index: 100; |
| | | &.open{ |
| | | left: 0; |
| | | &.left{ |
| | | &.open{ |
| | | } |
| | | &.close{ |
| | | transform: translateX(-100%); |
| | | } |
| | | } |
| | | &.close{ |
| | | left: -100%; |
| | | &.right{ |
| | | &.open{ |
| | | right: 0; |
| | | } |
| | | &.close{ |
| | | right: -100%; |
| | | } |
| | | } |
| | | .sider{ |
| | | height: 100%; |
| | | } |
| | | } |
| | | .button{ |
| | | height: 40px; |
| | | width: 40px; |
| | | background-color: #fff; |
| | | border-radius: 0 5px 5px 0; |
| | | position: fixed; |
| | | left: 256px; |
| | | top: 200px; |
| | | z-index: 100; |
| | | font-size: 26px; |
| | | box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15); |
| | | text-align: center; |
| | | line-height: 40px; |
| | | } |
| | | </style> |