diff --git a/public/locales/en/bs.json b/public/locales/en/bs.json
index 68b8476..10ceb99 100644
--- a/public/locales/en/bs.json
+++ b/public/locales/en/bs.json
@@ -276,7 +276,13 @@
"textDataset": "Text dataset",
"tableDataset": "Table Dataset",
"createImport": "Create/Import",
- "knowledge": "Knowledge base"
+ "knowledge": "Knowledge base",
+ "web": "Website",
+ "knowledgeId": "Knowledge Base ID",
+ "knowledgeImg": "Knowledge Base Avatar",
+ "indexModel": "Index model",
+ "dataUp": "Single data upper limit",
+ "introduce": "Introduce"
},
"code": {
"editPythonCodeDescription": "Edit your Python code here. This code snippet accepts module imports and a function definition. Make sure your function returns a string.",
diff --git a/public/locales/zh/bs.json b/public/locales/zh/bs.json
index 3a5e775..9d6dbde 100644
--- a/public/locales/zh/bs.json
+++ b/public/locales/zh/bs.json
@@ -268,7 +268,13 @@
"textDataset": "文本数据集",
"tableDataset": "表格数据集",
"createImport": "新建/导入",
- "knowledge": "知识库"
+ "knowledge": "知识库",
+ "web": "网站",
+ "knowledgeId": "知识库ID",
+ "knowledgeImg": "知识库头像",
+ "indexModel": "索引模型",
+ "dataUp": "单条数据上限",
+ "introduce": "介绍"
},
"code": {
"editPythonCodeDescription": "编辑你的 Python 代码此代码片段接受模块导入和一个函数定义。确保您的函数返回一个字符串。",
diff --git a/src/assets/knowledge/red-delete-icon.png b/src/assets/knowledge/red-delete-icon.png
new file mode 100644
index 0000000..2069057
Binary files /dev/null and b/src/assets/knowledge/red-delete-icon.png differ
diff --git a/src/assets/knowledge/set-active-icon.png b/src/assets/knowledge/set-active-icon.png
new file mode 100644
index 0000000..3b11d96
Binary files /dev/null and b/src/assets/knowledge/set-active-icon.png differ
diff --git a/src/controllers/API/index.ts b/src/controllers/API/index.ts
index 8a70df8..1dc0462 100644
--- a/src/controllers/API/index.ts
+++ b/src/controllers/API/index.ts
@@ -167,6 +167,14 @@ export async function updateFileLib(data) {
return await axios.put(`/api/v1/knowledge/update`, data);
}
+/**
+ * 修改支持库
+ *
+ */
+export async function getFileLibById(id) {
+ return await axios.get(`/api/v1/knowledge/${id}`);
+}
+
/**
* 修改支持库文件
*
diff --git a/src/pages/Knowledge/components/configModel.tsx b/src/pages/Knowledge/components/configModel.tsx
new file mode 100644
index 0000000..9498bb8
--- /dev/null
+++ b/src/pages/Knowledge/components/configModel.tsx
@@ -0,0 +1,135 @@
+import {Link, useNavigate, useParams} from "react-router-dom";
+import { useContext, useEffect, useRef, useState } from "react";
+import { useTranslation } from "react-i18next";
+import { locationContext } from "../../../contexts/locationContext";
+import {
+ getFileLibById,
+ deleteFileLib, updateFileLib
+} from "../../../controllers/API";
+import {captureAndAlertRequestErrorHoc} from "../../../controllers/request";
+
+
+export default function ConfigModal({ id, reload }) {
+ if(!open) return null
+
+ const { t } = useTranslation()
+ const [knowledge, setKnowledge] = useState({})
+ const [nameValue, setNameValue] = useState("")
+ const [descValue, setDescValue] = useState("")
+ const navigate = useNavigate()
+
+ useEffect(() => {
+ getFileLibById(id).then(res => {
+ const data = res || {}
+ setNameValue(data.name)
+ setDescValue(data.description)
+ setKnowledge(data)
+ })
+ }, [id])
+
+ // 删除
+ const { delShow, idRef, close, delConfim } = useDelete()
+
+ const handleDelete = () => {
+ captureAndAlertRequestErrorHoc(deleteFileLib(idRef.current).then(res => {
+ navigate("/filelib");
+ }));
+ }
+
+ const saveKnowledge = () => {
+ captureAndAlertRequestErrorHoc(updateFileLib({
+ id: knowledge.id,
+ name: nameValue,
+ parent_id: knowledge.parent_id,
+ description: descValue
+ }).then(res => {
+ reload()
+ }))
+ }
+
+ return (
+
+
+
+
+
{ t("lib.knowledgeId")}
+
{knowledge.id}
+
+
+
{ t("lib.knowledgeImg")}
+
+ {
+ knowledge.img_url?
+

+ :
+
+
+
+ }
+
+
+
+
{ t("lib.libraryName")}
+
+ setNameValue(event.target.value)} placeholder={t('lib.giveAName')} className={'form-input'}/>
+
+
+
+
{ t("lib.indexModel")}
+
{knowledge.model}
+
+
+
{ t("lib.dataUp")}
+
3000
+
+
+
{ t("lib.introduce")}
+
+
+
+
+
+
+
+
+
+
+ )
+};
+
+const useDelete = () => {
+ const [delShow, setDelShow] = useState(false)
+ const idRef = useRef(null)
+
+ return {
+ delShow,
+ idRef,
+ close: () => {
+ setDelShow(false)
+ },
+ delConfim: (id) => {
+ idRef.current = id
+ setDelShow(true)
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/Knowledge/components/moveModel.tsx b/src/pages/Knowledge/components/moveModel.tsx
index 93bbd1b..71c074e 100644
--- a/src/pages/Knowledge/components/moveModel.tsx
+++ b/src/pages/Knowledge/components/moveModel.tsx
@@ -58,7 +58,8 @@ export default function MoveModal({ data, open, setOpen, reload }) {
captureAndAlertRequestErrorHoc(updateFileLib({
id: data.id,
name: data.name,
- parent_id: parentId
+ parent_id: parentId,
+ description: data.description
}).then(res => {
reload()
setOpen(false)
diff --git a/src/pages/Knowledge/components/renameModel.tsx b/src/pages/Knowledge/components/renameModel.tsx
index baa45fa..6de904c 100644
--- a/src/pages/Knowledge/components/renameModel.tsx
+++ b/src/pages/Knowledge/components/renameModel.tsx
@@ -6,7 +6,7 @@ import {alertContext} from "../../../contexts/alertContext";
import {captureAndAlertRequestErrorHoc} from "../../../controllers/request";
import writeIcon from "../../../assets/knowledge/write-icon.png";
-export default function CreateModal({ data, open, setOpen, reload }) {
+export default function RenameModal({ data, open, setOpen, reload }) {
const { t } = useTranslation()
const navigate = useNavigate()
const name = data.nameType == "file"? data.file_name :data.name
@@ -42,7 +42,8 @@ export default function CreateModal({ data, open, setOpen, reload }) {
captureAndAlertRequestErrorHoc(updateFileLib({
id: data.id,
name: name,
- parent_id: data.parent_id
+ parent_id: data.parent_id,
+ description: data.description
}).then(res => {
reload()
setOpen(false)
diff --git a/src/pages/Knowledge/knowledge.tsx b/src/pages/Knowledge/knowledge.tsx
index 36c7014..7da466f 100644
--- a/src/pages/Knowledge/knowledge.tsx
+++ b/src/pages/Knowledge/knowledge.tsx
@@ -27,7 +27,7 @@ import { Select, SelectContent, SelectGroup, SelectIconTrigger, SelectItem } fro
import { locationContext } from "../../contexts/locationContext";
import {
deleteFile,
- deleteFileLib,
+ deleteFileLib, getFileLibById,
readFileByLibDatabase,
readFileLibDatabase,
retryKnowledgeFileApi
@@ -44,6 +44,7 @@ import {
import CreateModal from "./components/createModel";
import RenameModal from "./components/renameModel";
import MoveModal from "./components/moveModel";
+import ConfigModal from "./components/configModel";
import {userContext} from "../../contexts/userContext";
export default function FilesPage() {
@@ -52,24 +53,25 @@ export default function FilesPage() {
const { id } = useParams()
// 上传 上传成功添加到列表
const [open, setOpen] = useState(false)
- const [title, setTitle] = useState('')
+ const [knowledge, setKnowledge] = useState({})
const nameRef = useRef(null)
const [renameOpen, setRenameOpen] = useState(false);
const [moveOpen, setMoveOpen] = useState(false);
const [parentId, setParentId] = useState(id)
+ const [tabType, setTabType] = useState(1);
useEffect(() => {
setParentId(id)
+ getFileLibById(id).then(res => {
+ const data = res || {}
+ setKnowledge(data)
+ })
}, [id])
const [type, setType] = useState(1)
const [data, setData] = useState({})
const [titleArray, setTitleArray] = useState([]);
- const detailData = {
- img_url: ""
- }
-
const [hasPermission, setHasPermission] = useState(true)
const { appConfig } = useContext(locationContext)
@@ -80,7 +82,7 @@ export default function FilesPage() {
readFileLibDatabase(param.page, 10000, param.keyword, parentId)
)
- const { page, pageSize, data: datalist, total, loading, setPage, search, reload:fileReload, filterData, refreshData } = useTable({}, (param) =>
+ const { page, pageSize, data: datalist, total, loading, setPage, search: fileSearch, reload:fileReload, filterData, refreshData } = useTable({}, (param) =>
readFileByLibDatabase({ ...param, id: parentId, pageSize: 10000, name: param.keyword }).then(res => {
setHasPermission(res.writeable)
return res
@@ -95,18 +97,17 @@ export default function FilesPage() {
const reload = () => {
fileReload()
libReload()
+ getFileLibById(id).then(res => {
+ const data = res || {}
+ setKnowledge(data)
+ })
+ }
+
+ const search = (keyword) => {
+ libSearch(keyword)
+ fileSearch(keyword)
}
- useEffect(() => {
- // @ts-ignore
- const libname = window.libname // 临时记忆
- if (libname) {
- // @ts-ignore
- localStorage.setItem('libname', window.libname)
- }
- // @ts-ignore
- setTitle(window.libname || localStorage.getItem('libname'))
- }, [])
const handleOpen = (e) => {
setOpen(e)
@@ -202,21 +203,27 @@ export default function FilesPage() {
{
- detailData.img_url?
+ knowledge.img_url?

:
}
-
+
-
{t('lib.universalKnowledgeBase')}
-
-

{t("lib.dataset")}
+
+ {t('lib.universalKnowledgeBase') }
-
-

{t("lib.config")}
+
{
+ setTabType(1)
+ }} >
+

{t("lib.dataset")}
+
+
{
+ setTabType(2)
+ }} >
+

{t("lib.config")}
@@ -226,170 +233,175 @@ export default function FilesPage() {

{t("lib.allKnowledge")}
-
-
-
- {titleArray.length > 0?
-
-
-
-
- {
- titleArray.map((title, index) => (
-
-
{index <= (titleArray.length - 1)? ">" : ""}
-
+ {
+ tabType == 1 ?
+
+
+
+ {titleArray.length > 0?
+
+
+
- ))
+ {
+ titleArray.map((title, index) => (
+
+ {index <= (titleArray.length - 1)? ">" : ""}
+
+
+ ))
+ }
+
+ :
+
{t("lib.file")}({libTotal + total})
}
- :
-
{t("lib.file")}({libTotal + total})
- }
-
- {hasPermission &&
-
-
-
- setOpen(true)}>
-

-
-
-
-
- {
- setType(1)
- setOpen(true)
- }}>
{t("lib.folder")}
-
{t("lib.manualDataset")}
-
{t("lib.textDataset")}
-
{t("lib.tableDataset")}
-
-
+ {hasPermission &&
+
+
+
+ setOpen(true)}>
+

+
+
+
+
+ {
+ setType(1)
+ setOpen(true)
+ }}>
{t("lib.folder")}
+
{t("lib.manualDataset")}
+
{t("lib.textDataset")}
+
{t("lib.tableDataset")}
+
+
+
+ }
+
+
+
+

+
- }
-
-
-
-

+
+
+
+ #
+ {t('lib.name')}
+ {t('lib.dataTotal')}
+ {t('lib.lastUpdate')}
+ {/* 状态 */}
+ {t('lib.status')}
+
+
+
+
+ {datalist.map((el,index) => (
+
+ {index + 1}
+
+
+ {el.file_name}
+
+
+ {el.update_time.replace('T', ' ')}
+
+ {el.status === 3 ?
+
+ {t('lib.parseFailed')}
+
+
+
:
+ {[t('lib.parseFailed'), t('lib.parsing'), t('lib.completed'), t('lib.parseFailed')][el.status]}
+ }
+
+
+
+
+
+
+
+ {
+ event.stopPropagation();
+ // 数据集重命名
+ setData({ ...el, nameType: "file" })
+ setRenameOpen(true)
+ }}>
{t("lib.rename")}
+ {
+ event.stopPropagation();
+ setData({ ...el, nameType: "file" })
+ setMoveOpen(true)
+ }}>
{t("lib.move")}
+ {hasPermission &&
+ {
+ event.stopPropagation();
+ delConfim(el.id, "file")
+ }}>
+
{t('delete')}
+
+ }
+
+
+
+
+
+ ))}
+ {libList.map((el,index) => (
+
+ {index + 1}
+ handleLibDetail(el) }>
+
+ {el.name}
+
+
+ {el.update_time.replace('T', ' ')}
+
+ {el.status === 3 ?
+
+ {t('lib.parseFailed')}
+
+
+
:
+ {[t('lib.parseFailed'), t('lib.parsing'), t('lib.completed'), t('lib.parseFailed')][el.status]}
+ }
+
+
+
+
+
+
+
+ {
+ event.stopPropagation();
+ setData(el)
+ setRenameOpen(true)
+ }}>
{t("lib.rename")}
+ {
+ event.stopPropagation();
+ setData(el)
+ setMoveOpen(true)
+ }}>
{t("lib.move")}
+ {hasPermission &&
+ {
+ event.stopPropagation();
+ delConfim(el.id, "folder")
+ }}>
+
{t('delete')}
+
+ }
+
+
+
+
+
+ ))}
+
+
-
-
-
-
- #
- {t('lib.name')}
- {t('lib.dataTotal')}
- {t('lib.lastUpdate')}
- {/* 状态 */}
- {t('lib.status')}
-
-
-
-
- {datalist.map((el,index) => (
-
- {index + 1}
-
-
- {el.file_name}
-
-
- {el.update_time.replace('T', ' ')}
-
- {el.status === 3 ?
-
- {t('lib.parseFailed')}
-
-
-
:
- {[t('lib.parseFailed'), t('lib.parsing'), t('lib.completed'), t('lib.parseFailed')][el.status]}
- }
-
-
-
-
-
-
-
- {
- event.stopPropagation();
- // 数据集重命名
- setData({ ...el, nameType: "file" })
- setRenameOpen(true)
- }}>
{t("lib.rename")}
- {
- event.stopPropagation();
- setData({ ...el, nameType: "file" })
- setMoveOpen(true)
- }}>
{t("lib.move")}
- {hasPermission &&
- {
- event.stopPropagation();
- delConfim(el.id, "file")
- }}>
-
{t('delete')}
-
- }
+ :
+ }
-
-
-
-
- ))}
- {libList.map((el,index) => (
-
- {index + 1}
- handleLibDetail(el) }>
-
- {el.name}
-
-
- {el.update_time.replace('T', ' ')}
-
- {el.status === 3 ?
-
- {t('lib.parseFailed')}
-
-
-
:
- {[t('lib.parseFailed'), t('lib.parsing'), t('lib.completed'), t('lib.parseFailed')][el.status]}
- }
-
-
-
-
-
-
-
- {
- event.stopPropagation();
- setData(el)
- setRenameOpen(true)
- }}>
{t("lib.rename")}
- {
- event.stopPropagation();
- setData(el)
- setMoveOpen(true)
- }}>
{t("lib.move")}
- {hasPermission &&
- {
- event.stopPropagation();
- delConfim(el.id, "folder")
- }}>
-
{t('delete')}
-
- }
-
-
-
-
-
- ))}
-
-
-
diff --git a/src/style/knowledge.css b/src/style/knowledge.css
index a41e14b..70f4d6a 100644
--- a/src/style/knowledge.css
+++ b/src/style/knowledge.css
@@ -366,6 +366,71 @@
display: inline-block;
margin-right: 8px;
}
+
+ .config-item{
+ display: flex;
+ margin-bottom: 30px;
+
+ .config-item-title{
+ width:200px;
+ text-align: right;
+ margin-right: 36px;
+ font-size: 12px;
+ color: #FFFFFF;
+ line-height: 34px;
+ }
+
+ .config-item-value{
+ width: 500px;
+ font-weight: 300;
+ font-size: 12px;
+ color: #CCCCCC;
+ line-height: 34px;
+
+ .form-input{
+ background: #1A1A1A;
+ border-radius: 7px;
+ width: 100%;
+ font-weight: 300;
+ font-size: 12px;
+ border:unset;
+ }
+ }
+ }
+
+ .config-button-box{
+ text-align: right;
+ width: 736px;
+ position: absolute;
+ bottom: 50px;
+
+ .delete-button{
+ width: 34px;
+ height: 34px;
+ background: rgba(255, 96, 96, 0.3);
+ border-radius: 100%;
+
+ .delete-icon{
+ width: 15px;
+ height: 15px;
+ margin: 0 0 0 10px;
+ }
+ }
+
+ .save-button{
+ width: 95px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ background: #FFD025;
+ border-radius: 17px;
+ font-weight: 400;
+ font-size: 14px;
+ color: #010101;
+ margin-left: 20px;
+ }
+ }
+
}
}
}