import { observable, action, computed } from 'mobx'; import { WeaForm } from 'comsMobx'; import * as API from '../apis/newImport'; import * as Util from '../util/index'; import { validate, getFormParamValue } from '../util' import { message, Modal, Button } from 'antd'; import { WeaTableNew } from 'comsMobx' import * as mobx from 'mobx'; import isEmpty from 'lodash/isEmpty'; import { has } from 'lodash'; const toJS = mobx.toJS; const { TableStore } = WeaTableNew; const confirm = Modal.confirm; import { i18n } from '../public/i18n'; import { findIndex } from 'lodash'; export class NewImportStore { @observable hasRight = ''; @action getHasRight(){ API.getHasRight().then(res => { if(res.code == 200) { this.hasRight = res.data.hasRight; }else { message.warning(res.msg); } },error => { message.warning(error.msg); }) } /********************* cardConfig *********************/ cardConfig = [ { "subTitle": "分部设置", "bgColor": "#92B75B", "icon": "icon-coms-Department-number", "title": "分部", "linkName": "分部导入", "url": "/spa/organization/static/index.html#/main/organization/company" }, { "subTitle": "部门设置", "bgColor": "#92B75B", "icon": "icon-coms-Department-number", "title": "部门", "linkName": "部门导入", "url": "/spa/organization/static/index.html#/main/organization/department" }, // { // "subTitle": "岗位设置", // "bgColor": "#49B2FE", // "icon": "icon-coms-hrm", // "title": "岗位", // "linkName": "岗位体系导入", // "url": "/spa/organization/static/index.html#/main/organization/job" // }, { "subTitle": "组织维护", "bgColor": "#51A39A", "icon": "icon-coms-crm", "title": "人员", "linkName": "人员导入", "url": "/spa/organization/static/index.html#/main/organization/resource" }, { "subTitle": "等级设置", "bgColor": "rgb(230, 168, 69)", "icon": "icon-portal-kpi-o", "title": "职等职级", "linkName": "职等职级导入", "url": "/spa/organization/static/index.html#/main/organization/rankscheme" }, ] @observable isMouseOver = false; @observable curIndex = ''; @observable visible = false; @action setMouseStatus = (index, bool) => { this.curIndex = index; this.isMouseOver = bool; } /********************* stepDialog *********************/ steps = [ { title: '设置导入字段'}, { title: '获取导入模板' }, { title: '导入结果' } ]; @observable importType = ''; @observable current = 0; @observable buttonTitle = ''; @observable pvisable = false; /********************* stepContent *********************/ @observable data = []; @observable selectedKeys = []; selectData = []; @observable condition = []; @observable importParams = {}; //重复验证字段 @observable operateType = 'add'; //导入类型 @observable filelist = []; //文件信息 @observable excelfile = ''; //文件id @observable templetName = "导入模板"; @observable percent = 0; @observable failnum = 0; //失败数量 @observable succnum = 0; //成功数量 @observable importResultTip = ''; //导入结果提示 @observable importResultStore = new TableStore(); @observable importStatus = 'importing'; //导入状态 @observable loading = true; @observable date = ''; @observable keyField = 'workcode'; @observable otherParams; //表单其它参数 @observable pId = '';//导入记录 interval @action setParam = (k, v) => { const p = toJS(this.importParams); Object.assign(p, { [k]: v }); this.importParams = p; } @action("获取导入字段") getImportField() { this.loading = true; const params = { importType:this.importType } API.getImportFields(params).then(res => { if(res.code == 200) { this.data = res.data.data; this.selectedKeys = res.data.selectedKeys; res.data.data && this.selectedKeys.forEach(id => { const index = findIndex(res.data.data, { id }); this.selectData.push(res.data.data[index]) }) this.loading = false; }else { message.warning(res.msg); } },error => { message.warning(error.msg); }) } @action("获取导入表单") getImportForm() { let columns = []; this.selectData.forEach(item => { columns.push(item.name) }) const params = { importType: this.importType, columns:columns } API.getImportForm(params).then(res => { if (res.code == 200) { this.condition = res.data.condition; if (res.data.condition != null && Array.isArray(res.data.condition) && res.data.condition.length > 0) { this.condition[0].items.map(item => { if (item.conditionType === 'SELECT' && item.domkey[0] === 'importType') { item.options.map(op => { if (op.selected) this.operateType = op.key; }) } item.domkey[0].indexOf('keyField') > -1 && this.setParam(item.domkey[0], item.value); }) } } else { message.warning(res.msg); } }, error => { message.warning(error.msg); }) } @action("开始导入") startImport() { if(this.filelist.length == 0) { message.error("请上传需要导入的文件!") this.current = this.current - 1; return; } this.pvisable = true; //导入文件提交 let params = { //keyField:this.keyField, importType:this.importType, operateType:this.operateType, excelfile:this.excelfile, ...this.importParams, } if (this.otherParams != null) { Object.assign(params, { otherParams: JSON.stringify(this.otherParams) }) } this.doImport(params) this.interval = setInterval(() => this.getImportProcess(), 200); } @action("文件提交") doImport(params) { API.saveImport(params).then(res => { if(res.code == 200) { this.pId = res.data.pId; }else { clearInterval(this.interval); this.pvisable = false; message.error("文件导入失败") } }) } // @computed get pId() { // return this.percent = 100; // } @action("获取导入进度") getImportProcess() { if(this.pId != '') { clearInterval(this.interval); this.percent = 100; const _this = this; setTimeout(function(){ _this.pvisable = false; _this.getImportResult(); },1000) }else { //调用导入进度api let max = 95; let min = this.percent; if(this.percent < max) { this.percent = Math.floor(Math.random() * (max - min)) + min; } } } @action("获取导入结果") getImportResult() { let params = { pId:this.pId } API.getImportResult(params).then((res) => { if (res.code == 200) { this.failnum = res.data.failnum; this.succnum = res.data.succnum; this.importStatus = res.data.importStatus; if (this.failnum > 0) { let info = i18n.label.importResourceResultInfo(); info = info.replace('{rownum}', this.succnum + this.failnum).replace('{succnum}', this.succnum); this.importResultTip = info; this.importResultStore.getDatas(res.data.datas, 1); } else { let info = i18n.label.importResourceResultInfo1(); info = info.replace('{rownum}', this.succnum); this.importResultTip = info; } } else { message.warning(res.msg); } }, error => { message.warning(error.msg); }) } setSelectedKeys(keys) { this.selectedKeys = keys; this.date = new Date(); } setSelectData(value){ this.selectData = value; } @action("初始化弹框内容") init() { this.filelist = []; this.excelfile = ''; this.visible = false; this.percent = 0; this.failnum = 0; this.succnum = 0; this.importResultTip = ''; this.importResultStore = new TableStore(); this.importStatus = 'importing'; this.data = []; this.selectData = []; this.selectedKeys = []; this.condition = []; this.keyField = 'workcode'; this.pId = ''; } }