mh-sms-web/src/baseComponents/EditComponent/index.js
2024-07-09 10:22:56 +08:00

2468 lines
86 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.

import React from 'react'
import {
extendRule,
getDataFieldValue,
getParseValue,
guid,
initFilter,
permissionUtils,
setDataFieldValue,
extendInclude,
getCustomParams,
extendIgnoreDataRule
} from '../../utils/common'
import { message, Collapse, Button, Row, Form, Dropdown, Tabs } from 'antd';
import EditBaseComponent from "../EditBaseComponent";
import styles from '../Component.css';
import CustomFieldsManage from '../../components/common/CustomFieldsManage';
import classNames from 'classnames'
const Panel = Collapse.Panel;
const TabPane = Tabs.TabPane;
class EditComponent extends EditBaseComponent {
constructor(props) {
super(props);
this.state = {
data: {},
initData: {
ENABLE_STATUS: 0
},
columns: [],
editData: {},
btnData: [],
formData: {},
jsFile: '',
loading: false,
subTable: [],
isRegSaveFunc: false,
btnLoading: false, // 触发按钮loading
cusLoading: false, // 触发自定义按钮loading
};
this.billStatus = 0;
this.getparentinfo = false;
};
componentDidMount() {
super.componentDidMount();
this.billStatus = 0;
};
componentWillReceiveProps(NextProps) {
super.componentWillReceiveProps(NextProps);
}
onLoadData() {
super.onLoadData();
this.billStatus = 0;
this.getEditConfigByPage({ formCode: this.props.formCode });
}
/*
获取动态函数
*/
getDynJsFunc(funcName) {
let func = null;
//取静态公共方法
if (!func) {
const jsFile = this.getStaticJsFunc();
func = jsFile[funcName];
}
//取props中的动态js方法
if (!func && this.props.dynJsFunc) {
func = this.props.dynJsFunc[funcName];
}
//取加载data中的动态方法
if (!func && this.props && this.props.data && this.props.data.dynJsFunc) {
func = this.props.data.dynJsFunc[funcName];
};
//取动态js中的动态方法
if (this.state.jsFile || this.props.jsFile) {
const jsFiles = this.state.jsFile ? this.state.jsFile.split(',') : [];
const tmpJs = this.props.jsFile ? this.props.jsFile.split(',') : [];
if (tmpJs && tmpJs.length) {
tmpJs.forEach(t => {
jsFiles.push(t);
});
};
if (jsFiles) {
jsFiles.forEach(t => {
if (func) return;
const jsFile = require('../../files/edit/' + t).default;
func = jsFile[funcName];
});
}
}
return func;
};
setStateData(val) {
this.setState({
data: val
})
}
getStaticJsFunc() {
return {
};
};
/*
根据编辑页列信息获取控件配置信息
col编辑页列信息
record数据记录
*/
getControlConfigByEditCol({ col, onChange, onBlur }) {
const { CONTROL_TYPE: controlType } = col;
const promptInfo = col.PROMPT_INFO ? col.PROMPT_INFO : (col.LABEL + (controlType === 13 ? ',回车填充' : ''));
const isShow = (this.props.data && this.props.data.isShow) ? this.props.data.isShow : false;
const isPermit = (this.props.data && this.props.data.isPermit) ? this.props.data.isPermit : false;
const disabled = !col.EDITABLE || isShow || isPermit && !col.PERMIT_EDITABLE;
let tmpData = {};
// 下拉
if (controlType === 3) {
tmpData = {
enumName: col.ENUM,
}
}
// 多选控件
else if (controlType === 5) {
tmpData = {
enumName: col.ENUM,
}
}
// 数值
else if (controlType === 7) {
tmpData = {
maxVal: col.MAX_VAL || 0,//最大值
minVal: col.MIN_VAL || 0, //最小值
isCheckMax: col.IS_CHECK_MAX,//是否开启最大值校验
isCheckMin: col.IS_CHECK_MIN,//是否开启最小值校验
step: col.STEP,//步长
}
}
// 分页下拉 树选择 扫描 级联
else if (controlType === 9 || controlType === 13 || controlType === 11 || controlType === 17 || controlType == 24) {
const extIncludeFields = [];
// 填充导航属性
if (col.Nav_FillMaps) {
col.Nav_FillMaps.forEach(t => {
if (t.SRC_NAV) {
extIncludeFields.push(t.SRC_NAV);
}
if (t.Nav_Details) {
t.Nav_Details.forEach(s => {
if (s.SRC_FIELD_NAME && s.SRC_FIELD_NAME.indexOf('.') > 0) {
let pos = s.SRC_FIELD_NAME.lastIndexOf('.');
let includeField = s.SRC_FIELD_NAME.substring(0, pos);
extIncludeFields.push(t.SRC_NAV + '.' + includeField);
}
});
}
});
}
tmpData = {
api: col.INPUT_DATA_API,
showField: col.INPUT_SHOW_FIELD,
showLevel: col.INPUT_DATA_LEVEL,
onlyLeaf: col.IS_ONLY_CHECK_LEAF,
navField: col.INPUT_NAV_FIELD,
labelField: col.INPUT_LABEL_FIELD,
selectLabelField: col.SELECTD_LABEL_FIELD,
filterField: col.INPUT_FILTER_FIELD,
sortField: col.INPUT_SORT_FIELD,
sortOrder: col.INPUT_SORT_ORDER,
saveField: col.INPUT_SAVE_FIELD,
idField: col.INPUT_ID_FIELD,
extIncludeFields: extIncludeFields,
filterOrgType: col.INPUT_FILTER_ORG_TYPE,
isKeepValueByClear: col.INPUT_KEEP_VALUE_BY_NO_SRC,
authOrgCodes: col.AUTH_ORG_CODES,
isIgnoreTenant: col.IS_IGNORE_TENANT
}
}
// 下拉多选
else if (controlType === 12) {
tmpData = {
enumName: col.ENUM,
}
}
// 系统序列号控件
else if (controlType === 14) {
tmpData = {
codeRuleType: col.CODE_RULE_TYPE,
onGetCodeRule: (save, codeType) => {
const json = initFilter(this.props.login.OrgId);
json.Count = 1;
json.CodeType = codeType;
this.props.dispatch({
type: 'app/genSystemCode',
payload: json,
onComplete: (ret) => {
if (ret) {
save(ret);
this.saveUseCodeRule(codeType, ret);
}
}
});
}
}
}
return {
id: col.ID,
controlType,
code: col.CODE,
visible: col.IS_DEFAULT,
field: col.FIELD_NAME,
disabled: disabled,
isRequire: col.REQUIRED,
label: col.LABEL,
promptInfo,
onChange,
ruleExp: col.VERIFY_EXPRESS,
ruleExpInfo: col.VERIFY_ERROR_INFO,
width: col.WIDTH,
height: col.HEIGHT,
showFormCode: col.SHOW_FORM_CODE,
showIdField: col.SHOW_ID_FIELD,
showFormParms: col.CUSTOM_PARAMS,
editFormCode: col.EDIT_FORM_CODE,
editFormFilter: col.EDIT_FORM_FILTER,
editFormFilterValue: col.EDIT_FORM_FILTER_VALUE,
data: tmpData,
onBlur,
span: this.props.isTree ? { span: 12 } : null,
column: col,
caseType: col.CASE,
minLen: col.MIN_LEN || 0,
maxLen: col.MAX_LEN || 0, // 0 表示不限制最大长度
maxVal: col.MAX_VAL || 0,//最大值
minVal: col.MIN_VAL || 0, //最小值
isCheckMax: col.IS_CHECK_MAX,//是否开启最大值校验
isCheckMin: col.IS_CHECK_MIN,//是否开启最小值校验
step: col.STEP,//步长
errVerifyMsg: col.VERIFY_MSG,
remark: col.REMARK
}
}
/*
根据编辑页列信息填充记录默认值
*/
fillEditColumnDefaultValue({ record, cols, getHeadFieldValue }) {
cols.forEach(n => {
if (n.DEFAULT_VALUE != null && n.DEFAULT_VALUE !== '') {
let v = getParseValue(n.DEFAULT_VALUE, this.props.login.user, getHeadFieldValue);
v = this.getControlValue({ controlType: n.CONTROL_TYPE, data: { enumName: n.ENUM }, value: v });
setDataFieldValue(record, n.FIELD_NAME, v);
};
});
}
/*
根据编辑页列信息初始化列配置信息
*/
initColumnConfigByEditCols({ editColumns, editPanels, customHidCols, customCols, columns, panels, customCfg, onChange, onBlur, getFieldValue, onDropDownFilter, onSelect, isBatchEdit }) {
if (editColumns && editColumns.length) {
let isNeedSort = false;
editColumns.forEach(n1 => {
n1.DB_NUM = n1.DB_NUM !== undefined && n1.DB_NUM !== null ? n1.DB_NUM : n1.NUM;
n1.DB_LABEL = n1.DB_LABEL !== undefined && n1.DB_LABEL !== null ? n1.DB_LABEL : n1.LABEL;
if (n1.LABEL !== n1.DB_LABEL) {
n1.LABEL = n1.DB_LABEL;
}
if (n1.NUM !== n1.DB_NUM) {
n1.NUM = n1.DB_NUM;
isNeedSort = true;
}
const temps = customCols ? customCols.filter(t => t.EDIT_COLUMN_ID === n1.ID) : null;//自定义列信息 如显示名称、顺序
if (temps && temps.length) {
const col = temps[0];
if (col.LABEL) {
n1.LABEL = col.LABEL;
}
if (col.NUM !== undefined && col.NUM !== null) {
n1.NUM = col.NUM;
isNeedSort = true;
}
}
});
if (isNeedSort) {
editColumns.sort((x, y) => x.NUM > y.NUM ? 1 : -1);
}
const tmpColumns = [];
editColumns.forEach(col => {
if (!col.IS_DEFAULT || isBatchEdit && (!col.IS_CAN_BATCH_EDIT || !col.EDITABLE)) {
return;
}
const isSysParam = col.FIELD_NAME ? col.FIELD_NAME.indexOf('Nav_SysParams') > -1 : false;
let isHidden = false;
if (customHidCols) {
isHidden = customHidCols.filter(t => t.EDIT_COLUMN_ID === col.ID).length > 0;
}
if (customCfg && !isSysParam) {
customCfg.push({//填充自定义
ID: col.ID,
EDIT_COLUMN_ID: col.ID,
title: col.LABEL,
isCheck: !isHidden,
isRequire: col.REQUIRED,
num: col.NUM,
dbTitle: col.DB_LABEL,
dbNum: col.DB_NUM,
});
}
if (isHidden) {
return;
}
const colConfig = this.getControlConfigByEditCol({ col: col });
tmpColumns.push(colConfig);
});
if (tmpColumns && tmpColumns.length) {
tmpColumns.forEach(t => {
let isGet = false;
if (editPanels && editPanels.length && panels) {
const temps = editPanels.filter(t1 => t1.ID === t.column.PAGE_EDIT_PANEL_ID);
if (temps != null && temps.length) {
isGet = true;
const temps2 = panels.filter(t2 => t2.id === temps[0].ID);
if (!temps2 || !temps2.length) {
panels.push({
panel: temps[0],
id: temps[0].ID,
columns: [t],
num: temps[0].NUM,
editColumns: [t.column],
});
}
else {
temps2[0].columns.push(t);
temps2[0].editColumns.push(t.column);
}
}
}
if (!isGet) {
columns.push(t);
}
});
}
}
}
getCustomCols(cuCfg, field, value) {
if (field === 'title') {
if (cuCfg.dbTitle !== value) {
return { EDIT_COLUMN_ID: cuCfg.ID, LABEL: value };
}
}
else if (field === 'num') {
if (cuCfg.dbNum !== value) {
return { EDIT_COLUMN_ID: cuCfg.ID, NUM: value };
}
}
return null;
}
saveCustomConfig = (dbCustomCfg, pageEditId) => { // 保存配置字段
const hiddenTmps = [];
const colTmps = [];
if (dbCustomCfg && dbCustomCfg.length) {
dbCustomCfg.forEach((n, i) => {
if (!n.isCheck) {
hiddenTmps.push(n.ID);
}
const titleJson = this.getCustomCols(n, 'title', n.title);
const numJson = this.getCustomCols(n, 'num', n.num);
if (titleJson || numJson) {
let json = titleJson ? titleJson : {};
if (numJson) {
json = { ...json, ...numJson };
}
colTmps.push(json)
}
});
}
const json = {
UserId: this.props.login.userId,
OrgId: this.props.login.OrgId,
PageEditId: pageEditId,
HiddenEditColumnIds: hiddenTmps,
EditColumns: colTmps,
};
this.props.dispatch({
type: 'editPage/saveUserCustomConfig',
payload: json,
onComplete: (ret) => {
if (ret) {
message.success('执行成功');
}
}
});
}
clearCustomConfig(pageEditId, editCode, editColumns, editPanels) { //重置自定义信息
const columns = [], panels = [], customCfg = [];
this.initColumnConfigByEditCols({ editColumns, editPanels, columns, panels, customCfg });
this.setEditConfig({ editCode, editConfig: { columns: columns, customCfg, panels } });
const json = {
UserId: this.props.login.userId,
OrgId: this.props.login.OrgId,
PageEditId: pageEditId,
};
this.props.dispatch({
type: 'editPage/saveUserCustomConfig',
payload: json,
onComplete: (ret) => {
if (ret) {
message.success('执行成功');
}
}
});
}
handleCustomFieldChange(dbCustomCfg, field, value, cuCfg, editCode, editColumns, editPanels) {//自定义字段发生改变
const isHidden = field === 'check';
const tmp = [...dbCustomCfg];
const columns = [], panels = [], customCfg = [], customHidCols = [], customCols = [];
tmp.forEach((n1, i1) => {
if (n1.ID !== cuCfg.ID) {
if (!n1.isCheck) {
customHidCols.push(n1);
}
}
const titleJson = this.getCustomCols(n1, 'title', isHidden || n1.ID !== cuCfg.ID || n1.ID === cuCfg.ID && field !== 'title' ? n1.title : value);
const numJson = this.getCustomCols(n1, 'num', isHidden || field !== 'num' || value[n1.ID] === undefined ? n1.num : value[n1.ID]);
if (titleJson || numJson) {
let json = titleJson ? titleJson : {};
if (numJson) {
json = { ...json, ...numJson };
}
customCols.push(json)
}
});
if (isHidden && !value) {
customHidCols.push(cuCfg);
}
this.initColumnConfigByEditCols({ editColumns, editPanels, customHidCols, customCols, columns, panels, customCfg });
this.setEditConfig({ editCode, editConfig: { columns: columns, customCfg, panels } });
}
getTreeConfigByTreePage(ret) {
const isShow = (this.props.data && this.props.data.isShow) ? this.props.data.isShow : false;
const isPermit = (this.props.data && this.props.data.isPermit) ? this.props.data.isPermit : false;
const treeConfig = {
formCode: ret.Nav_Form.CODE,
formId: ret.Nav_Form.ID,
api: ret.Nav_PageTree.QUERY_API_URL,
deleteApi: ret.Nav_PageTree.BATCH_DEL_API_URL,
relationField: ret.Nav_PageTree.RELATION_FIELD,
relationId: this.props.data ? this.props.data.id : null,
sort: ret.Nav_PageTree.SORT,
order: ret.Nav_PageTree.ORDER,
titleColumns: [],
btns: [],
};
if (ret.Nav_Columns && ret.Nav_Columns.length) {
ret.Nav_Columns.forEach(t => {
treeConfig.titleColumns.push({
field: t.FIELD_NAME,
});
});
}
if (ret.Nav_Btns && ret.Nav_Btns.length) {
ret.Nav_Btns.forEach(t => {
if (t.ENABLE_STATUS === 1) return;//不启用
treeConfig.btns.push({
btnType: t.BTN_TYPE,
id: t.ID,
isRule: t.IS_RULE,
disabled: isShow || isPermit,
btn: t,
});
});
}
return treeConfig;
}
getFieldValue(field, thisRef) {
if (thisRef) {
return getDataFieldValue(thisRef.state.data, field);
}
return getDataFieldValue(this.state.data, field);
};
setFieldValue = (field, value, thisRef) => {
if (thisRef) {
thisRef.setFieldValueByBatch([{ field, value }]);
}
else {
this.setFieldValueByBatch([{ field, value }]);
}
};
setFieldValueByBatch(fieldValues, thisRef) {
if (!fieldValues) return;
if (!thisRef) {
thisRef = this;
}
const headColumnConfig = thisRef.getEditConfig();
const cols = headColumnConfig ? headColumnConfig.columns : [];
const data = {};
fieldValues.forEach((n, i) => {
let value = n.value;
let field = n.field;
if (!field) return;
let col = null;
cols.forEach(item => {
if (item.field === field) {
n.col = col;
}
});
if (headColumnConfig.panels && headColumnConfig.panels.length > 0) {
headColumnConfig.panels.forEach(panel => {
if (panel.columns && panel.columns.length > 0)
panel.columns.forEach(col => {
n.col = col;
})
})
}
if (col) {
value = thisRef.getControlValue({ controlType: col.controlType, value, data: col.data });
setDataFieldValue(data, field, value);
}
else {
setDataFieldValue(data, field, value);
}
n.col = col;
});
thisRef.saveHeadRecord(data, () => {
fieldValues.forEach((n, i) => {
if (n.col && n.col.column) {
thisRef.handleFieldChangeEvent(n.value, n.col.column);
}
});
});
};
setFieldEditable(field, editable, thisRef, editCode) {
if (!thisRef) {
thisRef = this;
}
const headColumnConfig = thisRef.getEditConfig({ "editCode": editCode });
const cols = headColumnConfig ? headColumnConfig.columns : [];
cols.forEach(col => {
if (col.field === field) {
col.disabled = !editable;
}
});
if (!editCode || editCode === 'head') {
if (headColumnConfig.panels && headColumnConfig.panels.length > 0) {
headColumnConfig.panels.forEach(panel => {
if (panel.columns && panel.columns.length > 0)
panel.columns.forEach(col => {
if (col.field === field) {
col.disabled = !editable;
}
})
})
}
thisRef.setEditConfig({
editConfig: headColumnConfig,
});
} else {
thisRef.setEditConfig({
editCode: editCode,
editConfig: cols,
});
}
};
setFieldRequired(field, required, thisRef) {
if (!thisRef) {
thisRef = this;
}
const headColumnConfig = thisRef.getEditConfig();
const cols = headColumnConfig ? headColumnConfig.columns : [];
cols.forEach(col => {
if (col.field === field) {
col.isRequire = required;
}
});
if (headColumnConfig.panels && headColumnConfig.panels.length > 0) {
headColumnConfig.panels.forEach(panel => {
if (panel.columns && panel.columns.length > 0)
panel.columns.forEach(col => {
if (col.field === field) {
col.isRequire = required;
}
})
})
}
thisRef.setEditConfig({
editConfig: headColumnConfig,
});
};
setFieldVisible = (field, visible, thisRef) => {
if (thisRef) {
thisRef.setFieldVisibleByBatch([{ field, visible }], thisRef);
}
else {
this.setFieldVisibleByBatch([{ field, visible }]);
}
};
setFieldVisibleByBatch = (list, thisRef) => {
if (!list || list.length === 0) return;
if (!thisRef) {
thisRef = this;
}
const params = {};
list.forEach(t => {
params[t.field] = t.visible;
});
thisRef.setHeadFieldVisible(params);
};
getEditConfigByPage({ formCode, onComplete }) {
const { dispatch, login, form } = this.props;
const { OrgId: ORG_ID } = login;
if (form != null) {
form.resetFields();
}
const json = initFilter(ORG_ID, formCode, '', 0);
dispatch({
type: 'editPage/getEditPageConfigInfo',
payload: json,
onComplete: (ret) => {
if (ret) {
this.getEditUserCustomConfigInfo(ret, onComplete);
}
}
})
}
getEditUserCustomConfigInfo = (ret, onComplete) => {
const { login } = this.props;
if (ret.Nav_PageEdit && ret.Nav_PageEdit.Nav_PageEdit) {
let json2 = initFilter(login.OrgId, ret.Nav_PageEdit.Nav_PageEdit.ID, "NUM", 0, 1, login.user.ID);
this.props.dispatch({
type: 'editPage/getUserCustomConfigInfo',
payload: json2,
onComplete: (ret2) => {
ret.Nav_CustomHiddenEditCols = ret2 ? ret2.Nav_CustomHiddenEditCols : null;
ret.Nav_CustomCols = ret2 ? ret2.Nav_CustomCols : null;
this.doGetEditConfigByPage(ret, onComplete);
}
});
}
else {
this.doGetEditConfigByPage(ret, onComplete);
}
};
doGetEditConfigByPage = (ret, onComplete) => {
let editData = {};
let btnData = [], columns = [], customCfg = [], allColumns = [], navFields = [], allPanels = [], panels = [],
activePanelIds = [], detailEditCodes = [], rowBtns = [], btns = [];
const subTable = [];
if (ret.Nav_PageEdit) {
editData = ret.Nav_PageEdit.Nav_PageEdit;
btnData = ret.Nav_PageEdit.Nav_Btns;
allColumns = ret.Nav_PageEdit.Nav_Columns;
allPanels = ret.Nav_PageEdit.Nav_EditPanels;
if (allColumns && allColumns.length) {
allColumns.forEach(t => {
if (t.FIELD_NAME && t.FIELD_NAME.indexOf('.') > 0) {
let pos = t.FIELD_NAME.lastIndexOf('.');
if (pos >= 0) {
let includeTable = t.FIELD_NAME.substring(0, pos);
navFields.push(includeTable);
}
}
if (t.CONTROL_TYPE == 24)//分页下拉多选
{
navFields.push(t.FIELD_NAME);
if (t.INPUT_LABEL_FIELD && t.INPUT_LABEL_FIELD.indexOf('.') > 0) {
let pos = t.INPUT_LABEL_FIELD.lastIndexOf('.');
if (pos >= 0) {
let includeTable = t.INPUT_LABEL_FIELD.substring(0, pos);
navFields.push(t.FIELD_NAME + "." + includeTable);
}
}
}
});
}
// 针对横向树结构的复制,赋值
const childsetfield = editData.CHILD_SET_FIELD;
const parentcopyfield = editData.PARENT_COPY_FIELD;
if (childsetfield && parentcopyfield && childsetfield.split(',').length === parentcopyfield.split(',').length) {
this.getparentinfo = true;
const childsetfields = childsetfield.split(',');
const parentcopyfields = parentcopyfield.split(',');
for (const childset of childsetfields) {
if (childset.indexOf('.') > 0) {
let pos = childset.lastIndexOf('.');
if (pos >= 0) {
let includeTable = childset.substring(0, pos);
navFields.push(includeTable);
}
}
}
for (const parentcopy of parentcopyfields) {
if (parentcopy.indexOf('.') > 0) {
let pos = parentcopy.lastIndexOf('.');
if (pos >= 0) {
let includeTable = parentcopy.substring(0, pos);
navFields.push(includeTable);
}
}
}
}
}
if (ret.Nav_SubPageEdits && ret.Nav_SubPageEdits.length) {
ret.Nav_SubPageEdits.forEach(t => {
const tmpCols = t.Nav_Columns;
t.Nav_PageEdit.editColumns = tmpCols;
t.Nav_PageEdit.btns = t.Nav_Btns;
t.Nav_PageEdit.isDetail = t.Nav_ParentPageDetailModel === null || t.Nav_ParentPageDetailModel === undefined;
t.Nav_PageEdit.Nav_SubPageEdits = t.Nav_SubPageEdits;
t.Nav_PageEdit.Nav_ParentPageDetailModel = t.Nav_ParentPageDetailModel;
subTable.push(t.Nav_PageEdit);
navFields.push(t.NavFields);
if (t.Nav_PageEdit.isDetail) {
detailEditCodes.push(t.Nav_PageEdit.CODE);
}
if (tmpCols && tmpCols.length) {
tmpCols.forEach(t1 => {
if (t1.FIELD_NAME && t1.FIELD_NAME.indexOf('.') > 0) {
let pos = t1.FIELD_NAME.lastIndexOf('.');
if (pos >= 0) {
let includeTable = t1.FIELD_NAME.substring(0, pos);
navFields.push(t.NavFields + "." + includeTable);
}
}
});
}
});
}
if (btnData && btnData.length) {
const isShow = (this.props.data && this.props.data.isShow) ? this.props.data.isShow : false;
const isPermit = (this.props.data && this.props.data.isPermit) ? this.props.data.isPermit : false;
btnData.forEach(t => {
if (t.ENABLE_STATUS === 1) return;
//为添加权限预留
if (!this.props.data?.homeReload) {
if (t.IS_RULE && !permissionUtils(this.props.login).checkBtn(ret.Nav_Form.ID, t.ID)) return;
}
// if(t.BTN_FUN_TYPE===1){
// this.getBtnConfigByPageBtn(t,rowBtns);
// }
// else{
// this.getBtnConfigByPageBtn(t,btns,true);
// }
const btnConfig = this.getBtnConfigByPageBtn(t, btns, true);
if (btnConfig) {
if (btnConfig.btnType === 1) {
btnConfig.isHidden = isShow || isPermit;
}
}
});
}
this.initColumnConfigByEditCols({ editColumns: allColumns, editPanels: allPanels, customHidCols: ret.Nav_CustomHiddenEditCols, customCols: ret.Nav_CustomCols, columns, panels, customCfg });
if (panels && panels.length) {
panels.forEach(p => {
if (p.panel && p.panel.IS_DEFAULT_EXPAND) {
activePanelIds.push(p.panel.ID);
}
});
}
this.setState({
jsFile: ret.Nav_Form.JS_FILES,
activePanelIds,
formData: ret.Nav_Form,
btnLoading: false,
}, () => {
this.setEditConfig({
editConfig: {
columns: columns,
id: editData.ID,
saveApi: editData.API_URL,
batchSaveApi: editData.BATCH_UPDATE_API,
customCfg,
getApi: editData.QUERY_API_URL,
batchGetApi: editData.BATCH_QUERY_API,
editCode: editData.CODE,
editPage: editData, btns, formData: ret.Nav_Form, detailEditCodes, rowBtns,
formId: ret.Nav_Form.ID, formCode: ret.Nav_Form.CODE,
authOrgCodes: ret.Nav_Form.AUTH_ORG_CODES,
editColumns: allColumns, editPanels: allPanels, panels, allNavFields: navFields
}, onComplete: () => {
let i = 0;
if (subTable && subTable.length) {
subTable.forEach(t => {
this.getEditTableConfigByPage({
editPage: t, onComplete: () => {
i++;
if (i === subTable.length) {
this.onGetEntityData(allColumns, navFields);
}
}
});
});
}
else {
this.onGetEntityData(allColumns, navFields);
}
if (typeof onComplete === 'function') {
onComplete();
}
}
});
});
};
getEditTableConfigByPage({ editPage, onComplete }) {
let json2 = initFilter(this.props.login.OrgId, editPage.ID, "NUM", 0, 1, this.props.login.userId);
this.props.dispatch({
type: 'editPage/getUserCustomConfigInfo',
payload: json2,
onComplete: (ret2) => {
this.doGetEditTableConfigByPage(editPage, ret2 ? ret2.Nav_CustomHiddenEditCols : null, ret2 ? ret2.Nav_CustomCols : null, onComplete);
}
})
}
getBtnConfigByPageBtn = (btn, btnConfigs, isHeadBtn, isDetailBtn) => {
const btnConfig = {
id: btn.ID,
code: btn.CODE,
label: btn.LABEL,
btnType: btn.BTN_TYPE,
isRule: btn.IS_RULE,
clickEventFunName: btn.CLICK_EVENT,
css: btn.CSS,
icon: btn.ICON,
formCode: btn.FORM_CODE,
customParams: btn.CUSTOM_PARAMS,
checkSelected: btn.SELECT_SHOW,
isConfirm: btn.IS_COMFIRM,
api: btn.API_URL,
num: btn.NUM,
saveClearType: btn.SAVE_CLEAR_TYPE,
saveCloseType: btn.SAVE_CLOSE_TYPE,
saveField: btn.INPUT_SAVE_FIELD,
navField: btn.INPUT_NAV_FIELD,
btn,
isAddLog: true,
isHeadBtn,
isDetailBtn,
enableStatus: btn.ENABLE_STATUS
};
btnConfigs.push(btnConfig);
return btnConfig;
};
doGetEditTableConfigByPage = (editPage, customHidCols, customCols, onComplete) => {
const isShow = (this.props.data && this.props.data.isShow) ? this.props.data.isShow : false;
const isPermit = (this.props.data && this.props.data.isPermit) ? this.props.data.isPermit : false;
const formId = this.state.formData.ID;
const columns = [], customCfg = [], btns = [], rowBtns = [], rightBtns = [];
let checked = editPage.SHOW_CHECK;
this.initColumnConfigByEditCols({ editColumns: editPage.editColumns, customHidCols, customCols, columns, customCfg });
// let isAddBtnVisible = false;
// let isDeleteVisible = false;
// let isRowDeleteVisible = false;
if (editPage.btns && editPage.btns.length) {
editPage.btns.forEach(t => {
if (t.ENABLE_STATUS === 1) return;
//为添加权限预留
if (!this.props.data?.homeReload) {
if (t.IS_RULE && !permissionUtils(this.props.login).checkBtn(formId, t.ID)) return;
}
let btnConfig = null;
if (t.BTN_FUN_TYPE === 1) {
btnConfig = this.getBtnConfigByPageBtn(t, rowBtns, false, true);
}
else {
btnConfig = this.getBtnConfigByPageBtn(t, btns, false, true);
}
if (btnConfig) {
if (btnConfig.btnType === 1) {
btnConfig.isHidden = isShow || isPermit;
}
else if (btnConfig.btnType === 3) {
btnConfig.disabled = isShow || isPermit && !editPage.IS_PERMIT_ADD_ROW || editPage.IS_SUB_ADD_BTN_DISABLED;
}
else if (btnConfig.btnType === 4) {
if (t.BTN_FUN_TYPE === 0) {
checked = true;
}
btnConfig.disabled = isShow || isPermit && !editPage.IS_PERMIT_DEL_ROW || editPage.IS_SUB_DELETE_BTN_DISABLED;
}
}
});
}
rightBtns.push({
id: 'customBtn' + editPage.ID,
btnType: 7,
code: 'customConfigBtn',
});
var isShowRowNO = true
if (editPage.IS_SHOWROWNO != undefined && editPage.IS_SHOWROWNO != null && editPage.IS_SHOWROWNO == false) {
isShowRowNO = false
}
const editConfig = {
id: editPage.ID,
editColumns: editPage.editColumns,
label: editPage.LABEL_NAME,
editPage,
formId: this.state.formData.ID,
authOrgCodes: this.state.formData.AUTH_ORG_CODES,
formCode: this.state.formData.CODE,
formData: this.state.formData,
editCode: editPage.CODE,
columns: columns,
sortField: editPage.SORT_FIELDS,
sortOrder: editPage.SORT_ORDERS,
isRowNo: isShowRowNO,
width: editPage.WIDTH,
height: editPage.HEIGHT,
checked,
isShow,
dataNav: editPage.NAV_PROPERTY,
isDetailRequired: editPage.IS_DETAIL_REQUIRED,
isPermit,
parentFieldName: editPage.RELATION_FIELD,
getHeadFieldValue: (field) => { return this.getFieldValue(field); },
customCfg,
entityOrgType: editPage.EDIT_PAGE_ENTITY_ORG_TYPE,
btns,
rowBtns,
rightBtns,
childrenEditCodes: [],
hasChildren: editPage.Nav_SubPageEdits && editPage.Nav_SubPageEdits.length > 0,
parentEditCode: (editPage.Nav_ParentPageDetailModel && editPage.Nav_ParentPageDetailModel.Nav_PageEdit ?
editPage.Nav_ParentPageDetailModel.Nav_PageEdit.CODE : null),
};
if (editPage.Nav_SubPageEdits && editPage.Nav_SubPageEdits.length) {
editPage.Nav_SubPageEdits.forEach(t1 => {
if (t1.Nav_PageEdit) {
editConfig.childrenEditCodes.push(t1.Nav_PageEdit.CODE);
}
});
}
setTimeout(() => {
this.setEditConfig({ editCode: editConfig.editCode, editConfig, onComplete });
}, 500);
};
onCollapseChange(e) {
this.setState({ activePanelIds: e });
}
// 渲染表头区域
onRenderPanel() {
const ediTableConfig = this.getEditConfig();
if (ediTableConfig && ediTableConfig.panels && ediTableConfig.panels.length) {
return (
<Collapse
activeKey={this.state.activePanelIds}
onChange={(e) => this.onCollapseChange(e)}
style={{ marginBottom: 15 }}
>
{
ediTableConfig.panels.map(t => {
return <Panel header={t.panel.LABEL} key={t.id}>
{
this.createControls(t.columns, this.state.data)
}
</Panel>
})
}
</Collapse>
)
}
}
// 在获取完编辑配置信息后,根据配置获取实体数据
onGetEntityData(allColumns, navFields) {
let { id: ID, copySrcId, login, data } = this.props
if (!copySrcId) {
copySrcId = this.copySrcId;
this.copySrcId = null;
}
if (!ID && !data.isInoreId) {
ID = data.id;
}
if (copySrcId) {
this.billStatus = 2;
const json = initFilter(login.OrgId);
extendRule(json, 'ID', 1, copySrcId);
this.getCopyEntityData(json, navFields, allColumns);
}
else if (ID && !this.props.isAddH) {
this.billStatus = 1;
const json = initFilter(login.OrgId);
extendRule(json, 'ID', 1, ID);
this.getEntityData(json, navFields);
}
// 分页下拉组件快捷编辑表单添加的过滤条件,通过此过滤条件,达到表单编辑的效果,而不是新增效果
else if (data.editFormFilter && data.editFormFilterValue) {
this.billStatus = 1;
const json = initFilter(login.OrgId);
extendRule(json, data.editFormFilter, 1, data.editFormFilterValue);
this.getEntityData(json, navFields);
}
else {
this.billStatus = 0;
if (ID && this.getparentinfo && this.props.isAddH) {
const json = initFilter(login.OrgId);
extendRule(json, 'ID', 1, ID);
this.getNewCopyEntityData(json, navFields, allColumns);
return;
}
this.getNewEntityData(allColumns);
}
}
getNewEntityData = (allColumns, copydatas = {}) => {
let newData = {};
if (this.props.data && this.props.data.newData) {
newData = this.props.data.newData;
}
//填充默认值
const nArr = this.getDefaultValue(allColumns);
const editConfig = this.getEditConfig();
let newDataObj = {
ID: guid(),
ORG_ID: this.props.login.OrgId,
FORM_ID: this.state.formData.ID,
ENTITY_ORG_TPYE: editConfig.editPage ? editConfig.editPage.EDIT_PAGE_ENTITY_ORG_TYPE : 0,
...nArr,
PARENT_ID: this.props.parentId,
...this.state.initData,
...newData,
...copydatas
};
if (this.props.data.TreeSelected && this.props.data.TreeSelected.length > 0 && this.props.data.TreeSelectId) {
newDataObj[this.props.data.TreeSelectId] = this.props.data.TreeSelected[0];
}
if (this.props.customParams) {
Object.keys(this.props.customParams).forEach((n) => {
newDataObj[n] = this.props.customParams[n];
});
}
this.setState({
data: newDataObj,
oldEditData: null,
}, () => {
if (editConfig.editPage && editConfig.editPage.CODE_FIELD_NAME) {
this.getCodeRule(editConfig.editPage.CODE_RULE_TYPE, editConfig.editPage.CODE_FIELD_NAME);
}
if (allColumns && allColumns.length) {
allColumns.forEach(t => {
if (t.CONTROL_TYPE === 14) {
this.getCodeRule(t.CODE_RULE_TYPE, t.FIELD_NAME);
}
});
}
this.handleBeforeEditEvent(true, false, null);
});
};
getCopyEntityData = (json, navFields, allColumns) => {
const editConfig = this.getEditConfig();
if (!editConfig || !editConfig.editPage || !editConfig.editPage.QUERY_API_URL) return;
let type = 'app/getDataByPost';
const tmp = [...new Set(navFields)];
tmp.forEach((n, i) => {
extendInclude(json, n);
});
let newData = {};
if (this.props.data && this.props.data.newData) {
newData = this.props.data.newData;
}
const getCopyEntity = (columns, entity) => {
const copyEntity = {};
const copyFields = [];
const copyStatics = {
PARENT_ID: false,
IS_LEAF: false,
ORG_ID: false,
};
columns.forEach((n, i) => {
if (n.CONTROL_TYPE === 9) {
if (n.IS_COPY) {
if (n.FIELD_NAME) {
const a = n.FIELD_NAME.split('.');
if (a && a.length) {
copyFields.push(a[0]);
}
}
if (n.INPUT_ID_FIELD) {
copyFields.push(n.INPUT_ID_FIELD);
}
}
}
else {
if (n.IS_COPY) {
if (n.FIELD_NAME && n.FIELD_NAME.indexOf('.') === -1) {
copyFields.push(n.FIELD_NAME);
}
}
const tmp = copyStatics[n.FIELD_NAME];
if (tmp !== undefined) {
copyStatics[n.FIELD_NAME] = true;
}
}
});
Object.keys(copyStatics).forEach((n) => {
if (!copyStatics[n]) {
copyFields.push(n);
}
});
if (copyFields && copyFields.length) {
copyFields.forEach((n, i) => {
const v = getDataFieldValue(entity, n);
if (v !== undefined && v !== null) {
setDataFieldValue(copyEntity, n, v);
}
});
}
return copyEntity;
};
const nArr = this.getDefaultValue(allColumns);
const { dispatch } = this.props;
//debugger// extendIgnoreDataRule(json)
dispatch({
type: type,
payload: json,
url: editConfig.editPage.QUERY_API_URL,
onComplete: (ret) => {
if (ret) {
let copyEntity = {
ID: guid(),
ORG_ID: this.props.login.OrgId,
...this.state.initData,
...newData,
...nArr,
};
if (allColumns) {
const tmp = getCopyEntity(allColumns, ret);
copyEntity = {
...copyEntity,
...tmp,
}
}
const editConfig = this.getEditConfig();
if (editConfig && editConfig.detailEditCodes && editConfig.detailEditCodes.length) {
const doCopyDetail = (editCodes, tempData, parentData) => {
if (editCodes && editCodes.length) {
editCodes.forEach(t => {
const config = this.getEditConfig({ editCode: t });
if (!config) return;
const tmps = getDataFieldValue(tempData, config.dataNav);
const copyTmps = [];
if (tmps && tmps.length) {
tmps.forEach(n => {
let tmpCopyEntity = {
ID: guid,
ORG_ID: this.props.login.OrgId,
};
if (config.editColumns) {
this.fillEditColumnDefaultValue({ record: tmpCopyEntity, cols: config.editColumns });
const tmpCopy = getCopyEntity(config.editColumns, n);
tmpCopyEntity = {
...tmpCopyEntity,
...tmpCopy,
}
}
tmpCopyEntity[config.parentFieldName] = parentData.ID;
copyTmps.push(tmpCopyEntity);
if (config.childrenEditCodes && config.childrenEditCodes.length) {
doCopyDetail(config.childrenEditCodes, n, tmpCopyEntity);
}
});
}
this.getRowNoByData({ data: copyTmps, sortField: config.sortField, sortOrder: config.sortOrder, });
setDataFieldValue(copyEntity, config.dataNav, copyTmps);
});
}
};
doCopyDetail(editConfig.detailEditCodes, ret, copyEntity);
}
this.setState({
data: copyEntity,
oldEditData: null,
}, () => {
if (editConfig.editPage.CODE_FIELD_NAME) {
this.getCodeRule(editConfig.editPage.CODE_RULE_TYPE, editConfig.editPage.CODE_FIELD_NAME);
}
if (allColumns && allColumns.length) {
allColumns.forEach(t => {
if (t.CONTROL_TYPE === 14) {
this.getCodeRule(t.CODE_RULE_TYPE, t.FIELD_NAME);
}
});
}
if (editConfig && editConfig.detailEditCodes && editConfig.detailEditCodes.length) {
editConfig.detailEditCodes.forEach(t => {
const config = this.getEditConfig({ editCode: t });
const editCode = t;
if (config.editColumns && config.editColumns.length) {
config.editColumns.forEach(t2 => {
if (t2.CONTROL_TYPE === 14) {
const table = this.getEditTableData({ editCode });
if (table && table.length) {
table.forEach(t1 => {
this.getCodeRule(t2.CODE_RULE_TYPE, t2.FIELD_NAME, t1.ID, editCode);
});
}
}
});
}
});
}
this.handleBeforeEditEvent(true, true, ret);
});
}
}
});
};
getNewCopyEntityData = (json, navFields, allColumns) => {
const editConfig = this.getEditConfig();
if (!editConfig || !editConfig.editPage || !editConfig.editPage.QUERY_API_URL) return;
const tmp = [...new Set(navFields)];
tmp.forEach((n, i) => {
extendInclude(json, n);
});
const { dispatch } = this.props;
//debugger// extendIgnoreDataRule(json)
dispatch({
type: 'app/getDataByPost',
payload: json,
url: editConfig.editPage.QUERY_API_URL,
onComplete: (ret) => {
if (ret) {
const copydatas = {};
const parentcopyfields = editConfig.editPage.PARENT_COPY_FIELD.split(',');
const childsetfields = editConfig.editPage.CHILD_SET_FIELD.split(',');
for (let i = 0; i < parentcopyfields.length; i++) {
setDataFieldValue(copydatas, childsetfields[i], getDataFieldValue(ret, parentcopyfields[i]))
// copydatas[childsetfields[i]] = getDataFieldValue(ret, parentcopyfields[i])
}
this.getNewEntityData(allColumns, copydatas);
}
}
});
}
getEntityData = (json, navFields) => {
const editConfig = this.getEditConfig();
if (!editConfig || !editConfig.editPage || !editConfig.editPage.QUERY_API_URL) return;
const tmp = [...new Set(navFields)];
tmp.forEach((n, i) => {
extendInclude(json, n);
});
const { dispatch } = this.props;
if (this.props.homeLoad) {
json["IgnoreDataRule"] = true;
}
//debugger
// extendIgnoreDataRule(json)
dispatch({
type: 'app/getDataByPost',
payload: json,
url: editConfig.editPage.QUERY_API_URL,
onComplete: (ret) => {
if (ret) {
const resetData = (editCodes, tempData) => {
if (editCodes && editCodes.length) {
editCodes.forEach(t => {
const config = this.getEditConfig({ editCode: t });
const tmps = getDataFieldValue(tempData, config.dataNav);
if (tmps && tmps.length) {
this.getRowNoByData({ data: tmps, sortField: config.sortField, sortOrder: config.sortOrder, isRowNo: config.isRowNo });//wyw 是否显示序号
if (config.childrenEditCodes && config.childrenEditCodes.length) {
tmps.forEach(r => {
resetData(config.childrenEditCodes, r);
});
}
}
});
}
}
const editConfig = this.getEditConfig();
if (editConfig && editConfig.detailEditCodes && editConfig.detailEditCodes.length) {
resetData(editConfig.detailEditCodes, ret);
}
this.setState({
data: ret,
oldEditData: JSON.parse(JSON.stringify(ret)),
}, () => {
this.handleBeforeEditEvent(false, false, null);
});
} else {
this.handleBeforeEditEvent(false, false, null);
}
}
});
};
checkRowDiff = (list, srcRow, destRow, columns) => {
if (columns && columns.length) {
let x = '';
columns.forEach(t => {
if (t.field === 'ROW_NO') return;
const src = getDataFieldValue(srcRow, t.field);
const dest = getDataFieldValue(destRow, t.field);
if (src !== dest) {
x += (t.label + ":新值【" + dest + "】旧值【" + src + "】,");
}
});
if (x) {
list.push('编辑行项记录,详情:' + x);
}
}
else {
let x = '';
Object.keys(srcRow).forEach((n) => {
if (n === 'Nav_SysParams') {
return;
}
if (n.indexOf('.') !== -1) return;
if (typeof (srcRow[n]) !== "object") {
if (n === 'ROW_NO') return;
const src = getDataFieldValue(srcRow, n);
const dest = getDataFieldValue(destRow, n);
if (src !== dest) {
x += (n + ":新值【" + (dest === undefined || dest === null ? '' : dest) +
"】旧值【" + (src === undefined || src === null ? '' : src) + "】,");
}
}
});
Object.keys(destRow).forEach((n) => {
if (n === 'Nav_SysParams') {
return;
}
if (n.indexOf('.') !== -1) return;
if (typeof (destRow[n]) !== "object") {
if (n === 'ROW_NO') return;
const src = getDataFieldValue(srcRow, n);
const dest = getDataFieldValue(destRow, n);
if (src === undefined && src !== dest) {
x += (n + ":新值【" + (dest === undefined || dest === null ? '' : dest) +
"】旧值【" + (src === undefined || src === null ? '' : src) + "】,");
}
}
});
if (x) {
list.push('编辑行项记录,详情:' + x);
}
}
}
checkTableDiff = (list, srcTable, destTable, columns) => {
const getRowData = (r) => {
if (columns && columns.length) {
let x = '';
columns.forEach(t => {
const y = getDataFieldValue(r, t.field);
x += (t.label + ":" + y + ",");
});
Object.keys(r).forEach((n) => {
if (r[n] && r[n].length) {
x += (n + ":" + JSON.stringify(r[n]));
}
});
return x;
}
return JSON.stringify(r)
};
if (srcTable && srcTable.length) {
srcTable.forEach(t => {
const destRow = destTable?.filter(t1 => t1.ID === t.ID)[0];
if (destRow) {
this.checkRowDiff(list, t, destRow, columns);
}
else {
list.push("删除行项,行项数据:" + getRowData(t))
}
});
}
if (destTable && destTable.length) {
destTable.forEach(t => {
const srcRow = srcTable?.filter(t1 => t1.ID === t.ID)[0];
if (!srcRow) {
list.push("新增行项,行项数据:" + getRowData(t))
}
});
}
}
checkEditDataDiff = (srcData, destData) => {
const list = [];
const doDiffTable = (editCodes, tempSrcData, tempDestData) => {
if (editCodes && editCodes.length) {
editCodes.forEach(t => {
const config = this.getEditConfig({ editCode: t });
const srctmps = getDataFieldValue(tempSrcData, config.dataNav);
const desttmps = getDataFieldValue(tempDestData, config.dataNav);
this.checkTableDiff(list, srctmps, desttmps, config.columns);
if (config.childrenEditCodes && config.childrenEditCodes.length) {
if (srctmps && srctmps.length) {
srctmps.forEach(t2 => {
const destRow = desttmps.filter(t1 => t1.ID === t2.ID)[0];
if (destRow) {
doDiffTable(config.childrenEditCodes, t2, destRow);
// this.checkRowDiff(list,t,destRow,columns);
}
});
}
}
});
}
}
const editConfig = this.getEditConfig();
this.checkRowDiff(list, srcData, destData, (editConfig ? editConfig.columns : null));
if (editConfig && editConfig.detailEditCodes && editConfig.detailEditCodes.length) {
doDiffTable(editConfig.detailEditCodes, srcData, destData);
}
return list.join(';');
}
getDefaultValue = (allColumns) => {
let nArr = {};
this.fillEditColumnDefaultValue({ record: nArr, cols: allColumns });
if (this.props.setData) {
this.props.setData.forEach((n) => {
if (n.length === 2) {
setDataFieldValue(nArr, n[0], n[1]);
}
})
}
return nArr;
};
saveUseCodeRule(codeRuleType, code) {
if (!this.useCodeRules) {
this.useCodeRules = {};
}
if (!this.useCodeRules[codeRuleType]) {
this.useCodeRules[codeRuleType] = [];
}
this.useCodeRules[codeRuleType].push(code);
}
doGetCodeRule = (field, id, editCode, ret) => {
if (id) {
const table = this.getEditTableData({ editCode });
if (table && table.length) {
table.forEach(t => {
if (t.ID === id) {
setDataFieldValue(t, field, ret);
this.saveRowRecord({ record: t, editCode });
}
});
}
}
else {
this.setFieldValue(field, ret);
}
}
getCodeRule = (codeRuleType, field, id, editCode) => {
if (!field) return;
if (!codeRuleType) {
if (this.props.login.OrgCode)
this.doGetCodeRule(field, id, editCode, this.props.login.OrgCode);
return;
}
const json = initFilter(this.props.login.OrgId);
json.Count = 1;
json.CodeType = codeRuleType;
this.props.dispatch({
type: 'app/genSystemCode',
payload: json,
onComplete: (ret) => {
if (ret) {
this.doGetCodeRule(field, id, editCode, ret);
this.saveUseCodeRule(codeRuleType, ret);
}
}
});
};
clearData = () => {
this.setState({
data: {}
});
}
setStateData = (tmpData) => {
this.setState({
data: tmpData
});
}
onAfterSave(params) {
super.onAfterSave(params);
const stateData = JSON.parse(JSON.stringify(this.state.data));
const stateOldData = this.state.oldEditData ? JSON.parse(JSON.stringify(this.state.oldEditData)) : null;
const { isSuccess, closeType, clearType, saveData: updateData } = params;
if (isSuccess) {
let { onSave, onCancel, formCode, data } = this.props;
if (!onSave && data) {
onSave = data.onSave;
}
if (!onCancel && data) {
onCancel = data.onCancel;
}
this.useCodeRules = null;
if (typeof onSave === 'function') {
onSave(this.state.data, this.clearData,this.setStateData);
}
if (closeType === 1 && this.billStatus === 1 ||//仅编辑时关闭
closeType === 2 && this.billStatus !== 1 ||//仅新增时关闭
closeType !== 1 && closeType !== 2 ||//全部都关闭
closeType === undefined) {
onCancel && onCancel();
}
else {
if (!clearType || clearType === 0) {
this.props.form.resetFields();
this.onLoadData();//重新渲染
}
}
//添加日志
if (this.billStatus === 1) {
this.addEditLog({
formCode,
ids: updateData.ID,
codes: updateData.CODE,
extData: ("编辑数据,详情:" + this.checkEditDataDiff(stateOldData, stateData))
});
}
else {
this.addAddLog({
formCode,
ids: updateData.ID,
codes: updateData.CODE,
extData: ("新增数据,详情:" + JSON.stringify(stateData))
});
}
}
}
onSave(closeType, clearType, customParams) {
this.save({
closeType, clearType,
onCheckBeforeSave: ({ saveData }) => {
return this.handleBeforeSaveEvent(saveData);
},
onHandleRow: ({ editCode, record, srcRecord }) => {
this.handleBeforeSaveHandleRecordEvent(editCode, record, srcRecord, customParams);
}
});
};
onEditBtnParam(params) {
const { btnConfig, editConfig, record, editCode, parentId, parentRecord } = params ? params : {};
const { btnType, clickEventFunName, btn, btnCustomParams } = btnConfig ? btnConfig : {};
let { onCancel, } = this.props;
if (btn.code === 'customConfigBtn') {
return {
content: <Dropdown overlay={this.getCustomFieldMange(editCode)} trigger={['click']} placement="bottomRight">
<Button icon="bars" />
</Dropdown>
}
}
if (btnType === 0) {//自定义弹窗
const clickEventFun = this.getDynJsFunc(clickEventFunName);
if (typeof clickEventFun === 'function') {
const btnParam = clickEventFun({
record,
parentRecord: editConfig,
dispatch: this.props.dispatch,
close: params.close,
login: this.props.login,
custom: this.props.custom,
editCode: editConfig.editCode,
stateData: this.state.data,
onCancel: onCancel,
btn,
saveHeadRecord: (values, onComplete) => { return this.saveHeadRecord(values, onComplete); },
saveRowRecord: (params) => { this.saveRowRecord(params); },
getSelectedRecords: () => { return this.getEditSelectedRecord({ editCode, parentId }); },
btnCustomParams: getCustomParams(btnCustomParams),
pageTableCustomParams: getCustomParams(editConfig.customParams),
});
if (btnParam) {
btnParam.disabled = btnParam.isReturn;
}
return btnParam;
}
}
// else if(btnType === 5|| btnType=== 3 || btnType === 8|| btnType === 10){//编辑 新增 查看 复制新增
// const clickEventFun=this.getDynJsFunc(clickEventFunName);
// if(typeof clickEventFun==='function') {
// const btnParam = clickEventFun({
// record,
// parentRecord:tableConfig.parentRecord,
// dispatch: this.props.dispatch,
// login: this.props.login,
// custom:this.props.custom,
// pageCode: tableConfig.pageTable.CODE,
// });
// if (btnParam) {
// btnParam.disabled = btnParam.isReturn;
// }
// return btnParam;
// }
// }
else if (btnType === 4) {//删除
const clickEventFun = this.getDynJsFunc(clickEventFunName);
if (typeof clickEventFun === 'function') {
const btnParam = clickEventFun({
record,
dispatch: this.props.dispatch,
login: this.props.login,
custom: this.props.custom,
editCode: editConfig.editCode,
stateData: this.state.data,
onCancel: onCancel,
saveHeadRecord: (values, onComplete) => { return this.saveHeadRecord(values, onComplete); },
saveRowRecord: (params) => { this.saveRowRecord(params); },
});
if (btnParam) {
btnParam.disabled = btnParam.isReturn;
}
return btnParam;
}
}
else if (btnType === 6) {//自定义点击
const { validateFieldsAndScroll } = this.props.form;
return {
click: (json) => {
const clickEventFun = this.getDynJsFunc(clickEventFunName);
if (typeof clickEventFun === 'function') {
const btnParam = clickEventFun({
record,
parentRecord: parentRecord,
dispatch: this.props.dispatch,
loadData: () => { this.onLoadData(); },
login: this.props.login,
custom: this.props.custom,
stateData: this.state.data,
json,
resetFields: () => this.props.form?.resetFields(),
validateFieldsAndScroll,
setState: (data) => {
this.setState(data);
},
setStateFunc: (datas, func) => {
this.setState({ data: datas }, func());
},
addOtherLog: (ids, json) => {
const formId = (editConfig.formId ? editConfig.formId : (editConfig.formData ? editConfig.formData.ID : this.props.formId));
const formCode = editConfig.formCode ? editConfig.formCode : (editConfig.formData ? editConfig.formData.CODE : this.props.formCode);
const title = '用户【' + this.props.login.user.NAME + '】:执行按钮' + btnConfig.title;
const data = 'ID:' + ids;
const extData = "Json:" + JSON.stringify(json);
this.addOtherLog({ formCode, formId, title, data, extData });
},
editCode: editConfig.editCode,
getSelectedRecords: () => { return this.getEditSelectedRecord({ editCode, parentId }); },
data: this.props.data,
btnCustomParams: getCustomParams(btnCustomParams),
pageTableCustomParams: getCustomParams(editConfig.customParams),
onCancel: onCancel,
saveHeadRecord: (values, onComplete) => { return this.saveHeadRecord(values, onComplete); },
saveRowRecord: (params) => { this.saveRowRecord(params); },
});
return btnParam;
}
}
};
}
else if (btnType === 7) {//自定义
const clickEventFun = this.getDynJsFunc(clickEventFunName);
const { validateFieldsAndScroll } = this.props.form;
var parentRecordSuit = parentRecord
if (btnConfig.customParams != null && btnConfig.customParams.indexOf('parentRecord') > -1 && this.state.data) {
// wyw 子表按钮添加主页面信息传参到子页面
//wyw BS057 弹窗 BS077 传递父项信息 到页面
parentRecordSuit = this.state.data
}
if (typeof clickEventFun === 'function') {
const btnParam = clickEventFun({
record,
parentRecord: parentRecordSuit,
dispatch: this.props.dispatch,
loadData: () => { this.onLoadData() },
login: this.props.login,
custom: this.props.custom,
btn,
validateFieldsAndScroll,
setState: (data) => {
this.setState(data);
},
getState: (key) => {
return this.state[key];
},
addOtherLog: (ids, json) => {
const formId = (editConfig.formId ? editConfig.formId : (editConfig.formData ? editConfig.formData.ID : this.props.formId));
const formCode = editConfig.formCode ? editConfig.formCode : (editConfig.formData ? editConfig.formData.CODE : this.props.formCode);
const title = '用户【' + this.props.login.user.NAME + '】:执行按钮' + btnConfig.title;
const data = 'ID:' + ids;
const extData = "Json:" + JSON.stringify(json);
this.addOtherLog({ formCode, formId, title, data, extData });
},
editCode: editConfig.editCode,
formId: (editConfig.formId ? editConfig.formId : (editConfig.formData ? editConfig.formData.ID : this.props.formId)),
formCode: editConfig.formCode ? editConfig.formCode : (editConfig.formData ? editConfig.formData.CODE : this.props.formCode),
getSelectedRecords: () => { return this.getEditSelectedRecord({ editCode, parentId }); },
data: this.props.data,
stateData: this.state.data,
btnCustomParams: getCustomParams(btnCustomParams),
pageTableCustomParams: getCustomParams(editConfig.customParams),
onCancel: onCancel,
saveHeadRecord: (values, onComplete) => { return this.saveHeadRecord(values, onComplete); },
saveRowRecord: (params) => { this.saveRowRecord(params); },
});
if (btnParam) {
btnParam.disabled = btnParam.isReturn;
}
return btnParam;
}
}
}
onRenderHeadControls(code, isTree) {
const headColumnConfig = this.getEditConfig();
const columns = headColumnConfig ? headColumnConfig.columns : [];
const tempCols = [];
if (columns && columns.length) {
columns.forEach(t => {
if ((code && t.code === code || !code & !t.code) || (t.code && t.code === 'warm')) {
tempCols.push(t);
}
if (isTree) t.span = { sm: 24, md: 12 }
});
}
return this.createControls(tempCols, this.state.data)
}
handleRenderHeadControlEvent = (record, colInfo) => {
const func = this.getDynJsFunc('handleRenderHeadControl');
if (typeof func === 'function') {
const editConfig = this.getEditConfig();
return func({
record,
colConfig: colInfo,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
resetFields: () => this.props.form?.resetFields(),
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
pageCode: editConfig.editPage.CODE,
setFieldVisible: (field, visible) => { this.setFieldVisible(field, visible, this) },
setFieldVisibleByBatch: (list) => { this.setFieldVisibleByBatch(list, this); },
login: this.props.login,
custom: this.props.custom,
dispatch: this.props.dispatch,
setFieldRequired: (field, required) => { this.setFieldRequired(field, required, this); },
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }) },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
});
this.props.form?.resetFields();
}
return '';
};
handleRenderRowControlEvent = (record, colInfo) => {
const func = this.getDynJsFunc('handleRenderRowControl');
if (typeof func === 'function') {
const editConfig = this.getEditConfig();
return func({
record,
colConfig: colInfo,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
resetFields: () => this.props.form?.resetFields(),
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
pageCode: editConfig.editPage.CODE,
setFieldVisible: (field, visible) => { this.setFieldVisible(field, visible, this) },
setFieldVisibleByBatch: (list) => { this.setFieldVisibleByBatch(list, this); },
login: this.props.login,
custom: this.props.custom,
dispatch: this.props.dispatch,
stateData: this.state.data,
saveRowRecord: (r) => {
this.saveRowRecord({ record: r, editCode: editConfig.editPage.CODE })
},
setStateData: (val) => { this.setStateData(val) },
setFieldRequired: (field, required) => { this.setFieldRequired(field, required, this); },
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }) },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
});
}
return '';
};
handleFieldChangeEvent = (value, colInfo) => {
const func = this.getDynJsFunc('onChange');
if (typeof func === 'function') {
const editConfig = this.getEditConfig();
func({
value,
colInfo,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
resetFields: () => this.props.form?.resetFields(),
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
pageCode: editConfig.editPage.CODE,
stateData: this.state.data,
setFieldVisible: (field, visible) => { this.setFieldVisible(field, visible, this) },
setFieldVisibleByBatch: (list) => { this.setFieldVisibleByBatch(list, this); },
setState: (data, callback) => {
this.setState({ data: data }, callback);
},
login: this.props.login,
custom: this.props.custom,
dispatch: this.props.dispatch,
setFieldRequired: (field, required) => { this.setFieldRequired(field, required, this); },
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }) },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
});
this.props.form?.resetFields();
}
};
handleBeforeEditEvent = (isNew, isCopy, copySrcData) => {
const func = this.getDynJsFunc('onBeforeEdit');
const editConfig = this.getEditConfig();
if (typeof func === 'function') {
func({
isNew,
isCopy,
copySrcId: this.copySrcId ? this.copySrcId : this.props.copySrcId,
copySrcData: copySrcData,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this) },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
pageCode: editConfig.editPage.CODE,
setFieldVisible: (field, visible) => { this.setFieldVisible(field, visible, this) },
setFieldVisibleByBatch: (list) => { this.setFieldVisibleByBatch(list, this); },
setRowFieldVisible: this.setRowFieldVisible,
login: this.props.login,
app: this.props.app,
custom: this.props.custom,
data: this.props.data,
stateData: this.state.data,
dispatch: this.props.dispatch,
tableKey: this.props.data.tableKey,
editConfig: editConfig,
setEditConfig: (editConfig) => { this.setHeadEditConfig({ editConfig }) },
setMenuName: (editConfig, fieldName, enumName) => { this.setMenuName(editConfig, fieldName, enumName) },
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }) },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
saveUseCodeRule: (codeRuleType, code) => { this.saveUseCodeRule(codeRuleType, code); },
setFieldRequired: (field, required) => { this.setFieldRequired(field, required, this); },
});
}
this.onBeforeEdit({
isNew,
isCopy,
copySrcId: this.copySrcId ? this.copySrcId : this.props.copySrcId,
copySrcData,
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this) },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
setRowFieldLabel: this.setRowFieldLabel,
pageCode: editConfig.editPage.CODE,
setFieldVisible: (field, visible) => { this.setFieldVisible(field, visible, this) },
setFieldVisibleByBatch: (list) => { this.setFieldVisibleByBatch(list, this); },
login: this.props.login,
app: this.props.app,
custom: this.props.custom,
data: this.props.data,
stateData: this.state.data,
dispatch: this.props.dispatch,
tableKey: this.props.data.tableKey,
editConfig: editConfig,
setEditConfig: (editConfig) => { this.setHeadEditConfig({ editConfig }) },
setMenuName: (editConfig, fieldName, enumName) => { this.setMenuName(editConfig, fieldName, enumName) },
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }) },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
saveUseCodeRule: (codeRuleType, code) => { this.saveUseCodeRule(codeRuleType, code); },
setFieldRequired: (field, required) => { this.setFieldRequired(field, required, this); },
});
};
onBeforeEdit(params) {
// const { isNew, isCopy, copySrcData } = params ? params : {};
}
handleBeforeSaveEvent = (data) => {
const func = this.getDynJsFunc('onBeforeSave');
if (typeof func === 'function') {
const editConfig = this.getEditConfig();
return func({
data: this.props.data,
stateData: data,
getFieldValue: (field) => { return this.getFieldValue(field, this); },
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this) },
pageCode: editConfig.editPage.CODE,
custom: this.props.custom,
});
}
};
onBeforeSaveHandleRecord(params) {
// const { editCode, record, srcRecord } = params ? params : {};
}
handleBeforeSaveHandleRecordEvent = (pageCode, record, srcRecord, customParams) => {
const func = this.getDynJsFunc('onBeforeSaveHandleRecord');
if (typeof func === 'function') {
func({
record,
srcRecord,
customParams,
data: this.props.data,
pageCode,
login: this.props.login,
custom: this.props.custom,
stateData: this.state.data,
dispatch: this.props.dispatch,
});
}
this.onBeforeSaveHandleRecord({ editCode: pageCode, record, srcRecord, customParams });
};
onHeadDropDownFilter(params) {
const { params: filterParams, colConfig, thisRef } = params ? params : {};
if (filterParams && colConfig && colConfig.column) {
if (colConfig.column.Nav_Filters && colConfig.column.Nav_Filters.length) {
colConfig.column.Nav_Filters.forEach(t => {
const v = getParseValue(t.VALUE, thisRef.props.login.user, (field) => { return thisRef.getFieldValue(field, thisRef) });
if (v !== null && v !== undefined) {
if (t.IS_CUSTOM) {
filterParams[t.FIELD_NAME] = v;
}
else {
extendRule(filterParams, t.FIELD_NAME, t.OPERATION, v, t.IS_SYS_PARAM);
}
}
});
}
const onFetchAutoFilterFunc = thisRef.getDynJsFunc('onFetchAutoFilter');
if (typeof onFetchAutoFilterFunc === 'function') {
const editConfig = thisRef.getEditConfig();
onFetchAutoFilterFunc({
colInfo: colConfig.column,
params: params,
getFieldValue: (field) => { return thisRef.getFieldValue(field, thisRef) },
pageCode: editConfig.editPage.CODE,
});
};
}
}
onAfterHeadControlChange(params) {
const { value, colConfig } = params ? params : {};
if (colConfig && colConfig.column) {
this.handleFieldChangeEvent(value, colConfig.column);
}
}
onAfterHeadDropDownSelect(params) {
const { value, record, colConfig, thisRef } = params ? params : {};
const col = colConfig ? colConfig.column : null;
if (colConfig && colConfig.column) {
this.handleFieldChangeEvent(value, colConfig.column);
}
//填充明细
if (col && col.Nav_FillMaps) {
if (record) {
const editConfig = thisRef.getEditConfig();
const doFillMapRecords = (fillMaps, editCodes, parentRecord, tempSrcRecord) => {
if (!parentRecord) {
const tempData = { ...this.state.data };
if (!parentRecord) {
if (editConfig.parentEditCode) {
if (parentId) {
this.getEditRecordById({
tempData, editCode: editConfig.parentEditCode, id: parentId,
onComplete: (p) => {
parentRecord = p;
}
});
}
}
else {
parentRecord = tempData;
}
}
}
fillMaps.forEach(t1 => {
if (t1.SRC_NAV && t1.DEST_NAV) {
if (t1.Nav_Details && t1.Nav_Details.length) {
editCodes.forEach(code => {
const config = thisRef.getEditConfig({ editCode: code });
if (config.dataNav === t1.DEST_NAV || config.editCode === t1.DEST_NAV) {
const list = getDataFieldValue(tempSrcRecord, t1.SRC_NAV);
if (list && list.length) {
let num = 1;
const result = [];
list.forEach(r => {
if (thisRef.onBeforeAddRow({ editCode: config.editCode, srcRecord: r, })) return;
const newRow = {
ID: guid(), ORG_ID: thisRef.props.login.OrgId, NUM: num,
ENTITY_ORG_TPYE: config.entityOrgType,
srcRecord: r,
};
t1.Nav_Details.forEach(st => {
if (st.DEST_FIELD_NAME && st.SRC_FIELD_NAME) {
setDataFieldValue(newRow, st.DEST_FIELD_NAME, getDataFieldValue(r, st.SRC_FIELD_NAME));
}
});
thisRef.onAfterAddRow({ editCode: config.editCode, record: newRow, srcRecord: r, });
num++;
result.push(newRow);
});
//this.setEditTableData({ editCode: config.editCode, data: result, isAppend: false, parentRecord });
this.setBantchEditTableData({ editCode: config.editCode, data: result, isAppend: false, parentRecord });
this.setState({
data: parentRecord,
}, () => {
if (typeof onComplete === 'function') {
onComplete();
}
});
if (result && result.length && t1.Nav_ChildrenMaps && t1.Nav_ChildrenMaps.length &&
config.childrenEditCodes && config.childrenEditCodes.length) {
result.forEach(newRow => {
doFillMapRecords(t1.Nav_ChildrenMaps, config.childrenEditCodes, newRow, newRow.srcRecord);
});
}
}
}
});
}
}
});
}
if (editConfig.detailEditCodes && editConfig.detailEditCodes.length) {
doFillMapRecords(col.Nav_FillMaps, editConfig.detailEditCodes, null, record);
}
}
else {
const editConfig = thisRef.getEditConfig();
col.Nav_FillMaps.forEach(t1 => {
if (t1.SRC_NAV && t1.DEST_NAV) {
if (t1.Nav_Details && t1.Nav_Details.length && editConfig && editConfig.detailEditCodes) {
editConfig.detailEditCodes.forEach(code => {
const config = thisRef.getEditConfig({ editCode: code });
if (config.dataNav === t1.DEST_NAV || config.editCode === t1.DEST_NAV) {
this.setEditTableData({ editCode: config.editCode, data: [], isAppend: false });
}
});
}
}
});
}
}
}
getCustomFieldMange = (editCode) => {
const editTableConfig = this.getEditConfig({ editCode });
if (!editTableConfig) return null;
let customCfg = editTableConfig.customCfg;
let editId = editTableConfig.id;//this.state.editData.ID;
let editColumns = editTableConfig.editColumns;
let editPanels = editTableConfig.editPanels;
return <CustomFieldsManage
customCfg={customCfg}
onChange={(field, value, cuCfg) => {
this.handleCustomFieldChange(customCfg, field, value, cuCfg, editCode, editColumns, editPanels);
}}
clearCustomConfig={() => {
this.clearCustomConfig(editId, editCode, editColumns, editPanels)
}}
saveCustomConfig={() => {
this.saveCustomConfig(customCfg, editId);
}}
/>
};
/*
新增行之前
*/
onBeforeAddRow(params) {
super.onBeforeAddRow(params);
const { editCode: pageCode, srcRecord } = params ? params : {};
const onBeforeAddSubRow = this.getDynJsFunc('onBeforeAddSubRow');
if (typeof onBeforeAddSubRow === 'function') {
return onBeforeAddSubRow({
srcRecord: srcRecord,
pageCode: pageCode,
custom: this.props.custom,
getFieldValue: (field) => { return this.getFieldValue(field); },
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
getHeadFieldValue: (field) => { return this.getFieldValue(field); },
saveRowRecord: (r) => {
this.saveRowRecord({ record: r, editCode })
},
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
});
}
}
/*
新增行之后
*/
onAfterAddRow(params) {
super.onAfterAddRow(params);
const { srcRecord, record, editCode } = params || {};
// const { editCode: pageCode, record, srcRecord, } = params ? params : {};
const editTableConfig = this.getEditConfig({ editCode: editCode });
const editColumns = editTableConfig ? editTableConfig.editColumns : null;
const onAfterAddRow = this.getDynJsFunc('onAfterAddSubRow');
if (typeof onAfterAddRow === 'function') {
onAfterAddRow({
record: record,
srcRecord: srcRecord,
pageCode: editCode,
custom: this.props.custom,
dispatch: this.props.dispatch,
login: this.props.login,
app: this.props.app,
stateData: this.state.data,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this, editCode); },
getHeadFieldValue: (field) => { return this.getFieldValue(field); },
saveRowRecord: (r) => {
this.saveRowRecord({ record: r, editCode })
},
setFieldValue: (field, value) => { this.setFieldValue(field, value, this); },
getFieldValue: (field) => { return this.getFieldValue(field); },
});
}
if (editColumns && editColumns.length) {
this.fillEditColumnDefaultValue({ record, cols: editColumns, getHeadFieldValue: this.getFieldValue });
editColumns.forEach(t => {
if (t.CONTROL_TYPE === 14) {
this.getCodeRule(t.CODE_RULE_TYPE, t.FIELD_NAME, record.ID, pageCode);
}
});
}
}
onBeforeDeleteRow(params) {
const { editCode: pageCode, record } = params ? params : {};
const onBeforeDeleteSubRow = this.getDynJsFunc('onBeforeDeleteSubRow');
if (typeof onBeforeDeleteSubRow === 'function') {
return onBeforeDeleteSubRow({
record: record,
pageCode: pageCode,
custom: this.props.custom,
getFieldValue: (field) => { return this.getFieldValue(field); },
stateData: this.state.data,
});
}
}
onAfterDeleteRow(params) {
const { editCode: pageCode, data } = params ? params : {};
const onAfterDeleteSubRow = this.getDynJsFunc('onAfterDeleteSubRow');
if (typeof onAfterDeleteSubRow === 'function') {
onAfterDeleteSubRow({
pageCode: pageCode,
updateSubTableData: ({ pageCode, data, isAppend }) => { this.setEditTableData({ editCode: pageCode, data, isAppend }); },
getSubTableData: ({ pageCode }) => { return this.getEditTableData({ editCode: pageCode }) },
stateData: data,
});
}
}
onRowDropDownFilter(params) {
super.onRowDropDownFilter(params);
const { record, colConfig, params: filterParams, thisRef, editCode } = params;
if (colConfig.column) {
const getRowFieldValue = (field) => {
return getDataFieldValue(record, field);
};
const onFetchAutoFilterFunc = thisRef.getDynJsFunc('onFetchAutoFilterDetail');
if (typeof onFetchAutoFilterFunc === 'function') {
onFetchAutoFilterFunc({
record: record,
colInfo: colConfig.column,
params: filterParams,
stateData: thisRef.state.data,
pageCode: editCode,
});
}
if (colConfig.column.Nav_Filters && colConfig.column.Nav_Filters.length) {
colConfig.column.Nav_Filters.forEach(t => {
const v = getParseValue(
t.VALUE,
thisRef.props.login.user,
field => thisRef.getFieldValue(field),
getRowFieldValue
);
if (v !== null && v !== undefined) {
if (t.IS_CUSTOM) {
filterParams[t.FIELD_NAME] = v;
}
else {
extendRule(filterParams, t.FIELD_NAME, t.OPERATION, v, t.IS_SYS_PARAM);
}
}
});
}
}
}
onAfterRowControlChange(params) {
const { value, colConfig, record, editCode } = params || {};
if (colConfig.column) {
const func = this.getDynJsFunc('onSubChange');
if (typeof func === 'function') {
func({
value,
colInfo: colConfig.column,
record,
stateData: this.state.data,
pageCode: editCode,
login: this.props.login,
dispatch: this.props.dispatch,
setRowFieldVisible: this.setRowFieldVisible,
setRowFieldLabel: this.setRowFieldLabel,
setRowFieldDisable: this.setRowFieldDisable,
setRowFieldPops: this.setRowFieldPops,
setFieldValueByBatch: (fieldValues) => { this.setFieldValueByBatch(fieldValues, this); },
setFieldEditable: (field, editable) => { this.setFieldEditable(field, editable, this); },
getHeadFieldValue: (field) => { return this.getFieldValue(field); },
setDataState: (r) => { return this.setState({ data: r }); },
saveRowRecord: (r) => {
this.saveRowRecord({ record: r, editCode })
},
});
}
}
}
onDestroyCacheData() {
super.onDestroyCacheData();
if (this.useCodeRules) {
let r = '';
Object.keys(this.useCodeRules).forEach((n) => {
const codes = this.useCodeRules[n];
if (codes && codes.length) {
let temp = '';
codes.forEach(t => {
if (temp) {
temp += ',';
}
temp += t;
});
if (r) {
r += ';'
}
r += (n + ':' + temp);
}
});
if (r) {
this.props.dispatch({
type: 'app/releasePreUseSerial',
payload: initFilter(this.props.login.OrgId, r),
onComplete: (ret) => {
if (ret) {
this.useCodeRules = null;
}
}
});
}
}
}
renderSubTable = (editConfig) => {
let { detailEditCodes = [], editPage = {} } = editConfig
const subTableCondition = editPage.SUB_TABLE_CONDITION
if (subTableCondition) {
const conditions = []
subTableCondition.split('|').forEach(cond => {
const condArr = cond.split(',')
conditions.push({
tableCode: condArr[0],
fieldName: condArr[1],
operate: condArr[2],
value: condArr[3]
})
})
const validEditCodes = []
detailEditCodes.forEach(code => {
const relatedConds = conditions.filter(cond => cond.tableCode === code)
const validCond = relatedConds.find(cond => {
const { fieldName, operate, value } = cond
const stateValue = getDataFieldValue(this.state.data, fieldName)
switch (Number(operate)) {
case 1:
return stateValue !== null && stateValue !== undefined && stateValue.toString() == value
default:
return false
}
})
!!validCond && validEditCodes.push(code)
})
detailEditCodes = validEditCodes
}
if (!detailEditCodes.length) return null
if (detailEditCodes.length === 1) {
return detailEditCodes.map(code => {
return (
<div style={{ marginBottom: '15px' }}>
{this.getRenderEditTable({ editCode: code })}
</div>
)
})
}
return (
<Tabs style={{ marginBottom: '15px' }}>
{
detailEditCodes.map(code => {
const config = this.getEditConfig({ editCode: code })
// 空配置不渲染,否则界面会多出一个无内容的 tab
if (config.id) {
return (
<TabPane tab={config.label} key={config.id}>
{this.getRenderEditTable({ editCode: code })}
</TabPane>
)
}
return null
})
}
</Tabs>
)
}
render() {
const editConfig = this.getEditConfig();
const btns = editConfig ? editConfig.btns : null;
return (
<div className={styles.editWrap}>
<div className={styles.topBar}>
<div className={classNames(styles.topBarLeftBtns, styles.antBtns_mr8)}>
{this.getRenderBtns({ btns, record: this.state.data })}
</div>
<div style={{ float: "right" }}>
<Dropdown overlay={this.getCustomFieldMange(undefined)} trigger={['click']} placement="bottomRight">
<Button icon="bars" />
</Dropdown>
</div>
</div>
<Form className={styles.formBox}>
<Row
className={styles.controlBlock}
style={{ paddingTop: editConfig && editConfig.columns && editConfig.columns.length ? 10 : 0 }}
>
{this.onRenderHeadControls()}
</Row>
{this.onRenderPanel()}
{this.renderSubTable(editConfig)}
</Form>
</div>
);
}
}
export default EditComponent;