
**问题描述**

现场有些客户希望差旅报销单这里的住宿和补助天数可以支持个性化计算
**问题分析**

目前标准产品预留有public方法calEvectionDays可以扩展进行重新计算
**解决方案**
重写标准方法记得需要先进行缓存,具体参考代码如下:
```language
waf.extend(_private,{
calcSubDays: function(startDate, endDate) {
// 计算两个日期的差值,返回天数,参数为date或者格式为"yy-mm-dd"的字符串
startDate =startDate.split(" ")[0];
endDate =endDate.split(" ")[0];
if (!startDate || !endDate) {
return 0;
}
if (!(startDate instanceof Date)) {
// startDate转换为Date类型
var values = startDate.split("-");
startDate = new Date(values[0], values[1] - 1, values[2]);
}
if (!(endDate instanceof Date)) {
// endDate转换为Date类型
var values = endDate.split("-");
endDate = new Date(values[0], values[1] - 1, values[2]);
}
var days = ((endDate - startDate) / (1000 * 60 * 60 * 24));
if (days >= 0) {
return days + 1;
} else {
// 非法时间差返回0天
return 0;
}
}
});//@endPrivate
waf.extend(_public,{
//缓存标准方法
super_calEvectionDays:_self.calEvectionDays
});
TravelAccountBill_Edit_Open.calEvectionDays = function(value, event) {
//先走标准逻辑
_public.super_calEvectionDays(value, event);
//这里再添加二开逻辑
var startDate = $.datepicker.formatDateTime("yy-mm-dd", "hh:mm:ss", waf("#entryStartDate").wafDatePicker("getValue"));
var endDate = $.datepicker.formatDateTime("yy-mm-dd", "hh:mm:ss", waf("#entryEndDate").wafDatePicker("getValue"));
if(startDate && endDate && startDate > endDate){
_self.showMessage(_self._localeStr.IS_NOT_GREATER_THAN);
}
var evectionDays = _private.calcSubDays(startDate, endDate);
//可以在此重新计算天数
if (evectionDays >0 ){
waf("#entryRoomDays").wafNumberField("setValue",evectionDays);
waf("#entryAllowanceDays").wafNumberField("setValue",evectionDays);
}else{
waf("#entryAllowanceDays").wafNumberField("setValue",0);
waf("#entryRoomDays").wafNumberField("setValue",0);
}
}
```