| <template> | |
|   <view class="page"> | |
| 		<navbar leftClick @leftClick="$utils.navigateBack" /> | |
| 
 | |
|     <view class="content"> | |
|       <image class="avatar" :src="detail.headImage"></image> | |
|       <text class="nick-name">{{ detail.headTitle || '' }}</text> | |
| 
 | |
|       <template v-if="isLocked"> | |
|         <button class="btn" type="success" @click="onAdd">添加</button> | |
|       </template> | |
|       <template v-else> | |
|         <image class="qr" :src="detail.wxCodeImage" :show-menu-by-longpress="true"></image> | |
|       </template> | |
|     </view> | |
| 
 | |
|     <popupUnlock ref="popupUnlock" src="../static/sharing/unlock-user.png"></popupUnlock> | |
| 
 | |
|   </view> | |
| </template> | |
| 
 | |
| <script> | |
| 	import { mapState } from 'vuex' | |
|   import popupUnlock from '../components/popupUnlock.vue' | |
| 
 | |
| 	export default { | |
|     components: { | |
|       popupUnlock, | |
|     }, | |
| 		data() { | |
| 			return { | |
|         id: null, | |
|         detail: { | |
|           id: null, | |
|           userId: null, | |
|           headImage: null, | |
|           headTitle: null, | |
|           indexImage: null, | |
|           num: 0, | |
|           wxCodeImage: null, | |
|           textDetails: null, | |
|         }, | |
|         isLocked: true, | |
|       } | |
|     }, | |
| 		computed: { | |
| 			...mapState(['userInfo']), | |
| 		}, | |
|     onShow() { | |
|       if (this.id && uni.getStorageSync('token')) { | |
|         this.fetchDetails() | |
|       } | |
|     }, | |
|     onLoad(option) { | |
|       const { id, state, shareId } = option | |
| 
 | |
| 			if (shareId) { | |
| 				uni.setStorageSync('shareId', shareId) | |
| 			} | |
|        | |
| 			if (state) { | |
| 				uni.setStorageSync('state', state) | |
| 			} | |
|        | |
| 			if (id) { | |
| 				uni.setStorageSync('id', id) | |
| 			} | |
| 
 | |
|       this.id = id | |
| 
 | |
|       if (uni.getStorageSync('token')) { | |
|         this.fetchDetails() | |
|       } else { | |
|         uni.navigateTo({ | |
|           url: '/pages_order/auth/wxLogin' | |
|         }) | |
|       } | |
|     }, | |
|     onShareAppMessage(res) { | |
|       const { | |
|         headTitle, | |
|         indexImage, | |
|       } = this.detail | |
| 
 | |
|       let o = { | |
|         title : headTitle, | |
|         imageUrl: indexImage, | |
|         query: `id=${this.id}&state=0&shareId=${this.userInfo.id}`, | |
|       } | |
| 
 | |
|       this.refreshLockStatus() | |
| 
 | |
|       return o | |
|     }, | |
|     methods: { | |
|       async fetchDetails() { | |
|         try { | |
|           this.detail = await this.$fetch('getShareInfo', { id: this.id }) | |
|         } catch (err) { | |
|            | |
|         } | |
|       }, | |
|       async fetchCheckShare() { | |
|         try { | |
|           return await this.$fetch('checkShare', { id: this.id }) | |
|         } catch (err) { | |
|           return {} | |
|         } | |
|       }, | |
|       async refreshLockStatus() { | |
|         const result = await this.fetchCheckShare() | |
|         const { title, open } = result | |
| 
 | |
|         console.log('--open', open) | |
| 
 | |
|         this.$refs.popupUnlock.close(); | |
| 
 | |
|         if (open) { | |
|           this.isLocked = false | |
|           return | |
|         } | |
| 
 | |
|         title && uni.showToast({ | |
|           title, | |
|           icon: 'none', | |
|           duration: 3000 | |
|         }) | |
|       }, | |
|       openPopup() { | |
|         this.$refs.popupUnlock.open(); | |
|       }, | |
|       async onAdd() { | |
|         const result = await this.fetchCheckShare() | |
|         const { open, need_num, num } = result | |
| 
 | |
|         console.log('--open', open) | |
| 
 | |
|         if (open) { // 转发已达标 | |
|           this.isLocked = false | |
|           return | |
|         } | |
| 
 | |
|         uni.showToast({ | |
|           title: `还需转发${need_num - num}次`, | |
|           icon: 'none', | |
|         }) | |
| 
 | |
|         this.openPopup() | |
|       } | |
|     }, | |
|   } | |
| </script> | |
| 
 | |
| <style scoped lang="scss"> | |
| .page { | |
|   position: relative; | |
|   height: 100vh; | |
| } | |
| 
 | |
| .content { | |
|   display: flex; | |
|   flex-direction: column; | |
|   align-items: center; | |
| } | |
| 
 | |
| .avatar { | |
|   width: 180rpx; | |
|   height: 180rpx; | |
|   margin-top: 127rpx; | |
| } | |
| 
 | |
| .nick-name { | |
|   color: #1B1B1B; | |
|   font-size: 32rpx; | |
|   margin-top: 30rpx; | |
| } | |
| 
 | |
| .btn, .qr { | |
|   position: absolute; | |
| } | |
| 
 | |
| .btn { | |
|   width: calc(100% - 60rpx*2); | |
|   height: auto; | |
|   left: 60rpx; | |
|   bottom: 292rpx; | |
| 
 | |
|   background-color: #07C160; | |
|   border: none; | |
|   color: #FFFFFF; | |
|   font-size: 28rpx; | |
|   line-height: 1; | |
|   border-radius: 45rpx; | |
|   padding: 25rpx 0; | |
|   box-sizing: border-box; | |
| } | |
| 
 | |
| .qr { | |
|   width: 350rpx; | |
|   height: 350rpx; | |
|   bottom: 269rpx; | |
| } | |
| </style> |