редактор секций скважины

This commit is contained in:
Фролов 2021-08-12 15:43:03 +05:00
parent 07dea346dc
commit 5a9f28740a
6 changed files with 153 additions and 79 deletions

View File

@ -5,10 +5,11 @@ export const RegExpIsFloat = /^[-+]?\d+\.?\d?$/
поддерживаются все базовые свойства из описания https://ant.design/components/table/#Column поддерживаются все базовые свойства из описания https://ant.design/components/table/#Column
плю дополнительные для колонок EditableTable: плю дополнительные для колонок EditableTable:
editable - редактируемая колонка, bool editable - редактируемая колонка, bool
input - react компонента редактора (<Inpet/>, <InpetNumber/>, <DatePicker/>...) input - react компонента редактора (<Input/>, <InputNumber/>, <DatePicker/>...)
isRequired - значение может быть пустым, isRequired - значение может быть пустым,
formItemClass - css класс для <FormItem/>, если требуется formItemClass - css класс для <FormItem/>, если требуется
formItemRules - массив правил валидации значений https://ant.design/components/form/#Rule, formItemRules - массив правил валидации значений https://ant.design/components/form/#Rule,
initialValue - дефолтное значение при добавлении новой строки
*/ */
export const makeColumn = (title:string, key:string, other?:any) => ({ export const makeColumn = (title:string, key:string, other?:any) => ({
title: title, title: title,
@ -45,3 +46,13 @@ export const makeColumnsPlanFact = (title:string, key:string|string[], columsOth
] ]
} }
} }
// const makePaginationObject = (paginationContainer, ...other) =>{
// let page = 1 + Math.floor(paginationContainer.skip/paginationContainer.take);
// return {
// ...other,
// pageSize: paginationContainer.take,
// total: paginationContainer.total,
// current: page,
// }
// }

View File

