<template>
|
<view class="pages-loading">
|
<view class="uni-panel-content items-center">
|
<view class="login-content">
|
<view>
|
<image :src="imgHttp" class="login-image" mode="widthFix"></image>
|
</view>
|
<view class="gungho-title"><text>{{ titleName}}</text>
|
</view>
|
|
|
<view v-if="isAutoLoginWork" class="button-clz">
|
<button class="blue-button button-button-clz" @click="autoLogin">重新登录</button>
|
<button class="blue-button button-button-clz" @click="clickPwdLogin">密码登录</button>
|
</view>
|
<form v-else @submit="submitForm" class="login-form">
|
<view class="login-form-item account-clz">
|
<view class="input">
|
<image src="/static/person_30.png" class="login-icon"></image>
|
<input class="login-input" :focus="formData.accountFocus" name="account" comfirm-type="done"
|
type="text" v-model="form.account" placeholder="请输入账号" />
|
</view>
|
</view>
|
<view class="login-form-item password-clz">
|
<view class="input">
|
<image src="/static/lock_30.png" class="login-icon"></image>
|
<input class="login-input" :focus="formData.passwordFocus" name="password" password
|
comfirm-type="done" v-model="form.password" placeholder="请输入密码" />
|
</view>
|
</view>
|
<view class="button-clz">
|
<button form-type="submit" class="blue-button button-button-clz">登录</button>
|
<button class="blue-button button-button-clz" @click="autoLogin">自动登录</button>
|
</view>
|
</form>
|
|
</view>
|
</view>
|
<view class="uni-panel-bottom">
|
<navigator url="/pages/loading/set" hover-class="navigator-hover">
|
<text href="javascript:;" class="gungho-href">设置</text>
|
</navigator>
|
<text class="gungho-ver">{{verdate}}</text>
|
</view>
|
<view class="uni-panel-safe-bottom" :style="{height:safeAreaBottom + 'px'}" />
|
</view>
|
</template>
|
|
<script>
|
import Session from "@/common/utils.js"
|
import {
|
showModal,
|
showToast,
|
showLoading,
|
hideLoading
|
} from "@/common/Page.js"
|
import {
|
login,
|
loginSession,
|
loginDingTalk
|
} from "@/api/org.js"
|
import {
|
getDingAutoLoginInfo,
|
autoLoginDing,
|
autoLoginFeiShu,
|
autoLoginWxQy,
|
} from "@/api/index.js"
|
import Validate from '@/common/Validate.js'
|
export default {
|
data() {
|
return {
|
isAutoLoginWork: false,
|
isWxWork: false,
|
isLoginFailed: false,
|
imgHttp: '', //app.globalData.httpurl+"/favicon.ico",
|
userid: '',
|
mobile: '',
|
username: '',
|
form: {
|
account: '',
|
password: ''
|
},
|
formData: {
|
accountFocus: false,
|
passwordFocus: false
|
},
|
verdate: getApp().globalData.verdate,
|
safeAreaBottom: getApp().globalData.safeAreaBottom,
|
titleName: getApp().globalData.loginTitleName || "工作任务管理平台",
|
}
|
},
|
methods: {
|
setData: function(obj) {
|
let that = this;
|
let keys = [];
|
let val, data;
|
|
Object.keys(obj).forEach(function(key) {
|
keys = key.split(".");
|
val = obj[key];
|
data = that.$data;
|
keys.forEach(function(key2, index) {
|
if (index + 1 == keys.length) {
|
that.$set(data, key2, val);
|
} else {
|
if (!data[key2]) {
|
that.$set(data, key2, {});
|
}
|
}
|
data = data[key2];
|
});
|
});
|
},
|
clickPwdLogin() {
|
this.isAutoLoginWork = false
|
},
|
async checkSession(account, sessionID, callbackSucc, callbackFail) {
|
try {
|
if (sessionID && account) {
|
showLoading("登录中,请稍后...")
|
const res = await loginSession(account, sessionID)
|
res.session_id = sessionID
|
hideLoading()
|
callbackSucc(res)
|
} else {
|
callbackFail()
|
}
|
} catch (ex) {
|
hideLoading()
|
console.log("checkSession", ex)
|
callbackFail()
|
}
|
|
},
|
|
login(loginInfo) {
|
|
this.isAutoLoginWork = true
|
const app = getApp()
|
//#ifdef MP-WEIXIN
|
this.isWxWork = app.globalData.qyWx.isWork
|
this.isAutoLoginWork = this.isWxWork
|
if (!this.isWxWork) {
|
if (loginInfo.password) {
|
this.pwdLogin(loginInfo.userlogin, loginInfo.password)
|
}
|
} else {
|
if (loginInfo.password) {
|
this.pwdLogin(loginInfo.userlogin, loginInfo.password)
|
} else {
|
this.autoLogin()
|
}
|
}
|
// #endif
|
//#ifdef MP-LARK || MP-DINGTALK
|
this.isAutoLoginWork = true
|
if (loginInfo.password) {
|
this.pwdLogin(loginInfo.userlogin, loginInfo.password)
|
} else {
|
this.autoLogin()
|
}
|
// #endif
|
//#ifndef MP-WEIXIN || MP-LARK || MP-DINGTALK
|
this.isAutoLoginWork = false
|
if (loginInfo.password) {
|
this.pwdLogin(loginInfo.userlogin, loginInfo.password)
|
}
|
// #endif
|
|
},
|
async getDingLoginInfo() {
|
try {
|
let info = await getDingAutoLoginInfo()
|
return info
|
} catch (ex) {
|
console.log(ex)
|
this.showError(ex)
|
return {
|
user_id: "",
|
mobile: ""
|
}
|
}
|
},
|
async loginDingTalk(info, showErr) {
|
try {
|
let res = await loginDingTalk(info.user_id, info.mobile)
|
const app = getApp()
|
let loginInfo = {
|
userlogin: res.user_id,
|
username: res.user_name,
|
mobile: res.mobile,
|
password: "",
|
sessionid: res.session_id
|
}
|
app.globalData.isPwdLogin = false
|
this.loginSuccess(loginInfo, res)
|
return 0
|
} catch (ex) {
|
if (showErr) {
|
this.showError(ex)
|
} else {
|
if (ex.errCode != 12201) {
|
this.showError(ex)
|
}
|
}
|
return ex.errCode || 1
|
|
}
|
},
|
async autoLoginDing() {
|
try {
|
const _this = this
|
_this.setData({
|
isLoginFailed: false
|
})
|
showLoading("登录中,请稍后...")
|
let info = await this.getDingLoginInfo()
|
if (info.user_id || info.mobile) {
|
let loginInfo = {
|
userlogin: info.user_id,
|
mobile: info.mobile,
|
username: "",
|
password: "",
|
sessionid: "",
|
}
|
Session.setValue('logininfo', loginInfo)
|
let res = await this.loginDingTalk(info, false)
|
if (!res) {
|
hideLoading()
|
} else {
|
if (res != 12201) {
|
hideLoading()
|
return
|
}
|
let sec = 0
|
showLoading(`验证钉钉信息中,还有${(5- sec)}s`)
|
const timeInterval = setInterval(() => {
|
sec++
|
let tip = `验证钉钉信息中,还有${5- sec}s`
|
showLoading(tip)
|
}, 1000)
|
setTimeout(() => {
|
clearInterval(timeInterval)
|
this.loginDingTalk(info, true)
|
hideLoading()
|
}, 6000)
|
}
|
|
}
|
hideLoading()
|
return
|
|
} catch (ex) {
|
hideLoading()
|
this.showError(ex)
|
}
|
},
|
async autoLogin() {
|
try {
|
|
const _this = this
|
_this.setData({
|
isLoginFailed: false
|
})
|
//#ifdef MP-DINGTALK
|
res = await this.autoLoginDing()
|
return
|
// #endif
|
showLoading("登录中,请稍后...")
|
var res = undefined
|
//#ifdef MP-WEIXIN
|
if(this.isWxWork)
|
res = await autoLoginWxQy()
|
// #endif
|
//#ifdef MP-LARK
|
res = await autoLoginFeiShu()
|
// #endif
|
//#ifdef MP-DINGTALK
|
res = await autoLoginDing()
|
// #endif
|
if (!res)
|
{
|
hideLoading()
|
return
|
}
|
|
const app = getApp()
|
let loginInfo = {
|
userlogin: res.user_id,
|
username: res.user_name,
|
mobile: res.mobile,
|
password: "",
|
sessionid: res.session_id
|
}
|
app.globalData.isPwdLogin = false
|
_this.loginSuccess(loginInfo, res)
|
hideLoading()
|
|
} catch (ex) {
|
hideLoading()
|
console.log(ex)
|
this.showError(ex)
|
}
|
|
},
|
async pwdLogin(account, password) {
|
try {
|
const _this = this
|
_this.setData({
|
isLoginFailed: false
|
})
|
showLoading("登录中,请稍后...")
|
const res = await login(account, password)
|
const app = getApp()
|
let loginInfo = {
|
userlogin: res.user_login,
|
username: res.user_name,
|
password: this.form.password,
|
sessionid: res.session_id,
|
}
|
app.globalData.isPwdLogin = true
|
_this.loginSuccess(loginInfo, res)
|
hideLoading()
|
|
} catch (ex) {
|
hideLoading()
|
this.showError(ex)
|
console.log("登录异常", ex);
|
this.form.password = ""
|
this.formData.passwordFocus = true
|
}
|
|
},
|
|
loginSuccess(loginInfo, userData) {
|
const app = getApp()
|
Session.setValue('logininfo', loginInfo)
|
userData.logintime = new Date().toDateString();
|
app.globalData.userdata = userData;
|
Session.setValue('userdata', userData);
|
if (userData.files_info && !app.globalData.files_flag) {
|
if (userData.files_info.flag) {
|
app.globalData.files_flag = userData.files_info.flag
|
|
}
|
}
|
// let default_pageinfo = Session.getDefaultPageInfo()
|
// if (default_pageinfo) {
|
// if (app.globalData.apptype == "HangChaTesting") {
|
// uni.reLaunch({
|
// url: '/pages/task/index'
|
// })
|
// return
|
// }
|
// uni.reLaunch({
|
// url: "/" + default_pageinfo.pagePath,
|
// fail: function(res) {
|
// console.log("loading reLaunch fail", res);
|
// uni.reLaunch({
|
// url: '/pages/task/index'
|
// })
|
// }
|
// })
|
// } else
|
{
|
uni.reLaunch({
|
url: '/pages/task/index'
|
})
|
}
|
},
|
submitForm(e) {
|
const _this = this
|
_this.validateForm = new Validate({
|
account: {
|
required: {
|
message: '用户名不能为空'
|
}
|
},
|
password: {
|
required: {
|
message: '密码不能为空'
|
}
|
}
|
});
|
if (!_this.validateForm.checkForm(e)) {
|
|
const data = _this.validateForm.errorList[0];
|
console.log("submitForm failed ", data);
|
showToast(data.msg, "none");
|
return false;
|
} else {
|
//保存数据
|
const param = e.detail.value;
|
|
_this.pwdLogin(param.account, param.password)
|
}
|
},
|
showError(ex) {
|
let tip = typeof ex == 'string' ? ex : typeof ex.err_msg == 'string' ? ex.err_msg : typeof ex.errMsg ==
|
'string' ? ex.errMsg : ""
|
showModal(tip, "提示", false)
|
},
|
},
|
onLoad(option) {
|
//console.log('loading - onload',option);
|
const _this = this
|
const app = getApp()
|
const apiPort = Session.getValue('apiport');
|
app.globalData.files_flag = Session.getValue('files_flag');
|
const portObj = app.globalData.apiport
|
app.globalData.apiurl = {
|
org: `${app.globalData.httproot}:${apiPort?.org|| portObj?.org || 5101}`,
|
mobox: `${app.globalData.httproot}:${apiPort?.mobox || portObj?.mobox|| 5102}`,
|
data: `${app.globalData.httproot}:${apiPort?.data || portObj?.data|| 5103}`,
|
workflow: `${app.globalData.httproot}:${apiPort?.workflow || portObj?.workflow|| 5104}`,
|
gungho: `${app.globalData.httproot}:${apiPort?.gungho|| portObj?.gungho || 5109}`,
|
}
|
// _this.imgHttp = app.globalData.httpurl + "/favicon.ico"
|
uni.setNavigationBarTitle({
|
title: app.globalData.titleName
|
})
|
_this.isAutoLoginWork = true
|
_this.safeAreaBottom = app.globalData.safeAreaBottom
|
_this.isWxWork = false
|
|
|
let loginInfo = Session.getValue('logininfo')
|
if (loginInfo) {
|
_this.form.account = loginInfo.userlogin || ""
|
_this.form.password = loginInfo.password || ""
|
}
|
console.log(loginInfo)
|
if (!option.noautologin) {
|
if (loginInfo) {
|
if (loginInfo.sessionid) {
|
let userData = Session.getValue('userdata')
|
_this.checkSession(userData.user_login, loginInfo.sessionid, (res) => {
|
this.isAutoLoginWork = true
|
if (loginInfo.mobile) {
|
_this.isWxWork = app.globalData.qyWx.isWork
|
app.globalData.isPwdLogin = false
|
} else
|
app.globalData.isPwdLogin = true
|
_this.loginSuccess(loginInfo, res)
|
}, () => {
|
_this.login(loginInfo)
|
})
|
} else {
|
//#ifdef MP-DINGTALK
|
_this.autoLoginDing()
|
// #endif
|
//#ifndef MP-DINGTALK
|
_this.login({})
|
// #endif
|
}
|
|
return
|
} else {
|
//#ifdef MP-DINGTALK
|
_this.autoLoginDing()
|
// #endif
|
//#ifndef MP-DINGTALK
|
_this.autoLogin()
|
// #endif
|
|
}
|
} else {
|
_this.isAutoLoginWork = true
|
}
|
|
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
@import "../../common/css/button.scss";
|
|
.pages-loading {
|
display: flex;
|
width: 750rpx;
|
height: 100vh;
|
flex-direction: column;
|
|
.justify-center {
|
justify-content: center;
|
}
|
|
.items-center {
|
align-items: center
|
}
|
|
.login-image {
|
display: block;
|
margin: auto;
|
height: 80px !important;
|
width: 80px;
|
}
|
|
.login-form {
|
display: flex;
|
padding: 20px !important;
|
flex-direction: column;
|
}
|
|
.login-form-item {
|
padding: 0.3125rem 0.3125rem !important;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
position: relative;
|
|
}
|
|
.login-form-item.flex-direction-column {
|
align-items: flex-start;
|
}
|
|
.login-form-item .input {
|
display: flex;
|
width: 100%;
|
padding: 8px 0px;
|
color: var(--black);
|
text-align: left;
|
background-color: transparent;
|
position: relative;
|
}
|
|
.login-input {
|
position: absolute;
|
left: 32px;
|
right: 2px;
|
}
|
|
.login-icon {
|
width: 20px !important;
|
height: 20px !important;
|
float: left;
|
margin-left: 2px;
|
margin-right: 8px;
|
}
|
|
.account-clz {
|
margin-left: 10px;
|
// width: calc(100% - 40px) !important;
|
font-size: 14px !important;
|
margin-top: 10px;
|
margin-bottom: 0px;
|
border-bottom: 1px solid #f2e7e7;
|
margin-right: 10px;
|
}
|
|
.password-clz {
|
margin-left: 10px;
|
// width: calc(100% - 40px) !important;
|
font-size: 14px !important;
|
margin-top: 10px;
|
margin-bottom: 0px;
|
border-bottom: 1px solid #f2e7e7;
|
margin-right: 10px;
|
}
|
|
.blue-button {
|
background-color: #00aaff !important;
|
color: white !important;
|
}
|
|
.button-clz {
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
flex-direction: column;
|
// width: calc(100% - 40px) !important;
|
font-size: 16px !important;
|
}
|
|
.button-button-clz {
|
font-size: 16px !important;
|
margin: 10px !important;
|
width: 240px !important;
|
height: 45px;
|
}
|
|
|
.uni-panel-content {
|
display: flex;
|
flex: 1;
|
width: 750rpx;
|
}
|
|
.login-content {
|
width: 750rpx;
|
height: 400px;
|
}
|
|
.gungho-title {
|
font-size: 20px;
|
font-weight: 300;
|
margin: 24px 12px 12px;
|
text-align: center;
|
}
|
|
|
|
.uni-panel-bottom {
|
display: flex;
|
justify-content: space-between;
|
align-items: flex-end;
|
padding: 40rpx;
|
font-size: 14px;
|
min-height: 32px;
|
|
.gungho-href {
|
|
color: #00aaff;
|
text-decoration: underline;
|
}
|
|
.gungho-ver {}
|
|
|
|
}
|
}
|
</style>
|