forked from ddrilling/asb_cloud_front
Добавлено отключение кнопок согласования/отклонения при отсутствии файла
This commit is contained in:
parent
bddd67fd00
commit
6eb6f0f4c2
@ -1,22 +1,23 @@
|
|||||||
import { memo, useCallback, useState } from 'react'
|
import { memo, useCallback, useState } from 'react'
|
||||||
import { Button, Input, Popconfirm, Form } from 'antd'
|
import { Button, Input, Popconfirm, Form } from 'antd'
|
||||||
import {
|
import {
|
||||||
ClearOutlined,
|
DeleteOutlined,
|
||||||
SettingOutlined,
|
EditOutlined,
|
||||||
TableOutlined,
|
TableOutlined,
|
||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
|
|
||||||
import { formatDate } from '@utils'
|
import Poprompt from '@components/Poprompt'
|
||||||
import { DrillingProgramService } from '@api'
|
|
||||||
import { formatBytes, invokeWebApiWrapperAsync, notify } from '@components/factory'
|
|
||||||
import { UploadForm } from '@components/UploadForm'
|
|
||||||
import DownloadLink from '@components/DownloadLink'
|
|
||||||
import { UserView } from '@components/views'
|
import { UserView } from '@components/views'
|
||||||
|
import UploadForm from '@components/UploadForm'
|
||||||
|
import DownloadLink from '@components/DownloadLink'
|
||||||
|
import { formatBytes, invokeWebApiWrapperAsync, notify } from '@components/factory'
|
||||||
|
import { DrillingProgramService } from '@api'
|
||||||
|
import { formatDate } from '@utils'
|
||||||
|
|
||||||
import MarksCard from './MarksCard'
|
import MarksCard from './MarksCard'
|
||||||
|
|
||||||
import '@styles/drilling_program.less'
|
import '@styles/drilling_program.less'
|
||||||
import Poprompt from '@asb/components/Poprompt'
|
import LoaderPortal from '@asb/components/LoaderPortal'
|
||||||
|
|
||||||
const CommentPrompt = memo((props) => (
|
const CommentPrompt = memo((props) => (
|
||||||
<Poprompt
|
<Poprompt
|
||||||
@ -37,13 +38,15 @@ export const CategoryRender = memo(({ idWell, partData, onUpdate, onEdit, onHist
|
|||||||
const {
|
const {
|
||||||
idFileCategory,
|
idFileCategory,
|
||||||
name: title, // Название категории
|
name: title, // Название категории
|
||||||
idState, // Состояние категории
|
|
||||||
approvers, // Полный список согласовантов
|
approvers, // Полный список согласовантов
|
||||||
permissionToApprove, // Наличие прав на согласование/отклонение документа
|
permissionToApprove, // Наличие прав на согласование/отклонение документа
|
||||||
permissionToUpload, // Наличие прав на загрузку нового файла
|
permissionToUpload, // Наличие прав на загрузку нового файла
|
||||||
|
// permissionToEdit, // Наличие прав на редактирование/удаление категории
|
||||||
file // Информация о файле
|
file // Информация о файле
|
||||||
} = partData ?? {}
|
} = partData ?? {}
|
||||||
|
|
||||||
|
const permissionToEdit = true
|
||||||
|
|
||||||
const uploadUrl = `/api/well/${idWell}/drillingProgram/part/${idFileCategory}`
|
const uploadUrl = `/api/well/${idWell}/drillingProgram/part/${idFileCategory}`
|
||||||
|
|
||||||
const [isUploading, setIsUploading] = useState(false)
|
const [isUploading, setIsUploading] = useState(false)
|
||||||
@ -75,83 +78,79 @@ export const CategoryRender = memo(({ idWell, partData, onUpdate, onEdit, onHist
|
|||||||
), [idWell, idFileCategory, onUpdate, title])
|
), [idWell, idFileCategory, onUpdate, title])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'drilling_category'} {...other}>
|
<LoaderPortal show={isUploading}>
|
||||||
<div className={'category_header'}>
|
<div className={'drilling_category'} {...other}>
|
||||||
<h3>{title}</h3>
|
<div className={'category_header'}>
|
||||||
<div>
|
<h3>{title}</h3>
|
||||||
<Button icon={<SettingOutlined />} onClick={() => onEdit?.(idFileCategory)}>Редактировать</Button>
|
{permissionToEdit && (
|
||||||
<Popconfirm
|
<div>
|
||||||
onConfirm={onRemoveClick}
|
<Button icon={<EditOutlined />} onClick={() => onEdit?.(idFileCategory)}>Редактировать</Button>
|
||||||
title={<>Вы уверены, что хотите удалить категорию<br/>"{title}"?</>}
|
<Popconfirm
|
||||||
>
|
onConfirm={onRemoveClick}
|
||||||
<Button loading={isDeleting} icon={<ClearOutlined />}>Удалить</Button>
|
title={<>Вы уверены, что хотите удалить категорию<br/>"{title}"?</>}
|
||||||
</Popconfirm>
|
>
|
||||||
|
<Button loading={isDeleting} icon={<DeleteOutlined />}>Удалить</Button>
|
||||||
|
</Popconfirm>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div className={'category_content'}>
|
||||||
<div className={'category_content'}>
|
<div className={'file_column'}>
|
||||||
<div className={'file_column'}>
|
<div className={'file_info'}>
|
||||||
<div className={'file_info'}>
|
{file ? (
|
||||||
{file ? (
|
<>
|
||||||
<>
|
<DownloadLink file={file} />
|
||||||
<DownloadLink file={file} />
|
<div className={'ml-15'}>Автор: <UserView user={file.author ?? '-'}/></div>
|
||||||
<div className={'ml-15'}>Автор: <UserView user={file.author ?? '-'}/></div>
|
<div className={'ml-15'}>Размер: {file.size ? formatBytes(file.size) : '-'}</div>
|
||||||
<div className={'ml-15'}>Размер: {file.size ? formatBytes(file.size) : '-'}</div>
|
<div className={'ml-15'}>Загружен: {formatDate(file.uploadDate) ?? '-'}</div>
|
||||||
<div className={'ml-15'}>Загружен: {formatDate(file.uploadDate) ?? '-'}</div>
|
</>
|
||||||
</>
|
) : (
|
||||||
) : (
|
<div>Нет загруженных файлов</div>
|
||||||
<div>Нет загруженных файлов</div>
|
)}
|
||||||
)}
|
</div>
|
||||||
</div>
|
<div className={'file_actions'}>
|
||||||
<div className={'file_actions'}>
|
<UploadForm
|
||||||
<UploadForm
|
url={uploadUrl}
|
||||||
url={uploadUrl}
|
disabled={!permissionToUpload}
|
||||||
disabled={!permissionToUpload}
|
style={{ margin: '5px 0 10px 0' }}
|
||||||
style={{ margin: '5px 0 10px 0' }}
|
onUploadStart={() => setIsUploading(true)}
|
||||||
onUploadStart={() => setIsUploading(true)}
|
onUploadComplete={() => onUpdate?.(idFileCategory)}
|
||||||
onUploadComplete={() => onUpdate?.(idFileCategory)}
|
onUploadError={(e) => notify(e?.message ?? 'Ошибка загрузки файла', 'error')}
|
||||||
onUploadError={(e) => notify(e?.message ?? 'Ошибка загрузки файла', 'error')}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
disabled={!file}
|
|
||||||
title={'История'}
|
|
||||||
icon={<TableOutlined />}
|
|
||||||
onClick={() => onHistory?.(idFileCategory)}
|
|
||||||
>
|
|
||||||
История
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className={'approve_column'}>
|
|
||||||
<div className={'user_list'}>
|
|
||||||
{approvers.map((user, i) => (
|
|
||||||
<span key={i}>
|
|
||||||
<UserView user={user} />
|
|
||||||
</span>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
<div className={'approve_list'}>
|
|
||||||
{permissionToApprove && (
|
|
||||||
<CommentPrompt
|
|
||||||
text={'Согласовать'}
|
|
||||||
title={'Согласование документа'}
|
|
||||||
onDone={onApprove(true)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
<Button
|
||||||
<MarksCard title={'Согласовано'} className={'approve_panel'} marks={file?.fileMarks?.filter((mark) => mark.idMarkType === 1)} />
|
disabled={!file}
|
||||||
|
title={'История'}
|
||||||
|
icon={<TableOutlined />}
|
||||||
|
onClick={() => onHistory?.(idFileCategory)}
|
||||||
|
>
|
||||||
|
История
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={'reject_list'}>
|
<div className={'approve_column'}>
|
||||||
{permissionToApprove && (
|
<div className={'user_list'}>
|
||||||
<CommentPrompt
|
{approvers.map((user, i) => (
|
||||||
text={'Отклонить'}
|
<span key={i}>
|
||||||
title={'Отклонение документа'}
|
<UserView user={user} />
|
||||||
onDone={onApprove(false)}
|
</span>
|
||||||
/>
|
))}
|
||||||
)}
|
</div>
|
||||||
<MarksCard title={'Отклонено'} className={'reject_panel'} marks={file?.fileMarks?.filter((mark) => mark.idMarkType === 0)} />
|
<div className={'approve_list'}>
|
||||||
|
{permissionToApprove && file && (
|
||||||
|
<CommentPrompt text={'Согласовать'} title={'Согласование документа'} onDone={onApprove(true)} />
|
||||||
|
)}
|
||||||
|
<MarksCard title={'Согласовано'} className={'approve_panel'} marks={file?.fileMarks?.filter((mark) => mark.idMarkType === 1)} />
|
||||||
|
</div>
|
||||||
|
<div className={'reject_list'}>
|
||||||
|
{permissionToApprove && file && (
|
||||||
|
<CommentPrompt text={'Отклонить'} title={'Отклонение документа'} onDone={onApprove(false)} />
|
||||||
|
)}
|
||||||
|
<MarksCard title={'Отклонено'} className={'reject_panel'} marks={file?.fileMarks?.filter((mark) => mark.idMarkType === 0)} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</LoaderPortal>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user