4

关于如何在 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 行)获取的默认颜色呈现,但颜色参考正确显示在右侧的侧边栏上。

我将不胜感激有关此事的任何启示,它必须有可能使这项工作!

谢谢。

4

0 回答 0