trunk/pc4mobx/organization/stores/baseStore.js

626 lines
17 KiB
JavaScript
Raw 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.

/**
* @Author: 程亮
* @Date: 2022-06-09 10:14:20
* @LastEditTime: 2022-06-13 14:50:36
* @Description:
* @FilePath: /trunk/src4js/pc4mobx/organization/stores/baseStore.js
*/
import {
observable,
action,
computed,
extendObservable,
autorun
} from 'mobx';
import {
Button,
message,
Modal
} from 'antd';
import {
WeaForm,
WeaTableNew,
WeaLogView
} from 'comsMobx';
import {
WeaTableEdit,
WeaBrowser,
WeaButtonIcon,
WeaCascader,
WeaLoadingGlobal
} from 'ecCom';
import classnames from 'classnames';
import * as mobx from 'mobx';
import {
authorized,
detachable,
checkAuthAndDetach,
getPinYin
} from '../apis/common';
import {
i18n
} from '../public/i18n';
// import {
// logTypeDef
// } from '../public/logType';
import has from 'lodash/has';
import moment from 'moment';
const {OptionManage} = WeaCascader;
const confirm = Modal.confirm;
const info = Modal.confirm;
const {
LogStore
} = WeaLogView;
export default class HrmBaseStore {
/********************* unobservable list *********************/
//logTypeDef = logTypeDef;
getPinYin = getPinYin;
toJS = mobx.toJS;
moment = moment;
tabConfig = { //模块主tab组件参数通过继承来重写
keyParam: 'viewCondition',
activeTabKey: ''
};
basicDialogParams = {
icon: "icon-coms-hrm",
iconBgcolor: "#217346",
style: {
width: 520,
height: 300
},
visible: false,
title: '',
}
menuIconCollection = {
save: 'icon-coms-Preservation',
create: 'icon-coms-New-Flow',
modify: 'icon-coms-edit',
remove: 'icon-coms-Batch-delete',
copy: 'icon-coms-form-copy',
entry: 'icon-coms-edit',
setting: 'icon-coms-Flow-setting',
log: 'icon-coms-Print-log',
multiModify: 'icon-coms-BatchEditing',
import: ' icon-coms-leading-in',
export: 'icon-coms-export',
search: 'icon-coms-search',
sync: 'icon-coms-Update-synchronization',
done: 'icon-coms-Upload-successfully',
selectAll: 'icon-coms-batch'
}
getBasicMenus = (logTypeKey, targetId = null) => {
let arr = [];
// if(logTypeKey){
// arr.push({
// key: '99',
// content: i18n.button.log(),
// icon: <i className={this.menuIconCollection.log}/>,
// onClick: () => this.showLog({logSmallType: this.logTypeDef[logTypeKey], targetId})
// });
// }
return arr;
}
generateLogMenu = (logType = '4', logTypeKey, targetId = null) => {
let arr = [];
if(logTypeKey){
arr.push({
key: '99',
content: i18n.button.log(),
icon: <i className={this.menuIconCollection.log}/>,
onClick: () => this.showLog({logType, logSmallType: this.logTypeDef[logTypeKey], targetId})
});
}
return arr;
}
dialogPropsDef = {
moduleName: 'hrm',
visible: false,
title: '',
moreBtn: {
datas: []
},
// hasScroll: true
}
refsDialogPropsDef = {
moduleName: 'hrm',
visible: false,
title: '',
}
dateSwitchTypeList = ['year', 'month', 'week', 'day'];
formTarget = {}; //form collection
opId = null; //数据操作对象主键ID
authorizationInfo = {};
/**
* 权限验证
* @param {String} moduleName [模块名]
* @param {Object} params [restful request url params]
* @param {Function} callback [验证通过后的callback function]
* @return {null}
*/
checkAuthorized = (moduleName, params, callback, apiMethod, needCheckDetachable = false) => {
if (needCheckDetachable) {
checkAuthAndDetach(moduleName, params, apiMethod).then(rs => {
rs.map((result, index) => {
if (result.status === '1') {
switch (index) {
case 0:
const init = !result.hasRight;
this.authorizationInfo = result;
this.containerInitFinished = {
...this.containerInitFinished,
init,
authorized: result.hasRight,
userId: result.userId
}
this.containerInitFinished.authorized && callback && callback();
break;
case 1:
this.containerInitFinished.detachable = result.detachable === '0' ? false : true
break;
}
}
})
})
} else {
authorized(moduleName, params, apiMethod).then((data) => {
if (data.status === '1') {
const init = !data.hasRight;
this.authorizationInfo = data;
this.containerInitFinished = {
init,
authorized: data.hasRight
}
this.containerInitFinished.authorized && callback && callback();
}
}, error => {
this.containerInitFinished = {
init: true,
authorized: false
}
});
}
}
/**
* 获取激活的tab页下标
* @param {Array} tabs [tabData数组]
* @param {String} key [tabKey]
* @return {Integer} [tab下标]
*/
getTabIndex(tabs, key) {
if (tabs != null && tabs.length > 0) {
return _.findIndex(tabs, {
viewCondition: key
})
}
return -1;
}
/**
* 获取WeaTop按钮、WeaTab按钮以及右键菜单列表
* @param {Object} tabConfig [description]
* @return {Object} [description]
*/
btnsAndMenus = (tabConfig) => {
let topBtnDef = [], //WeaTop按钮
menuDef = [], //右键菜单
tabBtnDef = []; //WeaTab按钮
const activeTabIndex = this.getTabIndex(tabConfig.tabs, tabConfig.activeTabKey);
if (tabConfig.activeTabKey === '' || activeTabIndex < 0) {
return {
btns: topBtnDef,
menus: menuDef,
tabBtnDef: tabBtnDef
}
}
const tab = tabConfig.tabs[activeTabIndex];
const {
topButtonDef,
tabButtonDef
} = tab;
topButtonDef && topButtonDef.map((def, idx) => { //组织WeaTop按钮
const lbl = (typeof(def.label) == 'function' ? def.label() : def.label);
switch (def.comType) {
case 'button':
let disabled = false;
if (def.checkAction)
disabled = this[def.checkAction];
topBtnDef.push(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@rke64z@${idx}`} type={def.type} onClick={def.onClickHandle} disabled={disabled || def.disabled}>{lbl}</Button>);
menuDef.push({ //组织右键菜单
key: `$top-btn-${idx}`,
content: lbl,
icon: <i className={def.rightMenuIcon || def.icon}/>,
onClick: def.onClickHandle,
disabled: disabled || def.disabled || false
})
break;
default:
break;
}
});
tabButtonDef && tabButtonDef.map((def, idx) => { //组织WeaTab按钮
const lab = (typeof(def.label) == 'function' ? def.label() : def.label);
let disabled = false;
if (def.checkAction)
disabled = this[def.checkAction];
switch (def.comType) {
case 'button':
const classes = classnames({
[def.icon]: true,
'tabBtn': true,
'tabBtn-active': !disabled,
'tabBtn-disable': disabled
});
if (def.brower == null) {
tabBtnDef.push(
<i
className={classes}
title={lab}
onClick={!disabled ? def.onClickHandle : null}
/>
);
} else {
switch (def.brower) {
case 'authorization':
tabBtnDef.push(
<WeaBrowser ecId={`${this && this.props && this.props.ecId || ''}_WeaBrowser@b3ewk2@${idx}`}
customized
tabs={[{name: i18n.label.byList(), key: '1', dataParams: {list: 1}},{name: i18n.label.byAuthGroup(), key: '2'}]}
title={i18n.label.selectAuthorization()}
icon={'icon-coms-hrm'}
iconBgcolor={'#217346'}
type={'hrmRoleRight'}
inputStyle={{width: 200}}
onChange={(ids, names, datas) => def.onClickHandle(ids, names, datas)}
isSingle={false}
>
<i
className={classes}
title={lab}
/>
</WeaBrowser>
);
break;
}
}
break;
case 'WeaButtonIcon':
tabBtnDef.push(
<WeaButtonIcon ecId={`${this && this.props && this.props.ecId || ''}_WeaButtonIcon@txomye@${idx}`} buttonType={def.icon} type='primary' disabled={disabled} onClick={!disabled ? def.onClickHandle : null} />
);
break;
case 'customer':
tabBtnDef.push(def.coms)
break;
default:
tabBtnDef.push(
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@iji04g@${idx}`} type={def.btnType || 'primary'} onClick={!disabled ? def.onClickHandle : null} disabled={disabled}>{lab}</Button>
);
break;
}
});
// menuDef.push(...this.getBasicMenus()); //组织右键菜单
return {
btns: topBtnDef,
menus: menuDef,
tabBtnDef: tabBtnDef
}
}
/**
* [description]
* @param {String} com [dialog's name]
* @param {Boolean} val [visible: true or false]
* @param {String} title [dialog's title]
* @param {Function} callback [callback function]
* @return {null}
*/
setDialogVisible = (com, val, title = '', callback) => {
this.dialogParams[com] = {
...this.dialogParams[com],
visible: val,
title: title
};
callback && callback();
}
confirmInfo = (props) => {
confirm({ ...props,
title: props.title || i18n.confirm.defaultTitle(),
okText: i18n.button.ok(),
cancelText: i18n.button.cancel()
});
}
hint = (props) => {
info({ ...props,
title: i18n.confirm.defaultTitle(),
okText: i18n.button.ok(),
});
}
/**
* 初始化formStore
* @param {String} formName [form's name]
* @param {Array} fields [form field definition]
* @return {null}
*/
setFormData = (formName, fields) => {
this.formTarget[`${formName}Fields`] = fields;
this.formTarget[formName] = new WeaForm();
this.formTarget[formName].initFormFields(fields);
//this.formTarget[formName].setCondition(fields);
}
/**
* 请求高级搜索表单的通用方法
* @param {String} form [form's name]
* @param {Function} api [restful api function]
* @param {Object} params [restful request url params]
* @param {Function} callback [callback function]
* @return {null}
*/
requestFormData = (form, api, params = {}, callback) => {
api(params).then((data) => {
if (data.status === '1') {
this.setFormData(form, data.formField);
callback && callback();
}
}, error => {
});
}
/**
* 获取表格数据的通用方法
* @param {String} tableStore [tableStore's name]
* @param {Function} api [restful api function]
* @param {Object} params [restful request url params]
* @return {null}
*/
requestTableData = (tableStore, api, params = {}, callback) => {
api(params).then(data => {
if (data.status === '1') {
tableStore.getDatas(data.sessionkey, 1);
callback && callback();
} else
message.error(data.message);
}, error => {
message.error(i18n.message.actionError());
});
}
showLog = (logTypeParams) => {
window.setLogViewProps({
...logTypeParams
});
}
/********************* unobservable list *********************/
/********************* observable list *********************/
@observable containerInitFinished = { //模块初始化状态
init: false,
authorized: false,
detachable: false
}
@observable topTabCount = {}; //WeaTab统计值
@observable rDate = new Date().getTime(); //状态刷新组件引用该值监听变化重新render
@observable showError = new Date().getTime(); //状态刷新组件引用该值监听变化重新render
@observable dialogParams = {}; //模态框参数
@observable i18nLoaded = false;
monitorI18n = () => {
this.i18nLoaded;
}
monitor = autorun(this.monitorI18n)
/********************* observable list *********************/
/********************* action list *********************/
@action definedColumn = (table, callback) => {//显示列定义
table.setColSetVisible(true);
table.tableColSet(true, callback);
}
/********************* action list *********************/
/********************* tableEdit props & functions *********************/
editTable = {}; //可编辑表格refs对象
editTableConfig = { //WeaTableEdit参数定义通过继承来重写
showTitle: false,
draggable: true,
showAdd: false,
showDelete: false,
showCopy: false,
deleteConfirm: true
}
/**
* 设置WeaTableEdit的refs对象
* @param {Object} refs [WeaTableEdit]
*/
setEditTable = (refs, name) => {
this.editTable[name] = refs;
}
/**
* 通过refs对WeaTableEdit进行添加行、删除行、复制行操作
* @param {String} type [action]
*/
@action
recordOP = (target, type, callback = null) => {
switch (type) {
case 'add':
target.refs.edit.doAdd()
break;
case 'remove':
target.refs.edit.doDelete()
break;
case 'copy':
target.refs.edit.doCopy()
break;
case 'valid':
return target.refs.edit.doRequiredCheck()
default:
break;
}
}
generateTableEditRightMenuInfo = (tableConfig) => {
let rightMenuInfo = [];
const keys = Object.keys(tableConfig);
keys.map((key, index) => {
rightMenuInfo.push({
key: `8${index + 1}`,
disabled: tableConfig[key].disabled,
content: tableConfig[key].content,
icon: <i className={this.menuIconCollection[key]}/>,
onClick: tableConfig[key].callback
})
})
return rightMenuInfo;
}
generateTableSelectedData = (target) => {
let selectedData = {};
this.tableEditConfig[target].columns.map(column => {
column.hasOwnProperty('checkType') && column.checkType === 'checkbox' && Object.assign(selectedData, {
[column.dataIndex]: []
})
})
return selectedData;
}
generateOtherParams = (componentType, used, domkey) => {
let otherParams = {
customProps: {
'root': {
viewAttr: 1
}
},
optionManageProps: {
dialogProps: {
icon: "icon-coms-hrm",
iconBgcolor: "#217346",
},
showAdd: !used,
showCopy: !used,
showDelete: !used,
tableEditDraggable: !used
}
}
switch (componentType) {
case 'input':
Object.assign(otherParams.customProps, {
'input': {
viewAttr: 1
},
'input.text': {
viewAttr: 1
}
});
break;
case 'select':
Object.assign(otherParams.customProps, {
'select': {
viewAttr: 1,
},
// 'select.*': {
// parent: { type: "span", className: `${domkey}-clz` }
// },
});
break;
}
return otherParams;
}
convertData = (datas, target) => {
let tData = [],
selectedData = this.generateTableSelectedData(target);
datas.map((data, index) => {
let d = {};
Object.assign(d, {
...data.record,
...data.props,
isSysField: data.isSysField
});
delete d.key;
const selectedDataKey = Object.keys(selectedData);
selectedDataKey.map(key => {
data.record.hasOwnProperty(key) && data.record[key] === '1' && selectedData[key].push(index);
})
if (data.hasOwnProperty('com')) {
const keys = Object.keys(data.com);
keys.map(key => {
if (data.com[key].length > 0) {
let comDef = data.com[key][0];
if (comDef.type === 'CUSTOMFIELD' && data.hasOwnProperty(comDef.key) && data[comDef.key].length > 0) {
Object.assign(d, {
[comDef.key]: data[comDef.key],
});
Object.assign(comDef, {
viewAttr: 1,
otherParams: this.generateOtherParams(data[comDef.key][0], d.isSysField, d.fieldname),
})
} else if (comDef.type === 'INPUT' && key != 'fieldname') {
comDef.otherParams = {
...window.inputType
}
}
}
})
Object.assign(d, {
com: data.com
});
}
tData.push(d);
})
return {
datas: tData,
selectedData
}
}
getLocale() {
return {
firstDayOfWeek: 0,
lang: {
format: {
eras: [getLabel(383357, "公元前"), getLabel(383358, "公元")],
months: [getLabel(1492, "一月"), getLabel(1493, "二月"), getLabel(383385, "三月"), getLabel(383387, "四月"), getLabel(1496, "五月"), getLabel(383392, "六月"),
getLabel(383393, "七月"), getLabel(383394, "八月"), getLabel(383395, "九月"), getLabel(383396, "十月"), getLabel(383397, "十一月"), getLabel(383398, "十二月")
],
shortMonths: [getLabel(1492, "一月"), getLabel(1493, "二月"), getLabel(383385, "三月"), getLabel(383387, "四月"), getLabel(1496, "五月"), getLabel(383392, "六月"),
getLabel(383393, "七月"), getLabel(383394, "八月"), getLabel(383395, "九月"), getLabel(383396, "十月"), getLabel(383397, "十一月"), getLabel(383398, "十二月")
],
weekdays: [getLabel(24626, "星期天"), getLabel(383399, "星期一"), getLabel(383400, "星期二"), getLabel(383402, "星期三"), getLabel(383403, "星期四"),
getLabel(383404, "星期五"), getLabel(383405, "星期六")
],
shortWeekdays: [getLabel(16106, "周日"), getLabel(16100, "周一"), getLabel(16101, "周二"), getLabel(16102, "周三"), getLabel(16103, "周四"), getLabel(16104, "周五"),
getLabel(16105, "周六")
],
veryShortWeekdays: [getLabel(16106, "周日"), getLabel(16100, "周一"), getLabel(16101, "周二"), getLabel(16102, "周三"), getLabel(16103, "周四"), getLabel(16104, "周五"), getLabel(16105, "周六")],
ampms: [getLabel(383408, "上午"), getLabel(383409, "下午")],
datePatterns: [`yyyy'${getLabel(383372,"年")}'M'${getLabel(383373,"月")}'d'${getLabel(383374,"日")}' EEEE`, `yyyy'${getLabel(383372,"年")}'M'${getLabel(383373,"月")}'d'${getLabel(383374,"日")}'`, "yyyy-M-d", "yy-M-d"],
timePatterns: [`ahh'${getLabel(383411,"时")}'mm'${getLabel(383412,"分")}'ss'${getLabel(383414,"秒")}' 'GMT'Z`, `ahh'${getLabel(383411,"时")}'mm'${getLabel(383412,"分")}'ss'${getLabel(383414,"秒")}'`, "H:mm:ss", "ah:mm"],
dateTimePattern: '{date} {time}'
}
},
}
}
@action showWeaLoadingGlobal = (tip = '') => WeaLoadingGlobal.start({tip});
@action hideWeaLoadingGlobal = () => {
WeaLoadingGlobal.end(); // 停止遮罩loading
WeaLoadingGlobal.destroy(); // 销毁遮罩loading
}
/********************* tableEdit props & functions *********************/
}