Merged in feature/dayli-rework27 (pull request #2)

change daily report
This commit is contained in:
JuraBD5 2022-07-30 05:49:21 +00:00
commit f6e21650a6
2 changed files with 512 additions and 169 deletions

View File

@ -24,7 +24,7 @@
"oug": "npx openapi -i http://46.146.209.148/swagger/v1/swagger.json -o src/services/api", "oug": "npx openapi -i http://46.146.209.148/swagger/v1/swagger.json -o src/services/api",
"oug_dev": "npx openapi -i http://46.146.209.148:89/swagger/v1/swagger.json -o src/services/api" "oug_dev": "npx openapi -i http://46.146.209.148:89/swagger/v1/swagger.json -o src/services/api"
}, },
"proxy": "http://46.146.209.148:89", "proxy": "http://46.146.209.148:88",
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
"react-app", "react-app",

View File

@ -7,39 +7,60 @@ import LoaderPortal from '@components/LoaderPortal'
import { invokeWebApiWrapperAsync } from '@components/factory' import { invokeWebApiWrapperAsync } from '@components/factory'
import { makeColumn, makeGroupColumn } from '@components/Table' import { makeColumn, makeGroupColumn } from '@components/Table'
import { DailyReportService } from '@api' import { DailyReportService } from '@api'
import { Tabs } from 'antd'
const { Item: RawItem } = Form const { Item: RawItem } = Form
const { Summary } = Table const { Summary } = Table
const { TabPane } = Tabs
const onChange = (key) => {
console.log(key)
}
const Item = memo(({ style, ...other }) => <RawItem style={{ margin: 0, ...style }} {...other} />) const Item = memo(({ style, ...other }) => <RawItem style={{ margin: 0, ...style }} {...other} />)
const table1Columns = [ const table1Columns = [
makeGroupColumn('Отчётный период', [ makeGroupColumn('Отчётный период', [
makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => ( makeColumn('От (дата, время)', 'dateStart', {
<Item name={'reportDate'}> width: 200,
<DatePicker render: (_, { disabled, onChange, checkIsDateBusy }) => (
onChange={onChange} <Item name={'reportDate'}>
disabled={disabled} <DatePicker
format={'DD.MM.YYYY'} onChange={onChange}
style={{ width: '100%' }} disabled={disabled}
disabledDate={checkIsDateBusy} format={'DD.MM.YYYY'}
/> style={{ width: '100%' }}
</Item> disabledDate={checkIsDateBusy}
)}), />
</Item>
),
}),
]), ]),
makeGroupColumn('Забой за отчётный период, м', [ makeGroupColumn('Забой за отчётный период, м', [
makeColumn('От', 'depthStart', { width: 200, render: () => ( makeColumn('От', 'depthStart', {
<Item name={'wellDepthIntervalStartDate'}> width: 200,
<InputNumber style={{ width: '100%' }} /> render: () => (
</Item> <Item name={'wellDepthIntervalStartDate'}>
)}), <InputNumber style={{ width: '100%' }} />
makeColumn('До', 'depthEnd', { width: 200, render: () => ( </Item>
<Item name={'wellDepthIntervalFinishDate'}> ),
<InputNumber style={{ width: '100%' }} /> }),
</Item> makeColumn('До', 'depthEnd', {
)}), width: 200,
]) render: () => (
<Item name={'wellDepthIntervalFinishDate'}>
<InputNumber style={{ width: '100%' }} />
</Item>
),
}),
]),
]
const names = [
['head', ['wellName', 'clusterName','contractor','countLaunchesMSE','customer','bottomholeDepth','verticalDepth','firstDriller','secondDriller','zenithAngle','azimuthAngle','penetrationSAUB','penetrationSpinMaster','penetrationTorkMaster','secondDriller','wellDepthIntervalFinishDate','wellDepthIntervalStartDate','workTimeSAUB','workTimeSpinMaster','workTimeTorkMaster','reportDate']],
['bha', ['bhaDescription','extensionDrillingOneBegin','extensionDrillingOneFinish','sluiceBegin','sluiceFinish','climbBegin','climbFinish','descentBegin','descentFinish','extensionDrillingTwoBegin','extensionDrillingTwoFinish']],
['noDrilling', ['actualTimeBarrelPreparation','actualTimeExtension','standardTimeBarrelPreparation','standardTimeExtension']],
['timeBalance', ['drilling','flushing','building','elaboration','extension','repair','knbk','spo','pzr','pzr','pgr','gis','ozc','engineeringWorks','takingMeasure','cementing','simple','npv']],
['saub', ['avgDiffDropRotor','avgDiffPressureSlide','declinesReasonsROP','deviationFromTVD','drillingTimeInRotor','declinesReasonsROP','extensionsCount','extensionsCount','penetrationInRotor','penetrationInSlide','rotorDrillingModes','rotorSlidePercent','reductionTimeDrilling','increaseSpeedSection','increaseSpeedDay','sectionDrillingTimeTotal','sectionPenetrationTotal','sectionROPPlan','slideDrillingModes','mspSection']],
['sign', ['drillingMaster','supervisor']],
] ]
const cellData = { const cellData = {
@ -48,7 +69,15 @@ const cellData = {
<Item name={name}> <Item name={name}>
<InputNumber style={{ width: '100%' }} /> <InputNumber style={{ width: '100%' }} />
</Item> </Item>
) ),
}
const Name1 = {
width: 200,
render: (name) => (
<Item name={name}>
<Input style={{ width: '100%' }} />
</Item>
),
} }
const table2Columns = [ const table2Columns = [
@ -60,7 +89,12 @@ const table2Columns = [
const table2Data = [ const table2Data = [
{ key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' }, { key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' },
{ key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' }, { key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' },
{ key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' }, {
key: '3',
label: 'Торк Мастер (демпфирование), ч/м:',
hours: 'workTimeTorkMaster',
meters: 'penetrationTorkMaster',
},
] ]
const table3Columns = [ const table3Columns = [
@ -71,7 +105,9 @@ const table3Columns = [
]), ]),
] ]
const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }] const table3Data = [
{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' },
]
const table4Columns = [ const table4Columns = [
makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [ makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [
@ -81,10 +117,12 @@ const table4Columns = [
]), ]),
] ]
const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }] const table4Data = [
{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' },
]
const table6Columns = [ const table6Columns = [
makeGroupColumn('БЕЗМЕТРАЖНЫЕ РАБОТЫ', [ makeGroupColumn('', [
makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }), makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }),
makeColumn('', 'l_value', { colSpan: 0, ...cellData }), makeColumn('', 'l_value', { colSpan: 0, ...cellData }),
makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }), makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }),
@ -92,30 +130,97 @@ const table6Columns = [
]), ]),
] ]
const table6Data = [{ const table6Data = [
key: '1', {
l_label: 'Норматив на одну операцию, (мин):', key: '1',
r_label: 'Норматив на одну операцию, (мин):', l_label: 'Норматив на одну операцию, (мин):',
l_value: 'standardTimeBarrelPreparation', r_label: 'Норматив на одну операцию, (мин):',
r_value: 'standardTimeExtension' l_value: 'standardTimeBarrelPreparation',
}, { r_value: 'standardTimeExtension',
key: '2', },
l_label: 'Проработка при бур, факт (ч):', {
r_label: 'Наращивание, факт (ч):', key: '2',
l_value: 'actualTimeBarrelPreparation', l_label: 'Проработка при бур, факт (ч):',
r_value: 'actualTimeExtension' r_label: 'Наращивание, факт (ч):',
}] l_value: 'actualTimeBarrelPreparation',
r_value: 'actualTimeExtension',
},
]
const table10Columns = [
makeGroupColumn('', [
makeColumn('Бурение с наращиваниями в инт. 2195-2763м', 'l_label', { colSpan: 2, width: 200 }),
makeColumn('', 'l_value', { colSpan: 0, ...Name1 }),
makeColumn('Промывка', 'r_label', { colSpan: 2, width: 200 }),
makeColumn('', 'r_value', { colSpan: 0, ...Name1 }),
]),
]
const table6Summary = () => ( const table10Data = [
<Summary.Row> {
<Summary.Cell colSpan={2}> key: '1',
Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи. l_label: 'Время начала:',
</Summary.Cell> r_label: 'Время начала',
<Summary.Cell colSpan={2}> l_value: 'extensionDrillingOneBegin',
Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика. r_value: 'extensionDrillingOneFinish',
</Summary.Cell> },
</Summary.Row> {
) key: '2',
l_label: 'Время окончания',
r_label: 'Время окончания',
l_value: 'sluiceBegin',
r_value: 'sluiceFinish',
},
]
const table11Columns = [
makeGroupColumn('', [
makeColumn('Подъем КНБК', 'l_label', { colSpan: 2, width: 200 }),
makeColumn('', 'l_value', { colSpan: 0, ...Name1 }),
makeColumn('Спуск КНБК', 'r_label', { colSpan: 2, width: 200 }),
makeColumn('', 'r_value', { colSpan: 0, ...Name1 }),
]),
]
const table11Data = [
{
key: '1',
l_label: 'Время начала:',
r_label: 'Время начала',
l_value: 'climbBegin',
r_value: 'climbFinish',
},
{
key: '2',
l_label: 'Время окончания',
r_label: 'Время окончания',
l_value: 'descentBegin',
r_value: 'descentFinish',
},
]
const table12Columns = [
makeGroupColumn('', [
makeColumn('Глубины забоя на окончание отчетного периода', 'l_label', { colSpan: 2, width: 200 }),
makeColumn('', 'l_value', { colSpan: 0, ...cellData }),
makeColumn('Углы на дату окончания отчетного периода', 'r_label', { colSpan: 2, width: 200 }),
makeColumn('', 'r_value', { colSpan: 0, ...cellData }),
]),
]
const table12Data = [
{
key: '1',
l_label: 'По стволу:',
r_label: 'По вертикали',
l_value: 'climbBegin',
r_value: 'climbFinish',
},
{
key: '2',
l_label: 'Зенитный',
r_label: 'Азимутальный',
l_value: 'descentBegin',
r_value: 'descentFinish',
},
]
const table2Summary = () => ( const table2Summary = () => (
<Summary.Row> <Summary.Row>
@ -135,46 +240,69 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
const idWell = useIdWell() const idWell = useIdWell()
const setFields = useCallback((data) => form.setFieldsValue(data ? { const setFields = useCallback(
...data, (data) =>
rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [], form.setFieldsValue(
slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [], data
reportDate: moment.utc(data.reportDate).local(), ? {
} : {}), [form]) ...data.head,
...data.bha,
...data.noDrilling,
...data.timeBalance,
...data.saub,
...data.sign,
reportDate: moment.utc(data.head.reportDate).local(),
}
: {}
),
[form]
)
useEffect(() => setFields(data), [data, setFields]) useEffect(() => setFields(data), [data, setFields])
const onFormChange = useCallback(async () => await form.validateFields() const onFormChange = useCallback(
.then(() => setIsInvalid(false)) async () =>
.catch(() => setIsInvalid(true)) await form
, [form]) .validateFields()
.then(() => setIsInvalid(false))
.catch(() => setIsInvalid(true)),
[form]
)
const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync( const onFormFinish = useCallback(
async () => { (formData) =>
if (data) invokeWebApiWrapperAsync(
await DailyReportService.update(idWell, data.reportDate, formData) async () => {
else console.log(formData)
await DailyReportService.add(idWell, formData) const payload = Object.fromEntries(names.map(([head, names]) => [head, Object.fromEntries(names.map((name) => [name, formdata[name]]))]))
onDone?.(formData) if (data) await DailyReportService.update(idWell, data.head.reportDate, payload)
form.resetFields() else await DailyReportService.add(idWell, payload)
}, onDone?.(formData)
setIsLoading, form.resetFields()
'Не удалось сохранить суточный рапорт', },
'Сохранение суточного рапорта', setIsLoading,
), [data, onDone, idWell, form]) 'Не удалось сохранить суточный рапорт',
'Сохранение суточного рапорта'
),
[data, onDone, idWell, form]
)
const onDateChange = useCallback((date) => invokeWebApiWrapperAsync( const onDateChange = useCallback(
async () => { (date) =>
if (data) return invokeWebApiWrapperAsync(
const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z') async () => {
if (checkIsDateBusy(moment(newData.reportDate))) if (data) return
throw new Error('Рапорт на данную дату уже существует') const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z')
setFields(newData) if (checkIsDateBusy(moment(newData.reportDate)))
}, throw new Error('Рапорт на данную дату уже существует')
setIsLoading, setFields(newData)
(e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`, },
'Получение автозаполняемых данных суточного рапорта', setIsLoading,
), [idWell, data, setFields, checkIsDateBusy]) (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`,
'Получение автозаполняемых данных суточного рапорта'
),
[idWell, data, setFields, checkIsDateBusy]
)
return ( return (
<Modal <Modal
@ -183,9 +311,14 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
visible={visible} visible={visible}
onCancel={onCancel} onCancel={onCancel}
okText={'Сохранить'} okText={'Сохранить'}
title={data ? title={
<>Суточная сводка бурения скважины {data?.wellName} куст {data?.clusterName}</> : data ? (
<>Новая cуточная сводка бурения скважины</> <>
Суточная сводка бурения скважины {data?.wellName} куст {data?.clusterName}
</>
) : (
<>Новая cуточная сводка бурения скважины</>
)
} }
onOk={form.submit} onOk={form.submit}
okButtonProps={{ okButtonProps={{
@ -194,11 +327,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
}} }}
> >
<LoaderPortal show={isLoading}> <LoaderPortal show={isLoading}>
<Form <Form form={form} onFinish={onFormFinish} onChange={onFormChange}>
form={form}
onFinish={onFormFinish}
onChange={onFormChange}
>
<Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}> <Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}>
<DatePicker <DatePicker
disabled={!!data} disabled={!!data}
@ -207,85 +336,299 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
disabledDate={checkIsDateBusy} disabledDate={checkIsDateBusy}
/> />
</Item> </Item>
<Divider /> <Tabs defaultActiveKey='1'>
<Space direction={'vertical'} size={'middle'} style={{ width: '100%' }}> <TabPane tab='Заголовок' key='head' forceRender>
<Item name={'customer'} label={'Заказчик'}><Input /></Item> <Descriptions bordered size={'small'} column={1}>
<Item name={'contractor'} label={'Подрядчик'}><Input /></Item> <Descriptions.Item label={'Название скважины'}>
<Table <Item name={'wellName'}>
bordered <Input style={{ width: '100%' }} />
size={'small'} </Item>
columns={table1Columns} </Descriptions.Item>
dataSource={[{ key: '', disabled: !!data, onChange: onDateChange, checkIsDateBusy }]} <Descriptions.Item label={'Название куста'}>
pagination={false} <Item name={'clusterName'}>
/> <Input style={{ width: '100%' }} />
<Item label={'Бурильщик 1 смена'} name={'firstDriller'}><Input /></Item> </Item>
<Item label={'Бурильщик 2 смена'} name={'secondDriller'}><Input /></Item> </Descriptions.Item>
<Descriptions.Item label={'Заказчик'}>
<Item name={'customer'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Подрядчик'}>
<Item name={'contractor'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
</Descriptions>
<Table
bordered
size={'small'}
columns={table1Columns}
dataSource={[{ key: '', disabled: !!data, onChange: onDateChange, checkIsDateBusy }]}
pagination={false}
/>
<Table
bordered
size={'small'}
columns={table12Columns}
dataSource={table12Data}
pagination={false}
/>
<Item label={'Бурильщик 1 смена'} name={'firstDriller'}>
<Input />
</Item>
<Item label={'Бурильщик 2 смена'} name={'secondDriller'}>
<Input />
</Item>
<Table <Table
bordered bordered
size={'small'} size={'small'}
columns={table2Columns} columns={table2Columns}
dataSource={table2Data} dataSource={table2Data}
summary={table2Summary} summary={table2Summary}
pagination={false} pagination={false}
/> />
</TabPane>
<TabPane tab='КНБК' key='bha' forceRender>
<Table
bordered
size={'small'}
columns={table10Columns}
dataSource={table10Data}
pagination={false}
/>
<Descriptions bordered size={'small'} column={1}>
<Descriptions.Item label={'Бурение с наращиваниями в инт. 2763-2850м. Время начала'}>
<Item name={'extensionDrillingTwoBegin'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Бурение с наращиваниями в инт. 2763-2850м. Время окончания'}>
<Item name={'extensionDrillingTwoFinish'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'КНБК описание'}>
<Item name={'bhaDescription'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
</Descriptions>
<Table
bordered
size={'small'}
columns={table11Columns}
dataSource={table11Data}
pagination={false}
/>
</TabPane>
<TabPane tab='Безметражные работы' key='noDrilling' forceRender>
<Table
bordered
size={'small'}
columns={table6Columns}
dataSource={table6Data}
pagination={false}
/>
</TabPane>
<TabPane tab='Баланс времени' key='4' forceRender>
<Descriptions bordered size={'small'} column={1}>
<Descriptions.Item label={'Бурение'}>
<Item name={'drilling'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Время бурения за секцию'}>
<Item name={'sectionDrillingTimeTotal'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Промывка'}>
<Item name={'flushing'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Наращивание'}>
<Item name={'building'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Проработка'}>
<Item name={'elaboration'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Расширка'}>
<Item name={'extension'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Ремонт'}>
<Item name={'repair'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'КНБК'}>
<Item name={'knbk'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'СПО'}>
<Item name={'spo'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'ПЗР'}>
<Item name={'pzr'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'ПВО'}>
<Item name={'pvo'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'ПГР'}>
<Item name={'pgr'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'ГИС'}>
<Item name={'gis'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'ОЗЦ'}>
<Item name={'ozc'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Тех. работы'}>
<Item name={'engineeringWorks'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Снаятие замера'}>
<Item name={'takingMeasure'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Цементирование'}>
<Item name={'cementing'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Простой'}>
<Item name={'simple'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'НПВ'}>
<Item name={'npv'}>
<Input style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
</Descriptions>
</TabPane>
<TabPane tab='блок Сауб' key='saub' forceRender>
<Divider />
<Item name={'bhaDescription'} label={'Описание КНБК'}> <Table
<Input.TextArea rows={4} /> bordered
</Item> size={'small'}
columns={table3Columns}
dataSource={table3Data}
pagination={false}
/>
<Table
bordered
size={'small'}
columns={table4Columns}
dataSource={table4Data}
pagination={false}
/>
<Table bordered size={'small'} columns={table6Columns} dataSource={table6Data} pagination={false} summary={table6Summary} /> <Descriptions bordered size={'small'} column={1}>
<Descriptions.Item label={'Плановая МСП за секцию'}>
<Item name={'sectionROPPlan'}>
<InputNumber style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Время бурения за секцию'}>
<Item name={'sectionDrillingTimeTotal'}>
<InputNumber style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Проходка за секцию'}>
<Item name={'sectionPenetrationTotal'}>
<InputNumber style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Кол-во наращиваний'}>
<Item name={'extensionsCount'}>
<InputNumber style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Отклонение от ГГД +/-, сут'}>
<Item name={'deviationFromTVD'}>
<InputNumber style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
</Descriptions>
<Descriptions column={1} size={'small'} bordered> <Item name={'declinesReasonsROP'} label={'Примечание:'}>
<Descriptions.Item label={'Бурение в роторе:'}> <Input.TextArea rows={4} />
<Item name={'rotorDrillingModes'}> </Item>
<Select mode={'tags'} style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
<Descriptions.Item label={'Бурение в слайде:'}>
<Item name={'slideDrillingModes'}>
<Select mode={'tags'} style={{ width: '100%' }} />
</Item>
</Descriptions.Item>
</Descriptions>
<Table bordered size={'small'} columns={table3Columns} dataSource={table3Data} pagination={false} /> <Descriptions bordered size={'small'} column={1}>
<Table bordered size={'small'} columns={table4Columns} dataSource={table4Data} pagination={false} /> <Descriptions.Item label={'МСП'}>
<Item name={'mspSection'}>
<Item label={'Плановая мех скорость'} name={'sectionROPPlan'}> <Input />
<InputNumber style={{ width: '100%' }}/> </Item>
</Item> </Descriptions.Item>
<Descriptions.Item label={'Сокращение времени бурения за секцию, ч'}>
<Descriptions bordered size={'small'} column={1}> <Item name={'reductionTimeDrilling'}>
<Descriptions.Item label={'Время бурения за секцию'}> <Input />
<Item name={'sectionDrillingTimeTotal'}> </Item>
<InputNumber style={{ width: '100%' }} /> </Descriptions.Item>
</Item> <Descriptions.Item label={'Ротор/Слайд %'}>
</Descriptions.Item> <Item name={'rotorSlidePercent'}>
<Descriptions.Item label={'Проходка за секцию'}> <Input />
<Item name={'sectionPenetrationTotal'}> </Item>
<InputNumber style={{ width: '100%' }} /> </Descriptions.Item>
</Item> <Descriptions.Item label={'Режимы бурения в роторе'}>
</Descriptions.Item> <Item name={'rotorDrillingModes'}>
<Descriptions.Item label={'Кол-во наращиваний'}> <Input style={{ width: '100%' }} />
<Item name={'extensionsCount'}> </Item>
<InputNumber style={{ width: '100%' }} /> </Descriptions.Item>
</Item> <Descriptions.Item label={'Режимы бурения в слайде'}>
</Descriptions.Item> <Item name={'slideDrillingModes'}>
<Descriptions.Item label={'Отклонение от ГГД +/-, сут'}> <Input style={{ width: '100%' }} />
<Item name={'deviationFromTVD'}> </Item>
<InputNumber style={{ width: '100%' }} /> </Descriptions.Item>
</Item> <Descriptions.Item label={'Увеличение мех скорости за секцию %'}>
</Descriptions.Item> <Item name={'increaseSpeedSection'}>
</Descriptions> <Input style={{ width: '100%' }} />
</Item>
<Item name={'declinesReasonsROP'} label={'Примечание:'}> </Descriptions.Item>
<Input.TextArea rows={4} /> <Descriptions.Item label={'Увеличение мех скорости за сутки %'}>
</Item> <Item name={'increaseSpeedDay'}>
<Input style={{ width: '100%' }} />
<Item label={'Мастер буровой'} name={'drillingMaster'}><Input /></Item> </Item>
<Item label={'Супервайзер'} name={'supervisor'}><Input /></Item> </Descriptions.Item>
</Space> </Descriptions>
</TabPane>
<TabPane tab='Подписи' key='sign' forceRender>
<Item label={'ФИО Мастера буровой'} name={'drillingMaster'}>
<Input />
</Item>
<Divider />
<Item label={'ФИО супервайзера'} name={'supervisor'}>
<Input />
</Item>
</TabPane>
</Tabs>
</Form> </Form>
</LoaderPortal> </LoaderPortal>
</Modal> </Modal>