|
import { BaseState } from '@/interfaces/common'; |
|
import { IKnowledgeFile } from '@/interfaces/database/knowledge'; |
|
import i18n from '@/locales/config'; |
|
import kbService, { getDocumentFile } from '@/services/knowledge-service'; |
|
import { message } from 'antd'; |
|
import omit from 'lodash/omit'; |
|
import pick from 'lodash/pick'; |
|
import { DvaModel } from 'umi'; |
|
|
|
export interface KFModelState extends BaseState { |
|
tenantIfo: any; |
|
data: IKnowledgeFile[]; |
|
total: number; |
|
currentRecord: Nullable<IKnowledgeFile>; |
|
fileThumbnails: Record<string, string>; |
|
} |
|
|
|
const model: DvaModel<KFModelState> = { |
|
namespace: 'kFModel', |
|
state: { |
|
tenantIfo: {}, |
|
data: [], |
|
total: 0, |
|
currentRecord: null, |
|
searchString: '', |
|
pagination: { |
|
current: 1, |
|
pageSize: 10, |
|
}, |
|
fileThumbnails: {} as Record<string, string>, |
|
}, |
|
reducers: { |
|
updateState(state, { payload }) { |
|
return { |
|
...state, |
|
...payload, |
|
}; |
|
}, |
|
|
|
setCurrentRecord(state, { payload }) { |
|
return { ...state, currentRecord: payload }; |
|
}, |
|
setSearchString(state, { payload }) { |
|
return { ...state, searchString: payload }; |
|
}, |
|
setPagination(state, { payload }) { |
|
return { ...state, pagination: { ...state.pagination, ...payload } }; |
|
}, |
|
setFileThumbnails(state, { payload }) { |
|
return { ...state, fileThumbnails: payload }; |
|
}, |
|
}, |
|
effects: { |
|
*createKf({ payload = {} }, { call }) { |
|
const { data } = yield call(kbService.createKb, payload); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
message.success(i18n.t('message.created')); |
|
} |
|
}, |
|
*updateKf({ payload = {} }, { call }) { |
|
const { data } = yield call(kbService.updateKb, payload); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
message.success(i18n.t('message.modified')); |
|
} |
|
}, |
|
*getKfDetail({ payload = {} }, { call }) { |
|
const { data } = yield call(kbService.get_kb_detail, payload); |
|
}, |
|
*getKfList({ payload = {} }, { call, put, select }) { |
|
const state: KFModelState = yield select((state: any) => state.kFModel); |
|
const requestBody = { |
|
...payload, |
|
page: state.pagination.current, |
|
page_size: state.pagination.pageSize, |
|
}; |
|
if (state.searchString) { |
|
requestBody['keywords'] = state.searchString; |
|
} |
|
const { data } = yield call(kbService.get_document_list, requestBody); |
|
const { retcode, data: res } = data; |
|
|
|
if (retcode === 0) { |
|
yield put({ |
|
type: 'updateState', |
|
payload: { |
|
data: res.docs, |
|
total: res.total, |
|
}, |
|
}); |
|
} |
|
}, |
|
throttledGetDocumentList: [ |
|
function* ({ payload }, { call, put }) { |
|
yield put({ type: 'getKfList', payload: { kb_id: payload } }); |
|
}, |
|
{ type: 'throttle', ms: 1000 }, |
|
], |
|
pollGetDocumentList: [ |
|
function* ({ payload }, { call, put }) { |
|
yield put({ type: 'getKfList', payload: { kb_id: payload } }); |
|
}, |
|
{ type: 'poll', delay: 5000 }, |
|
], |
|
*updateDocumentStatus({ payload = {} }, { call, put }) { |
|
const { data } = yield call( |
|
kbService.document_change_status, |
|
pick(payload, ['doc_id', 'status']), |
|
); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
message.success(i18n.t('message.modified')); |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
} |
|
}, |
|
*document_rm({ payload = {} }, { call, put }) { |
|
const { data } = yield call(kbService.document_rm, { |
|
doc_id: payload.doc_id, |
|
}); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
message.success(i18n.t('message.deleted')); |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
} |
|
return retcode; |
|
}, |
|
*document_rename({ payload = {} }, { call, put }) { |
|
const { data } = yield call( |
|
kbService.document_rename, |
|
omit(payload, ['kb_id']), |
|
); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
message.success(i18n.t('message.renamed')); |
|
|
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
} |
|
|
|
return retcode; |
|
}, |
|
*document_create({ payload = {} }, { call, put }) { |
|
const { data } = yield call(kbService.document_create, payload); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
|
|
message.success(i18n.t('message.created')); |
|
} |
|
return retcode; |
|
}, |
|
*document_run({ payload = {} }, { call, put }) { |
|
const { data } = yield call( |
|
kbService.document_run, |
|
omit(payload, ['knowledgeBaseId']), |
|
); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
if (payload.knowledgeBaseId) { |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.knowledgeBaseId }, |
|
}); |
|
} |
|
message.success(i18n.t('message.operated')); |
|
} |
|
return retcode; |
|
}, |
|
*document_change_parser({ payload = {} }, { call, put }) { |
|
const { data } = yield call( |
|
kbService.document_change_parser, |
|
omit(payload, ['kb_id']), |
|
); |
|
const { retcode } = data; |
|
if (retcode === 0) { |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
|
|
message.success(i18n.t('message.modified')); |
|
} |
|
return retcode; |
|
}, |
|
*fetch_document_thumbnails({ payload = {} }, { call, put }) { |
|
const { data } = yield call(kbService.document_thumbnails, payload); |
|
if (data.retcode === 0) { |
|
yield put({ type: 'setFileThumbnails', payload: data.data }); |
|
} |
|
}, |
|
*fetch_document_file({ payload = {} }, { call }) { |
|
const documentId = payload; |
|
try { |
|
const ret = yield call(getDocumentFile, documentId); |
|
return ret; |
|
} catch (error) { |
|
console.warn(error); |
|
} |
|
}, |
|
*upload_document({ payload = {} }, { call, put }) { |
|
const fileList = payload.fileList; |
|
const formData = new FormData(); |
|
formData.append('kb_id', payload.kb_id); |
|
fileList.forEach((file: any) => { |
|
formData.append('file', file); |
|
}); |
|
|
|
const { data } = yield call(kbService.document_upload, formData); |
|
|
|
const succeed = data.retcode === 0; |
|
|
|
if (succeed) { |
|
message.success(i18n.t('message.uploaded')); |
|
} |
|
if (succeed || data.retcode === 500) { |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
} |
|
return data; |
|
}, |
|
*web_crawl({ payload = {} }, { call, put }) { |
|
const formData = new FormData(); |
|
formData.append('name', payload.name); |
|
formData.append('url', payload.url); |
|
formData.append('kb_id', payload.kb_id); |
|
|
|
const { data } = yield call(kbService.web_crawl, formData); |
|
|
|
const succeed = data.retcode === 0; |
|
|
|
if (succeed) { |
|
message.success(i18n.t('message.uploaded')); |
|
} |
|
if (succeed || data.retcode === 500) { |
|
yield put({ |
|
type: 'getKfList', |
|
payload: { kb_id: payload.kb_id }, |
|
}); |
|
} |
|
return data.retcode; |
|
}, |
|
}, |
|
subscriptions: { |
|
setup({ dispatch, history }) { |
|
history.listen(({ location }) => { |
|
const state: { from: string } = (location.state ?? { |
|
from: '', |
|
}) as { from: string }; |
|
if ( |
|
state.from === '/knowledge' || |
|
location.pathname === '/knowledge/dataset/upload' |
|
) { |
|
dispatch({ |
|
type: 'setPagination', |
|
payload: { current: 1, pageSize: 10 }, |
|
}); |
|
} |
|
}); |
|
}, |
|
}, |
|
}; |
|
export default model; |
|
|