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" import { OperationType } from "./ruleLog" 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, unTipWhenStop } = newValues console.log(rules) let params = rules?.map((item: any) => { const { field, operationType, operationValue, ...newItem } = item let ov = {} if (operationValue) { ov = { operationValue } } return { rule: Object.keys(newItem).filter(key => field.includes(key)).map(key => { return { ...newItem[key], field: key } }), operationType, ...ov } }) if (initialValues?.id) { editSysWarningRule.run({ ruleId: initialValues.id, rules: params, notifyFrequency, ruleName, warningType, defaultRule: defaultRule ? 1 : 0, enable: enable ? 1 : 0, unTipWhenStop }).then(res => { message.success('修改成功') onChange?.() }) } else { addSysWarningRule.run({ rules: params, notifyFrequency, ruleName, warningType, defaultRule: defaultRule ? 1 : 0, enable: enable ? 1 : 0, unTipWhenStop }).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 }]}> 暂停/删除广告不通知} valuePropName="checked" rules={[{ required: true }]}>
{(fields, { add, remove }) => <> <>{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() }, }]} > )} 操作类型} name={[name, 'operationType']} rules={[{ required: true }]} > {[3, 4].includes(rules?.[key]?.['operationType']) && 操作值} name={[name, 'operationValue']} rules={[{ required: true }]} > }
})} }
} export default React.memo(AddEdit)