KnowledgeBase_frontend/src/store/knowledgeBase/knowledgeBase.slice.js

185 lines
6.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;