You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

361 lines
7.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="container">
<view class="wifi-data">
<view class="wifi-icon">
<u-icon color="#ffffff" name="wifi" size="30"></u-icon>
</view>
<view class="wifi-datas" color="#2979ff">
<view class="wifi-name">{{wifiForm.wifiName}}</view>
<view class="wifi-hot">
<text class="hot-text">快速连接</text>
<text class="hot-icon">.</text>
<text class="hot-text">无需密码</text>
<text class="hot-icon">.</text>
<text class="hot-text">保护隐私</text>
</view>
</view>
</view>
<view class="wifi-success" v-if="!showBtn">
WI-FI
</view>
<u-button type="primary" text="一键连接WI-FI" @click="handleLinkwifi()" v-if="showBtn"></u-button>
<u-popup :show="show" mode="bottom">
<view class="video-container">
<view class="video-btns" :style="{paddingTop:statusBarHeight+'rpx'}">
<view class="second" v-show="countdown > 0">{{countdown}} 后连接WI-FI</view>
<view class="second" v-show="countdown == 0">已获得奖励</view>
<view class="close" @click="handleClose()">关闭</view>
</view>
<video id="video-box" v-if="show" :src="baseUrl + posterForm.videoPath" :autoplay="true"
:controls="false" @timeupdate="changeTimeupdate" @play="play"></video>
</view>
</u-popup>
</view>
</template>
<script>
import {
getShanghu,
getPoster,
addNetHistory,
addPosterHistory,
getNet
} from '@/api/index.js'
export default {
data() {
return {
baseUrl: getApp().globalData.config.baseUrl,
showBtn: true,
show: false,
urlPath: '',
statusBarHeight: 0,
countdown: 0,
videoCurrentTime: 0, //视频播放时间
time: null,
wifiForm: {},
posterForm: {},
platform: null,
}
},
onLoad(option) {
// #ifdef MP-WEIXIN
let sys = uni.$u.sys()
this.statusBarHeight = sys.statusBarHeight + 44
// #endif
if (option.posterId) {
this.getNetinfo(option.posterId)
} else {
uni.showToast({
title: '获取网络信息失败!',
icon: 'error'
})
}
// this.getNetinfo(11)
},
methods: {
//根据微信扫小程序码进入首页拿到网络id查询网络详情
getNetinfo(netId) {
getNet(netId).then(response => {
this.wifiForm = response.data
})
},
//一键连接(提示用户连接WIFI需要看广告)
handleLinkwifi() {
let that = this
uni.showModal({
title: '温馨提示',
content: '连接WIFI需要观看一段视频广告是否确认',
success: (res) => {
if (res.confirm) {
// 根据当前网络的商户Id查询商户信息然后根据商户信息中的广告id查到商户的广告
getShanghu(that.wifiForm.shanghuId).then(shanghu => {
getPoster(shanghu.data.posterId).then(poster => {
that.posterForm = poster.data
that.countdown = that.posterForm.duration
that.show = true
})
})
}
}
})
},
//记录历史广告
setPosterHistory() {
let data = {
posterId: this.posterForm.id,
posterName: this.posterForm.posterName,
startTime: this.posterForm.startTime,
endTime: this.posterForm.endTime,
videoPath: this.posterForm.videoPath,
shanghuId: this.wifiForm.shanghuId
}
addPosterHistory(data)
},
// 开始播放
play() {
this.enableTimer() //启用计时器
this.setPosterHistory()
},
//计时器
enableTimer() {
this.time = setInterval(() => {
if (this.countdown > 0) {
this.countdown--
} else {
clearInterval(this.time)
this.handleClose()
}
}, 1000)
},
//视频播放进度
changeTimeupdate(e) {
this.videoCurrentTime = e.detail.currentTime
},
//关闭弹窗
handleClose() {
this.show = false
console.log(Math.ceil(this.videoCurrentTime), this.posterForm.duration, Math.ceil(this.videoCurrentTime) >=
this
.posterForm.duration)
if (Math.ceil(this.videoCurrentTime) >= this.posterForm.duration) {
//证明已经看过视频时间
this.handleWifi()
} else {
uni.showToast({
title: '连接WI-FI失败!',
icon: 'error'
})
this.countdown = this.posterForm.duration
this.videoCurrentTime = 0
}
clearInterval(this.time)
},
//判断当前机器是否支持连接WIFI
handleWifi() {
uni.showLoading({
title: '连接中'
})
let that = this
uni.getSystemInfo({
success: function(res) {
var system = '';
that.platform = res.platform
if (res.platform == 'android') system = parseInt(res.system.substr(8));
if (res.platform == 'ios') system = parseInt(res.system.substr(4));
if (res.platform == 'android' && system < 6 || res.platform == 'ios' && system <
11.2) {
uni.showToast({
title: '手机版本不支持',
icon: 'error',
})
return
}
that.startWifi();
}
})
},
//初始化 Wi-Fi 模块
startWifi() {
var that = this
uni.startWifi({
success: function() {
//请求成功连接Wifi
that.Connected();
},
fail: function(res) {
uni.showToast({
title: '初始化WIFI失败',
icon: 'error'
})
}
})
},
linkWifi() {
addNetHistory({
netId: this.wifiForm.id,
netName: this.wifiForm.netName,
wifiName: this.wifiForm.wifiName,
wifiPass: this.wifiForm.wifiPass,
shanghuId: this.wifiForm.shanghuId
})
uni.showToast({
title: '连接成功',
icon: 'success'
})
this.showBtn = false
},
Connected() {
var that = this
uni.connectWifi({
SSID: this.wifiForm.wifiName, //wifi名
password: this.wifiForm.wifiPass, //wifi密码
success: function(res) {
if (that.platform == 'ios') {
uni.getConnectedWifi({
partialInfo: true,
success: function(reult) {
console.log('成功', reult, that.wifiForm.wifiName)
if (reult.wifi.SSID == that.wifiForm.wifiName) {
that.linkWifi()
} else {
uni.showToast({
title: '连接失败!',
icon: "error"
})
}
},
fail: function(error) {
uni.showToast({
title: '连接失败!',
icon: "error"
})
console.log('失败', error)
}
})
} else {
that.linkWifi()
}
},
fail: function(err) {
uni.showToast({
title: '连接失败',
icon: 'error'
})
},
})
},
}
}
</script>
<style lang="scss">
page {
height: 100%;
}
.container {
height: 100%;
background-color: #F6F7F8;
box-sizing: border-box;
padding: 25rpx;
}
.wifi-data {
border-radius: 16rpx;
background-color: #ffffff;
box-sizing: border-box;
padding: 20rpx;
display: flex;
align-items: center;
margin-bottom: 20rpx;
.wifi-icon {
height: 100rpx;
width: 100rpx;
border-radius: 50%;
background: $u-primary;
display: flex;
align-items: center;
justify-content: center;
}
.wifi-datas {
box-sizing: border-box;
padding-left: 20rpx;
.wifi-name {
font-size: 28rpx;
font-weight: bold;
color: #333;
margin-bottom: 6px;
}
.wifi-hot {
color: #9DA2AB;
.hot-text {
font-size: 24rpx;
}
.hot-icon {
margin: 0 10rpx;
}
}
}
}
.wifi-success {
border-radius: 16rpx;
background-color: #ffffff;
box-sizing: border-box;
padding: 40rpx 20rpx;
color: #32B78B;
font-size: 28rpx;
text-align: center;
}
.video-container {
width: 100%;
position: relative;
#video-box {
height: 100vh;
width: 100%;
}
.video-btns {
position: absolute;
left: 0;
top: 0;
z-index: 100;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0 20rpx;
&>view {
border: 1px solid #ccc;
color: white;
font-size: 24rpx;
border-radius: 25rpx;
box-sizing: border-box;
padding: 8rpx 20rpx;
}
}
}
</style>