mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<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>
 |