关于如何在 Odoo-8 中实现这一点有一个很好的教程: 教程,但它不适用于 Odoo-12。
Odoo 原生允许您将模型的字段设置为日历视图中颜色区分的基础。
<calendar ... color="your_model_field">
问题是他会自动决定为每个值分配什么颜色。
我需要能够决定使用什么颜色映射。
在 web 模块 js 文件中进行一些潜水,更具体地说, 在第 266 行的
web/static/src/js/views/calendar/calendar_renderer.js
上,
我发现了一个很有前途的函数,它似乎是负责决定设置哪种颜色的函数。
getColor: function (key) {
if (!key) {
return;
}
if (this.color_map[key]) {
return this.color_map[key];
}
// check if the key is a css color
if (typeof key === 'string' && key.match(/^((#[A-F0-9]{3})|(#[A-F0-9]{6})|((hsl|rgb)a?\(\s*(?:(\s*\d{1,3}%?\s*),?){3}(\s*,[0-9.]{1,4})?\))|)$/i)) {
return this.color_map[key] = key;
}
var index = (((_.keys(this.color_map).length + 1) * 5) % 24) + 1;
this.color_map[key] = index;
return index;
},
此函数输入您的字段值(对于每个日历事件),并返回“假定”用作日历事件广场背景的颜色。
根据第二个 if 语句,如果您设法使用 color_map 对象实例化 CalendarRenderer 类,该对象具有字段的可能值作为键和颜色代码作为值,您应该没问题。
根据第三个 if 语句,如果您的字段的值是带有颜色代码(#FFF、rgb(x, y, z) 等)的字符串,它们将在 color_map 对象中设置并返回以用作背景颜色。
我猜最后一部分是在没有提供映射的情况下,odoo 如何决定颜色。
我尝试了两种具有相同效果的方法:
也就是说,所有日历事件都使用从 fullcalendar.css 样式表(第 529 行)获取的默认颜色呈现,但颜色参考正确显示在右侧的侧边栏上。
我将不胜感激有关此事的任何启示,它必须有可能使这项工作!
谢谢。