forked from ddrilling/asb_cloud_front
fix file search by name
This commit is contained in:
parent
c8d184c590
commit
c8c06f46e7
@ -85,4 +85,13 @@ export const upload = async (url:string, formData: FormData) => {
|
||||
method: 'Post',
|
||||
body: formData,
|
||||
})
|
||||
}
|
||||
|
||||
export const formatBytes = (bytes:number) => {
|
||||
if(bytes < 1024)
|
||||
return `${bytes.toFixed(0)}b`
|
||||
if(bytes < 1024*1024)
|
||||
return `${(bytes/1024).toFixed(2)}kb`
|
||||
else
|
||||
return `${(bytes/1024/1024).toFixed(2)}Mb`
|
||||
}
|
@ -5,10 +5,12 @@ import { FileService } from "../../services/api"
|
||||
import {
|
||||
invokeWebApiWrapperAsync,
|
||||
download,
|
||||
formatBytes,
|
||||
} from "../../components/factory"
|
||||
import { EditableTable, makePaginationObject } from "../../components/Table"
|
||||
import UploadForm from "../../components/UploadForm"
|
||||
import LoaderPortal from "../../components/LoaderPortal"
|
||||
import {UserView} from '../../components/UserView'
|
||||
|
||||
const pageSize = 12
|
||||
const { RangePicker } = DatePicker
|
||||
@ -17,7 +19,7 @@ const { Search } = Input
|
||||
export default function DocumentsTemplate({ idCategory, idWell }) {
|
||||
const [page, setPage] = useState(1)
|
||||
const [filterDataRange, setFilterDataRange] = useState([])
|
||||
const [filterCompany, setFilterCompany] = useState([])
|
||||
const [filterCompaniesIds, setFilterCompany] = useState([])
|
||||
const [filterFileName, setFilterFileName] = useState('')
|
||||
const [pagination, setPagination] = useState(null)
|
||||
const [files, setFiles] = useState([])
|
||||
@ -66,13 +68,20 @@ export default function DocumentsTemplate({ idCategory, idWell }) {
|
||||
title: "Дата загрузки",
|
||||
key: "uploadDate",
|
||||
dataIndex: "uploadDate",
|
||||
render: (item) =>
|
||||
render: item =>
|
||||
moment.utc(item).local().format("DD MMM YYYY, HH:mm:ss"),
|
||||
},
|
||||
{
|
||||
title: "Ф.И.О.",
|
||||
key: "userName",
|
||||
dataIndex: "userName",
|
||||
title: "Размер",
|
||||
key: "size",
|
||||
dataIndex: "size",
|
||||
render: item => formatBytes(item)
|
||||
},
|
||||
{
|
||||
title: "Автор",
|
||||
key: "author",
|
||||
dataIndex: "author",
|
||||
render: item => <UserView user={item}/>
|
||||
},
|
||||
{
|
||||
title: "Компания",
|
||||
@ -101,12 +110,14 @@ export default function DocumentsTemplate({ idCategory, idWell }) {
|
||||
invokeWebApiWrapperAsync(
|
||||
async () => {
|
||||
const paginatedFiles = await FileService.getFilesInfo(
|
||||
idWell,
|
||||
idWell,
|
||||
idCategory,
|
||||
filterCompaniesIds,
|
||||
filterFileName,
|
||||
begin,
|
||||
end,
|
||||
(page - 1) * pageSize,
|
||||
pageSize,
|
||||
idCategory,
|
||||
begin,
|
||||
end
|
||||
)
|
||||
if (!paginatedFiles) return
|
||||
addKeysAndUpdateFiles(paginatedFiles?.items)
|
||||
@ -119,7 +130,7 @@ export default function DocumentsTemplate({ idCategory, idWell }) {
|
||||
)
|
||||
}
|
||||
|
||||
useEffect(update, [idWell, idCategory, page, filterDataRange, filterCompany, filterFileName])
|
||||
useEffect(update, [idWell, idCategory, page, filterDataRange, filterCompaniesIds, filterFileName])
|
||||
|
||||
const companies = [...new Set(files.map(file=>file.company))]
|
||||
.filter(company=>company)
|
||||
|
@ -1,132 +1,67 @@
|
||||
// import {Table, Button} from 'antd'
|
||||
// import {useEffect, useState} from 'react'
|
||||
// import { useParams } from "react-router-dom"
|
||||
// import FileInfo from '../components/FileInfo'
|
||||
// import UploadPlanFileForm from '../components/UploadPlanFileForm'
|
||||
// import { PlanService } from '../services/api'
|
||||
// import LoaderPortal from '../components/LoaderPortal'
|
||||
import {Table, Button} from 'antd'
|
||||
import {useEffect, useState} from 'react'
|
||||
import {invokeWebApiWrapperAsync, download} from '../components/factory'
|
||||
import { FileService } from '../services/api'
|
||||
import UploadForm from '../components/UploadForm'
|
||||
import LoaderPortal from '../components/LoaderPortal'
|
||||
|
||||
// const originData = [
|
||||
// {key: 1, category: 'Проект транспорт',},
|
||||
// {key: 2, category: 'Программа на бурение',},
|
||||
// {key: 3, category: 'Долотная программа',},
|
||||
// {key: 4, category: 'Программа промывки',},
|
||||
// {key: 5, category: 'Планы на спуски',},
|
||||
// {key: 6, category: 'График глубина день',},
|
||||
// {key: 7, category: 'Мероприятия по бурению скважины',},
|
||||
// ]
|
||||
const idFileCategoryDrillingProgramItems = 13;
|
||||
//const idFileCategoryDrillingProgram = 14;
|
||||
|
||||
export default function DrillingProgram() {
|
||||
return <div>Программа на бурение</div>
|
||||
// let { id } = useParams()
|
||||
// const [data, setData] = useState(originData)
|
||||
// const [isLoaderVisible, setIsLoaderVisible] = useState(true)
|
||||
const FileInfo = (fileInfo) => {
|
||||
return <div>{fileInfo?.name}</div>
|
||||
}
|
||||
|
||||
// const columns = [
|
||||
// {
|
||||
// title: '№',
|
||||
// dataIndex: 'key',
|
||||
// width: 50
|
||||
// },
|
||||
// {
|
||||
// title: 'Раздел',
|
||||
// dataIndex: 'category',
|
||||
// key: 'category',
|
||||
// width: 250
|
||||
// },
|
||||
// {
|
||||
// title: 'Файл',
|
||||
// dataIndex: 'fileInfo',
|
||||
// key: 'fileInfo',
|
||||
// render: (_, record) => record.fileInfo
|
||||
// ? <FileInfo idCategory={record.key} fileInfo={record.fileInfo} onUploadComplete={updateData}/>
|
||||
// : <UploadPlanFileForm idCategory={record.key} onUploadComplete={updateData}/>
|
||||
// },
|
||||
// {
|
||||
// title: 'Автор',
|
||||
// key: 'owner',
|
||||
// render: (_,record) => record.fileInfo?.owner
|
||||
// },
|
||||
// {
|
||||
// title: 'Дата загрузки',
|
||||
// key: 'uploadDate',
|
||||
// render: (_, record) => record.fileInfo ? new Date(record.fileInfo.uploadDate).toLocaleString() : ''
|
||||
// },
|
||||
// ]
|
||||
export default function DrillingProgram({idWell}) {
|
||||
const [data, setData] = useState([])
|
||||
const [showLoader, setShowLoader] = useState(false)
|
||||
|
||||
// const updateData = async () => {
|
||||
// let response = await PlanService.getFilesInfos(id)
|
||||
|
||||
// if(response) {
|
||||
const update = () => invokeWebApiWrapperAsync( async () => {
|
||||
const files = await FileService.getInfosByCategory(idWell, idFileCategoryDrillingProgramItems)
|
||||
setData(files??[])
|
||||
},setShowLoader,null)
|
||||
|
||||
// let newData = [...originData]
|
||||
// newData.forEach(item => {
|
||||
// let newFileInfo = response.find(f=>f.idCategory === item.key)
|
||||
// item.fileInfo = newFileInfo
|
||||
// })
|
||||
// setIsLoaderVisible(false)
|
||||
// setData(newData)
|
||||
// }
|
||||
// }
|
||||
useEffect(update, [idWell])
|
||||
|
||||
// useEffect(()=>{updateData()}, [])
|
||||
|
||||
// const downloadDrillingProgram = async () => {
|
||||
// setIsLoaderVisible(true)
|
||||
// try{
|
||||
// const response = await fetch(`/api/plan/${id}/drillingProgram`, {
|
||||
// headers: {
|
||||
// Authorization: 'Bearer ' + localStorage['token']
|
||||
// },
|
||||
// method: 'Get'
|
||||
// })
|
||||
// const blob = await response.blob()
|
||||
// const reader = new FileReader()
|
||||
// reader.readAsDataURL(blob)
|
||||
// reader.onload = function (e) {
|
||||
// let a = document.createElement('a')
|
||||
// a.href = e.target.result
|
||||
// a.download = "Программа бурения.xlsx"
|
||||
// document.body.appendChild(a) // we need to append the element to the dom -> otherwise it will not work in firefox
|
||||
// a.click()
|
||||
// a.remove()
|
||||
// }
|
||||
|
||||
// }catch(e){
|
||||
// console.log(e)
|
||||
// }
|
||||
// setIsLoaderVisible(false)
|
||||
// }
|
||||
|
||||
// const expandInfo = (fileInfo) => <p>
|
||||
// <span>Автор: {fileInfo.owner}</span>
|
||||
//     
|
||||
// <span>Дата загрузки: {new Date(fileInfo.uploadDate).toLocaleString()}</span>
|
||||
// </p>
|
||||
const columns = [
|
||||
{
|
||||
title: 'Файл',
|
||||
dataIndex: 'fileInfo',
|
||||
key: 'fileInfo',
|
||||
render: (_, record) => <FileInfo idCategory={record.key} fileInfo={record.fileInfo} onUploadComplete={update}/>
|
||||
},
|
||||
{
|
||||
title: 'Автор',
|
||||
key: 'owner',
|
||||
render: (_,record) => record.fileInfo?.owner
|
||||
},
|
||||
{
|
||||
title: 'Дата загрузки',
|
||||
key: 'uploadDate',
|
||||
render: (_, record) => record.fileInfo ? new Date(record.fileInfo.uploadDate).toLocaleString() : ''
|
||||
},
|
||||
]
|
||||
|
||||
const urlDownloadProgram =`api/well/${idWell}/drillingProgram`
|
||||
|
||||
// return(<>
|
||||
// <div> </div>
|
||||
// <LoaderPortal show={isLoaderVisible}>
|
||||
// <Button
|
||||
// type="primary"
|
||||
// htmlType="button"
|
||||
// disabled={!data.some((el) => !!el.fileInfo)}
|
||||
// onClick={downloadDrillingProgram}
|
||||
// >
|
||||
// Сформировать программу бурения
|
||||
// </Button>
|
||||
// <div> </div>
|
||||
// <Table
|
||||
// bordered
|
||||
// dataSource={data}
|
||||
// columns={columns}
|
||||
// // expandable={{
|
||||
// // expandedRowRender: record => expandInfo(record.fileInfo),
|
||||
// // rowExpandable: record => record.fileInfo
|
||||
// // }}
|
||||
// pagination={false}
|
||||
// />
|
||||
// </LoaderPortal>
|
||||
// </>)
|
||||
return(<>
|
||||
<LoaderPortal show={showLoader}>
|
||||
<Button
|
||||
type="primary"
|
||||
htmlType="button"
|
||||
disabled={!data.some((el) => !!el.fileInfo)}
|
||||
onClick={()=>{download(urlDownloadProgram)}}
|
||||
>
|
||||
Сформировать программу бурения
|
||||
</Button>
|
||||
<div> </div>
|
||||
<Table
|
||||
bordered
|
||||
dataSource={data}
|
||||
columns={columns}
|
||||
pagination={false}
|
||||
/>
|
||||
<UploadForm idCategory={idFileCategoryDrillingProgramItems}/>
|
||||
</LoaderPortal>
|
||||
</>)
|
||||
}
|
@ -27,6 +27,7 @@ export type { TelemetryOperationDto } from './models/TelemetryOperationDto';
|
||||
export type { TelemetryOperationDtoPaginationContainer } from './models/TelemetryOperationDtoPaginationContainer';
|
||||
export type { TelemetryOperationDurationDto } from './models/TelemetryOperationDurationDto';
|
||||
export type { TelemetryUserDto } from './models/TelemetryUserDto';
|
||||
export type { UserDto } from './models/UserDto';
|
||||
export type { UserTokenDto } from './models/UserTokenDto';
|
||||
export type { WellDepthToDayDto } from './models/WellDepthToDayDto';
|
||||
export type { WellDepthToIntervalDto } from './models/WellDepthToIntervalDto';
|
||||
|
@ -2,6 +2,8 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
|
||||
import type { UserDto } from './UserDto';
|
||||
|
||||
export type FileInfoDto = {
|
||||
id?: number;
|
||||
idWell?: number;
|
||||
@ -9,6 +11,7 @@ export type FileInfoDto = {
|
||||
idAuthor?: number;
|
||||
name?: string | null;
|
||||
uploadDate?: string;
|
||||
authorName?: string | null;
|
||||
companyId?: number;
|
||||
size?: number;
|
||||
author?: UserDto;
|
||||
company?: string | null;
|
||||
}
|
15
src/services/api/models/UserDto.ts
Normal file
15
src/services/api/models/UserDto.ts
Normal file
@ -0,0 +1,15 @@
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
|
||||
export type UserDto = {
|
||||
login?: string | null;
|
||||
level?: number | null;
|
||||
name?: string | null;
|
||||
surname?: string | null;
|
||||
patronymic?: string | null;
|
||||
id?: number;
|
||||
idCompany?: number | null;
|
||||
idRole?: number | null;
|
||||
password?: string | null;
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import type { FileInfoDto } from '../models/FileInfoDto';
|
||||
import type { FileInfoDtoPaginationContainer } from '../models/FileInfoDtoPaginationContainer';
|
||||
import { request as __request } from '../core/request';
|
||||
|
||||
@ -33,39 +34,60 @@ requestBody?: any,
|
||||
/**
|
||||
* Возвращает информацию о файлах для скважины в выбраной категории
|
||||
* @param idWell id скважины
|
||||
* @param skip для пагинации кол-во записей пропустить
|
||||
* @param take для пагинации кол-во записей взять
|
||||
* @param idCategory id категории файла
|
||||
* @param companies id компаний для фильтрации возвращаемых файлов
|
||||
* @param fileName часть имени файла для поиска
|
||||
* @param begin дата начала
|
||||
* @param end дата окончания
|
||||
* @param companies id компаний для фильтрации возвращаемых файлов
|
||||
* @param skip для пагинации кол-во записей пропустить
|
||||
* @param take для пагинации кол-во записей взять
|
||||
* @returns FileInfoDtoPaginationContainer Success
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static async getFilesInfo(
|
||||
idWell: number,
|
||||
skip: number,
|
||||
take: number = 32,
|
||||
idCategory: number,
|
||||
companies?: Array<number>,
|
||||
fileName?: string,
|
||||
begin?: string,
|
||||
end?: string,
|
||||
companies?: Array<number>,
|
||||
skip: number = 0,
|
||||
take: number = 32,
|
||||
): Promise<FileInfoDtoPaginationContainer> {
|
||||
const result = await __request({
|
||||
method: 'GET',
|
||||
path: `/api/well/${idWell}/files`,
|
||||
query: {
|
||||
'skip': skip,
|
||||
'take': take,
|
||||
'idCategory': idCategory,
|
||||
'companies': companies,
|
||||
'fileName': fileName,
|
||||
'begin': begin,
|
||||
'end': end,
|
||||
'companies': companies,
|
||||
'skip': skip,
|
||||
'take': take,
|
||||
},
|
||||
});
|
||||
return result.body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает информацию о файлах для скважины в выбраной категории
|
||||
* @param idWell id скважины
|
||||
* @param idCategory id категории файла
|
||||
* @returns FileInfoDto Success
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static async getInfosByCategory(
|
||||
idWell: number,
|
||||
idCategory: number,
|
||||
): Promise<Array<FileInfoDto>> {
|
||||
const result = await __request({
|
||||
method: 'GET',
|
||||
path: `/api/well/${idWell}/files/category/${idCategory}`,
|
||||
});
|
||||
return result.body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает файл с диска на сервере
|
||||
* @param idWell id скважины
|
||||
|
Loading…
Reference in New Issue
Block a user