Compare commits

...

6 Commits

Author SHA1 Message Date
9d33241c71
Update .env.production 2025-03-29 19:46:34 -04:00
c70d6e6241
Create .env 2025-03-29 19:46:24 -04:00
71ecf4abb6
Update .env.development 2025-03-29 19:46:08 -04:00
a916d70686
Merge pull request #3 from Funkoala14/dev
merge
2025-03-29 19:45:13 -04:00
ccdc3ee217 [dev]error notification fix... 2025-03-29 19:44:45 -04:00
be65466375 Update vite.config.js 2025-03-29 14:44:32 -04:00
13 changed files with 38 additions and 27 deletions

4
.env Normal file
View File

@ -0,0 +1,4 @@
VITE_PORT = 8080
VITE_PROD = false
VITE_API_URL = "http://81.69.223.133:58008"
VITE_SECRETKEY = "ooin-knowledge-base-key"

View File

@ -1,3 +1,4 @@
VITE_PORT = 8080 VITE_PORT = 8080
VITE_PROD = false VITE_PROD = false
VITE_API_URL = "http://81.69.223.133:58008" VITE_API_URL = "http://81.69.223.133:58008"
VITE_SECRETKEY = "ooin-knowledge-base-key"

View File

@ -1,3 +1,4 @@
VITE_PORT = 8080 VITE_PORT = 8080
VITE_PROD = false VITE_PROD = false
VITE_API_URL = "http://81.69.223.133:58008" VITE_API_URL = "http://81.69.223.133:58008"
VITE_SECRETKEY = "ooin-knowledge-base-key"

View File