@ -52,13 +52,11 @@ export default function Deposit() {
<Overlay <Overlay
width={32} width={32}
anchor={[cluster.latitude, cluster.longitude]} anchor={[cluster.latitude, cluster.longitude]}
key={`${cluster.latitude} ${cluster.longitude}`} key={`${cluster.latitude} ${cluster.longitude}`}>
>
<Link to={`/cluster/${cluster.id}`}> <Link to={`/cluster/${cluster.id}`}>
<img width={40} src={pointer} alt="+"/> <img width={40} src={pointer} alt="+"/>
<span>{cluster.caption}</span> <span>{cluster.caption}</span>
</Link> </Link>
</Overlay >) </Overlay >)
return ( return (

View File

@ -4,78 +4,126 @@ import {makeColumn, makeColumnsPlanFact, RegExpIsFloat} from '../components/fact
import {WellSectionService} from '../services/api' import {WellSectionService} from '../services/api'
import notify from '../components/notify' import notify from '../components/notify'
import { EditableTable } from '../components/EditableTable'; import { EditableTable } from '../components/EditableTable';
import { Input } from 'antd'
const columns = [ const TypeSelector = <Input list={'sectionTypeList'}/>
makeColumn('Конструкция секции', 'sectionType', {editable:true}),
makeColumnsPlanFact('Глубина, м', 'wellDepth', {editable:true, formItemRules:[ const DataListSectionTypes = <datalist id="sectionTypeList">
<option value="Пилотный ствол">Пилотный ствол</option>
<option value="Направление">Направление</option>
<option value="Кондуктор">Кондуктор</option>
<option value="Эксплуатационная колонна">Эксплуатационная колонна</option>
<option value="Транспортный ствол">Транспортный ствол</option>
<option value="Хвостовик">Хвостовик</option>
</datalist>
const numericColumnOptions = {
editable: true,
initialValue: 0,
formItemRules: [
{ {
required: true, required: true,
message: `Введите число`, message: `Введите число`,
pattern: RegExpIsFloat pattern: RegExpIsFloat,
}]}), },
makeColumnsPlanFact('Период, д', 'buildDays', {editable:true}), ],
makeColumnsPlanFact('Механическая скорость проходки, м/час', 'rateOfPenetration', {editable:true}), };
makeColumnsPlanFact('Рейсовая скорость, м/час', 'routeSpeed', {editable:true}),
makeColumnsPlanFact('Скорость подъема КНБК', 'bhaUpSpeed', {editable:true}), const columns = [
makeColumnsPlanFact('Скорость спуска КНБК', 'bhaDownSpeed', {editable:true}), makeColumn('Конструкция секции', 'sectionType', {editable:true, input:TypeSelector}),
makeColumnsPlanFact('Скорость спуска обсадной колонны', 'casingDownSpeed', {editable:true}), makeColumnsPlanFact('Глубина, м', 'wellDepth', numericColumnOptions),
makeColumnsPlanFact('Период, д', 'buildDays', numericColumnOptions),
makeColumnsPlanFact('Механическая скорость проходки, м/час', 'rateOfPenetration', numericColumnOptions),
makeColumnsPlanFact('Рейсовая скорость, м/час', 'routeSpeed', numericColumnOptions),
makeColumnsPlanFact('Скорость подъема КНБК', 'bhaUpSpeed', numericColumnOptions),
makeColumnsPlanFact('Скорость спуска КНБК', 'bhaDownSpeed', numericColumnOptions),
makeColumnsPlanFact('Скорость спуска обсадной колонны', 'casingDownSpeed', numericColumnOptions),
] ]
// const data = [{ const runAsyncFunc = async (funcAsync, setShowLoader, errorNotifyText) => {
// key:1, if(setShowLoader)
// sectionType: 'загагулина', setShowLoader(true)
// wellDepthPlan: 1, try{
// wellDepthFact: 1, await funcAsync()
// buildDaysPlan: 1, } catch (ex) {
// buildDaysFact: 1, if(process.env.NODE_ENV === 'development')
// rateOfPenetrationPlan: 4, console.log(ex)
// rateOfPenetrationFact: 3, if(errorNotifyText)
// routeSpeedPlan: 2, notify(errorNotifyText, 'error')
// routeSpeedFact: 1, } finally{
// bhaUpSpeedPlan: 1, if(setShowLoader)
// bhaUpSpeedFact: 1, setShowLoader(false)
// bhaDownSpeedPlan: 1, }
// bhaDownSpeedFact: 1, }
// casingDownSpeedPlan: 1,
// casingDownSpeedFact: 1,
// }]
export default function WellStat({idWell}){ export default function WellStat({idWell}){
const [showLoader, setShowLoader] = useState(false) const [showLoader, setShowLoader] = useState(false)
const [data, setData] = useState({}) const [items, setItems] = useState([])
useEffect(()=>{ const addKeysAndUpdateStateData = (items) =>{
const update = async()=>{ const keyedItems = items?.map(item => ({...item, key:item.id}))??[]
setShowLoader(true) setItems(keyedItems)
try{ }
const data = await WellSectionService.getAll(idWell,0,1024)
setData(data); useEffect(() => {
} catch (ex) { runAsyncFunc(
console.log(ex) async () => {
notify(`Не удалось загрузить секции по скважине "${idWell}"`, 'error') const paginationContainer = await WellSectionService.getAll(idWell, 0, 1024)
} finally{ addKeysAndUpdateStateData(paginationContainer.items)
setShowLoader(false) },
} setShowLoader,
} `Не удалось загрузить секции по скважине "${idWell}"`)
update();
} ,[idWell]) } ,[idWell])
const onChange = (newData) =>{ const onAdd = (item) => {
setData(newData) runAsyncFunc(
async () => {
const updatedItems = await WellSectionService.insert(idWell, [item])
const newItems = [...items, ...updatedItems]
addKeysAndUpdateStateData(newItems)
},
setShowLoader,
`Не удалось добавить секцию в скважину "${idWell}"`)
}
const onEdit = (item) => {
runAsyncFunc(
async () => {
const updatedItem = await WellSectionService.update(idWell, item.id, item)
const newItems = [...items]
const index = newItems.findIndex((i) => item.key === i.key)
newItems.splice(index, 1, updatedItem)
addKeysAndUpdateStateData(newItems)
},
setShowLoader,
`Не удалось изменить секцию в скважине "${idWell}"`)
}
const onDelete = (item) =>{
runAsyncFunc(
async () => {
await WellSectionService.delete(idWell, [item.id])
const newItems = [...items]
const index = newItems.findIndex((i) => item.key === i.key)
newItems.splice(index, 1)
addKeysAndUpdateStateData(newItems)
},
setShowLoader,
`Не удалось удалить секцию из скважины "${idWell}"`)
} }
return( return(
<LoaderPortal show={showLoader}> <LoaderPortal show={showLoader}>
<EditableTable <EditableTable
columns={columns} columns={columns}
dataSource={data.items} dataSource={items}
size={'small'} size={'small'}
bordered bordered
pagination={false} pagination={false}
onChange={onChange} onRowAdd={onAdd}
onRowAdd={()=>{}} onRowEdit={onEdit}
onRowEdit={()=>{}} onRowDelete={onDelete}
onRowDelete={()=>{}}
/> />
{DataListSectionTypes}
</LoaderPortal>) </LoaderPortal>)
} }

View File

@ -36,7 +36,8 @@ approxPointsCount: number = 1024,
} }
/** /**
* @param idWell * Возвращает диапазон дат сохраненных данных.
* @param idWell id скважины
* @returns DatesRangeDto Success * @returns DatesRangeDto Success
* @throws ApiError * @throws ApiError
*/ */

