【转摘】odoo不用鼠标快速录入日期
原文来自odoo哥公众号
odoo日期类型字段的快捷录入
原创 odoo哥 Odoo哥
2025年01月17日 09:24 湖南
在odoo应用中,日期类型的字段比较常见。一般操作人员在UI录入日期时,都是通过鼠标点击,弹出日历下拉,然后选择不同的年、月、日。如果需要选择的年或月不是当前年月,还要去切换,这样可能会影响录入的效率。其实在Odoo框架源码中,有针对日期类型字段的快捷录入方式。我们来看源码:
addons\web\static\src\core\l10n\dates.js
关键的方法是:
/**
* Smart date inputs are shortcuts to write dates quicker.
* These shortcuts should respect the format ^[+-]\d+[dmwy]?$
*
* e.g.
* "+1d" or "+1" will return now + 1 day
* "-2w" will return now - 2 weeks
* "+3m" will return now + 3 months
* "-4y" will return now + 4 years
*
* @param {string} value
* @returns {NullableDateTime} Luxon datetime object (in the user's local timezone)
*/
function parseSmartDateInput(value) {
const match = value.match(smartDateRegex);
if (match) {
let date = DateTime.local();
const offset = parseInt(match[2], 10);
const unit = smartDateUnits[(match[3] || "d").toLowerCase()];
if (match[1] === "+") {
date = date.plus({ [unit]: offset });
} else {
date = date.minus({ [unit]: offset });
}
return date;
}
return false;
}
从这里可以看出,在日期型字段,我们可以录入一个类似‘+10'、'+3w'、'-1m'、'+1y'这样的字符串,odoo将根据录入内容自动计算出日期值。第一个符号为'+','-'号,表示在当前日期之后还是之前,后面跟着一个数字,最后面是一个字母:d-天,m-月,w-周,y-年,如果不带字母的表示默认为天。
比如今天是2025年1月17号,我在报价单的日期字段录入下图所示的内容:
图片
然后按回车键,系统将自动变换为15天后的日期:
图片
好啦,这么好用的功能赶快写到用户操作手册中去吧,告诉客户他可以不用鼠标快速地录入想要的日期啦。