You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.2 KiB
121 lines
2.2 KiB
<template> |
|
<view class="uni-breadcrumb-item"> |
|
<view :class="{ |
|
'uni-breadcrumb-item--slot': true, |
|
'uni-breadcrumb-item--slot-link': to && currentPage !== to |
|
}" @click="navTo"> |
|
<slot /> |
|
</view> |
|
<i v-if="separatorClass" class="uni-breadcrumb-item--separator" :class="separatorClass" /> |
|
<text v-else class="uni-breadcrumb-item--separator">{{ separator }}</text> |
|
</view> |
|
</template> |
|
<script> |
|
/** |
|
* BreadcrumbItem 面包屑导航子组件 |
|
* @property {String/Object} to 路由跳转页面路径/对象 |
|
* @property {Boolean} replace 在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持) |
|
*/ |
|
export default { |
|
data() { |
|
return { |
|
currentPage: "" |
|
} |
|
}, |
|
options: { |
|
virtualHost: true |
|
}, |
|
props: { |
|
to: { |
|
type: String, |
|
default: '' |
|
}, |
|
replace:{ |
|
type: Boolean, |
|
default: false |
|
} |
|
}, |
|
inject: { |
|
uniBreadcrumb: { |
|
from: "uniBreadcrumb", |
|
default: null |
|
} |
|
}, |
|
created(){ |
|
const pages = getCurrentPages() |
|
const page = pages[pages.length-1] |
|
|
|
if(page){ |
|
this.currentPage = `/${page.route}` |
|
} |
|
}, |
|
computed: { |
|
separator() { |
|
return this.uniBreadcrumb.separator |
|
}, |
|
separatorClass() { |
|
return this.uniBreadcrumb.separatorClass |
|
} |
|
}, |
|
methods: { |
|
navTo() { |
|
const { to } = this |
|
|
|
if (!to || this.currentPage === to){ |
|
return |
|
} |
|
|
|
if(this.replace){ |
|
uni.redirectTo({ |
|
url:to |
|
}) |
|
}else{ |
|
uni.navigateTo({ |
|
url:to |
|
}) |
|
} |
|
} |
|
} |
|
} |
|
</script> |
|
<style lang="scss"> |
|
$uni-primary: #2979ff !default; |
|
$uni-base-color: #6a6a6a !default; |
|
$uni-main-color: #3a3a3a !default; |
|
.uni-breadcrumb-item { |
|
display: flex; |
|
align-items: center; |
|
white-space: nowrap; |
|
font-size: 14px; |
|
|
|
&--slot { |
|
color: $uni-base-color; |
|
padding: 0 10px; |
|
|
|
&-link { |
|
color: $uni-main-color; |
|
font-weight: bold; |
|
/* #ifndef APP-NVUE */ |
|
cursor: pointer; |
|
/* #endif */ |
|
|
|
&:hover { |
|
color: $uni-primary; |
|
} |
|
} |
|
} |
|
|
|
&--separator { |
|
font-size: 12px; |
|
color: $uni-base-color; |
|
} |
|
|
|
&:first-child &--slot { |
|
padding-left: 0; |
|
} |
|
|
|
&:last-child &--separator { |
|
display: none; |
|
} |
|
} |
|
</style>
|
|
|