xiaokuang vor 4 Monaten
Ursprung
Commit
52352c5ebd

+ 21 - 7
components/common/u-scroll-view/index.vue

@@ -1,14 +1,14 @@
 <template>
-	<scroll-view class="u-scroll-view" :scroll-y="true" :style="pageScrollStyle" @scrolltolower="onScrollToLower" @scroll="onScroll">
+	<scroll-view class="u-scroll-view" :class="navType" :scroll-y="true" :style="pageScrollStyle" @scrolltolower="onScrollToLower" @scroll="onScroll">
 		<slot></slot>
 		<view v-if="loadMore" class="load-more"><van-loading>加载中...</van-loading></view>
 	</scroll-view>
 </template>
 
 <script>
-	
+
 	import VanLoading from '@/wxcomponents/vant/loading/index'
-	
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -33,24 +33,31 @@
 				if (this.tabbarConflict) {
 					pageHeight = this.$config.pageHeight - uni.upx2px(150)
 				}
-				return 'height: ' + pageHeight + 'px'
+        console.log(pageHeight)
+        // return 'height: ' + pageHeight + 'px'
+        return 'height: 100%'
 			}
 		},
 		watch: {
 		},
 		data() {
-			return {}
+			return {
+        navType: 'mobile'
+      }
 		},
 		created() {
 		},
 		mounted() {
+      this.getSystemInfo(this,(res)=>{
+        this.navType = res
+      })
 		},
 		methods: {
 			getScrollViewHeight() {
 				// 获取 scroll-view 元素的高度
 				uni.createSelectorQuery()
 					.in(this)
-					.select('.u-scroll-view') 
+					.select('.u-scroll-view')
 					.boundingClientRect(rect => {
 						console.log(rect)
 						console.log('scroll-view 高度:', rect.height)
@@ -90,4 +97,11 @@
 			font-size: $fontSize2;
 		}
 	}
-</style>
+  ::v-deep {
+    .u-scroll-view {
+      /*&.mobile {
+        padding-top: 100rpx;
+      }*/
+    }
+  }
+</style>

+ 18 - 13
components/common/u-swiper/index.vue

@@ -2,7 +2,7 @@
 	<view class="swiper-container">
 		<swiper class="swiper" circular :indicator-dots="false" :circular="circular" :next-margin="nextMargin"
 			:autoplay="autoplay" :interval="interval" :duration="duration" :style="style" @change="onSwiperChange">
-			<template v-for="(item, index) in logoList" v-if="useComponentName === 'logoSwiper' && loading">
+			<template v-for="(item, index) in logoList" v-if="useComponentName === 'logoSwiper'">
 				<swiper-item :key="index">
 					<view class="image-wrapper">
 						<slot :scope="item"></slot>
@@ -79,7 +79,7 @@
 			},
 			imageMode: {
 				type: String,
-				default: 'aspectFill' // 参考https://zh.uniapp.dcloud.io/component/image.html
+				default: 'aspectFit' // 参考https://zh.uniapp.dcloud.io/component/image.html
 			},
 			indicatoDotsStyle: {
 				type: String,
@@ -121,25 +121,29 @@
 				return style
 			},
 			limitList() {
-				return this.items.slice(0, this.limit);
+				return this.data.slice(0, this.limit);
 			}
 		},
-		watch: {},
+		watch: {
+      items(value) {
+        this.data = value
+        if (this.useComponentName === 'logoSwiper') {
+          this.getLogoPage()
+        }
+      }
+    },
 		data() {
 			return {
+        data: [],
 				showOverlay: false,
 				videoUrl: '',
 				current: 0,
 				logoPage: 1,
-				loading: false,
 				logoList: [],
 				limit: 6
 			}
 		},
 		created() {},
-		beforeDestroy() {
-			this.logoList = []
-		},
 		mounted() {
 			if (this.useComponentName === 'logoSwiper') {
 				this.getLogoPage()
@@ -163,16 +167,17 @@
 				}
 			},
 			getLogoPage() {
-				this.logoPage = Math.floor(this.items.length / 6 - 0.000000000001)
+				this.logoPage = Math.floor(this.data.length / 6 - 0.000000000001)
+        console.log(this.data,this.logoPage)
 				for (let i = 0; i <= this.logoPage; i++) {
 					let starPage = i * 6
-					let lastPage = (starPage + 5) < this.items.length - 1 ? (starPage + 5) : this.items.length - 1
+					let lastPage = (starPage + 5) < this.data.length - 1 ? (starPage + 5) : this.data.length - 1
 					this.logoList[i] = []
 					for (let k = starPage; k <= lastPage; k++) {
-						this.logoList[i].push(this.items[k])
+						this.logoList[i].push(this.data[k])
 					}
 				}
-				this.loading = true
+        console.log(this.logoList,this.useComponentName)
 			}
 		}
 	}
@@ -257,4 +262,4 @@
 			/* 当前激活的指示点颜色 */
 		}
 	}
-</style>
+</style>

+ 9 - 5
components/layout/nav-bar.vue

@@ -1,5 +1,5 @@
 <template>
-	<view v-if="!hideNavbar" class="nav-bar" :class="{ 'nav-bar-transparent': transparent }">
+	<view v-if="!hideNavbar" class="nav-bar" :class="{ 'nav-bar-transparent': transparent,'hide_nav_bar':hideNavbar }">
 		<view class="nav-bar-status" :style="{ height: statusBarHeight + 'px' }">
 		</view>
 		<view class="nav-bar-title" :style="{ height: titleBarHeight +'px' }">
@@ -15,7 +15,7 @@
 			</template>
 		</view>
 	</view>
-	
+
 </template>
 
 <script>
