100 lines
1.7 KiB
Vue
100 lines
1.7 KiB
Vue
<template>
|
|
<div class="md-landscape">
|
|
<md-popup
|
|
v-model="isLandscapeShow"
|
|
:mask-closable="false"
|
|
prevent-scroll
|
|
:prevent-scroll-exclude="scroll ? '.content' : null"
|
|
:has-mask="hasMask"
|
|
@input="$emit('input', false)"
|
|
@show="$emit('show')"
|
|
@hide="$emit('hide')">
|
|
<div class="content" :class="{scroll}">
|
|
<slot></slot>
|
|
</div>
|
|
</md-popup>
|
|
<div class="close"
|
|
@click="$_close"
|
|
v-show="isLandscapeShow"
|
|
:class="{dark: !hasMask}">
|
|
<md-icon name="cross" size="lg"></md-icon>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Popup from '../popup'
|
|
import Icon from '../icon'
|
|
|
|
export default {
|
|
name: 'md-landscape',
|
|
|
|
components: {
|
|
[Popup.name]: Popup,
|
|
[Icon.name]: Icon,
|
|
},
|
|
|
|
props: {
|
|
value: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
scroll: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
hasMask: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
isLandscapeShow: this.value,
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
value(val) {
|
|
this.isLandscapeShow = val
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
// MARK: private methods
|
|
$_close() {
|
|
this.isLandscapeShow = false
|
|
},
|
|
},
|
|
}
|
|
|
|
</script>
|
|
|
|
<style lang="stylus">
|
|
.md-landscape
|
|
.content
|
|
position relative
|
|
width 540px
|
|
min-height 500px
|
|
font-size 28px
|
|
text-align center
|
|
border-radius 4px
|
|
>img
|
|
width 100%
|
|
height 100%
|
|
display block
|
|
&.scroll
|
|
max-height 700px
|
|
overflow-y scroll
|
|
.close
|
|
position fixed
|
|
z-index 1000
|
|
left 0
|
|
right 0
|
|
bottom 10%
|
|
width 40px
|
|
margin 0 auto
|
|
color color-text-base-inverse
|
|
&.dark
|
|
color color-text-base
|
|
</style>
|