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.
219 lines
5.8 KiB
219 lines
5.8 KiB
<template> |
|
<u-overlay |
|
:show="!isConnected" |
|
@touchmove.stop.prevent="noop" |
|
:customStyle="{ |
|
backgroundColor: '#fff', |
|
display: 'flex', |
|
justifyContent: 'center', |
|
}" |
|
> |
|
<view |
|
class="u-no-network" |
|
> |
|
<u-icon |
|
:name="image" |
|
size="150" |
|
imgMode="widthFit" |
|
class="u-no-network__error-icon" |
|
></u-icon> |
|
<text class="u-no-network__tips">{{tips}}</text> |
|
<!-- 只有APP平台,才能跳转设置页,因为需要调用plus环境 --> |
|
<!-- #ifdef APP-PLUS --> |
|
<view class="u-no-network__app"> |
|
<text class="u-no-network__app__setting">请检查网络,或前往</text> |
|
<text |
|
class="u-no-network__app__to-setting" |
|
@tap="openSettings" |
|
>设置</text> |
|
</view> |
|
<!-- #endif --> |
|
<view class="u-no-network__retry"> |
|
<u-button |
|
size="mini" |
|
text="重试" |
|
type="primary" |
|
plain |
|
@click="retry" |
|
></u-button> |
|
</view> |
|
</view> |
|
</u-overlay> |
|
</template> |
|
|
|
<script> |
|
import props from './props.js'; |
|
|
|
/** |
|
* noNetwork 无网络提示 |
|
* @description 该组件无需任何配置,引入即可,内部自动处理所有功能和事件。 |
|
* @tutorial https://www.uviewui.com/components/noNetwork.html |
|
* @property {String} tips 没有网络时的提示语 (默认:'哎呀,网络信号丢失' ) |
|
* @property {String | Number} zIndex 组件的z-index值 |
|
* @property {String} image 无网络的图片提示,可用的src地址或base64图片 |
|
* @event {Function} retry 用户点击页面的"重试"按钮时触发 |
|
* @example <u-no-network></u-no-network> |
|
*/ |
|
export default { |
|
name: "u-no-network", |
|
mixins: [uni.$u.mpMixin, uni.$u.mixin,props], |
|
data() { |
|
return { |
|
isConnected: true, // 是否有网络连接 |
|
networkType: "none", // 网络类型 |
|
} |
|
}, |
|
mounted() { |
|
this.isIOS = (uni.getSystemInfoSync().platform === 'ios') |
|
uni.onNetworkStatusChange((res) => { |
|
this.isConnected = res.isConnected |
|
this.networkType = res.networkType |
|
this.emitEvent(this.networkType) |
|
}) |
|
uni.getNetworkType({ |
|
success: (res) => { |
|
this.networkType = res.networkType |
|
this.emitEvent(this.networkType) |
|
if (res.networkType == 'none') { |
|
this.isConnected = false |
|
} else { |
|
this.isConnected = true |
|
} |
|
} |
|
}) |
|
}, |
|
methods: { |
|
retry() { |
|
// 重新检查网络 |
|
uni.getNetworkType({ |
|
success: (res) => { |
|
this.networkType = res.networkType |
|
this.emitEvent(this.networkType) |
|
if (res.networkType == 'none') { |
|
uni.$u.toast('无网络连接') |
|
this.isConnected = false |
|
} else { |
|
uni.$u.toast('网络已连接') |
|
this.isConnected = true |
|
} |
|
} |
|
}) |
|
this.$emit('retry') |
|
}, |
|
// 发出事件给父组件 |
|
emitEvent(networkType) { |
|
this.$emit(networkType === 'none' ? 'disconnected' : 'connected') |
|
}, |
|
async openSettings() { |
|
if (this.networkType == "none") { |
|
this.openSystemSettings() |
|
return |
|
} |
|
}, |
|
openAppSettings() { |
|
this.gotoAppSetting() |
|
}, |
|
openSystemSettings() { |
|
// 以下方法来自5+范畴,如需深究,请自行查阅相关文档 |
|
// https://ask.dcloud.net.cn/docs/ |
|
if (this.isIOS) { |
|
this.gotoiOSSetting() |
|
} else { |
|
this.gotoAndroidSetting() |
|
} |
|
}, |
|
network() { |
|
var result = null |
|
var cellularData = plus.ios.newObject("CTCellularData") |
|
var state = cellularData.plusGetAttribute("restrictedState") |
|
if (state == 0) { |
|
result = null |
|
} else if (state == 2) { |
|
result = 1 |
|
} else if (state == 1) { |
|
result = 2 |
|
} |
|
plus.ios.deleteObject(cellularData) |
|
return result |
|
}, |
|
gotoAppSetting() { |
|
if (this.isIOS) { |
|
var UIApplication = plus.ios.import("UIApplication") |
|
var application2 = UIApplication.sharedApplication() |
|
var NSURL2 = plus.ios.import("NSURL") |
|
var setting2 = NSURL2.URLWithString("app-settings:") |
|
application2.openURL(setting2) |
|
plus.ios.deleteObject(setting2) |
|
plus.ios.deleteObject(NSURL2) |
|
plus.ios.deleteObject(application2) |
|
} else { |
|
var Intent = plus.android.importClass("android.content.Intent") |
|
var Settings = plus.android.importClass("android.provider.Settings") |
|
var Uri = plus.android.importClass("android.net.Uri") |
|
var mainActivity = plus.android.runtimeMainActivity() |
|
var intent = new Intent() |
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) |
|
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null) |
|
intent.setData(uri) |
|
mainActivity.startActivity(intent) |
|
} |
|
}, |
|
gotoiOSSetting() { |
|
var UIApplication = plus.ios.import("UIApplication") |
|
var application2 = UIApplication.sharedApplication() |
|
var NSURL2 = plus.ios.import("NSURL") |
|
var setting2 = NSURL2.URLWithString("App-prefs:root=General") |
|
application2.openURL(setting2) |
|
plus.ios.deleteObject(setting2) |
|
plus.ios.deleteObject(NSURL2) |
|
plus.ios.deleteObject(application2) |
|
}, |
|
gotoAndroidSetting() { |
|
var Intent = plus.android.importClass("android.content.Intent") |
|
var Settings = plus.android.importClass("android.provider.Settings") |
|
var mainActivity = plus.android.runtimeMainActivity() |
|
var intent = new Intent(Settings.ACTION_SETTINGS) |
|
mainActivity.startActivity(intent) |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
@import "../../libs/css/components.scss"; |
|
|
|
.u-no-network { |
|
@include flex(column); |
|
justify-content: center; |
|
align-items: center; |
|
margin-top: -100px; |
|
|
|
&__tips { |
|
color: $u-tips-color; |
|
font-size: 14px; |
|
margin-top: 15px; |
|
} |
|
|
|
&__app { |
|
@include flex(row); |
|
margin-top: 6px; |
|
|
|
&__setting { |
|
color: $u-light-color; |
|
font-size: 13px; |
|
} |
|
|
|
&__to-setting { |
|
font-size: 13px; |
|
color: $u-primary; |
|
margin-left: 3px; |
|
} |
|
} |
|
|
|
&__retry { |
|
@include flex(row); |
|
justify-content: center; |
|
margin-top: 15px; |
|
} |
|
} |
|
</style>
|
|
|