mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10: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> |