/* eslint-disable array-callback-return,no-undef,guard-for-in,object-curly-newline,prefer-destructuring */ /* 用于存放涉及逻辑的通用方法 */ import React from 'react'; import moment from 'moment'; import ShowTableCell from './ShowTableCell'; import * as utils from '../../utils/utils'; const masterPrefix = 'master.'; /* 主表前缀数据格式:字符串) */ const slavePrefix = 'slave.'; /* 从表前缀数据格式:字符串) */ /** 把主表字段绑定要相应的控件上 */ export function mapPropsToFields(masterData, Form) { const result = {}; Object.keys(masterData).forEach((child) => { const firstKey = child.substring(0, 1); if (firstKey !== 't') { result[child] = Form.createFormField({ value: masterData[child] }); } else { const dateFormat = 'YYYY-MM-DD HH:mm:ss'; /* 日期控件显示格式 */ const value = masterData[child] !== null ? moment(masterData[child], dateFormat) : null; result[child] = Form.createFormField({ value }); } }); return result; } /** 把从表字段绑定要相应的控件上 */ export function mapPropsToFieldsSlave(slaveData, Form) { /* 待用数据声明 */ const result = []; /* 返回值 */ const dateFormat = 'YYYY-MM-DD HH:mm:ss'; /* 日期控件显示格式 */ /* 执行条件 */ if (utils.isNotEmptyArr(slaveData)) { /* 遍历每一行从表数据 */ for (const each of slaveData) { /* 返回值的内部对象 */ const resultObj = {}; /* 遍历每一行从表对象的key */ for (const key of Object.keys(each)) { /* 获取key的首字母用于判断类型 */ const firstKey = key.substring(0, 1); /* 日期格式的稍作转换 */ const value = firstKey === 't' ? utils.convertObjToMoment(each[key], dateFormat) : each[key]; /* 返回值内部对象赋值 */ resultObj[key] = Form.createFormField({ value }); } /* 返回值赋值 */ result.push(resultObj); } } /* 返回值 */ return result; } /** 系统参数日期格式化 */ export function getDateFormat(systemData) { if (utils.isUndefined(systemData)) { return 'YYYY-MM-DD'; } const sCbxDateTime = systemData.filter(item => (item.sName === 'CbxDateTime')); const [{ sValue }] = sCbxDateTime; let dateFormat = 'YYYY-MM-DD'; if (sValue !== undefined) { if (sValue === '1') { dateFormat = 'YYYY-MM-DD HH:mm:ss'; } else if (sValue === '3') { dateFormat = 'HH:mm:ss'; } } return dateFormat; } /** 列表显示日期格式化 */ export function getDate(props, data) { const { systemData } = props.app; const sCbxDateTime = systemData.filter(item => (item.sName === 'CbxDateTime')); const [{ sValue }] = sCbxDateTime; if (sValue !== undefined) { const dataSplit = data.split(' '); if (sValue === '2') { data = dataSplit[0]; } else if (sValue === '3') { data = dataSplit[1]; } } return data; } /** 获取主表显示的控件集 */ export function getMasterShowConfig(masterConfig, masterShowConfig) { if (utils.isEmptyArr(masterShowConfig)) { const masterConfigData = masterConfig.gdsconfigformslave; masterShowConfig = masterConfigData.filter(item => item.sName !== '' && item.bVisible && item.showName !== ''); } return masterShowConfig; } /** 获取主表默认值 */ export function getDefaultMasterData(masterShowConfig) { const masterData = {}; masterShowConfig.forEach((childConfig) => { const { sDefault, sName } = childConfig; if (sDefault !== '') { masterData[sName] = sDefault; } }); return masterData; } /** 根据表配置获取表头 */ export function getHeaderConfig(config, column) { if (utils.isEmptyArr(column)) { const tableConfig = config.gdsconfigformslave; for (const child of tableConfig) { if (child.sName !== '' && child.bVisible && child.showName !== '') { column.push({ title: child.showName, dataIndex: child.sName, width: child.iFitWidth, }); } } } return column; } export function getListHeader(config, column) { if (utils.isEmptyArr(column)) { const tableConfig = config.gdsconfigformslave; for (const child of tableConfig) { if (child.sName !== '' && child.bVisible && child.showName !== '') { column.push({ title: child.showName, dataIndex: child.sName, width: child.iFitWidth, render: text => , }); } } } return column; } /** 获取表格宽度 */ export function getScrollX(columns) { let scrollX = 37; for (const each of columns) { scrollX += each.width; } return scrollX; } /** 控制主表控件是否渲染 */ export function setIsMasterRender(isMasterRender, renderArr) { for (const item of Object.keys(isMasterRender)) { isMasterRender[item] = renderArr.indexOf(item) >= 0; } return { ...isMasterRender }; } /** 获取从表显示的控件集 */ export function getSlaveShowConfig(slaveConifg, slaveShowConfig) { if (utils.isEmptyArr(slaveShowConfig)) { const slaveConfigData = slaveConifg.gdsconfigformslave; slaveShowConfig = slaveConfigData.filter(item => item.sName !== '' && item.bVisible && item.showName !== ''); } return slaveShowConfig; } /** 控制从表控件是否渲染(数据格式:{sSlaveId1:{sProductId:true,sProductUnit:false},sSlaveId2:{sProductId:false,sProductUnit:true}}) */ export function setIsSlaveRender(props) { const { slaveData, slaveColumn } = props; let { showSlaveRender } = props; showSlaveRender = utils.isUndefined(showSlaveRender) ? {} : showSlaveRender; const isSlaveRender = []; for (const eachSlave of slaveData) { const renderEach = showSlaveRender[eachSlave.sId]; const obj = {}; for (const eachSlaveColumn of slaveColumn) { obj[eachSlaveColumn.dataIndex] = (utils.isNotEmptyObject(renderEach) && utils.isNotUndefined(renderEach[eachSlaveColumn.dataIndex])); } isSlaveRender[eachSlave.sId] = obj; } props.isSlaveRender = { ...isSlaveRender }; return props; } /** 控制从表控件是否渲染(渲染整列) */ export function setIsSlaveRenderArr(isSlaveRender, showSlaveRender) { if (utils.isNotEmptyArr(isSlaveRender)) { for (const key of Object.keys(isSlaveRender)) { const row = isSlaveRender[key]; for (const cell of Object.keys(row)) { row[cell] = showSlaveRender.indexOf(cell) >= 0; } } } return isSlaveRender; } /** 根据配置和权限,筛选出显示的按钮 */ export function getShowBtn(props) { const menuData = []; const { masterConfig, gdsjurisdiction, btnData, report } = props; const { gdsconfigformslave } = masterConfig; /* 获取权限集合 */ /* 初始赋值数据值声明 */ const btnShowData = [...btnData]; /* 配置先过滤出按钮或则页签的集合 */ const baseCondition = gdsconfigformslave.filter(item => item.sName === '' && item.showName !== ''); /** 根据权限,筛选出显示的按钮 */ gdsjurisdiction.forEach((child) => { const index = btnShowData.findIndex(item => item.sControlName === child.sAction); if (index > -1) { btnShowData.splice(index, 1); } }); /** 权限筛选后根据配置,筛选出显示的按钮 */ baseCondition.forEach((child) => { const index = btnShowData.findIndex(item => item.sControlName === child.sControlName && !child.bVisible); if (index > -1) { btnShowData.splice(index, 1); } }); /* 筛选出一级菜单 */ const parMenu = btnShowData.filter(item => !item.sControlName.includes('.')); /* 初始值的二级菜单 */ const childMenu = btnShowData.filter(item => item.sControlName.includes('.')); /** 配置后匹配二级菜单 */ parMenu.forEach((childPar) => { const { pIdentify, sControlName } = childPar; childPar.child = []; /** 匹配相应的子菜单 */ const childData = childMenu.filter(item => item.sControlName.startsWith(`${sControlName}.`)); if (utils.isNotEmptyArr(childData)) { childPar.child.push(...childData); } if (sControlName === 'BtnPrint') { /* 打印的二级菜单集合 */ const reportChild = []; for (const each of report) { reportChild.push({ sControlName: `BtnPrint.${each.sReportName}`, showName: each.sReportName, disabled: false, sId: each.sId, }); } childPar.child.push(...reportChild); } if (pIdentify !== '') { /* 复制到、上查、下查、复制从的二级菜单集合 */ const pIdentifyChild = baseCondition.filter(item => item.sControlName.startsWith(childPar.pIdentify) && item.bVisible); const pIdentifyEachChild = []; for (const each of pIdentifyChild) { const slaveCopeTo = []; const obj = {}; if (pIdentify === 'BtnCopyTo_') { const pIdentifyOfBtnCopyToChild = baseCondition.filter(item => item.sControlName.startsWith('BtnCopyTo_')); for (const item of pIdentifyOfBtnCopyToChild) { const { sAssignField } = item; const splitArray = item.sControlName.split('_'); if (splitArray.length === 2) { /* 返回新对象——主表赋值 */ obj.masterCopeTo = utils.returnObjValue(sAssignField); } else { /* 返回新对象 */ const slaveChild = utils.returnObjValue(sAssignField); slaveCopeTo.push(slaveChild); } } if (utils.isNotEmptyArr(slaveCopeTo)) { obj.slaveCopeTo = slaveCopeTo; } } /* 将上查、下查的三级菜单数据存入 */ if (pIdentify === 'BtnUpCheck.' || pIdentify === 'BtnDownCheck.') { if (each.sControlName === props.toolBarSearchUpDownThirdMenuKey) { obj.thirdMenu = props.toolBarSearchUpDownThirdMenuData; } } pIdentifyEachChild.push({ sControlName: each.sControlName, showName: each.showName, sId: each.sId, disabled: false, sActiveId: utils.strUndefinedToEmpty(each.sActiveId), ...obj, }); } childPar.child.push(...pIdentifyEachChild); } menuData.push(childPar); }); return menuData; } /** 通用失败 */ export function handleCommonFail(props, data) { /* 待用数据声明 */ const { dispatch } = props; /* 错误处理 */ dispatch({ type: 'app/throwError', payload: data }); /* 返回值赋值 */ props.pageLoading = false; /* 返回值 */ return props; } // ----------------------------获取sqlCondition start---------------------------- // /** 获取sqlCondition对象 */ export function getSqlCondition(sSqlCondition, sSlaveId, slaveData, masterData) { /* 返回值声明 */ const obj = {}; /* 执行条件 */ if (utils.isNotEmptyStr(sSqlCondition)) { /* 逗号分割sqlCondition为数组 */ const arr = sSqlCondition.split(','); /* 遍历sqlCondition数组 */ for (let key of arr) { /* 去掉空格 */ key = key.trim(); /* 获取sqlCondition对应key的value */ const value = this.getSqlConditionData( key, sSlaveId, slaveData, masterData, ); /* 可用的value进行返回值赋值 */ if (value) { obj[key.replace(masterPrefix, '').replace(slavePrefix, '')] = value; } } } /* 返回值 */ return obj; } /* 获取sqlCondition数据 */ export function getSqlConditionData(key, sSlaveId, slaveData, masterData) { if (key.startsWith(masterPrefix)) { /* 从主表中获取数据 */ return this.getSqlConditionByMaster(key.replace(masterPrefix, ''), masterData); } else if (key.startsWith(slavePrefix)) { /* 从从表中获取数据 */ return this.getSqlConditionBySlave( key.replace(slavePrefix, ''), slaveData, sSlaveId, ); } else { /* 从主表和从表中一起获取数据 */ return this.getSqlConditionByMasterSlave( key, masterData, slaveData, sSlaveId, ); } } /* 从主表中获取sqlCondition数据 */ export function getSqlConditionByMaster(key, masterData) { return masterData[key]; } /* 从从表中获取sqlCondition数据 */ export function getSqlConditionBySlave(key, slaveData, sSlaveId) { /* 获取从表的本条数据 */ const slaveObj = slaveData.filter(item => item.sId === sSlaveId); /* 返回值 */ return utils.isNotEmptyArr(slaveObj) ? slaveObj[0][key] : null; } /* 从主从表中获取sqlCondition数据 */ export function getSqlConditionByMasterSlave(key, masterData, slaveData, sSlaveId) { /* 先从主表中获取数据 */ let value = this.getSqlConditionByMaster(key, masterData); /* 再从从表中获取数据 */ if (!value && utils.isNotEmptyStr(sSlaveId)) { value = this.getSqlConditionBySlave(key, slaveData, sSlaveId); } /* 返回值 */ return value; } // ----------------------------获取sqlCondition end ---------------------------- // // ----------------------------单据渲染start---------------------------- // // -------------------------主表单据渲染start------------------------- // /** 设置主表渲染 */ export function setMasterRender(masterShowConfig, masterShowRender) { /* 填充主表渲染容器(默认值都给false) */ let isMasterRender = setMasterRenderTrueOrFalse(masterShowConfig, false); /* 设置主表渲染容器值 */ isMasterRender = setMasterRenderContainerValue(isMasterRender, masterShowRender); /* 返回值 */ return isMasterRender; } /** 设置主表渲染(全是true或false) */ export function setMasterRenderTrueOrFalse(masterShowConfig, value) { /* 返回值声明 */ const isMasterRender = {}; /* 主表配置有值才进行容器赋值,否则就返回空对象了 */ if (utils.isNotEmptyArr(masterShowConfig)) { /* 遍历主表配置结构:[{},{},{}...] */ for (const each of masterShowConfig) { /* sName为key,初始值都是false */ isMasterRender[each.sName] = value; } } /* 返回值 */ return isMasterRender; } /** 设置主表渲染容器值 */ export function setMasterRenderContainerValue(isMasterRender, masterShowRender) { /* 如果没设置渲染数组就直接返回都是false的渲染容器即可 */ if (utils.isNotEmptyArr(masterShowRender)) { /* 渲染数组有值的话就遍历并把在渲染容器中对应的sName都变成true */ for (const sName of masterShowRender) { isMasterRender[sName] = true; } } /* 返回值 */ return isMasterRender; } // -------------------------主表单据渲染end ------------------------- // // -------------------------从表单据渲染start------------------------- // /** 设置从表渲染 */ export function setSlaveRender(slaveShowConfig, slaveData, slaveShowRender) { /* 填充从表表渲染容器(默认值都给false) */ let isSlaveRender = setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, false); /* 设置从表渲染容器值 */ isSlaveRender = setSlaveRenderContainerValue(isSlaveRender, slaveShowRender); /* 返回值 */ return isSlaveRender; } /** 设置从表渲染(全是true或false) */ export function setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, value) { /* 返回值声明,数据结构{sSlaveId1:{sProductId:true,sProductQty:false},sSlaveId2:{sProductId:true,sProductQty:false},sSlaveId3:{sProductId:true,sProductQty:false}...} */ const isSlaveRender = {}; /* 从表配置和从表数据都必须有值才进行容器赋值,否则就返回空对象了 */ if (utils.isNotEmptyArr(slaveShowConfig) && utils.isNotEmptyArr(slaveData)) { /* 遍历从表数据:[{},{},{}...] */ for (const eachSlaveData of slaveData) { /* 声明容器内部对象 */ const isSlaveRenderEach = {}; /* 遍历从表配置:[{},{},{}...] */ for (const eachSlaveShowConfig of slaveShowConfig) { /* 给每一个从表配置内部对象赋默认值为false */ isSlaveRenderEach[eachSlaveShowConfig.sName] = value; } /* 给渲染容器对象的row赋值 */ isSlaveRender[eachSlaveData.sId] = isSlaveRenderEach; } } /* 返回值 */ return isSlaveRender; } /** 设置从表渲染容器值 */ export function setSlaveRenderContainerValue(isSlaveRender, slaveShowRender) { /* 如果没设置渲染对象就直接返回都是false的渲染容器即可 */ if (utils.isNotEmptyObject(slaveShowRender) && utils.isNotEmptyObject(isSlaveRender)) { /* 渲染对象有值的话就遍历并把在渲染容器中对应的sName都变成true */ for (const sSlaveId of Object.keys(slaveShowRender)) { /* 获取渲染对象中的从表数据 */ const valueArr = slaveShowRender[sSlaveId]; /* 获取渲染容器中对应的从表row */ const isSlaveRenderEach = isSlaveRender[sSlaveId]; /* 如果如安然对象的从表数据有值,则把这个值付给渲染对象 */ if (utils.isNotEmptyArr(valueArr)) { /* 循环赋值 */ for (const key of valueArr) { isSlaveRenderEach[key] = true; } } } } /* 返回值 */ return isSlaveRender; } /** 设置从表渲染(整列渲染) */ export function setSlaveCellRender(slaveShowConfig, slaveData, slaveShowRender) { /* 填充从表表渲染容器(默认值都给false) */ let isSlaveRender = setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, false); /* 设置从表渲染容器值 */ isSlaveRender = setSlaveCellRenderContainerValue(isSlaveRender, slaveShowRender); /* 返回值 */ return isSlaveRender; } /** 设置从表渲染容器值(整列渲染) */ export function setSlaveCellRenderContainerValue(isSlaveRender, slaveShowRender) { /* 如果没设置渲染数组就直接返回都是false的渲染容器即可 */ if (utils.isNotEmptyArr(slaveShowRender)) { /* 渲染对象有值的话就遍历并把在渲染容器中对应的sName都变成true */ for (const key of Object.keys(isSlaveRender)) { const isSlaveRenderEach = isSlaveRender[key]; /* 循环赋值 */ for (const sName of Object.keys(isSlaveRenderEach)) { isSlaveRenderEach[sName] = slaveShowRender.indexOf(sName) >= 0; } } } /* 返回值 */ return isSlaveRender; } // -------------------------从表单据渲染end ------------------------- // // ----------------------------单据渲染end ---------------------------- // // ----------------------------合计列start---------------------------- // /** 添加合计列数据 */ export function addDataTotal(slaveShowConfig, dataTotal, slaveData, isNeed) { /* 获取待合计字段 */ const slaveTotal = []; const dataTotalColumn = this.getDataTotalColumn(slaveShowConfig, dataTotal); /* 从表配置,从表数据和待合计字段都不为空的时候才进行数据合计 */ if (utils.isNotEmptyArr(slaveShowConfig) && utils.isNotEmptyObject(dataTotalColumn) && utils.isNotEmptyArr(slaveData)) { /* 获取合计对象 */ const totalObj = getTotalObj(slaveShowConfig, slaveData, dataTotalColumn, isNeed); /* 添加合计对象 */ slaveTotal.push(totalObj); } /* 返回值 */ return slaveTotal; } /** 获取合计列数据 */ export function getDataTotalColumn(slaveShowConfig, dataTotal) { /* 如果接口传了合计字段那就用接口的合计字段 */ if (utils.isNotEmptyObject(dataTotal)) { return dataTotal; } /* 返回值 */ const dataTotalColumn = {}; /* 如果存在从表配置 */ if (utils.isNotEmptyArr(slaveShowConfig)) { /* 遍历从表配置 */ for (const each of slaveShowConfig) { /* 将需要合计的sName存入合计列对象中 */ if (each.bSum) { dataTotalColumn[each.sName] = 0; } } } /* 返回值 */ return dataTotalColumn; } /** 获取合计对象 */ export function getTotalObj(slaveShowConfig, slaveDataNoTotal, dataTotalColumn, isNeed) { /* 待用数据声明 */ const sId = utils.createSid(); /* 唯一标示 */ const totalObj = { dataTotal: true, key: sId, sId, };/* 统计对象的必须数据 */ /* 遍历表头 */ for (const each of slaveShowConfig) { /* 获取sName */ const sName = each.sName; /* 给合计对象添加属性和值 */ totalObj[sName] = getStatisticsValue(sName, slaveDataNoTotal, dataTotalColumn, isNeed); } /* 返回值 */ return totalObj; } /** 获取统计值 */ export function getStatisticsValue(sName, slaveDataNoTotal, dataTotalColumn, isNeed) { /* 返回值声明 */ let res = ''; /* 过滤出需要统计的列 */ if (utils.isNotUndefined(dataTotalColumn[sName])) { /* 判断是否需要统计(需要统计的话要遍历从表,不需要的话就直接取dataTotal中的数据) */ if (isNeed) { /* 把需要统计的列sum起来 */ for (const each of slaveDataNoTotal) { res = utils.convertStrToNumber0(res) + utils.convertStrToNumber0(each[sName]); } } else { /* 不需要的统计的话直接取dataTotal中的值 */ res = dataTotalColumn[sName]; } } /* 返回值 */ return res; } // ----------------------------合计列end ---------------------------- // // ----------------------------复制到start---------------------------- // /* 复制到主表赋值 */ export function getCopyToMasterAssign(masterData, masterAssign) { /* 返回值声明 */ const masterAssignData = {}; /* 两个集合都不为空才执行赋值,要不就直接返回空数组就好了 */ if (utils.isNotEmptyObject(masterAssign) && utils.isNotEmptyObject(masterData)) { /* 遍历赋值数据 */ for (const targetKey of Object.keys(masterAssign)) { /* 获取主表的数据key */ const key = masterAssign[targetKey]; /* 主表值 */ const value = masterData[key]; /* 给这个目标key赋值 */ if (utils.isNotUndefined(value)) { masterAssignData[targetKey] = value; } } } /* 返回值 */ return masterAssignData; } /* 复制到从表赋值 */ export function getCopyToSlaveAssign(slaveData, slaveAssign, masterData) { /* 返回值声明 */ const slaveAssignData = []; /* 两个集合都不为空才执行赋值,要不就直接返回空数组就好了 */ if (utils.isNotEmptyArr(slaveAssign) && utils.isNotEmptyArr(slaveData)) { /* 暂时先取从表的第一条,之后再调整为动态的 */ const slaveAssignFirst = slaveAssign[0]; /* 遍历从表数据 */ for (const each of slaveData) { /* 合计行不处理 */ if (!each.dataTotal) { /* 创建从表sId */ const sId = utils.createSid(); /* 每一行的容器对象声明 */ const slaveAssignDataEach = { sId, key: sId, }; /* 遍历从表数据的每一个key */ for (const key of Object.keys(each)) { const targetKey = utils.getObjKeyByValue(slaveAssignFirst, key); /* 如果该赋值字段存在,则给数据赋值 */ if (utils.isNotUndefined(targetKey)) { slaveAssignDataEach[targetKey] = targetKey.startsWith('#') && targetKey.endsWith('#') ? masterData[key] : each[key]; } } /* 容器赋值 */ slaveAssignData.push(slaveAssignDataEach); } } } /* 返回值 */ return slaveAssignData; } // ----------------------------复制到end ---------------------------- //