<template> <view style="background: url(../../static/bg-login.png) no-repeat;background-size:100% auto;height:100vh;background-color: #058cf5; position: fixed; width: 100%;"> <!-- <view class="bottom-img"> <image src="../../static/hg-bottom.png" mode=""></image> </view> --> <view class="login-box"> <view class="login-title"> <view class="login-logo"> <image src="../../static/image/logo.png" mode=""></image> </view> <view class="login-text"> <text>欢迎使用,</text> <text>秦安安全云平台!</text> </view> </view> <view class="login-content"> <view class="input-row"> <view class="title"> <text class="">手机号码</text> </view> <view class="m-input-view"> <input v-model="userName" class="m-input" placeholder-style="color: #5caceb;font-size: 34upx;" placeholder="请输入手机号..." /> </view> </view> <view class="input-row mt30"> <view class="title"> <text class="">密码</text> </view> <view class="m-input-view"> <input v-model="userPwd" class="m-input" placeholder-style="color: #5caceb;font-size: 34upx;" password type="text" placeholder="请输入密码..." /> </view> </view> </view> <view class="btn-row"> <button class="cu-btn bg-login margin-tb-sm lg" @click="$noMultipleClicks(login)">登 录</button> </view> <view class="bar-forget"> <!-- <navigator class="title" url="/pages/login/forget/forget"> 忘记密码 </navigator> --> <!-- <view class="title"> 注册 </view> --> </view> </view> <view style="width: 100%;color: #fff;position: absolute;left: 50%;transform: translateX(-50%);bottom: 50upx;display: flex;justify-content: center;align-items: center"> <radio-group> <radio :checked="radio === '1'" @click="radioChange"></radio> </radio-group> <view style="margin-left: 20upx;display: flex"> <text>我已阅读并同意</text> <navigator style="color: #041d8c" url="/pages/my/agreement/agreement"> 《服务协议》 </navigator> <text>和</text> <navigator style="color: #041d8c" url="/pages/my/privacy/privacy"> 《隐私政策》 </navigator> </view> </view> </view> </template> <script> import { basePath, setloginUserId, setCorpinfoId, setloginUser, setDeptId, setDeptLevel, adminPath, corpinfoId, setBasePath, setIsRest, isRest, loginUser, setPremission, publicKey } from '@/common/tool.js'; import JSEncrypt from '../../static/js/jsencrypt.min' export default { data() { return { noClick: true, userName: '', userPwd: '', push_clientid: '', radio: '' } }, async onLoad() { this.getRemember() uni.getPushClientId({ success: (res) => { this.push_clientid = res.cid this.getLoginUser() console.log('客户端推送标识:', res.cid) }, fail(err) { uni.showToast({ icon: 'none', title: "获取用户标识失败,请重新登录", duration: 2000 }); } }); // this.getLoginUser() //this.getUrlVersion(); }, methods: { getRemember() { uni.getStorage({ key: 'remember', success: async (res) => { if (res.data && res.data.username) { this.userName = res.data.username this.userPwd = res.data.userPwd } } }); }, getLoginUser() { uni.getStorage({ key: 'USER', success: async (res) => { if (res.data && res.data.USER_ID) { setloginUserId(res.data.USER_ID); setCorpinfoId(res.data.CORPINFO_ID); setDeptId(res.data.DEPARTMENT_ID); setDeptLevel(res.data.DEPARTMENT_LEVEL); setloginUser(res.data); // 查看是否离岗 this.handleLoginCheck(res.data.USER_ID).then(() => { uni.navigateTo({ url: '/pages/index/index', }); }) } } }); }, handleLoginCheck(USER_ID) { return new Promise((resolve, reject) => { uni.request({ url: basePath + '/app/offduty/isRest', method: 'POST', dataType: 'json', header: { 'Content-type': 'application/x-www-form-urlencoded' }, data: { CORPINFO_ID: corpinfoId, USER_ID: loginUser.USER_ID, }, success: (res1) => { this.updatePushCid(USER_ID, this.push_clientid) if ("success" == res1.data.result) { if (res1.data.ISREST != null) { setIsRest(res1.data.ISREST); } else { setIsRest(res.data.ISREST); } resolve() } else if ("usercorperror" == res1.data.result) { uni.showToast({ icon: 'none', title: "您的企业已停用,请联系管理员", duration: 2000 }); reject() } else if ("userUSEerror" == res1.data.result) { uni.showToast({ icon: 'none', title: "您的企业已到使用期限,请联系管理员", duration: 2000 }); reject() } }, fail: (res2) => { uni.showToast({ icon: 'none', title: "服务器正在升级,请稍后再试。", duration: 2000 }); } }); }) }, radioChange() { if (this.radio) this.radio = '' else this.radio = '1' }, userNameinp(e) { this.userName = e.detail.value }, userPwdinp(e) { this.userPwd = e.detail.value }, login() { if (this.radio !== '1') { uni.showToast({ title: '请先阅读并同意《服务协议》和《隐私政策》', icon: 'none' }) return; } var _this = this; var userName = _this.userName; var userPwd = _this.userPwd; var jsencrypt = new JSEncrypt() jsencrypt.setPublicKey(publicKey) const keydataVal = jsencrypt.encrypt('zcloudchina' + userName + ',zy,' + userPwd) // var keydataVal = 'zcloudchina' + userName + ',zy,' + userPwd; var myreg = /^(((13[0-9]{1})|159)+\d{8})$/; if (userName == '') { uni.showToast({ icon: 'none', title: '请输入用户名', duration: 2000 }); return; } else if (userName.length != 11 && !myreg.test(userName)) { uni.showToast({ icon: 'none', title: '手机号格式不正确', duration: 2000 }); return; } if (userPwd == '') { uni.showToast({ title: '密码不能为空', icon: 'none', duration: 2000 }); return; } uni.showLoading({ mask: true, title: '请稍候' }) uni.request({ url: basePath + '/admin/check', method: 'POST', dataType: 'json', header: { 'Content-type': 'application/x-www-form-urlencoded' }, data: { KEYDATA: keydataVal, SOURCE: '2', tm: new Date().getTime(), }, success: (res) => { var result = res.data.result; uni.showToast({ icon: 'none', title: res.data.msg, duration: 2000 }); if ("success" == result) { setloginUserId(res.data.USER_ID); setCorpinfoId(res.data.CORPINFO_ID); setDeptId(res.data.DEPARTMENT_ID); setDeptLevel(res.data.DEPARTMENT_LEVEL); setIsRest(res.data.ISREST); setloginUser(res.data); uni.setStorage({ key: 'USER', data: res.data }); const remember = {} remember.username = userName remember.userPwd = userPwd uni.setStorage({ key: 'remember', data: remember }); this.getMenu() this.updatePushCid(res.data.USER_ID, this.push_clientid) } else if ("usererror" == result) { uni.showToast({ icon: 'none', title: "用户名或密码有误", duration: 2000 }); } else if ("error" == result) { uni.showToast({ icon: 'none', title: "缺少参数", duration: 2000 }); } else if ("invalid" == result) { uni.showToast({ icon: 'none', title: "账号已被冻结,请联系管理员", duration: 2000 }); } else if ("usercorperror" == result) { uni.showToast({ icon: 'none', title: res.data.msg, duration: 2000 }); } else if ("userUSEerror" == result) { uni.showToast({ icon: 'none', title: res.data.msg, duration: 2000 }); } else if ("maintainDeactivateError" == result) { uni.showToast({ icon: 'none', title: "企业处于维护停用阶段,暂时无法登录", duration: 2000 }); } else if ("exception" == result) { uni.showToast({ icon: 'none', title: res.data.exception, duration: 2000 }); } }, fail: (res) => { uni.showToast({ icon: 'none', title: "服务器正在升级,请稍后再试。", duration: 2000 }); } }) }, getMenu() { var _this = this; uni.showLoading({ title: '请稍候' }) uni.request({ url: basePath + '/app/main/index', method: 'POST', dataType: 'json', header: { 'Content-type': 'application/x-www-form-urlencoded' }, data: { USER_ID: loginUser.USER_ID, }, success: (res) => { if ("success" == res.data.result) { var menuList = res.data.menuList var premissionList = new Map() menuList.map(item => { if (item.menu_NAME == '安全承诺' && item.hasMenu) { premissionList.set('commitment', true) if (item.subMenu && item.subMenu.length > 0) { item.subMenu.map(child => { if (child.menu_NAME == '公司级承诺公告' && child .hasMenu) { premissionList.set('commitment-company', true) } if (child.menu_NAME == '车间级承诺公告' && child .hasMenu) { premissionList.set('commitment-workshop', true) } if (child.menu_NAME == '班组级承诺公告' && child .hasMenu) { premissionList.set('commitment-team', true) } }) } } if (item.menu_NAME == '受限空间作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('confinedspace', true) } if (item.menu_NAME == '动火作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('hotwork', true) } if (item.menu_NAME == '高处作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('high-work', true) } if (item.menu_NAME == '吊装作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('hoisting', true) } if (item.menu_NAME == '盲板抽堵作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('blind-board', true) } if (item.menu_NAME == '动土作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('break-ground', true) } if (item.menu_NAME == '临时用电作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('electricity', true) } if (item.menu_NAME == '断路作业管理' && item.hasMenu) { premissionList.set('eightWork', true) premissionList.set('open-circuit', true) } if (item.menu_NAME == '在线学习与考试' && item.hasMenu) { premissionList.set('education', true) } if (item.menu_NAME == '设备设施管理' && item.hasMenu) { premissionList.set('speEquip', true) } }) setPremission(Object.fromEntries(premissionList)); uni.hideLoading(); uni.showToast({ title: "登录成功", duration: 1000 }); uni.redirectTo({ url: '/pages/index/index' }); } else { uni.showToast({ title: res.data.message, duration: 2000 }); } }, fail: (res) => { uni.showToast({ icon: 'none', title: "服务器正在升级,请稍后再试。", duration: 2000 }); } }); }, getUrlVersion() { plus.runtime.getProperty(plus.runtime.appid, function(inf) { var _this = this; // 路径 uni.request({ url: basePath + '/app/versionurl/goUrlByVersion', method: 'POST', dataType: 'json', header: { 'Content-type': 'application/x-www-form-urlencoded' }, data: { VERSION: inf.version, }, success: (res) => { if (res.data.pd != null) { console.info(inf.version); setBasePath(res.data.pd.URL); } }, fail: (res) => { uni.showToast({ icon: 'none', title: "服务器正在升级,请稍后再试。", duration: 2000 }); } }); }); }, updatePushCid(userId, pushCid) { uni.request({ url: basePath + '/app/user/updatePushCid', method: 'POST', dataType: 'json', header: { 'Content-type': 'application/x-www-form-urlencoded' }, data: { USER_ID: userId, PUSH_CID: pushCid }, }); } } } </script> <style> .bottom-img { height: 298upx; width: 100%; position: fixed; bottom: 0; } .bottom-img image { width: 100%; height: 100%; } .bg-login { background-color: #72b0ed; color: #1f63ae; font-weight: bold; } .btn-row { display: flex; flex-direction: column; } .login-box { padding: 105upx 55upx; } .login-img { width: 90upx; height: 90upx; margin-bottom: 50upx; } .login-img image { width: 100%; height: 100%; } .login-title { display: flex; align-items: center; padding-top: 46upx; } .login-logo { margin-right: 26upx; margin-top: 10upx; } .login-logo image { width: 100upx; height: 100upx; } .login-text { color: #fff; font-size: 44upx; font-weight: 500; display: flex; flex-direction: column; line-height: 1.6; } .login-content { margin-top: 100upx; margin-bottom: 50upx; } .input-row .title { color: #8ee6ff; margin-bottom: 10upx; } .bar-forget { display: flex; padding-top: 30upx; justify-content: space-between; color: #8ee6ff; } .m-input-view {} .m-input-view .m-input { height: 80upx; line-height: 1; color: #fff; font-size: 40upx; border-bottom: 1upx solid #62abf7; } </style>