From 7e19d55926fb168c972c17ec3ca437c78ab6112b Mon Sep 17 00:00:00 2001 From: KharchenkoVV Date: Thu, 29 Jul 2021 17:17:28 +0500 Subject: [PATCH] CF2-40: Added dynamic changing of 'Last Data' tables cells --- src/components/CementFluid.jsx | 538 ++++++++++++++++++++----------- src/components/Nnb.jsx | 372 ++++++++++++++------- src/components/SludgeDiagram.jsx | 524 +++++++++++++++++++----------- src/pages/LastData.jsx | 30 +- src/pages/Well.jsx | 1 + src/styles/App.less | 13 + 6 files changed, 992 insertions(+), 486 deletions(-) diff --git a/src/components/CementFluid.jsx b/src/components/CementFluid.jsx index 55cd1d2..bd3e5fe 100644 --- a/src/components/CementFluid.jsx +++ b/src/components/CementFluid.jsx @@ -1,178 +1,7 @@ -import {Table} from 'antd' +import { useState } from 'react'; +import {Table, Input, Form, Popconfirm, Typography } from 'antd' -const columns = [ - { - title: Наименование, - key: 'name', - dataIndex: 'name', - align: 'center', - render: (item) => {item} - }, - { - title: Температура, °C, - key: 'temperature', - dataIndex: 'temperature', - align: 'center' - }, - { - title: Плотность, г/см³, - key: 'density', - dataIndex: 'density', - align: 'center' - }, - { - title: Усл. вязкость, сек, - key: 'conditionalViscosity', - dataIndex: 'conditionalViscosity', - align: 'center' - }, - { - title: R300, - key: 'r300', - dataIndex: 'R300', - align: 'center' - }, - { - title: R600, - key: 'r600', - dataIndex: 'R600', - align: 'center' - }, - { - title: R3/R6, - key: 'r3r6', - dataIndex: 'r3/R6', - align: 'center' - }, - { - title: ДНС, дПа, - key: 'dnsDpa', - dataIndex: 'dnsDpa', - align: 'center' - }, - { - title: Пластич. вязкость, сПз, - key: 'plasticViscocity', - dataIndex: 'plasticViscocity', - align: 'center' - }, - { - title: СНС, дПа, - key: 'snsDpa', - dataIndex: 'snsDpa', - align: 'center' - }, - { - title: R3/R6 49С, - key: 'r3r649С', - dataIndex: 'r3/R649С', - align: 'center' - }, - { - title: ДНС 49С, дПа, - key: 'dns49Cdpa', - dataIndex: 'dns49Cdpa', - align: 'center' - }, - { - title: Пластич. вязкость 49С, сПз, - key: 'plasticViscocity49c', - dataIndex: 'plasticViscocity49c', - align: 'center' - }, - { - title: СНС 49С, дПа, - key: 'sns49Cdpa', - dataIndex: 'sns49Cdpa', - align: 'center' - }, - { - title: МВТ, кг/м³, - key: 'mbt', - dataIndex: 'mbt', - align: 'center' - }, - { - title: Песок, %, - key: 'sand', - dataIndex: 'sand', - align: 'center' - }, - { - title: Фильтрация, см³/30мин, - key: 'filter', - dataIndex: 'filter', - align: 'center' - }, - { - title: Корка, мм, - key: 'crust', - dataIndex: 'crust', - align: 'center' - }, - { - title: КТК, - key: 'ktk', - dataIndex: 'ktk', - align: 'center' - }, - { - title: pH, - key: 'ph', - dataIndex: 'ph', - align: 'center' - }, - { - title: Жесткость, мг/л, - key: 'hardness', - dataIndex: 'hardness', - align: 'center' - }, - { - title: Хлориды, мг/л, - key: 'chlorides', - dataIndex: 'chlorides', - align: 'center' - }, - { - title: Pf, - key: 'pf', - dataIndex: 'pf', - align: 'center' - }, - { - title: Mf, - key: 'mf', - dataIndex: 'mf', - align: 'center' - }, - { - title: Pm, - key: 'pm', - dataIndex: 'pm', - align: 'center' - }, - { - title: Твердая фаза раствора, %, - key: 'fluidSolidPhase', - dataIndex: 'fluidSolidPhase', - align: 'center' - }, - { - title: Смазка, %, - key: 'grease', - dataIndex: 'grease', - align: 'center' - }, - { - title: Карбонат кальция, кг/м³, - key: 'calciumCarbonate', - dataIndex: 'calciumCarbonate', - align: 'center' - } -]; - -const data = [ +const originData = [ { key: '1', name: 'План', temperature: '', density: '', conditionalViscosity: '', r300: '', r600: '', r3r6: '', dnsDpa: '', plasticViscocity: '', snsDpa: '', r3r649С: '', dns49Cdpa: '', plasticViscocity49c: '', sns49Cdpa: '', mbt: '', sand: '', filter: '', crust: '', ktk: '', ph: '', @@ -185,17 +14,366 @@ const data = [ } ]; +const EditableCell = ({ + editing, + dataIndex, + title, + inputType, + record, + index, + children, + ...restProps +}) => { + return ( + +
+ {editing ? ( + + + + ) : ( + children + )} +
+ + ); +}; + + export function CementFluid() { + const [form] = Form.useForm(); + const [data, setData] = useState(originData); + const [editingKey, setEditingKey] = useState(''); + + const isEditing = (row) => row.key === editingKey; + + const columns = [ + { + title: 'Наименование', + key: 'name', + dataIndex: 'name', + align: 'center', + className: 'small-font' + }, + { + title: 'Температура, °C', + key: 'temperature', + dataIndex: 'temperature', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Плотность, г/см³', + key: 'density', + dataIndex: 'density', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Усл. вязкость, сек', + key: 'conditionalViscosity', + dataIndex: 'conditionalViscosity', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'R300', + key: 'r300', + dataIndex: 'R300', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'R600', + key: 'r600', + dataIndex: 'R600', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'R3/R6', + key: 'r3r6', + dataIndex: 'r3/R6', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'ДНС, дПа', + key: 'dnsDpa', + dataIndex: 'dnsDpa', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Пластич. вязкость, сПз', + key: 'plasticViscocity', + dataIndex: 'plasticViscocity', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'СНС, дПа', + key: 'snsDpa', + dataIndex: 'snsDpa', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'R3/R6 49С', + key: 'r3r649С', + dataIndex: 'r3/R649С', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'ДНС 49С, дПа', + key: 'dns49Cdpa', + dataIndex: 'dns49Cdpa', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Пластич. вязкость 49С, сПз', + key: 'plasticViscocity49c', + dataIndex: 'plasticViscocity49c', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'СНС 49С, дПа', + key: 'sns49Cdpa', + dataIndex: 'sns49Cdpa', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'МВТ, кг/м³', + key: 'mbt', + dataIndex: 'mbt', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Песок, %', + key: 'sand', + dataIndex: 'sand', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Фильтрация, см³/30мин', + key: 'filter', + dataIndex: 'filter', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Корка, мм', + key: 'crust', + dataIndex: 'crust', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'КТК', + key: 'ktk', + dataIndex: 'ktk', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: pH, + key: 'ph', + dataIndex: 'ph', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Жесткость, мг/л', + key: 'hardness', + dataIndex: 'hardness', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Хлориды, мг/л', + key: 'chlorides', + dataIndex: 'chlorides', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: Pf, + key: 'pf', + dataIndex: 'pf', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: Mf, + key: 'mf', + dataIndex: 'mf', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: Pm, + key: 'pm', + dataIndex: 'pm', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Твердая фаза раствора, %', + key: 'fluidSolidPhase', + dataIndex: 'fluidSolidPhase', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Смазка, %', + key: 'grease', + dataIndex: 'grease', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Карбонат кальция, кг/м³', + key: 'calciumCarbonate', + dataIndex: 'calciumCarbonate', + align: 'center', + className: 'small-font', + editable: true + }, + { + title: 'Действие', + dataIndex: 'action', + align: 'center', + width: 150, + className: 'small-font', + render: (_, row) => { + const editable = isEditing(row); + return editable ? ( + + save(row.key)} + style={{ marginRight: 8 }} + > + Сохранить + + Отменить
редактирование?
} onConfirm={cancel}> + Отменить + + + ) : ( + edit(row)}> + Редактировать + + ); + }, + } + ]; + + const mergedColumns = columns.map((col) => { + if (!col.editable) { + return col; + } + + return { + ...col, + onCell: (row) => ({ + row, + dataIndex: col.dataIndex, + title: col.title, + editing: isEditing(row), + }), + }; + }); + + const edit = (row) => { + form.setFieldsValue({ + ...row, + }); + setEditingKey(row.key); + }; + + const cancel = () => { + setEditingKey(''); + }; + + const save = async (key) => { + try { + const row = await form.validateFields(); + const newData = [...data]; + const index = newData.findIndex((item) => key === item.key); + + if (index > -1) { + const item = newData[index]; + newData.splice(index, 1, { ...item, ...row }); + setData(newData); + setEditingKey(''); + } else { + newData.push(row); + setData(newData); + setEditingKey(''); + } + } catch (errInfo) { + console.log('Validate Failed:', errInfo); + } + }; + return (<> - +
-
 
-

{new Date().toLocaleDateString()}

- + /> + + ) } \ No newline at end of file diff --git a/src/components/Nnb.jsx b/src/components/Nnb.jsx index 6dbd2d1..d2c36f0 100644 --- a/src/components/Nnb.jsx +++ b/src/components/Nnb.jsx @@ -1,122 +1,268 @@ -import {Table} from 'antd' +import { useState } from 'react'; +import {Table, Input, Form, Popconfirm, Typography } from 'antd' -const columns = [ +const originData = [ { - title: 'Глубина по стволу, м', - key: 'depth', - dataIndex: 'depth', - align: 'center', - }, - { - title: 'Зенитный угол, град', - key: 'zenithAngle', - dataIndex: 'zenithAngle', - align: 'center' - }, - { - title: 'Азимут магнитный, град', - key: 'magneticAzimuth', - dataIndex: 'magneticAzimuth', - align: 'center' - }, - { - title: 'Азимут истинный, град', - key: 'trueAzimuth', - dataIndex: 'trueAzimuth', - align: 'center' - }, - { - title: 'Азимут дирекц., град', - key: 'directAzimuth', - dataIndex: 'directAzimuth', - align: 'center' - }, - { - title: 'Глубина по вертикали, м', - key: 'verticalDepth', - dataIndex: 'verticalDepth', - align: 'center' - }, - { - title: 'Абсолютная отметка, м', - key: 'absoluteMark', - dataIndex: 'absoluteMark', - align: 'center' - }, - { - title: 'Лок. смещение к северу, м', - key: 'localNorthOffset', - dataIndex: 'localNorthOffset', - align: 'center' - }, - { - title: 'Лок. смещение к востоку, м', - key: 'localEastOffset', - dataIndex: 'localEastOffset', - align: 'center' - }, - { - title: 'Отклонение от устья, м', - key: 'outFallOffset', - dataIndex: 'outFallOffset', - align: 'center' - }, - { - title: 'Азимут смещения, град', - key: 'offsetAzimuth', - dataIndex: 'offsetAzimuth', - align: 'center' - }, - { - title: 'Пространст. интенсивность, град/10 м', - key: 'areaIntensity', - dataIndex: 'areaIntensity', - align: 'center' - }, - { - title: 'Угол установки отклон., град', - key: 'offsetStopAngle', - dataIndex: 'offsetStopAngle', - align: 'center' - }, - { - title: 'Интенсив. по зениту, град/10 м', - key: 'zenithIntensity', - dataIndex: 'zenithIntensity', - align: 'center' - }, - { - title: 'Комментарий', - key: 'comment', - dataIndex: 'comment', - align: 'center' - }, - { - title: 'Разница вертикальных глубин между ХХХ (план) и ХХХ (факт)', - key: 'depthPlanFactDifference', - dataIndex: 'depthPlanFactDifference', - align: 'center' - }, - { - title: 'Расстояние в пространстве между ХХХ (план) и ХХХ (факт)', - key: 'distancePlanFactDifference', - dataIndex: 'distancePlanFactDifference', - align: 'center' + key: '1', depth: '', zenithAngle: '', magneticAzimuth: '', trueAzimuth: '', directAzimuth: '', verticalDepth: '', absoluteMark: '', localNorthOffset: '', + localEastOffset: '', outFallOffset: '', offsetAzimuth: '', areaIntensity: '', offsetStopAngle: '', zenithIntensity: '', comment: '', depthPlanFactDifference: '', + distancePlanFactDifference: '' } -]; +] -const data = [] +const EditableCell = ({ + editing, + dataIndex, + title, + inputType, + record, + index, + children, + ...restProps +}) => { + return ( + + ); +}; export function Nnb() { + const [form] = Form.useForm(); + const [data, setData] = useState(originData); + const [editingKey, setEditingKey] = useState(''); + + const isEditing = (row) => row.key === editingKey; + + const columns = [ + { + title: 'Глубина по стволу, м', + key: 'depth', + dataIndex: 'depth', + align: 'center', + editable: true + }, + { + title: 'Зенитный угол, град', + key: 'zenithAngle', + dataIndex: 'zenithAngle', + align: 'center', + editable: true + }, + { + title: 'Азимут магнитный, град', + key: 'magneticAzimuth', + dataIndex: 'magneticAzimuth', + align: 'center', + editable: true + }, + { + title: 'Азимут истинный, град', + key: 'trueAzimuth', + dataIndex: 'trueAzimuth', + align: 'center', + editable: true + }, + { + title: 'Азимут дирекц., град', + key: 'directAzimuth', + dataIndex: 'directAzimuth', + align: 'center', + editable: true + }, + { + title: 'Глубина по вертикали, м', + key: 'verticalDepth', + dataIndex: 'verticalDepth', + align: 'center', + editable: true + }, + { + title: 'Абсолютная отметка, м', + key: 'absoluteMark', + dataIndex: 'absoluteMark', + align: 'center', + editable: true + }, + { + title: 'Лок. смещение к северу, м', + key: 'localNorthOffset', + dataIndex: 'localNorthOffset', + align: 'center', + editable: true + }, + { + title: 'Лок. смещение к востоку, м', + key: 'localEastOffset', + dataIndex: 'localEastOffset', + align: 'center', + editable: true + }, + { + title: 'Отклонение от устья, м', + key: 'outFallOffset', + dataIndex: 'outFallOffset', + align: 'center', + editable: true + }, + { + title: 'Азимут смещения, град', + key: 'offsetAzimuth', + dataIndex: 'offsetAzimuth', + align: 'center', + editable: true + }, + { + title: 'Пространст. интенсивность, град/10 м', + key: 'areaIntensity', + dataIndex: 'areaIntensity', + align: 'center', + editable: true + }, + { + title: 'Угол установки отклон., град', + key: 'offsetStopAngle', + dataIndex: 'offsetStopAngle', + align: 'center', + editable: true + }, + { + title: 'Интенсив. по зениту, град/10 м', + key: 'zenithIntensity', + dataIndex: 'zenithIntensity', + align: 'center', + editable: true + }, + { + title: 'Комментарий', + key: 'comment', + dataIndex: 'comment', + align: 'center', + editable: true + }, + { + title: 'Разница вертикальных глубин между ХХХ (план) и ХХХ (факт)', + key: 'depthPlanFactDifference', + dataIndex: 'depthPlanFactDifference', + align: 'center', + editable: true + }, + { + title: 'Расстояние в пространстве между ХХХ (план) и ХХХ (факт)', + key: 'distancePlanFactDifference', + dataIndex: 'distancePlanFactDifference', + align: 'center', + editable: true + }, + { + title: 'Действие', + dataIndex: 'action', + align: 'center', + width: 150, + className: 'small-font', + render: (_, row) => { + const editable = isEditing(row); + return editable ? ( + + save(row.key)} + style={{ marginRight: 8 }} + > + Сохранить + + Отменить
редактирование?
} onConfirm={cancel}> + Отменить + + + ) : ( + edit(row)}> + Редактировать + + ); + }, + } + ]; + + const mergedColumns = columns.map((col) => { + if (!col.editable) { + return col; + } + + return { + ...col, + onCell: (row) => ({ + row, + dataIndex: col.dataIndex, + title: col.title, + editing: isEditing(row), + }), + }; + }); + + const edit = (row) => { + form.setFieldsValue({ + ...row, + }); + setEditingKey(row.key); + }; + + const cancel = () => { + setEditingKey(''); + }; + + const save = async (key) => { + try { + const row = await form.validateFields(); + const newData = [...data]; + const index = newData.findIndex((item) => key === item.key); + + if (index > -1) { + const item = newData[index]; + newData.splice(index, 1, { ...item, ...row }); + setData(newData); + setEditingKey(''); + } else { + newData.push(row); + setData(newData); + setEditingKey(''); + } + } catch (errInfo) { + console.log('Validate Failed:', errInfo); + } + }; + return (<> -
+
+ {editing ? ( + + + + ) : ( + children + )} +
+
-
 
-

{new Date().toLocaleString()}

+ +
+ ) } \ No newline at end of file diff --git a/src/components/SludgeDiagram.jsx b/src/components/SludgeDiagram.jsx index 6e99175..70e0c1c 100644 --- a/src/components/SludgeDiagram.jsx +++ b/src/components/SludgeDiagram.jsx @@ -1,194 +1,350 @@ -import {Table} from 'antd' +import { useState } from 'react'; +import {Table, Input, Form, Popconfirm, Typography } from 'antd' -const columns = [ +const originData = [ { - title: 'N пробы', - key: 'probeNumber', - dataIndex: 'probeNumber', - align: 'center', - className: 'yellow-background' - }, - { - title: 'Глубина отбора пробы', - key: 'probeExtractionDepth', - dataIndex: 'probeExtractionDepth', - align: 'center', - className: 'yellow-background' - }, - { - title: 'Литология', - key: 'lithology', - dataIndex: 'lithology', - align: 'center', - className: 'yellow-background', - children: [ - { - title: 'Песчаник (%)', - key: 'sandstone', - dataIndex: 'sandstone', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Алевролит (%)', - key: 'siltstone', - dataIndex: 'siltstone', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Аргиллит (%)', - key: 'argillit', - dataIndex: 'argillit', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Аргиллит бит. (%)', - key: 'brokenArgillit', - dataIndex: 'verticalDepth', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Уголь (%)', - key: 'coal', - dataIndex: 'coal', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Песок (%)', - key: 'sand', - dataIndex: 'sand', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Глина (%)', - key: 'clay', - dataIndex: 'clay', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Известняк (%)', - key: 'camstone', - dataIndex: 'camstone', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'Цемент (%)', - key: 'cement', - dataIndex: 'cement', - align: 'center', - className: 'lightpurple-background' - } - ] - }, - - { - title: 'Краткое описание', - key: 'summary', - dataIndex: 'summary', - align: 'center', - className: 'yellow-background' - }, - { - title: 'ЛБА бурового раствора', - key: 'drillingMud', - dataIndex: 'drillingMud', - align: 'center', - className: 'lightgray-background' - }, - { - title: 'ЛБА (шлама)', - key: 'sludge', - dataIndex: 'sludge', - align: 'center', - className: 'lightorange-background' - }, - { - title: 'Газопоказания', - key: 'gasIndications', - dataIndex: 'gasIndications', - align: 'center', - className: 'yellow-background', - children: [ - { - title: 'Сумма УВ мах. (абс%)', - key: 'maxSum', - dataIndex: 'maxSum', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'С1 метан (отн%)', - key: 'methane', - dataIndex: 'depthPlanFactDifference', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'С2 этан (отн%)', - key: 'ethan', - dataIndex: 'ethan', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'С3 пропан (отн%)', - key: 'propane', - dataIndex: 'propane', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'С4 бутан (отн%)', - key: 'butane', - dataIndex: 'butane', - align: 'center', - className: 'lightpurple-background' - }, - { - title: 'С5 пентан (отн%)', - key: 'pentane', - dataIndex: 'pentane', - align: 'center', - className: 'lightpurple-background' - } - ] - }, - { - title: 'Мех. скорость', - key: 'mechanicalSpeed', - dataIndex: 'mechanicalSpeed', - align: 'center', - className: 'yellow-background' - }, - { - title: 'Предварительное заключение о насыщении по ГК', - key: 'preliminaryConclusion', - dataIndex: 'preliminaryConclusion', - align: 'center', - className: 'lightorange-background' + key: '1', probeNumber: '', probeExtractionDepth: '', sandstone: '', siltstone: '', argillit: '', brokenArgillit: '', coal: '', sand: '', clay: '', + camstone: '', cement: '', summary: '', drillingMud: '', sludge: '', sludge: '', maxSum: '', methan: '', ethan: '', propan: '', butan: '', pentan: '' } -]; +] -const data = [] +const EditableCell = ({ + editing, + dataIndex, + title, + inputType, + record, + index, + children, + ...restProps +}) => { + return ( + + ); +}; export function SludgeDiagram() { + const [form] = Form.useForm(); + const [data, setData] = useState(originData); + const [editingKey, setEditingKey] = useState(''); + + const isEditing = (row) => row.key === editingKey; + + const columns = [ + { + title: 'N пробы', + key: 'probeNumber', + dataIndex: 'probeNumber', + align: 'center', + className: 'yellow-background', + editable: true + }, + { + title: 'Глубина отбора пробы', + key: 'probeExtractionDepth', + dataIndex: 'probeExtractionDepth', + align: 'center', + className: 'yellow-background', + editable: true + }, + { + title: 'Литология', + key: 'lithology', + dataIndex: 'lithology', + align: 'center', + className: 'yellow-background', + editable: true, + children: [ + { + title: 'Песчаник (%)', + key: 'sandstone', + dataIndex: 'sandstone', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Алевролит (%)', + key: 'siltstone', + dataIndex: 'siltstone', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Аргиллит (%)', + key: 'argillit', + dataIndex: 'argillit', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Аргиллит бит. (%)', + key: 'brokenArgillit', + dataIndex: 'verticalDepth', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Уголь (%)', + key: 'coal', + dataIndex: 'coal', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Песок (%)', + key: 'sand', + dataIndex: 'sand', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Глина (%)', + key: 'clay', + dataIndex: 'clay', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Известняк (%)', + key: 'camstone', + dataIndex: 'camstone', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'Цемент (%)', + key: 'cement', + dataIndex: 'cement', + align: 'center', + className: 'lightpurple-background', + editable: true + } + ] + }, + + { + title: 'Краткое описание', + key: 'summary', + dataIndex: 'summary', + align: 'center', + className: 'yellow-background', + editable: true + }, + { + title: 'ЛБА бурового раствора', + key: 'drillingMud', + dataIndex: 'drillingMud', + align: 'center', + className: 'lightgray-background', + editable: true + }, + { + title: 'ЛБА (шлама)', + key: 'sludge', + dataIndex: 'sludge', + align: 'center', + className: 'lightorange-background', + editable: true + }, + { + title: 'Газопоказания', + key: 'gasIndications', + dataIndex: 'gasIndications', + align: 'center', + className: 'yellow-background', + children: [ + { + title: 'Сумма УВ мах. (абс%)', + key: 'maxSum', + dataIndex: 'maxSum', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'С1 метан (отн%)', + key: 'methane', + dataIndex: 'depthPlanFactDifference', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'С2 этан (отн%)', + key: 'ethan', + dataIndex: 'ethan', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'С3 пропан (отн%)', + key: 'propane', + dataIndex: 'propane', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'С4 бутан (отн%)', + key: 'butane', + dataIndex: 'butane', + align: 'center', + className: 'lightpurple-background', + editable: true + }, + { + title: 'С5 пентан (отн%)', + key: 'pentane', + dataIndex: 'pentane', + align: 'center', + className: 'lightpurple-background', + editable: true + } + ] + }, + { + title: 'Мех. скорость', + key: 'mechanicalSpeed', + dataIndex: 'mechanicalSpeed', + align: 'center', + className: 'yellow-background', + editable: true + }, + { + title: 'Предварительное заключение о насыщении по ГК', + key: 'preliminaryConclusion', + dataIndex: 'preliminaryConclusion', + align: 'center', + className: 'lightorange-background', + editable: true + }, + { + title: 'Действие', + dataIndex: 'action', + align: 'center', + width: 150, + className: 'small-font', + render: (_, row) => { + const editable = isEditing(row); + return editable ? ( + + save(row.key)} + style={{ marginRight: 8 }} + > + Сохранить + + Отменить
редактирование?
} onConfirm={cancel}> + Отменить + + + ) : ( + edit(row)}> + Редактировать + + ); + }, + } + ]; + + const mapColumns = (col) => { + if(col.children) + col.children = col.children.map(mapColumns) + + if (!col.editable) { + return col; + } + + return { + ...col, + onCell: (row) => ({ + row, + dataIndex: col.dataIndex, + title: col.title, + editing: isEditing(row) + }), + }; + } + + const mergedColumns = columns.map(mapColumns); + + const edit = (row) => { + form.setFieldsValue({ + ...row + }); + setEditingKey(row.key); + }; + + const cancel = () => { + setEditingKey(''); + }; + + const save = async (key) => { + try { + const row = await form.validateFields(); + const newData = [...data]; + const index = newData.findIndex((item) => key === item.key); + + if (index > -1) { + const item = newData[index]; + newData.splice(index, 1, { ...item, ...row }); + setData(newData); + setEditingKey(''); + } else { + newData.push(row); + setData(newData); + setEditingKey(''); + } + } catch (errInfo) { + console.log('Validate Failed:', errInfo); + } + }; + return (<> -
+
+ {editing ? ( + + + + ) : ( + children + )} +
+
-
 
-

{new Date().toLocaleString()}

+ +
+ ) } \ No newline at end of file diff --git a/src/pages/LastData.jsx b/src/pages/LastData.jsx index 11bf595..0a90650 100644 --- a/src/pages/LastData.jsx +++ b/src/pages/LastData.jsx @@ -22,13 +22,17 @@ export default function LastData() { title='Последние показатели бурового раствора' centered visible={tableVisible} - onOk={() => setCementTableVisible(false)} onCancel={() => setCementTableVisible(false)} width={2000} - okText='Ок' - cancelText='Отмена' + footer={[ + + ]} > +
 
+

{new Date().toLocaleString()}

+ ]} > +
 
+

{new Date().toLocaleString()}

+ ]} > +
 
+

{new Date().toLocaleString()}