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.
 
 
 
 
 
 

487 lines
13 KiB

<template>
<view id="page">
<view class="Width100 Box" :style="bgUrl1">
<image class="pic" :src="$.imgSrc + '/scimg/login_bg_bottom.png'" mode="aspectFit"></image>
<view class="Content MarginAuto">
<image :src="$.imgSrc + '/scimg/jinghui.png'" mode="aspectFit" class="Block Logo"></image>
<view class="NavBox Width100 MarginT_20rpx">
<view class="logo-title">
道路交通安全隐患
</view>
<view class="logo-title">
排查助手
</view>
</view>
<!-- <view class="TypeBox MarginT_60rpx" v-if="currNav == 1">
<view class="Unit FloatL" v-for="(item,index) in typeList" @click="chooseType(item.type)">
<view class="Point FloatL" v-show="currType == item.type">
<image :src="$.imgSrc + '/scimg/choose_y1.png'" mode="aspectFit" class="Block Width100 Height100"></image>
</view>
<view class="Point Border FloatL BorderR_50 InsideB" v-show="currType != item.type"></view>
<text class="Block MarginL_20rpx FontS_32rpx FloatL">{{item.label}}</text>
<view class="ClearB"></view>
</view>
<view class="ClearB"></view>
</view> -->
<view class="InputBox" :class="currNav == 1 ? 'MarginT_40rpx' : 'MarginT_80rpx'">
<view class="Input">
<!-- <view class="Num FloatL TextLeft MarginL_60rpx">-->
<!-- <text class="InlineBlock FontS_34rpx Color_1A1F39 FontBold">+86</text>-->
<!-- </view>-->
<view class="img-box">
<image :src="$.imgSrc + '/scimg/login_user.png'" mode="aspectFit"
class="input_left_icon input_icon"></image>
</view>
<input type="text" placeholder="请输入用户名" v-model="logInData.phone"
class="Height100 Input1 FloatL FontS_32rpx" />
<view class="img-box"></view>
<view class="ClearB"></view>
</view>
<view class="Input" v-if="currNav == 1">
<input type="text" v-model="logInData.validateCode" placeholder="请输入验证码"
class="Height100 Input1 FloatL MarginL_60rpx FontS_32rpx" />
<view class="CodeBox FloatR MarginR_60rpx" @click="getCode">
<text class="Block FontS_28rpx"
:class="isCodeDisabled ? 'Color_B4BAC9':'Color_0064FF'">{{ btnText }}</text>
</view>
<view class="ClearB"></view>
</view>
<view class="Input">
<view class="img-box">
<image :src="$.imgSrc + '/scimg/login_password.png'" mode="aspectFit"
class="input_left_icon input_icon"></image>
</view>
<input v-show="!showPassword" type="password" v-model="logInData.password" placeholder="请输入您的密码"
class="Height100 Input1 FloatL FontS_32rpx" />
<input v-show="showPassword" type="text" v-model="logInData.password" placeholder="请输入您的密码"
class="Height100 Input1 FloatL FontS_32rpx" />
<view class="img-box">
<image :src="$.imgSrc + (!showPassword ? '/scimg/login_no.png' : '/scimg/login_yes.png')"
mode="aspectFit" class="input_left_icon input_icon" @click="clickPasswordBtn"></image>
</view>
<view class="ClearB"></view>
</view>
</view>
<view class="Agree Width100 MarginT_60rpx" @click="chooseAgree">
<view class="Point FloatL" v-if="isAgree">
<image :src="$.imgSrc + '/scimg/choose_y1.png'" mode="aspectFit"
class="Block Width100 Height100"></image>
</view>
<view class="Point Border FloatL BorderR_50 InsideB" v-else></view>
<text class="Block FloatL MarginL_20rpx Color_605F72 FontS_26rpx"
style="color: #cccccc;">本人已同意</text>
<text class="Block FloatL Color_0064FF FontS_26rpx" @click.stop="checkAgree('1')"
style="color: #ffffff">《用户协议》</text>
<text class="Block FloatL Color_605F72 FontS_26rpx" style="color: #cccccc;">与</text>
<text class="Block FloatL Color_0064FF FontS_26rpx" @click.stop="checkAgree('2')"
style="color: #ffffff;">《隐私协议》</text>
<view class="ClearB"></view>
</view>
<button type="button" :disabled="isDisabled"
class="Btn Block Width100 Color_FFFFFF FontS_36rpx FontBold"
@click="confirmSub">立即{{ currNav == 1 ? '注册':'登录' }}</button>
<!-- <text @click="findPsw" class="Block MarginT_40rpx TextCenter FontS_26rpx Color_0064FF"
v-if="currNav == 2">找回密码</text> -->
</view>
</view>
</view>
</template>
<script>
import {
sha512
} from 'js-sha512';
export default {
// 组件
components: {},
data() {
return {
// 公用的js
$: this.$,
bgUrl1: '', // 登录信息背景图
bgUrl2: '', // 登录信息背景图
isAgree: false,
navList: [
// {type:1,label:'注册'},
{
type: 2,
label: '登录'
},
],
currNav: 2,
currType: 1,
isDisabled: false,
logInData: {
phone: '', //
validateCode: '', //
password: '', //
}, //
btnText: '获取验证码',
times: null,
seconds: 60,
isCodeDisabled: false,
showPassword: false
}
},
// 页面加载
onLoad(e) {
if (typeof(e.type) != 'undefined') {
this.currNav = e.type
}
const systemInfo = uni.getSystemInfoSync()
const isAgree = uni.getStorageSync('isAgree')
const appVersion = uni.getStorageSync('appVersion')
let myAppVersion
// #ifdef APP
myAppVersion = systemInfo.appWgtVersion || systemInfo.appVersion
// #endif
// #ifdef H5
myAppVersion = systemInfo.appVersion
// #endif
console.log(systemInfo, isAgree, myAppVersion)
if (appVersion === myAppVersion && isAgree) {
this.isAgree = isAgree
}
},
// 页面显示
onShow() {
// 顶部背景图
this.bgUrl1 = "background-image:url('" + this.$.imgSrc +
"/scimg/login_bg_top.png');background-repeat: no-repeat; background-position: center; background-size: cover; min-height: 100vh; min-width: 100vw;"
// #ifdef APP
this.appUpdate()
// #endif
},
// 计算属性
computed: {},
// 方法
methods: {
appUpdate() {
const systemInfo = uni.getSystemInfoSync()
const myAppVersion = systemInfo.appWgtVersion || systemInfo.appVersion
this.$request.globalRequest('/hiddenDanger/highDanger/getNewestVersion')
.then(res => {
if (res.code === 200) {
if (res.result.versionNo !== myAppVersion) {
const update_info = {
version: res.result.versionNo, //线上版本
now_url: res.result.versionUrl, //更新链接
note: res.result.remark, //更新内容
type: '2'
}
uni.navigateTo({
url: "/pages/app-update/index?updata_info=" + JSON
.stringify(
update_info),
animationType: "fade-in"
})
}
}
})
},
clickPasswordBtn() {
this.showPassword = !this.showPassword
},
checkAgree(pageKey) {
this.$.open('/pages/logIn/agree?pageKey=' + pageKey)
},
getCode() {
if (!this.$.isEmpty(this.logInData.phone)) {
this.$.toast('请输入手机号')
return
}
let datas = {
phone: this.logInData.phone,
type: 2
}
this.isCodeDisabled = true
this.$request.globalRequest('/hyjg-admin/mapi/account/sendSmsCode', datas, 'POST').then(res => {
if (res.code == 0) {
this.timeDown()
} else {
this.$.toast(res.msg)
this.isCodeDisabled = false
}
})
},
timeDown() {
this.times = setInterval(() => {
if (this.seconds > 0) {
this.seconds--
this.btnText = this.seconds + 'S'
} else {
this.seconds = 60
this.isCodeDisabled = false
this.btnText = '获取验证码'
clearInterval(this.times)
}
}, 1000)
},
// 提交
confirmSub() {
// this.$.setData('token','1')
// this.$.openTab('/pages/index/index')
// return
// this.$.open('/pages/logIn/userInfo')
let url = '/hyjg-admin/mapi/account/register'
if (!this.$.isEmpty(this.logInData.phone)) {
this.$.toast('请填写用户名')
return
}
if (!this.$.isEmpty(this.logInData.password)) {
this.$.toast('请填写密码')
return
}
if (!this.isAgree) {
this.$.toast('请勾选用户协议和隐私协议')
return
}
let datas = {
nuserid: this.logInData.phone,
cuserpwd: this.logInData.password,
}
url = '/hiddenDanger/auth/login'
this.$.showLoading('登录中...')
this.isDisabled = true
this.$request.globalRequest(url, datas, 'POST').then(res => {
if (res.code === 200) {
this.$.toast('登录成功')
this.$.setData('token', res.result.nuserid)
this.$.setData('userInfo', {
username: res.result.nuserid,
role: res.result.role
})
const systemInfo = uni.getSystemInfoSync()
let myAppVersion
// #ifdef APP
myAppVersion = systemInfo.appWgtVersion || systemInfo.appVersion
// #endif
// #ifdef H5
myAppVersion = systemInfo.appVersion
// #endif
this.$.setData('isAgree', true)
this.$.setData('appVersion', myAppVersion)
const timestamp = (new Date()).getTime()
const sessionIdStr = `${res.result.nuserid}-${timestamp}`
const sessionId = sha512(sessionIdStr)
this.$.setData('timestamp', timestamp)
this.$.setData('sessionId', sessionId)
setTimeout(() => {
this.$.hideLoading('登录中...')
this.isDisabled = false
if (res.result.role.includes('领导') || res.result.role.includes('排查人员') || res
.result.role.includes('治理人员')) {
this.$.openTab('/pages/index/index')
} else {
this.$.openTab('/pages/agricultural3W/index')
}
}, 1500)
} else {
this.$.toast(res.message)
this.isDisabled = false
}
}).catch(() => {
this.isDisabled = false
this.$.toast('连接服务器失败')
})
},
// 找回密码
findPsw() {
this.$.open('/pages/logIn/findPsw')
},
chooseAgree() {
this.isAgree = !this.isAgree
},
chooseNav(type) {
this.currNav = type
},
chooseType(type) {
this.currType = type
},
// 跳转页面
skipPage(even) {
this.$.open(even)
},
},
onReady() {},
// 页面卸载
onUnload() {
},
// 触发下拉刷新
onPullDownRefresh() {
// 延迟关闭刷新动画
setTimeout(() => {
uni.stopPullDownRefresh();
}, 1500);
},
// 页面上拉触底事件的处理函数
onReachBottom() {},
}
</script>
<style>
page {
background: #FFFFFF;
}
</style>
<style lang="scss" scoped>
.Box {
padding-top: var(--status-bar-height);
.user-check {
display: flex;
align-items: center;
margin-top: 24px;
color: #fff;
position: relative;
z-index: 999;
.user-link {
text-decoration: none;
color: rgb(0, 0, 238);
}
}
.Content {
width: calc(100% - 176rpx);
padding: 112rpx 0rpx 180rpx 0rpx;
.Logo {
width: 150rpx;
height: 150rpx;
margin: auto;
}
.NavBox {
.logo-title {
font-family: 'MFLiHei_Noncommercial-Regular';
font-size: 70rpx;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
.Unit {
margin-right: 110rpx;
.Line {
left: 50%;
transform: translateX(-50%);
bottom: -26rpx;
width: 74rpx;
height: 10rpx;
border-radius: 6rpx;
}
}
}
.TypeBox {
.Unit {
margin-right: 108rpx;
.Point {
width: 46rpx;
height: 46rpx;
}
.Border {
width: 46rpx;
height: 46rpx;
border: 4rpx solid #B3BACB;
}
}
}
.InputBox {
.Input {
height: 110rpx;
border-radius: 8rpx;
margin-bottom: 48rpx;
background-color: rgba(225, 225, 225, 0.8);
box-shadow: 0px 4px 10px 1px rgba(0, 0, 0, 0.1);
position: relative;
display: flex;
.img-box {
height: 110rpx;
width: 110rpx;
display: flex;
justify-content: center;
align-items: center;
.input_icon {
width: 54rpx;
height: 54rpx;
}
.input_left_icon {
position: absolute;
}
}
.input-placeholder {
color: rgba(0, 0, 0, 0.4) !important;
}
.CodeBox {
text {
line-height: 110rpx;
}
}
.Num {
width: 110rpx;
border-right: 4rpx solid #DADADA;
margin-top: 34rpx;
}
.Input1 {
// padding-left: 20rpx;
// width: calc(100% - 260rpx);
flex: 1;
}
.Input2 {
width: calc(100% - 120rpx);
}
}
}
.Agree {
position: relative;
z-index: 999;
color: #fff;
.Point {
width: 34rpx;
height: 34rpx;
}
.Border {
width: 34rpx;
height: 34rpx;
border: 2rpx solid #B3BACB;
}
}
.Btn {
font-family: 'SOURCEHANSANSCN-MEDIUM';
margin-top: 96rpx;
height: 108rpx;
background: linear-gradient(0deg, #0064FF 0%, #2D99FD 100%);
box-shadow: 0px 4px 10px 1px rgba(0, 0, 0, 0.1);
border-radius: 8rpx;
line-height: 108rpx;
}
}
}
.pic {
position: absolute;
bottom: 0;
width: 100%;
}
</style>