trunk/pc4mobx/organization/components/import/datasImport.js

341 lines
13 KiB
JavaScript
Raw Normal View History

2022-06-27 18:48:28 +08:00
import {
inject,
observer
} from 'mobx-react';
import {
WeaUpload,
WeaDialog,
WeaFormItem,
WeaSearchGroup,
WeaNewScroll,
WeaSelect,
WeaInput,
WeaAlertPage,
WeaLocaleProvider
} from 'ecCom'
import {
Row,
Col,
Button,
Spin
} from 'antd'
import {
WeaSwitch
} from 'comsMobx'
import React from 'react'
import {
i18n
} from '../../public/i18n';
import { addContentPath, renderNoright } from '../../util/index.js'
import '../../style/common.less'
const getLabel = WeaLocaleProvider.getLabel;
@inject('datasImport')
@observer
export default class DatasImport extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
const {
datasImport
} = this.props;
datasImport.list = [];
}
getCircle() {
let style = {
width: 20,
height: 20,
backgroundColor: '#D8D8D8',
webkitBorderRadius: 10,
mozBorderRadius: 10,
msBorderRadius: 10,
oBorderRadius: 10,
borderRadius: 10,
//paddingLeft: 6,
textAlign: 'center',
}
return style;
}
getForm() {
const {
datasImport
} = this.props;
const {
condition
} = datasImport;
let _arr = [];
condition.map((c, i) => {
let arr = [];
if (i == 0) { //基本信息
c.items.map((field, index) => {
arr.push({
com: (
<div>
<Row ecId={`${this && this.props && this.props.ecId || ''}_Row@m9t2kn@${index}`}>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@rc5who@${index}`} span={1} offset={4}>
<div style={{ marginTop: 15 }}>
<div style={this.getCircle()}><div style={{ paddingTop: 2 }}>{index + 1}</div></div>
</div>
</Col>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@f1sc6s@${index}`} span={14}>
<div style={{ marginTop: 15 }}>
<Row ecId={`${this && this.props && this.props.ecId || ''}_Row@5gsx6o@${index}`}>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@qrdxst@${index}`} span={field.labelcol} style={{ overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }} title={field.label}>{field.label}:</Col>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@7jy5um@${index}`} span={field.fieldcol}>
{this.getDom(field)}
</Col>
</Row>
</div>
</Col>
</Row>
</div>
),
colSpan: 1,
})
})
}
if (i == 1) { //导入说明
c.items.map((field, index) => {
arr.push({
com: (
<div>
<Row ecId={`${this && this.props && this.props.ecId || ''}_Row@hz50xl@${index}`}>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@fgfbrv@${index}`} span={1} offset={4} style={{ marginTop: 15 }}>
<div style={this.getCircle()}>
<div style={{ paddingTop: 2 }}>{index + 1}</div>
</div>
</Col>
<Col ecId={`${this && this.props && this.props.ecId || ''}_Col@5rom81@${index}`} span={17} style={{ marginTop: 15 }}>
{this.getIllustration(field.value, field.link, index, field)}
</Col>
</Row>
</div>
),
colSpan: 1
})
})
}
_arr.push(<div><WeaSearchGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaSearchGroup@bo47pp@${i}`} needTigger={true} title={c.title} showGroup={c.defaultshow} items={arr} col={1} /></div>)
});
return _arr;
}
getDom(field) {
const {
datasImport
} = this.props;
const {
templetName,
filelist,
getTemplateUrl,
importParams
} = datasImport;
let dom;
let domkey = field.domkey;
if (domkey[0] == 'templet') {
dom = <a href={addContentPath(field.value)}>{i18n.label.importTemplate()}</a>;
} else if (domkey[0] === 'exportData') {
const href = datasImport.operateType === 'add' ? field.otherParams.fileVal[0].add : field.otherParams.fileVal[0].update;
if (datasImport.importType === 'matrix') {
dom = <a onClick={() => { getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType, importParams) }}>{i18n.label.importTemplate()}</a>
} else
dom = <a href={addContentPath(href)}>{i18n.label.importTemplate()}</a>;
} else if (domkey[0] == 'excelfile' || domkey[0] == 'importfile') {
dom = (<div>
<div style={{ float: 'left', marginTop: -10 }}>
<WeaUpload ecId={`${this && this.props && this.props.ecId || ''}_WeaUpload@iu8n01`}
uploadUrl='/api/doc/upload/uploadFile'
category='string'
limitType='xls,xlsx'
maxFilesNumber={1}
datas={filelist}
{...field.otherParams}
onChange={
(ids, list) => {
this.setFileId(ids, list)
}
} >
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@87232v`}>{i18n.button.selectFile()}</Button>
</WeaUpload>
</div>
<div style={{ float: 'left', paddingLeft: 10 }}>
{filelist.length == 0 ? <p>{i18n.label.noFileSelected()}</p> : filelist.map(file => <p>{file.filename}</p>)}
</div>
</div>)
} else if (domkey[0].indexOf('keyField') > -1) {
const vals = field.options.filter(v => v.selected == true);
let val = '';
vals.length > 0 && (val = vals[0].key);
dom = <WeaSelect ecId={`${this && this.props && this.props.ecId || ''}_WeaSelect@yzc92h`}
style={{ width: 200 }}
options={field.options}
value={datasImport.importParams[domkey[0]] || field.value || val}
onChange={(v) => { datasImport.setParam(domkey[0], v) }}
/>
} else if (domkey[0] == 'importType') {
dom = <WeaSelect ecId={`${this && this.props && this.props.ecId || ''}_WeaSelect@holhhb`}
style={{ width: 200 }}
options={field.options}
value={datasImport.operateType}
onChange={(v) => { datasImport.operateType = v }}
/>
} else {
dom = <WeaInput ecId={`${this && this.props && this.props.ecId || ''}_WeaInput@rg6f3p`} hasBorder={true} viewAttr={1} value={field.value} />
}
return dom;
}
getIllustration(val, url, index, link) {
const {
datasImport
} = this.props;
const {
templetName,
getTemplateUrl,
importParams
} = datasImport;
let p;
if (index == 0) {
if (url instanceof Object) {
const href = datasImport.operateType === 'add' ? url.add : url.update;
let dom;
if (datasImport.importType === 'matrix') {
dom = <a onClick={() => { getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType, importParams) }}>{i18n.label.importTemplate()}</a>
} else
dom = <a href={addContentPath(href)}>{i18n.label.importTemplate()}</a>;
p = (<p>{i18n.label.downLoadTemplete()}{dom}</p>);
} else if (url != null) {
if (datasImport.importType === 'matrix') {
p = (<p>{i18n.label.downLoadTemplete()}<a onClick={() => { getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType) }}>{i18n.label.importTemplate()}</a></p>);
} else
p = (<p>{i18n.label.downLoadTemplete()}<a href={addContentPath(url)}>{i18n.label.importTemplate()}</a></p>);
} else {
p = (<p><div dangerouslySetInnerHTML={{ __html: val }} /></p>);
}
} else {
p = (<p><div dangerouslySetInnerHTML={{ __html: val }} /></p>);
}
return p;
}
setFileId(ids, list) {
const {
datasImport
} = this.props;
datasImport.excelfile = ids;
datasImport.filelist = list;
}
onUploading(s) {
const {
datasImport
} = this.props;
datasImport.status = s;
}
submit() {
const {
datasImport
} = this.props;
datasImport.saveImport({}, () => {
this.refs.scroll && this.refs.scroll.scrollToLast()
});
}
cancel() {
const {
datasImport,
onClose
} = this.props;
datasImport.visible = false
datasImport.init();
onClose && onClose();
}
importHistoryQuery() {
const {
datasImport
} = this.props;
datasImport.visibleHistory = true;
datasImport.getImportHistory();
}
render() {
const {
datasImport,
mainTitle,
importLog,
viewLog,
viewLogTitle,
} = this.props;
const {
title,
visible,
titleResult,
visibleResult,
importResultColumns,
importProcessLogDatas,
failnum,
succnum,
importResultTip,
importResultStore,
importStatus,
errorInfo,
setScrollRef,
single,
showLoadingSpin,
condition
} = datasImport;
const buttons = condition.length ? [
(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@ip7b32`} type="primary" onClick={() => this.submit()}>{i18n.button.submit()}</Button>),
] : [];
let dialogHeight = window.innerHeight - 150;
if (dialogHeight > 560) dialogHeight = 560;
return (
<div>
{
<WeaDialog ecId={`${this && this.props && this.props.ecId || ''}_WeaDialog@s55z5q`}
title={mainTitle || title}
icon="icon-coms-hrm"
iconBgcolor="#217346"
visible={visible}
closable={true}
onCancel={() => this.cancel()}
buttons={buttons}
style={{ width: 870, height: dialogHeight }}
moreBtn={{
datas: condition ? [{
key: '1',
content: i18n.button.submit(),
icon: <i className='icon-coms-Preservation' />,
onClick: () => this.submit(),
}] : []
}}
>
{condition.length ? (
<Spin ecId={`${this && this.props && this.props.ecId || ''}_Spin@1fvd3j`} spinning={showLoadingSpin}>
<WeaNewScroll ecId={`${this && this.props && this.props.ecId || ''}_WeaNewScroll@2908z2`} height={dialogHeight} ref="scrollBar">
{this.getForm()}
</WeaNewScroll>
</Spin>
) : <div></div>
}
</WeaDialog>
}
</div>
)
}
}