import { observable, action, computed, } from 'mobx'; import * as Util from '../util/index'; import {WeaTableNew, WeaForm} from 'comsMobx' const {TableStore} = WeaTableNew; import {Modal,message} from 'antd' const confirm = Modal.confirm; import cloneDeep from 'lodash/cloneDeep'; import remove from 'lodash/remove'; import isEmpty from 'lodash/isEmpty' import * as API from '../apis/addressbook'; import datas from './data'; import { toJS } from 'mobx'; import {i18n} from '../public/i18n'; import { WeaLocaleProvider, WeaTools } from 'ecCom'; import {Button} from 'antd'; import HrmBaseStore from './baseStore'; import {has} from 'lodash'; const getLabel = WeaLocaleProvider.getLabel; import HrmAddressBookPlus from './addressBookPlus'; export class HrmAddressBook extends HrmBaseStore{ @observable hrmAddressBookPlus = new HrmAddressBookPlus(this); title = i18n.module.addressBook; @observable form = new WeaForm() @observable table = new TableStore(); @observable dataKey = '' @observable tabs = [] @observable tabkey = 'default_3' @observable showSearchAd = false @observable visible1 = false @observable visible2 = false @observable templeteValue = '' @observable conditioninfo = [] @observable conditioninfoAll = [] @observable showAllCondition = false @observable transferDatas = [] @observable transferOptions = [] @observable transferKeys = [] @observable transferleftIptVal = '' @observable transferRightIptVal = '' @observable transferSelectedKey = '0' @observable showAllLevel = true; @observable rightMenus = [] @observable defaultShowLeft = false; @observable searchFrom = ''; @observable searchKeyWord = ''; // @observable subcompanyid1 = ''; // @observable departmentid = ''; @observable virtualtype = ''; @observable companysId = '1'; searchParams; @action getRightMenuConfig = () => { API.getRightMenuConfig().then(data=>{ if (data.status == '1') { this.rightMenus = data.rightMenus; this.defaultShowLeft = data.defaultShowLeft; } else { message.warning(data.message); } }, error=> { message.warning(error.message); }) } changeShowAllLevel = () => { this.showAllLevel = !this.showAllLevel; if (this.tabkey !== 'default_2') { let params; if (this.nodeType === '1') { params = { subcompanyid1: this.subcompanyid1 } } if (this.nodeType === '2') { params = { departmentid: this.departmentid } } this.getData(params); } else { this.getData(); } } updateTransferleftIptVal = (v) => { this.transferleftIptVal = v; } updateTransferRightptVal = (v) => { this.transferRightIptVal = v; } updateTransferSelectedKey = (v) => { this.transferSelectedKey = v; } updateTransferKeys = (v) => { this.transferKeys = v; } updateShowAllCondition = (v) => { this.showAllCondition = v; this.form = new WeaForm(); if(this.showAllCondition){ this.form.initFormFields(this.conditioninfoAll); }else{ this.form.initFormFields(this.conditioninfo); } } updateTempleteValue = (v) => { this.templeteValue = v; } updateVisible1 = (bool) => { this.visible1 = bool; } updateVisible2 = (bool) => { this.visible2 = bool; } updateTabkey = (key) => { this.tabkey = key; this.showAllLevel = false; this.searchFrom = ''; this.searchKeyWord = ''; this.getData(); } saveTemplete = () => { let __this = this; let templeteValue = this.templeteValue ||''; if(templeteValue==''){ message.error(i18n.message.requireFieldNone()); return; } let params = this.form.getFormParams(); params.opera = "insert"; params.mouldname = templeteValue; API.saveHrmSearchCondition(params).then(data=>{ if (data.status == '1') { let tabkey = data.id; __this.updateTabkey(tabkey); __this.updateVisible2(!this.visible2); __this.updateTempleteValue(''); __this.updateShowSearchAd(false); message.success(i18n.message.saveSuccess()); } else { message.error(data.message); } }, error=> { message.error(error.message); }) } saveHrmSearchUserDefine = () => { let __this = this; let params = {}; !isEmpty(toJS(this.transferKeys)) && toJS(this.transferKeys).forEach(c => { if(c.endsWith("select"))c=c.replace("select",""); let paramName = "has"+c; params[paramName] = '1'; }); API.saveHrmSearchUserDefine(params).then(data=>{ if (data.status == '1') { __this.updateVisible1(!this.visible1); __this.updateShowSearchAd(false); __this.getConditions(); message.success(i18n.message.saveSuccess()); } else { message.error(data.message); } }, error=> { message.error(error.message); }) } getTabs = () => { let params = {}; params.virtualtype = this.virtualtype; API.getHrmSearchMoudleList(params).then(data=>{ if (data.status == '1') { this.tabs=data.tabs; } else { message.warning(data.message); } }, error=> { message.warning(error.message); }) } deleteTabs = (params={}) => { let __this = this; confirm({ title: i18n.confirm.systemhints(), content: i18n.confirm.remove(), onOk(){ API.saveHrmSearchCondition(params).then(data=>{ if (data.status == '1') { __this.updateTabkey('default_3'); message.success(i18n.message.deleteSuccess()); } else { message.warning(data.message); } }, error=> { message.warning(error.message); }) }, onCancel(){}, }); } formatTransfer= () => { const transferDatas = [] const transferKeys = [] const transferOptions = [ {key: "", showname: ""}] this.transferSelectedKey = '0'; this.transferleftIptVal = ''; this.transferRightIptVal = ''; !isEmpty(toJS(this.conditioninfoAll)) && toJS(this.conditioninfoAll).forEach((c, idx)=> { transferOptions.push({ key: `${idx}`, showname: c.title, }) c.items.forEach((i)=> { transferDatas.push({ id: i.domkey[0], label: i.label, title: c.title, idx: `${idx}` }) }) }) !isEmpty(toJS(this.conditioninfo)) && toJS(this.conditioninfo).forEach((c, idx)=> { c.items.forEach((i)=> { transferKeys.push(i.domkey[0]); }) }) this.transferDatas = transferDatas; this.transferKeys = transferKeys; this.transferOptions = transferOptions; } getConditions = (cb) => { let params = {}; params.mouldid = this.tabkey||'default_3'; this.form = new WeaForm(); this.showAllCondition=false; API.getSearchCondition(params).then((data) => { this.conditioninfoAll = data.condition; this.conditioninfo = data.defaultcondition||[]; if(isEmpty(this.conditioninfo)){ let c = cloneDeep(data.condition) c[0].title = i18n.label.commonConditions(); this.conditioninfo = [c[0]]; } this.form.initFormFields(this.conditioninfo); if(this.searchFrom=='quickSearch'){ this.tabkey = 'default_3'; this.form.updateFields({ resourcename:{name:'resourcename',value:this.searchKeyWord}, }); } this.showAllCondition = false; cb && cb(); }); } @action getSearchList = (params = {}) => { const obj = {}; let formParams = this.form.getFormParams(); if(typeof(params) == 'string') params = {}; params.tabkey = this.tabkey || 'default_3'; params.showAllLevel = this.showAllLevel?'1':'0'; params.virtualtype = this.virtualtype ? this.virtualtype : params.virtualtype; params = {...params,...formParams} this.searchParams = params; this.table = new TableStore(); API.getSearchList(params).then(action(data => { if (!data.sessionkey) return; this.table.setSelectedRowKeys([]); this.table.getDatas(data.sessionkey,1); this.dataKey = data.sessionkey; this.hrmAddressBookPlus.setDataKey(data.sessionkey); })) } updateShowSearchAd = (bool) => { this.showSearchAd = bool; } exportExcel = async () => { if(window.setShare4ec){ window.setShare4ec({mouldCode: 'HRM', itemCode: 'ADDRESSBOOK', encrypt: '1'}, this.exportFile); }else{ this.exportFile({status: '1'}); } } exportFile = (data = {}) => { if(data.status == '1'){ this.table.exportAll('',i18n.module.addressBook(), {sharepassword: data.sharepassword}); this.hrmAddressBookPlus.recordExport(this.table.count); } } subcompanyid1; departmentid; nodeType; doSearch = (params = {}) => { this.subcompanyid1 = params.subcompanyid1; this.departmentid = params.departmentid; this.table.tableUpdate({datas:[]}); this.updateShowSearchAd(false); this.getSearchList(params); } reSearch = (params = {}) => { this.form.reset(); this.updateShowSearchAd(true); } getData = (params = {}) => { this.table.tableUpdate({datas:[]}); this.getTabs(); this.getConditions(()=> { this.getSearchList(params); }); // if(this.tabkey=='default_1'||this.tabkey=='default_2'||this.tabkey=='default_3'){ // this.getConditions(); // this.getSearchList(); // }else{ // this.getConditions(()=> { // this.getSearchList(); // }); // } } //导出excel @observable spinning = false; @observable templates = []; @observable filterLeft = '';//left head searchKey @observable filterRight = '';//rightt head searchKey @observable _filterLeft = '';//left head searchKey @observable _filterRight = '';//rightt head searchKey selectedKeys = [];//transfer selectedKeys _selectedKeys = []; fields = [];//all column fields @observable realPath = { depRealPath: '0', subCompRealPath: '0' } @observable _realPath = { depRealPath: '0', subCompRealPath: '0' } @observable keyfield = '1'; @observable _keyfield = '1'; @observable refreshTransfer = new Date().getTime(); @observable templateStore = new TableStore(); @observable fieldSettingDialogParams = { key: new Date().getTime(), visible: false, moduleName: 'hrm', title: `${getLabel(17416,'导出')}${getLabel(261,'字段')}${getLabel(68,'设置')}`, onCancel: () => this.fieldSettingDialogParams.visible = false, style: { width: 720, height: 520 }, className: 'exportSetting', } @observable fieldSettingEditDialogParams = { key: new Date().getTime(), visible: false, moduleName: 'hrm', title: getLabel(508026,'导出字段设置'), onCancel: () => this.fieldSettingEditDialogParams.visible = false, style: { width: 720, height: 520 }, className: 'exportSetting', } @observable saveFormDialogParams = { key: new Date().getTime(), visible: false, moduleName: 'hrm', title: '存为模板', onCancel: () => this.saveFormDialogParams.visible = false, style: { width: 400, height: 80 }, className: 'formSetting', } @observable editDialogParams = { key: new Date().getTime(), visible: false, moduleName: 'hrm', title: getLabel(508020,'导出模板管理'), onCancel: () => { this.editDialogParams.visible = false; this.initExportSetting(); }, style: { width: 600, height: 520 }, className: 'edit', } @observable selectedTemplate = '0'; selectedGroup = '0'; _selectedGroup = '0'; selectOptions = [{ key: '0', selected: true, showname: '全部' }]; getSaveTemplateForm = () => [{ "title": "基本信息", "defaultshow": true, "items": [{ "colSpan": 2, "conditionType": "INPUT", "detailtype": 1, "domkey": ["name"], "fieldcol": 12, "isQuickSearch": false, "label": getLabel('388384',"导出模板名称"), rules: "required|string", "labelcol": 6, "precision": 0, "viewAttr": 3, otherParams: { ...window.inputType } }] }] @action getDialogBtn = (type) => { let buttons = [], menus = []; if(type ==='form'){ buttons = [ , ] } if(type==='fieldSettingEdit'){ buttons = [ , ] } if(type==='fieldSetting'){ buttons = [ , , ] } buttons.map((btn, index) => { const { props } = btn; menus.push({ key: index.toString(), content: props.children, icon: , onClick: props.onClick }); }) return {buttons, menus}; } @action setSelectedKeys = (keys) => { this.selectedKeys = keys; this.refreshTransfer = new Date().getTime(); } @action getDisplayColumns = () => { this.timer = setInterval(() => { const {columns} = this.toJS(this.table); if(columns.length > 0){ clearInterval(this.timer); let keys = []; columns.map(c => { if(c.dataIndex != 'id' && c.dataIdex != 'randomFieldId' && c.display === 'true') keys.push(c.dataIndex); }); this.realPath.depRealPath = '0'; this.realPath.subCompRealPath = '0'; this.keyfield = '1'; this.setSelectedKeys(keys); } }, 100); } @action loadTemplateFields = (key) => { this.selectedTemplate = key; if(key === '-1'){ this.setSelectedKeys([]); this.realPath.depRealPath = '0'; this.realPath.subCompRealPath = '0'; this.keyfield = '1'; }else if(key === '0'){ this.getDisplayColumns(); }else if(this.templates && this.templates.length > 0){ this.realPath.depRealPath = this.templates[this.selectedTemplate].depRealPath.toString(); this.realPath.subCompRealPath = this.templates[this.selectedTemplate].subCompRealPath.toString(); this.keyfield = this.templates[this.selectedTemplate].keyfield.toString(); this.setSelectedKeys(this.templates[this.selectedTemplate].fields.split(',')); } } @action onTransChange = (keys, datas) => { this.selectedKeys = keys; } @action _onTransChange = (keys, datas) => { this._selectedKeys = keys; } @action searchField = (t, left = true) => { if(left) this.filterLeft = t; else this.filterRight = t; } @action _searchField = (t, left = true) => { if(left) this._filterLeft = t; else this._filterRight = t; } @action clearState = () => { this.saveFormTitle = ''; this.selectedKeys.length = 0; this.fields.length = 0; this.selectedGroup = '0'; this.selectedTemplate = '0'; this.filterLeft = ''; this.filterRight = ''; this.selectOptions.splice(1, this.selectOptions.length); this.selectOptions[0].showname = getLabel(82857, '全部'); } @action initExportSetting = () => { this.spinning = true; this.clearState(); API.initExportSetting().then(rs => { rs.map((data, index) => { if (data.status === '1') { switch (index) { case 0: data.conditions.map((group, idx) => { this.selectOptions.push({ key: (idx + 1).toString(), selected: false, showname: group.title }); group.items.map(f => { this.fields.push({ id: f.fieldname, name: f.fieldlabel, gName: group.title }) }) }) break; case 1: this.templates = data.items; this.getDisplayColumns(); break; } } }); this.spinning = false; this.fieldSettingDialogParams.visible = true; }, error => this.spinning = false) } @action setRealPath = (isDepartment, v) => { // if(isDepartment) this.realPath.depRealPath = v; // else this.realPath.subCompRealPath = v; } @action _setRealPath = (isDepartment, v) => { // if(isDepartment) this._realPath.depRealPath = v; // else this._realPath.subCompRealPath = v; } @action setKeyField = (v) => this.keyfield = v; @action _setKeyField = (v) => this._keyfield = v; @action setSelectedGroup = (v) => this.selectedGroup = v; @action _setSelectedGroup = (v) => this._selectedGroup = v; @action getSelectedGroup = (v) => this.selectOptions[this.selectedGroup]; @action _getSelectedGroup = (v) => this.selectOptions[this._selectedGroup]; @action getTransferData = () => this.fields; @action showSaveForm = (saveAs = false) => { if(this.spinning) return; if(this.selectedKeys.length === 0){ message.error(getLabel('388383',"请选择导出字段")); return; } this.setFormData('saveForm', this.getSaveTemplateForm()); if(this.formTarget.saveForm.isFormInit){ this.saveFormDialogParams.visible = true; this.saveFormDialogParams.key = new Date().getTime(); } } @action saveForm = () => { if(this.spinning) return; this.formTarget.saveForm.validateForm().then(f => { if (f.isValid) { this.saveFormDialogParams.visible = false; this.spinning = true; const formParams = this.formTarget.saveForm.getFormParams(); const params = { ...formParams } let apiFuc; if(this.saveAsId != ''){ Object.assign(params, {id: this.saveAsId}); apiFuc = API.saveAs; }else{ if (this.fieldSettingEditDialogParams.visible) { Object.assign(params, { fields: this._selectedKeys.join(","), ...this._realPath, keyfield: this._keyfield }); }else{ Object.assign(params, { fields: this.selectedKeys.join(","), ...this.realPath, keyfield: this.keyfield }); } apiFuc = API.saveTemplate; } apiFuc(params).then(data => { if(data.status === '1'){ this.saveAsId = ''; message.success(i18n.message.saveSuccess()); if(this.editDialogParams.visible){ this.loadTemplateTable(); this.fieldSettingEditDialogParams.visible = false; }else{ API.getTemplate().then(data => { if(data.status === '1'){ this.templates = data.items; this.selectedTemplate = (this.templates.length - 1).toString(); this.realPath.depRealPath = this.templates[this.selectedTemplate].depRealPath.toString(); this.realPath.subCompRealPath = this.templates[this.selectedTemplate].subCompRealPath.toString(); this.keyfield = this.templates[this.selectedTemplate].keyfield.toString();; this.setSelectedKeys(this.templates[this.selectedTemplate].fields.split(',')); } }) } }else{ message.error(data.message); } this.spinning = false; }, error => { this.spinning = false; message.error(i18n.message.actionError()) }); } else { f.showErrors(); this.showError = new Date().getTime(); } }) } @action templateManager = () => { if(this.spinning) return; this.loadTemplateTable(() => { this.editDialogParams.visible = true; // this.fieldSettingDialogParams.visible = false; }); } @action loadTemplateTable = (callback, paramas) => { API.getTemplateTable(paramas).then(data => { if(data.status === "1"){ this.templateStore = new TableStore(); this.templateStore.getDatas(data.sessionkey); callback && callback(); } }) } @action doExport = () => { if(this.spinning) return; this.spinning = true; let params = {...this.searchParams}; let arr = []; if(this.realPath.depRealPath === '1') arr.push('department'); if(this.realPath.subCompRealPath === '1') arr.push('subcompany'); params.needRealPath = arr.join(','); params.keyfield = this.keyfield; API.getSearchList(params).then((data) => { if(data.sessionkey != null || data.sessionkey != ''){ let keys = cloneDeep(this.selectedKeys); let arr = []; // ['subcompanyid1', 'departmentid'].map(key => { // if(this.selectedKeys.indexOf(key) > -1){ // arr.push(key); // remove(keys, k => k === key); // } // }); arr = arr.concat(keys); let fields = arr.join(','); if(window.setShare4ec){ window.setShare4ec({mouldCode: 'HRM', itemCode: 'ADDRESSBOOK', encrypt: '1'}, d => { if(d.status == '1'){ this.hrmAddressBookPlus.recordExport(this.table.count); this.table.exportAll('',i18n.module.addressBook(), {dataKey: data.sessionkey, fields, sharepassword: d.sharepassword}); } }); }else{ this.hrmAddressBookPlus.recordExport(this.table.count); this.table.exportAll('',i18n.module.addressBook(), {dataKey: data.sessionkey, fields}); } // const downloadUrl='/api/ec/dev/table/export'; // let formElement = document.createElement('form'); // formElement.style.display = "display:none;"; // formElement.method = 'post'; // formElement.action = downloadUrl; // let inputElement = document.createElement('input'); // inputElement.type = 'hidden'; // inputElement.name = "dataKey" ; // inputElement.value = data.sessionkey; // formElement.appendChild(inputElement); // inputElement = document.createElement('input'); // inputElement.type = 'hidden'; // inputElement.name = "fields" ; // inputElement.value = fields; // formElement.appendChild(inputElement); // inputElement = document.createElement('input'); // inputElement.type = 'hidden'; // inputElement.name = "filename" ; // inputElement.value = i18n.module.addressBook(); // formElement.appendChild(inputElement); // document.body.appendChild(formElement); // formElement.submit(); // document.body.removeChild(formElement); // const p = {dataKey: data.sessionkey, fields}; // API.exportExcel(p).then(data => { // if(data.status && data.url != null && data.url.length > 0){ // const [arrurl, arrdata] = data.url.split('?'); // const [key, val] = arrdata.split('='); // WeaTools.downloadFile(arrurl, "GET",{[key]:val}); // this.hrmAddressBookPlus.recordExport(this.table.count); // }else{ // } // this.spinning = false; // }, error => { // this.spinning = false; // message.error(i18n.message.actionError()) // }) this.spinning = false; }else{ this.spinning = false; message.error(i18n.message.actionError()); } }, error => { this.spinning = false; message.error(i18n.message.actionError()) }); } editTarget; @action editTemplate = (record) => { this.editTarget = record; if(record != null){ this._selectedKeys = record.fields.split(','); this._realPath.depRealPath = record.deprealpath.toString(); this._realPath.subCompRealPath = record.subcomprealpath.toString(); this._keyfield = record.keyfield.toString(); }else{ this._selectedKeys = []; this._realPath.depRealPath = '0'; this._realPath.subCompRealPath = '0'; this._keyfield = '1'; } this.fieldSettingEditDialogParams.key = new Date().getTime(); this.fieldSettingEditDialogParams.visible = true; } @computed get showGroup(){ return !this.editDialogParams.visible; } @computed get multiDelete(){ return this.templateStore.selectedRowKeys.length === 0; } @action saveTemplate = () => { if(this.editTarget != null){ if(this._selectedKeys.length === 0){ message.error(getLabel('388383',"请选择导出字段")); return; } const params = { fields: this._selectedKeys.join(","), ...this._realPath, keyfield: this._keyfield, id: this.editTarget.id, name: this.editTarget.name } API.saveTemplate(params).then(data => { if(data.status === '1'){ message.success(i18n.message.saveSuccess()); this.loadTemplateTable(); this.fieldSettingEditDialogParams.visible = false; }else{ message.error(data.message); } }, error => message.error(i18n.message.actionError())); }else{ this.showSaveForm(); } } saveAsId = ''; @action saveAs = (id) => { this.saveAsId = id; this.setFormData('saveForm', this.getSaveTemplateForm()); if(this.formTarget.saveForm.isFormInit){ this.saveFormDialogParams.visible = true; this.saveFormDialogParams.key = new Date().getTime(); } } @action deleteTemplate = (params) => { let content; if(has(params, 'id')){ content = i18n.confirm.delete(); }else{ content = i18n.confirm.batchDeleteConfirm(); params = {id: this.templateStore.selectedRowKeys.join(',')} } this.confirmInfo({ content, onOk: () => { API.deleteTemplate(params).then(data => { if(data.status === '1'){ message.success(i18n.message.deleteSuccess()); this.loadTemplateTable(); }else{ message.error(data.message); } }, error => message.error(i18n.message.actionError())); } }); } selectVirtual(v) { this.virtualtype=v; this.companysId = v; } onTemplateSearchChange=(value)=>{ this.loadTemplateTable('',{ name:value }); } }