ttk-app-core
Version:
@ttk/recat enterprise develop framework
194 lines (176 loc) • 6.62 kB
JavaScript
import React from 'react'
import { action as MetaAction, AppLoader } from '@ttk/meta-engine';
import config from './config'
import md5 from 'md5'
class action {
constructor(option) {
this.metaAction = option.metaAction
this.config = config.current
this.webapi = this.config.webapi
}
onInit = ({ component, injections }) => {
this.component = component
if (this.component.props.setOkListener) {
this.component.props.setOkListener(this.onOk)
}
if (this.component.props.setCancelLister) {
this.component.props.setCancelLister(this.onCancel)
}
this.injections = injections
injections.reduce('init', this.component.props.mobile)
}
countDown = 60 //倒计时
timer = null
getCaptchaing = false
getCaptcha = async () => {
if(this.getCaptchaing) return
this.getCaptchaing = true
this.metaAction.sf('data.timeStaus',false)
let that = this
this.timer = setInterval(function() {
if(that.countDown == 0) {
that.clearTimer(true, '重新获取')
return
}
that.metaAction.sf('data.time', (--that.countDown)+'s')
}, 1000)
let params = {}
params.mobile = this.metaAction.gf('data.form.newMobile')
//1: 注册 2:找回密码 3:修改手机号
params.smsType = 3
const captcha = await this.webapi.captcha.fetch(params)
this.metaAction.sf('data.form.sign', captcha)
this.metaAction.toast('success', `验证码已经发送到您的手机`)
}
//清除定时器
clearTimer = function(staus, remind) {
this.metaAction.sf('data.timeStaus',true)
this.metaAction.sf('data.time', remind)
this.countDown = 60
this.getCaptchaing = false
clearInterval(this.timer)
}
onOk = async () => {
const currentUser = this.metaAction.context.get('currentUser')
var id = currentUser && currentUser.id
const form = this.metaAction.gf('data.form').toJS();
const info = await this.check([{
path: 'data.form.oldMobile', value: form.oldMobile
}, {
path: 'data.form.password', value: form.password
}, {
path: 'data.form.newMobile', value: form.newMobile
}, {
path: 'data.form.captcha', value: form.captcha
}], 'change')
if (!info) return false
if(md5(form.password+'*the3Kingdom*') == sessionStorage.getItem('password')) {
this.clearTimer(false, '获取验证码')
await this.webapi.user.update({
id,
mobile: form.newMobile,
captcha: form.captcha
})
this.metaAction.toast('success', `手机修改成功`)
return {newMobile: form.newMobile}
}else {
this.metaAction.sf('data.error.password', '密码输入错误')
return false
}
}
onCancel = () => {
this.clearTimer(false, '获取验证码')
}
fieldChange = async (fieldPath, value, operation) => {
await this.check([{ path: fieldPath, value }], operation)
}
check = async (fieldPathAndValues, operation) => {
if (!fieldPathAndValues)
return
let checkResults = []
for (let o of fieldPathAndValues) {
let r = { ...o }
if (o.path == 'data.form.oldMobile') {
Object.assign(r, await this.oldMobile(o.value))
} else if (o.path == 'data.form.password') {
Object.assign(r, await this.password(o.value))
} else if (o.path == 'data.form.newMobile') {
Object.assign(r, await this.newMobile(o.value, operation))
} else if (o.path == 'data.form.captcha') {
Object.assign(r, await this.captcha(o.value))
}
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
}
oldMobile = async (mobile) => {
var message
if (!mobile)
message = '请输入手机号'
return { errorPath: 'data.error.oldMobile', message }
}
password = async (password) => {
var message
if (!password)
message = '请输入密码'
return { errorPath: 'data.error.password', message }
}
newMobile = async (mobile, operation) => {
var message
if(operation && operation == 'change') {
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.error.newMobile', message }
}
captcha = async (captcha) => {
var message
let sign = this.metaAction.gf('data.form.sign')
let mobile = this.metaAction.gf('data.form.newMobile')
let params = {
sign: sign,
mobile: mobile,
captcha: captcha
}
if (!captcha)
message = '请输入验证码'
else if( !(await this.webapi.captcha.validate(params)))
message = '验证码输入错误'
return { errorPath: 'data.error.captcha', message }
}
}
export default function creator(option) {
const metaAction = new MetaAction(option),
o = new action({ ...option, metaAction }),
ret = { ...metaAction, ...o }
metaAction.config({ metaHandlers: ret })
return ret
}