trunk/pc4mobx/organization/stores/fieldDefined.js

2327 lines
63 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:16:00
* @LastEditTime: 2022-06-20 11:07:43
* @Description:
* @FilePath: /trunk/src4js/pc4mobx/organization/stores/fieldDefined.js
*/
import {
observable,
action,
computed
} from 'mobx';
import {
WeaForm,
WeaTableNew,
WeaSwitch
} from 'comsMobx';
import { WeaLocaleProvider, WeaInputLocale, WeaButtonIcon, WeaSelect } from 'ecCom';
import {
Button,
message,
Menu
} from 'antd';
import HrmBaseStore from './baseStore';
import * as api from '../apis/fieldDefined';
import {
cloneDeep,
indexOf,
findIndex,
uniq,
has,
remove,
filter
} from 'lodash';
import find from 'lodash/find';
import isEmpty from 'lodash/isEmpty';
import {
validDBKeys
} from '../util/index';
import {
i18n
} from '../public/i18n';
const getLabel = WeaLocaleProvider.getLabel;
const getCurrentLabel = WeaInputLocale.getCurrentLabel;
const { TableStore } = WeaTableNew;
export class FieldDefinedStore extends HrmBaseStore {
/********************* unobservable list *********************/
//override baseStore.tabConfig
tabDef = {
color: '#000000',
//groupId: '',
viewCondition: '1',
topButtonDef: [{
comType: 'button',
type: 'primary',
onClickHandle: this.saveFieldDefine,
label: i18n.button.save,
icon: this.menuIconCollection.save
}, {
comType: 'button',
type: 'primary',
onClickHandle: () => this.editGroup(),
label: i18n.button.createGroup,
icon: this.menuIconCollection.create
}, {
comType: 'button',
type: 'primary',
onClickHandle: () => this.editTypeInfo(true, {
name: this.selectedTreeNodeInfo.name,
}),
label: i18n.button.createType,
icon: this.menuIconCollection.create
}, {
comType: 'button',
type: 'primary',
onClickHandle: this.doGroupSetting,
label: i18n.button.groupMaintain,
icon: this.menuIconCollection.setting,
checkAction: 'groupInfoOperability'
}],
tabButtonDef: [{
comType: 'button',
icon: 'icon-coms-Add-to-hot',
label: i18n.button.create,
rightMenuIcon: this.menuIconCollection.create,
onClickHandle: () => this.recordOP(this.editTable['fieldDef'], 'add')
}]
}
tabConfig = {
tabs: [],
keyParam: 'viewCondition',
activeTabKey: '1',
onTabEdit: this.onTabEdit
};
moveToGroup = false;
moveDropDown = () => (
<Menu ecId={`${this && this.props && this.props.ecId || ''}_Menu@czjx1d`} onClick={this.dropdownClick}>
{
filter(this.tabConfig.tabs, (d) => {
try {
return d.groupid != this.activeTabInfo.tabInfo.groupid
} catch (e) {
return true;
}
}).map((tab, index) => (
<Menu.Item ecId={`${this && this.props && this.props.ecId || ''}_undefined@n4ghu2@${index}`} key={tab.groupid}>
<div>{tab.title}</div>
</Menu.Item>
))
}
<Menu.Divider ecId={`${this && this.props && this.props.ecId || ''}_undefined@ejjn07`} />
<Menu.Item ecId={`${this && this.props && this.props.ecId || ''}_undefined@8jlkfc`} key='createAndMove' style={{ background: '#E8E8E8', textAlign: 'center' }}>
<div>{i18n.label.createAndMoveGroup()}</div>
</Menu.Item>
</Menu>
)
getDropdownDatas = () => {
let datas = [
{
key: '1',
text: i18n.button.delete(),
show: <span className='icon-coms-form-delete-hot' />,
selected: this.dropdownSelectedKey === '1'
},
{
key: '2',
text: i18n.button.copy(),
show: <span className='icon-coms-copy-hot' />,
selected: this.dropdownSelectedKey === '2'
},
{
key: '3',
text: i18n.button.moveToGroup(),
show: <span className='icon-coms-move2' />,
selected: this.dropdownSelectedKey === '3',
isDropBtn: true
}
]
// if (this.selectedTreeNodeInfo != null && this.selectedTreeNodeInfo.viewAttr != 1) {
// datas.splice(2, 1);
// }
if (this.selectedTreeNodeInfo != null && !this.selectedTreeNodeInfo.addChild) {
datas.splice(2, 1);
}
return datas;
}
dropdownProps = () => ({
type: 'small',
datas: this.getDropdownDatas(),
dropBtnProps: {
style: { padding: '10px 4px' }
},
btnDropPropsDatas: {
'3': {
overlay: this.moveDropDown()
}
},
btnOnClick: key => {
switch (key) {
case '1':
this.recordOP(this.editTable['fieldDef'], 'remove')
break;
case '2':
this.recordOP(this.editTable['fieldDef'], 'copy')
break;
case '3':
break;
}
},
menuOnClick: (key, e) => {
this.tableEditConfig.fieldDef.selectedRowKeys = [];
this.feildDefTableSelectedRows.length = 0;
this.refreshMainTabComponent = new Date().getTime();
this.dropdownSelectedKey = key;
}
})
fieldDefColumns = () => {
const columns = [{
title: i18n.label.fieldLabel(), //列名
dataIndex: 'fieldlabel', //列的id 对应数据
key: 'fieldlabel', //前端渲染key值
useRecord: true,
colSpan: 1,
width: '15%',
com: [{
label: '',
type: 'INPUT',
key: 'fieldlabel',
viewAttr: '3',
otherParams: {
...window.inputType
}
}],
}, {
title: i18n.label.fieldName(),
dataIndex: 'fieldname',
key: 'fieldname',
useRecord: true,
colSpan: 1,
width: '15%',
com: [{
label: '',
type: 'INPUT',
key: 'fieldname',
viewAttr: '1',
otherParams: {
length: 25,
regExp: /^[a-zA-Z][a-zA-Z0-9]*$/,
filter: (val) => {
const {
isValid,
value
} = validDBKeys(val);
this.isDBKeyValid = isValid;
return value;
}
}
}],
}, {
title: i18n.label.fieldType(),
dataIndex: 'fieldType',
key: 'fieldType',
useRecord: true,
colSpan: 1,
width: "30%",
com: [{
label: '',
type: 'CUSTOMFIELD',
key: 'fieldType',
viewAttr: '3',
options: ['peculiar'],
otherParams: {
customProps: {
'input.text': {
viewAttr: 3
},
'textarea': {
parent: {
type: "div",
style: {
display: "none"
}
},
style: {
display: "none"
}
},
'textarea.*': {
parent: {
type: "div",
style: {
display: "none"
}
},
style: {
display: "none"
}
},
'textarea.*.*': {
style: {
display: "none"
}
},
"select": {
options: [{
key: 'select',
selected: true,
showname: i18n.label.selectComponent()
}]
},
"upload": {
options: [{
key: 'file',
selected: true,
showname: i18n.label.uploadFile()
}]
}
}
}
}],
}, {
title: i18n.label.enable(),
dataIndex: 'enable',
key: 'enable',
checkType: 'checkbox',
colSpan: 1,
width: '7%'
}, {
title: i18n.label.required(),
dataIndex: 'required',
key: 'required',
checkType: 'checkbox',
colSpan: 1,
width: '8%'
}];
//人员卡片字段定义-添加【允许个人修改】列
if (this.moduleName === 'resourcefielddefined') {
if (this.isJobTreeNode) {//【工作信息】列表不添加【允许个人修改】列
} else {
columns.push({
title: getLabel(510359, '允许个人修改'),
dataIndex: 'isModify',
key: 'isModify',
checkType: 'checkbox',
colSpan: 1,
width: '11%'
});
}
}
this.encryptEnable && columns.push({
title: getLabel('526997', '加密设置'),
dataIndex: 'canEncrypt',
key: 'canEncrypt',
com: [
{
type: 'custom',
key: 'custom',
render: (text, record, index, onEdit) => {
const { canEncrypt } = record;
if (canEncrypt == '1')
return (
<a onClick={() => this.onEncryptHandle(record)}>{getLabel('526997', '加密设置')}</a>
)
return null;
}
}
],
colSpan: 1,
width: '8%'
});
return columns;
}
groupDefColumns = () => [{
title: i18n.label.groupName(), //列名
dataIndex: 'groupName', //列的id 对应数据
key: 'groupName', //前端渲染key值
colSpan: 1,
width: '70%',
useRecord: true,
com: [{
label: '',
type: 'INPUT',
key: 'groupName',
viewAttr: '3',
otherParams: {
...window.inputType
}
}],
}, {
title: i18n.label.show(),
dataIndex: 'isShow',
key: 'isShow',
checkType: 'checkbox',
colSpan: 1,
useRecord: true,
width: '30%'
}];
childInfoDefColumns = () => [{
title: i18n.label.childInfoName(), //列名
dataIndex: 'name', //列的id 对应数据
key: 'name', //前端渲染key值
colSpan: 1,
width: '70%',
useRecord: true,
com: [{
label: '',
type: 'INPUT',
key: 'name',
viewAttr: '3',
otherParams: {
...window.inputType
}
}],
}, {
title: i18n.label.show(),
dataIndex: 'isShow',
key: 'isShow',
checkType: 'checkbox',
colSpan: 1,
useRecord: true,
width: '30%'
}];
getColumns = () => {
let columns = cloneDeep(this.fieldDefColumns())
// if (this.moduleName.indexOf('resource') >= 0) {
// columns[1].com = [{
// label: '',
// type: 'TEXT',
// key: 'fieldname',
// }]
// }
return columns;
}
tableEditConfig = {
fieldDef: {
...this.editTableConfig,
showAdd: false,
showDelete: false,
showCopy: false,
columns: this.getColumns(),
copyFilterProps: ['id', 'fieldlabel', 'fieldname', 'com.fieldname', 'com.fieldlabel'],
datas: [],
selectedData: {},
onChange: this.onFieldDefChange,
onRowSelect: this.onFieldDefRowSelect,
getRowSelection: this.onFieldDefRowSelection,
onDelete: this.onFieldDefDeleteOpr,
onEdit: this.onEdit,
onAdd: this.onAdd
},
groupSetting: {
...this.editTableConfig,
showTitle: true,
showAdd: true,
showDelete: true,
showCopy: false,
columns: this.groupDefColumns(),
copyFilterProps: ['id', 'groupName', 'isShow'],
datas: [],
selectedData: {},
onChange: (datas) => this.onGroupSettingChange(datas, 'group'),
onRowSelect: (sRowKeys, rows, dataIndex, selectedDatas) => this.onGroupSettingRowSelect(sRowKeys, rows, dataIndex, selectedDatas, 'group'),
getRowSelection: this.onGroupSettingRowSelection,
onDelete: (ks, ds) => this.onGroupSettingDeleteOpr(ks, ds, 'group')
},
childInfoSetting: {
...this.editTableConfig,
showTitle: true,
showAdd: true,
showDelete: true,
showCopy: false,
columns: this.childInfoDefColumns(),
copyFilterProps: ['id', 'name', 'isShow'],
datas: [],
selectedData: {},
onChange: (datas) => this.onGroupSettingChange(datas, 'childInfo'),
onRowSelect: (sRowKeys, rows, dataIndex, selectedDatas) => this.onGroupSettingRowSelect(sRowKeys, rows, dataIndex, selectedDatas, 'childInfo'),
getRowSelection: this.onGroupSettingRowSelection,
onDelete: (ks, ds) => this.onGroupSettingDeleteOpr(ks, ds, 'childInfo')
}
}
activeTabInfo = {}
tabRecord = [];
isDBKeyValid = true;
/********************* unobservable list *********************/
/********************* dialog info setting *********************/
editorDialogRightMenu = [];
getDialogOpButtons = () => { //获取权限组编辑对话框按钮列表
this.editorDialogRightMenu.length = 0;
let buttons = [<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@i3u56h`} type="primary" onClick={() => this.dialogSaveOp()}>{i18n.button.save()}</Button>];
this.editorDialogRightMenu.push({
key: '1',
content: i18n.button.save(),
icon: <i className={this.menuIconCollection.save} />,
onClick: () => this.dialogSaveOp(false)
});
if (this.dialogParams.groupInfoSetting.visible) {
let logType = '';
this.editorDialogRightMenu.push(...this.getBasicMenus(logType));
}
return buttons;
}
/********************* dialog info setting *********************/
/***** form ****/
editGroupInfoFormFields = [{
"title": i18n.label.basicSetting(),
"items": [{
"colSpan": 2,
"conditionType": "INPUT",
"domkey": ["groupName"],
"fieldcol": 12,
"isQuickSearch": false,
"label": i18n.label.groupName,
"labelcol": 6,
"precision": 0,
"rules": "required|string",
"value": "",
"viewAttr": 3,
}],
"defaultshow": true
}]
editTypeInfoFormFields = [{
"title": i18n.label.basicSetting(),
"items": [{
"colSpan": 2,
"conditionType": "INPUT",
"domkey": ["name"],
"fieldcol": 12,
"isQuickSearch": false,
"label": i18n.label.typeName,
"labelcol": 6,
"precision": 0,
"rules": "required|string",
"value": "",
"viewAttr": 3,
}],
"defaultshow": true
}]
editChildInfoFormFields = [{
"title": i18n.label.basicSetting,
"items": [{
"colSpan": 2,
"conditionType": "INPUT",
"domkey": ["name"],
"fieldcol": 12,
"isQuickSearch": false,
"label": i18n.label.childInfoName,
"labelcol": 6,
"precision": 0,
"rules": "required|string",
"value": "",
"viewAttr": 3
}, {
"colSpan": 2,
"conditionType": "INPUTNUMBER",
"domkey": ["infoOrder"],
"fieldcol": 12,
"isQuickSearch": false,
"label": i18n.label.displayOrder,
"labelcol": 6,
"precision": 0,
"value": "0",
"viewAttr": 2
}],
"defaultshow": true
}]
/********************* observable list *********************/
dialogParams = { //override baseStore.dialogParams
editGroupInfo: {
visible: false,
title: '',
moreBtn: {
datas: []
}
},
editTypeInfo: {
visible: false,
title: '',
moreBtn: {
datas: []
}
},
groupInfoSetting: {
visible: false,
title: '',
moreBtn: {
datas: []
}
},
createChildInfo: {
visible: false,
title: '',
moreBtn: {
datas: []
}
},
childInfoSetting: {
visible: false,
title: '',
moreBtn: {
datas: []
}
}
}
@observable dropdownSelectedKey = '1';
@observable _groupInfoOperability = true;
@observable feildDefTableSelectedRows = [];
@observable groupSettingTableSelectedRows = [];
@observable _feildDefSaveable = true;
@observable refreshMainTabComponent = new Date().getTime();
@observable refreshFeildDef = new Date().getTime(); //当需要刷新主页面tab时变更此值
@observable refreshForm = new Date().getTime();
@observable refreshEditGroupTabComponent = new Date().getTime(); //当需要刷新权限组编辑tab时变更此值
@observable spinning = false;
@observable moduleName = '';
/********************* observable list *********************/
/********************* computed list *********************/
@computed get feildDefRemoveable() { //字段定义表是否有选中行
return this.feildDefTableSelectedRows.length === 0;
}
@computed get groupInfoRemoveable() { //字段定义表是否有选中行
return this.groupSettingTableSelectedRows.length === 0;
}
@computed get feildDefSaveable() { //字段定义表是否有记录
return this._feildDefSaveable;
}
@computed get groupInfoOperability() { //是否有组信息
return this._groupInfoOperability;
}
/********************* computed list *********************/
/********************* action list *********************/
/**
* 初始化模块数据
* @return {null}
*/
@action initData = (create = false, init = false, module) => {
this.dropdownSelectedKey = '1';
if (module != null) {
this.moduleName = module;
}
this.selectedTreeNodeInfo = null;
// this.tableEditConfig.fieldDef.columns = cloneDeep(this.fieldDefColumns());
api.getTabInfo(this.moduleName).then(data => {
this._groupInfoOperability = data.tabs.length === 0;
if (data.status === '1') {
let tabArr = [];
this.tabRecord = data.tabs;
data.tabs && data.tabs.map((tabInfo, index) => {
let t = cloneDeep(this.tabDef);
tabArr.push({
...t,
...tabInfo,
viewCondition: `${tabArr.length + 1}`
});
});
if (tabArr.length > 0) {
this.tabConfig.tabs = [...tabArr];
//this.setTableEditColTitle();
this.setActiveTab(this.tabConfig, init ? '1' : !create ? this.tabConfig.activeTabKey : `${tabArr.length}`);
// this.containerInitFinished = {
// ...this.containerInitFinished,
// init: true
// }
}
} else {
message.error(data.message);
}
}, error => {
})
}
setTableEditColTitle = () => {
[...Object.keys(this.tableEditConfig)].map(k => {
this.tableEditConfig[k].columns.map(c => {
if (typeof (c.title) == 'function')
c.title = c.title();
else
c.title = c.title;
})
})
}
/**
* tab change事件(通过变更refreshMainTabComponent使index重新render)
* @param {Object} tabConfig [tabConfig]
* @param {String} key [tabKey]
* @return {null}
*/
@action setActiveTab = (tabConfig, key) => {
tabConfig.activeTabKey = key || tabConfig.tabs[0].viewCondition;
const tabIndex = this.getTabIndex(this.tabConfig.tabs, key);
if (tabIndex < 0) return;
this.dropdownSelectedKey = '1';
this.feildDefTableSelectedRows.length = 0;
this.tableEditConfig.fieldDef.selectedRowKeys = [];
this.activeTabInfo = {
activeTabKey: this.tabConfig.activeTabKey,
activeTabIndex: this.getTabIndex(this.tabConfig.tabs, this.tabConfig.activeTabKey),
tabInfo: this.tabConfig.tabs[tabIndex]
}
let params = {
groupId: this.activeTabInfo.tabInfo.groupid,
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key
this.spinning = true;
api.getFieldDefinedInfo(this.moduleName, params).then(res => {
if (res.code === 200) {
const {
datas,
selectedData
} = this.convertData(res.data.data, 'fieldDef');
this.encryptEnable = res.data.encryptEnable;
this.tableEditConfig.fieldDef.datas = datas;
this.tableEditConfig.fieldDef.columns = this.getColumns();
this.tableEditConfig.fieldDef.selectedData = selectedData;
if (this.tabRecord.length > 0) {
this.tabRecord[this.activeTabInfo.activeTabIndex].editable = (res.data.data.length === 0);
this.activeTabInfo.tabInfo.editable = (res.data.data.length === 0);
}
} else {
message.warning(res.msg);
}
this.spinning = false;
this.refreshMainTabComponent = new Date().getTime();
this.spinning = false;
this.refreshMainTabComponent = new Date().getTime();
}, error => {this.spinning = false;})
}
@action("分组tab删除") onTabEdit = (targetKey, action) => {
const tabIndex = this.getTabIndex(this.tabConfig.tabs, targetKey);
if (tabIndex < 0) return;
const tabInfo = this.tabConfig.tabs[tabIndex];
switch (action) {
case 'remove':
this.confirmInfo({
content: i18n.confirm.delete(),
onOk: () => {
let params = {
id: tabInfo.groupid
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key
api.removeGroupInfo(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
message.success(i18n.message.deleteSuccess());
this.tabConfig.activeTabKey = '1';
if(data.data === 0) {
this.getTabInfoByTreeNode();
}else {
this.initResourceData(this.moduleName)
}
} else {
message.warning(data.msg);
}
}).catch(error => {
message.warning(error.msg);
})
}
});
break;
default:
break;
}
}
@action dialogSaveOp = () => {
this.dialogParams.editGroupInfo.visible && this.doSaveGroupInfo();
this.dialogParams.editTypeInfo.visible && this.doSaveTypeInfo();
this.dialogParams.groupInfoSetting.visible && this.doSaveGroupSetting();
this.dialogParams.createChildInfo.visible && this.doSaveChildInfo();
this.dialogParams.childInfoSetting.visible && this.doSaveChildInfoSetting();
}
@action("新建分组") editGroup = (group, moveToGroup = false) => {
this.moveToGroup = moveToGroup;
this.editGroupInfoFormFields.map(f => {
if (typeof (f.title) == 'function')
f.title = f.title();
f.items.map(item => {
if (typeof (item.label) == 'function')
item.label = item.label();
item.otherParams = { ...window.inputType };
})
})
let fields = [...this.editGroupInfoFormFields],
dialogTitle = '';
this.setFormData('groupInfoFrom', fields);
if (group) {
this.formTarget.groupInfoFrom.updateFields({
groupName: { value: group.multiTitle || group.title || '' }
});
this.opId = group.groupid;
dialogTitle = i18n.button.editGroup();
} else {
this.formTarget.groupInfoFrom.updateFields({
groupName: { value: '' }
});
this.opId = null;
dialogTitle = i18n.button.createGroup();
}
this.setDialogVisible('editGroupInfo', true, dialogTitle);
}
isCreateTypeInfo = false;
@action("新增或创建类型") editTypeInfo = (create = true, data = {}) => {
this.isCreateTypeInfo = create;
this.editTypeInfoFormFields.map(f => {
if (typeof (f.title) == 'function')
f.title = f.title();
f.items.map(item => {
if (typeof (item.label) == 'function')
item.label = item.label();
item.otherParams = { ...window.inputType };
})
})
let fields = [...this.editTypeInfoFormFields],
dialogTitle = create ? i18n.button.createType() : i18n.button.editTypeInfo();
this.setFormData('typeInfoFrom', fields);
if (!create) {
this.formTarget.typeInfoFrom.updateFields({
name: { value: data.name }
});
} else {
this.selectedTreeNodeInfo.domid = null;
}
this.setDialogVisible('editTypeInfo', true, dialogTitle);
}
@action("分组维护") doGroupSetting = () => {
this.tableEditConfig.groupSetting.datas.length = 0;
let arr = [];
this.tabRecord.map(tabInfo => {
let viewAttr = tabInfo.viewAttr;
// if (viewAttr != 1 && has(tabInfo, 'editable')) {
// viewAttr = !tabInfo.editable ? 1 : 2;
// }
arr.push({
"record": {
"id": tabInfo.groupid,
"viewAttr": tabInfo.viewAttr,
"isShow": tabInfo.isShow,
"groupName": tabInfo.multiTitle || tabInfo.title || '',
"editable": tabInfo.editable
},
"props": {
"checkProps": {
"isShow": {
viewAttr
}
}
}
})
})
Object.assign(this.tableEditConfig.groupSetting, {
...this.convertData(arr, 'groupSetting')
});
this.tableEditConfig.groupSetting.columns = this.groupDefColumns();
this.tableEditConfig.groupSetting.datas.map(d => {
Object.assign(d, {
com: {
groupName: [{
label: '',
type: 'INPUT',
key: 'groupName',
viewAttr: d.viewAttr,
otherParams: {
...window.inputType
}
}]
}
})
})
this.setDialogVisible('groupInfoSetting', true, i18n.button.groupMaintain());
}
@action("保存类型") doSaveTypeInfo = () => {
this.formTarget.typeInfoFrom.validateForm().then(f => {
if (f.isValid) {
let params = {
... this.formTarget.typeInfoFrom.getFormParams(),
id: this.selectedTreeNodeInfo.domid
}
api.changeTypeInfo(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
this.setDialogVisible('editTypeInfo', false, '');
this.getTree()
message.success(i18n.message.saveSuccess());
} else {
message.warning(data.msg);
}
}).catch(error => {
message.warning(error.msg);
})
} else {
f.showErrors();
this.showError = new Date().getTime();
}
});
}
@action("分组保存") doSaveGroupInfo = () => {
this.formTarget.groupInfoFrom.validateForm().then(f => {
if (f.isValid) {
let record = {
...this.formTarget.groupInfoFrom.getFormParams(),
isShow: 1
}
const recordIndex = findIndex(this.tabConfig.tabs, {
title: getCurrentLabel(record.groupName)
});
if (recordIndex >= 0) {
f.showError('groupName', i18n.confirm.groupNameExist());
this.showError = new Date().getTime();
return;
}
let params = {
...this.formTarget.groupInfoFrom.getFormParams(),
isShow: 1
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key
api.saveGroupInfo(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
this.setDialogVisible('editGroupInfo', false, '');
if (this.moveToGroup) {
const ids = data.data.groupid.split(',');
this.changeGroup(null, ids[ids.length - 1]);
} else {
this.getTabInfoByTreeNode();
message.success(i18n.message.saveSuccess());
}
} else {
message.warning(data.msg);
}
}).catch(error => {
message.warning(error.msg);
})
} else {
f.showErrors();
this.showError = new Date().getTime();
}
});
}
@action("保存按钮") saveFieldDefine = () => {
if (this.spinning)
return;
this.spinning = true;
this.recordOP(this.editTable['fieldDef'], 'valid');
let data = cloneDeep(this.tableEditConfig.fieldDef.datas),
labelArr = [],
nameArr = [];
if (!this.isDBKeyValid) {
this.spinning = false;
return;
}
const invalidEmpty = data.some((d, index) => {
d.key = index;
delete d.com;
delete d.checkProps;
delete d.viewAttr;
if (has(d, 'fieldTypeObj')) {
if (Array.isArray(d.fieldTypeObj) && d.fieldTypeObj.length > 0 && d.fieldTypeObj[0] != 'select')
d.fieldType = d.fieldTypeObj;
delete d.fieldTypeObj;
}
if (!Array.isArray(d.fieldType))
delete d.fieldType;
if (!has(d, 'enable'))
d.enable = '0';
if (!has(d, 'required'))
d.required = '0';
let fieldlabel = d.fieldlabel || '',
fieldname = d.fieldname || '';
if (fieldlabel === '' ) {
return true;
}
labelArr.push(getCurrentLabel(d.fieldlabel));
nameArr.push(d.fieldname);
return false;
})
let checkSame = true;
//数据库字段名不校验 后端生成
// if (this.moduleName.indexOf('resource') >= 0)
// checkSame = uniq(labelArr).length === data.length;
// else
// checkSame = uniq(labelArr).length === data.length && uniq(nameArr).length === data.length;
if (invalidEmpty) {
this.spinning = false;
return;
} else if (checkSame) {
this.spinning = true;
let dataObj = {
groupId: this.activeTabInfo.tabInfo.groupid,
records: data
}
if (this.selectedTreeNodeInfo != null)
dataObj.groupType = this.selectedTreeNodeInfo.key;
let params = {
data: dataObj
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key;
const checkRs = this.editTable['fieldDef'] && this.editTable['fieldDef'].refs.edit.doRequiredCheck() || { pass: true };
if (!checkRs.pass) {
this.spinning = false;
return;
}
api.saveFieldDefinedInfo(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
message.success(i18n.message.saveSuccess());
this.getTabInfoByTreeNode();
} else {
message.warning(data.msg);
}
this.spinning = false;
}).catch(error => {
message.warning(error.msg);
})
} else {
message.error(i18n.confirm.displayOrDBFieldExist());
this.spinning = false;
}
}
@action onEdit = (keys, datas, c, dataIndex) => {
if (dataIndex === 'fieldlabel') {
const oldRecord = this.tableEditConfig.fieldDef.datas[keys[0]];
if (has(oldRecord, 'com') && has(oldRecord.com, 'fieldname') && oldRecord.com.fieldname.length > 0 && oldRecord.com.fieldname[0].type === 'TEXT') {
return;
}
// this.getPinYin({ labelName: getCurrentLabel(datas[0].fieldlabel) }).then(data => {
// const { pinyin } = data;
// oldRecord.fieldname = pinyin;
// const arr = filter(this.tableEditConfig.fieldDef.datas, { fieldname: pinyin });
// if (arr.length > 1 && pinyin != '') {
// oldRecord.fieldname = pinyin + '1';
// }
// this.refreshFeildDef = new Date().getTime();
// });
}
}
@action onAdd = (keys, datas) => {
try {
this.tableEditConfig.fieldDef.datas[keys[0] - 1].enable = '1';
(this.tableEditConfig.fieldDef.selectedData.enable || []).push(keys[0] - 1);
this.refreshFeildDef = new Date().getTime();
} catch (e) {
}
}
@action onFieldDefChange = (datas) => {
let selectedData = {
enable: [],
required: []
}
if (this.moduleName === 'resourcefielddefined') {
Object.assign(selectedData, {
isModify: []
});
}
datas.map((data, index) => {
if (data['enable'] === '1')
selectedData.enable.push(index);
if (data['required'] === '1')
selectedData.required.push(index);
if (data['isModify'] && data['isModify'] === '1' && this.moduleName === 'resourcefielddefined') {
selectedData.isModify.push(index);
}
})
this.tableEditConfig.fieldDef.datas = datas;
this.tableEditConfig.fieldDef.selectedData = selectedData;
this._feildDefSaveable = datas.length === 0;
if (datas.length === 0) {
// this.initData();
} else
this.refreshFeildDef = new Date().getTime()
}
@action onFieldDefRowSelect = (sRowKeys, rows, dataIndex, selectedDatas) => {
if (dataIndex == null) {
this.feildDefTableSelectedRows = sRowKeys;
this.tableEditConfig.fieldDef.selectedRowKeys = sRowKeys;
} else {
if (selectedDatas != null && selectedDatas.hasOwnProperty(dataIndex)) {
const arr = selectedDatas[dataIndex];
this.tableEditConfig.fieldDef.datas.map((data, index) => {
if (dataIndex === 'enable') {
data[dataIndex] = indexOf(arr, index) >= 0 ? '1' : '0';
if (data[dataIndex] === '0') {
data['required'] = '0';
remove(selectedDatas['required'], v => v === index);
data['isModify'] = '0';
remove(selectedDatas['isModify'], v => v === index);
}
} else if (dataIndex === 'required') {
data[dataIndex] = indexOf(arr, index) >= 0 ? '1' : '0';
if (data[dataIndex] === '1') {
data['enable'] = '1';
if (selectedDatas['enable'].indexOf(index) < 0)
selectedDatas['enable'].push(index);
}
} else if (dataIndex === 'isModify') {
data[dataIndex] = indexOf(arr, index) >= 0 ? '1' : '0';
if (data[dataIndex] === '1') {
data['enable'] = '1';
if (selectedDatas['enable'].indexOf(index) < 0)
selectedDatas['enable'].push(index);
}
} else
data[dataIndex] = indexOf(arr, index) >= 0 ? '1' : '0';
})
this.tableEditConfig.fieldDef.selectedData = selectedDatas;
}
}
this.processLinkage(selectedDatas);
this.refreshFeildDef = new Date().getTime()
}
//处理账号类型和主账号的联动(允许个人修改):账号类型选中,主账号也会选中,反之亦然。
processLinkage = (selectedDatas) => {
const { datas } = this.tableEditConfig.fieldDef;
const target = datas.find(data => data.fieldname === 'accounttype');
if (!target) return;
const accounttype = target.isModify;
const belongto = datas.find(data => data.fieldname === 'belongto').isModify;
if (belongto !== accounttype) {
datas.find(data => data.fieldname === 'belongto').isModify = accounttype;
const belongtoIndex = datas.findIndex(data => data.fieldname === 'belongto');
if (accounttype === '1') {
selectedDatas['isModify'].push(belongtoIndex);
} else {
remove(selectedDatas['isModify'], v => v === belongtoIndex);
}
}
}
@action onFieldDefRowSelection = (rowSelection) => {
let sel = {
...rowSelection
}
sel.getCheckboxProps = (record) => {
let disabled = false;
switch (this.dropdownSelectedKey) {
case '2':
disabled = false;//复制时checkbox全部启用
break;
case '3':
disabled = record.id == null || record.checkProps.enable.viewAttr === 1;//移动到组时checkbox根据id是否为空或是否引用启用按钮状态赋值
break;
default:
disabled = record.viewAttr === 1;//删除时checkbox根据record.viewAttr赋值
break
}
return {
disabled
};
}
return sel;
}
@action onFieldDefDeleteOpr = (ks, ds) => {
let ids = [];
ds.map(d => {
if (has(d, 'id'))
ids.push(d.id)
});
let params = {
id: ids.join(',')
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key;
params.groupId = this.activeTabInfo.tabInfo.groupid;
if (ids.length > 0) {
api.removeFieldDefinedInfo(this.moduleName, params).then(data => {
if (data.status === '1') {
// this.initData();
this.tableEditConfig.fieldDef.selectedRowKeys.length = 0;
message.success(i18n.message.deleteSuccess());
} else
message.error(data.message);
}, error => {
})
} else {
this.tableEditConfig.fieldDef.selectedRowKeys.length = 0;
}
this.feildDefTableSelectedRows.length = 0;
}
@action onGroupSettingChange = (datas, type) => {
this.tableEditConfig[type === 'group' ? 'groupSetting' : 'childInfoSetting'].datas = datas;
}
@action onGroupSettingRowSelect = (sRowKeys, rows, dataIndex, selectedDatas, type) => {
if (dataIndex == null) {
this.groupSettingTableSelectedRows = sRowKeys;
} else {
if (selectedDatas != null && selectedDatas.hasOwnProperty(dataIndex)) {
const arr = selectedDatas[dataIndex];
this.tableEditConfig[type === 'group' ? 'groupSetting' : 'childInfoSetting'].datas.map((data, index) => {
data[dataIndex] = indexOf(arr, index) >= 0 ? '1' : '0';
})
}
}
}
@action onGroupSettingRowSelection = (rowSelection) => {
let sel = {
...rowSelection
}
sel.getCheckboxProps = (record) => {
return {
disabled: record.editable === false // ? true : has(record, 'editable') ? !record.editable : false
};
}
return sel;
}
@action("分组维护保存") doSaveGroupSetting = () => {
this.recordOP(this.editTable['groupSetting'], 'valid');
let groupNameArr = [],
tabArr = [];
const invalidEmpty = this.tableEditConfig.groupSetting.datas.some(group => {
groupNameArr.push(getCurrentLabel(group.groupName));
tabArr.push({
id: group.id,
isShow: group.isShow == null ? '0' : group.isShow,
groupName: group.groupName
})
return group.groupName === '';
})
if (invalidEmpty) {
// message.error(i18n.confirm.groupNameIsEmpty());
return;
} else if (uniq(groupNameArr).length === this.tableEditConfig.groupSetting.datas.length) {
let dataObj = {
records: tabArr
}
let params = {}
if (this.selectedTreeNodeInfo != null) {
dataObj.groupType = this.selectedTreeNodeInfo.key;
params.groupType = this.selectedTreeNodeInfo.key;
}
params.data = dataObj;
api.saveGroupSettingInfo(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
this.setDialogVisible('groupInfoSetting', false, '');
this.getTabInfoByTreeNode(false, true);
message.success(i18n.message.saveSuccess());
} else {
message.warning(data.msg);
}
}).catch(error => {
message.warning(error.msg);
})
} else {
message.error(i18n.confirm.groupNameExist());
}
}
@action("分组维护中删除") onGroupSettingDeleteOpr = (ks, ds, type) => {
let ids = [];
ds.map(d => {
if (has(d, 'id'))
ids.push(d.id)
});
let params = {
id: ids.join(',')
}
if (this.selectedTreeNodeInfo != null)
params.groupType = this.selectedTreeNodeInfo.key;
if (type === 'group') {
ids.length > 0 && api.removeGroupInfo(this.moduleName, params).then(data => {
if (data.status === '1') {
message.success(i18n.message.deleteSuccess());
// if (this.moduleName.indexOf('resource') >= 0)
this.getTabInfoByTreeNode(false, true);
// else
// this.initData(false, true);
} else {
message.error(data.message);
}
})
} else { }
}
//字段定义部分
@observable refreshTree = new Date().getTime();
@observable treeConfig = {
data: [],
selectedKeys: [],
treeExpandKeys: [],
onExpand: (keys) => {
this.treeConfig.treeExpandKeys = keys;
},
onSelectedTreeNode: (key, count, countType) => {
this.treeConfig.selectedKeys = [key];
this.selectedTreeNodeInfo = countType.node.props.data;
this.getTabInfoByTreeNode(null, true);
}
}
//选中树节点的信息
@observable selectedTreeNodeInfo;
//计算【工作信息】树节点以及子节点的domid
@computed get jobTreeNodeDomids() {
const {
data
} = this.treeConfig;
const domids = ['3'];
data && data.forEach(obj => {
const {
key,
childs
} = obj;
if (key === '3') {
childs.forEach(child => {
const {
domid
} = child;
domids.push(domid);
})
}
});
return domids;
}
//当前树节点是否为【工作信息】
@computed get isJobTreeNode() {
if (this.selectedTreeNodeInfo) {
const {
domid,
} = this.selectedTreeNodeInfo;
return this.jobTreeNodeDomids.includes(domid);
}
}
@computed get childInfoOperability() {
return this.selectedTreeNodeInfo && this.selectedTreeNodeInfo.domid == '-1';
}
@action initResourceData = (module) => {
this.selectedTreeNodeInfo = null;
this.dropdownSelectedKey = '1';
this.moduleName = module;
this.treeConfig.treeExpandKeys.length = 0;
api.getTree(this.moduleName).then(res => {
if (res.code === 200) {
// this.containerInitFinished = {
// ...this.containerInitFinished,
// init: true
// }
if (res.data.length > 0) {
this.treeConfig.data = res.data;
this.treeConfig.selectedKeys = [res.data[0].key];
this.selectedTreeNodeInfo = res.data[0];
this.getTabInfoByTreeNode(null, true);
}
} else {
message.error(res.msg);
}
}, error => { })
}
getTree = (callback) => {
this.treeConfig.data.length = 0;
this.refreshTree = new Date().getTime();
api.getTree(this.moduleName).then(res => {
if (res.code === 200) {
this.treeConfig.data = res.data;
this.treeConfig.data.map(p => {
if (p.domid === this.treeConfig.selectedKeys[0])
this.selectedTreeNodeInfo = p;
p.childs && p.childs.map(c => {
if (c.domid === this.treeConfig.selectedKeys[0])
this.selectedTreeNodeInfo = c;
})
})
callback && callback();
} else {
message.error(res.msg);
}
this.refreshTree = new Date().getTime();
}, error => { })
}
setBtn = (t) => {
if (!this.selectedTreeNodeInfo.hasGroup) {
t.topButtonDef.splice(1, 3);
}
t.topButtonDef.push({
comType: 'button',
type: 'primary',
onClickHandle: () => this.editTypeInfo(false, {
name: this.selectedTreeNodeInfo.name,
}),
label: i18n.button.editTypeInfo(),
icon: this.menuIconCollection.setting
})
if (this.selectedTreeNodeInfo.addChild) { //非子节点
this.tableEditConfig.childInfoSetting.showTitle = true;
this.tableEditConfig.childInfoSetting.showAdd = true;
this.tableEditConfig.childInfoSetting.showDelete = true;
let domid = this.selectedTreeNodeInfo.domid;
let defaultType = domid != '1' && domid != '2' && domid != '3' && domid != '4'
defaultType && t.topButtonDef.push({
comType: 'button',
type: 'primary',
onClickHandle: this.doChildInfoSetting,
label: i18n.button.childInfoMaintain(),
icon: this.menuIconCollection.setting
//checkAction: 'childInfoOperability'
});
} else {
this.tableEditConfig.childInfoSetting.showTitle = false;
this.tableEditConfig.childInfoSetting.showAdd = false;
this.tableEditConfig.childInfoSetting.showDelete = false;
t.topButtonDef.push({
comType: 'button',
type: 'primary',
onClickHandle: this.removeTypeInfo,
label: i18n.button.delete(),
icon: this.menuIconCollection.setting
})
}
if (this.selectedTreeNodeInfo.domid === '-1' || this.selectedTreeNodeInfo.addChild) {
this.tableEditConfig.fieldDef.columns[2].com[0].options = remove(this.tableEditConfig.fieldDef.columns[1].com[0].options, (v) => v != 'upload');
} else {
this.tableEditConfig.fieldDef.columns[2].com[0].options.push('upload');
}
}
addEmptyTab = (groupid) => {
let tabArr = [];
let t = cloneDeep(this.tabDef);
this.setBtn(t);
tabArr.push({
...t,
groupid,
viewCondition: '1'
});
this.tabConfig.tabs = [...tabArr];
}
@action getTabInfoByTreeNode = (create = false, init = false, isLeaf) => {
api.getTabInfo(this.moduleName, {
groupType: this.treeConfig.selectedKeys[0]
}).then(res => {
if (res.code === 200) {
this._groupInfoOperability = res.data.tabs.length === 0;
let tabArr = [];
this.tabRecord = res.data.tabs;
res.data.tabs && res.data.tabs.map((tabInfo, index) => {
let t = cloneDeep(this.tabDef);
this.setBtn(t);
tabArr.push({
...t,
...tabInfo,
viewCondition: `${tabArr.length + 1}`
});
});
this.tabConfig.tabs = [...tabArr];
if (tabArr.length > 0) {
this.setActiveTab(this.tabConfig, init ? '1' : !create ? this.tabConfig.activeTabKey : `${tabArr.length}`);
} else {
this.addEmptyTab(this.treeConfig.selectedKeys[0]);
this.setActiveTab(this.tabConfig, '1');
this.refreshMainTabComponent = new Date().getTime();
}
} else {
message.error(res.message);
}
})
}
isCreateChildInfo = false;
@action createChildInfo = (create = true, data = {}) => {
this.isCreateChildInfo = create;
this.editChildInfoFormFields.map(f => {
if (typeof (f.title) == 'function')
f.title = f.title();
f.items.map(item => {
if (typeof (item.label) == 'function')
item.label = item.label();
if (item.conditionType === 'INPUT')
item.otherParams = { ...window.inputType };
})
})
let fields = [...this.editChildInfoFormFields],
dialogTitle = create ? i18n.button.createChildInfo() : i18n.button.editChildInfo();
if (create) {
this.dialogParams.createChildInfo.height = 110;
} else {
fields[0].items.splice(1, 1);
this.dialogParams.createChildInfo.height = 70;
}
this.setFormData('childInfoForm', fields);
if (!create) {
this.formTarget.childInfoForm.updateFields({
name: {
value: data.multiName || data.name || ''
},
infoOrder: {
value: data.infoOrder
}
})
}
this.setDialogVisible('createChildInfo', true, dialogTitle);
}
@action("编辑子信息保存(f)") doSaveChildInfo = () => {
this.formTarget.childInfoForm.validateForm().then(f => {
if (f.isValid) {
let record = {
...this.formTarget.childInfoForm.getFormParams(),
isShow: 1
}
let cloneTree = cloneDeep(this.toJS(this.treeConfig.data));
let parentId;
let nameArr = [];
if (this.isCreateChildInfo) {
this.selectedTreeNodeInfo.childs.map(c => {
nameArr.push(getCurrentLabel(c.name));
})
nameArr.push(getCurrentLabel(record.name));
if (uniq(nameArr).length != nameArr.length) {
f.showError('name', i18n.confirm.childInfoNameExist());
this.showError = new Date().getTime();
return;
}
const i = findIndex(cloneTree, {
key: this.selectedTreeNodeInfo.key
});
cloneTree[i].childs.push(record)
parentId = this.selectedTreeNodeInfo.domid;
} else {
let checked = true;
cloneTree.map(p => {
p.childs && p.childs.map(c => {
if (c.domid === this.selectedTreeNodeInfo.domid) {
p.childs.map(child => {
if (child.domid != c.domid)
nameArr.push(getCurrentLabel(child.name));
else
nameArr.push(getCurrentLabel(record.name));
})
if (uniq(nameArr).length != nameArr.length) {
f.showError('name', i18n.confirm.childInfoNameExist());
this.showError = new Date().getTime();
checked = false;
return;
} else {
Object.assign(c, {
name: record.name
});
parentId = p.domid;
}
} else {
Object.assign(c, {
name: c.multiName
});
}
})
})
if (!checked)
return;
}
const params = {
data: JSON.stringify({
records: this.convertAttr(cloneTree)
}),
parentId
}
api.saveTree(params).then(data => {
if (data.status === '1') {
this.setDialogVisible('createChildInfo', false, '');
this.getTree();
message.success(i18n.message.saveSuccess());
} else
message.error(data.message);
}, error => {
message.error(i18n.message.actionError());
});
} else {
f.showErrors();
this.showError = new Date().getTime();
}
});
}
@action("子信息维护") doChildInfoSetting = () => {
this.tableEditConfig.childInfoSetting.datas.length = 0;
let arr = [];
if (!this.selectedTreeNodeInfo.addChild) {
arr.push({
"record": {
"id": this.selectedTreeNodeInfo.key,
"viewAttr": this.selectedTreeNodeInfo.viewAttr,
"isShow": this.selectedTreeNodeInfo.isShow,
"name": this.selectedTreeNodeInfo.multiName || this.selectedTreeNodeInfo.name || ''
},
"props": {
"checkProps": {
"isShow": {
"viewAttr": this.selectedTreeNodeInfo.viewAttr
}
}
}
})
} else {
this.selectedTreeNodeInfo.childs = this.selectedTreeNodeInfo.childs ? this.selectedTreeNodeInfo.childs : [];
this.selectedTreeNodeInfo.childs.map(child => {
let viewAttr = child.viewAttr;
if (viewAttr != 1 && has(child, 'editable')) {
viewAttr = !child.editable ? 1 : 2;
}
arr.push({
"record": {
"id": child.key,
"viewAttr": child.viewAttr,
"isShow": child.isShow,
"name": child.multiName || child.name || ''
},
"props": {
"checkProps": {
"isShow": {
viewAttr
}
}
}
})
})
}
Object.assign(this.tableEditConfig.childInfoSetting, {
...this.convertData(arr, 'childInfoSetting')
});
this.tableEditConfig.childInfoSetting.columns = this.childInfoDefColumns();
this.tableEditConfig.childInfoSetting.datas.map(d => {
Object.assign(d, {
com: {
name: [{
label: '',
type: 'INPUT',
key: 'name',
viewAttr: d.viewAttr,
otherParams: {
...window.inputType
}
}]
}
})
})
this.setDialogVisible('childInfoSetting', true, i18n.button.childInfoMaintain());
}
convertAttr = (cloneTree) => {
let arr = [];
cloneTree.map(root => {
let parent = {
id: root.key,
infoOrder: root.infoOrder,
name: root.name,
isShow: root.isShow
}
if (root.childs) {
parent.childs = [];
root.childs.map(c => {
parent.childs.push({
id: c.key || c.id,
name: c.name,
isShow: c.isShow,
infoOrder: c.infoOrder
})
})
}
arr.push(parent);
})
return arr;
}
@action("删除树信息") removeTypeInfo = () => {
this.confirmInfo({
content: i18n.confirm.deleteSelected(),
onOk: () => {
// let parentId;
// let cloneTree = cloneDeep(this.toJS(this.treeConfig.data));
// cloneTree.map(p => {
// p.childs && p.childs.map((c, i) => {
// if (c.domid === this.selectedTreeNodeInfo.domid) {
// parentId = p.domid;
// p.childs.splice(i, 1);
// }
// })
// })
// const params = {
// data: JSON.stringify({
// records: this.convertAttr(cloneTree)
// }),
// parentId
// }
const params = {
id: this.selectedTreeNodeInfo.domid
}
api.deleteTree(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
message.success(i18n.message.deleteSuccess());
this.getTree(() => {
this.treeConfig.selectedKeys = ['1'];
this.selectedTreeNodeInfo = this.treeConfig.data[0];
this.getTabInfoByTreeNode(null, true);
});
// this.treeConfig.selectedKeys = [this.treeConfig.data[0].key];
// this.selectedTreeNodeInfo = this.treeConfig.data[0];
// this.getTabInfoByTreeNode(null, true);
} else {
message.warning(data.msg);
}
}).catch(error => {
message.error(i18n.message.actionError());
})
}
});
}
@action("保存子信息维护") doSaveChildInfoSetting = () => {
this.recordOP(this.editTable['childInfoSetting'], 'valid');
let infoNameArr = [],
infoArr = [];
const invalidEmpty = this.tableEditConfig.childInfoSetting.datas.some(group => {
infoNameArr.push(getCurrentLabel(group.name));
infoArr.push({
id: group.id,
isShow: group.isShow == null ? '0' : group.isShow,
groupName: group.name
})
return group.name === '';
})
if (invalidEmpty) {
return;
} else if (uniq(infoNameArr).length === this.tableEditConfig.childInfoSetting.datas.length) {
let parentId;
let cloneTree = cloneDeep(this.toJS(this.treeConfig.data));
if (!this.selectedTreeNodeInfo.addChild) {
cloneTree.map(p => {
p.childs && p.childs.map(c => {
if (c.domid === infoArr[0].id) {
Object.assign(c, infoArr[0]);
parentId = p.domid;
}
})
})
} else {
parentId = this.selectedTreeNodeInfo.key;
const i = findIndex(cloneTree, {
key: this.selectedTreeNodeInfo.key
});
cloneTree[i].childs = [];
infoArr.map(info => {
cloneTree[i].childs.push({
...info
})
})
}
const params = {
data: JSON.stringify(infoArr),
parentId
}
api.saveTree(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
this.setDialogVisible('childInfoSetting', false, '');
this.getTree();
this.getTabInfoByTreeNode(null, true);
message.success(i18n.message.saveSuccess());
} else {
message.warning(data.msg);
}
}).catch(error => {
message.error(i18n.message.actionError());
})
} else {
message.error(i18n.confirm.groupNameExist());
}
}
@action("移动到组") dropdownClick = (e) => {
switch (e.key) {
case 'createAndMove':
this.editGroup(null, true);
break;
default:
const groupid = e.key;
const tabInfo = this.tabConfig.tabs[findIndex(this.tabConfig.tabs, {groupid })];
let moveFieldConfirm = i18n.confirm.moveFieldConfirm().replace('{params}', tabInfo.title);
this.changeGroup(moveFieldConfirm, groupid);
}
}
@action changeGroup = (moveFieldConfirm, groupid) => {
const params = {};
let ids = [];
let names = [];
this.tableEditConfig.fieldDef.selectedRowKeys.map(idx => {
try {
ids.push(this.tableEditConfig.fieldDef.datas[idx].id);
names.push(this.tableEditConfig.fieldDef.datas[idx].fieldname);
} catch (e) {
}
});
if (this.moduleName.indexOf('resource') > -1) {
Object.assign(params, {
fieldids: ids.join(','),
fieldnames: names.join(','),
groupid,
scopeid: this.selectedTreeNodeInfo.domid
})
} else {
Object.assign(params, {
fieldids: ids.join(','),
groupid
});
}
moveFieldConfirm == null ?
this.doChangeGroup(params) :
this.confirmInfo({
content: moveFieldConfirm,
onOk: () => {
this.doChangeGroup(params)
}
});
}
@action doChangeGroup = (params) => {
api.changeGroup(this.moduleName, params).then(response => {
return response.json()
}).then(data => {
if (data.code === 200) {
message.success(i18n.message.moveSuccess());
this.getTabInfoByTreeNode();
} else {
message.warning(data.msg);
}
}).catch(error => {
message.error(i18n.message.actionError());
})
}
@observable encryptDialogVisible = false;
@observable encryptDialogTitle = "";
get encryptDialogButtons() {
const buttonDef = [
{
content: getLabel(30986, '保存'),
icon: 'icon-coms-Preservation',
onClickHandle: this.saveEncryptFieldSettingForm
}
]
const buttons = [], moreBtnData = [];
buttonDef.map((btn, index) => {
const { content, icon, onClickHandle } = btn;
buttons.push(
(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@jyb1jz@${index}`} type='primary' onClick={onClickHandle}>{content}</Button>)
);
moreBtnData.push({
key: index.toString(),
content,
icon: <i className={icon} />,
onClick: onClickHandle
});
})
const { scopeId } = this.opParams;
let arr = [];
if (scopeId == '-1') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEBASE', this.encryptParams.encryptId);
} else if (scopeId == '1') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEPERSONAL', this.encryptParams.encryptId);
} else if (scopeId == '3') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEWORK', this.encryptParams.encryptId);
} else if (scopeId == 'subcompany') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_SUBCOMPANY', this.encryptParams.encryptId);
} else if (scopeId == 'department') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_DEPARTEMENT', this.encryptParams.encryptId);
} else if (scopeId == 'salary') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_SALARY');
} else { }
moreBtnData.push(...arr);
return { buttons, moreBtn: { datas: moreBtnData } };
}
@computed get encryptDialogProps() {
return {
title: this.encryptDialogTitle,
style: {
width: 600,
height: 350
},
...ecCom.WeaTools.getIconBGC('currency'),
...this.encryptDialogButtons,
visible: this.encryptDialogVisible,
onCancel: this.onEncryptDialogClose
}
}
@computed get encryptFormItemRender() {
return {
desensitization: (field, textAreaProps, form, formParams) => {
return (
<WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@v2n5at`} fieldConfig={{ ...field, textAreaProps }} form={form} formParams={formParams} onChange={this.onDesensitizationChangeHandle} />
)
},
secondauth: (field, textAreaProps, form, formParams) => {
return (
<WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@rdlc6m`} fieldConfig={{ ...field, textAreaProps, disabled: formParams.desensitization != '1' }} form={form} formParams={formParams} />
)
},
viewscope: (field, textAreaProps, form, formParams) => {
if (formParams.desensitization == '1')
return (
<div>
<div style={{ width: '70%', float: 'left' }}>
<WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@0wzv1t`} fieldConfig={{ ...field, textAreaProps }} form={form} formParams={formParams} />
</div>
{
formParams.viewscope == '1' &&
<span style={{ color: '#00A9FF', cursor: 'pointer', paddingLeft: '8px', lineHeight: '30px' }} onClick={this.showSettingDialog}>{getLabel(30747, '设置')}</span>
}
</div>
)
return null;
},
}
}
@action onDesensitizationChangeHandle = data => {
const desensitization = data.desensitization.value;
desensitization == '0' && this.formTarget.encryptForm.updateFields({
secondauth: {
value: '0'
}
})
}
@action onEncryptDialogClose = () => this.encryptDialogVisible = false;
encryptParams = {};
@action onEncryptHandle = async record => {
const { fieldname, tablename, fieldlabel, encryptId } = record;
this.encryptParams = { fieldname, tablename, encryptId };
const label = getCurrentLabel(fieldlabel);
const data = await api.getEncryptFieldSettingForm({ ...this.encryptParams, ...this.opParams });
if (data.status == '1') {
this.setFormData('encryptForm', data.conditions);
if (this.formTarget.encryptForm.isFormInit) {
this.encryptDialogTitle = `${getLabel('526997', '加密设置')}(${getLabel('261', '字段')}:${label})`;
this.encryptDialogVisible = true;
}
} else {
message.error(data.message);
}
}
@observable needInitData = '1';
get encrypt() {
const { isencrypt } = this.formTarget.encryptForm.getFormParams();
const fields = this.formTarget.encryptFormFields;
const col = find(fields[0].items, { domkey: ['isencrypt'] });
const { otherParams } = col || {};
const { disabled } = otherParams || {};
return isencrypt == '1' && !disabled;
}
@action saveEncryptFieldSettingForm = async () => {
const f = await this.formTarget.encryptForm.validateForm();
if (f.isValid) {
if (this.encrypt) {
this.confirmInfo({
width: 500,
content: (
<div>
<div>1.{getLabel('524355', '提示: 字段一旦加密后无法取消,同时加密后的字段不支持查询,请谨慎操作!')}</div><br />
<div>
<span>2.{getLabel('531157', '历史数据量可能较大, 此操作可能需要较长时间,对系统性能也可能会造成一定影响,请确认是否处理历史数据:')}</span>
<span>
<WeaSelect style={{ display: 'inline' }} ecId='bs_hrm_fielddefine_confirm_select'
options={[
{
key: '1',
selected: false,
showname: getLabel('553', '处理')
}, {
key: '0',
selected: false,
showname: getLabel('529752', '不处理')
},
]}
detailtype={3}
value={this.needInitData}
supportCancel
onChange={(v, showname) => {
this.needInitData = v;
}}
/>
</span>
</div>
</div>
),
onOk: this.doSaveEncryptFieldSettingForm
})
} else {
this.needInitData = '0';
this.doSaveEncryptFieldSettingForm();
}
} else {
f.showErrors();
this.showError = new Date().getTime();
}
}
@action doSaveEncryptFieldSettingForm = async () => {
if (this.spinning)
return;
this.spinning = true;
const params = { ...this.formTarget.encryptForm.getFormParams(), ...this.encryptParams, needInitData: this.needInitData, ...this.opParams }
if (this.selectedTreeNodeInfo != null) {
Object.assign(params, {
scopeid: this.selectedTreeNodeInfo.key
})
}
try {
const data = await api.saveEncryptFieldSettingForm(params);
if (data.status == '1') {
this.encryptDialogVisible = false;
message.success(i18n.message.saveSuccess());
// if (this.moduleName.indexOf('resource') >= 0)
this.getTabInfoByTreeNode();
// else
// this.initData();
} else {
message.error(data.message);
}
this.spinning = false;
} catch (e) {
this.spinning = false;
}
}
//#region 查看范围设置
target = {};
@observable dialogVisible = false;
@observable table = new TableStore();
@observable canAdd = false;
@observable canDel = false;
@computed get tableMultiDelete() {
return this.table.selectedRowKeys.length === 0 || !this.canDel;
}
@computed get rangeViewTabProps() {
return {
datas: [],
buttons: [
<WeaButtonIcon ecId={`${this && this.props && this.props.ecId || ''}_WeaButtonIcon@yj28no@${'add'}`} buttonType='add' type='primary' onClick={this.getViewRangeForm} disabled={!this.canAdd} />,
<WeaButtonIcon ecId={`${this && this.props && this.props.ecId || ''}_WeaButtonIcon@ru7ee8@${'del'}`} buttonType='del' type='primary' onClick={this.doMultiDel} disabled={this.tableMultiDelete} />,
]
}
}
@action onDialogCancleHandle = () => this.dialogVisible = false;
get dialogButtons() {
const buttonDef = [
{
content: getLabel(30986, '保存'),
icon: 'icon-coms-Preservation',
onClickHandle: this.saveViewRange
}
]
const buttons = [], moreBtnData = [];
buttonDef.map((btn, index) => {
const { content, icon, onClickHandle } = btn;
buttons.push(
(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@lq21or@${index}`} type='primary' onClick={onClickHandle}>{content}</Button>)
);
moreBtnData.push({
key: index.toString(),
content,
icon: <i className={icon} />,
onClick: onClickHandle
});
})
const { scopeId } = this.opParams;
let arr = [];
if (scopeId == '-1') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEBASE', this.encryptParams.encryptId);
} else if (scopeId == '1') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEPERSONAL', this.encryptParams.encryptId);
} else if (scopeId == '3') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_RESOURCEWORK', this.encryptParams.encryptId);
} else if (scopeId == 'subcompany') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_SUBCOMPANY', this.encryptParams.encryptId);
} else if (scopeId == 'department') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_DEPARTEMENT', this.encryptParams.encryptId);
} else if (scopeId == 'salary') {
arr = this.generateLogMenu('38', 'HRM_RSOURCE_SALARY');
} else { }
moreBtnData.push(...arr);
return { buttons, moreBtn: { datas: moreBtnData } };
}
@computed get dialogProps() {
return {
title: getLabel('125012', '查看范围设置'),
style: {
width: 800,
height: 600
},
...ecCom.WeaTools.getIconBGC('currency'),
...this.dialogButtons,
visible: this.dialogVisible,
onCancel: this.onDialogCancleHandle,
}
}
@computed get rangeViewTableProps() {
return {
comsWeaTableStore: this.table,
hasOrder: true,
needScroll: true,
scroll: {
y: 550
},
onOperatesClick: this.onOperatesClickHandle
}
}
@action showSettingDialog = async () => {
if (this.encryptParams.encryptId == null || this.encryptParams.encryptId == '') {
this.confirmInfo({
content: getLabel('524355', '提示: 字段一旦加密后无法取消,同时加密后的字段不支持查询,请谨慎操作!'),
onOk: async () => {
const rs = await api.saveEncryptFieldSettingForm({ ...this.formTarget.encryptForm.getFormParams(), ...this.encryptParams, ...this.opParams });
if (rs.status == '1') {
this.encryptParams.encryptId = rs.encryptId;
// if (this.moduleName.indexOf('resource') >= 0)
this.getTabInfoByTreeNode();
// else
// this.initData();
this.dialogVisible = this.getEncryptFieldScopeList();
} else {
message.error(data.message);
}
}
});
} else
this.dialogVisible = this.getEncryptFieldScopeList();
}
@action getEncryptFieldScopeList = async () => {
const d = await api.getEncryptFieldScopeList({ id: this.encryptParams.encryptId });
if (d.status == '1') {
const { canAdd, canDel, sessionkey } = d;
this.canAdd = canAdd;
this.canDel = canDel;
this.table = new TableStore();
this.table.getDatas(sessionkey);
return true;
} else {
message.error(d.message);
return false;
}
}
@action onOperatesClickHandle = (record, index, operate) => {
const func = operate.href ? operate.href.split(':')[1].split('(')[0] : '';
const id = record.id || '';
this[func] && this[func](id, record);
}
@action doMultiDel = () => this.doDel();
@action doDel = ids => {
const params = {
fieldid: this.encryptParams.encryptId,
ids: ids || this.table.selectedRowKeys
};
let content = isEmpty(ids) ? getLabel(385625, '确定要删除选择的记录吗?') : getLabel(83877, '确定要删除吗?');
this.confirmInfo({
content,
onOk: async () => {
const data = await api.delEncryptFieldScopeSetting({ ...params, ...this.opParams });
if (data.status === "1") {
message.success(getLabel(83472, '删除成功!'));
this.table.getDatas(null, 1);
} else {
message.error(data.message);
}
}
});
}
@action saveViewRange = async () => {
this.onDialogCancleHandle();
}
//#endregion
//#region 范围form
@observable conditions = [];
@observable viewRangeAuthVisible = false;
@computed get viewRangeAuthProps() {
return {
title: getLabel('383694', '添加人员'),
conditions: this.toJS(this.conditions),
...ecCom.WeaTools.getIconBGC('currency'),
visible: this.viewRangeAuthVisible,
onOk: this.onOKHandle,
onCancel: this.onViewRangeAuthCancleHandle,
}
}
@action getViewRangeForm = async () => {
const data = await api.getEncryptFieldScopeForm();
if (data.status == "1") {
this.conditions = data.conditions;
this.viewRangeAuthVisible = true;
}
}
@action onOKHandle = async data => {
const d = await api.saveEncryptFieldScopeSetting({ id: this.encryptParams.encryptId, ...data, ...this.opParams });
if (d.status == '1') {
message.success(getLabel(83551, '保存成功!'));
this.getEncryptFieldScopeList();
} else {
message.error(d.message);
}
this.viewRangeAuthVisible = false;
}
@action onViewRangeAuthCancleHandle = () => {
this.viewRangeAuthVisible = !this.viewRangeAuthVisible;
}
get opParams() {
const obj = {
fieldname: this.encryptParams.fieldname
}
const name = (this.moduleName || '').toLocaleLowerCase();
if (name.indexOf('subcompany') > -1) {
Object.assign(obj, {
scopeId: 'subcompany'
});
} else if (name.indexOf('department') > -1) {
Object.assign(obj, {
scopeId: 'department'
});
}
this.selectedTreeNodeInfo != null && Object.assign(obj, {
scopeId: this.selectedTreeNodeInfo.key
});
return obj;
}
//#endregion
/********************* action list *********************/
}