ttk-app-core
Version:
@ttk/recat enterprise develop framework
196 lines (184 loc) • 5.88 kB
JavaScript
import React from 'react'
import { action as MetaAction, AppLoader } from '@ttk/meta-engine';
import config from './config'
import moment from 'moment'
import { LoadingMask, Icon } from '@ttk/component'
import { Map } from 'immutable'
const formItemLayout = {
labelCol: { span: 3 },
wrapperCol: { span: 21 },
};
class action {
constructor(option) {
this.metaAction = option.metaAction
this.config = config.current
this.webapi = this.config.webapi
}
onInit = ({ component, injections }) => {
this.component = component
this.injections = injections
injections.reduce('init')
this.load()
}
load = async () => {
let response;
this.injections.reduce('load', response)
}
onShowSuccessMsg = (msg) => {
this.metaAction.toast('success', msg);
}
onShowWarningMsg = (msg) => {
this.metaAction.toast('warning', msg);
}
showLoadingMask = () => {
LoadingMask.show({ content: ' ' })
let timer = this.metaAction.setTimeout(() => {
LoadingMask.hide();
clearTimeout(timer);
}, 5000);
}
/**
* 显示弹窗——无按钮
*/
showModal = async () => {
const ret = await this.metaAction.modal('show', {
title: '我是标题',
width: '80%',
footer: null,
children: this.metaAction.loadApp('ttk-edf-app-home', {
store: this.component.props.store,
})
})
}
/**
* 显示弹窗——'确定''取消'按钮
*/
showModalWithBtn = async () => {
const ret = await this.metaAction.modal('show', {
title: '我是标题',
width: '80%',
children: this.metaAction.loadApp('ttk-edf-app-home', {
store: this.component.props.store,
})
})
}
/**
* 显示弹窗——其他按钮
*/
showModalWithOtherBtn = async () => {
const ret = await this.metaAction.modal('show', {
title: '身份验证',
width: '80%',
okText: '验证',
cancelText: '关闭',
children: this.metaAction.loadApp('ttk-edf-app-home', {
store: this.component.props.store,
})
})
}
/**
* 复制font图标代码
*/
copyFontCode = (obj) => {
const text = `{ name: 'icon${obj.type}', component: 'Icon', fontFamily: 'fsicon', type: '${obj.type}' }`;
if (this.copyToClipboard(text)) {
this.metaAction.toast('success', `${text} copied!!!!!`);
};
}
/**
* 复制png图标代码
*/
copyPngCode = (obj) => {
const text = `{ name: 'png${obj.type}', component: 'Tax72.Png', type: '${obj.type}' }`;
if (this.copyToClipboard(text)) {
this.metaAction.toast('success', `${text} copied!!!!!`);
};
}
/**
* 复制内容到粘贴板
*/
copyToClipboard = (txt) => {
let result = false;
const input = document.createElement('input');
document.body.appendChild(input);
input.setAttribute('value', txt);
input.select();
if (document.execCommand('copy')) {
document.execCommand('copy');
result = true;
}
document.body.removeChild(input);
return result;
}
getFormItemLayout = () => formItemLayout;
handleSubmit = async e => {
let form = this.metaAction.gf('data.form').toJS()
const checkInfo = await this.check(
[{
path: 'data.form.name', value: form.name
}, {
path: 'data.form.verify', value: form.verify
}])
if (checkInfo) {
// await this.metaAction.modal('show', {
// content: 'aaaaa',
// })
document.querySelector
const errorItems = document.getElementsByClassName('ant-form-item-control has-error');
if (errorItems && errorItems.length) {
errorItems[0].getElementsByTagName('input')[0].focus();
// console.log(errorItems[0].getElementsByTagName('input'),'222')
}
return
}
this.metaAction.toast('success', `提交成功!!!!!`);
};
reset = e => {
this.metaAction.sf('data.form', new Map());
}
check = async (fieldPathAndValues) => {
if (!fieldPathAndValues)
return
var checkResults = []
for (var o of fieldPathAndValues) {
let r = { ...o }
if (o.path == 'data.form.name') {
Object.assign(r, await this.checkName(o.value))
}
else if (o.path == 'data.form.verify') {
Object.assign(r, await this.checkVerify(o.value))
}
checkResults.push(r)
}
var json = {}
var hasError = false
checkResults.forEach(o => {
json[o.errorPath] = o.message
if (o.message)
hasError = true
})
this.metaAction.sfs(json)
return hasError
}
checkName = async (value) => {
let message;
if (!value || value.length < 5) {
message = '标题至少得5个字符啊'
}
return { errorPath: 'data.other.error.name', message }
}
checkVerify = async (value) => {
let message;
if (!value) {
message = '必填项不能为空'
}
return { errorPath: 'data.other.error.verify', 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
}