字段联动示例
本页面通过实际案例展示如何使用 Kinlink API 实现各种表单字段联动效果。
基础字段联动
展示最基本的字段联动场景,包括显示/隐藏字段、设置必填等操作。
JavaScript
// 基础字段联动示例
(function() {
kinlink.events.on(kinlink.FormEvents.FORM_LOADED, () => {
const form = kinlink.formApi;
// 初始化时隐藏相关字段
form.hideField('其他部门名称');
form.hideField('额外审批人');
});
kinlink.events.on(kinlink.FormEvents.FIELD_CHANGE, (data) => {
const { fieldName, value } = data;
const form = kinlink.formApi;
// 部门选择联动
if (fieldName === '部门') {
if (value === '其他') {
form.showField('其他部门名称');
form.setFieldRequired('其他部门名称', true);
} else {
form.hideField('其他部门名称');
form.setFieldRequired('其他部门名称', false);
}
}
// 金额与审批人联动
if (fieldName === '申请金额') {
const amount = parseFloat(value);
if (amount > 10000) {
form.showField('额外审批人');
form.setFieldRequired('额外审批人', true);
form.showMessage('warning', '金额超过1万元,需要额外审批', 5);
} else {
form.hideField('额外审批人');
form.setFieldRequired('额外审批人', false);
}
}
});
})();级联选择
实现城市和区域的级联选择效果,动态更新选项内容。
JavaScript
// 级联选择示例
(function() {
// 模拟数据
const cityData = {
'北京': ['朝阳区', '海淀区', '东城区', '西城区'],
'上海': ['浦东新区', '静安区', '黄浦区', '徐汇区'],
'广州': ['天河区', '越秀区', '海珠区', '白云区']
};
kinlink.events.on(kinlink.FormEvents.FIELD_CHANGE, (data) => {
const { fieldName, value } = data;
const form = kinlink.formApi;
if (fieldName === '城市') {
const districts = cityData[value] || [];
// 更新区域选项
form.setFieldOptions('区域', districts.map(district => ({
label: district,
value: district
})));
// 清空已选区域
form.setFieldValue('区域', undefined);
// 根据是否有区域选项控制字段状态
if (districts.length > 0) {
form.showField('区域');
form.setFieldRequired('区域', true);
} else {
form.hideField('区域');
form.setFieldRequired('区域', false);
}
}
});
})();自动计算
根据多个字段的值自动计算结果,并根据计算结果更新界面。
JavaScript
// 自动计算示例
(function() {
function calculateTotal(quantity, price, discount) {
quantity = parseFloat(quantity) || 0;
price = parseFloat(price) || 0;
discount = parseFloat(discount) || 0;
const subtotal = quantity * price;
const discountAmount = subtotal * (discount / 100);
return (subtotal - discountAmount).toFixed(2);
}
kinlink.events.on(kinlink.FormEvents.FIELD_CHANGE, (data) => {
const { fieldName } = data;
const form = kinlink.formApi;
// 当数量、单价或折扣变化时重新计算总价
if (['数量', '单价', '折扣'].includes(fieldName)) {
const quantity = form.getFieldValue('数量');
const price = form.getFieldValue('单价');
const discount = form.getFieldValue('折扣');
const total = calculateTotal(quantity, price, discount);
form.setFieldValue('总价', total);
// 设置高额订单提示
if (parseFloat(total) > 10000) {
form.setFieldLabelStyle('总价', { color: '#ff4d4f' });
form.showMessage('warning', '这是一个高额订单');
} else {
form.setFieldLabelStyle('总价', { color: '#000000' });
}
}
});
})();应用场景
- 条件显示/隐藏
- 动态必填控制
- 选项联动更新
- 自动计算与提示
实现要点
- 合理使用事件监听
- 处理异常情况
- 优化性能
- 提供用户反馈
最佳实践
- 使用 IIFE 封装代码,避免全局变量污染
- 在 FORM_LOADED 事件中进行初始化
- 注意处理字段值为空的情况
- 提供适当的用户提示和反馈