react form判断哪个参数,新值和旧值是否改变

import moment from 'moment';
import { message } from 'antd';

// ✅ 唯一需要修改的地方:字段配置(新增下拉框只加这里)
const logFields = [
  { field: 'theNative', label: '中外', ds: 'dsNative' }, // ds=数据源key
  { field: 'sex', label: '性别', ds: 'dsSex' },
  { field: 'filiale', label: '分公司', ds: 'dsFiliale' },
  { field: 'cname', label: '姓名' }, // 普通文本不用写ds
  { field: 'weekPlantime', label: '周计划时间' },
  { field: 'isValid', label: '状态', map: { '1': '有效', '0': '无效' } }, // 静态映射
];

// 👇 核心:生成修改日志(一行搞定所有下拉框)
const genLogs = (old: any, new: any, ds: any) => logFields
  .map(({ field, label, ds: key, map }) => {
    const getVal = (v: any) => {
      if (!v) return '';
      if (map) return map[v] || v;
      if (key) return ds?.[key]?.filter(Boolean).find((i: any) => i.code === v)?.name || v;
      return v;
    };
    const [o, n] = [getVal(old[field]), getVal(new[field])];
    return o !== n ? {
      operType: '修改',
      opTo: new.cname || old.cname,
      opContent: `${label}由(${o})改为(${n})`,
      opBy: localStorage.userName || localStorage.userCode || '',
      opTime: moment().format('YYYY年MM月dd日 HH:mm'),
      opField: field,
      opOValue: o,
      opNValue: n,
      fromHost: window.location.hostname,
    } : null;
  })
  .filter(Boolean);

// 👇 保存函数(直接用)
const handleSave = async () => {
  try {
    const values = await form.validateFields();
    await savePersonInfoApi(values);

    // 公司授权逻辑(保留不变)
    const oldF = originalData.filiale || '', newF = values.filiale || '';
    if (oldF !== newF && ['MF05','MF07','MF08'].includes(oldF) && ['MF05','MF07','MF08'].includes(newF)) {
      await saveCrewExpApi(values.pcode, oldF, newF);
    }

    // ✅ 一行生成日志,直接传入 BaseInfoLoadData
    const logs = genLogs(originalData, values, BaseInfoLoadData);
    if (logs.length) await addPersonLogApi(logs);

    setOriginalData(values);
    message.success(logs.length ? `保存成功,记录${logs.length}条变更` : '保存成功');
  } catch {
    message.error('保存失败');
  }
};

 

posted @ 2026-05-22 08:11  小蘑菇123  阅读(9)  评论(0)    收藏  举报