| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- 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 }, // TODO: Provide type support for this effect
- ],
- pollGetDocumentList: [
- function* ({ payload }, { call, put }) {
- yield put({ type: 'getKfList', payload: { kb_id: payload } });
- },
- { type: 'poll', delay: 15000 }, // TODO: Provide type support for this effect
- ],
- *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 ret = yield call(kbService.document_upload, formData);
-
- const succeed = ret?.data?.retcode === 0;
-
- if (succeed) {
- message.success(i18n.t('message.uploaded'));
- }
- if (succeed || ret?.data?.retcode === 500) {
- yield put({
- type: 'getKfList',
- payload: { kb_id: payload.kb_id },
- });
- }
- return ret?.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' || // TODO: Just directly determine whether the current page is on the knowledge list page.
- location.pathname === '/knowledge/dataset/upload'
- ) {
- dispatch({
- type: 'setPagination',
- payload: { current: 1, pageSize: 10 },
- });
- }
- });
- },
- },
- };
- export default model;
|