diff --git a/src/components/Mark.jsx b/src/components/Mark.jsx
new file mode 100644
index 0000000..c865eda
--- /dev/null
+++ b/src/components/Mark.jsx
@@ -0,0 +1,25 @@
+import {Tooltip, Tag, Typography, Popconfirm, Button } from 'antd'
+import {UserView} from './UserView'
+
+const markTypes = {
+ 0 : {color:"orange", text : "неизвестно"},
+ 1 : {color:"green", text : "согласовано"},
+}
+
+const {Text} = Typography
+
+export const Mark = ({mark, onDelete}) => {
+ const markType = markTypes[mark.idMarkType]??markTypes[0]
+ return }>
+
+
+ {`${markType.text} ${new Date(mark.dateCreated).toLocaleString()}`}
+
+ {(!mark?.isDeleted)&&
+
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/pages/Documents/DocumentsTemplate.jsx b/src/pages/Documents/DocumentsTemplate.jsx
index 6409392..497dd05 100644
--- a/src/pages/Documents/DocumentsTemplate.jsx
+++ b/src/pages/Documents/DocumentsTemplate.jsx
@@ -17,7 +17,7 @@ const pageSize = 12
const { RangePicker } = DatePicker
const { Search } = Input
-export default function DocumentsTemplate({ idCategory, idWell, accept, headerChild, onChange }) {
+export default function DocumentsTemplate({ idCategory, idWell, accept, headerChild, customColumns, onChange}) {
const [page, setPage] = useState(1)
const [filterDataRange, setFilterDataRange] = useState([])
const [filterCompanyName, setFilterCompanyName] = useState([])
@@ -79,6 +79,7 @@ export default function DocumentsTemplate({ idCategory, idWell, accept, headerCh
key: "company",
render: (_, record) =>
},
+ ...(customColumns??[])
]
const update = () => {
diff --git a/src/pages/Documents/DrillingProgram.jsx b/src/pages/Documents/DrillingProgram.jsx
index 09adc6c..4fd7062 100644
--- a/src/pages/Documents/DrillingProgram.jsx
+++ b/src/pages/Documents/DrillingProgram.jsx
@@ -1,4 +1,4 @@
-import {Button, Tooltip} from 'antd'
+import {Popconfirm, Button, Tooltip} from 'antd'
import { FileExcelOutlined } from '@ant-design/icons'
import { useEffect, useState } from "react"
import {invokeWebApiWrapperAsync, download} from '../../components/factory'
@@ -6,6 +6,7 @@ import DocumentsTemplate from './DocumentsTemplate'
import LoaderPortal from '../../components/LoaderPortal'
import { Flex } from '../../components/Grid'
import {DrillingProgramService, WellService} from '../../services/api'
+import {Mark} from '../../components/Mark'
const idFileCategoryDrillingProgramItems = 13;
@@ -14,6 +15,7 @@ export default function DrillingProgram({idWell}) {
const [showLoader, setShowLoader] = useState(false)
const [tooltip, setTooltip] = useState('нет файлов для формирования')
const [wellLabel, setWellLabel] = useState(`${idWell}`)
+ const [childKey, setChildKey] = useState();
useEffect(() => invokeWebApiWrapperAsync(
async () => {
@@ -33,8 +35,11 @@ export default function DrillingProgram({idWell}) {
"Не удалось загрузить программу бурения")
const openProgramPreview = () => invokeWebApiWrapperAsync(async()=>{
- const filWebUrl = await DrillingProgramService.getFileWebLink(idWell)
- window.open(filWebUrl, '_blank')
+ const filWebUrl = await DrillingProgramService.getOrCreateSharedUrl(idWell)
+ if(filWebUrl && filWebUrl.length > 0)
+ window.open(filWebUrl, '_blank');
+ else
+ throw new Error("Сервер вернул плохую ссылку")
},
setShowLoader,
"Не удалось создать быстрый просмотр программы")
@@ -46,7 +51,10 @@ export default function DrillingProgram({idWell}) {
return
}
- if(files.every(fileInfo => fileInfo?.name.toLowerCase().endsWith('.xlsx'))){
+ const isAllFilesAreExcel = files.every(fileInfo => fileInfo?.name.toLowerCase().endsWith('.xlsx'))
+ const isAnyFileMarked = files.some(file => file?.fileMarks.some(m => m?.idMarkType === 1 && !m?.isDeleted))
+
+ if(isAllFilesAreExcel && isAnyFileMarked){
setTooltip('Программа доступна для скачивания')
selDownloadButtonEnabled(true)
}
@@ -55,6 +63,41 @@ export default function DrillingProgram({idWell}) {
}
}
+ const customColumns = [
+ {
+ title: "Метки",
+ key: "fileMarks",
+ render: (_, record) => renderMarksColumn(record?.id, record?.fileMarks)
+ },
+ ]
+
+ const renderMarksColumn=(idFile, marks)=>{
+ const validMarks = marks?.filter(m => !(m?.isDeleted))
+ if(validMarks?.length)
+ return validMarks.map(mark => deleteMark(mark.id)}/>)
+
+ return true &&
+ addMarkToFile(idFile)}>
+
+
+ }
+
+ const addMarkToFile = async (idFile) => {
+ const mark = {
+ idFile: idFile,
+ idMarkType: 1,
+ isDeleted:false,
+ comment: ''}
+ await DrillingProgramService.createFileMark(idWell, mark)
+ selDownloadButtonEnabled(true)
+ setChildKey(Date.now())
+ }
+
+ const deleteMark = async (idMark) => {
+ await DrillingProgramService.deleteFileMark(idWell, idMark)
+ setChildKey(Date.now())
+ }
+
const downloadButton =
Программа бурения
@@ -66,22 +109,18 @@ export default function DrillingProgram({idWell}) {
Сформировать и скачать
-
-
-
-
-
+
+ Программа бурения {wellLabel}.xlsx
+
+
@@ -92,6 +131,8 @@ export default function DrillingProgram({idWell}) {
idCategory={idFileCategoryDrillingProgramItems}
accept='.xlsx'
headerChild={downloadButton}
- onChange={filesUpdated} />
+ onChange={filesUpdated}
+ customColumns = {customColumns}
+ key = {childKey}/>
)
}
\ No newline at end of file