weaver_trunk_cli/pc4mobx/hrm/stores/common.js

482 lines
11 KiB
JavaScript
Raw Normal View History

2024-12-11 15:32:14 +08:00
import {
observable,
action,
computed,
} from 'mobx';
import {
WeaDropdown,
WeaLocaleProvider,
} from 'ecCom';
import {
WeaForm,
WeaTableNew
} from 'comsMobx';
import {
Button,
} from 'antd';
const getLabel = WeaLocaleProvider.getLabel;
const {
TableStore
} = WeaTableNew;
const {
ButtonSelect
} = WeaDropdown;
import Base from './base';
export default class Common extends Base {
constructor(props) {
super(props);
const {
store,
api,
excelstore
} = props;
this.specific = store;
this.api = api;
this.excelImport = excelstore;
}
@observable permission = {
hasRight: false,
loading: true,
}
/**
* @DateTime 2019-05-16
* @param {Function} callback 回调函数
* @param {String} name 接口名称非必填默认为getHasRight
*/
@action callPermissionAPI = (callback, name) => {
if (!this.api) {
console && console.error && console.error('api is null');
return;
}
const apiName = name ? name : 'getHasRight';
if (!this.api[apiName]) {
console && console.error && console.error('请传入正确的权限接口名称!');
return;
};
this.api[apiName]().then(datas => {
const {
hasRight
} = datas;
this.permission.hasRight = hasRight;
this.permission.loading = false;
if (hasRight) {
callback && callback();
}
}).catch(error => {});
}
@observable tConf = [];
@observable rConf = [];
/**
* @DateTime 2019-05-16
* @param {Object} params 接口参数不传参的话默认为空对象
* @param {Function} callback 回调函数
* @param {String} name 接口名称非必填默认为getRightMenu
*/
@action callRightMenuAPI = (params = {}, callback, name) => {
const apiName = name ? name : 'getRightMenu';
if (!this.api[apiName]) {
console && console.error && console.error('请传入正确的菜单接口名称!');
return;
};
this.api && this.api[apiName](params).then(datas => {
const {
btnMenu = []
} = datas;
const {
tConf,
rConf
} = this.convertDatasToTopRightConf(btnMenu);
this.tConf = tConf;
this.rConf = rConf;
callback && callback();
}, error => {})
}
@computed get topButtons() {
return this.tConf && this.tConf.map((item, index) => {
const {
menuFun,
menuName
} = item;
const status = this.specific && this.specific.getButtonStatus && this.specific.getButtonStatus()[index];
return (
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@6xqp99@${index}`}
type="primary"
disabled={status}
onClick={() => this.specific && this.specific[menuFun]()}
>
{menuName}
</Button>
)
});
}
@computed get dropMenuDatas() {
return this.rConf && this.rConf.map((item, index) => {
const {
menuFun,
menuName,
menuIcon
} = item;
const status = this.specific && this.specific.getButtonStatus && this.specific.getButtonStatus()[index];
return {
key: menuFun,
disabled: status,
icon: <i className={`${menuIcon}`} />,
content: menuName,
onClick: () => this.specific && this.specific[menuFun]()
}
});
}
/**
* @DateTime 2019-05-21
* 概述导入Excel
* @param {String} name 模版名称
* @param {String} title 弹框名称
* @param {String} type 导出类型
* @param {Boolean} visible 弹框是否可视
*/
importExcel = (name, title, type, visible) => {
const params = [name, title, type, visible];
const queue = ['setTempletName', 'setImportDialogTitle', 'setImportType', 'setImportDialogVisible'];
queue.forEach((f, i) => {
const param = params[i];
this.excelImport && this.excelImport[f](param);
});
}
//头部中的下拉按钮
@observable buttonSelect = {
selectedKey: '0',
datas: [],
}
@action setButtonSelectDatas = (datas) => {
this.buttonSelect.datas = datas;
}
//衍生出头部下拉菜单按钮
@computed get topButtonSelect() {
const {
selectedKey,
datas
} = this.buttonSelect;
if (datas.length === 0) {
return
}
const disabled = this.specific.getButtonSelectStatus();
return (
<ButtonSelect ecId={`${this && this.props && this.props.ecId || ''}_ButtonSelect@xvr81v`}
datas={datas}
selectedKey={selectedKey}
btnProps={{disabled}}
btnOnClick={key=> this.handleBtnClick(key)}
menuOnClick={key=>this.handleMenuClick(key)}
/>
)
}
handleBtnClick = (key) => {
if (!this.specific) {
console && console.error && console.error('specific is null');
return
}
if (!this.specific.handleBtnClick) {
console && console.error && console.error('handleBtnClick is not defined');
return
}
this.specific.handleBtnClick(key);
}
handleMenuClick = (datas) => {
if (!this.specific) {
console && console.error && console.error('specific is null');
return
}
if (!this.specific.handleBtnClick) {
console && console.error && console.error('handleMenuClick is not defined');
return
}
this.specific.handleMenuClick(datas);
}
//高级搜索中需要联动的字段名称
linkageFieldName = '';
//Tab组件的动态物料
@observable tab = {
showSearchAd: false,
form: new WeaForm(),
selectedKey: '1',
datas: [],
}
/**
* @DateTime 2019-05-22
* 概述获取渲染高级搜索内表单所需的数据
* @param {Object} params 参数
* @param {Function} callback 回调函数
* @param {String} name 接口名称默认为getCondition
*/
@action callSearchConditionAPI = (callback, params = {}, name) => {
const apiName = name ? name : 'getCondition';
if (!this.api[apiName]) {
console && console.error && console.error('请传入正确的高级搜索接口名称!');
return;
};
this.tab.form = new WeaForm();
this.api[apiName]().then(datas => {
const {
condition
} = datas;
if (condition.length === 1) {
condition[0].title = '';
}
const {
form
} = this.tab;
form.setCondition(condition);
callback && callback(form.getFormParams());
}, error => {})
}
//根据高级搜索内linkageFieldName字段的值衍生出基本搜索输入框内的值
@computed get searchsBaseValue() {
const {
form
} = this.tab;
return form.getFormParams()[this.linkageFieldName];
}
//控制弹框显隐
@action setShowSearchAd = (bool) => {
this.tab.showSearchAd = bool;
}
//搜索
@action onSearch = (callback) => {
if (callback) {
callback();
} else {
const {
getSearchListParams,
getSearchListCallback,
getSearchListName
} = this.specific;
this.callSearchListAPI(getSearchListParams(), getSearchListCallback(), getSearchListName());
}
this.setShowSearchAd(false);
}
//基本输入框触发的事件
@action onSearchChange = (val) => {
const {
form
} = this.tab;
this.linkageFieldName && form.updateFields({
[this.linkageFieldName]: val
});
}
//设置生成页签的数据
@action setTabDatas = (datas) => {
this.tab.datas = datas;
}
//设置选中页签的KEY值
@action setSelectedKey = (key, callback) => {
this.tab.selectedKey = key;
callback && callback();
}
//根据form衍生出高级搜索表单
@computed get searchsAd() {
const {
form
} = this.tab;
return <div
onKeyDown={(e) =>( e.keyCode == 13 && e.target.tagName === "INPUT") && this.onSearch()}
>{form.render()}</div>;
}
//设置高级搜索中需要联动的字段名称
setSearchlinkageFieldName = (name) => {
this.linkageFieldName = name;
}
@observable table = {
comsWeaTableStore: new TableStore(),
}
/**
* @DateTime 2019-05-15
* @param {Object} params 接口参数
* @param {Function} callback 回调函数
* @param {String} name 接口名称非必填默认为getRecords
*/
@action callSearchListAPI = (params, callback, name) => {
const apiName = name ? name : 'getRecords';
if (!this.api[apiName]) {
console && console.error && console.error('请传入正确的列表接口名称!');
return;
};
this.api[apiName](params).then(datas => {
const {
sessionkey,
} = datas;
this.table.comsWeaTableStore = new TableStore();
this.table.comsWeaTableStore.getDatas(sessionkey, 1);
callback && callback();
}, error => {})
}
reRenderColumns = (columns) => {
this.specific && this.specific.reRenderColumns && this.specific.reRenderColumns(columns);
}
onOperatesClick = (record, rIndex, operate) => {
this.specific && this.specific.onOperatesClick && this.specific.onOperatesClick(record, rIndex, operate);
}
@observable dialog = {
visible: false,
title: '',
};
@action openDialog = (title, callback) => {
this.dialog.visible = true;
this.dialog.title = title;
callback && callback();
}
@action closeDialog = (callback) => {
this.dialog.visible = false;
callback && callback();
}
orgTree = {
id: '',
type: '',
pid: '',
name: ''
}
handleOrgTreeNodeClick = (event, ids, nodeids, nodes) => {
this.convertDatasToIdType(nodes);
this.specific.handleOrgTreeNodeClick && this.specific.handleOrgTreeNodeClick(event, ids, nodeids, nodes);
}
convertDatasToIdType = (nodes) => {
if (nodes) {
['id', 'type', 'pid', 'name'].forEach(v => {
this.orgTree[v] = nodes[0][v];
});
}
}
@observable triggerRefresh = false;
@action trigger = (callback) => {
this.triggerRefresh = !this.triggerRefresh;
callback && callback();
}
@observable monthYear = {
cKey: '1',
date: new Date()
}
/**
* @DateTime 2019-05-22
* 概述切换年月 默认筛选列表数据
* @param {String} key 点击项的key值
*/
@action handleMonthYearClick = (key) => {
this.monthYear.cKey = key;
if (!this.specific) {
return;
}
if (this.specific.handleMonthYearClick) {
this.specific.handleMonthYearClick();
} else {
this.callSearchListAPI(this.specific.getSearchListParams());
}
}
/**
* @DateTime 2019-05-22
* 概述选择日期 默认筛选列表数据
* @param {Date} date 日期
*/
@action handleDatePickerChange = (date) => {
this.monthYear.date = date;
if (!this.specific) {
return;
}
if (this.specific.handleDatePickerChange) {
this.specific.handleDatePickerChange();
} else {
this.callSearchListAPI(this.specific.getSearchListParams());
}
}
//重置年月
@action resetMonthYear = () => {
this.monthYear.date = new Date();
this.handleMonthYearClick('1');
}
/**
* @DateTime 2019-05-23
* 概述校验表单
* @param {Object} pack 盛放form的容器
* @param {Function} callback 校验通过的回调函数
*/
validateForm = (pack, callback) => {
this[pack].form.validateForm().then(f => {
if (f.isValid) {
callback && callback();
} else {
f.showErrors();
callback && callback();
}
})
}
}