forked from ddrilling/asb_cloud_front
Добавлены стольцы с нарастающим таймингом на план и факт
This commit is contained in:
parent
1f5cc759be
commit
ba88454500
@ -14,8 +14,8 @@ export const makeSelectColumn = <T extends unknown = string>(
|
|||||||
...other,
|
...other,
|
||||||
input: <Select options={options} {...selectOther}/>,
|
input: <Select options={options} {...selectOther}/>,
|
||||||
render: (value) => {
|
render: (value) => {
|
||||||
const item = options?.find(option => option?.value === value)
|
const item = options?.find(option => option?.value === value)
|
||||||
return other?.render?.(item?.value) ?? item?.label ?? defaultValue ?? value ?? '--'
|
return other?.render?.(item?.value) ?? item?.label ?? defaultValue ?? value ?? '--'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@ import LoaderPortal from '@components/LoaderPortal'
|
|||||||
import { invokeWebApiWrapperAsync } from '@components/factory'
|
import { invokeWebApiWrapperAsync } from '@components/factory'
|
||||||
import { makeDateColumn, makeNumericColumn, makeTextColumn, Table } from '@components/Table'
|
import { makeDateColumn, makeNumericColumn, makeTextColumn, Table } from '@components/Table'
|
||||||
|
|
||||||
|
import '@styles/tvd.less'
|
||||||
|
|
||||||
export const columns = [
|
export const columns = [
|
||||||
makeTextColumn('Конструкция секции', 'wellSectionTypeName', null, null, null, { width: 140 }),
|
makeTextColumn('Конструкция секции', 'wellSectionTypeName', null, null, null, { width: 140 }),
|
||||||
makeNumericColumn('Глубина', 'depth', null, null, null, 80),
|
makeNumericColumn('Глубина', 'depth', null, null, null, 80),
|
||||||
|
@ -10,6 +10,10 @@ import {
|
|||||||
makeSelectColumn,
|
makeSelectColumn,
|
||||||
makeActionHandler,
|
makeActionHandler,
|
||||||
makeDateColumn,
|
makeDateColumn,
|
||||||
|
makeNumericColumn,
|
||||||
|
makeNumericRender,
|
||||||
|
makeNumericSorter,
|
||||||
|
makeTextColumn,
|
||||||
} from '@components/Table'
|
} from '@components/Table'
|
||||||
import LoaderPortal from '@components/LoaderPortal'
|
import LoaderPortal from '@components/LoaderPortal'
|
||||||
import { invokeWebApiWrapperAsync } from '@components/factory'
|
import { invokeWebApiWrapperAsync } from '@components/factory'
|
||||||
@ -20,6 +24,8 @@ import { WellOperationService } from '@api'
|
|||||||
const { TextArea } = Input
|
const { TextArea } = Input
|
||||||
|
|
||||||
const basePageSize = 160
|
const basePageSize = 160
|
||||||
|
const dayRender = makeNumericRender(2)
|
||||||
|
const dayWithoutNptRender = (_, row) => dayRender((row.day ?? 0) - (row.nptHours ?? 0) / 24)
|
||||||
|
|
||||||
const defaultColumns = [
|
const defaultColumns = [
|
||||||
makeSelectColumn('Конструкция секции', 'idWellSectionType', [], undefined, {
|
makeSelectColumn('Конструкция секции', 'idWellSectionType', [], undefined, {
|
||||||
@ -34,19 +40,20 @@ const defaultColumns = [
|
|||||||
})],
|
})],
|
||||||
}),
|
}),
|
||||||
makeSelectColumn('Операция', 'idCategory', [], undefined, { editable: true, width: 200 }),
|
makeSelectColumn('Операция', 'idCategory', [], undefined, { editable: true, width: 200 }),
|
||||||
makeColumn('Доп. инфо', 'categoryInfo', { editable: true, width: 300, input: <TextArea/> }),
|
makeTextColumn('Доп. инфо', 'categoryInfo', null, null, null, { editable: true, width: 300, input: <TextArea/> }),
|
||||||
makeColumn('Глубина забоя на начало, м', 'depthStart', makeNumericColumnOptions(2, 'depthStart')),
|
makeColumn('Глубина забоя на начало, м', 'depthStart', makeNumericColumnOptions(2, 'depthStart')),
|
||||||
makeColumn('Глубина забоя при завершении, м', 'depthEnd', makeNumericColumnOptions(2, 'depthEnd')),
|
makeColumn('Глубина забоя при завершении, м', 'depthEnd', makeNumericColumnOptions(2, 'depthEnd')),
|
||||||
makeDateColumn('Время начала', 'dateStart', undefined, undefined, {
|
makeDateColumn('Время начала', 'dateStart', undefined, undefined, {
|
||||||
editable: true,
|
editable: true,
|
||||||
width: 200,
|
width: 170,
|
||||||
initialValue: moment().format(),
|
initialValue: moment().format(),
|
||||||
}),
|
}),
|
||||||
makeColumn('Часы', 'durationHours', makeNumericColumnOptions(2, 'durationHours')),
|
makeNumericColumn('День', 'day', null, null, dayRender, 80),
|
||||||
makeColumn('Комментарий', 'comment', { editable: true, input: <TextArea/> }),
|
makeColumn('Часы', 'durationHours', { ...makeNumericColumnOptions(2, 'durationHours'), width: 70 }),
|
||||||
|
makeTextColumn('Комментарий', 'comment', null, null, null, { editable: true, input: <TextArea/> }),
|
||||||
]
|
]
|
||||||
|
|
||||||
export const WellOperationsEditor = memo(({ idWell, idType, ...other }) => {
|
export const WellOperationsEditor = memo(({ idWell, idType, showNpt, ...other }) => {
|
||||||
const [pageNumAndPageSize, setPageNumAndPageSize] = useState({ current: 1, pageSize: basePageSize })
|
const [pageNumAndPageSize, setPageNumAndPageSize] = useState({ current: 1, pageSize: basePageSize })
|
||||||
const [paginationTotal, setPaginationTotal] = useState(0)
|
const [paginationTotal, setPaginationTotal] = useState(0)
|
||||||
const [operations, setOperations] = useState([])
|
const [operations, setOperations] = useState([])
|
||||||
@ -59,6 +66,10 @@ export const WellOperationsEditor = memo(({ idWell, idType, ...other }) => {
|
|||||||
return arrayOrDefault(query.get('selectedId')?.split(',')?.map(parseInt))
|
return arrayOrDefault(query.get('selectedId')?.split(',')?.map(parseInt))
|
||||||
}, [location])
|
}, [location])
|
||||||
|
|
||||||
|
// useEffect(() => {
|
||||||
|
// setColumns((preColumns) => preColumns.find(()))
|
||||||
|
// }, [showNpt])
|
||||||
|
|
||||||
useEffect(() => invokeWebApiWrapperAsync(
|
useEffect(() => invokeWebApiWrapperAsync(
|
||||||
async () => {
|
async () => {
|
||||||
let categories = arrayOrDefault(await WellOperationService.getCategories(idWell))
|
let categories = arrayOrDefault(await WellOperationService.getCategories(idWell))
|
||||||
@ -68,8 +79,16 @@ export const WellOperationsEditor = memo(({ idWell, idType, ...other }) => {
|
|||||||
sectionTypes = Object.entries(sectionTypes).map(([id, label]) => ({ value: parseInt(id), label }))
|
sectionTypes = Object.entries(sectionTypes).map(([id, label]) => ({ value: parseInt(id), label }))
|
||||||
|
|
||||||
setColumns(preColumns => [
|
setColumns(preColumns => [
|
||||||
makeSelectColumn('Конструкция секции', 'idWellSectionType', sectionTypes, undefined, { editable: true, width: 160 }),
|
makeSelectColumn('Конструкция секции', 'idWellSectionType', sectionTypes, undefined, {
|
||||||
makeSelectColumn('Операция', 'idCategory', categories, undefined, { editable: true, width: 200 }),
|
editable: true,
|
||||||
|
width: 160,
|
||||||
|
sorter: makeNumericSorter('idWellSectionType'),
|
||||||
|
}),
|
||||||
|
makeSelectColumn('Операция', 'idCategory', categories, undefined, {
|
||||||
|
editable: true,
|
||||||
|
width: 200,
|
||||||
|
sorter: makeNumericSorter('idCategory'),
|
||||||
|
}),
|
||||||
...preColumns.slice(2),
|
...preColumns.slice(2),
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
@ -78,7 +97,26 @@ export const WellOperationsEditor = memo(({ idWell, idType, ...other }) => {
|
|||||||
'Получение списка операций по скважине'
|
'Получение списка операций по скважине'
|
||||||
), [idWell])
|
), [idWell])
|
||||||
|
|
||||||
const updateOperations = () => invokeWebApiWrapperAsync(
|
useEffect(() => invokeWebApiWrapperAsync(
|
||||||
|
async() => {
|
||||||
|
setColumns((preColumns) => {
|
||||||
|
if (!!preColumns.find((col) => col.key === 'dayWithoutNpt') === showNpt)
|
||||||
|
return preColumns
|
||||||
|
const newColumns = preColumns.slice(0, 7)
|
||||||
|
if (showNpt)
|
||||||
|
newColumns.push(
|
||||||
|
makeNumericColumn('День без НПВ', 'dayWithoutNpt', null, null, dayWithoutNptRender, 80),
|
||||||
|
...preColumns.slice(7)
|
||||||
|
)
|
||||||
|
else newColumns.push(...preColumns.slice(8))
|
||||||
|
return newColumns
|
||||||
|
})
|
||||||
|
},
|
||||||
|
setShowLoader,
|
||||||
|
'Не удалось добавить стоблец "День без НПВ"'
|
||||||
|
), [showNpt])
|
||||||
|
|
||||||
|
const updateOperations = useCallback(() => invokeWebApiWrapperAsync(
|
||||||
async () => {
|
async () => {
|
||||||
const skip = ((pageNumAndPageSize.current - 1) * pageNumAndPageSize.pageSize) || 0
|
const skip = ((pageNumAndPageSize.current - 1) * pageNumAndPageSize.pageSize) || 0
|
||||||
const take = pageNumAndPageSize.pageSize
|
const take = pageNumAndPageSize.pageSize
|
||||||
@ -93,9 +131,9 @@ export const WellOperationsEditor = memo(({ idWell, idType, ...other }) => {
|
|||||||
setShowLoader,
|
setShowLoader,
|
||||||
'Не удалось загрузить список операций по скважине',
|
'Не удалось загрузить список операций по скважине',
|
||||||
'Получение списка операций по скважине'
|
'Получение списка операций по скважине'
|
||||||
)
|
), [idWell, idType, pageNumAndPageSize])
|
||||||
|
|
||||||
useEffect(updateOperations, [idWell, idType, pageNumAndPageSize])
|
useEffect(updateOperations, [updateOperations])
|
||||||
|
|
||||||
const handlerProps = {
|
const handlerProps = {
|
||||||
service: WellOperationService,
|
service: WellOperationService,
|
||||||
|
@ -59,7 +59,7 @@ export const WellOperations = memo(({ idWell }) => {
|
|||||||
<WellOperationsEditor idWell={idWell} idType={0} tableName={'well_operations_plan'}/>
|
<WellOperationsEditor idWell={idWell} idType={0} tableName={'well_operations_plan'}/>
|
||||||
</PrivateRoute>
|
</PrivateRoute>
|
||||||
<PrivateRoute path={`${rootPath}/fact`}>
|
<PrivateRoute path={`${rootPath}/fact`}>
|
||||||
<WellOperationsEditor idWell={idWell} idType={1} tableName={'well_operations_fact'}/>
|
<WellOperationsEditor idWell={idWell} idType={1} showNpt tableName={'well_operations_fact'}/>
|
||||||
</PrivateRoute>
|
</PrivateRoute>
|
||||||
<PrivateRoute path={`${rootPath}/drillProcessFlow`}>
|
<PrivateRoute path={`${rootPath}/drillProcessFlow`}>
|
||||||
<DrillProcessFlow idWell={idWell} />
|
<DrillProcessFlow idWell={idWell} />
|
||||||
|
Loading…
Reference in New Issue
Block a user