From 46dddceae480891ca3535e873566fa125f7adccc Mon Sep 17 00:00:00 2001 From: cult Date: Thu, 28 Oct 2021 15:46:18 +0500 Subject: [PATCH 1/4] Changed Drilling program downloading to opening it for view in new tab --- src/pages/Documents/DrillingProgram.jsx | 16 ++++++++++------ .../api/services/DrillingProgramService.ts | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pages/Documents/DrillingProgram.jsx b/src/pages/Documents/DrillingProgram.jsx index 4c23f49..23f8fe9 100644 --- a/src/pages/Documents/DrillingProgram.jsx +++ b/src/pages/Documents/DrillingProgram.jsx @@ -1,11 +1,11 @@ import {Button, Tooltip} from 'antd' import { FileExcelOutlined } from '@ant-design/icons' import { useEffect, useState } from "react" -import {invokeWebApiWrapperAsync, download} from '../../components/factory' +import {invokeWebApiWrapperAsync} from '../../components/factory' import DocumentsTemplate from './DocumentsTemplate' import LoaderPortal from '../../components/LoaderPortal' import { Flex } from '../../components/Grid' -import { WellService } from '../../services/api' +import {DrillingProgramService, WellService} from '../../services/api' const idFileCategoryDrillingProgramItems = 13; @@ -24,11 +24,15 @@ export default function DrillingProgram({idWell}) { `Не удалось загрузить название скважины "${idWell}"` ), [idWell]) - const urlDownloadProgram =`/api/well/${idWell}/drillingProgram` + //const urlDownloadProgram =`/api/well/${idWell}/drillingProgram` const downloadProgram = () => invokeWebApiWrapperAsync(async()=>{ - await download(urlDownloadProgram) - }, + //await download(urlDownloadProgram) + // Это временный функционал по просмотру программы бурения без скачивания. + // Наверняка его попросят убрать и нужно вернуть закомменченое скачивание файла выше. + var filWebUrl = await DrillingProgramService.get(idWell) + window.open(filWebUrl, '_blank') + }, setShowLoader, "Не удалось загрузить программу бурения") @@ -56,7 +60,7 @@ export default function DrillingProgram({idWell}) { type="primary" onClick={downloadProgram} disabled={!downloadButtonEnabled}> - Сформировать и скачать + Сформировать и просмотреть diff --git a/src/services/api/services/DrillingProgramService.ts b/src/services/api/services/DrillingProgramService.ts index 9aaaea1..284346c 100644 --- a/src/services/api/services/DrillingProgramService.ts +++ b/src/services/api/services/DrillingProgramService.ts @@ -6,7 +6,8 @@ import { request as __request } from '../core/request'; export class DrillingProgramService { /** - * @param idWell + * Создает программу бурения + * @param idWell id скважины * @returns string Success * @throws ApiError */ From dc53a0d0b2167e8b6d6a4dc263d64d17836080b1 Mon Sep 17 00:00:00 2001 From: cult Date: Thu, 28 Oct 2021 17:00:30 +0500 Subject: [PATCH 2/4] Added 'Watch drilling program preview' button --- src/pages/Documents/DrillingProgram.jsx | 30 ++++++++++++++----- .../api/services/DrillingProgramService.ts | 16 ++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/pages/Documents/DrillingProgram.jsx b/src/pages/Documents/DrillingProgram.jsx index 23f8fe9..a06240d 100644 --- a/src/pages/Documents/DrillingProgram.jsx +++ b/src/pages/Documents/DrillingProgram.jsx @@ -1,7 +1,7 @@ import {Button, Tooltip} from 'antd' import { FileExcelOutlined } from '@ant-design/icons' import { useEffect, useState } from "react" -import {invokeWebApiWrapperAsync} from '../../components/factory' +import {invokeWebApiWrapperAsync, download} from '../../components/factory' import DocumentsTemplate from './DocumentsTemplate' import LoaderPortal from '../../components/LoaderPortal' import { Flex } from '../../components/Grid' @@ -24,18 +24,24 @@ export default function DrillingProgram({idWell}) { `Не удалось загрузить название скважины "${idWell}"` ), [idWell]) - //const urlDownloadProgram =`/api/well/${idWell}/drillingProgram` + const urlDownloadProgram =`/api/well/${idWell}/drillingProgram` const downloadProgram = () => invokeWebApiWrapperAsync(async()=>{ - //await download(urlDownloadProgram) - // Это временный функционал по просмотру программы бурения без скачивания. - // Наверняка его попросят убрать и нужно вернуть закомменченое скачивание файла выше. - var filWebUrl = await DrillingProgramService.get(idWell) - window.open(filWebUrl, '_blank') + await download(urlDownloadProgram) }, setShowLoader, "Не удалось загрузить программу бурения") + const openProgramPreview = () => invokeWebApiWrapperAsync(async()=>{ + var filWebUrl = await DrillingProgramService.getFileWebLink(idWell) + if(filWebUrl && filWebUrl.length) + window.open(filWebUrl, '_blank') + else + throw new Error() + }, + setShowLoader, + "Программа бурения еще не сформирована. Перед просмотром сначала сформируйте программу.") + const filesUpdated = (files) =>{ if(!files || files.length === 0){ setTooltip('Нет файлов для формирования программы') @@ -60,7 +66,7 @@ export default function DrillingProgram({idWell}) { type="primary" onClick={downloadProgram} disabled={!downloadButtonEnabled}> - Сформировать и просмотреть + Сформировать и скачать @@ -72,6 +78,14 @@ export default function DrillingProgram({idWell}) { Программа бурения {wellLabel}.xlsx + + + diff --git a/src/services/api/services/DrillingProgramService.ts b/src/services/api/services/DrillingProgramService.ts index 284346c..22d5db4 100644 --- a/src/services/api/services/DrillingProgramService.ts +++ b/src/services/api/services/DrillingProgramService.ts @@ -21,4 +21,20 @@ export class DrillingProgramService { return result.body; } + /** + * Возвращает ссылку на файл программы бурения в облаке + * @param idWell id скважины + * @returns string Success + * @throws ApiError + */ + public static async getFileWebLink( + idWell: number, + ): Promise { + const result = await __request({ + method: 'GET', + path: `/api/well/${idWell}/drillingProgram/webUrl`, + }); + return result.body; + } + } \ No newline at end of file From d93f1671fd763fadf060d89edd46e10525bdd984 Mon Sep 17 00:00:00 2001 From: cult Date: Fri, 29 Oct 2021 12:56:03 +0500 Subject: [PATCH 3/4] Fixed Drilling program preview url getting --- src/pages/Documents/DrillingProgram.jsx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/pages/Documents/DrillingProgram.jsx b/src/pages/Documents/DrillingProgram.jsx index a06240d..09adc6c 100644 --- a/src/pages/Documents/DrillingProgram.jsx +++ b/src/pages/Documents/DrillingProgram.jsx @@ -33,14 +33,11 @@ export default function DrillingProgram({idWell}) { "Не удалось загрузить программу бурения") const openProgramPreview = () => invokeWebApiWrapperAsync(async()=>{ - var filWebUrl = await DrillingProgramService.getFileWebLink(idWell) - if(filWebUrl && filWebUrl.length) - window.open(filWebUrl, '_blank') - else - throw new Error() + const filWebUrl = await DrillingProgramService.getFileWebLink(idWell) + window.open(filWebUrl, '_blank') }, setShowLoader, - "Программа бурения еще не сформирована. Перед просмотром сначала сформируйте программу.") + "Не удалось создать быстрый просмотр программы") const filesUpdated = (files) =>{ if(!files || files.length === 0){ @@ -83,7 +80,7 @@ export default function DrillingProgram({idWell}) { type="primary" onClick={openProgramPreview} disabled={!downloadButtonEnabled}> - Просмотреть программу бурения + Сформировать и просмотреть From b87c7a750ba788274d05a2fb22a00bf3034253c4 Mon Sep 17 00:00:00 2001 From: goodmice Date: Fri, 29 Oct 2021 18:04:14 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=A8=D0=B8=D1=80=D0=B8=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=BB=D0=B1=D0=BE=D0=B2=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=20rem.=20=D0=94?= =?UTF-8?q?=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D0=B0=D1=82=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D1=82=D1=8B=20=D1=81=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20=D1=83=D0=B4=D0=B0=D0=BB=D1=91=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Messages.jsx | 20 ++++++--- .../TelemetryView/ActiveMessagesOnline.jsx | 43 ++----------------- 2 files changed, 16 insertions(+), 47 deletions(-) diff --git a/src/pages/Messages.jsx b/src/pages/Messages.jsx index 20603c5..366206b 100644 --- a/src/pages/Messages.jsx +++ b/src/pages/Messages.jsx @@ -14,38 +14,44 @@ const { Search } = Input // Словарь категорий для строк таблицы const categoryDictionary = { - 1: {title: 'Авария'}, + 1: {title: 'Важное'}, 2: {title: 'Предупреждение'}, 3: {title: 'Информация'}, } -const columns = [ +// Конфигурация таблицы +export const columns = [ { - width: '10%', + width: '10rem', title: 'Дата', key: 'date', dataIndex: 'date', render: item => moment(item).format('DD MMM YYYY, HH:mm:ss'), + sorter: (a, b) => new Date(b.date) - new Date(a.date), + sortDirections: ['descend', 'ascend'], }, { - width: '10%', + width: '10rem', title: 'Глубина', key: 'wellDepth', dataIndex: 'wellDepth', render: depth => {depth.toFixed(2)} м., }, { - width: '10%', + width: '10rem', title: 'Категория', key: 'categoryId', dataIndex: 'categoryId', render: (_, item) => categoryDictionary[item.categoryId].title, - style: (_, item) => categoryDictionary[item.categoryId].style, + style: (_, item) => categoryDictionary[item.categoryId]?.style, + sorter: (a, b) => a.categoryId - b.categoryId, + sortDirections: ['descend', 'ascend'], ellipsis: true, }, { title: 'Сообщение', key: 'message', dataIndex: 'message', + onFilter: (value, record) => record.name.indexOf(value) === 0, }, { - width: '10%', + width: '10rem', title: 'Пользователь', key: 'user', dataIndex: 'user', diff --git a/src/pages/TelemetryView/ActiveMessagesOnline.jsx b/src/pages/TelemetryView/ActiveMessagesOnline.jsx index 73df56a..e112409 100644 --- a/src/pages/TelemetryView/ActiveMessagesOnline.jsx +++ b/src/pages/TelemetryView/ActiveMessagesOnline.jsx @@ -1,51 +1,14 @@ import {useState, useEffect} from 'react' -import {Table} from "antd"; -import moment from 'moment' +import {Table} from 'antd' import LoaderPortal from '../../components/LoaderPortal' import {invokeWebApiWrapperAsync} from '../../components/factory' +import {columns} from '../Messages' import {Subscribe} from '../../services/signalr' import {MessageService} from '../../services/api' import '../../styles/message.css' -// Словарь категорий для строк таблицы -const categoryDictionary = { - 1: {title: 'Важное'}, - 2: {title: 'Предупреждение'}, - 3: {title: 'Информация'}, -} - -// Конфигурация таблицы -const columns = [ - { - title: 'Дата', - dataIndex: 'date', - render: (item) => moment(item).format('DD MMM YYYY, HH:mm:ss'), - sorter: (a, b) => new Date(b.date) - new Date(a.date), - sortDirections: ['descend', 'ascend'], - }, { - title: 'Глубина', - key: 'wellDepth', - dataIndex: 'wellDepth', - render: depth => Глубина {depth.toFixed(2)} м., - }, { - title: 'Категория', - dataIndex: 'categoryId', - render: (_, item) => categoryDictionary[item.categoryId]?.title, - style: (_, item) => categoryDictionary[item.categoryId]?.style, - sorter: (a, b) => a.categoryId - b.categoryId, - sortDirections: ['descend', 'ascend'], - }, { - title: 'Сообщение', - dataIndex: 'message', - onFilter: (value, record) => record.name.indexOf(value) === 0, - }, { - title: 'Пользователь', - dataIndex: 'user', - }, -]; - export default function ActiveMessagesOnline({idWell}) { const [messages, setMessages] = useState([]) const [loader, setLoader] = useState(false) @@ -56,7 +19,7 @@ export default function ActiveMessagesOnline({idWell}) { } } - useEffect(() => { + useEffect(() => { invokeWebApiWrapperAsync( async () => { const messages = await MessageService.getMessages(idWell, 0, 4)