如何在Suite CRM中使用jQuery根据合同起始日期和月数自动计算到期日?
在Suite CRM中用jQuery自动计算合同到期日
嘿,这个需求我之前帮人处理过,其实实现起来不难,咱们一步步来:
首先,你得先确认三个字段的实际ID——Suite CRM里的字段(尤其是自定义字段)ID通常是字段名_c的格式,比如你的合同起始日期如果是自定义字段,ID可能是#start_date_c,月数是#months_c,到期日是#end_date_c。你可以打开表单页面,右键点击字段选择「检查元素」,在浏览器控制台里找到对应的ID。
接下来,咱们写jQuery代码来实现自动计算:
$(document).ready(function() { // 监听起始日期和月数字段的变化,同时支持选择日期和手动输入 $('#start_date_c, #months_c').on('change keyup', function() { // 获取输入值 const startDateStr = $('#start_date_c').val(); const monthsToAdd = parseInt($('#months_c').val()); // 验证输入是否有效:日期为空、月数不是正整数时清空到期日 if (!startDateStr || isNaN(monthsToAdd) || monthsToAdd <= 0) { $('#end_date_c').val(''); return; } // 解析起始日期:Suite CRM默认是DD/MM/YYYY格式,要拆分处理 const [day, month, year] = startDateStr.split('/'); // JS的Date月份是0-based(0=1月),所以要减1 const startDate = new Date(year, month - 1, day); // 计算到期日:直接给月份加指定数量 const endDate = new Date(startDate); endDate.setMonth(endDate.getMonth() + monthsToAdd); // 把计算后的日期格式化为DD/MM/YYYY,补零保证两位数字 const formattedDay = String(endDate.getDate()).padStart(2, '0'); const formattedMonth = String(endDate.getMonth() + 1).padStart(2, '0'); const formattedYear = endDate.getFullYear(); // 设置到期日字段的值 $('#end_date_c').val(`${formattedDay}/${formattedMonth}/${formattedYear}`); }); });
几个关键细节要留意:
- 日期格式适配:Suite CRM默认用
DD/MM/YYYY,所以解析时必须按日、月、年的顺序拆分,不能用浏览器默认的解析逻辑。 - 月份的特殊处理:JavaScript的Date对象月份是从0开始计数的,所以解析和设置月份时要记得加/减1,不然会出现月份偏移的问题。
- 边界情况防护:如果用户没选日期、月数输入非数字或者负数,直接清空到期日,避免出现错误的计算结果。
- 事件覆盖:同时监听
change(选择日期时触发)和keyup(手动输入月数时触发),确保所有操作场景都能触发计算。
最后,把这段代码放到Suite CRM的自定义脚本里就行:你可以通过Studio进入对应模块的编辑页面,找到「自定义JavaScript」选项粘贴代码;或者直接把代码放到custom/modules/[你的模块名]/js/custom.js文件里,修复文件权限后重建系统缓存就生效了。
内容的提问来源于stack exchange,提问作者Sneha Ashtekar
相关产品推荐
相关产品推荐

