diff --git a/src/pages/calcTable/index.tsx b/src/pages/calcTable/index.tsx index f1b3618..d244209 100644 --- a/src/pages/calcTable/index.tsx +++ b/src/pages/calcTable/index.tsx @@ -32,7 +32,7 @@ interface EditableCellProps { record?: any; pattern?: number; rowIndex?: number; - handleSave?: (record: any) => void; + handleSave?: (type: string, record: any) => void; } type Props = OwnProps; @@ -106,16 +106,31 @@ const Index: FunctionComponent = (props) => { } }); }; - const handleSave = (row: any) => { + const handleSave = (salaryItemId: string, row: any) => { setDataSource(prevState => { const newData = [...prevState]; const index = newData.findIndex(item => row.id === item.id); const item = newData[index]; - if (!_.isEmpty(getDifferentValues(item, row))) { - if (editItemList.current.findIndex(g => !_.isEmpty(g[_.keys(getDifferentValues(item, row))[0]]) && g.id === row.id) !== -1) { - editItemList.current.splice(editItemList.current.findIndex(g => !_.isEmpty(g[_.keys(getDifferentValues(item, row))[0]])), 1); - } - editItemList.current.push({ id: row.id, ...getDifferentValues(item, row) }); + if (_.map(editItemList.current, t => t.id).includes(row.id)) { + editItemList.current = _.reduce(editItemList.current, (pre: any, cur: any) => { + if (cur.id === row.id) { + return [...pre, { + id: row.id, items: _.map(cur.items, h => h.salaryItemId).includes(salaryItemId) ? + _.map(cur.items, k => { + if (k.salaryItemId === salaryItemId) { + return { ...k, salaryItemId, resultValue: row[salaryItemId] }; + } + return { ...k }; + }) + : [...cur.items, { salaryItemId, resultValue: row[salaryItemId] }] + }]; + } + return [...pre, cur]; + }, []); + } else { + editItemList.current.push({ + id: row.id, items: [{ salaryItemId, resultValue: row[salaryItemId] }] + }); } window.parent.postMessage( { @@ -128,20 +143,6 @@ const Index: FunctionComponent = (props) => { return newData; }); }; - const getDifferentValues = (obj1: any, obj2: any) => { - const differentProperties = {}; - for (const key in obj1) { - if (obj1.hasOwnProperty(key) && obj2.hasOwnProperty(key)) { - if (obj1[key] !== obj2[key]) { - differentProperties[key] = { - obj1Value: obj1[key], - obj2Value: obj2[key] - }; - } - } - } - return differentProperties; - }; const handleChange = (rowIndex: any, dataIndex: any, v: any, dataSource: any[]) => { setDataSource(() => { @@ -261,11 +262,11 @@ const EditableCell: React.FC = (props) => { [_.keys(values)[0]]: !_.isNil(_.get(values, _.keys(values)[0])) ? toDecimal_n(_.get(values, _.keys(values)[0]), restProps?.pattern) : toDecimal_n(0, restProps?.pattern) }; } - handleSave?.({ ...record, ...values }); + handleSave?.(_.keys(values)[0], { ...record, ...values }); } catch (errInfo) { console.log("Save failed:", errInfo); } - }, 500); + }, 200); let childNode = children; if (editable) { childNode = editing ? (