import {observable, action, computed} from 'mobx';
import * as api from '../apis/finance';
import {message, Button} from 'antd';
import {WeaLocaleProvider} from 'ecCom';
import {WeaForm, WeaSwitch} from 'comsMobx';
import isEmpty from 'lodash/isEmpty';
const {getLabel} = WeaLocaleProvider;
class FinanceStore{
//#region init
@observable loading = true;
@observable hasRight = false;
@observable edit = false;
rootStore;
hrmId;
@observable fromcard = false;
@action clear = () => {
this.loading = true;
this.hasRight = false;
this.edit = false;
this.hrmId = null;
this.fromcard = false;
this._reqParams = {};
}
@action init = async props => {
this.clear();
//1.setPropsValue
this.setPropValue(props);
//2.hasRight
this.hasRight = await this.getHasRight();
//3.check is need second verify
if(window.doCheckSecondaryVerify4ec){
this.hasRight && window.doCheckSecondaryVerify4ec({mouldCode: 'HRM', itemCode: 'SALARY'}, this.getData);
}else{
//4.loaddata
this.hasRight && this.getData({status: '1', token: ''});
}
}
@action setPropValue = props => {
const {location = {}, params = {}, hrmCard} = props;
this.rootStore = hrmCard;
const {hrmId = ''} = params;
this.hrmId = hrmId;
const {query = {}} = location;
const {fromcard} = query;
this.fromcard = fromcard || false;
}
//#endregion
//#region getHasRight
@action getHasRight = async () => {
const data = await api.getHasRight();
if(data.status == '1')
return data.hasRight;
else{
message.error(data.message);
return false;
}
}
//#endregion
//#region top props
@computed get topButtons(){
const arr = [];
!this.edit && this.buttons.hasEdit && arr.push({isTop: '1', menuFun: 'doEdit', menuIcon: 'icon-coms-edit', menuName: getLabel(93, '编辑'), type: 'BTN_EDIT'});
this.edit && this.buttons.hasSave && arr.push({isTop: '1', menuFun: 'doSave', menuIcon: 'icon-coms-Preservation', menuName: getLabel(30986, '保存'), type: 'BTN_SAVE'});
return arr;
}
@computed get topBtnAndMenus(){
const buttons = [], dropMenuDatas = [];
this.topButtons.map((btn, index) => {
const {isTop, menuIcon, menuName, menuFun} = btn;
const onClickHandle = this[menuFun];
if(isTop == '1'){
buttons.push(
(
)
)
}
dropMenuDatas.push({
key: index.toString(),
content: menuName,
icon: ,
onClick: onClickHandle
});
})
return {buttons, dropMenuDatas};
}
@computed get topProps(){
const d = ecCom.WeaTools.getIconBGC('hrm');
return {
title: getLabel('16416',"我的工资"),
icon: ,
iconBgcolor: d.iconBgcolor,
showDropIcon: true,
...this.topBtnAndMenus
}
}
//#endregion
//#region getData
_reqParams = {};
get reqParams(){
return {
...this._reqParams,
id: this.hrmId
}
}
@action getData = async (params = {}) => {
if(isEmpty(params))
return;
const {status, token} = params;
if(status == '1'){
Object.assign(this._reqParams, {token});
this.getFormData({viewAttr: 1});
}else{
this.hasRight = false;
}
this.loading = false;
}
@observable form = new WeaForm();
formFields = [];
@computed get isFormInit(){return this.form.isFormInit}
@computed get formProps(){
if(this.isFormInit){
return {
col: 2,
form: this.form,
formFields: this.formFields
}
}
return {};
}
@observable _buttons = {};
@observable isHide = false;
@computed get buttons(){return this._buttons || {}}
set buttons(v){
this._buttons = v;
if(this.rootStore){
const {buttons, dropMenuDatas} = this.topBtnAndMenus;
this.rootStore.setTopButtons(() => buttons);
this.rootStore.setTopRightMenus(() => dropMenuDatas);
this.rootStore.setTopShowDropIcon(true);
}
}
@action getFormData = async (params = {}) => {
const data = await api.getFormField({...this.reqParams, ...params});
try{
this.buttons = data.buttons;
this.form = new WeaForm();
this.formFields = data.fieldgroup.map(group => {
group.items = group.items.map(field => {
Object.assign(field, {
viewAttr: this.edit ? '2' : '1'
});
field.conditionType == 'BROWSER' && Object.assign(field, {
browserConditionParam: {
...field.browserConditionParam,
viewAttr: this.edit ? '2' : '1'
}
});
return field;
})
return group;
});
this.form.initFormFields(this.formFields);
this.isHide = data.fieldgroup[0].isHide;
this.getTab();
}catch(e){
message.error(e);
}
}
@observable selectedTabKey = '';
@observable tabData = [];
@computed get tabProps(){
return {
datas: this.tabData,
keyParam: 'key',
selectedKey: this.selectedTabKey,
onChange: this.onTabChangeHandle
}
}
@action onTabChangeHandle = async key => {
this.selectedTabKey = key;
this.getSearchList();
}
@action getTab = async () => {
const data = await api.getTabInfo({...this.reqParams});
if(data.status == '1'){
this.tabData = data.tabs;
this.selectedTabKey = data.tabs.length > 0 ? data.tabs[0].key : '';
this.getSearchList();
}else{
message.error(data.message);
}
}
@observable columns = [];
@observable datas = [];
@computed get tableProps(){
return {
columns: this.columns,
dataSource: this.datas,
scroll: {
x: this.columns.length * 100
},
pagination: false
}
}
@action getSearchList = async () => {
const data = await api.getSearchList({...this.reqParams, tabkey: this.selectedTabKey});
try{
const {table = {}} = data;
this.columns = table.columns.map(c => {
if(c.dataIndex.indexOf('column_')> -1){
c.render = function(text, record){
return {typeof(record[c.dataIndex]) == 'object' ? record[c.dataIndex].value : record[c.dataIndex]}
}
}
return c;
});
this.datas = table.datas;
}catch(e){
message.error(e);
}
}
//#endregion
//#region doEdit
@action doEdit = async () => {
this.edit = true;
this.getFormData({viewAttr: 2});
}
//#endregion
//#region doSave
@action doSave = async () => {
const data = await api.saveFormFields({id: this.hrmId, ...this.form.getFormParams()});
if (data.status == '1') {
this.edit = false;
message.success(getLabel(83551, '保存成功!'));
this.getFormData({viewAttr: 1});
}else{
message.error(data.message);
}
}
//#endregion
}
const financeStore = new FinanceStore();
export default financeStore;