mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	使用 uview 重构实际登陆
This commit is contained in:
		@@ -0,0 +1,19 @@
 | 
			
		||||
export default {
 | 
			
		||||
    props: {
 | 
			
		||||
        // 页面文字提示
 | 
			
		||||
        tips: {
 | 
			
		||||
            type: String,
 | 
			
		||||
            default: uni.$u.props.noNetwork.tips
 | 
			
		||||
        },
 | 
			
		||||
        // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖
 | 
			
		||||
        zIndex: {
 | 
			
		||||
            type: [String, Number],
 | 
			
		||||
            default: uni.$u.props.noNetwork.zIndex
 | 
			
		||||
        },
 | 
			
		||||
        // image 没有网络的图片提示
 | 
			
		||||
        image: {
 | 
			
		||||
            type: String,
 | 
			
		||||
            default: uni.$u.props.noNetwork.image
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,219 @@
 | 
			
		||||
<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>
 | 
			
		||||
		Reference in New Issue
	
	Block a user