weaver_trunk_cli/pc4mobx/hrm/stores/addressBookPlus.js

801 lines
18 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
observable,
action,
computed,
} from 'mobx';
import {
WeaSelect,
WeaInputSearch,
WeaLocaleProvider,
} from 'ecCom';
import {
WeaForm,
WeaTableNew
} from 'comsMobx';
import {
message,
Button,
} from 'antd';
import {isEmpty} from "lodash";
import Common from './common';
import * as api from '../apis/addressbookPlus';
import * as api2 from '../apis/addressbook';
import classnames from 'classnames';
const getLabel = WeaLocaleProvider.getLabel;
const {
TableStore
} = WeaTableNew;
export default class HrmAddressBookPlus {
constructor(props) {
this.pstore = props;
}
//实例化Common类
@observable share = new Common({
store: this,
api
});
//***********************左侧页签**************************
@observable leftTab = {
selectedKey: '0'
};
get leftTabDatas() {
return {
datas: [{
key: '0',
title: getLabel(25332, '组织结构')
}, {
key: '1',
title: getLabel(81554, '常用组')
}],
keyParam: 'key',
onChange: key => this.clickLeftTab(key),
}
}
@action clickLeftTab = (key) => {
this.leftTab.selectedKey = key;
this.pstore && this.pstore.getSearchList();
}
handleOrgTreeNodeClick = () => {
const {
id
} = this.share.orgTree;
const params = {
groupId: id
};
if (parseInt(id) > 0) {
if (this.pstore) {
this.pstore.form.resetConditionValue();
this.pstore.updateShowSearchAd(false);
this.pstore.tabkey = 'default_3';
this.pstore.getSearchList(params);
}
}
}
//***********************常用组树**************************
ORGTREE = {
...this.share.TREE_ORG,
dataUrl: '/api/hrm/search/getGroupTree'
}
//***********************列表**************************
synclogDetail = '';
get TABLE(){
return {
...this.share.TABLE,
scroll:{
y: 350
}
}
}
/**
* @DateTime 2019-05-15
* @param {Array} columns 生成列表栏目的数据
*/
reRenderColumns = (columns) => {
const clone = this;
columns.map(c => {
if (c.dataIndex === 'operateDesc') {
c.render = function(text, record) {
const {
operateDescspan
} = record;
let id, sql;
if (clone.operateType === 'excel') {
const arr = operateDescspan.split('--');
id = arr[0];
sql = arr[1];
}
const label = (clone.operateType === 'sync') ? getLabel(130277, '查看') : id;
return <a className='hrm-log-query' onClick={()=>clone.viewSyncDetail((clone.operateType === 'sync') ? operateDescspan:sql)}>{label}</a>
}
}
});
}
viewSyncDetail = (operateDesc) => {
this.synclogDetail = operateDesc;
this.openSyncDetailDialog();
}
/**
* @DateTime 2019-05-15
* @param {Object} record 行数据
* @param {String} rIndex 行索引
* @param {Object} operate 行功能
*/
onOperatesClick = (record, rIndex, operate) => {
}
recordExport = (count) => {
const params = {
count
}
api.recordExport(params).then().catch(err => message.error(err))
}
//***********************弹框**************************
//显示列定制
DIALOG_COLSET = {
...this.share.DIALOG_HRM,
icon: 'icon-coms-Flow-setting',
onCancel: this.closeColsetDialog,
style: {
width: 720,
height: 500
}
}
//同步日志、导出日志
DIALOG_SYNCLOG = {
...this.share.DIALOG_HRM,
icon: 'icon-coms-Flow-setting',
onCancel: this.closeSynclogDialog,
style: {
width: 700,
height: 480
}
}
//同步日志详情
DIALOG_SYNCLOG_DETAIL = {
...this.share.DIALOG_HRM,
icon: 'icon-coms-Flow-setting',
onCancel: this.closeSyncDetailDialog,
style: {
width: 650,
height: 450
}
}
@computed get colsetDialogTitle() {
if (this.isColsetDialog) {
return getLabel('32535', '显示列定制');
} else {
return getLabel('534085','默认排序设置') ;
}
}
@computed get synclogTitle() {
if (this.operateType === 'sync') {
return getLabel('508025', '同步日志');
} else {
return getLabel('506976', '日志');
}
}
get syncDetailTitle() {
return `${getLabel(506968,'同步')}-${getLabel(1515,'通讯录')}: ${getLabel(508022,'显示列')}`
}
@observable colsetDialog = {
visible: false,
loading: true,
}
@observable synclogDialog = {
visible: false,
}
@observable syncDetailDialog = {
visible: false,
}
@observable operateType = '';
//是否是显示列定制弹框(用来区分显示列定制弹框和默认排序设置弹框)
@observable isColsetDialog = true;
/**
* @DateTime 2019-06-04
* 概述:打开显示列定制或默认排序设置弹框
* @param {[String]} type [标识]
*/
@action openColsetDialog = (type) => {
this.colsetDialog.visible = true;
this.isColsetDialog = (type === 'colset');
if (type === 'colset') {
} else {
this.callTransferApi();
}
this.callSyncRightApi();
}
@action closeColsetDialog = () => {
this.colsetDialog.visible = false;
this.colsetDialog.loading = true;
}
@action openSynclogDialog = (operateType) => {
this.synclogDialog.visible = true;
this.operateType = operateType;
const callback = params => {
const _params = Object.assign({}, {
...params,
operateItem: 507,
operateType,
});
this.share.callSearchListAPI(_params, '', 'getHrmSearchLogList');
}
this.share.callSearchConditionAPI(callback, {}, 'getSearchConditionOfLog');
}
@action closeSynclogDialog = () => {
this.synclogDialog.visible = false;
}
@action openSyncDetailDialog = () => {
this.syncDetailDialog.visible = true;
}
@action closeSyncDetailDialog = () => {
this.syncDetailDialog.visible = false;
}
@computed get colsetDialogButtons() {
const disabled = this.colsetDialog.loading;
const buttons = [<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@eamjp8@1`} type='primary' disabled={disabled} onClick={this.isColsetDialog? this.saveColset:this.saveDefaultSortSetting}>{getLabel(86,'保存')}</Button>];
if (this.hasSyncRight) {
buttons.push(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@erdymv@2`} type='primary' disabled={disabled} onClick={this.showConfirm}>{getLabel('534086','同步到所有人') }</Button>);
}
return buttons;
}
@computed get colsetDialogMoreBtn() {
const datas = [];
const disabled = this.colsetDialog.loading;
datas.push({
key: "0",
disabled,
icon: <i className="icon-coms-Save-as" />,
content: getLabel(86, '保存'),
onClick: this.saveColset
});
if (this.hasSyncRight) {
const syncMenus = [{
key: "1",
disabled,
icon: <i className="icon-coms-synchronization" />,
content: getLabel('534086','同步到所有人') ,
onClick: this.showConfirm
}];
if (this.isColsetDialog) {
syncMenus.push({
key: "2",
disabled,
icon: <i className="icon-coms-Print-log" />,
content: getLabel(508025, '同步日志'),
onClick: this.syncLog
})
}
syncMenus.forEach(menu => datas.push(menu));
}
return {
datas
};
}
@computed get sortSettingParams() {
const {
selectedKeys,
data
} = this.transfer;
const params = [];
selectedKeys.forEach(id => {
const item = data.find(item => item.id === id);
const {
dataIndex,
ascOrDesc
} = item;
params.push({
dataIndex,
ascOrDesc,
});
});
return {
destdatas: JSON.stringify(params)
};
}
/**
* @DateTime 2019-06-03
* 概述:保存列定制数据
*/
saveColset = () => {
const params = {
dataKey: this.dataKey,
systemIds: this.transfer.selectedKeys.toString()
};
this.colsetDialog.loading = true;
api.saveColset(params).then(datas => {
const {
status
} = datas;
if (status) {
this.closeColsetDialog();
this.pstore.getSearchList();
this.colsetDialog.loading = false;
}
}).catch(err => message.error(err))
}
/**
* @DateTime 2019-06-05
* 概述:保存默认排序设置数据
*/
saveDefaultSortSetting = () => {
api.saveOrderBy4Search(this.sortSettingParams).then(datas => {
const {
status
} = datas;
if (status) {
this.closeColsetDialog();
this.pstore.getSearchList();
}
}).catch(err => message.error(err))
}
showConfirm = () => {
if (this.isColsetDialog) {
this.share.showConfirm(getLabel(-1, '只能同步基本信息字段,且同步将影响所有人查询人员列表的显示,确定继续吗?'), this.syncColset);
}else{
this.share.showConfirm(getLabel(-1, '同步将影响所有人通讯录列表的显示,确定继续吗?'), this.syncSortset);
}
}
/**
* @DateTime 2019-06-03
* 概述:同步列定制数据
*/
syncColset = () => {
const params = {
dataKey: this.dataKey,
systemIds: this.transfer.selectedKeys.toString()
}
this.colsetDialog.loading = true;
api.syncColset(params).then(datas => {
const {
status
} = datas;
if (status) {
this.closeColsetDialog();
this.pstore.getSearchList();
} else {
message.error(datas.message);
}
this.colsetDialog.loading = false;
}).catch(err => message.error(err))
}
//同步默认排序设置
syncSortset = () => {
api.syncOrderBy2All(this.sortSettingParams).then(datas => {
const {
status
} = datas;
if (status) {
this.closeColsetDialog();
this.pstore.getSearchList();
} else {
message.error(datas.message);
}
this.colsetDialog.loading = false;
})
}
/**
* @DateTime 2019-06-04
* 概述:同步日志事件回调
*/
syncLog = () => {
this.openSynclogDialog('sync');
}
//***********************穿梭框**************************
get TRANSFER() {
return {
className: 'hrm-col-set-transfer',
leftHeader: this.renderHeader('left'),
rightHeader: this.renderHeader('right'),
filterLeft: datas => this.filter(datas, 'left'),
filterRight: datas => this.filter(datas, 'right'),
renderItem: item => this.renderItem(item),
renderRight: this.isColsetDialog ? '' : item => this.renderRight(item),
onChange: keys => this.onTransferChange(keys),
}
}
@observable transfer = {
data: [],
selectedKeys: [],
}
@observable select = {
value: 'all',
options: []
}
@action onSelectChange = (value) => {
this.select.value = value;
}
@observable leftSearchValue = '';
@observable rightSearchValue = '';
//是否有同步所有人的权限
@observable hasSyncRight = false;
/**
* @DateTime 2019-06-01
* 概述渲染transfer组件的头部
* 有同步定制列权限的人才会有类别下拉框
* @param {[String]} type [区别穿梭框的左边还是右边]
* @return {[React.element]}
*/
renderHeader(type) {
const hasSelect = (type === 'left' && this.isColsetDialog&& this.hasSyncRight);
const cls = classnames({
'header-left': true,
'colset': hasSelect,
});
return (
<div className='header'>
<span className={cls} >
{type === 'left' ? getLabel('385971', "待选列名") : getLabel('385972', "已选列名")}
</span>
{
hasSelect &&
<WeaSelect ecId={`${this && this.props && this.props.ecId || ''}_WeaSelect@mx3aea`}
{...this.select}
onChange={val=>this.onSelectChange(val)}
style={{width:90,marginLeft:10}}
/>
}
<WeaInputSearch ecId={`${this && this.props && this.props.ecId || ''}_WeaInputSearch@k28us4`}
style={{width: 100, float: 'right', margin: '5px 10px 5px 0px'}}
value={type === 'left'?this.leftSearchValue:this.rightSearchValue}
onSearchChange={val=>this.onInputSearchChange(val,type)}
/>
</div>
)
}
/**
* @DateTime 2019-06-01
* 概述transfer搜索框事件回调函数
* @param {[String]} val [搜索框内输入的值]
* @param {[String]} type [区别穿梭框的左边还是右边]
*/
@action onInputSearchChange = (val, type) => {
if (type === 'left') {
this.leftSearchValue = val
} else {
this.rightSearchValue = val;
}
}
/**
* @DateTime 2019-06-01
* 概述过滤transfer左右侧的数据
* @param {[Array]} datas [transfer左右侧的数据过滤前]
* @param {[String]} type [区分左右侧]
* @return {[Array]} [过滤后的数据]
*/
filter = (datas, type) => {
if (type === 'left') {
const {
value
} = this.select;
const searchVal = this.leftSearchValue.trim();
//根据搜索条件过滤
const searchFilter = datas.filter(data => data.name.indexOf(searchVal) > -1);
if (!this.isColsetDialog) {
return searchFilter;
}
if (value === 'all') {
return searchFilter;
} else { //下拉框选项不为【全部】时,根据下拉选项再进行一轮过滤
return searchFilter.filter(data => data.group === value);
}
} else {
//只根据搜索条件过滤
const searchVal = this.rightSearchValue.trim();
return datas.filter(data => data.name.indexOf(searchVal) > -1);
}
}
/**
* @DateTime 2019-06-01
* 概述渲染transfer栏目
* @param {[Object]} item [栏目数据]
* @return {[Element]}
*/
renderItem = (item) => {
const {options} = this.select;
const option =options && options.find(option => option.key === item.group);
return (
<div className='hrm-transfer-item'>
<div>
{item.name}
</div>
<div className="transfer-item-type">{option && option.showname}</div>
</div>
)
}
/**
* @DateTime 2019-06-04
* 概述渲染transfer右侧栏目
* @param {[Object]} item [栏目数据]
* @return {[Element]}
*/
renderRight = (item) => {
const {
name,
sort,
ascOrDesc,
id,
} = item;
const lbl = (ascOrDesc === 'ASC') ? getLabel('534084','正序') : getLabel('21604','倒序');
return (
<div className='hrm-transfer-item'>
<span className='name'>{name}</span>
<span className='ascOrDesc' onDoubleClick={e=>this.share.stopBubble(e)} onClick={event=>this.onAscDescClick(event,id)}>{lbl}</span>
</div>
)
}
/**
* @DateTime 2019-06-05
* 概述:点击正序、倒序的事件回调
* @param {[Object]} event
* @param {[String]} id [当前栏目的标识]
*/
@action onAscDescClick = (event, id) => {
this.share.stopBubble(event);
const {
data
} = this.transfer;
data.forEach(item => {
if (item.id === id) {
item.ascOrDesc = (item.ascOrDesc === 'ASC') ? 'DESC' : 'ASC';
}
});
}
/**
* @DateTime 2019-06-01
* 概述transfer栏目事件回调函数
* @param {[Array]} keys [选中栏目标识]
*/
@action onTransferChange = (keys) => {
this.transfer.selectedKeys = keys
}
/**
* @DateTime 2019-06-03
* 概述:获取显示列定制或默认排序设置的数据
*/
@action callTransferApi = () => {
let params, name;
if (this.isColsetDialog) {
params = {
dataKey: this.dataKey,
}
name = 'getShowCol';
} else {
name = 'getOrderBy4Search'
}
this.reset();
api[name](params).then(datas => {
const {
srcdatas,
destdatas,
options,
groupInfo,
} = datas;
this.transfer.data = this.convertSrcDatas([...srcdatas, ...destdatas]);
this.transfer.selectedKeys = this.convertDestdatas(destdatas);
this.select.options = !isEmpty(options) ? options : groupInfo ;
this.colsetDialog.loading = false;
});
}
/**
* @DateTime 2019-06-04
* 概述:过滤列数据
* @param {[Array]} datas [列数据]
* @return {[Array]} [过滤后的数据]
*/
convertSrcDatas = (datas) => {
const transferDatas = [];
if (this.isColsetDialog) {
datas.forEach(data => {
const {
dataIndex,
title,
group
} = data;
transferDatas.push({
id: dataIndex,
name: title,
group
});
})
} else {
datas.forEach(data => {
const {
labelId,
title,
sort,
ascOrDesc,
dataIndex,
} = data;
transferDatas.push({
id: labelId,
name: title,
sort,
ascOrDesc,
dataIndex,
});
})
}
return transferDatas;
}
/**
* @DateTime 2019-06-04
* 概述获取已选列名dataIndex值的集合
* @param {[Array]} datas [已选列的数据]
* @return {[Array]} [dataIndex值的集合]
*/
convertDestdatas = (datas) => {
const transferKeys = [];
if (this.isColsetDialog) {
datas.forEach(data => {
const {
dataIndex
} = data;
transferKeys.push(dataIndex);
});
} else {
datas.forEach(data => {
const {
labelId
} = data;
transferKeys.push(labelId);
});
}
return transferKeys;
}
/**
* @DateTime 2019-06-03
* 概述:获取是否有同步权限
*/
@action callSyncRightApi = () => {
api.getSyncRight().then(datas => {
const {
canEditBasicInfo
} = datas;
this.hasSyncRight = canEditBasicInfo;
this.callTransferApi();
});
}
reset() {
this.leftSearchValue = '';
this.rightSearchValue = '';
}
//***********************高级搜索**************************
get SEARCH_SYNCLOG() {
return {
...this.share.SEARCH,
advanceHeight: 165,
searchType: ['advanced'],
}
}
getSearchListParams = () => {
return {
...this.share.tab.form.getFormParams(),
operateItem: 507,
operateType: this.operateType
};
}
getSearchListCallback = () => {
return '';
}
getSearchListName = () => {
return 'getHrmSearchLogList';
}
dataKey = '';
/**
* @DateTime 2019-06-03
* 概述设置dataKey
* @param {[String]} dataKey
*/
setDataKey = (dataKey) => {
this.dataKey = dataKey;
}
@observable form = new WeaForm();
initColset = () => {
const getDataKey = async (thisObj)=>{
const commonParams = {mouldid: "default_3"};
const {defaultcondition} =await api2.getSearchCondition(commonParams);
thisObj.form.initFormFields(defaultcondition);
const formParams = thisObj.form.getFormParams();
const datas = await api2.getSearchList({...formParams,...commonParams});
return datas.sessionkey;
}
getDataKey(this).then(dataKey => {
this.isColsetDialog = true;
this.dataKey = dataKey;
this.callTransferApi();
this.callSyncRightApi();
})
}
}