import { Link, useParams } from "react-router-dom"; import { Button } from "../../components/ui/button"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "../../components/ui/table"; import { Tabs, TabsContent, TabsList, TabsTrigger, } from "../../components/ui/tabs"; import { ArrowLeft, Filter, RotateCw, Search, X } from "lucide-react"; import { useContext, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { bsconfirm } from "../../alerts/confirm"; import PaginationComponent from "../../components/PaginationComponent"; import ShadTooltip from "../../components/ShadTooltipComponent"; import { Input } from "../../components/ui/input"; import { Select, SelectContent, SelectGroup, SelectIconTrigger, SelectItem } from "../../components/ui/select1"; import { locationContext } from "../../contexts/locationContext"; import { deleteFile, readFileByLibDatabase, retryKnowledgeFileApi } from "../../controllers/API"; import { captureAndAlertRequestErrorHoc } from "../../controllers/request"; import UploadModal from "../../modals/UploadModal"; import { useTable } from "../../util/hook"; import del from "../../assets/npc/del.png" export default function FilesPage() { const { t } = useTranslation() const { id } = useParams() // 上传 上传成功添加到列表 const [open, setOpen] = useState(false) const [title, setTitle] = useState('') const { page, pageSize, data: datalist, total, setPage, search, reload, filterData, refreshData,loadData } = useTable({}, (param) => readFileByLibDatabase({ ...param, id, name: param.keyword }).then(res => { setHasPermission(res.writeable) return res }) ) // loadData(); setTimeout(() => reload(), 5000); const [hasPermission, setHasPermission] = useState(true) const { appConfig } = useContext(locationContext) // filter const [filter, setFilter] = useState(999) useEffect(() => { filterData({ status: filter }) }, [filter]) useEffect(() => { // @ts-ignore const libname = window.libname // 临时记忆 if (libname) { localStorage.setItem('libname', window.libname) } setTitle(window.libname || localStorage.getItem('libname')) }, []) const handleOpen = (e) => { setOpen(e) reload() } // 删除 const { delShow, idRef, close, delConfim } = useDelete() const handleDelete = () => { captureAndAlertRequestErrorHoc(deleteFile(idRef.current).then(res => { reload() close() })) } const [repeatFiles, setRepeatFiles] = useState([]) // 上传结果展示 const handleUploadResult = (fileCount, failFiles, res) => { const _repeatFiles = res.filter(e => e.status === 3) if (_repeatFiles.length) { setRepeatFiles(_repeatFiles) } else { failFiles.length && bsconfirm({ desc:

{t('lib.fileUploadResult', { total: fileCount, failed: failFiles.length })}

{failFiles.map(str =>

{str}

)}
, onOk(next) { next() } }) } } // 重试解析 const [retryLoad, setRetryLoad] = useState(false) const handleRetry = (objs) => { setRetryLoad(true) captureAndAlertRequestErrorHoc(retryKnowledgeFileApi(objs).then(res => { // 乐观更新 // refreshData( // (item) => ids.includes(item.id), // { status: 1 } // ) reload() setRepeatFiles([]) setRetryLoad(false) })) } const selectChange = (id) => { setFilter(Number(id)) } return
{/* {loading &&
} */} {/* {t('lib.fileList')} {t('lib.systemIntegration')} */}

{t('lib.fileData')}

setOpen(true)} style={{background: "#FFD025",borderRadius: "7px"}}> {/* */} 上 传
{/*
{title}
search(e.target.value)}>
{hasPermission && }
*/}
setPage(newPage)} />
{t('lib.fileName')} {/* 状态 */} {t('lib.status')} {/* Select component */} {t('lib.uploadTime')} {t('operations')} {datalist.map(el => ( {el.file_name} {el.status === 3 ?
{t('lib.parseFailed')}
: {[t('lib.parseFailed'), t('lib.parsing'), t('lib.completed'), t('lib.parseFailed')][el.status]} }
{el.update_time.replace('T', ' ')} {hasPermission ? // delConfim(el.id)} className="underline ml-4">{t('delete')} delConfim(el.id)} className="w-[20px] cursor-pointer" alt=""/> : // {t('delete')} }
))}
{/* Pagination */}
{/* upload modal */} {/* 重复文件提醒 */}

文件重复提示 setRepeatFiles([])}>

以下文件在知识库中已存在,继续上传将会覆盖原有文件以及处理策略,是否覆盖?

    {repeatFiles.map(el => (
  • {el.remark}
  • ))}
{/* Delete confirmation */}

{t('prompt')}

{t('lib.confirmDeleteFile')}

}; const useDelete = () => { const [delShow, setDelShow] = useState(false) const idRef = useRef(null) return { delShow, idRef, close: () => { setDelShow(false) }, delConfim: (id) => { idRef.current = id setDelShow(true) } } }