diff --git a/src/pages/Analytics/WellCompositeEditor/NewParamsTable.jsx b/src/pages/Analytics/WellCompositeEditor/NewParamsTable.jsx
new file mode 100755
index 0000000..6998087
--- /dev/null
+++ b/src/pages/Analytics/WellCompositeEditor/NewParamsTable.jsx
@@ -0,0 +1,79 @@
+import { memo, useCallback, useEffect, useState } from 'react'
+import { Button, Modal, Popconfirm } from 'antd'
+
+import { Table } from '@components/Table'
+import LoaderPortal from '@components/LoaderPortal'
+import { invokeWebApiWrapperAsync } from '@components/factory'
+import { DrillParamsService } from '@api'
+
+import { getColumns } from '@pages/WellOperations/WellDrillParams'
+
+export const NewParamsTable = memo(({ idWell, selectedWellsKeys }) => {
+ const [params, setParams] = useState([])
+ const [paramsColumns, setParamsColumns] = useState([])
+ const [showParamsLoader, setShowParamsLoader] = useState(false)
+ const [isParamsModalVisible, setIsParamsModalVisible] = useState(false)
+
+ useEffect(() => invokeWebApiWrapperAsync(
+ async () => setParamsColumns(await getColumns(idWell))
+ ), [idWell])
+
+ useEffect(() => console.log(paramsColumns), [paramsColumns])
+
+ const onParamButtonClick = useCallback(() => invokeWebApiWrapperAsync(
+ async () => {
+ setIsParamsModalVisible(true)
+ const params = await DrillParamsService.getCompositeAll(idWell)
+ setParams(params)
+ },
+ setShowParamsLoader,
+ `Не удалось загрузить список режимов для скважины "${idWell}"`,
+ 'Получение списка режимов скважины'
+ ), [idWell])
+
+ const onParamsAddClick = useCallback(() => invokeWebApiWrapperAsync(
+ async () => {
+ await DrillParamsService.save(idWell, params)
+ setIsParamsModalVisible(false)
+ },
+ setShowParamsLoader,
+ `Не удалось добавить режимы в список скважины "${idWell}"`,
+ 'Добавление режима скважины'
+ ), [idWell, params])
+
+ return (
+ <>
+
+ setIsParamsModalVisible(false)}
+ width={1700}
+ footer={(
+
+
+
+ )}
+ >
+
+
+
+
+ >
+ )
+})
+
+export default NewParamsTable
diff --git a/src/pages/Analytics/WellCompositeEditor/WellCompositeSections.jsx b/src/pages/Analytics/WellCompositeEditor/WellCompositeSections.jsx
index 9dbe389..7e1505a 100755
--- a/src/pages/Analytics/WellCompositeEditor/WellCompositeSections.jsx
+++ b/src/pages/Analytics/WellCompositeEditor/WellCompositeSections.jsx
@@ -1,13 +1,13 @@
import { Link, useLocation } from 'react-router-dom'
-import { useState, useEffect, memo, useCallback, useMemo } from 'react'
+import { useState, useEffect, memo, useMemo } from 'react'
import { LineChartOutlined, ProfileOutlined } from '@ant-design/icons'
-import { Table, Tag, Button, Badge, Divider, Modal, Row, Col, Popconfirm } from 'antd'
+import { Table, Tag, Button, Badge, Divider, Modal, Row, Col } from 'antd'
import { CompanyView } from '@components/views'
import LoaderPortal from '@components/LoaderPortal'
import { invokeWebApiWrapperAsync } from '@components/factory'
import { makeTextColumn, makeNumericColumnPlanFact } from '@components/Table'
-import { DrillParamsService, WellCompositeService } from '@api'
+import { WellCompositeService } from '@api'
import { hasPermission } from '@utils/permissions'
import {
calcAndUpdateStatsBySections,
@@ -16,9 +16,8 @@ import {
} from '@utils/functions'
import { Tvd } from '@pages/WellOperations/Tvd'
-import { getColumns } from '@pages/WellOperations/WellDrillParams'
import WellOperationsTable from '@pages/Cluster/WellOperationsTable'
-
+import NewParamsTable from './NewParamsTable'
const filtersMinMax = [
{ text: 'min', value: 'min' },
@@ -31,17 +30,13 @@ const filtersSectionsType = []
const DAY_IN_MS = 1000 * 60 * 60 * 24
export const WellCompositeSections = memo(({ idWell, statsWells, selectedSections }) => {
- const [params, setParams] = useState([])
const [selectedWells, setSelectedWells] = useState([])
const [wellOperations, setWellOperations] = useState([])
const [selectedWellsKeys, setSelectedWellsKeys] = useState([])
const [selectedWellId, setSelectedWellId] = useState(0)
const [showLoader, setShowLoader] = useState(false)
- const [showParamsLoader, setShowParamsLoader] = useState(false)
const [isTVDModalVisible, setIsTVDModalVisible] = useState(false)
const [isOpsModalVisible, setIsOpsModalVisible] = useState(false)
- const [isParamsModalVisible, setIsParamsModalVisible] = useState(false)
- const [paramsColumns, setParamsColumns] = useState([])
const location = useLocation()
@@ -103,10 +98,6 @@ export const WellCompositeSections = memo(({ idWell, statsWells, selectedSection
return rows
}, [statsWells])
- useEffect(() => invokeWebApiWrapperAsync(
- async () => setParamsColumns(await getColumns(idWell))
- ), [idWell])
-
useEffect(() => {
if (isOpsModalVisible || selectedWellId <= 0) return
invokeWebApiWrapperAsync(
@@ -128,6 +119,22 @@ export const WellCompositeSections = memo(({ idWell, statsWells, selectedSection
setSelectedWellsKeys(selected.map((row) => row.key))
}, [rows, selectedSections])
+ const rowSelection = useMemo(() => hasPermission('WellOperation.edit') && {
+ selectedRowKeys: selectedWellsKeys,
+ onChange: (keys, items) => invokeWebApiWrapperAsync(
+ async () => {
+ const selectedSections = items.map((row) => ({idWell, idWellSrc: row.id, idWellSectionType: row.sectionId}))
+ await WellCompositeService.save(idWell, selectedSections)
+
+ setSelectedWells(items)
+ setSelectedWellsKeys(keys)
+ },
+ setShowLoader,
+ `Не удалось сохранить изменения выбранных секций для композитной скважины "${idWell}"`,
+ 'Изменение выбранных секций скважины'
+ )
+ }, [idWell, selectedWellsKeys])
+
const columns = useMemo(() => [
makeTextColumn('скв №', 'caption', null, null,
(text, item) => {text ?? '-'}
@@ -176,43 +183,6 @@ export const WellCompositeSections = memo(({ idWell, statsWells, selectedSection
},
], [location.pathname])
- const rowSelection = useMemo(() => hasPermission('WellOperation.edit') && {
- selectedRowKeys: selectedWellsKeys,
- onChange: (keys, items) => invokeWebApiWrapperAsync(
- async () => {
- const selectedSections = items.map((row) => ({idWell, idWellSrc: row.id, idWellSectionType: row.sectionId}))
- await WellCompositeService.save(idWell, selectedSections)
-
- setSelectedWells(items)
- setSelectedWellsKeys(keys)
- },
- setShowParamsLoader,
- `Не удалось сохранить изменения выбранных секций для композитной скважины "${idWell}"`,
- 'Изменение выбранных секций скважины'
- )
- }, [idWell, selectedWellsKeys])
-
- const onParamButtonClick = useCallback(() => invokeWebApiWrapperAsync(
- async () => {
- setIsParamsModalVisible(true)
- const params = await DrillParamsService.getCompositeAll(idWell)
- setParams(params)
- },
- setShowParamsLoader,
- `Не удалось загрузить список режимов для скважины "${idWell}"`,
- 'Получение списка режимов скважины'
- ), [idWell])
-
- const onParamsAddClick = useCallback(() => invokeWebApiWrapperAsync(
- async () => {
- await DrillParamsService.save(idWell, params)
- setIsParamsModalVisible(false)
- },
- setShowLoader,
- `Не удалось добавить режимы в список скважины "${idWell}"`,
- 'Добавление режима скважины'
- ), [idWell, params])
-
return (
<>
-
+
@@ -272,29 +236,6 @@ export const WellCompositeSections = memo(({ idWell, statsWells, selectedSection
-
- setIsParamsModalVisible(false)}
- width={1700}
- footer={(
-
-
-
- )}
- >
-
-
-
-
>
)
})
diff --git a/src/pages/WellOperations/WellDrillParams.jsx b/src/pages/WellOperations/WellDrillParams.jsx
index 8db51b6..b113209 100755
--- a/src/pages/WellOperations/WellDrillParams.jsx
+++ b/src/pages/WellOperations/WellDrillParams.jsx
@@ -5,6 +5,7 @@ import {
makeSelectColumn,
makeActionHandler,
makeNumericAvgRange,
+ makeNumericSorter,
} from '@components/Table'
import LoaderPortal from '@components/LoaderPortal'
import { invokeWebApiWrapperAsync } from '@components/factory'
@@ -14,15 +15,16 @@ import { arrayOrDefault } from '@utils'
export const getColumns = async (idWell) => {
let sectionTypes = await WellOperationService.getSectionTypes(idWell)
- sectionTypes = Object.keys(sectionTypes).map((id) => ({
- label: sectionTypes[id],
- value: id,
+ sectionTypes = Object.entries(sectionTypes).map(([id, value]) => ({
+ label: value,
+ value: parseInt(id),
}))
return [
makeSelectColumn('Конструкция секции','idWellSectionType', sectionTypes, null, {
editable: true,
width: 160,
+ sorter: makeNumericSorter('idWellSectionType'),
}),
makeNumericAvgRange('Нагрузка, т', 'axialLoad', 1),
makeNumericAvgRange('Давление, атм', 'pressure', 1),