@ -28,7 +28,7 @@ const Snackbar = ({ type = 'primary', message, duration = 3000, onClose }) => {
return ( return (
<div <div
className={`snackbar alert alert-${type} d-flex align-items-center justify-content-between position-fixed top-10 start-50 translate-middle w-50 z-2 gap-2`} className={`snackbar alert alert-${type} d-flex align-items-center justify-content-between position-fixed top-10 start-50 translate-middle w-50 z-2 gap-2 z-3`}
role='alert' role='alert'
> >
<SvgIcon className={icons[type]} /> <SvgIcon className={icons[type]} />

View File

@ -33,6 +33,7 @@ export default function SettingsTab({ knowledgeBase }) {
// State for knowledge base form // State for knowledge base form
const [knowledgeBaseForm, setKnowledgeBaseForm] = useState({ const [knowledgeBaseForm, setKnowledgeBaseForm] = useState({
permissions: knowledgeBase.permissions,
name: knowledgeBase.name, name: knowledgeBase.name,
desc: knowledgeBase.desc || knowledgeBase.description || '', desc: knowledgeBase.desc || knowledgeBase.description || '',
type: knowledgeBase.type || 'private', // type: knowledgeBase.type || 'private', //
@ -227,7 +228,7 @@ export default function SettingsTab({ knowledgeBase }) {
.catch((error) => { .catch((error) => {
dispatch( dispatch(
showNotification({ showNotification({
message: `类型更新失败: ${error.message || '未知错误'}`, message: `类型更新失败: ${error || '未知错误'}`,
type: 'danger', type: 'danger',
}) })
); );
@ -276,7 +277,7 @@ export default function SettingsTab({ knowledgeBase }) {
.catch((error) => { .catch((error) => {
dispatch( dispatch(
showNotification({ showNotification({
message: `更新失败: ${error.message || '未知错误'}`, message: `更新失败: ${error || '未知错误'}`,
type: 'danger', type: 'danger',
}) })
); );
@ -305,7 +306,7 @@ export default function SettingsTab({ knowledgeBase }) {
.catch((error) => { .catch((error) => {
dispatch( dispatch(
showNotification({ showNotification({
message: `删除失败: ${error.message || '未知错误'}`, message: `删除失败: ${error || '未知错误'}`,
type: 'danger', type: 'danger',
}) })
); );

View File

@ -43,7 +43,7 @@ const DeleteConfirmModal = ({ show, title, isSubmitting, onCancel, onConfirm })
<div className='modal-body'> <div className='modal-body'>
<p>您确定要删除知识库 "{title}" 此操作不可撤销</p> <p>您确定要删除知识库 "{title}" 此操作不可撤销</p>
</div> </div>
<div className='modal-footer'> <div className='modal-footer gap-2'>
<button type='button' className='btn btn-secondary' onClick={onCancel} disabled={isSubmitting}> <button type='button' className='btn btn-secondary' onClick={onCancel} disabled={isSubmitting}>
取消 取消
</button> </button>

View File

@ -59,6 +59,10 @@ const KnowledgeBaseForm = ({
// //
const showTypeChangeButton = hasTypeChanged || (isAdmin && hasDepartmentOrGroupChanged); const showTypeChangeButton = hasTypeChanged || (isAdmin && hasDepartmentOrGroupChanged);
console.log(formData);
return ( return (
<div className='card border-0 shadow-sm'> <div className='card border-0 shadow-sm'>
<div className='card-body'> <div className='card-body'>
@ -262,8 +266,8 @@ const KnowledgeBaseForm = ({
type='button' type='button'
className='btn btn-danger' className='btn btn-danger'
onClick={onDelete} onClick={onDelete}
disabled='true' // disabled='true'
// disabled={isSubmitting} disabled={isSubmitting}
> >
删除知识库 删除知识库
</button> </button>

View File

@ -418,7 +418,7 @@ export default function KnowledgeBase() {
.catch((error) => { .catch((error) => {
dispatch( dispatch(
showNotification({ showNotification({
message: `删除失败: ${error.message || '未知错误'}`, message: `删除失败: ${error || '未知错误'}`,
type: 'danger', type: 'danger',
}) })
); );

View File

@ -11,13 +11,12 @@ export const loginThunk = createAsyncThunk(
async ({ username, password }, { rejectWithValue, dispatch }) => { async ({ username, password }, { rejectWithValue, dispatch }) => {
try { try {
const { message, data, code } = await post('/auth/login/', { username, password }); const { message, data, code } = await post('/auth/login/', { username, password });
console.log('code', code);
if (code !== 200) { if (code !== 200) {
throw new Error(message || 'Something went wrong'); throw new Error(message);
} }
if (!data) { if (!data) {
throw new Error(message || 'Something went wrong'); throw new Error(message);
} }
const { token } = data; const { token } = data;
// encrypt token // encrypt token
@ -27,7 +26,6 @@ export const loginThunk = createAsyncThunk(
return data; return data;
} catch (error) { } catch (error) {
const errorMessage = error.response?.data?.message || 'Something went wrong'; const errorMessage = error.response?.data?.message || 'Something went wrong';
console.log(errorMessage);
dispatch( dispatch(
showNotification({ showNotification({
message: errorMessage, message: errorMessage,
@ -88,7 +86,7 @@ export const checkAuthThunk = createAsyncThunk('auth/verify', async (_, { reject
return user; return user;
} catch (error) { } catch (error) {
dispatch(logout()); dispatch(logout());
return rejectWithValue(error.response?.data || 'Token verification failed'); return rejectWithValue(error.response?.data?.message || 'Token verification failed');
} }
}); });

View File

@ -16,7 +16,7 @@ export const fetchMessages = createAsyncThunk('chat/fetchMessages', async (chatI
return response.data?.messages || []; return response.data?.messages || [];
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to fetch messages'); return rejectWithValue(error.response?.data?.message || 'Failed to fetch messages');
} }
}); });
@ -40,6 +40,6 @@ export const sendMessage = createAsyncThunk('chat/sendMessage', async ({ chatId,
return response.data || {}; return response.data || {};
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to send message'); return rejectWithValue(error.response?.data?.message || 'Failed to send message');
} }
}); });

View File

@ -46,7 +46,7 @@ export const createChat = createAsyncThunk('chat/createChat', async (chatData, {
return response.data?.chat || {}; return response.data?.chat || {};
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to create chat'); return rejectWithValue(error.response?.data?.message || 'Failed to create chat');
} }
}); });
@ -67,7 +67,7 @@ export const updateChat = createAsyncThunk('chat/updateChat', async ({ id, data
return response.data?.chat || {}; return response.data?.chat || {};
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to update chat'); return rejectWithValue(error.response?.data?.message || 'Failed to update chat');
} }
}); });

View File

@ -12,14 +12,16 @@ export const fetchKnowledgeBases = createAsyncThunk(
'knowledgeBase/fetchKnowledgeBases', 'knowledgeBase/fetchKnowledgeBases',
async ({ page = 1, page_size = 10 } = {}, { rejectWithValue }) => { async ({ page = 1, page_size = 10 } = {}, { rejectWithValue }) => {
try { try {
const response = await get('/knowledge-bases/', { params: { page, page_size } }); const response = await get('/knowledge-bases', { params: { page, page_size } });
// 处理新的返回格式 // 处理新的返回格式
if (response.data && response.data.code === 200) { if (response.data && response.data.code === 200) {
return response.data.data; return response.data.data;
} }
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to fetch knowledge bases'); console.log(error);
return rejectWithValue(error.response?.data.error.message || 'Failed to fetch knowledge bases');
} }
} }
); );
@ -48,7 +50,7 @@ export const searchKnowledgeBases = createAsyncThunk('knowledgeBase/search', asy
} }
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || error.message); return rejectWithValue(error.response?.data?.message || error.message);
} }
}); });
@ -68,7 +70,7 @@ export const createKnowledgeBase = createAsyncThunk(
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to create knowledge base'); return rejectWithValue(error.response?.data?.message || 'Failed to create knowledge base');
} }
} }
); );
@ -87,7 +89,7 @@ export const getKnowledgeBaseById = createAsyncThunk(
} }
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to get knowledge base details'); return rejectWithValue(error.response?.data?.message || 'Failed to get knowledge base details');
} }
} }
); );
@ -111,7 +113,7 @@ export const updateKnowledgeBase = createAsyncThunk(
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to update knowledge base'); return rejectWithValue(error.response?.data?.message || 'Failed to update knowledge base');
} }
} }
); );
@ -127,7 +129,7 @@ export const deleteKnowledgeBase = createAsyncThunk(
await del(`/knowledge-bases/${id}/`); await del(`/knowledge-bases/${id}/`);
return id; return id;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || 'Failed to delete knowledge base'); return rejectWithValue(error.response?.data?.message || 'Failed to delete knowledge base');
} }
} }
); );
@ -157,7 +159,7 @@ export const changeKnowledgeBaseType = createAsyncThunk(
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response?.data || '修改知识库类型失败'); return rejectWithValue(error.response?.data?.message || '修改知识库类型失败');
} }
} }
); );
@ -190,7 +192,7 @@ export const requestKnowledgeBaseAccess = createAsyncThunk(
message: error.response?.data?.detail || '权限申请失败,请稍后重试', message: error.response?.data?.detail || '权限申请失败,请稍后重试',
}) })
); );
return rejectWithValue(error.response?.data || error.message); return rejectWithValue(error.response?.data?.message || error.message);
} }
} }
); );

View File

@ -14,7 +14,7 @@ export default defineConfig(({ mode }) => {
port: env.VITE_PORT, port: env.VITE_PORT,
proxy: { proxy: {
'/api': { '/api': {
target: env.VITE_API_URL || 'http://81.69.223.133:3000', target: env.VITE_API_URL || 'http://81.69.223.133:58008',
changeOrigin: true, changeOrigin: true,
}, },
}, },