View File

@ -15,11 +15,11 @@ export class MessageService {
* @param categoryids список категорий * @param categoryids список категорий
* @param begin дата начала * @param begin дата начала
* @param end окончание * @param end окончание
* @param searchString * @param searchString Строка поиска
* @returns MessageDtoPaginationContainer Success * @returns MessageDtoPaginationContainer Success
* @throws ApiError * @throws ApiError
*/ */
public static async getMessage( public static async getMessages(
idWell: number, idWell: number,
skip: number, skip: number,
take: number = 32, take: number = 32,
@ -44,7 +44,8 @@ searchString?: string,
} }
/** /**
* @param idWell * Выдает список сообщений по скважине
* @param idWell id скважины
* @returns DatesRangeDto Success * @returns DatesRangeDto Success
* @throws ApiError * @throws ApiError
*/ */

View File

@ -6,18 +6,33 @@ import { request as __request } from '../core/request';
export class WellSectionService { export class WellSectionService {
/**
* @param idWell
* @returns string Success
* @throws ApiError
*/
public static async getTypes(
idWell: string,
): Promise<Array<string>> {
const result = await __request({
method: 'GET',
path: `/api/well/${idWell}/sections/types`,
});
return result.body;
}
/** /**
* @param idWell * @param idWell
* @param skip * @param skip
* @param take * @param take
* @returns any Success * @returns WellSectionDto Success
* @throws ApiError * @throws ApiError
*/ */
public static async getAll( public static async getAll(
idWell: number, idWell: number,
skip: number, skip: number,
take: number = 32, take: number = 32,
): Promise<any> { ): Promise<Array<WellSectionDto>> {
const result = await __request({ const result = await __request({
method: 'GET', method: 'GET',
path: `/api/well/${idWell}/sections`, path: `/api/well/${idWell}/sections`,
@ -32,13 +47,13 @@ take: number = 32,
/** /**
* @param idWell * @param idWell
* @param requestBody * @param requestBody
* @returns any Success * @returns WellSectionDto Success
* @throws ApiError * @throws ApiError
*/ */
public static async insert( public static async insert(
idWell: number, idWell: number,
requestBody?: Array<WellSectionDto>, requestBody?: Array<WellSectionDto>,
): Promise<any> { ): Promise<Array<WellSectionDto>> {
const result = await __request({ const result = await __request({
method: 'POST', method: 'POST',
path: `/api/well/${idWell}/sections`, path: `/api/well/${idWell}/sections`,
@ -48,15 +63,15 @@ requestBody?: Array<WellSectionDto>,
} }
/** /**
* @param idSection
* @param idWell * @param idWell
* @returns any Success * @param idSection
* @returns WellSectionDto Success
* @throws ApiError * @throws ApiError
*/ */
public static async get( public static async get(
idSection: number,
idWell: number, idWell: number,
): Promise<any> { idSection: number,
): Promise<WellSectionDto> {
const result = await __request({ const result = await __request({
method: 'GET', method: 'GET',
path: `/api/well/${idWell}/sections/${idSection}`, path: `/api/well/${idWell}/sections/${idSection}`,
@ -65,38 +80,38 @@ idWell: number,
} }
/** /**
* @param id
* @param idWell * @param idWell
* @param idSection
* @param requestBody * @param requestBody
* @returns any Success * @returns WellSectionDto Success
* @throws ApiError * @throws ApiError
*/ */
public static async put( public static async update(
id: number,
idWell: number, idWell: number,
idSection: number,
requestBody?: WellSectionDto, requestBody?: WellSectionDto,
): Promise<any> { ): Promise<WellSectionDto> {
const result = await __request({ const result = await __request({
method: 'PUT', method: 'PUT',
path: `/api/well/${idWell}/sections/${id}`, path: `/api/well/${idWell}/sections/${idSection}`,
body: requestBody, body: requestBody,
}); });
return result.body; return result.body;
} }
/** /**
* @param id
* @param idWell * @param idWell
* @returns any Success * @param idSection
* @returns number Success
* @throws ApiError * @throws ApiError
*/ */
public static async delete( public static async delete(
id: number,
idWell: number, idWell: number,
): Promise<any> { idSection: number,
): Promise<number> {
const result = await __request({ const result = await __request({
method: 'DELETE', method: 'DELETE',
path: `/api/well/${idWell}/sections/${id}`, path: `/api/well/${idWell}/sections/${idSection}`,
}); });
return result.body; return result.body;
} }