forked from ddrilling/asb_cloud_front
carry reporteditor
This commit is contained in:
parent
0337c7746b
commit
e771fbba99
499
ReportEditor.jsx
499
ReportEditor.jsx
@ -1,499 +0,0 @@
|
||||
import { DatePicker, Descriptions, Divider, Form, Input, InputNumber, Modal, Select, Space, Table } from 'antd'
|
||||
import { memo, useCallback, useEffect, useState } from 'react'
|
||||
import moment from 'moment'
|
||||
|
||||
import { useIdWell } from '@asb/context'
|
||||
import LoaderPortal from '@components/LoaderPortal'
|
||||
import { invokeWebApiWrapperAsync } from '@components/factory'
|
||||
import { makeColumn, makeGroupColumn } from '@components/Table'
|
||||
import { DailyReportService } from '@api'
|
||||
import { Tabs } from 'antd'
|
||||
|
||||
|
||||
|
||||
const { Item: RawItem } = Form
|
||||
const { Summary } = Table
|
||||
const { TabPane } = Tabs;
|
||||
|
||||
const onChange = (key) => {
|
||||
console.log(key);
|
||||
};
|
||||
|
||||
const Item = memo(({ style, ...other }) => <RawItem style={{ margin: 0, ...style }} {...other} />)
|
||||
|
||||
const table1Columns = [
|
||||
makeGroupColumn('Отчётный период', [
|
||||
makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => (
|
||||
<Item name={'reportDate'}>
|
||||
<DatePicker
|
||||
onChange={onChange}
|
||||
disabled={disabled}
|
||||
format={'DD.MM.YYYY'}
|
||||
style={{ width: '100%' }}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
</Item>
|
||||
)}),
|
||||
]),
|
||||
makeGroupColumn('Забой за отчётный период, м', [
|
||||
makeColumn('От', 'depthStart', { width: 200, render: () => (
|
||||
<Item name={'wellDepthIntervalStartDate'}>
|
||||
<InputNumber style={{ width: '100%' }} />
|
||||
</Item>
|
||||
)}),
|
||||
makeColumn('До', 'depthEnd', { width: 200, render: () => (
|
||||
<Item name={'wellDepthIntervalFinishDate'}>
|
||||
<InputNumber style={{ width: '100%' }} />
|
||||
</Item>
|
||||
)}),
|
||||
])
|
||||
]
|
||||
|
||||
const cellData = {
|
||||
width: 200,
|
||||
render: (name) => (
|
||||
<Item name={name}>
|
||||
<InputNumber style={{ width: '100%' }} />
|
||||
</Item>
|
||||
)
|
||||
}
|
||||
|
||||
const table2Columns = [
|
||||
makeColumn('Работа модулей САУБ', 'label', { width: 400 }),
|
||||
makeColumn('Часов:', 'hours', cellData),
|
||||
makeColumn('Метров:', 'meters', cellData),
|
||||
]
|
||||
|
||||
const table2Data = [
|
||||
{ key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' },
|
||||
{ key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' },
|
||||
{ key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' },
|
||||
]
|
||||
|
||||
const table3Columns = [
|
||||
makeGroupColumn('Бурение в роторе (за отчётный период) с использованием САУБ-1', [
|
||||
makeColumn('Проходка', 'sinking', cellData),
|
||||
makeColumn('Часы бурения', 'hours', cellData),
|
||||
makeColumn('Среднее диф. Давление', 'pressure', cellData),
|
||||
]),
|
||||
]
|
||||
|
||||
const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }]
|
||||
|
||||
const table4Columns = [
|
||||
makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [
|
||||
makeColumn('Проходка', 'sinking', cellData),
|
||||
makeColumn('Часы бурения', 'hours', cellData),
|
||||
makeColumn('Среднее диф. Давление', 'pressure', cellData),
|
||||
]),
|
||||
]
|
||||
|
||||
const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }]
|
||||
|
||||
const table6Columns = [
|
||||
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 table6Data = [{
|
||||
key: '1',
|
||||
l_label: 'Норматив на одну операцию, (мин):',
|
||||
r_label: 'Норматив на одну операцию, (мин):',
|
||||
l_value: 'standardTimeBarrelPreparation',
|
||||
r_value: 'standardTimeExtension'
|
||||
}, {
|
||||
key: '2',
|
||||
l_label: 'Проработка при бур, факт (ч):',
|
||||
r_label: 'Наращивание, факт (ч):',
|
||||
l_value: 'actualTimeBarrelPreparation',
|
||||
r_value: 'actualTimeExtension'
|
||||
}]
|
||||
|
||||
const table6Summary = () => (
|
||||
<Summary.Row>
|
||||
<Summary.Cell colSpan={2}>
|
||||
Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи.
|
||||
</Summary.Cell>
|
||||
<Summary.Cell colSpan={2}>
|
||||
Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика.
|
||||
</Summary.Cell>
|
||||
</Summary.Row>
|
||||
)
|
||||
|
||||
const table2Summary = () => (
|
||||
<Summary.Row>
|
||||
<Summary.Cell>МСЕ, колличество запусков, раз:</Summary.Cell>
|
||||
<Summary.Cell colSpan={2}>
|
||||
<Item name={'countLaunchesMSE'}>
|
||||
<InputNumber style={{ width: '100%' }} />
|
||||
</Item>
|
||||
</Summary.Cell>
|
||||
</Summary.Row>
|
||||
)
|
||||
|
||||
export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => {
|
||||
const [form] = Form.useForm()
|
||||
const [isInvalid, setIsInvalid] = useState(false)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
|
||||
const idWell = useIdWell()
|
||||
|
||||
const setFields = useCallback((data) => form.setFieldsValue(data ? {
|
||||
...data,
|
||||
rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [],
|
||||
slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [],
|
||||
reportDate: moment.utc(data.reportDate).local(),
|
||||
} : {}), [form])
|
||||
|
||||
useEffect(() => setFields(data), [data, setFields])
|
||||
|
||||
const onFormChange = useCallback(async () => await form.validateFields()
|
||||
.then(() => setIsInvalid(false))
|
||||
.catch(() => setIsInvalid(true))
|
||||
, [form])
|
||||
|
||||
const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync(
|
||||
async () => {
|
||||
if (data)
|
||||
await DailyReportService.update(idWell, data.reportDate, formData)
|
||||
else
|
||||
await DailyReportService.add(idWell, formData)
|
||||
onDone?.(formData)
|
||||
form.resetFields()
|
||||
},
|
||||
setIsLoading,
|
||||
'Не удалось сохранить суточный рапорт',
|
||||
'Сохранение суточного рапорта',
|
||||
), [data, onDone, idWell, form])
|
||||
|
||||
const onDateChange = useCallback((date) => invokeWebApiWrapperAsync(
|
||||
async () => {
|
||||
if (data) return
|
||||
const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z')
|
||||
if (checkIsDateBusy(moment(newData.reportDate)))
|
||||
throw new Error('Рапорт на данную дату уже существует')
|
||||
setFields(newData)
|
||||
},
|
||||
setIsLoading,
|
||||
(e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`,
|
||||
'Получение автозаполняемых данных суточного рапорта',
|
||||
), [idWell, data, setFields, checkIsDateBusy])
|
||||
|
||||
return (
|
||||
<Modal
|
||||
centered
|
||||
width={1200}
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
okText={'Сохранить'}
|
||||
title={data ?
|
||||
<>Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName}</> :
|
||||
<>Новая cуточная сводка бурения скважины</>
|
||||
}
|
||||
onOk={form.submit}
|
||||
okButtonProps={{
|
||||
disabled: isInvalid,
|
||||
loading: isLoading,
|
||||
}}
|
||||
>
|
||||
<LoaderPortal show={isLoading}>
|
||||
<Form
|
||||
form={form}
|
||||
onFinish={onFormFinish}
|
||||
onChange={onFormChange}
|
||||
|
||||
>
|
||||
|
||||
<Tabs defaultActiveKey="1" onChange={onChange}>
|
||||
<TabPane tab="Заголовок" key="1">
|
||||
<div>Имя скважины:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Имя кластера:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Заказчик:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Подрядчик:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Дата рапорта:</div>
|
||||
<DatePicker
|
||||
disabled={!!data}
|
||||
format={'DD.MM.YYYY'}
|
||||
onChange={onDateChange}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя на дату начала интервала:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя на дату окончания интервала:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя по стволу на окончание отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя по вертикали на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Зенитный угол на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Азимутальный угол на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>ФИО бурильщиков:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>ФИО бурильщиков:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы АПД:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы спин мастер:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы torqueMaster:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным АПД:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным Спин мастер:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным torqueMaster:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество запусков МСЕ:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
</TabPane>
|
||||
<TabPane tab="КНБК" key="2">
|
||||
<div>КНБК описание:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2195-2763м. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2195-2763м. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Промывка. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Промывка. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Подьем КНБК. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Подьем КНБК. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Спуск КНБК. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2763-2850м. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2763-2850м. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
</TabPane>
|
||||
<TabPane tab="Безметражные работы" key="3">
|
||||
<div>Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Нормативное время на одну операцию по наращиванию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<Divider /><div>Фактическое время проработок при подготовке ствола скважины к наращиванию.:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Фактическое время наращиваний:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
</TabPane>
|
||||
<TabPane tab="Баланс времени" key="4">
|
||||
<div>Бурение:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>Промывка:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Наращивание:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Проработка:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Расширка:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Ремонт:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>КНБК:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>СПО:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПЗР:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПВО:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПГР:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ГИС:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ОЗЦ:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Тех.работы:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Снятие замера:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Цементирование:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Простой:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>НПВ:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
</TabPane>
|
||||
<TabPane tab="САУБ" key="5">
|
||||
<div>Режимы бурения на роторе:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>Режимы бурения на слайде:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Количество метров пробуренных в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество часов бурения в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Средний диф. перепад в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество метров пробуренных в слайде за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Время бурения в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Средний диф. перепад в слайде за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Плановая МСП за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Общее время бурения за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Общая проходка за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество наращиваний за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Отклонение относительно ГГД:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Указываются все причины, которые влияют на снижение МСП.:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
</TabPane>
|
||||
<TabPane tab="Подписи" key="6">
|
||||
<div>ФИО Мастера буровой:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>ФИО супервайзера:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
|
||||
{/* <Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}>
|
||||
<DatePicker
|
||||
disabled={!!data}
|
||||
format={'DD.MM.YYYY'}
|
||||
onChange={onDateChange}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
</Item>
|
||||
<Divider />
|
||||
<Space direction={'vertical'} size={'middle'} style={{ width: '100%' }}>
|
||||
<Item name={'customer'} label={'Заказчк'}><Input /></Item>
|
||||
<Item name={'contractor'} label={'Подрядчик'}><Input /></Item>
|
||||
<Table
|
||||
bordered
|
||||
size={'small'}
|
||||
columns={table1Columns}
|
||||
dataSource={[{ key: '', disabled: !!data, onChange: onDateChange, checkIsDateBusy }]}
|
||||
pagination={false}
|
||||
/>
|
||||
<Item label={'Бурильщик 1 смена'} name={'firstDriller'}><Input /></Item>
|
||||
<Item label={'Бурильщик 2 смена'} name={'secondDriller'}><Input /></Item>
|
||||
|
||||
<Table
|
||||
bordered
|
||||
size={'small'}
|
||||
columns={table2Columns}
|
||||
dataSource={table2Data}
|
||||
summary={table2Summary}
|
||||
pagination={false}
|
||||
/>
|
||||
|
||||
<Item name={'bhaDescription'} label={'Описание КНБК'}>
|
||||
<Input.TextArea rows={4} />
|
||||
</Item>
|
||||
|
||||
<Table bordered size={'small'} columns={table6Columns} dataSource={table6Data} pagination={false} summary={table6Summary} />
|
||||
|
||||
<Descriptions column={1} size={'small'} bordered>
|
||||
<Descriptions.Item label={'Бурение в роторе:'}>
|
||||
<Item name={'rotorDrillingModes'}>
|
||||
<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} />
|
||||
<Table bordered size={'small'} columns={table4Columns} dataSource={table4Data} pagination={false} />
|
||||
|
||||
<Item label={'Плановая мех скорость'} name={'sectionROPPlan'}>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
</Item>
|
||||
|
||||
<Descriptions bordered size={'small'} column={1}>
|
||||
<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>
|
||||
|
||||
<Item name={'declinesReasonsROP'} label={'Примечание:'}>
|
||||
<Input.TextArea rows={4} />
|
||||
</Item>
|
||||
|
||||
<Item label={'Мастер буровой'} name={'drillingMaster'}><Input /></Item>
|
||||
<Item label={'Супервайзер'} name={'supervisor'}><Input /></Item>
|
||||
</Space> */}
|
||||
</Form>
|
||||
</LoaderPortal>
|
||||
</Modal>
|
||||
)
|
||||
})
|
||||
|
||||
export default ReportEditor
|
@ -7,10 +7,17 @@ import LoaderPortal from '@components/LoaderPortal'
|
||||
import { invokeWebApiWrapperAsync } from '@components/factory'
|
||||
import { makeColumn, makeGroupColumn } from '@components/Table'
|
||||
import { DailyReportService } from '@api'
|
||||
import { Tabs } from 'antd'
|
||||
|
||||
|
||||
|
||||
const { Item: RawItem } = Form
|
||||
const { Summary } = Table
|
||||
const { TabPane } = Tabs;
|
||||
|
||||
const onChange = (key) => {
|
||||
console.log(key);
|
||||
};
|
||||
|
||||
const Item = memo(({ style, ...other }) => <RawItem style={{ margin: 0, ...style }} {...other} />)
|
||||
|
||||
@ -198,8 +205,205 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
|
||||
form={form}
|
||||
onFinish={onFormFinish}
|
||||
onChange={onFormChange}
|
||||
|
||||
>
|
||||
<Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}>
|
||||
|
||||
<Tabs defaultActiveKey="1" onChange={onChange}>
|
||||
<TabPane tab="Заголовок" key="1">
|
||||
<div>Имя скважины:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Имя кластера:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Заказчик:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Подрядчик:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Дата рапорта:</div>
|
||||
<DatePicker
|
||||
disabled={!!data}
|
||||
format={'DD.MM.YYYY'}
|
||||
onChange={onDateChange}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя на дату начала интервала:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя на дату окончания интервала:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя по стволу на окончание отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Глубина забоя по вертикали на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Зенитный угол на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Азимутальный угол на дату окончания отчетного периода:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>ФИО бурильщиков:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>ФИО бурильщиков:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы АПД:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы спин мастер:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Время работы torqueMaster:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным АПД:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным Спин мастер:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество метров пробуренных с включенным torqueMaster:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
<Divider />
|
||||
<div>Количество запусков МСЕ:</div>
|
||||
<InputNumber style={{ width: '100%' }}
|
||||
/>
|
||||
</TabPane>
|
||||
<TabPane tab="КНБК" key="2">
|
||||
<div>КНБК описание:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2195-2763м. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2195-2763м. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Промывка. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Промывка. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Подьем КНБК. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Подьем КНБК. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Спуск КНБК. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2763-2850м. Время начала:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/><Divider /><div>Бурение с наращиваниями в инт. 2763-2850м. Время окончания:</div>
|
||||
<Input.TextArea rows={1}
|
||||
/>
|
||||
</TabPane>
|
||||
<TabPane tab="Безметражные работы" key="3">
|
||||
<div>Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Нормативное время на одну операцию по наращиванию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<Divider /><div>Фактическое время проработок при подготовке ствола скважины к наращиванию.:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Фактическое время наращиваний:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
</TabPane>
|
||||
<TabPane tab="Баланс времени" key="4">
|
||||
<div>Бурение:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>Промывка:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Наращивание:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Проработка:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Расширка:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Ремонт:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>КНБК:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>СПО:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПЗР:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПВО:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ПГР:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ГИС:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>ОЗЦ:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Тех.работы:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Снятие замера:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Цементирование:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>Простой:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
<div>НПВ:</div>
|
||||
<Input.TextArea rows={1}/><Divider />
|
||||
</TabPane>
|
||||
<TabPane tab="САУБ" key="5">
|
||||
<div>Режимы бурения на роторе:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>Режимы бурения на слайде:</div>
|
||||
<InputNumber style={{ width: '100%' }}/>
|
||||
<Divider /><div>Количество метров пробуренных в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество часов бурения в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Средний диф. перепад в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество метров пробуренных в слайде за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Время бурения в роторе за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Средний диф. перепад в слайде за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Плановая МСП за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Общее время бурения за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Общая проходка за секцию:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Количество наращиваний за отчетный период:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Отклонение относительно ГГД:</div>
|
||||
<InputNumber style={{ width: '100%' }}/><Divider />
|
||||
<div>Указываются все причины, которые влияют на снижение МСП.:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
</TabPane>
|
||||
<TabPane tab="Подписи" key="6">
|
||||
<div>ФИО Мастера буровой:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
<Divider /><div>ФИО супервайзера:</div>
|
||||
<Input.TextArea rows={1}/>
|
||||
</TabPane>
|
||||
</Tabs>
|
||||
|
||||
{/* <Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}>
|
||||
<DatePicker
|
||||
disabled={!!data}
|
||||
format={'DD.MM.YYYY'}
|
||||
@ -209,7 +413,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
|
||||
</Item>
|
||||
<Divider />
|
||||
<Space direction={'vertical'} size={'middle'} style={{ width: '100%' }}>
|
||||
<Item name={'customer'} label={'Заказчик'}><Input /></Item>
|
||||
<Item name={'customer'} label={'Заказчк'}><Input /></Item>
|
||||
<Item name={'contractor'} label={'Подрядчик'}><Input /></Item>
|
||||
<Table
|
||||
bordered
|
||||
@ -285,7 +489,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
|
||||
|
||||
<Item label={'Мастер буровой'} name={'drillingMaster'}><Input /></Item>
|
||||
<Item label={'Супервайзер'} name={'supervisor'}><Input /></Item>
|
||||
</Space>
|
||||
</Space> */}
|
||||
</Form>
|
||||
</LoaderPortal>
|
||||
</Modal>
|
||||
|
Loading…
Reference in New Issue
Block a user