126 lines
4.0 KiB
JavaScript
126 lines
4.0 KiB
JavaScript
import { isPassword } from "oak-domain/lib/utils/validator";
|
||
import { encryptPasswordSha1 } from "../../../../utils/password";
|
||
export default OakComponent({
|
||
isList: false,
|
||
formData({ features, props }) {
|
||
return {};
|
||
},
|
||
data: {
|
||
counter: 0,
|
||
loading: false,
|
||
domain: undefined,
|
||
account: '',
|
||
password: '',
|
||
validMobile: false,
|
||
vaildEmail: false,
|
||
vaildAccount: false,
|
||
validPassword: false,
|
||
allowSubmit: false,
|
||
},
|
||
properties: {
|
||
disabled: '',
|
||
redirectUri: '', // 微信登录后的redirectUri,要指向wechatUser/login去处理
|
||
url: '', // 登录系统之后要返回的页面
|
||
callback: undefined, // 登录成功回调,排除微信登录方式
|
||
allowSms: false,
|
||
allowEmail: false,
|
||
allowWechatMp: false, //小程序切换授权登录
|
||
setLoginMode: (value) => undefined,
|
||
pwdMode: 'all', //密码明文密文存储模式
|
||
},
|
||
lifetimes: {},
|
||
listeners: {
|
||
'vaildAccount,validPassword'(prev, next) {
|
||
const { allowSubmit } = this.state;
|
||
if (allowSubmit) {
|
||
if (!(next.vaildAccount && next.validPassword)) {
|
||
this.setState({
|
||
allowSubmit: false,
|
||
});
|
||
}
|
||
}
|
||
else {
|
||
if (next.vaildAccount && next.validPassword) {
|
||
this.setState({
|
||
allowSubmit: true,
|
||
});
|
||
}
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
async loginByAccount() {
|
||
const { url, callback, pwdMode } = this.props;
|
||
const { account, password } = this.state;
|
||
let pwd = password;
|
||
if (pwdMode === 'sha1') {
|
||
pwd = encryptPasswordSha1(password);
|
||
}
|
||
try {
|
||
this.setState({
|
||
loading: true,
|
||
});
|
||
await this.features.token.loginByAccount(account, pwd);
|
||
this.setState({
|
||
loading: false,
|
||
});
|
||
if (callback) {
|
||
callback();
|
||
return;
|
||
}
|
||
if (url) {
|
||
this.redirectTo({
|
||
url,
|
||
});
|
||
return;
|
||
}
|
||
}
|
||
catch (err) {
|
||
this.setState({
|
||
loading: false,
|
||
});
|
||
this.setMessage({
|
||
type: 'error',
|
||
content: err.message,
|
||
});
|
||
}
|
||
},
|
||
inputChange(type, value) {
|
||
const { allowSms, allowEmail } = this.props;
|
||
switch (type) {
|
||
case 'account':
|
||
// const validMobile = allowSms && !!isMobile(value);
|
||
// const vaildEmail = allowEmail && !!isEmail(value);
|
||
const vaildAccount = !!(value && value.trim() && value.trim() !== '');
|
||
this.setState({
|
||
account: value,
|
||
// validMobile,
|
||
// vaildEmail,
|
||
vaildAccount,
|
||
});
|
||
break;
|
||
case 'password':
|
||
const validPassword = !!isPassword(value);
|
||
this.setState({
|
||
password: value,
|
||
validPassword
|
||
});
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
},
|
||
inputChangeMp(event) {
|
||
const { detail, target: { dataset }, } = event;
|
||
const { attr } = dataset;
|
||
const { value } = detail;
|
||
this.inputChange(attr, value);
|
||
},
|
||
changeLoginMp(e) {
|
||
const { setLoginMode } = this.props;
|
||
const { value } = e.currentTarget.dataset;
|
||
setLoginMode && setLoginMode(value);
|
||
}
|
||
},
|
||
});
|