import { useAjax } from "@/Hook/useAjax" import { addSysWarningRuleApi, editSysWarningRuleApi } from "@/services/adMonitor/earlyWarning" import { DeleteOutlined, PlusOutlined } from "@ant-design/icons" import { Button, Form, Input, InputNumber, message, Modal, Popconfirm, Select, Space, Switch } from "antd" import React, { useEffect } from "react" import { MonitorFieldEnum, WarningTypeEnum } from "./config" import './index.less' import PriceInput from "./priceInput" interface Props { visible?: boolean onClose?: () => void onChange?: () => void, initialValues?: any } const AddEdit: React.FC = (props) => { /******************************/ const { visible, onClose, onChange, initialValues } = props const [form] = Form.useForm(); const rules = Form.useWatch('rules', form); const addSysWarningRule = useAjax((params) => addSysWarningRuleApi(params)) const editSysWarningRule = useAjax((params) => editSysWarningRuleApi(params)) /******************************/ useEffect(() => { if (rules?.some((item: { field: string[] }) => item?.field?.includes('cost_trend_last_three_hour') && !(item?.['cost_trend_last_three_hour']?.value === 1))) { form.setFieldsValue({ rules: rules.map((item: any) => ({ ...item, cost_trend_last_three_hour: { value: 1, condition: '=' } })) }) } }, [rules]) const handleOk = () => { form.validateFields().then(values => { if (values?.rules) { let newValues = JSON.parse(JSON.stringify(values)) let { rules, defaultRule, enable, notifyFrequency, ruleName, warningType } = newValues let params = rules?.map((item: any) => { const { field, ...newItem } = item return { rule: Object.keys(newItem).map((item: any) => { return { ...newItem[item], field: item } }) } }) if (initialValues?.id) { editSysWarningRule.run({ ruleId: initialValues.id, rules: params, notifyFrequency, ruleName, warningType, defaultRule: defaultRule ? 1 : 0, enable: enable ? 1 : 0 }).then(res => { message.success('修改成功') onChange?.() }) } else { addSysWarningRule.run({ rules: params, notifyFrequency, ruleName, warningType, defaultRule: defaultRule ? 1 : 0, enable: enable ? 1 : 0 }).then(res => { message.success('新增成功') onChange?.() }) } } else { message.error('请添加最少一项规则') } }) } return {initialValues?.id ? '修改预警规则' : '新增预警规则'} (条件与条件之间是或者关系,条件内字段是并且关系, 满足任意一条件立即触发报警提醒) } visible={visible} onOk={handleOk} width={750} confirmLoading={addSysWarningRule.loading || editSysWarningRule.loading} onCancel={() => onClose?.()} >
规则名称} rules={[{ required: true, message: '请输入规则名称' }]}> 告警方式} rules={[{ required: true, message: '请选择通知频率' }]}> 通知频率} rules={[{ required: true, message: '请选择通知频率' }]}> Enable?} valuePropName="checked" rules={[{ required: true }]}> 是否默认规则} valuePropName="checked" rules={[{ required: true }]}>
{(fields, { add, remove }, { errors }) => <> <>{fields.map(({ key, name, ...restField }) => { return
条件{key + 1} {fields.length > 1 && remove(name)} okText="Yes" cancelText="No" > } 字段} name={[name, 'field']} rules={[{ required: true, message: '请选择字段' }]} > {rules?.[key]?.['field']?.map((field: string, index: number) => {MonitorFieldEnum[field]}} name={[name, field]} rules={[{ required: true, message: MonitorFieldEnum[field] + '的值不能为0', validator(rule, value, callback) { if (!value?.value) { return Promise.reject() } return Promise.resolve() }, }]} > )}
})} }
} export default React.memo(AddEdit)