mirror of
https://github.com/Funkoala14/KnowledgeBase_OOIN.git
synced 2025-06-08 21:08:13 +08:00
185 lines
6.9 KiB
JavaScript
185 lines
6.9 KiB
JavaScript
import { createSlice } from '@reduxjs/toolkit';
|
||
import {
|
||
fetchKnowledgeBases,
|
||
createKnowledgeBase,
|
||
updateKnowledgeBase,
|
||
deleteKnowledgeBase,
|
||
changeKnowledgeBaseType,
|
||
searchKnowledgeBases,
|
||
requestKnowledgeBaseAccess,
|
||
getKnowledgeBaseById,
|
||
} from './knowledgeBase.thunks';
|
||
|
||
const initialState = {
|
||
knowledgeBases: [],
|
||
currentKnowledgeBase: null,
|
||
searchResults: [],
|
||
searchLoading: false,
|
||
loading: false,
|
||
error: null,
|
||
pagination: {
|
||
total: 0,
|
||
page: 1,
|
||
page_size: 10,
|
||
total_pages: 1,
|
||
},
|
||
batchPermissions: {},
|
||
batchLoading: false,
|
||
editStatus: 'idle',
|
||
requestAccessStatus: 'idle',
|
||
};
|
||
|
||
const knowledgeBaseSlice = createSlice({
|
||
name: 'knowledgeBase',
|
||
initialState,
|
||
reducers: {
|
||
clearCurrentKnowledgeBase: (state) => {
|
||
state.currentKnowledgeBase = null;
|
||
},
|
||
clearSearchResults: (state) => {
|
||
state.searchResults = [];
|
||
},
|
||
clearEditStatus: (state) => {
|
||
state.editStatus = 'idle';
|
||
},
|
||
},
|
||
extraReducers: (builder) => {
|
||
builder
|
||
// 获取知识库列表
|
||
.addCase(fetchKnowledgeBases.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(fetchKnowledgeBases.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
state.knowledgeBases = action.payload.items || [];
|
||
state.pagination = {
|
||
total: action.payload.total || 0,
|
||
page: action.payload.page || 1,
|
||
page_size: action.payload.page_size || 10,
|
||
total_pages: action.payload.total_pages || 1,
|
||
};
|
||
})
|
||
.addCase(fetchKnowledgeBases.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to fetch knowledge bases';
|
||
})
|
||
|
||
// 创建知识库
|
||
.addCase(createKnowledgeBase.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(createKnowledgeBase.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
state.editStatus = 'successful';
|
||
// 不需要更新 knowledgeBases,因为创建后会跳转到详情页
|
||
})
|
||
.addCase(createKnowledgeBase.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to create knowledge base';
|
||
state.editStatus = 'failed';
|
||
})
|
||
|
||
// 更新知识库
|
||
.addCase(updateKnowledgeBase.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(updateKnowledgeBase.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
state.currentKnowledgeBase = action.payload;
|
||
state.editStatus = 'successful';
|
||
})
|
||
.addCase(updateKnowledgeBase.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to update knowledge base';
|
||
state.editStatus = 'failed';
|
||
})
|
||
|
||
// 删除知识库
|
||
.addCase(deleteKnowledgeBase.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(deleteKnowledgeBase.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
state.knowledgeBases = state.knowledgeBases.filter((kb) => kb.id !== action.meta.arg.knowledgeBaseId);
|
||
})
|
||
.addCase(deleteKnowledgeBase.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to delete knowledge base';
|
||
})
|
||
|
||
// 修改知识库类型
|
||
.addCase(changeKnowledgeBaseType.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(changeKnowledgeBaseType.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
if (state.currentKnowledgeBase) {
|
||
state.currentKnowledgeBase = {
|
||
...state.currentKnowledgeBase,
|
||
type: action.payload.type,
|
||
department: action.payload.department,
|
||
group: action.payload.group,
|
||
};
|
||
}
|
||
state.editStatus = 'successful';
|
||
})
|
||
.addCase(changeKnowledgeBaseType.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to change knowledge base type';
|
||
state.editStatus = 'failed';
|
||
})
|
||
|
||
// 搜索知识库
|
||
.addCase(searchKnowledgeBases.pending, (state) => {
|
||
state.searchLoading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(searchKnowledgeBases.fulfilled, (state, action) => {
|
||
state.searchLoading = false;
|
||
if (action.payload && action.payload.code === 200) {
|
||
state.searchResults = action.payload.data.items || [];
|
||
} else {
|
||
state.searchResults = action.payload.items || [];
|
||
}
|
||
})
|
||
.addCase(searchKnowledgeBases.rejected, (state, action) => {
|
||
state.searchLoading = false;
|
||
state.error = action.payload || 'Failed to search knowledge bases';
|
||
})
|
||
|
||
// 申请知识库访问权限
|
||
.addCase(requestKnowledgeBaseAccess.pending, (state) => {
|
||
state.requestAccessStatus = 'loading';
|
||
})
|
||
.addCase(requestKnowledgeBaseAccess.fulfilled, (state) => {
|
||
state.requestAccessStatus = 'successful';
|
||
})
|
||
.addCase(requestKnowledgeBaseAccess.rejected, (state) => {
|
||
state.requestAccessStatus = 'failed';
|
||
})
|
||
|
||
// 获取知识库详情
|
||
.addCase(getKnowledgeBaseById.pending, (state) => {
|
||
state.loading = true;
|
||
state.error = null;
|
||
})
|
||
.addCase(getKnowledgeBaseById.fulfilled, (state, action) => {
|
||
state.loading = false;
|
||
state.currentKnowledgeBase = action.payload.knowledge_base || action.payload;
|
||
})
|
||
.addCase(getKnowledgeBaseById.rejected, (state, action) => {
|
||
state.loading = false;
|
||
state.error = action.payload || 'Failed to get knowledge base details';
|
||
});
|
||
},
|
||
});
|
||
|
||
export const { clearCurrentKnowledgeBase, clearSearchResults, clearEditStatus } = knowledgeBaseSlice.actions;
|
||
|
||
export default knowledgeBaseSlice.reducer;
|