iview/src/components/cell/cell.vue

93 lines
2.6 KiB
Vue
Raw Normal View History

2018-06-20 15:17:54 +08:00
<template>
2018-06-20 17:04:08 +08:00
<div :class="classes" tabindex="0">
<a v-if="to" :href="to" class="ivu-cell-link" @click.prevent="handleClick">
2018-06-20 16:56:54 +08:00
<CellItem :title="title" :label="label" :extra="extra">
<slot name="icon" slot="icon"></slot>
<slot></slot>
<slot name="extra" slot="extra"></slot>
</CellItem>
</a>
<div class="ivu-cell-link" v-else>
<CellItem :title="title" :label="label" :extra="extra">
<slot name="icon" slot="icon"></slot>
<slot></slot>
<slot name="extra" slot="extra"></slot>
</CellItem>
</div>
<div class="ivu-cell-arrow" v-if="to">
<slot name="arrow">
<Icon type="ios-arrow-right"></Icon>
</slot>
</div>
</div>
2018-06-20 15:17:54 +08:00
</template>
<script>
2018-06-20 16:56:54 +08:00
import CellItem from './cell-item.vue';
import Icon from '../icon/icon.vue';
const prefixCls = 'ivu-cell';
2018-06-20 15:17:54 +08:00
export default {
2018-06-20 16:56:54 +08:00
name: 'Cell',
components: { CellItem, Icon },
2018-06-20 15:17:54 +08:00
props: {
2018-06-20 16:56:54 +08:00
name: {
type: [String, Number]
},
title: {
type: String,
default: ''
},
label: {
type: String,
default: ''
},
extra: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
},
selected: {
type: Boolean,
default: false
},
to: {
type: [Object, String]
},
replace: {
type: Boolean,
default: false
}
2018-06-20 15:17:54 +08:00
},
2018-06-20 16:56:54 +08:00
data () {
return {
prefixCls: prefixCls
}
},
computed: {
classes () {
return [
`${prefixCls}`,
{
[`${prefixCls}-disabled`]: this.disabled,
[`${prefixCls}-selected`]: this.selected,
[`${prefixCls}-with-link`]: this.to
}
];
}
},
methods: {
handleClick () {
const isRoute = this.$router;
if (isRoute) {
this.replace ? this.$router.replace(this.to) : this.$router.push(this.to);
} else {
window.location.href = this.to;
}
}
}
2018-06-20 15:17:54 +08:00
}
</script>