[dev]preview docs

This commit is contained in:
susie-laptop 2025-04-02 23:57:51 -04:00
parent 8450c98d01
commit b360a91551
4 changed files with 57 additions and 35 deletions

View File

@ -73,7 +73,7 @@ const DocumentList = ({ knowledgeBaseId }) => {
<td> <td>
<div className='btn-group' role='group'> <div className='btn-group' role='group'>
<button <button
className='btn btn-sm btn-outline-primary me-2 d-none' className='btn btn-sm btn-outline-dark me-2'
onClick={() => handlePreviewDocument(doc.document_id)} onClick={() => handlePreviewDocument(doc.document_id)}
> >
预览 预览

View File

@ -72,14 +72,14 @@ const DocumentPreviewModal = ({ show, documentId, knowledgeBaseId, onClose }) =>
maxWidth: '90%', maxWidth: '90%',
maxHeight: '80vh', maxHeight: '80vh',
padding: '20px', padding: '20px',
overflow: 'auto', overflow: 'hidden',
}} }}
> >
<div className='modal-header d-flex justify-content-between align-items-center mb-3'> <div className='modal-header d-flex justify-content-between align-items-center mb-3'>
<h5 className='modal-title m-0'>{documentContent?.document_info?.name || '文档预览'}</h5> <h5 className='modal-title m-0'>{documentContent?.document_info?.name || '文档预览'}</h5>
<button type='button' className='btn-close' onClick={onClose} aria-label='Close'></button> <button type='button' className='btn-close' onClick={onClose} aria-label='Close'></button>
</div> </div>
<div className='modal-body'> <div className='modal-body' style={{ overflow: 'auto' }}>
{loading ? ( {loading ? (
<div className='text-center py-4'> <div className='text-center py-4'>
<div className='spinner-border text-primary' role='status'> <div className='spinner-border text-primary' role='status'>
@ -118,7 +118,7 @@ const DocumentPreviewModal = ({ show, documentId, knowledgeBaseId, onClose }) =>
)} )}
</div> </div>
<div className='modal-footer'> <div className='modal-footer'>
<button type='button' className='btn btn-outline-secondary' onClick={onClose}> <button type='button' className='btn btn-outline-dark' onClick={onClose}>
关闭 关闭
</button> </button>
</div> </div>

View File

@ -127,7 +127,7 @@ const KnowledgeBaseForm = ({
</div> </div>
{/* 仅当不是私有知识库时才显示部门选项 */} {/* 仅当不是私有知识库时才显示部门选项 */}
{formData.type === 'member' && ( {formData.type === 'member' || formData.type === 'leader' && (
<div className='mb-3'> <div className='mb-3'>
<label htmlFor='department' className='form-label'> <label htmlFor='department' className='form-label'>
部门 {isAdmin && <span className='text-danger'>*</span>} 部门 {isAdmin && <span className='text-danger'>*</span>}
@ -246,7 +246,7 @@ const KnowledgeBaseForm = ({
)} )}
<div className='d-flex justify-content-between mt-4'> <div className='d-flex justify-content-between mt-4'>
<button type='submit' className='btn btn-primary' disabled={isSubmitting|| !formData.permissions.can_edit}> <button type='submit' className='btn btn-dark' disabled={isSubmitting|| !formData.permissions.can_edit}>
{isSubmitting ? ( {isSubmitting ? (
<> <>
<span <span
@ -262,7 +262,7 @@ const KnowledgeBaseForm = ({
</button> </button>
<button <button
type='button' type='button'
className='btn btn-danger' className='btn btn-outline-danger'
onClick={onDelete} onClick={onDelete}
// disabled='true' // disabled='true'
disabled={isSubmitting || !formData.permissions.can_edit} disabled={isSubmitting || !formData.permissions.can_edit}

View File

@ -282,41 +282,63 @@ export const createChatRecord = createAsyncThunk(
// 获取知识库信息 // 获取知识库信息
const state = getState(); const state = getState();
const availableDatasets = state.chat.availableDatasets.items || []; const availableDatasets = state.chat.availableDatasets.items || [];
const existingChats = state.chat.history.items || [];
// 创建一个新的聊天记录对象添加到历史列表 // 检查是否已存在此会话ID的记录
const newChatEntry = { const existingChat = existingChats.find((chat) => chat.conversation_id === chatInfo.conversation_id);
conversation_id: chatInfo.conversation_id,
datasets: dataset_id_list.map((id) => {
// 尝试查找知识库名称
const formattedId = id.includes('-')
? id
: id.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
const dataset = availableDatasets.find((ds) => ds.id === formattedId);
return {
id: formattedId,
name: dataset?.name || '新知识库对话',
};
}),
create_time: new Date().toISOString(),
last_message: question,
message_count: 2, // 用户问题和助手回复
};
// 更新当前聊天 // 只有在不存在相同会话ID的记录时才创建新的记录
dispatch({ if (!existingChat) {
type: 'chat/fetchChats/fulfilled', console.log('创建新的聊天sidebar记录:', chatInfo.conversation_id);
payload: {
results: [newChatEntry], // 创建一个新的聊天记录对象添加到历史列表
total: 1, const newChatEntry = {
append: true, // 标记为追加,而不是替换 conversation_id: chatInfo.conversation_id,
}, datasets: dataset_id_list.map((id) => {
}); // 尝试查找知识库名称
const formattedId = id.includes('-')
? id
: id.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
const dataset = availableDatasets.find((ds) => ds.id === formattedId);
return {
id: formattedId,
name: dataset?.name || '新知识库对话',
};
}),
create_time: new Date().toISOString(),
last_message: question,
message_count: 2, // 用户问题和助手回复
};
// 更新当前聊天
dispatch({
type: 'chat/fetchChats/fulfilled',
payload: {
results: [newChatEntry],
total: 1,
append: true, // 标记为追加,而不是替换
},
});
} else {
console.log('聊天sidebar记录已存在不再创建:', chatInfo.conversation_id);
}
// 设置为当前聊天 // 设置为当前聊天
dispatch( dispatch(
setCurrentChat({ setCurrentChat({
conversation_id: chatInfo.conversation_id, conversation_id: chatInfo.conversation_id,
datasets: newChatEntry.datasets, datasets: existingChat
? existingChat.datasets
: dataset_id_list.map((id) => {
const formattedId = id.includes('-')
? id
: id.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
const dataset = availableDatasets.find((ds) => ds.id === formattedId);
return {
id: formattedId,
name: dataset?.name || '新知识库对话',
};
}),
}) })
); );
} }