@@ -51,7 +51,6 @@
 				uni.getSystemInfo({
 					success(res) {
 						const os = res.system.toLowerCase()
-						console.log(res)
 						self.$config.os = os
 						if (os.includes('windows') || os.includes('mac')) {
 							self.$emit('init', {
@@ -61,7 +60,7 @@
 								}
 							})
 							self.hideNavbar = true
-							
+
 							// self.statusBarHeight = 0
 							// self.titleBarHeight = (windowInfo.screenWidth / 750 * 100)
 							// self.$emit('init', {
@@ -127,6 +126,11 @@
 <style lang="scss">
 	.nav-bar {
 		background: linear-gradient( 270deg, #2b2359 9%, #405491 44%, #2b2359 92%), rgba(0,0,0,0.2);
+    width: 100%;
+    position: fixed;
+    left: 0;
+    z-index: 10;
+    top: 0;
 		&.nav-bar-transparent{
 			background: none;
 			.nav-bar-title{
@@ -158,4 +162,4 @@
 			cursor: pointer;
 		}
 	}
-</style>
+</style>

+ 19 - 0
components/layout/page-layout.vue

@@ -0,0 +1,19 @@
+<template>
+  <view class="page-module">
+    <slot></slot>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  }
+}
+</script>
+
+<style lang="scss">
+.page-module {
+  padding-top: 200rpx;
+}
+</style>

+ 17 - 0
main.js

@@ -62,6 +62,23 @@ Vue.prototype.showToast = function(title, complete) {
 	if (complete)
 		setTimeout(complete, 2000)
 }
+Vue.prototype.getSystemInfo = function(self,callback) {
+	uni.getSystemInfo({
+		success(res) {
+			const os = res.system.toLowerCase()
+			self.$config.os = os
+			if (os.includes('windows') || os.includes('mac')) {
+				if (callback) {
+					callback('pc')
+				}
+			} else {
+				if (callback) {
+					callback('mobile')
+				}
+			}
+		}
+	})
+}
 Vue.prototype.showSuccessToast = function(title, complete) {
 	uni.showToast({
 		icon: 'success',

+ 1 - 1
package.json

@@ -35,7 +35,7 @@
 					"NAME": "test",
 					"VERSION": "0.02",
 					"TOKEN_KEY": "token",
-					"BASE_API": "https://mp-test-onlinecatelogue.matchexpo.cn",
+					"BASE_API": "https://mp-test-miniprogapi.matchexpo.cn",
 					"WEBSITE": "https://mp-website-test-munich.matchexpo.cn",
 					"CONFERENCE_WEBSITE": "https://mp-test-onlinecatelogue.matchexpo.cn"
 				},

+ 11 - 9
pages/activity/detail.vue

@@ -1,5 +1,5 @@
 <template>
-  <view class="activity-detail">
+  <page-layout class="activity-detail">
     <nav-bar title="同期活动详情" @init="onInitNavbar"></nav-bar>
     <u-scroll-view>
       <view class="main-container">
@@ -87,10 +87,10 @@
               </view>
             </view>
           </view>
-<!--          <view class="activity-schedule-image">
-            <image src="https://www.productronicachina.com.cn/resources/files/0812/66b9c058eb46a/TGV.jpg"
-                   mode="aspectFit"/>
-          </view>-->
+          <!--          <view class="activity-schedule-image">
+                      <image src="https://www.productronicachina.com.cn/resources/files/0812/66b9c058eb46a/TGV.jpg"
+                             mode="aspectFit"/>
+                    </view>-->
         </view>
         <view class="activity-operation">
           <view class="activity-views">浏览:{{ meetingInfo.total_view }}</view>
@@ -111,10 +111,10 @@
         <!-- <disclaimer-text></disclaimer-text> -->
       </view>
     </u-scroll-view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
-		<float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
-  </view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+    <float-button @custom-event="updateContactStatus()"></float-button>
+    <van-dialog id="van-dialog" />
+  </page-layout>
 </template>
 
 <script>
@@ -127,12 +127,14 @@ import {returnTimeFormat} from '@/utils'
 import {meetingCancelCollect, meetingCollect} from "@/api/exhibitor"
 import floatButton from "@/components/layout/float-button"
 import ContactUs from '@/pages/index/components/contact-us.vue'
+import PageLayout from "@/components/layout/page-layout";
 
 export default {
   options: {
     styleIsolation: 'shared'
   },
   components: {
+    PageLayout,
     NavBar,
     UScrollView,
     DisclaimerText,

Datei-Diff unterdrückt, da er zu groß ist
+ 70 - 68
pages/activity/guest.vue


+ 121 - 116
pages/activity/index.vue

@@ -1,126 +1,131 @@
 <template>
-	<view class="activity-index">
-		<nav-bar title="同期活动" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view :tabbar-conflict="true">
-			<view class="main-container">
-				<view class="activity-head">
-					<view class="activity-head-title">同期活动</view>
-					<view class="activity-head-desc">{{ mettingDesc }}</view>
-				</view>
-				<van-empty v-if="activityList.length === 0" description="暂无数据" />
-				<view v-else class="activity-list">
-					<template v-for="(item, index) in activityList">
-						<activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
-					</template>
-				</view>
-				<!-- <disclaimer-text></disclaimer-text> -->
-			</view>
-		</u-scroll-view>
-    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+  <page-layout class="activity-index">
+    <nav-bar title="同期活动" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view :tabbar-conflict="true">
+      <view class="main-container">
+        <view class="activity-head">
+          <view class="activity-head-title">同期活动</view>
+          <view class="activity-head-desc">{{ mettingDesc }}</view>
+        </view>
+        <van-empty v-if="activityList.length === 0" description="暂无数据"/>
+        <view v-else class="activity-list">
+          <template v-for="(item, index) in activityList">
+            <activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
+          </template>
+        </view>
+        <!-- <disclaimer-text></disclaimer-text> -->
+      </view>
+    </u-scroll-view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url"/>
     <float-button @custom-event="updateContactStatus()"></float-button>
-
-  </view>
+  </page-layout>
 </template>
 
 <script>
-	import NavBar from '@/components/layout/nav-bar'
-	import UScrollView from '@/components/common/u-scroll-view'
-	import ActivityItem from '@/pages/activity/components/activity-item.vue'
-	import DisclaimerText from '@/components/disclaimer-text/index.vue'
-	import { mettingList, mettingDesc } from '@/api/exhibitor'
-  import floatButton from "@/components/layout/float-button";
-	import ContactUs from '@/pages/index/components/contact-us.vue'
+import NavBar from '@/components/layout/nav-bar'
+import UScrollView from '@/components/common/u-scroll-view'
+import ActivityItem from '@/pages/activity/components/activity-item.vue'
+import DisclaimerText from '@/components/disclaimer-text/index.vue'
+import {mettingList, mettingDesc} from '@/api/exhibitor'
+import floatButton from "@/components/layout/float-button";
+import ContactUs from '@/pages/index/components/contact-us.vue'
+import PageLayout from "@/components/layout/page-layout";
 
-	export default {
-		options: {
-			styleIsolation: 'shared'
-		},
-		components: {
-			NavBar,
-			UScrollView,
-			ActivityItem,
-			DisclaimerText,
-      floatButton,
-			ContactUs
-		},
-		data() {
-			return {
-				activityList: [],
-				activityParams: {
-					page: 1,
-					page_size: 10,
-					keyword: '',
-				},
-				activityListLoading: false,
-				activityListLastPage: 1,
-				mettingDesc: '',
-				showContactUs: false,
-				q_url: '',
-			}
-		},
-		created() {
-			this.getMettingDesc()
-			this.getList()
-		},
-		methods: {
-			getList() {
-				this.activityListLoading = true
-				mettingList(this.activityParams).then(res => {
-					if (res.data.data) {
-						if (this.activityParams.page > 1) {
-							this.activityList = [...this.activityList, ...res.data.data]
-						} else {
-							this.activityList = res.data.data
-							this.activityListLastPage = res.data.last_page
-						}
-					} else {
-						this.showToast('系统繁忙,稍候再试')
-					}
-					this.activityListLoading = false
-				})
-			},
-			updateItemValue(e) {
-				this.activityList.forEach((item) => {
-					if (item.id === e.id) {
-						item[e.key] = e.value
-					}
-				})
-			},
-			getMettingDesc() {
-				mettingDesc().then(res => {
-					this.mettingDesc = res.data
-				})
-			},
-			updateContactStatus(data) {
-				this.showContactUs = data.showContactUs
-				this.q_url = data.q_url
-			}
-		}
-	}
+export default {
+  options: {
+    styleIsolation: 'shared'
+  },
+  components: {
+    PageLayout,
+    NavBar,
+    UScrollView,
+    ActivityItem,
+    DisclaimerText,
+    floatButton,
+    ContactUs
+  },
+  data() {
+    return {
+      activityList: [],
+      activityParams: {
+        page: 1,
+        page_size: 10,
+        keyword: '',
+      },
+      activityListLoading: false,
+      activityListLastPage: 1,
+      mettingDesc: '',
+      showContactUs: false,
+      q_url: '',
+    }
+  },
+  created() {
+    this.getMettingDesc()
+    this.getList()
+  },
+  methods: {
+    getList() {
+      this.activityListLoading = true
+      mettingList(this.activityParams).then(res => {
+        if (res.data.data) {
+          if (this.activityParams.page > 1) {
+            this.activityList = [...this.activityList, ...res.data.data]
+          } else {
+            this.activityList = res.data.data
+            this.activityListLastPage = res.data.last_page
+          }
+        } else {
+          this.showToast('系统繁忙,稍候再试')
+        }
+        this.activityListLoading = false
+      })
+    },
+    updateItemValue(e) {
+      this.activityList.forEach((item) => {
+        if (item.id === e.id) {
+          item[e.key] = e.value
+        }
+      })
+    },
+    getMettingDesc() {
+      mettingDesc().then(res => {
+        this.mettingDesc = res.data
+      })
+    },
+    updateContactStatus(data) {
+      this.showContactUs = data.showContactUs
+      this.q_url = data.q_url
+    }
+  }
+}
 </script>
 
 <style lang="scss">
-	.activity-head{
-		color: #333333;
-		.activity-head-title{
-			font-weight: bold;
-			font-size: $fontSize6;
-			line-height: 49rpx;
-		}
-		.activity-head-desc{
-			margin-top: 20rpx;
-			font-size: $fontSize3;
-			line-height: 40rpx;
-		}
-		.activity-favourites-text{
-			white-space: nowrap;
-		}
-	}
-	.activity-list{
-		display: grid;
-		grid-template-columns: 1fr;
-		grid-row-gap: 30rpx;
-		margin-top: 40rpx;
-		color: #333333;
-	}
+.activity-head {
+  color: #333333;
+
+  .activity-head-title {
+    font-weight: bold;
+    font-size: $fontSize6;
+    line-height: 49rpx;
+  }
+
+  .activity-head-desc {
+    margin-top: 20rpx;
+    font-size: $fontSize3;
+    line-height: 40rpx;
+  }
+
+  .activity-favourites-text {
+    white-space: nowrap;
+  }
+}
+
+.activity-list {
+  display: grid;
+  grid-template-columns: 1fr;
+  grid-row-gap: 30rpx;
+  margin-top: 40rpx;
+  color: #333333;
+}
 </style>

+ 79 - 75
pages/disclaimer/index.vue

@@ -1,86 +1,90 @@
 <template>
-	<view class="container">
-		<nav-bar title=" " transparent></nav-bar>
-		<view class="body">
-			<text class="title">
-				{{clauseInfo.title}}
-			</text>
+  <page-layout>
+    <nav-bar title=" " transparent></nav-bar>
+    <view class="body">
+      <text class="title">
+        {{ clauseInfo.title }}
+      </text>
 
-			<text class="content">
-				{{clauseInfo.content}}
-			</text>
-			<text class="title">
-				Disclaimer
-			</text>
-			<text class="content">
-				The content of this System has been provided by the exhibitors and Messe Muenchen Shanghai Co., Ltd.
-				(hereinafter referred to as “MM-SH”) will not assume any liability for the correctness, completeness and
-				up-to-date status of the content. This System includes links to external websites of third parties, MM-SH have
-				no influence on the contents of these websites. In all cases, the respective site provider or operator shall be
-				responsible for the content of the sites linked. MM-SH do not bear any legal liability therefrom. In particular,
-				MM-SH reserves the right to make changes or extensions to the information provided without prior notification.
-				Decisions based on the information provided on or via this System are for your own account and risk. MM-SH shall
-				not be liable for any direct or indirect damages caused by use of information provided on or via this System.
-				MM-SH do not bear any legal liability for any loss arising from any direct or indirect use of contents of this
-				System, including without limitation the losses resulted from error, omission or virus, etc. The information,
-				photos, and logos, etc. in relation to the exhibitors in this System are all provided by exhibitors and any
-				download or use of the content for commercial purpose without authorization is prohibited. If you have any
-				objection, please contact MM-SH.
-			</text>
-		</view>
-	</view>
+      <text class="content">
+        {{ clauseInfo.content }}
+      </text>
+      <text class="title">
+        Disclaimer
+      </text>
+      <text class="content">
+        The content of this System has been provided by the exhibitors and Messe Muenchen Shanghai Co., Ltd.
+        (hereinafter referred to as “MM-SH”) will not assume any liability for the correctness, completeness and
+        up-to-date status of the content. This System includes links to external websites of third parties, MM-SH have
+        no influence on the contents of these websites. In all cases, the respective site provider or operator shall be
+        responsible for the content of the sites linked. MM-SH do not bear any legal liability therefrom. In particular,
+        MM-SH reserves the right to make changes or extensions to the information provided without prior notification.
+        Decisions based on the information provided on or via this System are for your own account and risk. MM-SH shall
+        not be liable for any direct or indirect damages caused by use of information provided on or via this System.
+        MM-SH do not bear any legal liability for any loss arising from any direct or indirect use of contents of this
+        System, including without limitation the losses resulted from error, omission or virus, etc. The information,
+        photos, and logos, etc. in relation to the exhibitors in this System are all provided by exhibitors and any
+        download or use of the content for commercial purpose without authorization is prohibited. If you have any
+        objection, please contact MM-SH.
+      </text>
+    </view>
+  </page-layout>
 </template>
 
 <script>
-	import NavBar from '@/components/layout/nav-bar'
-	import {
-		getClauseInfo
-	} from '@/api/exhibitor'
-	export default {
-		data() {
-			return {
-				clauseInfo: {}
-			}
-		},
-		components: {
-			NavBar
-		},
-		mounted() {
-			this.getClauseData()
-		},
-		methods: {
-			getClauseData() {
-				getClauseInfo({ key: "disclaimer" }).then(res => {
-					this.clauseInfo = res.data
-					console.log(this.clauseInfo);
-				})
-			}
-		}
-	}
+import NavBar from '@/components/layout/nav-bar'
+import {
+  getClauseInfo
+} from '@/api/exhibitor'
+import PageLayout from "@/components/layout/page-layout";
+
+export default {
+  data() {
+    return {
+      clauseInfo: {}
+    }
+  },
+  components: {
+    PageLayout,
+    NavBar
+  },
+  mounted() {
+    this.getClauseData()
+  },
+  methods: {
+    getClauseData() {
+      getClauseInfo({key: "disclaimer"}).then(res => {
+        this.clauseInfo = res.data
+        console.log(this.clauseInfo);
+      })
+    }
+  }
+}
 </script>
 
 <style lang="scss">
-	.container {}
+.container {
+}
 
-	.body {
-		padding: 50rpx;
-	}
+.body {
+  padding: 50rpx;
+}
 
-	.title {
-		font-size: $fontSize4;
-		color: $fontTitleColor;
-		display: block;
-		font-weight: bold;
-		text-align: justify;
-	}
+.title {
+  font-size: $fontSize4;
+  color: $fontTitleColor;
+  display: block;
+  font-weight: bold;
+  text-align: justify;
+}
 
-	.content {
-		font-size: $fontSize2;
-		color: $fontColor;
-		line-height: 1.9;
-		display: block;
-		margin-top: 32rpx;
-		margin-bottom: 42rpx;
-		text-align: justify;
-	}
-</style>
+.content {
+  font-size: $fontSize2;
+  color: $fontColor;
+  line-height: 1.9;
+  display: block;
+  margin-top: 32rpx;
+  margin-bottom: 42rpx;
+  text-align: justify;
+}
+</style>

+ 14 - 12
pages/disclaimer/privacy.vue

@@ -1,26 +1,27 @@
 <template>
-	<view class="container">
-		<nav-bar title=" " transparent></nav-bar>
-		<view class="body">
-			<text class="title">
+  <page-layout>
+    <nav-bar title=" " transparent></nav-bar>
+    <view class="body">
+      <text class="title">
         {{ privacyInfo.title }}
-			</text>
-			<text class="content">
-				{{ privacyInfo.content }}
-			</text>
-			<text class="title">
+      </text>
+      <text class="content">
+        {{ privacyInfo.content }}
+      </text>
+      <text class="title">
         {{ lawInfo.title }}
       </text>
-			<text class="content">
+      <text class="content">
         {{ lawInfo.content }}
       </text>
-		</view>
-	</view>
+    </view>
+  </page-layout>
 </template>
 
 <script>
 	import NavBar from '@/components/layout/nav-bar'
 	import { getClauseInfo } from '@/api/exhibitor'
+  import PageLayout from "@/components/layout/page-layout";
 	export default {
 		data() {
 			return {
@@ -29,6 +30,7 @@
 			}
 		},
 		components: {
+      PageLayout,
 			NavBar
 		},
 		mounted() {

+ 311 - 293
pages/exhibitor/detail.vue

@@ -1,303 +1,321 @@
 <template>
-	<view class="exhibitor-detail">
-		<nav-bar title="展商详情" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<view class="main-container">
-				<view class="exhibitor-main">
-					<view class="exhibitor-logo">
-						<image :src="exhibitor.logo + '?x-oss-process=image/resize,w_200'" mode="aspectFit" />
-					</view>
-					<view class="exhibitor-title">
-						<view class="exhibitor-title-1">
-							{{ exhibitor.name_zh_cn }}
-						</view>
-						<view class="exhibitor-title-2">
-							 {{ exhibitor.name_en_us }}
-						</view>
-						<view class="exhibitor-title-3">
-							{{ exhibitor.country }}
-						</view>
-					</view>
-					<view class="exhibitor-number">
-						<view class="exhibitor-number-label">展位号:</view>
-						<view class="exhibitor-number-text">{{ exhibitor.hall_booth_no }}</view>
-					</view>
-				</view>
-				<view class="exhibitor-desc">
-					{{ exhibitor.introduce_zh_cn }}
-				</view>
-				<view class="exhibitor-tags">
-					<view class="exhibitor-tags-category">产品分类:</view>
-					<view class="exhibitor-tags-list">
-						<view class="exhibitor-tag" v-for="(item) in exhibitor.product_cate_names">{{ item }}</view>
-					</view>
-				</view>
-				<view class="exhibitor-tags">
-					<view class="exhibitor-tags-category">应用领域:</view>
-					<view class="exhibitor-tags-list">
-						<view class="exhibitor-tag"  v-for="(item) in exhibitor.application_areas_names">{{ item }}</view>
-					</view>
-				</view>
-				<view class="exhibitor-operation">
-					<view class="exhibitor-views">浏览:{{ exhibitor.pv }}</view>
-					<view class="exhibitor-action">
-						<view v-if="pollShow.exhibitors_poll_show">
-							<view class="iconfont icon-xiaochengxu-renqiicon"></view>
-							<view>人气:{{ exhibitor.poll_count }}</view>
-						</view>
-						<view>
-							<button :plain="true" @click.stop="onShare()">
-								<view>
-									<view class="iconfont icon-zhuanfa"></view>
-									<view>分享</view>
-								</view>
-							</button>
-						</view>
-						<view @click="onCollect()">
-							<view v-if="exhibitor.is_collect" class="iconfont icon-favourites-filled-star-symbol active"></view>
-							<view v-else class="iconfont icon-Favourites-Add-Large"></view>
-							<view>收藏</view>
-						</view>
-						<view @click="onLike()">
-							<view v-if="exhibitor.is_like" class="iconfont icon-aixin active"></view>
-							<view v-else class="iconfont icon-heart1"></view>
-							<view>点赞</view>
-						</view>
-						<view v-if="pollShow.exhibitors_poll_show" @click="onPoll()">
-							<view v-if="exhibitor.is_poll" class="iconfont icon-Ticket1 active"></view>
-							<view v-else class="iconfont icon-xiaochengxu-toupiaoicon"></view>
-							<view>投票</view>
-						</view>
-					</view>
-				</view>
-				<u-panel title="展品资料">
-					<exhibit-recommend :limit="exhibitRecommendLimit" :exhibitorId="exhibitorId"/>
-				</u-panel>
-				<u-panel title="展商新闻">
-					<news-recommend recommend-type="detail" :exhibitorId="exhibitorId" />
-				</u-panel>
-				<u-panel title="展商活动">
-					<activity-recommend recommend-type="detail" :exhibitorId="exhibitorId" />
-				</u-panel>
-				<view class="click-more"><van-button type="primary" @click="navigateTo('/pages/index/index?tab=exhibitor')">点击查看更多展商信息</van-button></view>
-				<disclaimer-text></disclaimer-text>
-			</view>
-		</u-scroll-view>
-    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+  <page-layout class="exhibitor-detail">
+    <nav-bar title="展商详情" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <view class="main-container">
+        <view class="exhibitor-main">
+          <view class="exhibitor-logo">
+            <image :src="exhibitor.logo + '?x-oss-process=image/resize,w_200'" mode="aspectFit"/>
+          </view>
+          <view class="exhibitor-title">
+            <view class="exhibitor-title-1">
+              {{ exhibitor.name_zh_cn }}
+            </view>
+            <view class="exhibitor-title-2">
+              {{ exhibitor.name_en_us }}
+            </view>
+            <view class="exhibitor-title-3">
+              {{ exhibitor.country }}
+            </view>
+          </view>
+          <view class="exhibitor-number">
+            <view class="exhibitor-number-label">展位号:</view>
+            <view class="exhibitor-number-text">{{ exhibitor.hall_booth_no }}</view>
+          </view>
+        </view>
+        <view class="exhibitor-desc">
+          {{ exhibitor.introduce_zh_cn }}
+        </view>
+        <view class="exhibitor-tags">
+          <view class="exhibitor-tags-category">产品分类:</view>
+          <view class="exhibitor-tags-list">
+            <view class="exhibitor-tag" v-for="(item) in exhibitor.product_cate_names">{{ item }}</view>
+          </view>
+        </view>
+        <view class="exhibitor-tags">
+          <view class="exhibitor-tags-category">应用领域:</view>
+          <view class="exhibitor-tags-list">
+            <view class="exhibitor-tag" v-for="(item) in exhibitor.application_areas_names">{{ item }}</view>
+          </view>
+        </view>
+        <view class="exhibitor-operation">
+          <view class="exhibitor-views">浏览:{{ exhibitor.pv }}</view>
+          <view class="exhibitor-action">
+            <view v-if="pollShow.exhibitors_poll_show">
+              <view class="iconfont icon-xiaochengxu-renqiicon"></view>
+              <view>人气:{{ exhibitor.poll_count }}</view>
+            </view>
+            <view>
+              <button :plain="true" @click.stop="onShare()">
+                <view>
+                  <view class="iconfont icon-zhuanfa"></view>
+                  <view>分享</view>
+                </view>
+              </button>
+            </view>
+            <view @click="onCollect()">
+              <view v-if="exhibitor.is_collect" class="iconfont icon-favourites-filled-star-symbol active"></view>
+              <view v-else class="iconfont icon-Favourites-Add-Large"></view>
+              <view>收藏</view>
+            </view>
+            <view @click="onLike()">
+              <view v-if="exhibitor.is_like" class="iconfont icon-aixin active"></view>
+              <view v-else class="iconfont icon-heart1"></view>
+              <view>点赞</view>
+            </view>
+            <view v-if="pollShow.exhibitors_poll_show" @click="onPoll()">
+              <view v-if="exhibitor.is_poll" class="iconfont icon-Ticket1 active"></view>
+              <view v-else class="iconfont icon-xiaochengxu-toupiaoicon"></view>
+              <view>投票</view>
+            </view>
+          </view>
+        </view>
+        <u-panel title="展品资料">
+          <exhibit-recommend :limit="exhibitRecommendLimit" :exhibitorId="exhibitorId"/>
+        </u-panel>
+        <u-panel title="展商新闻">
+          <news-recommend recommend-type="detail" :exhibitorId="exhibitorId"/>
+        </u-panel>
+        <u-panel title="展商活动">
+          <activity-recommend recommend-type="detail" :exhibitorId="exhibitorId"/>
+        </u-panel>
+        <view class="click-more">
+          <van-button type="primary" @click="navigateTo('/pages/index/index?tab=exhibitor')">点击查看更多展商信息
+          </van-button>
+        </view>
+        <disclaimer-text></disclaimer-text>
+      </view>
+    </u-scroll-view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url"/>
     <float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
-		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
-	</view>
+    <van-dialog id="van-dialog"/>
+    <u-share-action-sheet :show.sync="showShare" :show-info="shareInfo"/>
+  </page-layout>
 </template>
 
 <script>
-	import NavBar from '@/components/layout/nav-bar'
-	import UScrollView from '@/components/common/u-scroll-view'
-	import UShareActionSheet from '@/components/common/u-share-action-sheet'
-	import UPanel from '@/components/common/u-panel'
-	import ExhibitRecommend from '@/pages/exhibitor/components/exhibit-recommend.vue'
-	import NewsRecommend from '@/pages/news/components/news-recommend.vue'
-	import ActivityRecommend from '@/pages/activity/components/activity-recommend.vue'
-	import { exhibitorsInfo, exhibitorsCollect, exhibitorsLike, exhibitorsPoll, globalPollShow } from '@/api/exhibitor'
-	import DisclaimerText from '@/components/disclaimer-text/index.vue'
-  import floatButton from "@/components/layout/float-button"
-	import ContactUs from '@/pages/index/components/contact-us.vue'
+import NavBar from '@/components/layout/nav-bar'
+import UScrollView from '@/components/common/u-scroll-view'
+import UShareActionSheet from '@/components/common/u-share-action-sheet'
+import UPanel from '@/components/common/u-panel'
+import ExhibitRecommend from '@/pages/exhibitor/components/exhibit-recommend.vue'
+import NewsRecommend from '@/pages/news/components/news-recommend.vue'
+import ActivityRecommend from '@/pages/activity/components/activity-recommend.vue'
+import {exhibitorsInfo, exhibitorsCollect, exhibitorsLike, exhibitorsPoll, globalPollShow} from '@/api/exhibitor'
+import DisclaimerText from '@/components/disclaimer-text/index.vue'
+import floatButton from "@/components/layout/float-button"
+import ContactUs from '@/pages/index/components/contact-us.vue'
+import PageLayout from "@/components/layout/page-layout";
 
-	export default {
-		options: {
-			// styleIsolation: 'shared'
-		},
-		components: {
-			NavBar,
-			UScrollView,
-			UShareActionSheet,
-			UPanel,
-			ExhibitRecommend,
-			ActivityRecommend,
-			NewsRecommend,
-			DisclaimerText,
-      floatButton,
-			ContactUs
-		},
-		computed: {
-		},
-		onLoad(options) {
-			this.exhibitorId = options.id
-			this.getExhibitorsInfo()
-		},
-		data() {
-			return {
-				showExhibitMore: true,
-				showShare: false,
-				shareInfo: null,
-				exhibitRecommendLimit: 4,
-				exhibitor: {
-					name_zh_cn: '',
-					name_en_us: '',
-					country: '',
-					hall_booth_no: '',
-					product_cate_names: [],
-					application_areas_names: [],
-					pv: 0,
-					poll_count: 0,
-					is_collect: 0,
-					is_like: 0,
-					is_poll: 0
-				},
-				exhibitorId: 0,
-				pollShow: {
-					exhibitors_poll_show: 0,
-					product_poll_show: 0
-				},
-				showContactUs: false,
-				q_url: ''
-			}
-		},
-		created() {
-			this.loadFontFace('Poppins')
-			this.getGlobalPollShow()
-		},
-		methods: {
-			getExhibitorsInfo() {
-				exhibitorsInfo({id: this.exhibitorId}).then(res => {
-					if (res.code === 0) {
-						this.exhibitor = res.data
-					}
-				})
-			},
-			onShareAppMessage(ops) {
-				return this.shareInfo
-			},
-			onShare() {
-				this.shareInfo = {
-					title: this.exhibitor.name_zh_cn,
-					path: `/pages/exhibitor/detail?id=` + this.exhibitor.id,
-					imageUrl: this.exhibitor.logo + '?x-oss-process=image/resize,w_600,h_600,limit_0,m_pad'
-				}
-				this.showShare = true
-			},
-			onCollect() { // 收藏
-				if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
-					return
-				}
-				exhibitorsCollect({ id: this.exhibitor.id }).then(res => {
-					if (res.code === 0) {
-						this.exhibitor.is_collect = this.exhibitor.is_collect === 0 ? 1 : 0
-					}
-				})
-			},
-			onLike() { // 点赞
-				if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
-					return
-				}
-				exhibitorsLike({ id: this.exhibitor.id }).then(res => {
-					if (res.code === 0) {
-						this.exhibitor.is_like = this.exhibitor.is_like === 0 ? 1 : 0
-					}
-				})
-			},
-			onPoll() { // 投票
-				if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
-					return
-				}
-				exhibitorsPoll({ id: this.exhibitor.id }).then(res => {
-					if (res.code === 0) {
-						this.exhibitor.is_poll = this.exhibitor.is_poll === 0 ? 1 : 0
-						if (this.exhibitor.is_poll === 1) {
-							this.exhibitor.poll_count = this.exhibitor.poll_count + 1
-						} else {
-							this.exhibitor.poll_count = this.exhibitor.poll_count - 1
-							this.exhibitor.poll_count = this.exhibitor.poll_count < 0 ? 0 : this.exhibitor.poll_count
-						}
-					}
-				})
-			},
-			getGlobalPollShow() {
-				globalPollShow().then(res => {
-					this.pollShow = res.data
-				})
-			},
-			updateContactStatus(data) {
-				this.showContactUs = data.showContactUs
-				this.q_url = data.q_url
-			}
-		}
-	}
+export default {
+  options: {
+    // styleIsolation: 'shared'
+  },
+  components: {
+    PageLayout,
+    NavBar,
+    UScrollView,
+    UShareActionSheet,
+    UPanel,
+    ExhibitRecommend,
+    ActivityRecommend,
+    NewsRecommend,
+    DisclaimerText,
+    floatButton,
+    ContactUs
+  },
+  computed: {},
+  onLoad(options) {
+    this.exhibitorId = options.id
+    this.getExhibitorsInfo()
+  },
+  data() {
+    return {
+      showExhibitMore: true,
+      showShare: false,
+      shareInfo: null,
+      exhibitRecommendLimit: 4,
+      exhibitor: {
+        name_zh_cn: '',
+        name_en_us: '',
+        country: '',
+        hall_booth_no: '',
+        product_cate_names: [],
+        application_areas_names: [],
+        pv: 0,
+        poll_count: 0,
+        is_collect: 0,
+        is_like: 0,
+        is_poll: 0
+      },
+      exhibitorId: 0,
+      pollShow: {
+        exhibitors_poll_show: 0,
+        product_poll_show: 0
+      },
+      showContactUs: false,
+      q_url: ''
+    }
+  },
+  created() {
+    this.loadFontFace('Poppins')
+    this.getGlobalPollShow()
+  },
+  methods: {
+    getExhibitorsInfo() {
+      exhibitorsInfo({id: this.exhibitorId}).then(res => {
+        if (res.code === 0) {
+          this.exhibitor = res.data
+        }
+      })
+    },
+    onShareAppMessage(ops) {
+      return this.shareInfo
+    },
+    onShare() {
+      this.shareInfo = {
+        title: this.exhibitor.name_zh_cn,
+        path: `/pages/exhibitor/detail?id=` + this.exhibitor.id,
+        imageUrl: this.exhibitor.logo + '?x-oss-process=image/resize,w_600,h_600,limit_0,m_pad'
+      }
+      this.showShare = true
+    },
+    onCollect() { // 收藏
+      if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
+        return
+      }
+      exhibitorsCollect({id: this.exhibitor.id}).then(res => {
+        if (res.code === 0) {
+          this.exhibitor.is_collect = this.exhibitor.is_collect === 0 ? 1 : 0
+        }
+      })
+    },
+    onLike() { // 点赞
+      if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
+        return
+      }
+      exhibitorsLike({id: this.exhibitor.id}).then(res => {
+        if (res.code === 0) {
+          this.exhibitor.is_like = this.exhibitor.is_like === 0 ? 1 : 0
+        }
+      })
+    },
+    onPoll() { // 投票
+      if (!this.checkAuth('/pages/exhibitor/detail?id=' + this.exhibitor.id)) {
+        return
+      }
+      exhibitorsPoll({id: this.exhibitor.id}).then(res => {
+        if (res.code === 0) {
+          this.exhibitor.is_poll = this.exhibitor.is_poll === 0 ? 1 : 0
+          if (this.exhibitor.is_poll === 1) {
+            this.exhibitor.poll_count = this.exhibitor.poll_count + 1
+          } else {
+            this.exhibitor.poll_count = this.exhibitor.poll_count - 1
+            this.exhibitor.poll_count = this.exhibitor.poll_count < 0 ? 0 : this.exhibitor.poll_count
+          }
+        }
+      })
+    },
+    getGlobalPollShow() {
+      globalPollShow().then(res => {
+        this.pollShow = res.data
+      })
+    },
+    updateContactStatus(data) {
+      this.showContactUs = data.showContactUs
+      this.q_url = data.q_url
+    }
+  }
+}
 </script>
 
 <style lang="scss">
-	@import "@/static/style/pages/exhibitor-detail.scss";
-	.exhibitor-detail{
-		.exhibitor-main{
-			display: flex;
-			align-items: flex-start;
-		}
-		.exhibitor-logo{
-			width: 166rpx;
-			height: 166rpx;
-			background: #FFFFFF;
-			border: 1rpx solid #D9D9D9;
-			image{
-				width: 100%;
-				height: 100%;
-			}
-		}
-		.u-panel{
-			background-color: #FFFFFF;
-		}
-		.exhibitor-title{
-			flex: 1;
-			font-family: Poppins, Poppins;
-			font-size: 30rpx;
-			color: #000000;
-			line-height: 40rpx;
-			padding-left: 19rpx;
-			padding-right: 24rpx;
-			.exhibitor-title-1{
-				font-weight: bold;
-			}
-			.exhibitor-title-2 {
-				font-size: 28rpx;
-			}
-			.exhibitor-title-3 {
-				font-size: $fontSize0;
-				color: #333333;
-				line-height: 20rpx;
-				margin-top: 10rpx;
-			}
-		}
-		.exhibitor-number{
-			flex-shrink: 0;
-			justify-content: flex-end;
-			margin-top: 12rpx;
-		}
-		.exhibitor-number-label{
-			font-size: $fontSize0;
-			color: #555555;
-		}
-		.exhibitor-number-text{
-			font-family: Poppins, Poppins;
-			font-weight: bold;
-			font-size: $fontSize6;
-			color: #E57519;
-			letter-spacing: 2rpx;
-		}
-		.exhibitor-desc{
-			font-family: Poppins, Poppins;
-			font-size: $fontSize2;
-			color: #333333;
-			line-height: 35rpx;
-			margin-top: 30rpx;
-			margin-bottom: 12rpx;
-		}
-		.u-panel{
-			margin-top: 40rpx;
-		}
-		.click-more{
-			display: flex;
-			justify-content: center;
-			margin-top: 49rpx;
-			@include link-button;
-		}
-	}
+@import "@/static/style/pages/exhibitor-detail.scss";
+
+.exhibitor-detail {
+  .exhibitor-main {
+    display: flex;
+    align-items: flex-start;
+  }
+
+  .exhibitor-logo {
+    width: 166rpx;
+    height: 166rpx;
+    background: #FFFFFF;
+    border: 1rpx solid #D9D9D9;
+
+    image {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  .u-panel {
+    background-color: #FFFFFF;
+  }
+
+  .exhibitor-title {
+    flex: 1;
+    font-family: Poppins, Poppins;
+    font-size: 30rpx;
+    color: #000000;
+    line-height: 40rpx;
+    padding-left: 19rpx;
+    padding-right: 24rpx;
+
+    .exhibitor-title-1 {
+      font-weight: bold;
+    }
+
+    .exhibitor-title-2 {
+      font-size: 28rpx;
+    }
+
+    .exhibitor-title-3 {
+      font-size: $fontSize0;
+      color: #333333;
+      line-height: 20rpx;
+      margin-top: 10rpx;
+    }
+  }
+
+  .exhibitor-number {
+    flex-shrink: 0;
+    justify-content: flex-end;
+    margin-top: 12rpx;
+  }
+
+  .exhibitor-number-label {
+    font-size: $fontSize0;
+    color: #555555;
+  }
+
+  .exhibitor-number-text {
+    font-family: Poppins, Poppins;
+    font-weight: bold;
+    font-size: $fontSize6;
+    color: #E57519;
+    letter-spacing: 2rpx;
+  }
+
+  .exhibitor-desc {
+    font-family: Poppins, Poppins;
+    font-size: $fontSize2;
+    color: #333333;
+    line-height: 35rpx;
+    margin-top: 30rpx;
+    margin-bottom: 12rpx;
+  }
+
+  .u-panel {
+    margin-top: 40rpx;
+  }
+
+  .click-more {
+    display: flex;
+    justify-content: center;
+    margin-top: 49rpx;
+    @include link-button;
+  }
+}
 </style>

+ 7 - 5
pages/exhibitor/exhibit-detail.vue

@@ -1,5 +1,5 @@
 <template>
-  <view class="exhibit-detail exhibitor-detail">
+  <page-layout class="exhibit-detail exhibitor-detail">
     <nav-bar title="展品介绍" @init="onInitNavbar"></nav-bar>
     <u-scroll-view>
       <view class="main-container">
@@ -57,11 +57,11 @@
         <disclaimer-text></disclaimer-text>
       </view>
     </u-scroll-view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
-		<float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+    <float-button @custom-event="updateContactStatus()"></float-button>
+    <van-dialog id="van-dialog" />
     <u-share-action-sheet :show.sync="showShare" :show-info="shareInfo"/>
-  </view>
+  </page-layout>
 </template>
 
 <script>
@@ -79,12 +79,14 @@ import {
   exhibitorsProductPoll
 } from '@/api/exhibitor'
 import exhibitorCard from "@/pages/exhibitor/components/exhibitor-card";
+import PageLayout from "@/components/layout/page-layout";
 
 export default {
   options: {
     styleIsolation: 'shared'
   },
   components: {
+    PageLayout,
     NavBar,
     UScrollView,
     UShareActionSheet,

+ 5 - 4
pages/exhibitor/exhibit.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="exhibit-index exhibitor-index">
+	<page-layout class="exhibit-index">
 		<nav-bar title="展品信息" @init="onInitNavbar"></nav-bar>
 		<u-scroll-view>
 			<view class="main-container">
@@ -49,8 +49,7 @@
 		<float-button @custom-event="updateContactStatus()"></float-button>
 		<van-dialog id="van-dialog" />
 		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
-	</view>
-</template>
+	</page-layout></template>
 
 <script>
 	import NavBar from '@/components/layout/nav-bar'
@@ -73,12 +72,14 @@
 		getAdInfo
 	} from '@/api'
 	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			// styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			USearch,
@@ -370,4 +371,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 12 - 7
pages/exhibitor/exhibitor-activity.vue

@@ -1,5 +1,5 @@
 <template>
-  <view class="">
+  <page-layout>
     <nav-bar title="展台活动" @init="onInitNavbar"></nav-bar>
     <u-scroll-view>
       <view class="main-container">
@@ -27,10 +27,9 @@
         </view>
         <exhibitor-card :exhibit="exhibitorsInfo"></exhibitor-card>
         <disclaimer-text></disclaimer-text>
-
       </view>
     </u-scroll-view>
-  </view>
+  </page-layout>
 </template>
 
 <script>
@@ -42,8 +41,11 @@ import UContent from '@/components/common/u-content'
 import DisclaimerText from '@/components/disclaimer-text/index.vue'
 
 import {returnTimeFormat} from "@/utils";
+import PageLayout from "@/components/layout/page-layout";
+
 export default {
   components: {
+    PageLayout,
     exhibitorCard,
     NavBar,
     UScrollView,
@@ -72,15 +74,15 @@ export default {
 
   },
   methods: {
-    getInfoEvent()  {
-      exhibitorsBoothActivityInfo({id:this.id}).then(res=>{
+    getInfoEvent() {
+      exhibitorsBoothActivityInfo({id: this.id}).then(res => {
         this.info = res.data
-        this.info.time = returnTimeFormat(this.info.start_time,this.info.end_time)
+        this.info.time = returnTimeFormat(this.info.start_time, this.info.end_time)
         this.getExhibitorsInfo(this.info.exhibitors_id)
       })
     },
     getExhibitorsInfo(id) {
-      exhibitorsInfo({id:id}).then(res => {
+      exhibitorsInfo({id: id}).then(res => {
         this.exhibitorsInfo.exhibitors_logo = res.data.logo
         this.exhibitorsInfo.exhibitors_name_zh_cn = res.data.name_zh_cn
         this.exhibitorsInfo.exhibitors_name_en_us = res.data.name_en_us
@@ -100,13 +102,16 @@ export default {
     font-weight: bold;
     margin-bottom: 39rpx;
   }
+
   .content {
     margin-top: 25rpx;
   }
+
   .info_item {
     margin-top: 15rpx;
     font-weight: bold;
     font-size: $fontSize2;
+
     .label {
       font-weight: 400;
     }

+ 7 - 5
pages/exhibitor/exhibitor-news.vue

@@ -1,5 +1,5 @@
 <template>
-  <view class="">
+  <page-layout>
     <nav-bar title="展商新闻" @init="onInitNavbar"></nav-bar>
     <u-scroll-view>
       <view class="main-container">
@@ -18,10 +18,10 @@
         <disclaimer-text></disclaimer-text>
       </view>
     </u-scroll-view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
-		<float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
-  </view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+    <float-button @custom-event="updateContactStatus()"></float-button>
+    <van-dialog id="van-dialog" />
+  </page-layout>
 </template>
 
 <script>
@@ -33,9 +33,11 @@ import UContent from '@/components/common/u-content'
 import DisclaimerText from '@/components/disclaimer-text/index.vue'
 import floatButton from "@/components/layout/float-button"
 import ContactUs from '@/pages/index/components/contact-us.vue'
+import PageLayout from "@/components/layout/page-layout";
 
 export default {
   components: {
+    PageLayout,
     exhibitorCard,
     NavBar,
     UScrollView,

+ 8 - 8
pages/exhibitor/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="exhibitor-index">
+	<page-layout class="exhibitor-index">
 		<nav-bar title="展商信息" @init="onInitNavbar"></nav-bar>
 		<u-scroll-view :tabbar-conflict="true">
 			<view class="main-container">
@@ -57,8 +57,7 @@
 		</u-scroll-view>
 		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
 		<float-button @custom-event="updateContactStatus()"></float-button>
-	</view>
-</template>
+	</page-layout></template>
 
 <script>
 	import NavBar from '@/components/layout/nav-bar'
@@ -82,12 +81,14 @@
 		getAdInfo
 	} from '@/api'
 	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			USearch,
 			UScrollView,
@@ -338,7 +339,7 @@
 
 	.exhibitor-index {
 		.item-title {
-			font-size: 24rpx;
+			font-size: $fontSize3;
 			font-weight: bold;
 
 			&.select-title {
@@ -370,7 +371,7 @@
 				padding: 18rpx 25rpx;
 				border: 1rpx solid #E57519;
 				background-color: #E57519;
-				font-size: 20rpx;
+				font-size: $fontSize2;
 				width: 100%;
 				color: #FFFFFF;
 				display: flex;
@@ -382,11 +383,10 @@
 
 				&::before {
 					content: '\e86f';
-					font-size: 24rpx;
+					font-size: $fontSize3;
 					font-family: iconfont;
 					font-weight: bold;
 				}
 			}
 		}
-	}
-	</style>
+	}	</style>

+ 110 - 99
pages/index/home.vue

@@ -1,94 +1,97 @@
 <template>
-	<view class="content">
-		<nav-bar :show-title="false">
-			<view class="top-container">
-				<image class="logo" :src="logo" />
-				<view class="countdown">
-					距开幕 <view class="days"> 168 </view> 天
-				</view>
-			</view>
-		</nav-bar>
-		<u-swiper :items="images" useComponentName='topSwiper' indicato-dots-style="morphing" :height="387" />
-		<view class="main-container">
-			<u-search v-model="searchKeyword" placeholder="搜索关键词" @search="onClickSearch" />
-			<view class="nav-icons">
-				<template v-for="(item, index) in navIcons">
-					<view class="nav-icon-wrapper" :key="index" v-if="!item.is_hide">
-						<view class="nav-icon" @click="onClickNavIcon(item)">
-							<view v-if="item.icon.indexOf('.svg') !== -1" :style="'background-image:url(' + item.icon +  ')'"></view>
-							<view v-else-if="item.icon.indexOf('icon-') !== -1" :class="'iconfont ' + item.icon"></view>
-						</view>
-						<view class="nav-text">
-							{{ item.name }}
-						</view>
-					</view>
-				</template>
-			</view>
-			<view class="panel-group panel-group-1">
-				<u-panel title="精彩视频" link="/pages/video/index">
-					<u-swiper :items="videos" useComponentName="videoSwiper" :height="360" :autoplay="false" :border-radius="10"
-						:image-width="508" :image-height="286" next-margin="100rpx" />
-				</u-panel>
-				<u-panel title="精彩图集" link="https://live.photoplus.cn/live/13331790">
-					<u-swiper :items="albumPics" useComponentName="imageSwiper" :height="360" :border-radius="10"
-						:image-width="508" :image-height="286" next-margin="100rpx" />
-					<!-- <view class="album">
-						<template v-for="(item, index) in albumPics">
-							<view class="album-pic" :key="index" @click="onClickAlbum(index)">
-								<image :src="String(item)" mode="aspectFill" />
-							</view>
-						</template>
-					</view> -->
-				</u-panel>
-			</view>
-			<view class="panel-group">
-				<u-panel title="新闻" link="/pages/news/index">
-					<news-recommend recommend-type="home" news-type="exhibition" />
-				</u-panel>
-			</view>
-			<view class="panel-group logo-group">
-				<u-panel title="战略合作方">
-					<u-swiper :items.sync="part1" useComponentName="logoSwiper" :autoplay="false" :height="250">
-						<template v-slot="{ scope }">
-							<view class="partners">
-								<template v-for="(item, index) in scope">
-									<view class="partner" :key="index" @tap="onLogoClick(item)">
-										<image :src="item.url" />
-									</view>
-								</template>
-							</view>
-						</template>
-					</u-swiper>
-				</u-panel>
-				<!-- <u-panel title="推荐展商" link="https://www.productronicachina.com.cn/partners">
-					<u-swiper :items="partners" :height="250">
-						<template v-slot="{ scope }">
-							<view class="partners">
-								<template v-for="(item, index) in scope.children">
-									<view class="partner" :key="index">
-										<image :src="item.icon" />
-									</view>
-								</template>
-							</view>
-						</template>
-					</u-swiper>
-				</u-panel> -->
-				<u-panel title="合作媒体" link="https://www.productronicachina.com.cn/partners">
-					<u-swiper :items="part2" useComponentName="logoSwiper" :autoplay="false" :height="250">
-						<template v-slot="{ scope }">
-							<view class="partners">
-								<template v-for="(item, index) in scope">
-									<view class="partner" :key="index" @tap="onLogoClick(item)">
-										<image :src="item.url" />
-									</view>
-								</template>
-							</view>
-						</template>
-					</u-swiper>
-				</u-panel>
-			</view>
-		</view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+  <page-layout>
+    <nav-bar :show-title="false">
+      <view class="top-container">
+        <image class="logo" :src="logo"/>
+        <view class="countdown">
+          距开幕
+          <view class="days"> 168</view>
+          天
+        </view>
+      </view>
+    </nav-bar>
+    <u-swiper :items="images" useComponentName='topSwiper' indicato-dots-style="morphing" :height="387"/>
+    <view class="main-container">
+      <u-search v-model="searchKeyword" placeholder="搜索关键词" @search="onClickSearch"/>
+      <view class="nav-icons">
+        <template v-for="(item, index) in navIcons">
+          <view class="nav-icon-wrapper" :key="index" v-if="!item.is_hide">
+            <view class="nav-icon" @click="onClickNavIcon(item)">
+              <view v-if="item.icon.indexOf('.svg') !== -1" :style="'background-image:url(' + item.icon +  ')'"></view>
+              <view v-else-if="item.icon.indexOf('icon-') !== -1" :class="'iconfont ' + item.icon"></view>
+            </view>
+            <view class="nav-text">
+              {{ item.name }}
+            </view>
+          </view>
+        </template>
+      </view>
+      <view class="panel-group panel-group-1">
+        <u-panel title="精彩视频" link="/pages/video/index">
+          <u-swiper :items="videos" useComponentName="videoSwiper" :height="360" :autoplay="false" :border-radius="10"
+                    :image-width="508" :image-height="286" next-margin="100rpx"/>
+        </u-panel>
+        <u-panel title="精彩图集"
+                 link="https://www.productronicachina.com.cn/data-facts-impressions-impressions-videos">
+          <u-swiper :items="albumPics" useComponentName="imageSwiper" :height="360" :border-radius="10"
+                    :image-width="508" :image-height="286" next-margin="100rpx"/>
+          <!-- <view class="album">
+            <template v-for="(item, index) in albumPics">
+              <view class="album-pic" :key="index" @click="onClickAlbum(index)">
+                <image :src="String(item)" mode="aspectFill" />
+              </view>
+            </template>
+          </view> -->
+        </u-panel>
+      </view>
+      <view class="panel-group">
+        <u-panel title="新闻" link="/pages/news/index">
+          <news-recommend recommend-type="home" news-type="exhibition"/>
+        </u-panel>
+      </view>
+      <view class="panel-group logo-group">
+        <u-panel title="战略合作方">
+          <u-swiper :items="part1" useComponentName="logoSwiper" key="logoSwiper" :autoplay="false" :height="250">
+            <template v-slot="{ scope }">
+              <view class="partners">
+                <template v-for="(item, index) in scope">
+                  <view class="partner" :key="index" @tap="onLogoClick(item)">
+                    <image :src="item.url"/>
+                  </view>
+                </template>
+              </view>
+            </template>
+          </u-swiper>
+        </u-panel>
+        <!-- <u-panel title="推荐展商" link="https://www.productronicachina.com.cn/partners">
+          <u-swiper :items="partners" :height="250">
+            <template v-slot="{ scope }">
+              <view class="partners">
+                <template v-for="(item, index) in scope.children">
+                  <view class="partner" :key="index">
+                    <image :src="item.icon" />
+                  </view>
+                </template>
+              </view>
+            </template>
+          </u-swiper>
+        </u-panel> -->
+        <u-panel title="合作媒体" link="https://www.productronicachina.com.cn/partners">
+          <u-swiper :items="part2" key="logoSwiper2" useComponentName="logoSwiper" :autoplay="false" :height="250">
+            <template v-slot="{ scope }">
+              <view class="partners">
+                <template v-for="(item, index) in scope">
+                  <view class="partner" :key="index" @tap="onLogoClick(item)">
+                    <image :src="item.url"/>
+                  </view>
+                </template>
+              </view>
+            </template>
+          </u-swiper>
+        </u-panel>
+      </view>
+    </view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url"/>
 		<float-button @custom-event="updateContactStatus()"></float-button>
 		<van-overlay :show="isShow">
 			<view class="ad-wrapper">
@@ -102,11 +105,12 @@
 				</view>
 			</view>
 		</van-overlay>
-	</view>
+  </page-layout>
 </template>
 
 <script>
-	import NavBar from '@/components/layout/nav-bar'
+	
+import NavBar from '@/components/layout/nav-bar'
 	import UScrollView from '@/components/common/u-scroll-view'
 	import USwiper from '@/components/common/u-swiper'
 	import USearch from '@/components/common/u-search'
@@ -120,12 +124,13 @@
 		getDashboardInfo,
 		getAdInfo
 	} from '@/api'
-
+	import PageLayout from "@/components/layout/page-layout";
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+			PageLayout,
 			floatButton,
 			NavBar,
 			UScrollView,
@@ -139,6 +144,7 @@
 		},
 		data() {
 			return {
+				navType: '',
 				logo: '',
 				searchKeyword: '',
 				showContactUs: false,
@@ -202,6 +208,11 @@
 			this.getDashboardData()
 			this.getAdData()
 		},
+		mounted() {
+		    this.getSystemInfo(this,(res)=>{
+		      this.navType = res
+		    })
+		  },
 		methods: {
 			onClickNavIcon(item) {
 				if (item.link === '/pages/exhibitor/index') {
@@ -269,7 +280,7 @@
 </script>
 
 <style lang="scss">
-	.ad-wrapper {
+.ad-wrapper {
 		display: flex;
 		justify-content: center;
 		align-items: center;
@@ -302,11 +313,6 @@
 		}
 	}
 
-	.logo {
-		width: 150rpx;
-		height: 37rpx;
-	}
-
 	.panel-group {
 		margin-top: 43rpx;
 		background-color: #FFFFFF;
@@ -338,6 +344,11 @@
 			}
 		}
 	}
+  .countdown {
+    display: flex;
+    align-items: center;
+    margin-left: 27rpx;
+    font-size: $fontSize3;
 
 	.search-container {
 		.search-input {

+ 13 - 11
pages/index/index.vue

@@ -1,13 +1,13 @@
 <template>
-	<view class="content">
-		<home v-if="tabbarActive === 'home'" @switch-tab="tabbarActive = 'exhibitor'" />
-		<exhibitor v-if="tabbarActive === 'exhibitor'" @share="onShare" />
-		<activity v-if="tabbarActive === 'activity'" />
-		<user v-if="tabbarActive === 'user'" />
-		<van-dialog id="van-dialog" />
-		<tab-bar :active.sync="tabbarActive"></tab-bar>
-		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
-	</view>
+  <view>
+    <home v-if="tabbarActive === 'home'" @switch-tab="tabbarActive = 'exhibitor'" />
+    <exhibitor v-if="tabbarActive === 'exhibitor'" @share="onShare" />
+    <activity v-if="tabbarActive === 'activity'" />
+    <user v-if="tabbarActive === 'user'" />
+    <van-dialog id="van-dialog" />
+    <tab-bar :active.sync="tabbarActive"></tab-bar>
+    <u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
+  </view>
 </template>
 
 <script>
@@ -17,12 +17,14 @@
 	import Exhibitor from '@/pages/exhibitor/index.vue'
 	import Activity from '@/pages/activity/index.vue'
 	import User from '@/pages/user/index.vue'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			TabBar,
 			Home,
 			Exhibitor,
@@ -43,7 +45,7 @@
 			}
 		},
 		created() {
-			
+
 		},
 		methods: {
 			onShare(e) {
@@ -72,4 +74,4 @@
 </script>
 
 <style lang="scss">
-</style>
+</style>

+ 44 - 42
pages/index/search.vue

@@ -1,46 +1,46 @@
 <template>
-	<view class="search-index">
-		<nav-bar title="搜索" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view :tabbar-conflict="false" @scroll-near-lower="onScrollToLower">
-			<view class="main-container">
-				<u-search v-model="searchKeyword" placeholder="搜索展商 / 展品名称 / 会议" @search="onClickSearch"/>
-				<view class="search-result-text">搜索结果</view>
-				<template v-if="isEmpty">
-					<van-empty description="暂无数据" />
-				</template>
-				<template v-else>
-					<u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
-					<view v-if="tabActive === 1" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in exhibitorList">
-							<exhibitor-item :item="item" :key="index" :pollShow="pollShow.exhibitors_poll_show" @share="onShare()" @updateItemValue="updateItemValue()"/>
-						</template>
-					</view>
-					<view v-else-if="tabActive === 2" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in exhibitList">
-							<exhibit-item :item="item" :key="index" :pollShow="pollShow.product_poll_show" @share="onShare()" @updateItemValue="updateItemValue()"/>
-						</template>
-					</view>
-					<view v-else-if="tabActive === 3" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in newsList">
-							<news-item :item="item" :key="index" type="exhibitor" />
-						</template>
-					</view>
-					<view v-else-if="tabActive === 4" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in activityList">
-							<activity-item type="exhibitor" :item="item" :key="index" @updateItemValue="updateItemValue()"/>
-						</template>
-					</view>
-					<view v-else-if="tabActive === 5" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in mettingList">
-							<activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
-						</template>
-					</view>
-				</template>
-				<disclaimer-text></disclaimer-text>
-			</view>
-		</u-scroll-view>
-		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
-	</view>
+  <page-layout class="search-index">
+    <nav-bar title="搜索" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view :tabbar-conflict="false" @scroll-near-lower="onScrollToLower">
+      <view class="main-container">
+        <u-search v-model="searchKeyword" placeholder="搜索展商 / 展品名称 / 会议" @search="onClickSearch"/>
+        <view class="search-result-text">搜索结果</view>
+        <template v-if="isEmpty">
+          <van-empty description="暂无数据" />
+        </template>
+        <template v-else>
+          <u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
+          <view v-if="tabActive === 1" class="search-result-list exhibit-list">
+            <template v-for="(item, index) in exhibitorList">
+              <exhibitor-item :item="item" :key="index" :pollShow="pollShow.exhibitors_poll_show" @share="onShare()" @updateItemValue="updateItemValue()"/>
+            </template>
+          </view>
+          <view v-else-if="tabActive === 2" class="search-result-list exhibit-list">
+            <template v-for="(item, index) in exhibitList">
+              <exhibit-item :item="item" :key="index" :pollShow="pollShow.product_poll_show" @share="onShare()" @updateItemValue="updateItemValue()"/>
+            </template>
+          </view>
+          <view v-else-if="tabActive === 3" class="search-result-list exhibit-list">
+            <template v-for="(item, index) in newsList">
+              <news-item :item="item" :key="index" type="exhibitor" />
+            </template>
+          </view>
+          <view v-else-if="tabActive === 4" class="search-result-list exhibit-list">
+            <template v-for="(item, index) in activityList">
+              <activity-item type="exhibitor" :item="item" :key="index" @updateItemValue="updateItemValue()"/>
+            </template>
+          </view>
+          <view v-else-if="tabActive === 5" class="search-result-list exhibit-list">
+            <template v-for="(item, index) in mettingList">
+              <activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
+            </template>
+          </view>
+        </template>
+        <disclaimer-text></disclaimer-text>
+      </view>
+    </u-scroll-view>
+    <u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
+  </page-layout>
 </template>
 
 <script>
@@ -56,11 +56,13 @@
 
 	import { globalSearch, mettingList, exhibitorsList, exhibitorsProductList, exhibitorsNewsList, exhibitorsBoothActivityList, globalPollShow } from '@/api/exhibitor'
 	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+  import PageLayout from "@/components/layout/page-layout";
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			UTabs,

+ 4 - 2
pages/index/webview.vue

@@ -1,14 +1,16 @@
 <template>
-  <view class="webview-container">
+  <page-layout class="webview-container">
     <web-view class="webview" :src="url" @bindmessage="message"></web-view>
     <u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
-  </view>
+  </page-layout>
 </template>
 
 <script>
 import UShareActionSheet from '@/components/common/u-share-action-sheet'
+import PageLayout from "@/components/layout/page-layout";
 export default {
   components: {
+    PageLayout,
     UShareActionSheet
   },
   data() {

+ 20 - 18
pages/news/index.vue

@@ -1,22 +1,22 @@
 <template>
-	<view class="news-index">
-		<nav-bar title="新闻" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view :tabbar-conflict="false" @scroll-near-lower="onScrollToLower">
-			<view class="main-container">
-				<u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
-				<van-empty v-if="newsList.length === 0" description="暂无数据" />
-				<view v-else class="news-list">
-					<template v-for="(item, index) in newsList">
-						<news-item :item="item" :key="index" :type="tabActive" />
-					</template>
-				</view>
-				<disclaimer-text></disclaimer-text>
-			</view>
-		</u-scroll-view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
-		<float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
-	</view>
+  <page-layout class="news-index">
+    <nav-bar title="新闻" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view :tabbar-conflict="false" @scroll-near-lower="onScrollToLower">
+      <view class="main-container">
+        <u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
+        <van-empty v-if="newsList.length === 0" description="暂无数据" />
+        <view v-else class="news-list">
+          <template v-for="(item, index) in newsList">
+            <news-item :item="item" :key="index" :type="tabActive" />
+          </template>
+        </view>
+        <disclaimer-text></disclaimer-text>
+      </view>
+    </u-scroll-view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+    <float-button @custom-event="updateContactStatus()"></float-button>
+    <van-dialog id="van-dialog" />
+  </page-layout>
 </template>
 
 <script>
@@ -28,12 +28,14 @@
 	import DisclaimerText from '@/components/disclaimer-text/index.vue'
 	import floatButton from "@/components/layout/float-button"
 	import ContactUs from '@/pages/index/components/contact-us.vue'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UTabs,
 			UScrollView,

+ 112 - 111
pages/user/favorites.vue

@@ -1,118 +1,119 @@
 <template>
-	<view class="user-favorites user-like" v-loading="loading">
-		<nav-bar title="我的收藏" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<view class="user-favorites-tabs-wrapper user-like-tabs-wrapper">
-				<view class="user-favorites-tabs user-like-tabs">
-					<u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange" />
-				</view>
-			</view>
-			<view class="main-container">
-				<view class="user-favorites-list user-like-list">
-					<template v-for="(item, index) in favoritesList">
-						<template v-if="tabActive === 'exhibitor'">
-							<exhibitor-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-						<template v-else-if="tabActive === 'exhibit'">
-							<exhibit-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-						<template v-else-if="tabActive === 'activity'">
-							<activity-item :item="item" :favorites-hidden="true" :key="index" />
-						</template>
-					</template>
-				</view>
-			</view>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-favorites user-like">
+    <nav-bar title="我的收藏" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <view class="user-favorites-tabs-wrapper user-like-tabs-wrapper">
+        <view class="user-favorites-tabs user-like-tabs">
+          <u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange"/>
+        </view>
+      </view>
+      <view class="main-container">
+        <view class="user-favorites-list user-like-list">
+          <template v-for="(item, index) in favoritesList">
+            <template v-if="tabActive === 'exhibitor'">
+              <exhibitor-item :item="item" :footer-hidden="true" :key="index"/>
+            </template>
+            <template v-else-if="tabActive === 'exhibit'">
+              <exhibit-item :item="item" :footer-hidden="true" :key="index"/>
+            </template>
+            <template v-else-if="tabActive === 'activity'">
+              <activity-item :item="item" :favorites-hidden="true" :key="index"/>
+            </template>
+          </template>
+        </view>
+      </view>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
-	import NavBar from '@/components/layout/nav-bar'
-	import UTabs from '@/components/common/u-tabs'
-	import UScrollView from '@/components/common/u-scroll-view'
-	import ExhibitItem from '@/pages/exhibitor/components/exhibit-item.vue'
-	import ExhibitorItem from '@/pages/exhibitor/components/exhibitor-item.vue'
-	import ActivityItem from '@/pages/activity/components/activity-item.vue'
-	import {
-		getExhibitorCollectList,
-		getExhibitCollectList,
-		getActivityCollectList
-	} from '@/api/user'
-	
-	export default {
-		options: {
-			styleIsolation: 'shared'
-		},
-		components: {
-			NavBar,
-			UTabs,
-			UScrollView,
-			ExhibitItem,
-			ExhibitorItem,
-			ActivityItem
-		},
-		computed: {
-		},
-		data() {
-			return {
-				tabActive: 'exhibitor',
-				loading: false,
-				tabs: [{
-					label: '展商',
-					value: 'exhibitor'
-				}, {
-					label: '展品',
-					value: 'exhibit'
-				}, {
-					label: '同期活动',
-					value: 'activity'
-				}],
-				favoritesList: [],
-			}
-		},
-		created() {
-			this.checkAuth('/pages/user/favorites')
-			this.loadFontFace('Poppins')
-			this.getExhibitorCollectInfo()
-		},
-		onShow() {
-		}, 
-		methods: {
-			tabChange(e) {
-				this.tabActive = e.detail.value
-				if (this.tabActive === 'exhibitor') {
-					this.getExhibitorCollectInfo()
-				} else if(this.tabActive === 'exhibit'){
-					this.getExhibitCollectInfo()
-				} else {
-					this.getActivityCollectInfo()
-				}
-			},
-			getExhibitorCollectInfo() {
-				this.loading = true
-				getExhibitorCollectList().then(res => {
-					this.favoritesList = res.data.data
-					this.loading = false
-				})
-			},
-			getExhibitCollectInfo() {
-				this.loading = true
-				getExhibitCollectList().then(res => {
-					this.favoritesList = res.data.data
-					this.loading = false
-				})
-			},
-			getActivityCollectInfo() {
-				this.loading = true
-				getActivityCollectList().then(res => {
-					this.favoritesList = res.data.data
-					this.loading = false
-				})
-			}
-		}
-	}
+import NavBar from '@/components/layout/nav-bar'
+import UTabs from '@/components/common/u-tabs'
+import UScrollView from '@/components/common/u-scroll-view'
+import ExhibitItem from '@/pages/exhibitor/components/exhibit-item.vue'
+import ExhibitorItem from '@/pages/exhibitor/components/exhibitor-item.vue'
+import ActivityItem from '@/pages/activity/components/activity-item.vue'
+import {
+  getExhibitorCollectList,
+  getExhibitCollectList,
+  getActivityCollectList
+} from '@/api/user'
+import PageLayout from "@/components/layout/page-layout";
+
+export default {
+  options: {
+    styleIsolation: 'shared'
+  },
+  components: {
+    PageLayout,
+    NavBar,
+    UTabs,
+    UScrollView,
+    ExhibitItem,
+    ExhibitorItem,
+    ActivityItem
+  },
+  computed: {},
+  data() {
+    return {
+      tabActive: 'exhibitor',
+      loading: false,
+      tabs: [{
+        label: '展商',
+        value: 'exhibitor'
+      }, {
+        label: '展品',
+        value: 'exhibit'
+      }, {
+        label: '同期活动',
+        value: 'activity'
+      }],
+      favoritesList: [],
+    }
+  },
+  created() {
+    this.checkAuth('/pages/user/favorites')
+    this.loadFontFace('Poppins')
+    this.getExhibitorCollectInfo()
+  },
+  onShow() {
+  },
+  methods: {
+    tabChange(e) {
+      this.tabActive = e.detail.value
+      if (this.tabActive === 'exhibitor') {
+        this.getExhibitorCollectInfo()
+      } else if (this.tabActive === 'exhibit') {
+        this.getExhibitCollectInfo()
+      } else {
+        this.getActivityCollectInfo()
+      }
+    },
+    getExhibitorCollectInfo() {
+      this.loading = true
+      getExhibitorCollectList().then(res => {
+        this.favoritesList = res.data.data
+        this.loading = false
+      })
+    },
+    getExhibitCollectInfo() {
+      this.loading = true
+      getExhibitCollectList().then(res => {
+        this.favoritesList = res.data.data
+        this.loading = false
+      })
+    },
+    getActivityCollectInfo() {
+      this.loading = true
+      getActivityCollectList().then(res => {
+        this.favoritesList = res.data.data
+        this.loading = false
+      })
+    }
+  }
+}
 </script>
 
 <style lang="scss">
-	@import "@/static/style/pages/user-like.scss";
-</style>
+@import "@/static/style/pages/user-like.scss";
+</style>

+ 10 - 16
pages/user/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="user-index">
+	<page-layout class="user-index">
 		<nav-bar title="个人中心" @init="onInitNavbar"></nav-bar>
 		<u-scroll-view :tabbar-conflict="true">
 			<view class="main-container">
@@ -46,23 +46,22 @@
 				</view>
 			</view>
 		</u-scroll-view>
-	</view>
-</template>
+	</page-layout></template>
 
 <script>
 	import NavBar from '@/components/layout/nav-bar'
 	import UScrollView from '@/components/common/u-scroll-view'
 	import VanCell from '@/wxcomponents/vant/cell/index'
 	import VanCellGroup from '@/wxcomponents/vant/cell-group/index'
+	import PageLayout from "@/components/layout/page-layout";
 	import {
-		getAdInfo
-	} from '@/api'
-
-	export default {
+			getAdInfo
+		} from '@/api'	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      		PageLayout,
 			NavBar,
 			UScrollView,
 			VanCell,
@@ -105,10 +104,8 @@
 			}
 		},
 		created() {
-			this.getAdData()
-		},
-		onShow() {},
-		methods: {
+			this.getAdData()},
+		}, 		methods: {
 			onClickSetting() {
 				this.navigateTo('/pages/user/setting')
 			},
@@ -130,8 +127,7 @@
 </script>
 
 <style lang="scss">
-	.user-index {
-		.user-info {
+		.user-info{
 			display: flex;
 			align-items: center;
 
@@ -194,7 +190,6 @@
 
 		.user-list-item {
 			margin-top: 23rpx;
-
 			.van-cell {
 				--cell-horizontal-padding: 58rpx;
 			}
@@ -204,5 +199,4 @@
 			height: 180rpx;
 			margin-top: 23rpx;
 		}
-	}
-</style>
+	}</style>

+ 27 - 25
pages/user/info-edit.vue

@@ -1,29 +1,29 @@
 <template>
-	<view class="user-info-edit">
-		<nav-bar title="个人信息" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<form @submit="onSubmit">
-				<van-cell-group>
-					<van-cell title="头像" class="user-avatar-cell van-cell--clickable">
-						<view class="right-icon" slot="right-icon">
-							<button class="btn-choose" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"></button>
-							<view class="user-avator">
-								<image v-if="avatar" :src="avatar" mode="aspectFill" />
-								<image v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" mode="aspectFill" />
-							</view>
-							<van-button type="primary" plain>点击修改</van-button>
-						</view>
-					</van-cell>
-				  <van-field required type="nickname" name="nickname" :value="nick_name" placeholder="请输入呢称" :border="false" label="呢称" clearable @change="(e) => onFieldChange('nick_name', e)" />
-				  <van-field :value="company_name" placeholder="请输入公司" :border="false" label="公司" clearable  @change="(e) => onFieldChange('company_name', e)" />
-				  <van-field :value="title" placeholder="请输入职业" :border="false" label="职业" clearable @change="(e) => onFieldChange('title', e)" />
-				</van-cell-group>
-				<view class="user-info-submit">
-					<van-button type="primary" form-type="submit" :loading="saveLoading" size="large">保存</van-button>
-				</view>
-			</form>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-info-edit">
+    <nav-bar title="个人信息" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <form @submit="onSubmit">
+        <van-cell-group>
+          <van-cell title="头像" class="user-avatar-cell van-cell--clickable">
+            <view class="right-icon" slot="right-icon">
+              <button class="btn-choose" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"></button>
+              <view class="user-avator">
+                <image v-if="avatar" :src="avatar" mode="aspectFill" />
+                <image v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" mode="aspectFill" />
+              </view>
+              <van-button type="primary" plain>点击修改</van-button>
+            </view>
+          </van-cell>
+          <van-field required type="nickname" name="nickname" :value="nick_name" placeholder="请输入呢称" :border="false" label="呢称" clearable @change="(e) => onFieldChange('nick_name', e)" />
+          <van-field :value="company_name" placeholder="请输入公司" :border="false" label="公司" clearable  @change="(e) => onFieldChange('company_name', e)" />
+          <van-field :value="title" placeholder="请输入职业" :border="false" label="职业" clearable @change="(e) => onFieldChange('title', e)" />
+        </van-cell-group>
+        <view class="user-info-submit">
+          <van-button type="primary" form-type="submit" :loading="saveLoading" size="large">保存</van-button>
+        </view>
+      </form>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
@@ -33,12 +33,14 @@
 	import VanCell from '@/wxcomponents/vant/cell/index'
 	import VanField from '@/wxcomponents/vant/field/index'
 	import { updateInfo, uploadFile } from '@/api/user'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			VanCellGroup,

+ 31 - 29
pages/user/info.vue

@@ -1,30 +1,30 @@
 <template>
-	<view class="user-info">
-		<nav-bar title="个人信息" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<van-cell-group>
-				<van-cell title="头像" class="van-cell--clickable" @click="navigateTo('/pages/user/info-edit')">
-					<view class="right-icon" slot="right-icon">
-						<view class="user-avator">
-							<image v-if="user.avatar" :src="user.avatar" mode="aspectFill" />
-							<image v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" mode="aspectFill" />
-						</view>
-						<van-icon
-						  name="arrow"
-						  class="van-cell__right-icon-wrap right-icon-class"
-						  custom-class="van-cell__right-icon"
-						/>
-					</view>
-				</van-cell>	
-				<van-cell title="呢称" is-link :value="user.nick_name || '微信呢称'" @click="navigateTo('/pages/user/info-edit')">
-				</van-cell>
-				<van-cell title="公司" is-link :value="user.company_name || '点击设置'" @click="navigateTo('/pages/user/info-edit')">
-				</van-cell>
-				<van-cell title="职业" is-link :value="user.title || '点击设置'" @click="navigateTo('/pages/user/info-edit')">
-				</van-cell>
-			</van-cell-group>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-info">
+    <nav-bar title="个人信息" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <van-cell-group>
+        <van-cell title="头像" class="van-cell--clickable" @click="navigateTo('/pages/user/info-edit')">
+          <view class="right-icon" slot="right-icon">
+            <view class="user-avator">
+              <image v-if="user.avatar" :src="user.avatar" mode="aspectFill" />
+              <image v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" mode="aspectFill" />
+            </view>
+            <van-icon
+                name="arrow"
+                class="van-cell__right-icon-wrap right-icon-class"
+                custom-class="van-cell__right-icon"
+            />
+          </view>
+        </van-cell>
+        <van-cell title="呢称" is-link :value="user.nick_name || '微信呢称'" @click="navigateTo('/pages/user/info-edit')">
+        </van-cell>
+        <van-cell title="公司" is-link :value="user.company_name || '点击设置'" @click="navigateTo('/pages/user/info-edit')">
+        </van-cell>
+        <van-cell title="职业" is-link :value="user.title || '点击设置'" @click="navigateTo('/pages/user/info-edit')">
+        </van-cell>
+      </van-cell-group>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
@@ -34,12 +34,14 @@
 	import VanCell from '@/wxcomponents/vant/cell/index'
 	import VanActionSheet from '@/wxcomponents/vant/action-sheet/index'
 	import { updateInfo } from '../../api/user'
-	
+  import PageLayout from "@/components/layout/page-layout";
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			VanCell,
@@ -58,7 +60,7 @@
 			this.checkAuth('/pages/user/info')
 		},
 		onShow() {
-		}, 
+		},
 		methods: {
 			onChooseAvatar(e) {
 				this.navigateTo('/pages/user/info-edit?avatar=' + e.detail.avatarUrl)
@@ -86,4 +88,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 25 - 23
pages/user/like.vue

@@ -1,26 +1,26 @@
 <template>
-	<view class="user-like" v-loading="loading">
-		<nav-bar title="我的点赞" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<view class="user-like-tabs-wrapper">
-				<view class="user-like-tabs">
-					<u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange" />
-				</view>
-			</view>
-			<view class="main-container">
-				<view class="user-like-list">
-					<template v-for="(item, index) in likeList">
-						<template v-if="tabActive === 'exhibitor'">
-							<exhibitor-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-						<template v-else>
-							<exhibit-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-					</template>
-				</view>
-			</view>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-like">
+    <nav-bar title="我的点赞" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <view class="user-like-tabs-wrapper">
+        <view class="user-like-tabs">
+          <u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange" />
+        </view>
+      </view>
+      <view class="main-container">
+        <view class="user-like-list">
+          <template v-for="(item, index) in likeList">
+            <template v-if="tabActive === 'exhibitor'">
+              <exhibitor-item :item="item" :footer-hidden="true" :key="index" />
+            </template>
+            <template v-else>
+              <exhibit-item :item="item" :footer-hidden="true" :key="index" />
+            </template>
+          </template>
+        </view>
+      </view>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
@@ -33,12 +33,14 @@
 		getExhibitorLikeList,
 		getExhibitLikeList
 	} from '@/api/user'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UTabs,
 			UScrollView,
@@ -95,4 +97,4 @@
 
 <style lang="scss">
 	@import "@/static/style/pages/user-like.scss";
-</style>
+</style>

+ 83 - 74
pages/user/login.vue

@@ -1,78 +1,78 @@
 <template>
-	<view class="user-login">
-		<nav-bar :transparent="true" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<view class="main-container">
-				<view class="user-login-box">
-					<view class="user-login-logo">
-						<image src="/static/img/logo.jpg" mode="aspectFill" />
-					</view>
-					<view class="user-login-button">
-						<van-button type="primary" size="large" :open-type="protocolChecked?'getPhoneNumber': ''" @getphonenumber="onPhoneLogin" @click="onPhoneLoginClick">手机号快捷登录</van-button>
-						<van-button type="default" size="large" @click="onPhoneLoginOther">其它手机号登录</van-button>
-					</view>
-					<view class="user-login-protocol" :class="{ 'protocol-shake': protocolShake }">
-						<van-checkbox :value="protocolChecked" shape="square" @change="onCheckChange">
-							<view class="user-login-protocol-text">
-								<text>我已仔细阅读主办方的</text>
-								<text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《隐私政策》</text>
-								<text>和</text>
-								<text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《法律条款》</text>
-								<text>的全部内容并同意尊守</text>
-							</view>
-						</van-checkbox>
-					</view>
-				</view>
-			</view>
-			<van-overlay :show="showPhoneLogin" @click="onClickPhoneLoginOverlay">
-			  <view class="user-phone-login-wrapper">
-					<view class="user-phone-login" @click.stop>
-					  <view>获取手机号</view>
-						<view class="input-phone-number">
-							 <input v-model="phoneNumber" placeholder="请输入手机号" type="number" />
-							 <view v-if="phoneNumber" class="clear" @click="onClearPhoneNumber" ><van-icon name="clear" /></view>
-						</view>
-						<view class="input-check-code">
-							 <input v-model="validCode" placeholder="请输入短信验证码" type="number" maxlength="6"/>
-							 <view v-if="validCode" class="clear" @click="onClearCheckCode" ><van-icon name="clear" /></view>
-							 <van-button type="primary" :loading="validCodeLoading" :disabled="countDown > 0" @click="onSendValidCode">
-								<template v-if="countDown === 0">
-									发送验证码
-								</template>
-								<template v-else>
-									重新发送({{ countDown }}s)
-								</template>
-							 </van-button>
-						</view>
-						<view class="user-phone-login-protocol" :class="{ 'protocol-shake': protocolShake }">
-							<van-checkbox :value="protocolChecked" shape="square" @change="onCheckChange">
-								<view class="user-login-protocol-text">
-									<text>我已仔细阅读主办方的</text>
-									<text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《隐私政策》</text>
-									<text>和</text>
-									<text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《法律条款》</text>
-									<text>的全部内容并同意尊守</text>
-								</view>
-							</van-checkbox>
-						</view>
-						<view class="submit">
-							<van-button type="primary" :loading="loginLoading" size="large" @click="onPhoneSubmit">提交</van-button>
-						</view>
-					</view>
-				</view>
-			</van-overlay>
-			<van-dialog
-				:show.sync="showGetProfile"
-				title="登录成功"
-				message="设置您的的头像和呢称?"
-				show-cancel-button
-				confirm-button-open-type="chooseAvatar"
-				@chooseavatar="onConfirmGetProfile"
-				@cancel="onCancelGetProfile"
-			>
-			</van-dialog>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-login">
+    <nav-bar :transparent="true" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <view class="main-container">
+        <view class="user-login-box">
+          <view class="user-login-logo">
+            <image src="/static/img/logo.jpg" mode="aspectFill" />
+          </view>
+          <view class="user-login-button">
+            <van-button type="primary" size="large" :open-type="protocolChecked?'getPhoneNumber': ''" @getphonenumber="onPhoneLogin" @click="onPhoneLoginClick">手机号快捷登录</van-button>
+            <van-button type="default" size="large" @click="onPhoneLoginOther">其它手机号登录</van-button>
+          </view>
+          <view class="user-login-protocol" :class="{ 'protocol-shake': protocolShake }">
+            <van-checkbox :value="protocolChecked" shape="square" @change="onCheckChange">
+              <view class="user-login-protocol-text">
+                <text>我已仔细阅读主办方的</text>
+                <text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《隐私政策》</text>
+                <text>和</text>
+                <text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《法律条款》</text>
+                <text>的全部内容并同意尊守</text>
+              </view>
+            </van-checkbox>
+          </view>
+        </view>
+      </view>
+      <van-overlay :show="showPhoneLogin" @click="onClickPhoneLoginOverlay">
+        <view class="user-phone-login-wrapper">
+          <view class="user-phone-login" @click.stop>
+            <view>获取手机号</view>
+            <view class="input-phone-number">
+              <input v-model="phoneNumber" placeholder="请输入手机号" type="number" />
+              <view v-if="phoneNumber" class="clear" @click="onClearPhoneNumber" ><van-icon name="clear" /></view>
+            </view>
+            <view class="input-check-code">
+              <input v-model="validCode" placeholder="请输入短信验证码" type="number" maxlength="6"/>
+              <view v-if="validCode" class="clear" @click="onClearCheckCode" ><van-icon name="clear" /></view>
+              <van-button type="primary" :loading="validCodeLoading" :disabled="countDown > 0" @click="onSendValidCode">
+                <template v-if="countDown === 0">
+                  发送验证码
+                </template>
+                <template v-else>
+                  重新发送({{ countDown }}s)
+                </template>
+              </van-button>
+            </view>
+            <view class="user-phone-login-protocol" :class="{ 'protocol-shake': protocolShake }">
+              <van-checkbox :value="protocolChecked" shape="square" @change="onCheckChange">
+                <view class="user-login-protocol-text">
+                  <text>我已仔细阅读主办方的</text>
+                  <text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《隐私政策》</text>
+                  <text>和</text>
+                  <text class="link-text" @click="navigateTo('/pages/disclaimer/privacy')">《法律条款》</text>
+                  <text>的全部内容并同意尊守</text>
+                </view>
+              </van-checkbox>
+            </view>
+            <view class="submit">
+              <van-button type="primary" :loading="loginLoading" size="large" @click="onPhoneSubmit">提交</van-button>
+            </view>
+          </view>
+        </view>
+      </van-overlay>
+      <van-dialog
+          :show.sync="showGetProfile"
+          title="登录成功"
+          message="设置您的的头像和呢称?"
+          show-cancel-button
+          confirm-button-open-type="chooseAvatar"
+          @chooseavatar="onConfirmGetProfile"
+          @cancel="onCancelGetProfile"
+      >
+      </van-dialog>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
@@ -82,12 +82,14 @@
 	import VanCheckbox from '@/wxcomponents/vant/checkbox/index'
 	import VanOverlay from '@/wxcomponents/vant/overlay/index'
 	import VanDialog from '@/wxcomponents/vant/dialog/index'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			VanCheckbox,
 			VanOverlay,
@@ -264,6 +266,13 @@
 
 <style lang="scss">
 .user-login{
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  &>u-scroll-view {
+    flex:1;
+    min-height: 1px;
+  }
 	.main-container{
 		@include display-flex-center;
 		flex-direction: column;

+ 14 - 12
pages/user/setting.vue

@@ -1,13 +1,13 @@
 <template>
-	<view class="user-setting">
-		<nav-bar title="设置" @init="onInitNavbar"></nav-bar>
-		<van-cell-group>
-			<van-cell title="个人信息" is-link @click="navigateTo('/pages/user/info')">
-			</van-cell>
-			<van-cell class="user-logout" title="退出登录" is-link @click="onLogout">
-			</van-cell>
-		</van-cell-group>
-	</view>
+  <page-layout class="user-setting">
+    <nav-bar title="设置" @init="onInitNavbar"></nav-bar>
+    <van-cell-group>
+      <van-cell title="个人信息" is-link @click="navigateTo('/pages/user/info')">
+      </van-cell>
+      <van-cell class="user-logout" title="退出登录" is-link @click="onLogout">
+      </van-cell>
+    </van-cell-group>
+  </page-layout>
 </template>
 
 <script>
@@ -15,12 +15,14 @@
 	import UScrollView from '@/components/common/u-scroll-view'
 	import VanCellGroup from '@/wxcomponents/vant/cell-group/index'
 	import VanCell from '@/wxcomponents/vant/cell/index'
-	
+  import PageLayout from "@/components/layout/page-layout";
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			VanCellGroup,
@@ -34,7 +36,7 @@
 		created() {
 			this.checkAuth('/pages/user/setting')
 		},
-		onShow() {}, 
+		onShow() {},
 		methods: {
 			onLogout() {
 				// this.$store.dispatch('logout').then(() => {
@@ -61,4 +63,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 27 - 25
pages/user/vote.vue

@@ -1,26 +1,26 @@
 <template>
-	<view class="user-vote user-like">
-		<nav-bar title="我的投票" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
-			<view class="user-vote-tabs-wrapper user-like-tabs-wrapper">
-				<view class="user-vote-tabs user-like-tabs">
-					<u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange" />
-				</view>
-			</view>	
-			<view class="main-container">
-				<view class="user-vote-list user-like-list">
-					<template v-for="(item, index) in favoritesList">
-						<template v-if="tabActive === 'exhibitor'">
-							<exhibitor-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-						<template v-else-if="tabActive === 'exhibit'">
-							<exhibit-item :item="item" :footer-hidden="true" :key="index" />
-						</template>
-					</template>
-				</view>
-			</view>
-		</u-scroll-view>
-	</view>
+  <page-layout class="user-vote user-like">
+    <nav-bar title="我的投票" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view>
+      <view class="user-vote-tabs-wrapper user-like-tabs-wrapper">
+        <view class="user-vote-tabs user-like-tabs">
+          <u-tabs :active.sync="tabActive" :tabs="tabs" @change="tabChange" />
+        </view>
+      </view>
+      <view class="main-container">
+        <view class="user-vote-list user-like-list">
+          <template v-for="(item, index) in favoritesList">
+            <template v-if="tabActive === 'exhibitor'">
+              <exhibitor-item :item="item" :footer-hidden="true" :key="index" />
+            </template>
+            <template v-else-if="tabActive === 'exhibit'">
+              <exhibit-item :item="item" :footer-hidden="true" :key="index" />
+            </template>
+          </template>
+        </view>
+      </view>
+    </u-scroll-view>
+  </page-layout>
 </template>
 
 <script>
@@ -33,12 +33,14 @@
 		getExhibitorPollList,
 		getExhibitPollList
 	} from '@/api/user'
-	
+  import PageLayout from "@/components/layout/page-layout";
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
 		},
 		components: {
+      PageLayout,
 			NavBar,
 			UTabs,
 			ExhibitItem,
@@ -65,7 +67,7 @@
 			this.getExhibitorPollInfo()
 		},
 		onShow() {
-		}, 
+		},
 		methods: {
 			tabChange(e) {
 				this.tabActive = e.detail.value
@@ -97,4 +99,4 @@
 
 <style lang="scss">
 	@import "@/static/style/pages/user-like.scss";
-</style>
+</style>

+ 26 - 24
pages/video/index.vue

@@ -1,27 +1,27 @@
 <template>
-	<view class="video-container">
-		<nav-bar title="精彩视频" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view :tabbar-conflict="true">
-			<view class="main-container">
-				<view class="video-list">
-					<view class="video-item" v-for="(item, index) in videoList" :key="index">
-						<image :mode="imageMode" :src="item.cover_url" class="cover-img" />
-						<view class="video-play" @tap="videoPlay(item)">
-							<view class="iconfont icon-playcircle"></view>
-						</view>
-					</view>
-				</view>
-				<van-overlay :show="showOverlay" @tap="onClickHideOverlay">
-					<view class="overlay-wrapper">
-						<video v-if="videoUrl" :src="videoUrl" controls autoplay loop @tap.stop></video>
-					</view>
-				</van-overlay>
-			</view>
-		</u-scroll-view>
-		<contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
-		<float-button @custom-event="updateContactStatus()"></float-button>
-		<van-dialog id="van-dialog" />
-	</view>
+  <page-layout class="video-container">
+    <nav-bar title="精彩视频" @init="onInitNavbar"></nav-bar>
+    <u-scroll-view :tabbar-conflict="true">
+      <view class="main-container">
+        <view class="video-list">
+          <view class="video-item" v-for="(item, index) in videoList" :key="index">
+            <image :mode="imageMode" :src="item.cover_url" class="cover-img" />
+            <view class="video-play" @tap="videoPlay(item)">
+              <view class="iconfont icon-playcircle"></view>
+            </view>
+          </view>
+        </view>
+        <van-overlay :show="showOverlay" @tap="onClickHideOverlay">
+          <view class="overlay-wrapper">
+            <video v-if="videoUrl" :src="videoUrl" controls autoplay loop @tap.stop></video>
+          </view>
+        </van-overlay>
+      </view>
+    </u-scroll-view>
+    <contact-us :show.sync="showContactUs" :qrcode_url="q_url" />
+    <float-button @custom-event="updateContactStatus()"></float-button>
+    <van-dialog id="van-dialog" />
+  </page-layout>
 </template>
 
 <script>
@@ -33,9 +33,11 @@
 	import {
 		getDashboardInfo
 	} from '@/api'
+  import PageLayout from "@/components/layout/page-layout";
 
 	export default {
 		components: {
+      PageLayout,
 			NavBar,
 			UScrollView,
 			VanOverlay,
@@ -135,4 +137,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 41 - 28
static/style/app.scss

@@ -8,49 +8,62 @@
 .tabbar-icon {
   font-family: "iconfont";
 }
+
 .tabbar-icon-home::before {
   content: "\e67e";
 }
-.tabbar-icon-exhibitor::before{
-	content: "\e682";
+
+.tabbar-icon-exhibitor::before {
+  content: "\e682";
 }
-.tabbar-icon-activity::before{
-	content: "\e681";
+
+.tabbar-icon-activity::before {
+  content: "\e681";
 }
-.tabbar-icon-user::before{
-	content: "\e68c";
+
+.tabbar-icon-user::before {
+  content: "\e68c";
 }
-.tabbar-icon-registration:before{
-	content: "\e68d";
+
+.tabbar-icon-registration:before {
+  content: "\e68d";
 }
 
-page{
-	background-color: $pageBackgroundColor;
+page {
+  height: 100%;
+  background-color: $pageBackgroundColor;
 }
-image{
-	width: 100%;
-	height: 100%;
+
+image {
+  width: 100%;
+  height: 100%;
 }
-view,input{
+
+view, input {
   box-sizing: border-box;
-	font-family: Arial, Arial;
+  font-family: Arial, Arial;
 }
 .main-container {
-	padding: 30rpx 30rpx 100rpx 30rpx;
-	background-color: $pageBackgroundColor;
- }
-.link-text{
-	color: $textActionColor;
+  padding: 30rpx 30rpx 100rpx 30rpx;
+  background-color: $pageBackgroundColor;
 }
-.hover{
-	background-color: $hoverBackgroundColor!important;
+
+.link-text {
+  color: $textActionColor;
+}
+
+.hover {
+  background-color: $hoverBackgroundColor !important;
 }
-.icon-Star-Filled.active,.icon-favourites-filled-star-symbol{
-	color: $textActionColor;
+
+.icon-Star-Filled.active, .icon-favourites-filled-star-symbol {
+  color: $textActionColor;
 }
-.icon-aixin.active{
-	color: red;
+
+.icon-aixin.active {
+  color: red;
 }
-.icon-Ticket1.active{
-	color: #405491;
+
+.icon-Ticket1.active {
+  color: #405491;
 }