ttk-app-core
Version:
@ttk/recat enterprise develop framework
290 lines (253 loc) • 9.93 kB
JavaScript
import React from 'react'
import { action as MetaAction, AppLoader } from '@ttk/meta-engine';
import config from './config'
import md5 from 'md5'
import { Carousel } from '@ttk/component'
//import utils from 'edf-utils'
class action {
constructor(option) {
this.metaAction = option.metaAction
this.config = config.current
this.webapi = this.config.webapi
}
onInit = ({ component, injections }) => {
/*
if (location.href.indexOf('aierp.cn') > -1 || location.href.indexOf('aitaxer.com') > -1) {
if (location.href.indexOf('?pro') == -1) {
return
}
}*/
this.component = component
let info = { mobile: '13333333333', password: '1', remember: false }
let currentTimestamp = (new Date()).getTime()
//从cookie中读取mobile
function getCookie(c_name) {
if (document.cookie.length > 0) {
let c_start = document.cookie.indexOf(c_name + "=")
if (c_start != -1) {
c_start = c_start + c_name.length + 1
let c_end = document.cookie.indexOf(";", c_start)
if (c_end == -1) c_end = document.cookie.length
return unescape(document.cookie.substring(c_start, c_end))
}
}
return ""
}
let mobileCookie = getCookie('THE_LAST_LOGIN')
mobileCookie ? info.mobile = mobileCookie : ''
if (currentTimestamp < localStorage.remember) {
info.remember = true
if (info.mobile == localStorage['mobile']) {
info.password = localStorage['password']
}
} else {
localStorage.clear()
}
this.injections = injections
injections.reduce('init', info)
this.getCarouselBg()
//绑定回车事件
this.bindEnter()
}
getLogo = () => this.config.logo
getCarouselBg = async () => {
let imgs = [{}, {}, {}]
imgs[0].url = await require('../../../assets/img/green/login-bg-1.jpg')
imgs[1].url = await require('../../../assets/img/green/login-bg-2.jpg')
imgs[2].url = await require('../../../assets/img/green/login-bg-3.jpg')
this.injections.reduce('load', imgs)
}
bindEnter = () => {
let that = this
document.onkeydown = function (e) {
let keyCode = e.keyCode
if (keyCode !== 13) return
let form = that.metaAction.gf('data.form').toJS()
that.fieldChange('data.form.mobile', form.mobile)
that.fieldChange('data.form.password', form.password)
that.login()
}
}
login = async () => {
let form = this.metaAction.gf('data.form').toJS()
let other = this.metaAction.gf('data.other').toJS()
//登录前校验
const basicInfo = await this.check([{
path: 'data.form.mobile', value: form.mobile
}, {
path: 'data.form.password', value: form.password
}], 'login')
if (!basicInfo) return
//预置密码生效
// if(!localStorage.remember){
other.userInput = true
// }
if (other.userInput) {
if (form.password) {
form.password = md5(form.password + '*thethreekingdoms*')
}
}
const response = await this.webapi.user.login(form)
if (!response.result) {
if (response.error && response.error.code == 50111) {
this.metaAction.sf('data.other.error.password', '密码不正确,请重新输入')
}
return
}
//cookie中存储上次登录的用户名
function setCookie(c_name, value, expiredays) {
var exdate = new Date()
exdate.setDate(exdate.getDate() + expiredays)
document.cookie = c_name + "=" + escape(value) +
((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
}
setCookie('THE_LAST_LOGIN', form.mobile, 7)
this.metaAction.context.set('user', response.value)
//判断是否保存登录信息
if (form.remember) {
let time = (new Date()).getTime() + 7 * 24 * 60 * 60 * 1000
localStorage.remember = time
localStorage['mobile'] = form.mobile
localStorage['password'] = form.password
} else {
localStorage.clear()
}
sessionStorage['mobile'] = form.mobile
sessionStorage['username'] = response.value.nickname
sessionStorage['_accessToken'] = response.token
sessionStorage['password'] = form.password
sessionStorage['currentOrgStatus'] = response.value.currentOrgStatus
document.onkeydown = null
//登录时切换皮肤
let skin = (response.value.skin && response.value.skin.toUpperCase()) || '#416AAA'
localStorage['skin'] = skin
if (this.component.props.onRedirect && this.config.goAfterLogin) {
this.component.props.onRedirect(this.config.goAfterLogin)
}
}
renderCal = () => {
const arr = this.metaAction.gf('data.other.imgs').toJS()
console.log(arr)
const data = this.metaAction.gf('data').toJS()
return (
<Carousel
autoplay={true}
initialSlide={data.other.selectedImgIndex}
afterChange={this.imgChange}
>
{
arr.map(item => {
return (
<div>
<img src={item.url} />
<div className="ttk-edf-app-login-content-ad">
<p>企业开发平台</p>
<p>一套完整的前端工程化解决方案,涵盖项目的起始、开发、测试以及部署阶段</p>
</div>
</div>
)
})
}
</Carousel>
)
}
goRegisterA = () => {
this.goRegister()
//埋点
_hmt && _hmt.push(['_trackEvent', '系统管理', '企业登录', '右上角立即注册'])
}
goRegisterB = () => {
this.goRegister()
//埋点
_hmt && _hmt.push(['_trackEvent', '系统管理', '企业登录', '右下角立即注册'])
}
goRegister = () => {
document.onkeydown = null
if (this.component.props.onRedirect && this.config.goRegister) {
this.component.props.onRedirect(this.config.goRegister)
}
}
goForgot = () => {
if (this.component.props.onRedirect && this.config.goForgot) {
this.component.props.onRedirect(this.config.goForgot)
//埋点
_hmt.push(['_trackEvent', '系统管理', '企业登录', '忘记密码'])
}
}
fieldChange = async (fieldPath, value) => {
this.metaAction.sf(fieldPath, value)
await this.check([{ path: fieldPath, value }])
}
check = async (fieldPathAndValues, action) => {
if (!fieldPathAndValues)
return
var checkResults = []
for (var o of fieldPathAndValues) {
let r = { ...o }
if (o.path == 'data.form.mobile') {
Object.assign(r, await this.checkMobile(o.value, action))
}
else if (o.path == 'data.form.password') {
Object.assign(r, await this.checkPassword(o.value, action))
}
checkResults.push(r)
}
var json = {}
var hasError = true
checkResults.forEach(o => {
// json[o.path] = o.value
json[o.errorPath] = o.message
if (o.message)
hasError = false
})
this.metaAction.sfs(json)
return hasError
}
checkMobile = async (mobile, action) => {
var message
if (action && action == 'login') {
if (!mobile)
message = '请输入手机号'
else if (mobile.length != 11)
message = '请输入正确的手机号'
else {
let flag = await this.webapi.user.existsMobile(mobile)
!flag && (message = '该手机号未注册,请重新输入')
}
} else {
if (!mobile)
message
else if (mobile.length == 1 && !(mobile == '1'))
message = '请输入正确的手机号'
else if (mobile.length > 1 && mobile.length < 11 && !/^1[3|4|5|8|7]/.test(mobile))
message = '请输入正确的手机号'
else if (mobile.length > 11) {
message = '请输入正确的手机号'
} else if (mobile.length == 11) {
let flag = await this.webapi.user.existsMobile(mobile)
!flag && (message = '该手机号未注册,请重新输入')
}
}
return { errorPath: 'data.other.error.mobile', message }
}
imgChange = async () => {
}
checkPassword = async (password) => {
var message
if (!password)
message = '请输入密码'
return { errorPath: 'data.other.error.password', message }
}
//检查是否要置灰登录
checkLogin = () => {
let data = this.metaAction.gf('data').toJS()
return !((data.form.mobile && !data.other.error.mobile) && (data.form.password && !data.other.error.password))
}
}
export default function creator(option) {
const metaAction = new MetaAction(option),
o = new action({ ...option, metaAction }),
ret = { ...metaAction, ...o }
metaAction.config({ metaHandlers: ret })
return ret
}