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

190 lines
7.2 KiB
JavaScript
Raw Normal View History

2025-03-07 23:59:53 +08:00
import { createSlice } from '@reduxjs/toolkit';
import {
fetchKnowledgeBases,
createKnowledgeBase,
updateKnowledgeBase,
deleteKnowledgeBase,
changeKnowledgeBaseType,
searchKnowledgeBases,
requestKnowledgeBaseAccess,
getKnowledgeBaseById,
2025-03-07 23:59:53 +08:00
} 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,
2025-03-07 23:59:53 +08:00
},
batchPermissions: {},
batchLoading: false,
editStatus: 'idle',
requestAccessStatus: 'idle',
2025-03-07 23:59:53 +08:00
};
const knowledgeBaseSlice = createSlice({
name: 'knowledgeBase',
initialState,
reducers: {
clearCurrentKnowledgeBase: (state) => {
state.currentKnowledgeBase = null;
2025-03-07 23:59:53 +08:00
},
clearSearchResults: (state) => {
state.searchResults = [];
2025-03-07 23:59:53 +08:00
},
clearEditStatus: (state) => {
state.editStatus = 'idle';
2025-03-07 23:59:53 +08:00
},
},
extraReducers: (builder) => {
builder
// 获取知识库列表
2025-03-07 23:59:53 +08:00
.addCase(fetchKnowledgeBases.pending, (state) => {
state.loading = true;
state.error = null;
2025-03-07 23:59:53 +08:00
})
.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,
};
2025-03-07 23:59:53 +08:00
})
.addCase(fetchKnowledgeBases.rejected, (state, action) => {
state.loading = false;
state.error = action.payload || 'Failed to fetch knowledge bases';
2025-03-07 23:59:53 +08:00
})
// 创建知识库
2025-03-07 23:59:53 +08:00
.addCase(createKnowledgeBase.pending, (state) => {
state.loading = true;
state.error = null;
2025-03-07 23:59:53 +08:00
})
.addCase(createKnowledgeBase.fulfilled, (state, action) => {
state.loading = false;
state.editStatus = 'successful';
// 不需要更新 knowledgeBases因为创建后会跳转到详情页
2025-03-07 23:59:53 +08:00
})
.addCase(createKnowledgeBase.rejected, (state, action) => {
state.loading = false;
state.error = action.payload || 'Failed to create knowledge base';
state.editStatus = 'failed';
2025-03-07 23:59:53 +08:00
})
// 更新知识库
2025-03-07 23:59:53 +08:00
.addCase(updateKnowledgeBase.pending, (state) => {
state.loading = true;
state.error = null;
2025-03-07 23:59:53 +08:00
})
.addCase(updateKnowledgeBase.fulfilled, (state, action) => {
state.loading = false;
state.currentKnowledgeBase = action.payload;
state.editStatus = 'successful';
2025-03-07 23:59:53 +08:00
})
.addCase(updateKnowledgeBase.rejected, (state, action) => {
state.loading = false;
state.error = action.payload || 'Failed to update knowledge base';
state.editStatus = 'failed';
2025-03-07 23:59:53 +08:00
})
// 删除知识库
2025-03-07 23:59:53 +08:00
.addCase(deleteKnowledgeBase.pending, (state) => {
state.loading = true;
state.error = null;
2025-03-07 23:59:53 +08:00
})
.addCase(deleteKnowledgeBase.fulfilled, (state, action) => {
state.loading = false;
2025-03-29 09:36:38 +08:00
const deletedId = action.payload;
state.knowledgeBases = state.knowledgeBases.filter((kb) => kb.id !== deletedId);
if (state.pagination.total > 0) {
state.pagination.total -= 1;
state.pagination.total_pages = Math.ceil(state.pagination.total / state.pagination.page_size);
}
2025-03-07 23:59:53 +08:00
})
.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';
2025-03-07 23:59:53 +08:00
});
},
});
export const { clearCurrentKnowledgeBase, clearSearchResults, clearEditStatus } = knowledgeBaseSlice.actions;
export default knowledgeBaseSlice.reducer;