You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { Button, Form, Input, Radio, Select, Space, Tag } from 'antd';
  2. import React, { useCallback, useEffect, useState } from 'react';
  3. import { useDispatch, useNavigate, useSelector } from 'umi';
  4. import styles from './index.less';
  5. const { CheckableTag } = Tag;
  6. const layout = {
  7. labelCol: { span: 8 },
  8. wrapperCol: { span: 16 },
  9. labelAlign: 'left' as const,
  10. };
  11. const { Option } = Select;
  12. /* eslint-disable no-template-curly-in-string */
  13. interface kSProps {
  14. kb_id: string;
  15. }
  16. const KnowledgeSetting: React.FC<kSProps> = ({ kb_id }) => {
  17. const dispatch = useDispatch();
  18. const settingModel = useSelector((state: any) => state.settingModel);
  19. let navigate = useNavigate();
  20. const { tenantIfo = {} } = settingModel;
  21. const { parser_ids = '', embd_id = '' } = tenantIfo;
  22. const [form] = Form.useForm();
  23. const [selectedTag, setSelectedTag] = useState('');
  24. const values = Form.useWatch([], form);
  25. const getTenantInfo = useCallback(async () => {
  26. dispatch({
  27. type: 'settingModel/getTenantInfo',
  28. payload: {},
  29. });
  30. if (kb_id) {
  31. const data = await dispatch<any>({
  32. type: 'kSModel/getKbDetail',
  33. payload: {
  34. kb_id,
  35. },
  36. });
  37. if (data.retcode === 0) {
  38. const { description, name, permission, embd_id } = data.data;
  39. form.setFieldsValue({ description, name, permission, embd_id });
  40. setSelectedTag(data.data.parser_id);
  41. }
  42. }
  43. }, [kb_id]);
  44. const onFinish = async () => {
  45. try {
  46. await form.validateFields();
  47. if (kb_id) {
  48. dispatch({
  49. type: 'kSModel/updateKb',
  50. payload: {
  51. ...values,
  52. parser_id: selectedTag,
  53. kb_id,
  54. embd_id: undefined,
  55. },
  56. });
  57. } else {
  58. const retcode = await dispatch<any>({
  59. type: 'kSModel/createKb',
  60. payload: {
  61. ...values,
  62. parser_id: selectedTag,
  63. },
  64. });
  65. retcode === 0 &&
  66. navigate(`/knowledge/add/setting?activeKey=file&id=${kb_id}`);
  67. }
  68. } catch (error) {
  69. console.warn(error);
  70. }
  71. };
  72. useEffect(() => {
  73. getTenantInfo();
  74. }, [getTenantInfo]);
  75. const handleChange = (tag: string, checked: boolean) => {
  76. const nextSelectedTag = checked ? tag : selectedTag;
  77. console.log('You are interested in: ', nextSelectedTag);
  78. setSelectedTag(nextSelectedTag);
  79. };
  80. return (
  81. <Form
  82. {...layout}
  83. form={form}
  84. name="validateOnly"
  85. style={{ maxWidth: 1000, padding: 14 }}
  86. >
  87. <Form.Item name="name" label="知识库名称" rules={[{ required: true }]}>
  88. <Input />
  89. </Form.Item>
  90. <Form.Item name="description" label="知识库描述">
  91. <Input.TextArea />
  92. </Form.Item>
  93. <Form.Item name="permission" label="可见权限">
  94. <Radio.Group>
  95. <Radio value="me">只有我</Radio>
  96. <Radio value="team">所有团队成员</Radio>
  97. </Radio.Group>
  98. </Form.Item>
  99. <Form.Item
  100. name="embd_id"
  101. label="Embedding 模型"
  102. hasFeedback
  103. rules={[{ required: true, message: 'Please select your country!' }]}
  104. >
  105. <Select placeholder="Please select a country">
  106. {embd_id.split(',').map((item: string) => {
  107. return (
  108. <Option value={item} key={item}>
  109. {item}
  110. </Option>
  111. );
  112. })}
  113. </Select>
  114. </Form.Item>
  115. <div style={{ marginTop: '5px' }}>
  116. 修改Embedding 模型,请去<span style={{ color: '#1677ff' }}>设置</span>
  117. </div>
  118. <Space size={[0, 8]} wrap>
  119. <div className={styles.tags}>
  120. {parser_ids.split(',').map((tag: string) => {
  121. return (
  122. <CheckableTag
  123. key={tag}
  124. checked={selectedTag === tag}
  125. onChange={(checked) => handleChange(tag, checked)}
  126. >
  127. {tag}
  128. </CheckableTag>
  129. );
  130. })}
  131. </div>
  132. </Space>
  133. <Space size={[0, 8]} wrap></Space>
  134. <div className={styles.preset}>
  135. <div className={styles.left}>xxxxx文章</div>
  136. <div className={styles.right}>预估份数</div>
  137. </div>
  138. <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 8 }}>
  139. <Button type="primary" onClick={onFinish}>
  140. 保存并处理
  141. </Button>
  142. <Button htmlType="button" style={{ marginLeft: '20px' }}>
  143. 取消
  144. </Button>
  145. </Form.Item>
  146. </Form>
  147. );
  148. };
  149. export default KnowledgeSetting;