trunk/pc4mobx/organization/stores/baseStore.js

627 lines
17 KiB
JavaScript
Raw Normal View History

2022-06-10 16:37:52 +08:00
/**
* @Author: 程亮
* @Date: 2022-06-09 10:14:20
2022-06-17 18:06:07 +08:00
* @LastEditTime: 2022-06-17 10:59:30
2022-06-10 16:37:52 +08:00
* @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 = [];
2022-06-13 15:38:26 +08:00
// if(logTypeKey){
// arr.push({
// key: '99',
// content: i18n.button.log(),
// icon: <i className={this.menuIconCollection.log}/>,
// onClick: () => this.showLog({logSmallType: this.logTypeDef[logTypeKey], targetId})
// });
// }
2022-06-10 16:37:52 +08:00
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;
}
2022-06-17 18:06:07 +08:00
2022-06-10 16:37:52 +08:00
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 *********************/
}