482 lines
11 KiB
JavaScript
482 lines
11 KiB
JavaScript
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();
|
||
}
|
||
})
|
||
}
|
||
|
||
|
||
} |