diff --git a/client/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx b/client/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx new file mode 100644 index 000000000..353c07d0e --- /dev/null +++ b/client/src/pages/add-knowledge/components/knowledge-file/createEFileModal.tsx @@ -0,0 +1,72 @@ +import { connect } from 'umi'; +import i18n from 'i18next'; +import { useTranslation, Trans } from 'react-i18next' +import { Input, Modal, Form } from 'antd' +import { rsaPsw } from '@/utils' +import styles from './index.less'; + +type FieldType = { + name?: string; +}; +const Index = ({ kFModel, dispatch, getKfList, kb_id }) => { + const { isShowCEFwModal } = kFModel + const { t } = useTranslation() + const handleCancel = () => { + dispatch({ + type: 'kFModel/updateState', + payload: { + isShowCEFwModal: false + } + }); + }; + const [form] = Form.useForm() + const handleOk = async () => { + try { + const values = await form.validateFields(); + dispatch({ + type: 'kFModel/document_create', + payload: { + name: values.name, + kb_id + }, + callback: () => { + dispatch({ + type: 'kFModel/updateState', + payload: { + isShowCEFwModal: false + } + }); + getKfList && getKfList() + } + }); + + } catch (errorInfo) { + console.log('Failed:', errorInfo); + } + }; + + return ( + +
+ + label="文件名" + name="name" + rules={[{ required: true, message: 'Please input name!' }]} + > + + + + +
+ + + ); +} +export default connect(({ kFModel, loading }) => ({ kFModel, loading }))(Index); diff --git a/client/src/pages/add-knowledge/components/knowledge-file/index.tsx b/client/src/pages/add-knowledge/components/knowledge-file/index.tsx index 77b09d4e4..986e33e42 100644 --- a/client/src/pages/add-knowledge/components/knowledge-file/index.tsx +++ b/client/src/pages/add-knowledge/components/knowledge-file/index.tsx @@ -1,110 +1,96 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; +import { connect, useNavigate, useLocation } from 'umi' import { Space, Table, Tag, Input, Button, Switch, Popover, Dropdown, } from 'antd'; import type { MenuProps } from 'antd'; import { PlusOutlined, DownOutlined } from '@ant-design/icons' import { debounce } from 'lodash'; import type { ColumnsType } from 'antd/es/table'; +import Upload from './upload' +import CreateEPModal from './createEFileModal' import styles from './idnex.less' interface DataType { - key: string; name: string; - age: number; - address: string; + chunk_num: string; + token_num: number; + update_date: string; + size: string; status: boolean; + id: string } -const onChangeStatus = () => { } -const data: DataType[] = [ - { - key: '1', - name: 'John Brown', - age: 32, - address: 'New York No. 1 Lake Park', - status: true, - }, - { - key: '2', - name: 'Jim Green', - age: 42, - address: 'London No. 1 Lake Park', - status: true, - }, - { - key: '3', - name: 'Joe Black', - age: 32, - address: 'Sydney No. 1 Lake Park', - status: true, - }, - { - key: '4', - name: 'John Brown', - age: 32, - address: 'New York No. 1 Lake Park', - status: true, - }, - { - key: '5', - name: 'Jim Green', - age: 42, - address: 'London No. 1 Lake Park', - status: true, - }, - { - key: '6', - name: 'Joe Black', - age: 32, - address: 'Sydney No. 1 Lake Park', - status: true, - }, { - key: '7', - name: 'John Brown', - age: 32, - address: 'New York No. 1 Lake Park', - status: true, - }, - { - key: '8', - name: 'Jim Green', - age: 42, - address: 'London No. 1 Lake Park', - status: true, - }, - { - key: '9', - name: 'Joe Black', - age: 32, - address: 'Sydney No. 1 Lake Park', - status: true, - }, -]; -const App: React.FC = () => { +const Index: React.FC = ({ kFModel, dispatch, id }) => { + const { data, loading } = kFModel const [inputValue, setInputValue] = useState('') - const [loading, setLoading] = useState(false) + const [doc_id, setDocId] = useState('0') const changeValue = (value: string) => { { console.log(value) - setLoading(false) } } + const getKfList = () => { + dispatch({ + type: 'kFModel/getKfList', + payload: { + kb_id: id + } + }); + } + useEffect(() => { + if (id) { + getKfList() + } + }, [id]) const debounceChange = debounce(changeValue, 300) const debounceCallback = useCallback((value: string) => debounceChange(value), []) const handleInputChange = (e: React.ChangeEvent) => { const value = e.target.value - setLoading(true) setInputValue(value) debounceCallback(e.target.value) } + const onChangeStatus = (e, doc_id) => { + console.log(doc_id) + dispatch({ + type: 'kFModel/updateDocumentStatus', + payload: { + doc_id, + status: Number(e) + }, + callback() { + getKfList() + } + }); + } + const onRmDocument = (doc_id) => { + dispatch({ + type: 'kFModel/document_rm', + payload: { + doc_id + }, + callback() { + getKfList() + } + }); + + } + const showCEFModal = () => { + dispatch({ + type: 'kFModel/updateState', + payload: { + isShowCEFwModal: true + } + }); + }; + const actionItems: MenuProps['items'] = [ { key: '1', label: (
- +
), @@ -113,13 +99,36 @@ const App: React.FC = () => { key: '2', label: (
- +
), // disabled: true, }, ]; + const getItems = useCallback((id) => { + console.log(id) + return [ + { + key: '1', + label: ( +
+ +
+ + ), + }, + { + key: '2', + label: ( +
+ +
+ ), + // disabled: true, + }, + ]; + }, []) const columns: ColumnsType = [ { title: '名称', @@ -130,14 +139,20 @@ const App: React.FC = () => { }, { title: '数据总量', - dataIndex: 'total', - key: 'total', + dataIndex: 'chunk_num', + key: 'chunk_num', className: `${styles.column}` }, { title: 'Tokens', - dataIndex: 'tokens', - key: 'tokens', + dataIndex: 'token_num', + key: 'token_num', + className: `${styles.column}` + }, + { + title: '文件大小', + dataIndex: 'size', + key: 'size', className: `${styles.column}` }, { @@ -145,9 +160,11 @@ const App: React.FC = () => { key: 'status', dataIndex: 'status', className: `${styles.column}`, - render: (_, { status }) => ( + render: (_, { status, id }) => ( <> - + { + onChangeStatus(e, id) + }} /> ), }, @@ -157,8 +174,8 @@ const App: React.FC = () => { className: `${styles.column}`, render: (_, record) => ( - - + + { setDocId(record.id) }}> 分段设置 @@ -180,8 +197,9 @@ const App: React.FC = () => { - +
+ }; -export default App; \ No newline at end of file +export default connect(({ kFModel, loading }) => ({ kFModel, loading }))(Index); \ No newline at end of file diff --git a/client/src/pages/add-knowledge/components/knowledge-file/model.ts b/client/src/pages/add-knowledge/components/knowledge-file/model.ts new file mode 100644 index 000000000..f17851634 --- /dev/null +++ b/client/src/pages/add-knowledge/components/knowledge-file/model.ts @@ -0,0 +1,111 @@ +import { message } from 'antd'; +import { addParam } from '@/utils'; +import kbService from '@/services/kbService'; + +const Model = { + namespace: 'kFModel', + state: { + isShowCEFwModal: false, + isShowTntModal: false, + loading: false, + tenantIfo: {} + }, + subscriptions: { + setup({ dispatch, history }) { + history.listen(location => { + }); + } + }, + effects: { + * createKf({ payload = {}, callback }, { call, put }) { + const { data, response } = yield call(kbService.createKb, payload); + const { retcode, data: res, retmsg } = data + if (retcode === 0) { + + + } + }, + * updateKf({ payload = {}, callback }, { call, put }) { + const { data, response } = yield call(kbService.updateKb, payload); + const { retcode, data: res, retmsg } = data + if (retcode === 0) { + + + } + }, + *getKfDetail({ payload = {}, callback }, { call, put }) { + const { data, response } = yield call(kbService.get_kb_detail, payload); + const { retcode, data: res, retmsg } = data + if (retcode === 0) { + // localStorage.setItem('userInfo',res.) + callback && callback(res) + } + }, + *getKfList({ payload = {} }, { call, put }) { + yield put({ + type: 'updateState', + payload: { + loading: true + } + }); + const { data, response } = yield call(kbService.get_document_list, payload); + const { retcode, data: res, retmsg } = data + yield put({ + type: 'updateState', + payload: { + loading: false + } + }); + if (retcode === 0) { + yield put({ + type: 'updateState', + payload: { + data: res + } + }); + } + }, + *updateDocumentStatus({ payload = {}, callback }, { call, put }) { + yield put({ + type: 'updateState', + payload: { + loading: true + } + }); + const { data, response } = yield call(kbService.document_change_status, payload); + const { retcode, data: res, retmsg } = data + yield put({ + type: 'updateState', + payload: { + loading: false + } + }); + callback && callback() + }, + *document_rm({ payload = {}, callback }, { call, put }) { + const { data, response } = yield call(kbService.document_rm, payload); + const { retcode, data: res, retmsg } = data + if (retcode === 0) { + callback && callback() + } + + }, + *document_create({ payload = {}, callback }, { call, put }) { + const { data, response } = yield call(kbService.document_create, payload); + const { retcode, data: res, retmsg } = data + if (retcode === 0) { + callback && callback() + } + + }, + }, + reducers: { + updateState(state, { payload }) { + return { + ...state, + ...payload + }; + } + } +}; +export default Model; diff --git a/client/src/pages/add-knowledge/components/knowledge-file/upload.tsx b/client/src/pages/add-knowledge/components/knowledge-file/upload.tsx new file mode 100644 index 000000000..b66993085 --- /dev/null +++ b/client/src/pages/add-knowledge/components/knowledge-file/upload.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { UploadOutlined } from '@ant-design/icons'; +import type { UploadProps } from 'antd'; +import { Button, message, Upload } from 'antd'; +import uploadService from '@/services/uploadService' + + +const App: React.FC = (props) => { + const { kb_id, getKfList } = props + console.log(kb_id) + const createRequest = async function ({ file, onSuccess, onError }) { + const { retcode, data } = await uploadService.uploadFile(file, kb_id); + if (retcode === 0) { + onSuccess(data, file); + + } else { + onError(data); + } + getKfList && getKfList() + }; + const uploadProps: UploadProps = { + customRequest: createRequest, + showUploadList: false, + }; + return ( + + ) +} + +export default App; \ No newline at end of file diff --git a/client/src/pages/add-knowledge/components/knowledge-setting/index.tsx b/client/src/pages/add-knowledge/components/knowledge-setting/index.tsx index be18a7619..dd925be3a 100644 --- a/client/src/pages/add-knowledge/components/knowledge-setting/index.tsx +++ b/client/src/pages/add-knowledge/components/knowledge-setting/index.tsx @@ -44,35 +44,62 @@ const Index: React.FC = ({ settingModel, kSModel, dispatch, ...props }) => { const { tenantIfo = {} } = settingModel const { parser_ids = '', embd_id = '' } = tenantIfo const { id = '' } = props + const [form] = Form.useForm(); + useEffect(() => { - dispatch({ - type: 'settingModel/getTenantInfo', - payload: { - } - }); - }, []) - const [selectedTag, setSelectedTag] = useState('') - const onFinish = (values: any) => { - console.log(values); if (id) { dispatch({ - type: 'kSModel/updateKb', + type: 'settingModel/getTenantInfo', payload: { - ...values, - parser_id: selectedTag, - kb_id: id } }); - } else { dispatch({ - type: 'kSModel/createKb', + type: 'kSModel/getKbDetail', payload: { - ...values, - parser_id: selectedTag + kb_id: id + }, + callback(detail) { + console.log(detail) + const { description, name, permission, embd_id } = detail + form.setFieldsValue({ description, name, permission, embd_id }) + setSelectedTag(detail.parser_id) } }); } + }, [id]) + const [selectedTag, setSelectedTag] = useState('') + const values = Form.useWatch([], form); + console.log(values, '......变化') + const onFinish = () => { + form.validateFields().then( + () => { + if (id) { + dispatch({ + type: 'kSModel/updateKb', + payload: { + ...values, + parser_id: selectedTag, + kb_id: id, + embd_id: undefined + } + }); + } else { + dispatch({ + type: 'kSModel/createKb', + payload: { + ...values, + parser_id: selectedTag + } + }); + } + }, + () => { + + }, + ); + + }; @@ -86,8 +113,8 @@ const Index: React.FC = ({ settingModel, kSModel, dispatch, ...props }) => { return
@@ -108,7 +135,7 @@ const Index: React.FC = ({ settingModel, kSModel, dispatch, ...props }) => { hasFeedback rules={[{ required: true, message: 'Please select your country!' }]} > - {embd_id.split(',').map(item => { return })} @@ -145,7 +172,7 @@ const Index: React.FC = ({ settingModel, kSModel, dispatch, ...props }) => { - {' '} - - - ) - }); - } -};