weaver_trunk_cli/pc4mobx/hrm/stores/addressBook.js

915 lines
27 KiB
JavaScript

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 = [
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@7o7ph1@1`} type="primary" op="save" onClick={() => this.saveForm()}>{i18n.button.save()}</Button>,
]
}
if(type==='fieldSettingEdit'){
buttons = [
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@dqxbp5@2`} type="primary" op="save" onClick={() => this.saveTemplate()}>{i18n.button.save()}</Button>,
]
}
if(type==='fieldSetting'){
buttons = [
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@pgk3yo@3`} type="primary" op="export" onClick={() => this.doExport()}>{getLabel('17416',"导出")}</Button>,
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@n6suxv@4`} type="primary" op="save" onClick={() => this.showSaveForm()}>{i18n.button.saveAsTemplate()}</Button>,
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@6opopf@5`} type="primary" op="setting" onClick={() => this.templateManager()}>{getLabel('17857',"模板管理")}</Button>
]
}
buttons.map((btn, index) => {
const {
props
} = btn;
menus.push({
key: index.toString(),
content: props.children,
icon: <i className={this.menuIconCollection[props.op]}/>,
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
});
}
}