/* eslint-disable */
/* eslint-disable react/no-multi-comp,key-spacing,space-in-parens */
/* eslint-disable guard-for-in */
/* eslint-disable no-undef,import/first,prefer-destructuring,jsx-a11y/alt-text */
/* eslint-disable react/no-array-index-key */
/* eslint-disable react/jsx-closing-tag-location */
/* eslint-disable */
import React, { useEffect, useRef, useState } from 'react';
import {
CheckCircleFilled,
ClockCircleFilled,
CloseCircleFilled,
DownloadOutlined,
ExclamationCircleFilled,
RightOutlined,
SearchOutlined,
StopFilled,
UploadOutlined,
EyeOutlined,
FilePdfOutlined,
FileWordOutlined,
FileExcelOutlined,
ExportOutlined,
FileOutlined,
FileSearchOutlined,
ClearOutlined,
CaretUpOutlined,
CaretDownOutlined,
PlaySquareOutlined
} from '@ant-design/icons';
import { Icon as LegacyIcon } from '@ant-design/compatible';
// import '@ant-design/compatible/assets/index.css';
import lodash from 'lodash';
import { Table, Input, Checkbox, Button, Upload, message, Popover, Spin, Space, Form, Tooltip, Row, Progress, Modal, Col, Pagination } from 'antd-v4';
import { DndProvider, DropTarget, DragSource } from 'react-dnd';
import {
sortableContainer,
sortableElement,
sortableHandle,
} from 'react-sortable-hoc';
import { MenuOutlined } from '@ant-design/icons';
import { HTML5Backend } from 'react-dnd-html5-backend';
import { Resizable } from 'react-resizable';
import styles from './index.less';
import * as commonUtils from '@/utils/utils';
import ShowTypeNew from '@/components/Common/CommonComponent';
import Highlighter from 'react-highlight-words';
import commonConfig from '@/utils/config';
import update from 'immutability-helper';
import * as commonFunc from '@/components/Common/commonFunc';
import moment from 'moment';
import ParamIcon from '@/assets/param.svg';
import sAlumiteIcon from '@/assets/sAlumite.svg';
import ReplaceIcon from '@/assets/extract.svg';
import DisReplaceIcon from '@/assets/disableExtract.svg';
import DisAlumiteIcon from '@/assets/disabledsAlumite.svg';
import ShowImg from '@/components/Common/ShowImage/ShowImage';
import ShowImgStyle from '@/components/Common/ShowImage/ShowImage.less';
import AntdDraggableModal from '@/components/Common/AntdDraggableModal';
import CommonListSelectTree from '@/components/Common/CommonListSelectTree';
import CommonListSelect from '@/components/Common/CommonListSelect';
import CommonList from '@/components/Common/CommonList';
import CommonListTreeSelect from '@/components/Common/CommonListTreeSelect';
import AntdDraggableDiv from '@/components/Common/AntdDraggableDiv';
import SlaveMemo from '@/components/Common/SlaveMemo';
import { VList } from '@/components/Vlist';
import { VList as VListNew } from '@/components/VlistNew';
import SvgIcon from "../../SvgIcon";
import PrintPdf from '@/components/PrintPdf/PrintPdf';
import OfficePreview from '@/components/Common/OfficePreview';
import EditTableCommonListSelectFlex from '@/components/Common/CommonListSelectFlex/EditTableCommonListSelectFlex';
import ColorInfo from './colorInfo';
// import { VList } from 'virtuallist-antd';
/* 获取配置及数据 */
const FormItem = Form.Item;
const { confirm } = Modal;
const ResizeableTitle = (props) => {
const { onResize, width, ...restProps } = props;
if (!width) {
return
{
return
{
// eslint-disable-next-line array-callback-return
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
// const record = dataSource[i]; /* 获取每行数据 */
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
// switch (
// Number(iStatus) // 根据状态显示颜色
// ) {
// case 0:
// colorValue = "#808080"; /* 0:灰色 */
// break;
// case 1:
// colorValue = "#808080"; /* 1:灰色 */
// break;
// case 2:
// colorValue = "#ff4d4f"; /* 2:红色 */
// break;
// case 3:
// colorValue = "#d4b106"; /* 3:黄色 */
// break;
// case 4:
// colorValue = "#000000"; /* 黑色 */
// break;
// case 5:
// colorValue = "#49aa19"; /* 5:绿色 */
// break;
// default:
// colorValue = "#000000";
// }
switch (
Number(sState) // 根据状态显示颜色
) {
case 2:
colorValue = "#FF6600"; /* 2:等待:黄色 */
break;
case 4:
colorValue = "#648c4b"; /* 4:已完成:绿色 */
break;
case 1:
case 3:
colorValue = "#106abe"; /* 1、3:进行中:蓝色 */
break;
default:
colorValue = "#000000";
}
}
return (
{commonUtils.isNotEmptyObject(t.sProcessName) ? t.sProcessName : ''}
{i + 1 === sPartItemLength ? '' : }
);
})
}
}}>
{
// eslint-disable-next-line array-callback-return
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
// const record = dataSource[i]; /* 获取每行数据 */
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
// switch (Number(sState)) { // 根据状态显示颜色
// case 0:
// colorValue = '#808080'; /* 0:灰色 */
// break;
// case 1:
// colorValue = '#808080'; /* 1:灰色 */
// break;
// case 2:
// colorValue = '#ff4d4f'; /* 2:红色 */
// break;
// case 3:
// colorValue = '#d4b106'; /* 3:黄色 */
// break;
// case 4:
// colorValue = '#000000'; /* 黑色 */
// break;
// case 5:
// colorValue = '#49aa19'; /* 5:绿色 */
// break;
// default:
// colorValue = '#000000';
// }
switch (
Number(sState) // 根据状态显示颜色
) {
case 2:
colorValue = "#FF6600"; /* 2:等待:黄色 */
break;
case 4:
colorValue = "#648c4b"; /* 4:已完成:绿色 */
break;
case 1:
case 3:
colorValue = "#106abe"; /* 1、3:进行中:蓝色 */
break;
default:
colorValue = "#000000";
}
}
return (
{commonUtils.isNotEmptyObject(t.sProcessName) ? t.sProcessName : ''}
{i + 1 === sPartItemLength ? '' : }
);
})
}
);
}
};
} else {
sPartNameStatus[0].render = (itemStr) => {
if (itemStr) {
const sPartItem = itemStr.split('->');
return (
{
// eslint-disable-next-line array-callback-return
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
const ArrItemStr = t.split('#')[0]; /* 工序名称 */
const ArrItemNum = t.split('#')[1]; /* 状态 */
const ArrItemName = t.split('#')[2]; /* 机台名称 */
const ArrItemBanZhu = t.split('#')[3]; /* 班组 */
const ArrItemTime = t.split('#')[4]; /* 排单时间 */
const ArrItemPCNum = t.split('#')[5]; /* 排程数 */
const ArrItemSBNum = t.split('#')[6]; /* 上报数 */
const ArrItem7Num = commonUtils.isNotEmptyArr(t.split('#')) && t.split('#').length > 8 ? t.split('#')[8] : ''; /* 包数 */
const ArrItem8Num = commonUtils.isNotEmptyArr(t.split('#')) && t.split('#').length > 9 ? t.split('#')[9] : ''; /* 每包数量 */
const ArrItem9Num = commonUtils.isNotEmptyArr(t.split('#')) && t.split('#').length > 10 ? t.split('#')[10] : ''; /* 零头数量 */
let ArrItemNumChange = '';
let icon;
// eslint-disable-next-line default-case
switch (Number(ArrItemNum)) {
case 0:
ArrItemNumChange = '未排程';
icon =
;
break;
case 1:
ArrItemNumChange = '未完成';
icon =
;
break;
case 2:
ArrItemNumChange = '生产中';
icon =
;
break;
case 3:
ArrItemNumChange = '暂停';
icon =
;
break;
case 4:
ArrItemNumChange = '取消';
icon =
;
break;
case 5:
ArrItemNumChange = '完成';
icon =
;
break;
}
// eslint-disable-next-line no-unused-vars
const content = (
工序名称:{ArrItemStr}
状态:{ArrItemNumChange}
机台名称:{ArrItemName}
班组:{ArrItemBanZhu}
排单时间:{ArrItemTime}
排程数:{ArrItemPCNum}
上报数:{ArrItemSBNum}
{
ArrItem7Num ?
包数:{ArrItem7Num}
: ''
}
{
ArrItem8Num ?
每包数量:{ArrItem8Num}
: ''
}
{
ArrItem9Num ?
零头数量:{ArrItem9Num}
: ''
}
);
// 数字转换图标
return (
{icon}
{ArrItemStr}
{/*{ i + 1 === sPartItemLength ? '' :
}*/}
);
})
}
);
}
};
}
}
// 判断材料准备状态
if (commonUtils.isNotEmptyArr(sMaterialsStatus) && commonUtils.isNotEmptyArr(dataSource)) {
this.useVListNew = true;
const sModelsType = commonUtils.isNotEmptyObject(this.props) && commonUtils.isNotEmptyObject(this.props.app) ? this.props.app.currentPane.sModelsType : '';
if (true || sModelsType === 'production/productionPlanInfo' || sModelsType === 'productionMainPlan/productionMainPlan' || (commonUtils.isNotEmptyObject(sModelsType) && sModelsType.includes('view/')) || location.pathname.toLowerCase().indexOf('oee') > -1) {
/* 动态列Jsonn解析 */
if (commonUtils.isNotEmptyArr(sMaterialsStatus) && commonUtils.isNotEmptyArr(dataSource)) {
sMaterialsStatus.forEach((jsonStatus, index) => {
const dWidth = jsonStatus.width * 2;
const sBackGroundColor = jsonStatus.bReadonly ? '#f1f2f8' : '';
if (commonUtils.isNotEmptyArr(jsonStatus.children)) { /* 嵌套列头JSON解析 */
for (const obj of jsonStatus.children) {
obj.render = (itemStr) => {
if (commonUtils.isJSON(itemStr)) {
const sPartItem = JSON.parse(itemStr);
/* 取箭头弹出的窗体配置 */
let showConfig = {};
let linkStyle = '';/* 弹窗 */
if (commonUtils.isNotEmptyArr(this.props.config) && commonUtils.isNotEmptyArr(this.props.config.gdsconfigformslave) && commonUtils.isNotEmptyStr('sMaterialsStatus')) {
const showConfigArr = this.props.config.gdsconfigformslave.filter(item => item.sName === 'sMaterialsStatus' && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr[0];
if (commonUtils.isNotEmptyObject(showConfig) && showConfig.sDropDownType === 'picArr' && !commonUtils.isEmpty(showConfig.sActiveId) && commonUtils.isEmptyArr(this.props.sGroupByList)) {
linkStyle = 'sMaterialsStatusStyle';
}
}
}
return (
{
return
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 0:
colorValue = '#000000'; /* 0:黑色 */
break;
case 1:
colorValue = '#ff4d4f'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#49aa19'; /* 3:绿色 */
break;
case 4:
colorValue = '#ff4d4f'; /* 4:红色 */
break;
default:
colorValue = '#000000';
}
}
return (
{commonUtils.isNotEmptyObject(t.sMaterialsName) ?
{t.sMaterialsName}
: ''}
{i + 1 === sPartItemLength ? '' : -}
);
})
}
}}>
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 0:
colorValue = '#000000'; /* 0:黑色 */
break;
case 1:
colorValue = '#ff4d4f'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#49aa19'; /* 3:绿色 */
break;
case 4:
colorValue = '#ff4d4f'; /* 4:红色 */
break;
default:
colorValue = '#000000';
}
}
return (
{commonUtils.isNotEmptyObject(t.sMaterialsName) ?
{t.sMaterialsName}
: ''}
{i + 1 === sPartItemLength ? '' : -}
);
})
}
);
} else {
return itemStr;
}
};
};
} else { /* 无嵌套列头JSON列解析 */
sMaterialsStatus[index].render = (itemStr) => {
if (commonUtils.isJSON(itemStr)) {
const sPartItem = JSON.parse(itemStr);
/* 取箭头弹出的窗体配置 */
let showConfig = {};
let linkStyle = '';/* 弹窗 */
if (commonUtils.isNotEmptyArr(this.props.config) && commonUtils.isNotEmptyArr(this.props.config.gdsconfigformslave) && commonUtils.isNotEmptyStr('sMaterialsStatus')) {
const showConfigArr = this.props.config.gdsconfigformslave.filter(item => item.sName === 'sMaterialsStatus' && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr[0];
if (commonUtils.isNotEmptyObject(showConfig) && showConfig.sDropDownType === 'picArr' && !commonUtils.isEmpty(showConfig.sActiveId) && commonUtils.isEmptyArr(this.props.sGroupByList)) {
linkStyle = 'sMaterialsStatusStyle';
}
}
}
return (
{
return
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 0:
colorValue = '#000000'; /* 0:黑色 */
break;
case 1:
colorValue = '#ff4d4f'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#49aa19'; /* 3:绿色 */
break;
case 4:
colorValue = '#ff4d4f'; /* 4:红色 */
break;
default:
colorValue = '#000000';
}
}
return (
{commonUtils.isNotEmptyObject(t.sMaterialsName) ?
{t.sMaterialsName}
: ''}
{i + 1 === sPartItemLength ? '' : -}
);
})
}
}}>
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
if (t?.background) {
colorValue = t.background;
} else {
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 0:
colorValue = '#000000'; /* 0:黑色 */
break;
case 1:
colorValue = '#ff4d4f'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#49aa19'; /* 3:绿色 */
break;
case 4:
colorValue = '#ff4d4f'; /* 4:红色 */
break;
default:
colorValue = '#000000';
}
}
return (
{commonUtils.isNotEmptyObject(t.sMaterialsName) ?
{t.sMaterialsName}
: ''}
{i + 1 === sPartItemLength ? '' : -}
);
})
}
);
} else {
return
{itemStr}
;
}
};
}
});
}
}
}
/* 动态列Jsonn解析 */
if (commonUtils.isNotEmptyArr(dynamicColumn) && commonUtils.isNotEmptyArr(dataSource)) {
dynamicColumn.forEach((jsonStatus, index) => {
if (commonUtils.isNotEmptyArr(jsonStatus.children)) { /* 嵌套列头JSON解析 */
const childrenJson = jsonStatus.children.filter(itemChild => itemChild.dataIndex && itemChild.dataIndex.includes('json'));
for (const obj of childrenJson) {
obj.render = (itemStr) => {
if (commonUtils.isNotEmptyObject(itemStr) && commonUtils.isJSON(itemStr)) {
const sPartItem = JSON.parse(itemStr);
return (
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
// const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 1:
colorValue = '#ff0000'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#ffff00'; /* 3:黄色 */
break;
case 0:
colorValue = ''; /* 3:不要颜色 */
break;
default:
colorValue = '';
}
return (
);
})
}
);
}
};
};
} else { /* 无嵌套列头JSON列解析 */
dynamicColumn[index].render = (itemStr) => {
if (commonUtils.isNotEmptyObject(itemStr) && commonUtils.isJSON(itemStr)) {
const sPartItem = JSON.parse(itemStr);
return (
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
// const sPartItemLength = sPartItem.length;
let colorValue = '#000000';
const sState = commonUtils.isEmpty(t.sState) ? 4 : t.sState;
switch (Number(sState)) { // 根据状态显示颜色
case 1:
colorValue = '#ff0000'; /* 1:红色 */
break;
case 2:
colorValue = '#49aa19'; /* 2:绿色 */
break;
case 3:
colorValue = '#ffff00'; /* 3:黄色 */
break;
default:
colorValue = '#666';
}
return (
);
})
}
);
} else {
return itemStr;
}
};
}
});
}
// 判断时间状态
if (commonUtils.isNotEmptyArr(sTimeStatus) && commonUtils.isNotEmptyArr(dataSource)) {
sTimeStatus[0].render = (itemStr) => {
if (commonUtils.isJSON(itemStr)) {
const sPartItem = JSON.parse(itemStr);
const linkStyle = 'sTimeStatusStyle';/* 弹窗 */
return (
{
// eslint-disable-next-line array-callback-return;
sPartItem.map((t, i) => {
const sPartItemLength = sPartItem.length;
const sColor = t.sColor;
const dWidth = t.dRate !== undefined && t.dRate !== 0 ? `${t.dRate * 500}px` : '100px';
const content = (
{`${t.sName} :${t.sValue}`}
);
return (
{t.sValue}
);
})
}
);
} else {
return itemStr;
}
};
}
// 判断拼板状态
if (commonUtils.isNotEmptyArr(sScheduleStatusJson) && commonUtils.isNotEmptyArr(dataSource)) {
this.useVListNew = true;
sScheduleStatusJson[0].render = (itemStr) => {
if (commonUtils.isJSON(itemStr)) {
const itemJson = commonUtils.convertStrToObj(itemStr);
const itemLength = itemJson.length;
const content = itemJson.map((t, i) => {
const { sState, sColor = '#000000', sName = '' } = t;
return (
{sName}{i + 1 === itemLength ? '' : }
);
})
return (
{
return {content}
}}>
{content}
);
}
};
}
let components = {};
if (this.isDragAndDrop) {
components.header = { cell: ResizeableTitle };
components.body = { row: DragableBodyRow };
} else {
components.header = { cell: ResizeableTitle };
}
let bPagination = true; /* 默认表格分页s */
if (commonUtils.isNotEmptyObject(this.props)) {
bPagination = (commonUtils.isNotEmptyObject(this.props.tableProps) && commonUtils.isNotEmptyObject(this.props.tableProps.pagination));
}
let noVlistController = false;
if (this.props.config && this.props.config.gdsconfigformslave.filter(item => item.sControlName === 'bNoVlist')[0]) {
noVlistController = true;
}
/* 特殊情况的表格 在虚拟列表情况 会无法滑动 */
let noVlistTable = false;
if (this.props.noVlistTable) {
noVlistTable = true;
}
// 判断是否有合并单元格, 有的话默认关闭虚拟滚动
// if (this.mergeCellStateMap) {
// for (let key in this.mergeCellStateMap) {
// if (this.mergeCellStateMap[key]) {
// noVlistController= true;
// }
// }
// }
if (!noVlistTable && !this.props.xlyTableMax) {
if (this.props.slaveInfo || this.useVListNew) {
if (!this.uniqueId || window.vlistNewSearh) {
this.uniqueId = this.props.formId ? `${this.props.formId}_${lodash.uniqueId()}` : lodash.uniqueId();
}
if (!this.Vcomponents || window.vlistNewSearh) {
const { tableClassName } = this.state;
const oTable = document.querySelectorAll(`.${tableClassName}`)[0];
if (oTable) {
const oBody = oTable.querySelector('.ant-table-body');
oBody && (oBody.scrollTop = 0);
}
window.vlistNewSearh = null;
this.Vcomponents = VListNew({
height: this.scrollY, vid: this.uniqueId, onScroll: () => {
setTimeout(() => {
let divs = document.getElementsByClassName('noInputInsert');
if (divs.length) {
Array.prototype.forEach.call(divs, item => {
item.parentNode.parentNode.parentNode.parentNode.classList.add('insertTd');
});
}
}, 20);
}
});
}
components = { ...this.Vcomponents, ...components };
} else {
// vid是多个列表在同个页面中,同时渲染会促发问题
// vid不可以为随机数,随机数会导致双击时,点击的两个VList id不同
if (!this.uniqueId || window.vlistNewSearh) {
this.uniqueId = this.props.formId ? `${this.props.formId}_${lodash.uniqueId()}` : lodash.uniqueId();
}
if (!this.Vcomponents1 || window.vlistNewSearh) {
const { tableClassName } = this.state;
const oTable = document.querySelectorAll(`.${tableClassName}`)[0];
if (oTable) {
const oBody = oTable.querySelector('.ant-table-body');
oBody && (oBody.scrollTop = 0);
}
window.vlistNewSearh = null;
this.Vcomponents1 = VList({
height: this.scrollY, vid: this.uniqueId, rowKey: this.rowKey, onScroll: () => {
setTimeout(() => {
let divs = document.getElementsByClassName('noInputInsert');
if (divs.length) {
Array.prototype.forEach.call(divs, item => {
item.parentNode.parentNode.parentNode.parentNode.classList.add('insertTd');
});
}
}, 20);
}
});
}
components = { ...this.Vcomponents1, ...components };
}
}
if (this.props.config && this.props.config.iFreezeColumn) {
tableColumn.forEach((val, index) => {
if (tableColumn[index].fixedHelp) {
tableColumn[index].fixed = false;
tableColumn[index].fixedHelp = false;
}
if (index < this.props.config.iFreezeColumn) {
tableColumn[index].fixed = 'left';
tableColumn[index].fixedHelp = true;
}
});
}
// 处理拖拽排序
if (this.props.dragHandle) {
const handleSortTitle = commonFunc.showMessage(this.props.app.commonConst, 'sort') || '排序';
const handleSort = tableColumn.filter(item => item.dataIndex === 'handleSort').length;
if (tableColumn[0]) {
function arrayMoveMutable(array, fromIndex, toIndex) {
const startIndex = fromIndex < 0 ? array.length + fromIndex : fromIndex;
if (startIndex >= 0 && startIndex < array.length) {
const endIndex = toIndex < 0 ? array.length + toIndex : toIndex;
if (commonUtils.isNotEmptyObject(array[fromIndex].sWorkOrderUsed)) {
message.error(array[fromIndex].sWorkOrderUsed);
return;
}
const [item] = array.splice(fromIndex, 1);
array.splice(endIndex, 0, item);
}
}
function arrayMoveImmutable(array, fromIndex, toIndex) {
array = [...array];
arrayMoveMutable(array, fromIndex, toIndex);
return array;
}
const DragHandle = sortableHandle(() =>
);
const SortableItem = sortableElement(props =>
|
);
const SortableContainer = sortableContainer(props =>
);
const onSortEnd = ({ oldIndex, newIndex }) => {
const { dataSource } = this.state;
if (oldIndex !== newIndex) {
const newData = arrayMoveImmutable([].concat(dataSource), oldIndex, newIndex).filter(el => !!el);
this.props.onDrag(newData, this.props.name);
}
};
const DraggableContainer = props => (
);
const DraggableBodyRow = ({ className, style, ...restProps }) => {
const { dataSource } = this.state;
// function findIndex base on Table rowKey props and should always be a right array index
const index = dataSource.findIndex(x => x.index === restProps['data-row-key']);
return
;
};
// 处理渲染后丢失input focus的bug.
let bDrag = this.props.enabled && !this.props.bForbiddenDrag;/* 是否可以拖动 */
if (bDrag) {
if (!this.DraggableContainer) {
this.DraggableContainer = DraggableContainer;
}
if (!this.DraggableBodyRow) {
this.DraggableBodyRow = DraggableBodyRow;
}
}
if (!handleSort) {
components = { ...components, body: { wrapper: this.DraggableContainer, row: this.DraggableBodyRow } };
} else {
components = { ...components, body: { wrapper: this.DraggableContainer, row: this.DraggableBodyRow } };
tableColumn.shift();
}
tableColumn.unshift(
{
title: handleSortTitle,
dataIndex: 'handleSort',
fixed: 'left',
width: 40,
className: 'drag-visible',
render: () =>
,
},
)
}
}
/**
* 更新缓存数据
*/
if (Array.isArray(tableColumn) && this.props.config) {
const storageColumn = JSON.parse(sessionStorage.getItem(`${this.props.formId}_${this.props.config.sId}`));
if (storageColumn) {
sessionStorage.setItem(`${this.props.formId}_${this.props.config.sId}`, JSON.stringify(tableColumn));
}
}
let rowSelection = this.props.rowSelection !== undefined ? this.props.rowSelection : this.getRowSelection(this.props.name, 'slave'); // 是否选择多选框的问题
if (this.props.config && !this.props.config.bisMutiSelect) {
rowSelection = null
}
const { expKeys } = this.state;
/* 返回值 */
return {
components,
rowKey: this.rowKey,
size: 'middle',
bordered: true, /* 显示边框 */
className: !this.props.enabled ? styles.disabledProup : styles.proup, /* 样式控制 */
scroll: { x: 'max-content' }, /* 宽度 */
dataSource, /* 数据 */
columns: tableColumn, /* 表头 */
// rowSelection: this.props.rowSelection !== undefined ? this.props.rowSelection : this.getRowSelection(this.props.name, 'slave'), /* 添加的复选框(checkbox)功能 */
rowSelection,
// pagination: false, /* 不分页 */
rowClassName: this.setRowClassName.bind(this, 'slave'),
onRow: (record, index) => {
if (this.isDragAndDrop) {
return {
index,
onClick: () => { this.onRowClick(record, index, undefined, this.props.name, 'slave'); },
onMouseEnter: () => { this.onRowMouseEnter(record); },
onMouseLeave: () => { this.onRowMouseLeave(record); },
onDoubleClick: () => { this.onDoubleClick(this.props.name, record); },
moveRow: (dragIndex, hoverIndex, dragKey, hoverKey) => {
this.moveRow(dragIndex, hoverIndex, dragKey, hoverKey);
},
onDragClick: (type) => { this.onRowClick(record, index, type, this.props.name, 'slave'); },
};
} else {
return {
index,
onClick: () => { this.onRowClick(record, index, undefined, this.props.name, 'slave'); },
onDoubleClick: () => { this.onDoubleClick(this.props.name, record); },
onMouseEnter: () => { this.onRowMouseEnter(record); },
onMouseLeave: () => { this.onRowMouseLeave(); },
};
}
},
onExpand: (expanded, record) => {
if (this.showExpAll) {
if (expanded) {
const expKeysNew = [...expKeys, record[this.rowKey]];
this.currentExpKeys = expKeysNew;
this.setState({
expKeys: expKeysNew
});
} else {
const expKeysNew = expKeys.filter(item => item !== record[this.rowKey]);
this.currentExpKeys = expKeysNew;
this.setState({
expKeys: expKeysNew
});
}
}
this.onExpand(expanded, record, 'slave'); /* 点击展开图标时触发s */
},
expandedRowKeys: expKeys.length || this.showExpAll || this.isAllowConExpendKeys ? expKeys : null,
id: commonUtils.isEmptyArr(dataSource) ?
'unDataBox' :
'dataBox', /* 用户修改antd table中自带的样式(我听别人说的要这么弄,你们别骂我) */
...this.props.tableProps,
pagination: bPagination ? {
...this.props.tableProps.pagination,
onChange: (current, size) => {
this.curPagination = {
current, pageSize: size
}
}
} : false, /* 表格是否分页 */
onChange: this.onChange,
};
};
/** 获取子从表复选框对象的props */
getSlaveRowSelection = (name, type) => {
const { bMutiSelect } = this.props.slaveInfo; /* 显示单选框还是复选框 */
let { bisMutiSelect } = this.props.slaveInfo; /* 是否显示选择框 */
if (this.props.slaveInfo.config) {
bisMutiSelect = this.props.slaveInfo.config.bisMutiSelect
}
if (name === 'control' || (commonUtils.isNotEmptyObject(location.pathname) && location.pathname.indexOf('commonAuto') > -1)) { // 控制表中可以通过bisMutiSelect显示或者隐藏勾选框
if (bisMutiSelect) {
return {
preserveSelectedRowKeys: true,
selectedRowKeys: type === 'slaveInfo' ? this.state.slaveInfoSelectedRowKeys : this.state.selectedRowKeys, /* 已选择的数据集 */
onChange: this.handleSelectRowChange.bind(this, name), /* 选择行发生改变时调用的函数 */
getCheckboxProps: record => ({
style: record.bSum && commonConfig.hasSum ? { display: 'none' } : { display: 'checkbox' },
}), /* 过滤合计的选择框 */
type: bMutiSelect ? this.props.rowSelectionType : 'radio', /* checkbox or radio */
columnWidth: 37,
};
} else {
return null;
}
} else {
return {
preserveSelectedRowKeys: true,
selectedRowKeys: type === 'slaveInfo' ? this.state.slaveInfoSelectedRowKeys : this.state.selectedRowKeys, /* 已选择的数据集 */
onChange: this.handleSelectRowChange.bind(this, name), /* 选择行发生改变时调用的函数 */
getCheckboxProps: record => ({
style: record.bSum && commonConfig.hasSum ? { display: 'none' } : { display: 'checkbox' },
}), /* 过滤合计的选择框 */
type: bMutiSelect ? this.props.rowSelectionType : 'radio', /* checkbox or radio */
columnWidth: 37,
};
}
};
/** 获取table对象的props */
getSlaveTableProps = () => {
/* 给数据都添加上key */
if (this.props.setExpandedRowRender !== undefined && this.props.setExpandedRowRender.toString() === 'Y') {
const {
dataSource, tableColumn, tableProps, name: slaveInfoName, config: slaveInfoConfig,
} = this.props.slaveInfo;
// const scrollHeight = parseInt(document.body.clientHeight - 400, 10);
const components = {};
if (this.isDragAndDrop) {
components.header = { cell: ResizeableTitle };
components.body = { row: DragableBodyRow };
} else {
components.header = { cell: ResizeableTitle };
}
let rowSelection = this.props.rowSelection !== undefined ? this.props.rowSelection : this.getSlaveRowSelection(slaveInfoName, 'slaveInfo');
if (slaveInfoConfig && !slaveInfoConfig.bisMutiSelect) { /* 如果子表配置不显示选择框 则不显示选择框 */
rowSelection = null;
}
/* 返回值 */
return {
components,
rowKey: tableProps.rowKey,
size: 'small',
bordered: true, /* 显示边框 */
className: !this.props.enabled ? styles.disabledProup : styles.proup, /* 样式控制 */
scroll: { x: 'max-content' }, /* 宽度 */
dataSource, /* 数据 */
columns: tableColumn, /* 表头 */
rowSelection: rowSelection, /* s 添加的复选框(checkbox)功能 */
pagination: false, /* 不分页 */
rowClassName: this.setRowClassName.bind(this, 'slaveInfo'),
onRow: (record, index) => {
if (this.isDragAndDrop) {
return {
index,
onClick: () => {
this.onRowClick(record, index, undefined, slaveInfoName, 'slaveInfo');
},
onDoubleClick: () => {
this.onDoubleClick(record, index, undefined, slaveInfoName, 'slaveInfo');
},
moveRow: (dragIndex, hoverIndex, dragKey, hoverKey) => {
this.moveRow(dragIndex, hoverIndex, dragKey, hoverKey);
},
onDragClick: (type) => {
this.onRowClick(record, index, type, slaveInfoName, 'slaveInfo');
},
};
} else {
return {
index,
onClick: () => {
this.onRowClick(record, index, undefined, slaveInfoName, 'slaveInfo');
},
onDoubleClick: () => {
this.onDoubleClick(slaveInfoName, record);
},
};
}
},
// footer: this.props.footer === undefined ? this.tableFooter : undefined,
id: commonUtils.isEmptyArr(dataSource) ?
'unDataBox' :
'dataBox', /* 用户修改antd table中自带的样式(我听别人说的要这么弄,你们别骂我) */
...this.props.slaveInfo.tableProps,
onChange: this.onChange,
};
} else { return null; }
};
getTableFilterData = () => {
const { dataSource } = this.state;
const { masterData } = this.props;
let filterData = 0;
const GetFilterData = this.props.OnGetFilterData;
if (GetFilterData !== undefined) {
filterData = this.props.OnGetFilterData(this.props.name, this.props.bFinished);
} else {
filterData = dataSource.length;
}
if (commonUtils.isNotEmptyObject(masterData) && commonUtils.isNotEmptyObject(masterData.sZczlxShowName)) {
if (masterData.sZczlxShowName === '删除' || masterData.sZczlxShowName === '恢复') {
filterData += 1;
}
}
return filterData;
}
/** 获取showConfig */
getShowConfig = (props, sName, isSlaveInfo) => {
/* 返回值声明 */
let showConfig = [];
/* 通过sName过滤出对应的showConfig */
if (props.customConfig) {
const showConfigArr = props.customConfig.filter(item => item.sName === sName && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr[0];
}
} else {
if (props.config) {
const showConfigArr = props.config.gdsconfigformslave.filter(item => item.sName === sName && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr[0];
}
}
if (isSlaveInfo && commonUtils.isNotEmptyObject(this.props.slaveInfo) && commonUtils.isNotEmptyObject(this.props.slaveInfo.config)) {
const showConfigArr = this.props.slaveInfo.config.gdsconfigformslave.filter(item => item.sName === sName && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr[0];
}
}
}
/* 返回值 */
return showConfig;
};
/** 获取颜色Config */
getColorConfig = () => {
let showConfig = [];
/* 通过sName过滤出对应的showConfig */
/* 通过sName过滤出对应的showConfig */
if (this.props.customConfig) {
const showConfigArr = this.props.customConfig.filter(item => commonUtils.isNotEmptyObject(item.sName) && commonUtils.isNotEmptyObject(item.sColorTerms) && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr;
}
} else {
if (this.props.config) {
const showConfigArr = this.props.config.gdsconfigformslave.filter(item => commonUtils.isNotEmptyObject(item.sName) && commonUtils.isNotEmptyObject(item.sColorTerms) && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr;
}
}
if (commonUtils.isNotEmptyObject(this.props.slaveInfo) && commonUtils.isNotEmptyObject(this.props.slaveInfo.config)) {
const showConfigArr = this.props.slaveInfo.config.gdsconfigformslave.filter(item => commonUtils.isNotEmptyObject(item.sName) && commonUtils.isNotEmptyObject(item.sColorTerms) && item.bVisible);
if (commonUtils.isNotEmptyArr(showConfigArr)) {
showConfig = showConfigArr;
}
}
}
/* 返回值 */
return showConfig;
};
rowColorData = React.createRef();
getColorStyle = (record, isRowShow) => {
let styleColorArrTotal = '';
const showConfigArr = this.getColorConfig(); /* 拿到颜色配置json */
if (commonUtils.isNotEmptyArr(showConfigArr) && showConfigArr.length > 0) {
for (const showConfig of showConfigArr) {
let styleColorArr = '';
const colorConditon = commonUtils.isNotEmptyObject(showConfig) ? showConfig.sColorTerms : null;
if (commonUtils.isNotEmptyObject((colorConditon))) {
let colorConditionArr = '';
try {
colorConditionArr = JSON.parse(colorConditon); /* 转化为json */
} catch (e) {
colorConditionArr = '';
}
colorConditionArr = Array.isArray(colorConditionArr) ? colorConditionArr : ''; /* 判断是否是数组 */
for (const item of colorConditionArr) {
let styleColor = '';
const {
column, condition, conditionValue, color, isRow,
} = item;
if (record[column] !== undefined) {
if (color && !document.getElementById(`color${color.replace('#', '-')}`)) {
var style = document.createElement('style');
style.type = 'text/css';
style.id = `color${color.replace('#', '-')}`;
style.innerHTML = `
.color${color.replace('#', '-')} td {
background-color:${color}!important;
.ant-table-selection-column {
background-color:${color}!important;
}
}
`;
document.getElementsByTagName('head')[0].appendChild(style);
}
if (isRow && isRowShow && !commonUtils.isEmpty(record[column]) && commonUtils.isNotEmptyObject(record[column].toString())) { /* 配置行 */
let { conditionValue: conditionValueOld } = item;
const conditionValue = record[conditionValueOld] ? record[conditionValueOld] : conditionValueOld;
if (condition === '=') {
if (commonUtils.isNotEmptyObject(conditionValue) && conditionValue.includes('#')) {
const sXName = conditionValue.replace('#', '').replace('#', '').trim();
if (sXName && commonUtils.isNotEmptyObject(this.props[sXName])) {
const sXValue = this.props[sXName];
styleColor = record[column] === sXValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
}
} else {
styleColor = record[column] === conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
}
} else if (condition === '!=') {
styleColor = record[column] != conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
} else if (condition === 'like') {
if (column.substring(0, 1) === 's') { styleColor = record[column]?.indexOf(conditionValue) > -1 ? `SetRow_${color} color${color.replace('#', '-')}` : ''; }
} else if (condition === '>') {
styleColor = record[column] > conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
} else if (condition === '>=') {
styleColor = record[column] >= conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
} else if (condition === '<') {
styleColor = record[column] < conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
} else if (condition === '<=') {
styleColor = record[column] <= conditionValue ? `SetRow_${color} color${color.replace('#', '-')}` : '';
}
}
}
styleColorArr += styleColor;
const index = this.rowColorData.current?.findIndex(i => i && i.key === record?.[this.rowKey]);
if (styleColor) {
if (Array.isArray(this.rowColorData.current) && index >= 0) {
this.rowColorData.current[index] = { key: record?.[this.rowKey], color };
} else {
this.rowColorData.current = [...this.rowColorData.current || [], { key: record?.[this.rowKey], color }];
}
} else {
if (Array.isArray(this.rowColorData.current) && index >= 0) this.rowColorData.current?.splice(index, 1);
}
}
}
styleColorArrTotal += `${styleColorArr} `;
}
}
return styleColorArrTotal;
}
/** 获取单元格颜色配置 */
getCellColorConfig = (text, record, sName) => {
let styleColorArrTotal = ''; /* 单元格文字颜色 */
let styleColorArrTotalB = ''; /* 单元格背景颜色 */
let styleColorArr = '';
let styleColorArrB = '';
const styleColorArrTotalM = {};
const showConfigArr = this.getColorConfig(); /* 拿到颜色配置json */
if (commonUtils.isNotEmptyArr(showConfigArr) && showConfigArr.length > 0) {
for (const showConfig of showConfigArr) {
const colorConditon = commonUtils.isNotEmptyObject(showConfig) ? showConfig.sColorTerms : null;
if (commonUtils.isNotEmptyObject((colorConditon))) {
let colorConditionArr = '';
try {
colorConditionArr = JSON.parse(colorConditon); /* 转化为json */
} catch (e) {
colorConditionArr = '';
}
colorConditionArr = Array.isArray(colorConditionArr) ? colorConditionArr : '';
for (const item of colorConditionArr) {
let styleColor = '';
// eslint-disable-next-line no-unused-vars
let styleBackground = '';
const {
column, condition, color, background, isRow,
} = item;
if (!isRow) { /* 根据配置设置单元格颜色 */
let { conditionValue: conditionValueOld } = item;
const conditionValue = record[conditionValueOld] ? record[conditionValueOld] : conditionValueOld;
if (column === sName && (column === showConfig.sName || showConfig.sControlName?.startsWith('canOtherConfig'))) { /* 只控制该配置的单元格 */
if (condition === '=') {
styleColor = record[column] === conditionValue ? color : '';
styleBackground = record[column] === conditionValue ? background : '';
} else if (condition === '!=') {
styleColor = record[column] != conditionValue ? color : '';
styleBackground = record[column] !== conditionValue ? background : '';
} else if (condition === 'like') {
if (sName.substring(0, 1) === 's') {
styleColor = record[column]?.indexOf(conditionValue) > -1 ? color : '';
styleBackground = record[column]?.indexOf(conditionValue) > -1 ? background : '';
}
} else if (condition === '!=') {
styleColor = record[column] !== conditionValue ? color : '';
styleBackground = record[column] !== conditionValue ? background : '';
} else if (condition === '>') {
styleColor = record[column] > conditionValue ? color : '';
styleBackground = record[column] > conditionValue ? background : '';
} else if (condition === '>=') {
styleColor = record[column] >= conditionValue ? color : '';
styleBackground = record[column] >= conditionValue ? background : '';
} else if (condition === '<') {
styleColor = record[column] < conditionValue ? color : '';
styleBackground = record[column] < conditionValue ? background : '';
} else if (condition === '<=') {
styleColor = record[column] <= conditionValue ? color : '';
styleBackground = record[column] <= conditionValue ? background : '';
} else if (Array.isArray(condition)) { /* 通过其他列条件控制该字段的颜色显示 */
if (commonUtils.isNotEmptyArr(condition)) {
for (const itemConditon of condition) {
const {
bFilterName, bFilterCondition, color, background,
} = itemConditon;
let { bFilterValue: bFilterValueOld } = itemConditon;
const bFilterValue = record[bFilterValueOld] ? record[bFilterValueOld] : bFilterValueOld;
if (bFilterCondition === '=') {
styleColor = record[bFilterName] === bFilterValue ? color : '';
styleBackground = record[bFilterName] === bFilterValue ? background : '';
} else if (bFilterCondition === 'like') {
if (sName.substring(0, 1) === 's') {
styleColor = record[bFilterName].indexOf(bFilterValue) > -1 ? color : '';
styleBackground = record[bFilterName].indexOf(bFilterValue) > -1 ? background : '';
}
} else if (bFilterCondition === '!=') {
styleColor = record[bFilterName] !== bFilterValue ? color : '';
styleBackground = record[bFilterName] !== bFilterValue ? background : '';
} else if (bFilterCondition === '>') {
styleColor = record[bFilterName] > bFilterValue ? color : '';
styleBackground = record[bFilterName] > bFilterValue ? background : '';
} else if (bFilterCondition === '>=') {
styleColor = record[bFilterName] >= bFilterValue ? color : '';
styleBackground = record[bFilterName] >= bFilterValue ? background : '';
} else if (bFilterCondition === '<') {
styleColor = record[bFilterName] < bFilterValue ? color : '';
styleBackground = record[bFilterName] < bFilterValue ? background : '';
} else if (bFilterCondition === '<=') {
styleColor = record[bFilterName] <= bFilterValue ? color : '';
styleBackground = record[bFilterName] <= bFilterValue ? background : '';
}
}
}
}
}
}
styleColorArr += styleColor;
styleColorArrB += styleBackground;
if (styleColor) {
styleColorArr = styleColor;
}
if (styleBackground) {
styleColorArrB = styleBackground;
}
}
}
styleColorArrTotal = styleColorArr;
styleColorArrTotalB = styleColorArrB;
}
}
const iIndex = showConfigArr.findIndex(item => item.sName === sName);
if (iIndex !== -1) {
const { sColorTerms } = showConfigArr[iIndex];
if (sColorTerms && sColorTerms.startsWith('#')) {
styleColorArrTotal = sColorTerms;
}
}
styleColorArrTotalM.styleColorArrTotal = styleColorArrTotal;
styleColorArrTotalM.styleColorArrTotalB = styleColorArrTotalB;
return styleColorArrTotalM;
};
/**
* 部分字段不可编辑
*/
getSelectRowEditState = (sName, record, enabled) => {
const { config, name, masterData } = this.props;
let result = enabled;
const { sInstruct: sInstructStr } = config;
const sInstruct = commonUtils.convertStrToObj(sInstructStr, {});
const { data = [] } = sInstruct;
const btnConfig = data.find(item => item && item.name === sName && item.enabled !== undefined);
if (btnConfig && enabled) {
const { enabled: enabledContent } = btnConfig;
if (typeof enabledContent === 'boolean') {
result = enabledContent;
} else if (enabledContent) {
const tempData = {
props: {
enabled
},
master: masterData,
[name]: record
};
let strNew = enabledContent;
Object.keys(tempData).forEach(key => {
const reg = new RegExp(`${key}\\.`, "g");
strNew = strNew.replace(reg, `tempData["${key}"].`);
});
try {
const evalStr = eval("`" + strNew + "`");
result = !!eval(evalStr);
// console.log('=====表格行按钮状态结果', result, { sName, enabledContent, tempData, strNew, evalStr });
} catch (error) {
// console.log('=====表格行按钮状态错误', { error, enabledContent, strNew, tempData });
}
}
}
return result;
}
// 获取表格行按钮状态
getTableBtnState = (btnName, record) => {
let result = false;
const { enabled, config, masterData, name, sUseInfo, bLimitOperate } = this.props;
result = enabled;
/* 订单占用,则该行锁定 不能操作 */
const { sWorkOrderUsed } = record;
if (commonUtils.isNotEmptyObject(sWorkOrderUsed)) {
result = false;
}
/* 若红冲单据 则按钮锁定 不能操作 */
if (commonUtils.isNotEmptyObject(masterData) && commonUtils.isNotEmptyObject(masterData.sMinusSrcId) && masterData.sMinusType === '1') {
result = false;
}
if (btnName === 'BtnAdd' && bLimitOperate) {
result = false;
}
const { sInstruct: sInstructStr } = config;
const sInstruct = commonUtils.convertStrToObj(sInstructStr, {});
const { data = [] } = sInstruct;
const btnConfig = data.find(item => item && item.name === btnName && item.enabled !== undefined);
if (btnConfig) {
const { enabled: enabledContent } = btnConfig;
if (typeof enabledContent === 'boolean') {
result = enabledContent;
} else if (enabledContent) {
const tempData = {
props: {
enabled
},
master: masterData,
[name]: record
};
let strNew = enabledContent;
Object.keys(tempData).forEach(key => {
const reg = new RegExp(`${key}\\.`, "g");
strNew = strNew.replace(reg, `tempData["${key}"].`);
});
try {
const evalStr = eval("`" + strNew + "`");
result = !!eval(evalStr);
// console.log('=====表格行按钮状态结果', result, { btnName, enabledContent, tempData, strNew, evalStr });
} catch (error) {
console.log('=====表格行按钮状态错误', { error, enabledContent, strNew, tempData });
}
}
}
return result;
}
bCheckBoxColumm = (column) => {
const { gdsconfigformslave } = this.props.config || {};
const item = gdsconfigformslave?.find(i => i && i.sName === column?.dataIndex && i.bVisible);
if (item?.sControlName?.startsWith('bCheckBox')) {
const checked = !!this.state.dataSource.length && !this.state.dataSource?.find(i => !i || !i[column?.dataIndex]);
return <>
{
const { handleCheckBoxStatus } = this.props;
typeof handleCheckBoxStatus === 'function' && handleCheckBoxStatus(e.target.checked, column?.dataIndex, this.props.name)
}}
/>
{column?.title}
>
}
}
/** 获取table的表头信息(主要是table中的表头信息合并,[{title:1-1},{title:1-2}]变成[{title:1,children:[{title:1},{title:2}]}]) type:是否过滤 */
getTableColumn = (headerColumn, type, props) => {
// this.hasMergeHeader = false;
// 判断是否是表单详情
const isSlaveInfo = props.name === 'slaveInfo' ||
(
location.pathname === '/indexPage/commonCostomTabBill' &&
props.name &&
props.name.includes('Info') &&
commonUtils.isNotEmptyObject(this.props.slaveInfo)
);
const config = isSlaveInfo ? this.props.slaveInfo.config : this.props.config;
const isSlaveInfoM = isSlaveInfo && commonUtils.isNotEmptyObject(config) ? config.showName === '工单物资评审' : false;
/* 返回值声明 */
const tableColumn = [];
let iIndex = 0;
const specialRoute = commonUtils.isNotEmptyObject(this.props.app.currentPane) ? this.props.app.currentPane.route : ''; /* 获取路由名称 */
/* 遍历每一个表头标题 */
for (const column of headerColumn) {
/* 表头标题 */
const title = column.title;
const width = column.width;
const bNotEmpty = column.bNotEmpty;
/* 带'-'的表头是需要合并滴 */
const index = commonUtils.isNotEmptyObject(title) ? title.indexOf('-') : -1;
/* 合并走合并的,不合并就直接push */
let columnNew = {};
let sorter;
let search = true;
if (props.tableProps !== undefined && props.tableProps.rowKey !== undefined && props.tableProps.rowKey !== 'sId' && !props.tableProps.sortSelf) {
sorter = true;
} else {
const firstDataIndex = column.dataIndex.substring(0, 1);
if (firstDataIndex === 'd' || firstDataIndex === 'i') {
sorter = (a, b) => ((commonUtils.isEmpty(a[column.dataIndex]) ? 0 : a[column.dataIndex]) - (commonUtils.isEmpty(b[column.dataIndex]) ? 0 : b[column.dataIndex]));
} else if (firstDataIndex === 't') {
sorter = (a, b) => (moment(commonUtils.isEmpty(a[column.dataIndex]) ? '2000-01-01' : a[column.dataIndex]).diff(moment(commonUtils.isEmpty(b[column.dataIndex]) ? '2000-01-01' : b[column.dataIndex])));
} else {
sorter = (a, b) => ((commonUtils.isEmpty(a[column.dataIndex]) ? '0' : a[column.dataIndex]).localeCompare((commonUtils.isEmpty(b[column.dataIndex]) ? '1' : b[column.dataIndex])));
}
}
/* 工单、工艺卡、报价单 去掉排序 */
if (this.props.name === 'sParam' || specialRoute.includes('workOrder') || specialRoute.includes('processCard') || specialRoute.includes('quotation')) {
sorter = false;
}
/* 默认字段是排序的 通过配置bNotSort来设置字段不排序 */
if (config && commonUtils.isNotEmptyStr(config.gdsconfigformslave.filter(item => item.sName === column.dataIndex))) {
if (config.gdsconfigformslave.filter(item => item.sName === column.dataIndex).length > 0 && config.gdsconfigformslave.filter(item => item.sName === column.dataIndex)[0].bNotSort) {
sorter = false;
}
}
if (config && commonUtils.isNotEmptyStr(config.gdsconfigformslave.filter(item => item.sName === column.dataIndex))) {
if (config.gdsconfigformslave.filter(item => item.sName === column.dataIndex)[0].bNotSearch) {
search = false;
}
}
if (column.dataIndex === "spicture" || column.dataIndex === "tableLastEmpty") {
sorter = false;
}
let sTitleBgColor = commonUtils.isNotEmptyObject(column.sTitleBgColor) ? column.sTitleBgColor : ''; /* 标题背景颜色 */
let sTitleColor = commonUtils.isNotEmptyObject(column.sTitleColor) ? column.sTitleColor : ''; /* 标题字体颜色 */
const styleObj = {};
if (commonUtils.isNotEmptyObject(sTitleBgColor)) {
styleObj.background = sTitleBgColor;
}
if (commonUtils.isNotEmptyObject(sTitleColor)) {
styleObj.color = sTitleColor;
}
const renderTitle = () => {
// 树形表格在第一个column上加上全部展开/收起功能
let expandedAllIcon = '';
const columnIndex = headerColumn.findIndex(item => column.title === item.title);
let { data } = this.props;
let { expKeys } = this.state;
expKeys = commonUtils.isNotEmptyArr(expKeys) ? expKeys : [];
expKeys = this.currentExpKeys || expKeys;
data = commonUtils.isNotEmptyArr(data) ? data : [];
const childrenList = [];
const getChildrenList = (data) => {
data.forEach(item => {
if (item && typeof item.children === 'object') {
childrenList.push(item);
getChildrenList(item.children);
}
});
}
getChildrenList(data);
if (columnIndex === 0 && childrenList.length) { // 第一个column并且数据中有children
this.showExpAll = true;
this.tableCollapsed = !expKeys.length;
const marginLeft = this.props.bMutiSelect ? '6px' : '2px';
expandedAllIcon = (
,
{
const checkedObj = commonFileDownloadList.filter(item => item.checked);
if (commonUtils.isNotEmptyArrNew(checkedObj)) {
const fileUrl = checkedObj.map(item => item.url).toString();
this.handleFileDownload(fileUrl);
}
}
}>下载选中,
关闭,
]}
>
{
commonFileDownloadList.map(item => {
const { url, checked } = item;
const fileName = url.split('/').pop().split('_').pop();
const fileType = fileName.split('.').pop().toLowerCase();
const previewFileList = ['jpg', 'png', 'jepg', 'webp', 'svg', 'bmp', 'apng', 'pdf'];
return (
)
})
}
: ''
}
{
pdfFileVisible ?
{
this.setState({
pdfFileVisible: false
});
}}
>
: ''
}
{
bOperateMoreVisible ?
{
this.setState({
bOperateMoreVisible: false
});
}}
>
: ''
}
{officePreviewVisible && }
{/* 简单对话框 */}
{this.state.simpleModalVisible && this.setState({ simpleModalVisible: false, simpleModalWord: '' })}
>
}
);
}
}
const CommonTable = (props) => {
const { name, data = [] } = props;
const [headerColumn, setHeaderColumn] = useState([]);
const addState = {};
if (name !== 'master') {
const config = props.onMergeSlaveConfig && props.onMergeSlaveConfig(props.config);
if (commonUtils.isNotEmptyObject(config)) {
addState.config = config;
addState.headerColumn = commonFunc.getHeaderConfig(addState.config).map(i => {
const value = Array.isArray(headerColumn) && headerColumn.find(j => j && j.dataIndex === i.dataIndex);
value && (i.width = value.width);
return i;
});
}
}
// 增加行号iRowNum
const [updateRowNumTime, setUpdateRowNumTime] = useState(0);
addState.updateRowNumTime = updateRowNumTime;
useEffect(() => {
handleSetIRowNum(data, props);
setUpdateRowNumTime(pre => pre + 1);
}, [JSON.stringify(data)]);
if (props.defaultExpandAllRows !== undefined && props.data === undefined) {
return '';
}
const handleMoveLine = ({ index, direction }) => {
if (direction === "up" && index === 0) {
message.error("当前已是首行,无法上移!");
return;
} else if (direction === "down" && index === data.length - 1) {
message.error("当前已是末行,无法下移!");
return;
}
const indexNew = direction === "up" ? index - 1 : index + 1;
const iOrder1 = data[index].iOrder;
const iOrder2 = data[indexNew].iOrder;
data[index].iOrder = iOrder2;
data[indexNew].iOrder = iOrder1;
const tempItem = data[index];
data[index] = { ...data[indexNew], handleType: data[indexNew].handleType || "update" };
data[indexNew] = { ...tempItem, handleType: tempItem.handleType || "update" };
props.onSaveState({
[`${props.name}Data`]: data
});
};
addState.onMoveLine = handleMoveLine;
if (sessionStorage.getItem(`${props.formId}_${props.config?.sId}_tableHeight`)) {
addState.fixedHeight = Number(sessionStorage.getItem(`${props.formId}_${props.config.sId}_tableHeight`));
if (props.tableProps?.AutoTableHeight) {
delete props.tableProps.AutoTableHeight;
}
}
const setTempFixedHeight = (height) => {
sessionStorage.setItem(`${props.formId}_${props.config.sId}_tableHeight`, height);
window.vlistNewSearh = true;
setUpdateRowNumTime(pre => pre + 1);
}
const uniqueTableId = `table_${props.formId}_${props.config?.sId}`;
addState.xlyTableMax = props.app?.currentPane?.route === "/indexPage/commonList" && localStorage.getItem(`${commonConfig.prefix}TableMax`);
return (
);
};
const handleSetIRowNum = (data, props) => {
data.forEach((item, index) => {
item.iRowNum = index + 1;
if (['12710101117007068710620'].includes(props?.app?.currentPane?.formId)) {
item.sVersionNum = item.iRowNum.toString().padStart(2, 0);
}
// 排除成品盘点、材料盘点(数据太多,循环页面卡死)
if (props.name === 'slaveChild' && !['192116810113315264733417750', '192116810113315228128521360'].includes(props?.app?.currentPane?.formId)) {
/* 序号根据sSqlConditonId分组 序号重排 */
const groupedData = commonUtils.groupBy(data, item => item.sSqlConditionId);
if (commonUtils.isNotEmptyObject(groupedData)) {
for (const key of Object.keys(groupedData)) {
const eachData = groupedData[key];
if (commonUtils.isNotEmptyArr(eachData)) {
eachData.forEach((item, index) => {
/* 采购 */
item.iRowNum = index + 1;
const iIndex = data.findIndex(row => row.sId === item.sId);
if (iIndex > -1) {
data[iIndex] = { ...data[iIndex], iRowNum: index + 1 }
}
});
}
}
}
}
if (location.pathname !== '/indexPage/commonClassify') {
if (commonUtils.isNotEmptyArr(item.children)) {
handleSetIRowNum(item.children, props);
}
}
});
}
const MoveLineComponent = (props) => {
if (!location.pathname.includes('commonSubBill')) {
return "";
}
const [position, setPosition] = useState({ bottom: 0 });
const positionRef = useRef(position);
positionRef.current = position;
const divProps = {
className: styles.moveLine,
style: position,
onMouseDown: e => {
const initialBottom = position.bottom;
const initialY = e.clientY;
const moveHandler = (moveEvent) => {
const newY = moveEvent.clientY;
const newBottom = initialBottom - (newY - initialY);
setPosition({ bottom: newBottom });
};
const upHandler = () => {
const preHeight = document.querySelector(`#${props.uniqueTableId}`).querySelector('.ant-table-body').getBoundingClientRect().height;
props.setTempFixedHeight(Math.max(preHeight - positionRef.current.bottom, 37));
setPosition({ bottom: 0 });
document.body.onselectstart = () => true;
document.removeEventListener('mousemove', moveHandler);
document.removeEventListener('mouseup', upHandler);
};
document.body.onselectstart = () => false;
document.addEventListener('mousemove', moveHandler);
document.addEventListener('mouseup', upHandler);
}
};
return ;
}
export default CommonTable;