案例背景
这是一个企业绩效管理系统的智能表单解决方案,实现了主表与明细表之间的智能联动和数据验证功能。该系统主要用于:
-
绩效考核指标管理
-
财务数据自动识别
-
表单字段智能联动
技术实现方案
1. 核心功能设计
graph TD
A[主表字段变更] --> B[加载绩效指标数据]
B --> C[填充明细表]
C --> D[检查财务标记]
E[明细表变更] --> D
D --> F[更新主表财务标识]
2. 关键技术点
动态数据加载:
function getJxmx(value) {
return new Promise((resolve, reject) => {
$.ajax({
type: "POST",
url: "/api/performance-indicators",
data: { id: value },
dataType: "json"
})
.done(resolve)
.fail(reject);
});
}
明细表批量操作:
function fillDetailTable(data) {
WfForm.delDetailRow("detail_1", "all");
data.forEach(record => {
WfForm.addDetailRow("detail_1", {
["field1"]: {value: record.name},
["field2"]: {value: record.target},
// 其他字段映射...
});
});
}
智能财务识别:
function checkFinanceInvolvement() {
let hasFinanceData = false;
const rows = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
rows.forEach(row => {
const value = WfForm.getFieldValue(`dataSource_${row}`);
if (value === "finance") {
hasFinanceData = true;
}
});
WfForm.changeFieldValue("financeFlag", {value: hasFinanceData ? "1" : "0"});
}
3. 完整实现代码
/**
* 企业绩效表单智能联动解决方案
* 功能:绩效指标加载 + 财务数据自动识别
*/
class PerformanceForm {
constructor() {
this.initEvents();
this.checkFinanceFlag();
}
initEvents() {
// 主指标选择监听
WfForm.bindFieldChangeEvent("mainIndicator", this.loadIndicatorData.bind(this));
// 明细表变更监听
WfForm.bindDetailTableChangeEvent("details", this.checkFinanceFlag.bind(this));
}
async loadIndicatorData(obj, id, value) {
if (!value) {
WfForm.delDetailRow("details", "all");
return;
}
try {
const data = await this.fetchIndicatorData(value);
this.populateDetails(data);
} catch (error) {
console.error("数据加载失败:", error);
alert("指标数据加载失败");
} finally {
this.checkFinanceFlag();
}
}
fetchIndicatorData(id) {
return new Promise((resolve, reject) => {
$.ajax({
url: "/api/indicators",
data: { id },
success: resolve,
error: reject
});
});
}
populateDetails(data) {
WfForm.delDetailRow("details", "all");
data.forEach(item => {
WfForm.addDetailRow("details", {
["indicatorName"]: {value: item.name},
["targetValue"]: {value: item.target},
["dataSource"]: {value: item.source}
});
});
}
checkFinanceFlag() {
const hasFinanceData = this.detectFinanceData();
WfForm.changeFieldValue("hasFinance", {value: hasFinanceData ? "Y" : "N"});
}
detectFinanceData() {
const rows = WfForm.getDetailAllRowIndexStr("details").split(",");
return rows.some(row => {
const value = WfForm.getFieldValue(`dataSource_${row}`);
return value === "finance";
});
}
}
// 初始化表单
new PerformanceForm();
案例亮点
-
智能联动体系
-
主表字段变更自动触发明细表加载
-
明细表变化自动触发财务校验
-
全流程自动化无需人工干预
-
-
健壮性设计
-
Promise异步处理确保数据可靠性
-
完善的错误处理机制
-
空值安全检测
-
-
业务价值
-
减少人工操作错误率
-
表单处理效率提升
-
识别准确
-
最佳实践建议
-
性能优化:
// 使用防抖优化频繁操作 this.checkFinanceFlag = _.debounce(this._checkFinanceFlag, 300);
-
可配置化:
// 配置驱动而非硬编码 const config = { fields: { mainIndicator: "field10492", detailTable: "detail_1", // ...其他配置 } };
-
扩展性设计:
// 支持自定义校验规则 registerValidationRule('finance', value => value === '0');
适用场景扩展
该解决方案可适用于:
-
采购申请系统(自动识别政府采购项目)
-
项目管理系统(自动标记高风险任务)
总结评价
这个案例展示了如何通过前端智能联动实现:
-
复杂表单的简化操作
-
关键数据的自动验证
-
业务规则的自动执行
技术实现上采用了现代化的Promise异步处理、事件驱动架构和模块化设计,既保证了功能完整性又具有良好的可维护性。