import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { Button, Form, Input, Select, Switch, Modal, message, ProTable, Drawer, Space, Divider, Tooltip, AppContainer, Utils, } from 'knowdesign'; import { IconFont } from '@knowdesign/icons'; import { PlusOutlined } from '@ant-design/icons'; import moment from 'moment'; // 引入代码编辑器 import { Controlled as CodeMirror } from 'react-codemirror2'; import 'codemirror/lib/codemirror.css'; //代码高亮 import 'codemirror/addon/edit/matchbrackets'; import 'codemirror/addon/selection/active-line'; import 'codemirror/addon/edit/closebrackets'; require('codemirror/mode/xml/xml'); require('codemirror/mode/javascript/javascript'); import api from '@src/api'; import { defaultPagination } from '@src/constants/common'; import TypicalListCard from '../../components/TypicalListCard'; import { ConfigPermissionMap } from '../CommonConfig'; import { ConfigOperate, ConfigProps } from './config'; import './index.less'; const { request } = Utils; const { confirm } = Modal; const { TextArea } = Input; // 新增/编辑配置抽屉 const EditConfigDrawer = forwardRef((_, ref) => { const [config, setConfig] = useState({}); const [type, setType] = useState(ConfigOperate.Add); const [form] = Form.useForm(); const [visible, setVisible] = useState(false); const [groupOptions, setGroupOpions] = useState<{ label: string; value: string }[]>([]); const [confirmLoading, setConfirmLoading] = useState(false); const [codeMirrorInput, setCodeMirrorInput] = useState(''); const callback = useRef(() => { return; }); // 提交表单 const onSubmit = () => { form.validateFields().then((formData) => { setConfirmLoading(true); formData.status = formData.status ? 1 : 2; const isAdd = type === ConfigOperate.Add; const submitApi = isAdd ? api.addConfig : api.editConfig; request(submitApi, { method: isAdd ? 'PUT' : 'POST', data: Object.assign(formData, isAdd ? {} : { id: config.id }), }).then( (res) => { // 执行回调,刷新列表数据 callback.current(); onClose(); message.success(`成功${isAdd ? '新增' : '更新'}配置`); }, () => setConfirmLoading(false) ); }); }; // 展开抽屉 const onOpen = (status: boolean, type: ConfigOperate, cbk: () => void, groupOptions, config: ConfigProps = {}) => { if (config.value) { try { // 如果内容可以格式化为 JSON,进行处理 config.value = JSON.stringify(JSON.parse(config.value), null, 2); } catch (_) { return; } } form.setFieldsValue({ ...config, status: config.status === 1 }); setConfig(config); setGroupOpions(groupOptions); setCodeMirrorInput(config.value); setType(type); setVisible(status); callback.current = cbk; }; // 关闭抽屉 const onClose = () => { setVisible(false); setConfirmLoading(false); setConfig({}); form.resetFields(); setCodeMirrorInput(''); }; useImperativeHandle(ref, () => ({ onOpen, })); return ( } >
{ form.setFieldsValue({ value }); form.validateFields(['value']); setCodeMirrorInput(value); }} />