Create 主表字段变化对比修改背景颜色.js

从后端读取数据和流程字段对比是否有差异
This commit is contained in:
liozvqe 2025-09-16 11:53:09 +08:00
parent acbf9c9ec3
commit 4d706c21d5

View File

@ -0,0 +1,88 @@
//********************************************************************维护提示开始
// 新字段对象key 对应接口返回字段别名 field1, field2...
let newFieldIds = {
field1: "field43084", field2: "field43085", field3: "field43088", field4: "field43090", field5: "field43091",
field6: "field43092", field7: "field43093", field8: "field43094", field9: "field278852", field10: "field43095",
field11: "field278853"
};
let sz = ["field4", "field5", "field6", "field7"];
(async function () {
if (!xm) return;
// 初始获取接口数据
const responseArray = await fetchResponseData(56, xm);
if (!responseArray.length) return;
const responseData = responseArray[0]; // 假设只取第一条
renderDifferences(newFieldIds, responseData);
})();
// 绑定字段变更事件
const newFieldIdsStr = Object.values(newFieldIds).join(",");
WfForm.bindFieldChangeEvent(newFieldIdsStr, async function () {
const responseArray = await fetchResponseData(56, xm); // 保持原来的变量名
if (!responseArray.length) return;
renderDifferences(newFieldIds, responseArray[0]);
});
function renderDifferences(newFieldIds, responseData) {
let hasDifference = false; // 标记是否有差异
for (let key in newFieldIds) {
const newFieldId = newFieldIds[key];
const oldValue = responseData[key.toLowerCase()];
const newValue = WfForm.getFieldValue(newFieldId);
const elem = document.getElementsByClassName(newFieldId + "_swapDiv")[0]?.parentElement;
if (!elem) continue;
let isDifferent;
if (sz.includes(key)) {
// 数字字段比较
const oldNum = parseFloat(oldValue ?? "") || 0;
const newNum = parseFloat(newValue ?? "") || 0;
isDifferent = oldNum !== newNum;
} else {
// 字符串比较(忽略前后空格)
const oldStr = (oldValue ?? "").trim();
const newStr = (newValue ?? "").trim();
isDifferent = oldStr !== newStr;
}
if (isDifferent) hasDifference = true;
elem.style.background = isDifferent ? "#ccc" : "#fff";
}
}
//********************************************************************维护提示结束
//------------------------------------------------------------------------------------------------------------------------------获取数据函数
async function fetchResponseData(sqlId, ...values) {
try {
const vars = values.map(value => ({
value: value,
UUID: "",
notCleanExcerpts: ""
}));
const params = {
SQLID: sqlId,
vars: vars,
maxRunNum: ""
};
const url = `/api/esb/oa/execute?eventkey=ExecuteMySQL&params=${encodeURIComponent(JSON.stringify(params))}`;
const result = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
}
});
const data = await result.json();
if (data.msg === "执行成功" && Array.isArray(data.data?.res)) {
return data.data.res.map(record => {
const obj = JSON.parse(record);
return Object.fromEntries(
Object.entries(obj).map(([key, val]) => [key.toLowerCase(), val])
);
});
} else {
console.error("返回数据失败msg 不是 '执行成功' 或缺少 res 字段", data);
return [];
}
} catch (error) {
console.error("获取数据失败:", error);
return [];
}
}