| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | 
							- <template>
 
- 	<view v-if="visible" class="ax ax-custom-title" :style="{padding}">
 
- 		<view class="__body" :style="{height}">
 
- 			<slot>
 
- 				<view @click="back()">
 
- 					<text v-if="this.pages.length>1"  class="icon-back"></text>
 
- 					<text class="title">{{title || titleText}}</text>
 
- 				</view>
 
- 			</slot>
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- 	import PagesJSON from "@/pages.json";
 
- 	export default {
 
- 		name:"ax-custom-title",
 
- 		props:{
 
- 			// 显示首页按钮
 
- 			title:{type:String,default:''},
 
- 			// PC模式下无插槽内容也任然显示组件
 
- 			unlock:{type:Boolean,default:false},
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				titleText: '',
 
- 				visible: false,
 
- 				padding: '0px',
 
- 				height: 'auto'
 
- 			};
 
- 		},
 
- 		async created() {
 
- 			const sys = await this.systemInfo();
 
- 			this.visible = sys.windowHeight === sys.screenHeight;
 
- 			if(this.visible==false) return;
 
- 			var rect = {top:0,left:0,right:0,bottom:0,width:0,height:0}
 
- 			if(sys.uniPlatform.indexOf('mp-')===0) rect = uni.getMenuButtonBoundingClientRect();
 
- 			var interval = sys.windowWidth - (rect.right || sys.windowWidth-10);
 
- 			const data = {
 
- 				top: rect.top,
 
- 				left: interval,
 
- 				right: (rect.width || interval*-1) + interval * 2,
 
- 				bottom: interval,
 
- 				componentHeight: rect.top+rect.height+interval,
 
- 				statusBarHeight: sys.statusBarHeight
 
- 			}
 
- 			var top  = `${data.top}px`;
 
- 			var left = `${data.left}px`;
 
- 			var right = `${data.right}px`;
 
- 			var bottom = `${data.bottom}px`;
 
- 			if(['windows','mac'].includes(sys.platform)){
 
- 				top = 0;
 
- 				bottom = 0;
 
- 				right = left;
 
- 				rect.height = 45;
 
- 				if(this.unlock == false && !this.$slots.default) this.visible = false;
 
- 			}
 
- 			this.padding = [top,right,bottom,left].join(' ');
 
- 			this.height = `${rect.height || 50}px`;
 
- 			const currentPage = Array.from(getCurrentPages()).pop();
 
- 			const pageConfig = PagesJSON.pages.find(i=>i.path==currentPage.route);
 
- 			this.titleText = pageConfig.style.navigationBarTitleText;
 
- 			this.$emit('display',data);
 
- 		},
 
- 		computed:{
 
- 			pages(){
 
- 				return getCurrentPages();
 
- 			}
 
- 		},
 
- 		methods:{
 
- 			systemInfo(){
 
- 				return new Promise((resolve,reject)=>{
 
- 					uni.getSystemInfo({
 
- 						success: res=>resolve(res),
 
- 						fail: err=>reject(err)
 
- 					});
 
- 				});
 
- 			},
 
- 			back(){
 
- 				uni.navigateBack({delta: 1});
 
- 			}
 
- 		}
 
- 	}
 
- </script>
 
- <style scoped>
 
- @import url(../ax/ax.css);
 
- .ax-title-bar{
 
- 	width: 100vw;
 
- 	color: #000;
 
- 	position: relative;
 
- 	z-index: 999999;
 
- }
 
- .__body{
 
- 	display: flex;
 
- 	align-items: center;
 
- 	justify-content: space-between;
 
- }
 
- .__body::after{
 
- 	content: '';
 
- }
 
- .icon-back{
 
- 	margin-right: 5px;
 
- }
 
- .icon-back::before{
 
- 	content: "";
 
- 	display: inline-block;
 
- 	width: 10px;
 
- 	height: 10px;
 
- 	border-width: 0 0 2px 2px;
 
- 	border-style: solid;
 
- 	border-color: #000;
 
- 	transform-origin: center center;
 
- 	transform: rotate(45deg) translateY(-3px) translateX(1px);
 
- }
 
- </style>
 
 
  |