InfoModalSetting.tsx.bak 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. import * as React from 'react';
  2. import { Modal, Spin, Form, Input, Select, message, Checkbox, GetProp, Tooltip } from 'antd';
  3. import { InboxOutlined, QuestionCircleOutlined } from '@ant-design/icons';
  4. import { apis, ModifyDocumentSettingApiParams } from '@/apis';
  5. import useAppState from '@/store';
  6. const { getAppState } = useAppState();
  7. const { TextArea } = Input;
  8. const FormItem = Form.Item;
  9. const { Option } = Select;
  10. interface Props {
  11. id: string,
  12. open: boolean,
  13. record?: any,
  14. onClickConfirm: (id: string, data: ModifyDocumentSettingApiParams) => Promise<any>,
  15. onClickCancel: () => void,
  16. };
  17. const InfoModalSetting: React.FC<Props> = (props: Props) => {
  18. const {
  19. id,
  20. open,
  21. onClickConfirm,
  22. onClickCancel,
  23. record
  24. } = props;
  25. const [form] = Form.useForm();
  26. const [loading, setLoading] = React.useState<boolean>(false);
  27. const [isVisibleSlice, setIsVisibleSlice] = React.useState(false);
  28. const [titleName, setTitleName] = React.useState<string>('');
  29. const [standardClass, setStandardClass] = React.useState<any>([]);// 选择分类-下拉框
  30. const [parsingTypeList, setParsingTypeList] = React.useState<any>([]);// 解析工具
  31. const [parsingTypeListBackup, setParsingTypeListBackup] = React.useState<any[]>([]);// 解析工具-下拉选项-备份数据
  32. const [splittingOldList, setSplittingOldList] = React.useState<any[]>([]); // 旧的切分规则列表
  33. const [splittingTypeList, setSplittingTypeList] = React.useState<any>([]); // 选择切分规则
  34. const [standardClassification, setStandardClassification] = React.useState<string>(''); // 选择分类设置
  35. const onChangeF = (value: string) => {
  36. if (value === '0') {
  37. setIsVisibleSlice(!isVisibleSlice);
  38. } else {
  39. setIsVisibleSlice(false);
  40. }
  41. };
  42. // 获取解析工具
  43. const fetchAppstandardClass = async () => {
  44. try {
  45. const res = await apis.fetchTakaiAppTypeList('parsing_type');
  46. const list = res.data.map((item: any) => {
  47. return {
  48. label: item.dictLabel,
  49. value: item.dictValue,
  50. }
  51. });
  52. form.setFieldsValue({
  53. customSeparator: record?.customSeparator,
  54. })
  55. setParsingTypeList(list);
  56. setParsingTypeListBackup(list);
  57. } catch (error: any) {
  58. console.error(error);
  59. }
  60. }
  61. // 获取向默认切分规则
  62. const fetchsplittingType = async () => {
  63. try {
  64. const res = await apis.fetchTakaiAppTypeList('splitting_type');
  65. const list = res.data.map((item: any) => {
  66. return {
  67. label: item.dictLabel,
  68. value: item.dictValue,
  69. remark: item.remark,
  70. }
  71. });
  72. if (record.customSeparator === '0') {
  73. setIsVisibleSlice(!isVisibleSlice);
  74. }
  75. if (record.parsingType === '2') {
  76. const newList = list.filter((item: any) => item.value !== '3');
  77. setSplittingTypeList(newList);
  78. }else{
  79. setSplittingTypeList(list);
  80. }
  81. setSplittingOldList(list);
  82. } catch (error: any) {
  83. console.error(error);
  84. }
  85. }
  86. const init = async () => {
  87. setLoading(true);
  88. if (props.id) {
  89. fetchsplittingType()
  90. fetchAppstandardClass()
  91. }
  92. setLoading(false);
  93. const res: any = await getAppState();
  94. const reslist = res.filter((item: any) => {
  95. if (record?.standardClassification === '0' || record?.standardClassification === '1') {
  96. if (item.value === '0' || item.value === '1') {
  97. return item
  98. }
  99. }
  100. if (record?.standardClassification === '3') {
  101. if (item.value === '3') {
  102. return item
  103. }
  104. }
  105. if (record?.standardClassification === '2') {
  106. if (item.value === '2') {
  107. return item
  108. }
  109. }
  110. })
  111. setStandardClass(reslist);
  112. };
  113. React.useEffect(() => {
  114. init();
  115. form.setFieldsValue({
  116. parsingType: record?.parsingType,
  117. customSeparator: record?.customSeparator,
  118. standardClassification: record?.standardClassification,
  119. sliceValue: record?.sliceValue,
  120. name: record?.name,
  121. remark: record?.remark,
  122. })
  123. setStandardClassification(record?.standardClassification);
  124. }, []);
  125. // 点击确定
  126. const handleClickConfirm = () => {
  127. form.validateFields().then(async (values) => {
  128. const data = { ...record, ...values, konowledge_id: record.knowledgeId };
  129. console.log(loading, 'loading');
  130. await onClickConfirm(props.id, data);
  131. }).catch((error) => {
  132. console.error(error);
  133. })
  134. };
  135. return (
  136. <Modal
  137. width={600}
  138. title='知识配置'
  139. maskClosable={false}
  140. centered={true}
  141. open={open}
  142. onOk={handleClickConfirm}
  143. onCancel={onClickCancel}
  144. confirmLoading={loading}
  145. >
  146. <Spin spinning={loading}>
  147. <Form form={form} layout='vertical'>
  148. <FormItem
  149. label='分类设置'
  150. name='standardClassification'
  151. >
  152. <Select
  153. style={{ width: '100%' }}
  154. allowClear={true}
  155. optionLabelProp="label"
  156. placeholder='请选择分类设置'
  157. onChange={(e) => {
  158. // 切换分类时,清空已选本地文件與 OSS 列表
  159. setStandardClassification(e);
  160. if (e === '0') {
  161. const newSplittingList = splittingOldList.filter((item: any) => item.value === '3');
  162. setSplittingTypeList(newSplittingList);
  163. form.setFieldsValue({
  164. customSeparator: newSplittingList[0]?.value,
  165. });
  166. const newParsingTypeList = parsingTypeListBackup.filter((item: any) => item.value === '0');
  167. setParsingTypeList(newParsingTypeList);
  168. form.setFieldsValue({
  169. parsingType: newParsingTypeList[0]?.value,
  170. })
  171. } else {
  172. setSplittingTypeList(splittingOldList);
  173. setParsingTypeList(parsingTypeListBackup);
  174. }
  175. if (e === '1') {
  176. // 通用规范
  177. form.setFieldsValue({
  178. customSeparator: '2',
  179. });
  180. }
  181. form.setFieldsValue({
  182. name: '',
  183. });
  184. }}
  185. >
  186. {
  187. standardClass.map((item: any, index: any) => {
  188. return <Option value={item.value} key={index} label={item.label}>
  189. {item.label}
  190. <Tooltip title={item.remark} >
  191. <QuestionCircleOutlined style={{ color: '#FF9800', marginLeft: '3px' }} />
  192. </Tooltip>
  193. </Option>
  194. })
  195. }
  196. </Select>
  197. </FormItem>
  198. {(standardClassification === '0' || standardClassification === '1') && <><FormItem
  199. label='解析工具'
  200. name='parsingType'
  201. >
  202. {/* <p>{standardClass}</p> */}
  203. <Select
  204. style={{ width: '100%' }}
  205. placeholder='请选择解析设置'
  206. allowClear={true}
  207. onChange={(e) => {
  208. if (e === '2') {
  209. const newSplittingList = splittingOldList.filter((item: any) => item.value !== '3');
  210. setSplittingTypeList(newSplittingList);
  211. form.setFieldsValue({
  212. customSeparator: newSplittingList[0]?.value,
  213. });
  214. } else {
  215. setSplittingTypeList(splittingOldList);
  216. }
  217. }}
  218. >
  219. {
  220. parsingTypeList.map((item: any, index: any) => {
  221. return <Option value={item.value} key={index}>
  222. {item.label}
  223. </Option>
  224. })
  225. }
  226. </Select>
  227. </FormItem>
  228. <FormItem
  229. label='切片设置'
  230. name='customSeparator'
  231. >
  232. <Select
  233. style={{ width: '100%' }}
  234. allowClear={true}
  235. placeholder='请选择切片设置'
  236. onChange={onChangeF}
  237. optionLabelProp="label"
  238. >
  239. {
  240. splittingTypeList.map((item: any, index: any) => {
  241. return <Option value={item.value} key={index} label={item.label}>
  242. {item.label}
  243. <Tooltip title={item.remark} >
  244. <QuestionCircleOutlined style={{ color: '#FF9800', marginLeft: '3px' }} />
  245. </Tooltip>
  246. </Option>
  247. })
  248. }
  249. </Select>
  250. </FormItem></>}
  251. {isVisibleSlice &&
  252. <FormItem
  253. label='分隔符'
  254. name='sliceValue'
  255. rules={[{ required: true, message: '自定义切片设置不能为空' }]}
  256. >
  257. <Input max={1024}
  258. />
  259. </FormItem>
  260. }
  261. {standardClassification === '3' && <><FormItem
  262. label='文件名称'
  263. name='name'
  264. rules={[{ required: true, message: '文件名称不能为空', whitespace: true }]}
  265. >
  266. <Input placeholder='请输入文件名称' />
  267. </FormItem>
  268. <FormItem
  269. label='描述'
  270. name='remark'
  271. rules={[{ required: true, message: '描述不能为空', whitespace: true }]}
  272. >
  273. <TextArea
  274. placeholder='请输入描述信息'
  275. showCount={true}
  276. rows={6}
  277. maxLength={500}
  278. />
  279. </FormItem></>}
  280. <div style={{ width: '100%', height: 10 }}></div>
  281. </Form>
  282. </Spin>
  283. </Modal>
  284. );
  285. };
  286. export default InfoModalSetting;